| #!/usr/bin/perl |
| |
| # ********************************************************** |
| # Copyright (c) 2007 VMware, Inc. All rights reserved. |
| # ********************************************************** |
| |
| # Redistribution and use in source and binary forms, with or without |
| # modification, are permitted provided that the following conditions are met: |
| # |
| # * Redistributions of source code must retain the above copyright notice, |
| # this list of conditions and the following disclaimer. |
| # |
| # * Redistributions in binary form must reproduce the above copyright notice, |
| # this list of conditions and the following disclaimer in the documentation |
| # and/or other materials provided with the distribution. |
| # |
| # * Neither the name of VMware, Inc. nor the names of its contributors may be |
| # used to endorse or promote products derived from this software without |
| # specific prior written permission. |
| # |
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| # ARE DISCLAIMED. IN NO EVENT SHALL VMWARE, INC. OR CONTRIBUTORS BE LIABLE |
| # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
| # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
| # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH |
| # DAMAGE. |
| |
| # Script to post-process the latex auto-generated with doxygen. It |
| # looks like doxygen is pretty rigid about where it puts chapters and |
| # sections; we'll clean up the latex ourselves before generating the |
| # pdf. Our approach is to try to replicate the structure of the html |
| # output. |
| |
| $html_dir = "$ARGV[0]/html"; |
| $latex_dir = "$ARGV[0]/latex"; |
| |
| $html_file = "$html_dir/tree.html"; |
| $latex_file = "$latex_dir/refman.tex"; |
| |
| $latex_style = "$latex_dir/doxygen.sty"; |
| |
| # |
| # Read the first part of the current latex file, up until the first |
| # \chapter declaration. That portion will remain the same. |
| # |
| $latex = ""; |
| open (IN, $latex_file) || die "ERROR: can't open $latex_file\n"; |
| while (<IN>) { |
| last if ($_ =~ /^\\chapter/); |
| if (/Generated by Doxygen/) { |
| # eat the next two lines |
| $_ = <IN>; # vspace line |
| $_ = <IN>; |
| die "ERROR: unexpected line" unless (/^{\\small/); |
| } else { |
| $latex .= $_; |
| } |
| } |
| close (IN); |
| |
| open (OUT, ">$latex_file") || die "ERROR: can't overwrite $latex_file\n"; |
| print OUT $latex; |
| |
| # |
| # Now parse the html file and match its layout. |
| # |
| open (IN, $html_file) || die "ERROR: can't open $html_file\n"; |
| |
| $level = -1; |
| while (<IN>) { |
| if ($_ =~ /<p>.*href=\"(.+)\.html\".*>(.*)<\/a><\/p>/) { |
| if (-e "$latex_dir/$1.tex") { |
| if ($level == 1) { |
| print OUT "\\chapter{$2}\n"; |
| } |
| print OUT "\\input{$1}\n"; |
| } |
| } |
| elsif ($_ =~ /<div/) { |
| $level++; |
| } |
| elsif ($_ =~ /<\/div/) { |
| $level--; |
| } |
| } |
| |
| print OUT "\\printindex\n\\end{document}\n"; |
| |
| close (IN); |
| close (OUT); |
| |
| # now process the style file |
| $latex = ""; |
| open (IN, $latex_style) || die "ERROR: can't open $latex_style\n"; |
| while (<IN>) { |
| # put in our logo and statement in the footers |
| if (/^\\rfoot/) { |
| $latex .= "\\rfoot[\\fancyplain{}{\\bfseries\\scriptsize \\raisebox{1ex}{DynamoRIO API\\ \\ \\ } \\includegraphics[width=4ex]{drlogo} }]{}\n"; |
| } elsif (/^\\lfoot/) { |
| $latex .= "\\lfoot[]{\\fancyplain{}{\\bfseries\\scriptsize \\includegraphics[width=4ex]{drlogo} \\raisebox{1ex}{\\ \\ \\ DynamoRIO API} }}\n"; |
| } else { |
| $latex .= $_; |
| } |
| } |
| close (IN); |
| open (OUT, ">$latex_style") || die "ERROR: can't overwrite $latex_style\n"; |
| print OUT $latex; |
| close (OUT); |
| |