--- loncom/interface/printout.pl 2003/07/24 14:57:54 1.31 +++ loncom/interface/printout.pl 2004/02/03 00:02:15 1.42 @@ -1,29 +1,96 @@ #!/usr/bin/perl +# CGI-script to run LaTeX, dvips, ps2ps, ps2pdf etc. +# +# $Id: printout.pl,v 1.42 2004/02/03 00:02:15 albertel Exp $ +# +# 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/ +# + +use lib '/home/httpd/lib/perl'; +use LONCAPA::loncgi(); +use File::Path; use IO::File; use Image::Magick; + +if (! &LONCAPA::loncgi::check_cookie_and_load_env()) { + print < +Bad Cookie + +Your cookie information is incorrect. + + +END + return; +} + print "Content-type: text/html\n\n"; print "\n"; - my ($texfile,$laystyle,$numberofcolumns,$selectionmade) = split(/&/,$ENV{'QUERY_STRING'}); + + my $identifier = $ENV{'QUERY_STRING'}; + my $texfile = $ENV{'cgi.'.$identifier.'.file'}; + my $laystyle = $ENV{'cgi.'.$identifier.'.layout'}; + my $numberofcolumns = $ENV{'cgi.'.$identifier.'.numcol'}; + my $selectionmade = $ENV{'cgi.'.$identifier.'.selection'}; + my $tableofcontents = $ENV{'cgi.'.$identifier.'tableofcontents'}; + my $tableofindex = $ENV{'cgi.'.$identifier.'tableofindex'}; + my $advans_role = $ENV{'cgi.'.$identifier.'role'}; + my $figfile = $texfile; $figfile =~ s/^([^\.]+printout)[^t]+\.tex/$1\.dat/; my $duefile = $texfile; $duefile =~ s/^([^\.]+printout)[^t]+\.tex/$1\.due/; #do we have figures? if (-e $figfile) { + my %done_conversion; my $temporary_file=IO::File->new($figfile) || die "Couldn't open file for reading: $!\n"; my @content_of_file = <$temporary_file>; close $temporary_file; my $noteps; foreach $not_eps (@content_of_file) { if ($not_eps ne '') { + $not_eps=~s|\/\.\/|\/|g; my $eps_f = $not_eps; $eps_f =~ s/\.[^.]*$/\.eps/i; - $_ = $eps_f; - m/\/([^\/]+)$/; - $eps_f = '/home/httpd/prtspool/'.$1; + if ($eps_f=~/\/home\/([^\/]+)\/public_html\//) { + $eps_f=~s/\/home\/([^\/]+)\/public_html/$1/; + $eps_f = '/home/httpd/prtspool/'.$eps_f; + } else { + $eps_f=~m/\/home\/httpd\/html\/res\/(.+)/; + $eps_f = '/home/httpd/prtspool/'.$1; + } + my $path=$eps_f; + $path=~s/\/([^\/]+)\.eps$//; + File::Path::mkpath($path,0,0777); my $image = Image::Magick->new; $not_eps =~ s/^\s+//; $not_eps =~ s/\s+$//; + if ( exists($done_conversion{$not_eps})) { + next; + } + $done_conversion{$not_eps}=1; $status = $image->Read($not_eps); if ($status) {print " $status ";} $image->Set(page => '+100+200'); @@ -40,7 +107,6 @@ use Image::Magick; } } } - unlink $figfile; } #print "$texfile\n"; #name of the tex file for debugging only if (-e $texfile) { @@ -49,6 +115,15 @@ use Image::Magick; my $path_file = $1.'/'; chdir $path_file; system("latex $name_file 1>/dev/null 2>/dev/null"); + if ($tableofcontents eq 'yes') { + system("latex $name_file 1>/dev/null 2>/dev/null"); + } #to create table of contents + my $idxname=$name_file; + $idxname=~s/\.tex$/\.idx/; + if ($tableofindex eq 'yes') { + system("makeindex $idxname"); + system("latex $name_file 1>/dev/null 2>/dev/null"); + } #to create index #Do we have a latex error in the log file? my $logfilename = $texfile; $logfilename =~ s/\.tex$/\.log/; @@ -80,7 +155,27 @@ use Image::Magick; if ($sygnal) { print "$content_of_file[$i]
"; } - } + } + if ($advans_role) { + print "The link to "; + $logfilename=~s/\/home\/httpd//; + print "Your log file "; + print "\n"; + #link tooriginal LaTeX file (included according Michael Hamlin desire) + my $tex_temporary_file=IO::File->new($texfile) || die "Couldn't open file for reading: $!\n"; + my @tex_content_of_file = <$tex_temporary_file>; + close $tex_temporary_file; + my $body_tex_file = join(' ',@tex_content_of_file); + $texfile =~ s/\.tex$/aaaaa\.html/; + $tex_temporary_file = IO::File->new('>'.$texfile); + print $tex_temporary_file 'LOGFILE
'.$body_tex_file.'
'."\n"; + print "

"; + print "The link to "; + $texfile=~s/\/home\/httpd//; + print "Your original LaTeX file "; + print "\n"; + } + } elsif ($body_log_file=~m//) { my $whereitbegins = index $body_log_file,''; print "You are running LaTeX in the batch mode."; @@ -88,7 +183,7 @@ use Image::Magick; my $tempobegin=$whereitbegins; $whereitbegins = rindex $body_log_file,'STAMPOFPASSEDRESOURCESTART',$whereitbegins; my $whereitends = index $body_log_file,'STAMPOFPASSEDRESOURCEEND',$whereitbegins; - print "
It has found an error in".substr($body_log_file,$whereitbegins+26,$whereitends-$whereitbegins-26)." and corrected it.\n"; + print "
It has found an error in".substr($body_log_file,$whereitbegins+26,$whereitends-$whereitbegins-26)."
and corrected it.\n"; print "Usually this correction is valid but you probably need to check the indicated resource one more time and implement neccessary corrections by yourself.\n"; $whereitbegins = index $body_log_file,'',$tempobegin+10; } @@ -125,11 +220,26 @@ use Image::Magick; # unlink @garb; unlink $duefile; print "Your PDF document"; - print "

"; - print "The link to "; - $logfilename=~s/\/home\/httpd//; - print "Your log file "; - print "\n"; + if ($advans_role) { + print "

"; + print "The link to "; + $logfilename=~s/\/home\/httpd//; + print "Your log file "; + print "\n"; + #link tooriginal LaTeX file (included according Michael Hamlin desire) + my $tex_temporary_file=IO::File->new($texfile) || die "Couldn't open file for reading: $!\n"; + my @tex_content_of_file = <$tex_temporary_file>; + close $tex_temporary_file; + my $body_tex_file = join(' ',@tex_content_of_file); + $texfile =~ s/\.tex$/aaaaa\.html/; + $tex_temporary_file = IO::File->new('>'.$texfile); + print $tex_temporary_file 'LOGFILE
'.$body_tex_file.'
'."\n"; + print "

"; + print "The link to "; + $texfile=~s/\/home\/httpd//; + print "Your original LaTeX file "; + print "\n"; + } } } else { #LaTeX successfully parsed tex file