Diff for /loncom/xml/londefdef.pm between versions 1.248 and 1.257

version 1.248, 2004/12/27 14:06:32 version 1.257, 2005/02/18 23:22:43
Line 36 Line 36
 # The C source of the Code may not be distributed by the Licensee  # The C source of the Code may not be distributed by the Licensee
 # to any other parties under any circumstances.  # to any other parties under any circumstances.
 #  #
 #  
 # last modified 06/26/00 by Alexander Sakharuk  
 # 11/6,11/30,02/01/01,5/4 Gerd Kortemeyer  
 # 01/18 Alex Sakharuk  
   
 package Apache::londefdef;   package Apache::londefdef; 
   
Line 110  sub start_m { Line 106  sub start_m {
     $currentstring=&Apache::run::evaluate($currentstring,$safeeval,$$parstack[-1]);      $currentstring=&Apache::run::evaluate($currentstring,$safeeval,$$parstack[-1]);
  }   }
  if ($currentstring=~/^(\s*\\\\\s*)*$/) {$currentstring = ' \vskip 0 mm ';}   if ($currentstring=~/^(\s*\\\\\s*)*$/) {$currentstring = ' \vskip 0 mm ';}
    # detect simple math mode entry exits, and convert them
           # to use \ensuremath
    if ($currentstring=~/^\s*\$[^\$].*[^\$]\$\s*$/) {
       $currentstring=~s/^\$//;
       $currentstring=~s/\$$//;
       $currentstring='\ensuremath{'.$currentstring.'}';
    }
  $Apache::lonxml::post_evaluate=0;   $Apache::lonxml::post_evaluate=0;
     }      }
     return $currentstring;      return $currentstring;
Line 156  sub start_html { Line 159  sub start_html {
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  @Apache::londefdef::table = ();   @Apache::londefdef::table = ();
  $currentstring .= '\documentclass[letterpaper]{article}';   $currentstring .= '\documentclass[letterpaper]{article}';
  if ($ENV{'form.latex_type'}=~'batchmode') {$currentstring .='\batchmode';}    if (($ENV{'form.latex_type'}=~'batchmode') ||
               (!$ENV{'request.role.adv'})) {$currentstring .='\batchmode';} 
  $currentstring .= '\newcommand{\keephidden}[1]{}'.   $currentstring .= '\newcommand{\keephidden}[1]{}'.
                           '\renewcommand{\deg}{$^{\circ}$}'.                            '\renewcommand{\deg}{$^{\circ}$}'.
                           '\usepackage{longtable}'.                            '\usepackage{longtable}'.
Line 1463  sub start_a { Line 1467  sub start_a {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
     my $currentstring = '';      my $currentstring = '';
     if ($target eq 'web') {      if ($target eq 'web') {
  $currentstring .= $token->[4];   my $href=&Apache::lonxml::get_param('href',$parstack,$safeeval,
       undef,1);
    $currentstring=&Apache::lonenc::encrypt_ref($token,{'href'=>$href});
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  my $a=&Apache::lonxml::get_param('href',$parstack,$safeeval,undef,1);   my $a=&Apache::lonxml::get_param('href',$parstack,$safeeval,undef,1);
  my $b=&Apache::lonxml::get_param('name',$parstack,$safeeval,undef,1);   my $b=&Apache::lonxml::get_param('name',$parstack,$safeeval,undef,1);
Line 2420  sub end_th { Line 2426  sub end_th {
 }  }
             
 #-- <img> tag (end tag forbidden)  #-- <img> tag (end tag forbidden)
   #
   #  Render the <IMG> tag.
   #     <IMG> has the following attributes (in addition to the 
   #     standard HTML ones:
   #      TeXwrap   - Governs how the tex target will try to wrap text around
   #                  horizontally aligned images.
   #      TeXwidth  - The width of the image when rendered for print (mm).
   #      TeXheight - The height of the image when rendered for print (mm)
   #         (Note there seems to also be support for this as a % of page size)
   #      
 sub start_img {  sub start_img {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
     my $src = &Apache::lonxml::get_param('src',$parstack,$safeeval,      my $src = &Apache::lonxml::get_param('src',$parstack,$safeeval,
Line 2431  sub start_img { Line 2447  sub start_img {
     $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=$src;      $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=$src;
     my $currentstring = '';      my $currentstring = '';
     my $scaling = .3;      my $scaling = .3;
   
      # Render unto browsers that which are the browser's...
   
     if ($target eq 'web') {      if ($target eq 'web') {
  if ($ENV{'browser.imagesuppress'} ne 'on') {   if ($ENV{'browser.imagesuppress'} ne 'on') {
     $currentstring.= $token->[4];      $currentstring.=&Apache::lonenc::encrypt_ref($token,{'src'=>$src});
  } else {   } else {
     my $alttag= &Apache::lonxml::get_param      my $alttag= &Apache::lonxml::get_param
  ('alt',$parstack,$safeeval,undef,1);   ('alt',$parstack,$safeeval,undef,1);
Line 2443  sub start_img { Line 2462  sub start_img {
     }      }
     $currentstring.='[IMAGE: '.$alttag.']';      $currentstring.='[IMAGE: '.$alttag.']';
  }   }
   
    # and render unto TeX that which is LaTeX
   
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  #   #
  #  The alignment will require some superstructure to be put around   #  The alignment will require some superstructure to be put around
Line 2476  sub start_img { Line 2498  sub start_img {
  }   }
  &Apache::lonxml::debug("LaTeX rendering = $latex_rendering");   &Apache::lonxml::debug("LaTeX rendering = $latex_rendering");
   
  my $oldSRC=$src;  
         $oldSRC=~s/\.(gif|jpg|png)$/\.eps/;  
  $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);  
  #if original gif/jpg/png file exist do following:   #if original gif/jpg/png file exist do following:
    my ($path,$file) = &get_eps_image($src);
    $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
  if (-e $src) {   if (-e $src) {
     #what is the image size?      my ($height_param,$width_param)=
     my $width_param=&image_width($src,$scaling,$parstack,$safeeval);   &image_size($src,0.3,$parstack,$safeeval);
     my $height_param=&image_height($src,$scaling,$parstack,$safeeval);      $currentstring .= '\graphicspath{{'.$path.'}}'
             my ($file,$path)=&file_path($src);    .'\includegraphics[width='.$width_param.' mm,height='.$height_param.'mm]{'.$file.'} ';
     my $newsrc = $src;  
     $newsrc =~ s/\.(gif|jpg|png)$/.eps/i;  
     &Apache::lonnet::repcopy($oldSRC);  
     $file=~s/\.(gif|jpg|png)$/.eps/i;  
     #where can we find the picture?  
     if (-e $newsrc) {  
  #eps counterpart for image exist   
  if ($path) {  
     $currentstring .= '\graphicspath{{'.$path.'}}'  
              .'\includegraphics[width='.$width_param.' mm,height='.$height_param.'mm]{'.$file.'} ';  
  }  
     } else {  
  #there is no eps counterpart for image - check for ps one  
  $newsrc =~ s/\.eps$/\.ps/;  
  if (-e $newsrc) {  
     #ps counterpart for image exist   
     $file =~ s/\.eps$/\.ps/;  
     if ($path) {  
  $currentstring .= '\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';  
     }  
  } else {  
     #care about eps dynamical generation  
     $currentstring.=&eps_generation($src,$file,$width_param);  
  }  
     }  
     #    If there's an alignment specification we need to honor it here.      #    If there's an alignment specification we need to honor it here.
     #    For the horizontal alignments, we will also honor the      #    For the horizontal alignments, we will also honor the
     #    value of the latex specfication.  The default is parbox,      #    value of the latex specfication.  The default is parbox,
Line 2527  sub start_img { Line 2524  sub start_img {
  if ($latex_rendering eq "parpic") {    if ($latex_rendering eq "parpic") { 
     $currentstring = '\parpic[l]{'.$currentstring.'}';      $currentstring = '\parpic[l]{'.$currentstring.'}';
  } else {                                     # parbox rendering   } else {                                     # parbox rendering
     $currentstring = '\newline'."\n".'\parbox{'.$width_param.'mm}{'.$currentstring.'}';      $currentstring = "\\strut\\newline\n".
    '\parbox{'.$width_param.'mm}{'.$currentstring.'}';
  }   }
     } elsif ($align eq "right")  {         } elsif ($align eq "right")  {   
  if ($latex_rendering eq "parpic") {   if ($latex_rendering eq "parpic") {
Line 2547  sub start_img { Line 2545  sub start_img {
  $alt=&Apache::lonmeta::alttag($Apache::lonxml::pwd[-1],$src);   $alt=&Apache::lonmeta::alttag($Apache::lonxml::pwd[-1],$src);
     }      }
   
     if ($alt) {      if ($alt) { $currentstring .= ' '.$alt.' '; }
  $currentstring .= ' '.$alt.' ';  
     } else {  
  #<allow> tag will care about replication   
     }  
  }   }
   
    # And here's where the semi-quote breaks down: allow the user
           # to edit the beast as well by rendering the problem for edit:
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
  $currentstring .=&Apache::edit::tag_start($target,$token);   $currentstring .=&Apache::edit::tag_start($target,$token);
  $currentstring .=&Apache::edit::text_arg('Image Url:','src',$token,70).   $currentstring .=&Apache::edit::text_arg('Image Url:','src',$token,70).
Line 2565  sub start_img { Line 2562  sub start_img {
  $currentstring .=&Apache::edit::text_arg('TeXheight (mm):','TeXheight',$token,5);   $currentstring .=&Apache::edit::text_arg('TeXheight (mm):','TeXheight',$token,5);
  $currentstring .=&Apache::edit::select_arg('Alignment:','align',   $currentstring .=&Apache::edit::select_arg('Alignment:','align',
    ['','bottom','middle','top','left','right'],$token,5);     ['','bottom','middle','top','left','right'],$token,5);
    $currentstring .=&Apache::edit::select_arg('TeXwrap:', 'TeXwrap',
      ['', 'parbox', 'parpic'], $token, 2);
  $currentstring .=&Apache::edit::end_row().&Apache::edit::start_spanning_row();   $currentstring .=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
  my $src=&Apache::lonxml::get_param('src',$parstack,$safeeval);   my $src=    &Apache::lonxml::get_param('src',$parstack,$safeeval);
  my $alt=&Apache::lonxml::get_param('alt',$parstack,$safeeval);   my $alt=    &Apache::lonxml::get_param('alt',$parstack,$safeeval);
  my $width=&Apache::lonxml::get_param('width',$parstack,$safeeval);   my $width=  &Apache::lonxml::get_param('width',$parstack,$safeeval);
  my $height=&Apache::lonxml::get_param('height',$parstack,$safeeval);   my $height= &Apache::lonxml::get_param('height',$parstack,$safeeval);
   
   
  $currentstring .= '<img src="'.$src.'" alt="'.$alt.'" ';   $currentstring .= '<img src="'.$src.'" alt="'.$alt.'" ';
  if ($width) { $currentstring.=' width="'.$width.'" '; }   if ($width) { $currentstring.=' width="'.$width.'" '; }
  if ($height) { $currentstring.=' height="'.$height.'" '; }   if ($height) { $currentstring.=' height="'.$height.'" '; }
Line 2579  sub start_img { Line 2580  sub start_img {
     ($token->[2]{'src'},$token->[2]{'width'},$token->[2]{'height'});      ($token->[2]{'src'},$token->[2]{'width'},$token->[2]{'height'});
  my $ctag=&Apache::edit::get_new_args($token,$parstack,   my $ctag=&Apache::edit::get_new_args($token,$parstack,
      $safeeval,'src','alt','align',       $safeeval,'src','alt','align',
      'TeXwidth','TeXheight',       'TeXwidth','TeXheight', 'TeXwrap',
      'width','height');       'width','height');
  my ($nsrc,$nwidth,$nheight)=   my ($nsrc,$nwidth,$nheight)=
     ($token->[2]{'src'},$token->[2]{'width'},$token->[2]{'height'});      ($token->[2]{'src'},$token->[2]{'width'},$token->[2]{'height'});
Line 2643  sub start_applet { Line 2644  sub start_applet {
     my $currentstring = '';      my $currentstring = '';
     if ($target eq 'web') {      if ($target eq 'web') {
  if ($ENV{'browser.appletsuppress'} ne 'on') {   if ($ENV{'browser.appletsuppress'} ne 'on') {
     $currentstring = $token->[4];      $currentstring = &Apache::lonenc::encrypt_ref($token,
     {'code'=>$code,
      'archive'=>$archive}
     );
  } else {   } else {
     my $alttag= &Apache::lonxml::get_param('alt',$parstack,      my $alttag= &Apache::lonxml::get_param('alt',$parstack,
    $safeeval,undef,1);     $safeeval,undef,1);
Line 2686  sub start_embed { Line 2690  sub start_embed {
     my $currentstring = '';      my $currentstring = '';
     if ($target eq 'web') {      if ($target eq 'web') {
  if ($ENV{'browser.embedsuppress'} ne 'on') {   if ($ENV{'browser.embedsuppress'} ne 'on') {
     $currentstring = $token->[4];      $currentstring=&Apache::lonenc::encrypt_ref($token,{'src'=>$src});
  } else {   } else {
     my $alttag=&Apache::lonxml::get_param      my $alttag=&Apache::lonxml::get_param
  ('alt',$parstack,$safeeval,undef,1);   ('alt',$parstack,$safeeval,undef,1);
Line 2722  sub start_param { Line 2726  sub start_param {
  &Apache::lonxml::get_param('src',$parstack,$safeeval,undef,1);   &Apache::lonxml::get_param('src',$parstack,$safeeval,undef,1);
     my $currentstring = '';      my $currentstring = '';
     if ($target eq 'web') {      if ($target eq 'web') {
  $currentstring = $token->[4];        my %toconvert;
    my $src=&Apache::lonxml::get_param('src',$parstack,$safeeval,undef,1);
    if ($src) { $toconvert{'src'}= $src; }
    my $name=&Apache::lonxml::get_param('name',$parstack,$safeeval,
       undef,1);
    if ($name=~/^cabbase$/i) {
       $toconvert{'value'}=&Apache::lonxml::get_param('value',$parstack,
      $safeeval,undef,1);
    }
    $currentstring = &Apache::lonenc::encrypt_ref($token,\%toconvert);
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
     }       } 
     return $currentstring;      return $currentstring;
Line 3743  sub image_replication { Line 3756  sub image_replication {
 }  }
   
 sub image_size {  sub image_size {
     my ($src,$scaling,$parstack,$safeeval)=@_;      my ($src,$scaling,$parstack,$safeeval,$depth,$cis)=@_;
     #size of image from gif/jpg/jpeg/png       #size of image from gif/jpg/jpeg/png 
       $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
     my $image = Image::Magick->new;      my $image = Image::Magick->new;
     my $current_figure = $image->Read($src);      my $current_figure = $image->Read($src);
     my $width_param = $image->Get('width') * $scaling;;      my $width_param = $image->Get('width') * $scaling;;
     my $height_param = $image->Get('height') * $scaling;;      my $height_param = $image->Get('height') * $scaling;;
     undef $image;      undef($image);
     #do we have any specified LaTeX size of the picture?      #do we have any specified LaTeX size of the picture?
     my $TeXwidth = &Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval);      my $toget='TeXwidth'; if ($cis) { $toget=lc($toget); }
     my $TeXheight = &Apache::lonxml::get_param('TeXheight',$parstack,$safeeval);      my $TeXwidth = &Apache::lonxml::get_param($toget,$parstack,
         $safeeval,$depth,$cis);
       $toget='TeXheight'; if ($cis) { $toget=lc($toget); }
       my $TeXheight = &Apache::lonxml::get_param($toget,$parstack,
          $safeeval,$depth,$cis);
     #do we have any specified web size of the picture?      #do we have any specified web size of the picture?
     my $width = &Apache::lonxml::get_param('width',$parstack,$safeeval,      my $width = &Apache::lonxml::get_param('width',$parstack,$safeeval,
    undef,1);     $depth,1);
     if ($TeXwidth ne '') {        if ($TeXwidth) { 
    my $old_width_param=$width_param;
  if ($TeXwidth=~/(\d+)\s*\%/) {   if ($TeXwidth=~/(\d+)\s*\%/) {
     $width_param = $1*$ENV{'form.textwidth'}/100;      $width_param = $1*$ENV{'form.textwidth'}/100;
  } else {    } else { 
     $width_param = $TeXwidth;      $width_param = $TeXwidth;
  }   }
     } elsif ($TeXheight ne '') {   $height_param=$TeXwidth/$old_width_param*$height_param;
       } elsif ($TeXheight) {
  $height_param = $TeXheight;   $height_param = $TeXheight;
  $width_param  = $TeXheight/$height_param*$width_param;   $width_param  = $TeXheight/$height_param*$width_param;
     } elsif ($width ne '') {      } elsif ($width) {
  $width_param = $width*$scaling;         my $old_width_param=$width_param;
    $width_param = $width*$scaling;
           $height_param=$width_param/$old_width_param*$height_param;
       }
       if ($width_param > $ENV{'form.textwidth'}) {
           my $old_width_param=$width_param;
    $width_param =0.95*$ENV{'form.textwidth'};
           $height_param=$width_param/$old_width_param*$height_param;
     }      }
     if ($width_param > $ENV{'form.textwidth'}) {$width_param =0.95*$ENV{'form.textwidth'}}  
     return ($height_param, $width_param);      return ($height_param, $width_param);
 }  }
   
Line 3784  sub image_height { Line 3810  sub image_height {
     return $height;      return $height;
 }  }
   
   sub get_eps_image {
       my ($src)=@_;
       my $orig_src=$src;
       $src=~s/\.(gif|png|jpg|jpeg)$/\.eps/i;
       $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
       if (! -e $src) {
    if (&Apache::lonnet::repcopy($src) ne OK ) {
       #if replication failed try to find ps file
       $src=~s/\.eps$/\.ps/;
       #if no ps file try to replicate it
       if (not -e $src &&
    &Apache::lonnet::repcopy($src) ne OK) {
    #if replication failed try to produce eps file dynamically
    $src=~s/\.ps$/\.eps/;
    my $temp_file;
    open(FILE,">>/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.dat");
    my $newsrc=$orig_src;
    $newsrc =~ s|(.*)/res/|/home/httpd/html/res/|;
    print FILE "$newsrc\n";
    $src=~s|/home/httpd/html/res|/home/httpd/prtspool|;
    $src=~s|/home/([^/]*)/public_html/|/home/httpd/prtspool/$1/|;
       }
    }
       }
       my ($path,$file)=($src=~m|(.*)/([^/]*)$|);
       return ($path.'/',$file);
   }
   
 sub eps_generation {  sub eps_generation {
     my ($src,$file,$width_param) = @_;           my ($src,$file,$width_param) = @_;     
     my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.dat";      my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.dat";

Removed from v.1.248  
changed lines
  Added in v.1.257


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