From: Karl C. <ka...@us...> - 2005-05-23 19:54:00
|
Update of /cvsroot/bacula/docs/manual In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3437/manual Modified Files: bacula.perl Log Message: Improved implementation of not building images unless required. Index: bacula.perl =================================================================== RCS file: /cvsroot/bacula/docs/manual/bacula.perl,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -r1.1.1.1 -r1.2 --- bacula.perl 13 May 2005 17:23:00 -0000 1.1.1.1 +++ bacula.perl 23 May 2005 19:53:50 -0000 1.2 @@ -1,3 +1,11 @@ +# This file contains subroutines for use by the latex2html system. +# This file is executed due to a \usepackage{bacula} statement +# in the LaTeX source. The subroutines here impliment functionality +# specific to the generation of html manuals for the Bacula project. +# Some of the added functionality is designed to extend the capabiltites +# of latex2html and some is to change its behavior. + + # Returns the minimum of any number of numeric arguments. sub min { my $tmp = shift; @@ -340,17 +348,6 @@ # sub make_image_file { do { - my $tmp = $latex_body; - open KC,">imagename_translations" or die "Cannot open filename translation file for writing"; - while ($tmp =~ /\\lthtmlpictureA\{(.*?)\}\%\n\\includegraphics\{(.*?)\}\%/) { - $tmp = $'; - my $id = $id_map{$1}; - my $oldname = $2; - $id =~ s/\#.*//; - print KC "img$id.png\001$oldname\n"; - } - close KC; - print "\nWriting image file ...\n"; open(ENV,">.$dd${PREFIX}images.tex") || die "\nCannot write '${PREFIX}images.tex': $!\n"; @@ -363,5 +360,191 @@ } +# KEC +# Copied from latex2html.pl and modified to create a file of image translations. + +# The problem is that latex2html creates new image filenames like imgXXX.png, where +# XXX is a number sequentially assigned. This is fine but makes for very unfriendly +# image filenames. I looked into changing this behavior and it seems very much embedded +# into the latex2html code, not easy to change without risking breaking something. +# So I'm taking the approach here to write out a file of image filename translations, +# to reference the original filenames from the new filenames. THis post-processing +# can be done outside of latex2html to rename the files and substitute the meaningful +# image names in the html code generated by latex2html. This post-processing is done +# by a program external to latex2html. +# +# What we do is this: This subroutine is called to output process images. Code has been inserted +# about 100 lines below this to create the list of filenames to translate. See comments there for +# details. +# + +# Generate images for unknown environments, equations etc, and replace +# the markers in the main text with them. +# - $cached_env_img maps encoded contents to image URL's +# - $id_map maps $env$id to page numbers in the generated latex file and after +# the images are generated, maps page numbers to image URL's +# - $page_map maps page_numbers to image URL's (temporary map); +# Uses global variables $id_map and $cached_env_img, +# $new_page_num and $latex_body + + +sub make_images { + local($name, $contents, $raw_contents, $uucontents, $page_num, + $uucontents, %page_map, $img); + # It is necessary to run LaTeX this early because we need the log file + # which contains information used to determine equation alignment + if ( $latex_body =~ /newpage/) { + print "\n"; + if ($LATEX_DUMP) { + # dump a pre-compiled format + if (!(-f "${PREFIX}images.fmt")) { + print "$INILATEX ./${PREFIX}images.tex\n" + if (($DEBUG)||($VERBOSITY > 1)); + print "dumping ${PREFIX}images.fmt\n" + unless ( L2hos->syswait("$INILATEX ./${PREFIX}images.tex")); + } + local ($img_fmt) = (-f "${PREFIX}images.fmt"); + if ($img_fmt) { + # use the pre-compiled format + print "$TEX \"&./${PREFIX}images\" ./${PREFIX}images.tex\n" + if (($DEBUG)||($VERBOSITY > 1)); + L2hos->syswait("$TEX \"&./${PREFIX}images\" ./${PREFIX}images.tex"); + } elsif (-f "${PREFIX}images.dvi") { + print "${PREFIX}images.fmt failed, proceeding anyway\n"; + } else { + print "${PREFIX}images.fmt failed, trying without it\n"; + print "$LATEX ./${PREFIX}images.tex\n" + if (($DEBUG)||($VERBOSITY > 1)); + L2hos->syswait("$LATEX ./${PREFIX}images.tex"); + } + } else { &make_latex_images() } +# local($latex_call) = "$LATEX .$dd${PREFIX}images.tex"; +# print "$latex_call\n" if (($DEBUG)||($VERBOSITY > 1)); +# L2hos->syswait("$latex_call"); +## print "$LATEX ./${PREFIX}images.tex\n" if (($DEBUG)||($VERBOSITY > 1)); +## L2hos->syswait("$LATEX ./${PREFIX}images.tex"); +## } + $LaTeXERROR = 0; + &process_log_file("./${PREFIX}images.log"); # Get image size info + } + if ($NO_IMAGES) { + my $img = "image.$IMAGE_TYPE"; + my $img_path = "$LATEX2HTMLDIR${dd}icons$dd$img"; + L2hos->Copy($img_path, ".$dd$img") + if(-e $img_path && !-e $img); + } + elsif ((!$NOLATEX) && ($latex_body =~ /newpage/) && !($LaTeXERROR)) { + print "\nGenerating postscript images using dvips ...\n"; + &make_tmp_dir; # sets $TMPDIR and $DESTDIR + $IMAGE_PREFIX =~ s/^_//o if ($TMPDIR); + + local($dvips_call) = + "$DVIPS -S1 -i $DVIPSOPT -o$TMPDIR$dd$IMAGE_PREFIX .${dd}${PREFIX}images.dvi\n"; + print $dvips_call if (($DEBUG)||($VERBOSITY > 1)); + + if ((($PREFIX=~/\./)||($TMPDIR=~/\./)) && not($DVIPS_SAFE)) { + print " *** There is a '.' in $TMPDIR or $PREFIX filename;\n" + . " dvips will fail, so image-generation is aborted ***\n"; + } else { + &close_dbm_database if $DJGPP; + L2hos->syswait($dvips_call) && print "Error: $!\n"; + &open_dbm_database if $DJGPP; + } + + # append .ps suffix to the filenames + if(opendir(DIR, $TMPDIR || '.')) { + # use list-context instead; thanks De-Wei Yin <yi...@as...> + my @ALL_IMAGE_FILES = grep /^$IMAGE_PREFIX\d+$/o, readdir(DIR); + foreach (@ALL_IMAGE_FILES) { + L2hos->Rename("$TMPDIR$dd$_", "$TMPDIR$dd$_.ps"); + } + closedir(DIR); + } else { + print "\nError: Cannot read dir '$TMPDIR': $!\n"; + } + } + do {print "\n\n*** LaTeXERROR"; return()} if ($LaTeXERROR); + return() if ($LaTeXERROR); # empty .dvi file + L2hos->Unlink(".$dd${PREFIX}images.dvi") unless $DEBUG; + + print "\n *** updating image cache\n" if ($VERBOSITY > 1); + while ( ($uucontents, $_) = each %cached_env_img) { + delete $cached_env_img{$uucontents} + if ((/$PREFIX$img_rx\.$IMAGE_TYPE/o)&&!($DESTDIR&&$NO_SUBDIR)); + $cached_env_img{$uucontents} = $_ + if (s/$PREFIX$img_rx\.new/$PREFIX$1.$IMAGE_TYPE/go); + } + + # Modified from the original latex2html to translate image filenames to meaningful ones. + # KEC 5-22-05. + print "\nWriting imagename_translations file\n"; + open KC,">imagename_translations" or die "Cannot open filename translation file for writing"; + my ($oldname_kc,$newname_kc,$temp_kc,%done_kc); + while ((undef,$temp_kc) = each %id_map) { + # Here we generate the file containing the list if old and new filenames. + # The old and new names are extracted from variables in scope at the time + # this is run. The values of the %id_map has contain either the number of the + # image file to be created (if an old image file doesn't exist) or the tag to be placed + # inside the html file (if an old image file does exist). We extract the info in either + # case. + if ($temp_kc =~ /^\d+\#\d+$/) { + my $kcname; + $kcname = $orig_name_map{$temp_kc}; + $kcname =~ s/\*/star/; + ($oldname_kc) = $img_params{$kcname} =~ /ALT=\"\\includegraphics\{(.*?)\}/s; + ($newname_kc) = split (/#/,$temp_kc); + $newname_kc = "img" . $newname_kc . ".png"; + } else { + ($newname_kc,$oldname_kc) = $temp_kc =~ /SRC=\"(.*?)\".*ALT=\"\\includegraphics\{(.*?)\}/s; + } + print KC "$newname_kc\001$oldname_kc\n" if (!exists($done_kc{$newname_kc})); + $done_kc{$newname_kc} = ''; + } + close KC; + + print "\n *** removing unnecessary images ***\n" if ($VERBOSITY > 1); + while ( ($name, $page_num) = each %id_map) { + $contents = $latex_body{$name}; + + if ($page_num =~ /^\d+\#\d+$/) { # If it is a page number + do { # Extract the page, convert and save it + $img = &extract_image($page_num,$orig_name_map{$page_num}); + if ($contents =~ /$htmlimage_rx/) { + $uucontents = &special_encoding($env,$2,$contents); + } elsif ($contents =~ /$htmlimage_pr_rx/) { + $uucontents = &special_encoding($env,$2,$contents); + } else { + $uucontents = &encode(&addto_encoding($contents,$contents)); + } + if (($HTML_VERSION >=3.2)||!($contents=~/$order_sensitive_rx/)){ + $cached_env_img{$uucontents} = $img; + } else { + # Blow it away so it is not saved for next time + delete $cached_env_img{$uucontents}; + print "\nimage $name not recycled, contents may change (e.g. numbering)"; + } + $page_map{$page_num} = $img; + } unless ($img = $page_map{$page_num}); # unless we've just done it + $id_map{$name} = $img; + } else { + $img = $page_num; # it is already available from previous runs + } + print STDOUT " *** image done ***\n" if ($VERBOSITY > 2); + } + &write_warnings( + "\nOne of the images is more than one page long.\n". + "This may cause the rest of the images to get out of sync.\n\n") + if (-f sprintf("%s%.3d%s", $IMAGE_PREFIX, ++$new_page_num, ".ps")); + print "\n *** no more images ***\n" if ($VERBOSITY > 1); + # MRO: The following cleanup seems to be incorrect: The DBM is + # still open at this stage, this causes a lot of unlink errors + # + #do { &cleanup; print "\n *** clean ***\n" if ($VERBOSITY > 1);} + # unless $DJGPP; +} + + + + 1; # Must be present as the last line. |