File:  [LON-CAPA] / loncom / interface / printout.pl
Revision 1.22: download - view: text, annotated - select for diffs
Wed Mar 5 16:28:04 2003 UTC (21 years, 2 months ago) by sakharuk
Branches: MAIN
CVS tags: HEAD
Exact (or more correctly almost exact) "pointer" to the problem where LaTeX error was occured is shows up on the screen. Added one more LaTeX error indication (one of the most frequent errors).

#!/usr/bin/perl
use IO::File;
use Image::Magick;
 print "Content-type: text/html\n\n";
 print "<body bgcolor=\"#FFFFFF\">\n";
  my ($texfile,$laystyle,$numberofcolumns,$selectionmade) = split(/&/,$ENV{'QUERY_STRING'});
  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 $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 '') {
	      my $eps_f = $not_eps;
	      $eps_f =~ s/\.[^.]*$/\.eps/i;
	      $_ = $eps_f;
	      m/\/([^\/]+)$/;
	      $eps_f = '/home/httpd/prtspool/'.$1;
	      my $image = Image::Magick->new;
	      $not_eps =~ s/^\s+//;
	      $not_eps =~ s/\s+$//;
	      $status = $image->Read($not_eps);
	      if ($status) {print "  $status  ";}
	      $image->Set(page => '+100+200'); 
	      $status = $image->Write($eps_f);	    
	      if ($status) {print "  $status  ";}
              #check is eps exist in prtspool
              if(not -e $eps_f) {
		  for (my $i=0;$i<10000;$i++) {
		      if (-e $eps_f.'.'.$i) {
			  rename $eps_f.'.'.$i, $eps_f;
			  last;
		      }
		  }
	      }  
	  }
      }
      unlink $figfile;
  }
  #print "$texfile\n"; #name of the tex file for debugging only
  $texfile =~ m/^(.*)\/([^\/]+)$/; 
  my $name_file = $2;
  my $path_file = $1.'/';
  chdir $path_file;
  system("latex $name_file 1>/dev/null 2>/dev/null");
  #Do we have a latex error in the log file?
  my $logfilename = $texfile;
  $logfilename =~ s/\.tex$/\.log/;
  my $temporary_file=IO::File->new($logfilename) || die "Couldn't open file for reading: $!\n";
  my @content_of_file = <$temporary_file>;
  close $temporary_file; 
  my $body_log_file = join(' ',@content_of_file); 
  if ($body_log_file=~m/!\s+Emergency stop/) {
      #LaTeX failed to parse tex file 
      print "<h2>LaTeX could not successfully parse your tex file.</h2>";
      print "It probably has errors in it.<br />";
      my $whereitbegins = rindex $body_log_file,'STAMPOFPASSEDRESOURCESTART';
      my $whereitends = rindex $body_log_file,'STAMPOFPASSEDRESOURCEEND';
      if ($whereitbegins!=-1 and $whereitends!=-1) {
	print "With very high probability this error occured in ".substr($body_log_file,$whereitbegins+26,$whereitends-$whereitbegins-26)."<br /><br />";
      }
      print "Here are the error messages in the LaTeX log file</br><br />";
      my $sygnal = 0;
      for (my $i=0;$i<=$#content_of_file;$i++) {
          if ($content_of_file[$i]=~m/^Runaway argument?/ or $content_of_file[$i]=~m/^!/) {
	      $sygnal = 1;
	  } 
	  if ($content_of_file[$i]=~m/Here is how much of/) {
	      $sygnal = 0;
	  } 
	  if ($sygnal) {
	      print "$content_of_file[$i]<br />";
	  }  
      } 
  } else {
      #LaTeX successfully parsed tex file 
      $name_file =~ s/\.tex/\.dvi/;
      my $new_name_file = $name_file;
      $new_name_file =~ s/\.dvi/\.ps/;
      my $comma = "dvips -o $new_name_file";
      system("$comma $name_file");
      if (-e $new_name_file) {
	  print "<h1>OUTPUT is in the PDF FILE (see link below)</h1>\n";
	  $new_name_file =~ m/^(.*)\./;
	  my $tempo_file = $1.'temporar.ps';
	  my $name_file = $1.'.pdf';
	  if ($laystyle eq 'album' and $numberofcolumns eq '2') {
	      $comma = "psnup -2 -s1.0 $new_name_file";
	      system("$comma $tempo_file"); 
	      system("ps2pdf $tempo_file $name_file");
	  } elsif ($laystyle eq 'book' and $numberofcolumns eq '2') {
	      $comma = 'pstops -pletter "2:0+1(0.48w,0)"';
	      system("$comma $new_name_file $tempo_file");
	      system("ps2pdf $tempo_file $name_file");
	  } else {
	      system("ps2pdf $new_name_file $name_file");
	  }	    
	  my $texlog = $texfile;
	  my $texaux = $texfile;
	  my $texdvi = $texfile;
	  my $texps = $texfile;
	  $texlog =~ s/\.tex/\.log/;
	  $texaux =~ s/\.tex/\.aux/;
	  $texdvi =~ s/\.tex/\.dvi/;
	  $texps =~ s/\.tex/\.ps/;
	  my @garb = ($texlog,$texaux,$texdvi,$texps);
#	  unlink @garb;
	  unlink $duefile;
	  print "<a href=\"/prtspool/$name_file\">Your PDF document</a>";
	  print "\n";
      }
  }


  






FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>