--- doc/help/texxml2latex.pl 2002/07/05 16:12:30 1.1 +++ doc/help/texxml2latex.pl 2003/07/18 20:58:33 1.6 @@ -1,55 +1,103 @@ #!/usr/bin/perl +# The LearningOnline Network with CAPA +# Converts a texxml file into a single tex file +# +# Copyright Michigan State University Board of Trustees +# +# This file is part of the LearningOnline Network with CAPA (LON-CAPA). +# +# LON-CAPA is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# LON-CAPA is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LON-CAPA; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# /home/httpd/html/adm/gpl.txt +# +# http://www.lon-capa.org/ +# +# 7-16-2002 Jeremy Bowers + 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 = "/home/httpd/html/adm/help/tex/"; +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') - { - print "\n"; + if ($tag eq 'tex') { + print "\n\n"; print $attr->{'content'}; - print "\n"; + 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; + print ; + print "\n\n"; } } } @@ -57,3 +105,6 @@ while (my $token = $p->get_token()) # Print out the footer. open (LATEX_FILE, $dirprefix . "Latex_Footer.tex"); print ; + +# Remove the temp directory +system ("rm -rf $tmpdir");