Diff for /loncom/interface/printout.pl between versions 1.117 and 1.123

version 1.117, 2006/12/18 11:34:55 version 1.123, 2007/04/20 20:54:24
Line 1 Line 1
 #!/usr/bin/perl  #!/usr/bin/perl
 # CGI-script to run LaTeX, dvips, ps2ps, ps2pdf etc.  # CGI-script to run LaTeX, dvips, ps2ps, ps2pdf etc.
 #  #
   # $Id$
 #  #
 # Copyright Michigan State University Board of Trustees  # Copyright Michigan State University Board of Trustees
 #  #
Line 38  use Apache::loncommon(); Line 39  use Apache::loncommon();
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonmsg();  use Apache::lonmsg();
 use LONCAPA::Enrollment;  use LONCAPA::Enrollment;
   use LONCAPA::Configuration;
   
 use strict;  use strict;
   
Line 127  sub send_error_mail { Line 129  sub send_error_mail {
     foreach my $line (@$texfile) {      foreach my $line (@$texfile) {
  $message .= "$line\n";   $message .= "$line\n";
     }      }
     my (undef, %receivers) = &Apache::lonfeedback::decide_receiver(undef, 0,      my (undef, %receivers) = &Apache::lonmsg::decide_receiver(undef, 0,
   1,1,1);        1,1,1);
     # print "<br /> sending...section:  $env{'request.course.sec'}";      # print "<br /> sending...section:  $env{'request.course.sec'}";
     foreach my $dest (keys %receivers) {      foreach my $dest (keys %receivers) {
  # print "<br /> dest is $dest";   # print "<br /> dest is $dest";
Line 160  Your cookie information is incorrect. Line 162  Your cookie information is incorrect.
 END  END
     return;      return;
 }  }
   
   my %perlvar=%{&LONCAPA::Configuration::read_conf('loncapa.conf')};
  &Apache::lonlocal::get_language_handle();   &Apache::lonlocal::get_language_handle();
  &Apache::loncommon::content_type(undef,'text/html');   &Apache::loncommon::content_type(undef,'text/html');
   
Line 187  END Line 191  END
 print "<a href=\"$backref\"><b>Return</b></a> to last resource.<br /><br />";  print "<a href=\"$backref\"><b>Return</b></a> to last resource.<br /><br />";
   
   my $figfile = $texfile;    my $figfile = $texfile;
   $figfile =~ s/^([^\.]+printout)[^t]+\.tex/$1\.dat/;    $figfile =~ s/^(.*_printout)_\d+_\d+_\d+\.tex/$1\.dat/;
   my $duefile = $texfile;    my $duefile = $texfile;
   $duefile =~ s/^([^\.]+printout)[^t]+\.tex/$1\.due/;    $duefile =~ s/^(.*_printout)_\d+_\d+_\d+\.tex/$1\.due/;
   #do we have figures?    #do we have figures?
   # print "Figure file: $figfile\n";    # print "Figure file: $figfile\n";
   if (-e $figfile) {    if (-e $figfile) {
Line 213  print "<a href=\"$backref\"><b>Return</b Line 217  print "<a href=\"$backref\"><b>Return</b
       # $eps_f =~ s/\.[^.]*$/\.eps/i;        # $eps_f =~ s/\.[^.]*$/\.eps/i;
       if ($eps_f=~/\/home\/([^\/]+)\/public_html\//) {        if ($eps_f=~/\/home\/([^\/]+)\/public_html\//) {
                   $eps_f=~s/\/home\/([^\/]+)\/public_html/$1/;                    $eps_f=~s/\/home\/([^\/]+)\/public_html/$1/;
   $eps_f = '/home/httpd/prtspool/'.$eps_f;    $eps_f = $perlvar{'lonPrtDir'}.$eps_f;
       } elsif ($eps_f=~/$Apache::lonnet::perlvar{'lonDocRoot'}\/res\//) {        } elsif ($eps_f=~/$perlvar{'lonDocRoot'}\/res\//) {
   $eps_f=~m/$Apache::lonnet::perlvar{'lonDocRoot'}\/res\/(.+)/;    $eps_f=~m/$perlvar{'lonDocRoot'}\/res\/(.+)/;
   $eps_f = '/home/httpd/prtspool/'.$1;    $eps_f = $perlvar{'lonPrtDir'}.$1;
       } elsif ($eps_f=~/$Apache::lonnet::perlvar{'lonUsersDir'}\//) {        } elsif ($eps_f=~/$perlvar{'lonUsersDir'}\//) {
   $eps_f=~/$Apache::lonnet::perlvar{'lonUsersDir'}\/([^\/]+)\/\w\/\w\/\w\/(.+)/;    $eps_f=~/$perlvar{'lonUsersDir'}\/([^\/]+)\/\w\/\w\/\w\/(.+)/;
   $eps_f = '/home/httpd/prtspool/'.$1.'/'.$2;    $eps_f = $perlvar{'lonPrtDir'}.$1.'/'.$2;
       }        }
       $eps_f  =~ s/ /\_/g; # Spaces are problematic for system commands and LaTeX.        $eps_f  =~ s/ /\_/g; # Spaces are problematic for system commands and LaTeX.
       #         # 
Line 252  print "<a href=\"$backref\"><b>Return</b Line 256  print "<a href=\"$backref\"><b>Return</b
   if ($advanced_role) {    if ($advanced_role) {
       my $prettyname=$not_eps;        my $prettyname=$not_eps;
       $prettyname=~s|/home/([^/]+)/public_html|/priv/$1|;        $prettyname=~s|/home/([^/]+)/public_html|/priv/$1|;
       $prettyname=~s|$Apache::lonnet::perlvar{'lonDocRoot'}/|/|;        $prettyname=~s|$perlvar{'lonDocRoot'}/|/|;
       &Apache::lonhtmlcommon::Update_PrgWin('',\%prog_state,        &Apache::lonhtmlcommon::Update_PrgWin('',\%prog_state,
     'Converting to EPS '.$prettyname);      'Converting to EPS '.$prettyname);
   }    }
Line 440  foreach $texfile (@texfile) { Line 444  foreach $texfile (@texfile) {
       print "</pre>\n";        print "</pre>\n";
       # print "<br /> Advanced role <br />";        # print "<br /> Advanced role <br />";
               print "<b><big>The link to ";                print "<b><big>The link to ";
               $logfilename=~s/\/home\/httpd//;                $logfilename=~s{^\Q$perlvar{'lonPrtDir'}\E}{/prtspool};
       print "<a href=\"$logfilename\">Your log file </a></big></b>";        print "<a href=\"$logfilename\">Your log file </a></big></b>";
       print "\n";        print "\n";
               #link tooriginal LaTeX file (included according Michael Hamlin desire)                #link tooriginal LaTeX file (included according Michael Hamlin desire)
Line 453  foreach $texfile (@texfile) { Line 457  foreach $texfile (@texfile) {
       print $tex_temporary_file '<html><head><title>LOGFILE</title></head><body><pre>'.$body_tex_file.'</pre></body></html>'."\n";        print $tex_temporary_file '<html><head><title>LOGFILE</title></head><body><pre>'.$body_tex_file.'</pre></body></html>'."\n";
       print "<br /><br />";        print "<br /><br />";
       print "<b><big>The link to ";        print "<b><big>The link to ";
       $texfile=~s/\/home\/httpd//;                $texfile=~s{^\Q$perlvar{'lonPrtDir'}\E}{/prtspool};
       print "<a href=\"$texfile\">Your original LaTeX file </a></big></b>";        print "<a href=\"$texfile\">Your original LaTeX file </a></big></b>";
       print "\n";        print "\n";
       my $help_text = &Apache::loncommon::help_open_topic("Print_Resource", "Help on printing");        my $help_text = &Apache::loncommon::help_open_topic("Print_Resource", "Help on printing");
Line 527  foreach $texfile (@texfile) { Line 531  foreach $texfile (@texfile) {
      \%prog_state, $dvi_file);       \%prog_state, $dvi_file);
   
       }        }
       &busy_wait_command("$comma $name_file 1>dev/null 2>/dev/null",        &busy_wait_command("$comma $name_file 1>/dev/null 2>/dev/null",
  "for $status_statement dvips to repaginate",   "for $status_statement dvips to repaginate",
  \%prog_state, $new_name_file);   \%prog_state, $new_name_file);
       #        #
Line 559  foreach $texfile (@texfile) { Line 563  foreach $texfile (@texfile) {
       if (-e $missfonts_file) {        if (-e $missfonts_file) {
   #print("<br />Missing fonts file exists\n");    #print("<br />Missing fonts file exists\n");
   &create_missing_fonts($missfonts_file);    &create_missing_fonts($missfonts_file);
   unlink($missfonts_file, \%prog_state);    &busy_wait_command("$comma $name_file 1>/dev/null 2>/dev/null",
   &busy_wait_command("$comma $name_file 1>dev/null 2>/dev/null",  
      "for $status_statement dvips generated missing fonts",       "for $status_statement dvips generated missing fonts",
      \%prog_state, $new_name_file);       \%prog_state, $new_name_file);
       }        }
Line 604  foreach $texfile (@texfile) { Line 607  foreach $texfile (@texfile) {
       $texps =~ s/\.tex/\.ps/;        $texps =~ s/\.tex/\.ps/;
       my @garb = ($texaux,$texdvi,$texps);        my @garb = ($texaux,$texdvi,$texps);
 #  unlink @garb;  #  unlink @garb;
       unlink $duefile;        unlink($duefile);
       print "<a href=\"/prtspool/$pdf_file\">Your PDF document</a>";        print "<a href=\"/prtspool/$pdf_file\">Your PDF document</a>";
         unlink($missfonts_file);
   
   }    }
   if ($advanced_role) {      if ($advanced_role) {  
       print "<br /><br />";        print "<br /><br />";
       print "<b><big>The link to ";        print "<b><big>The link to ";
       $logfilename=~s/\/home\/httpd//;                $logfilename=~s{^\Q$perlvar{'lonPrtDir'}\E}{/prtspool};
       print "<a href=\"$logfilename\">Your log file </a></big></b>";        print "<a href=\"$logfilename\">Your log file </a></big></b>";
       print "\n";        print "\n";
       #link tooriginal LaTeX file (included according Michael Hamlin desire)        #link tooriginal LaTeX file (included according Michael Hamlin desire)
Line 623  foreach $texfile (@texfile) { Line 628  foreach $texfile (@texfile) {
       print $tex_temporary_file '<html><head><title>LOGFILE</title></head><body><pre>'.$body_tex_file.'</pre></body></html>'."\n";        print $tex_temporary_file '<html><head><title>LOGFILE</title></head><body><pre>'.$body_tex_file.'</pre></body></html>'."\n";
       print "<br /><br />";        print "<br /><br />";
       print "<b><big>The link to ";        print "<b><big>The link to ";
       $texfile=~s/\/home\/httpd//;                $texfile=~s{^\Q$perlvar{'lonPrtDir'}\E}{/prtspool};
       print "<a href=\"$texfile\">Your original LaTeX file </a></big></b>";        print "<a href=\"$texfile\">Your original LaTeX file </a></big></b>";
       print "\n";        print "\n";
   }    }
   
       } else {        } else {
   #LaTeX successfully parsed tex file     #LaTeX successfully parsed tex file 
   $name_file =~ s/\.tex/\.dvi/;    $name_file =~ s/\.tex/\.dvi/;
Line 668  foreach $texfile (@texfile) { Line 674  foreach $texfile (@texfile) {
   if (-e $missfonts_file) {    if (-e $missfonts_file) {
       #print("<br />Missing fonts file exists\n");        #print("<br />Missing fonts file exists\n");
       &create_missing_fonts($missfonts_file);        &create_missing_fonts($missfonts_file);
       unlink($missfonts_file);        &busy_wait_command("$comma $name_file 1>/dev/null 2>/dev/null",
       &busy_wait_command("$comma $name_file 1>dev/null 2>/dev/null",  
  "for $status_statement dvips generated missing fonts",   "for $status_statement dvips generated missing fonts",
  \%prog_state, $new_name_file);   \%prog_state, $new_name_file);
   }    }
Line 755  foreach $texfile (@texfile) { Line 760  foreach $texfile (@texfile) {
       $texps =~ s/\.tex/\.ps/;        $texps =~ s/\.tex/\.ps/;
       my @garb = ($texlog,$texaux,$texdvi,$texps);        my @garb = ($texlog,$texaux,$texdvi,$texps);
 #  unlink @garb;  #  unlink @garb;
       unlink $duefile;        unlink($duefile);
       print "<a href=\"/prtspool/$pdf_file\">$link_text - click here to download pdf</a>";        print "<a href=\"/prtspool/$pdf_file\">$link_text - click here to download pdf</a>";
       print "\n";        print "\n";
   }    }
     unlink($missfonts_file);
   
       }          }  
   } else {    } else {
       print "LaTeX file $texfile was not created successfully";        print "LaTeX file $texfile was not created successfully";
Line 776  if ($number_of_files>1) { Line 783  if ($number_of_files>1) {
     print("<pre>Zip Output:\n");      print("<pre>Zip Output:\n");
     system($statement);      system($statement);
     print("</pre>");      print("</pre>");
     $zipfile=~s/\/home\/httpd//;      $zipfile=~s{^\Q$perlvar{'lonPrtDir'}\E}{/prtspool};
     print "<br /> A <a href=\"$zipfile\">ZIP file</a> of all the PDFs.";      print "<br /> A <a href=\"$zipfile\">ZIP file</a> of all the PDFs.";
 }  }
 if ($advanced_role) { &Apache::lonhtmlcommon::Close_PrgWin('',\%prog_state); }  if ($advanced_role) { &Apache::lonhtmlcommon::Close_PrgWin('',\%prog_state); }
Line 862  sub repaginate { Line 869  sub repaginate {
  #   #
   
  if ($line =~ /^%%Page:/) {   if ($line =~ /^%%Page:/) {
     my @pageinfo = split(/ /, $line);      my @pageinfo = split(/\s+/, $line);
     if ($page_number < $pageinfo[1]) {      if ($page_number < $pageinfo[1]) {
  $page_number = $pageinfo[1];   $page_number = $pageinfo[1];
     } elsif ($pageinfo[2] ne 1) {      } elsif ($pageinfo[2] ne 1) {
Line 962  sub create_missing_fonts { Line 969  sub create_missing_fonts {
     # Open and read in the font file..we'll read it into the array      # Open and read in the font file..we'll read it into the array
     #  font_commands.      #  font_commands.
     #      #
     my $font_handle = IO::File->new($fontfile);      open(my $font_handle, $fontfile);
     my @font_commands = <$font_handle>;      my @font_commands = <$font_handle>;
       
       # make the list contain each command only once
       my %uniq;
       @font_commands = map { $uniq{$_}++ == 0 ? $_ : () } @font_commands;
   
     #  Now process each command replacing the appropriate 8000's with      #  Now process each command replacing the appropriate 8000's with
     #  600's ensuring that font names with 8000's in them are not corrupted.      #  600's ensuring that font names with 8000's in them are not corrupted.
     #  and if the --mfmode is not ljfour we turn it into ljfour.      #  and if the --mfmode is not ljfour we turn it into ljfour.
     #   Then we execute the command.      #   Then we execute the command.
     #      #
       
     foreach my $command (@font_commands) {      foreach my $command (@font_commands) {
  #print("<br />Raw command: $command");   #print("<br />Raw command: $command");
  $command =~ s/ 8000/ 600/g;    # dpi directives.   $command =~ s/ 8000/ 600/g;    # dpi directives.
Line 988  sub create_missing_fonts { Line 998  sub create_missing_fonts {
  $command = join(" ", (@cmdarray));   $command = join(" ", (@cmdarray));
   
  #print("<br />Creating fonts via command: $command");   #print("<br />Creating fonts via command: $command");
  &busy_wait_command("$command 1>dev/null 2>/dev/null",   &busy_wait_command("$command 1>/dev/null 2>/dev/null",
    "Creating missing font",     "Creating missing font",
    $state, $command);     $state, $command);
         

Removed from v.1.117  
changed lines
  Added in v.1.123


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