--- doc/help/texxml2latex.pl 2003/07/01 18:20:52 1.4 +++ doc/help/texxml2latex.pl 2003/07/21 15:22:14 1.7 @@ -30,58 +30,88 @@ use strict; use HTML::TokeParser; use GDBM_File; +use File::Temp; # accept texxml document on standard in my $p = HTML::TokeParser->new( $ARGV[0] ); my $dirprefix = "../../loncom/html/adm/help/tex/"; +# Make myself a temp dir for processing POD +my $tmpdir = File::Temp::tempdir('loncapahelpgenXXXXXXX', TMPDIR => 1); + # Print the header open (LATEX_FILE, $dirprefix . "Latex_Header.tex"); print ; - while (my $token = $p->get_token()) { my $type = $token->[0]; - if ($type eq 'S') - { + if ($type eq 'S') { my $tag = $token->[1]; my $attr = $token->[2]; - if ($tag eq 'section') - { + if ($tag eq 'section') { my $title = $attr->{'name'}; print "\\section{$title}\n\n"; } - if ($tag eq 'subsection') - { + if ($tag eq 'subsection') { my $title = $attr->{'name'}; print "\\subsection{$title}\n\n"; } - if ($tag eq 'subsubsection') - { + if ($tag eq 'subsubsection') { my $title = $attr->{'name'}; print "\\subsubsection{$title}\n\n"; } - if ($tag eq 'file') - { + if ($tag eq 'file') { my $file = $attr->{'name'}; open (LATEX_FILE, $dirprefix . $file); print ; print "\n\n"; } - if ($tag eq 'tex') - { + if ($tag eq 'tex') { print "\n\n"; print $attr->{'content'}; print "\n\n"; } + + if ($tag eq 'pod') { + my $file = $attr->{'file'}; + my $section = $attr->{'section'}; + if (!defined($section)) { $section = ''; } + else { + $section = "-section $section"; + # Escape the pipes so they are considered ORs in the + # RE for podselect's "section" option, and not + # pipes by the shell: + $section =~ s/\|/\\\|/g; + } + $file = '../../loncom/' . $file; + my $tempfile = 't' . substr($file, rindex($file, '/') + 1); + system ("cp $file $tmpdir"); + # The "echo" command is necessary; pod2latex can't + # handle a perl file that *starts* with pod. + system ("echo > $tmpdir/$tempfile; cat $file | podselect $section >> $tmpdir/$tempfile; cd $tmpdir; pod2latex -h1level 2 $tempfile"); + my $latexFile = substr($tempfile, 0, rindex($tempfile, '.')) . '.tex'; + open LATEX_FILE, $tmpdir . '/' . $latexFile; + # pod2latex inserts \labels and \indexs for every section, + # which is horrible because the section names tend to get + # reused a lot. This filters those out, so we need to do + # create our own indexes. + for () { + $_ =~ s/\\([^{]*)section(\*?)\{([^\\]+)\\label\{[^\\]+\}\\index\{([^\\]+)\}\}/\\\1section\2\{\3\}/g; + print $_; + } + print "\n\n"; + } } } # Print out the footer. open (LATEX_FILE, $dirprefix . "Latex_Footer.tex"); print ; + +# Remove the temp directory +system ("rm -rf $tmpdir");