Diff for /loncom/homework/randomlabel.pm between versions 1.69 and 1.73

version 1.69, 2005/04/12 09:56:07 version 1.73, 2005/05/16 21:58:19
Line 59  use strict; Line 59  use strict;
 use Apache::edit;  use Apache::edit;
 use Apache::File();  use Apache::File();
 use Apache::Constants qw(:common :http);  use Apache::Constants qw(:common :http);
   use Image::Magick;
   use Apache::lonplot;
   
 my %args;  my %args;
 my $cgi_id;  my $cgi_id;
   my $scale_factor; # image scale factor.
   
 BEGIN {  BEGIN {
     &Apache::lonxml::register('Apache::randomlabel',('randomlabel','labelgroup','location','label','bgimg'));      &Apache::lonxml::register('Apache::randomlabel',('randomlabel','labelgroup','location','label','bgimg'));
Line 160  sub end_bgimg { Line 163  sub end_bgimg {
     $bgimg=&Apache::imageresponse::clean_up_image($bgimg);      $bgimg=&Apache::imageresponse::clean_up_image($bgimg);
     $args{"cgi.$cgi_id.BGIMG"}=&Apache::lonnet::escape($bgimg);      $args{"cgi.$cgi_id.BGIMG"}=&Apache::lonnet::escape($bgimg);
  } elsif ($target eq 'tex') {   } elsif ($target eq 'tex') {
     $result.=&make_eps_image($bgimg,$parstack,$safeeval,-2);      #   Some bg images can create latex for us... e.g. gnuplot.
       #   If it looks like we have some latex use that, 
       #   otherwise, assume this is a resource name that must
       #   be converted into the latex to create an eps insertion.
       #
       my $src = $bgimg;
       $src =~ s/\s+$//s;
       $src =~ s/^\s+//s;
       
   
       if ($src =~ /^\\graphicspath/) {
           $height_param = $Apache::lonplot::plot{'height'}*0.3;
    $width_param  = $Apache::lonplot::plot{'width'}*0.3;
    &Apache::lonxml::debug("height $height_param");
    &Apache::lonxml::debug("Width $width_param");
    $scale_factor=1.0;
    my $dirty_width = $width_param + 5;
    $result .= '\parbox{'.$dirty_width.'mm}{';
    $result  .= $src;
    $result  .= '\begin{picture}('."$height_param,$width_param)";
    $result  .= "(0,-$height_param)";
       } else {
   
   
    $result.=&make_eps_image($bgimg,$parstack,$safeeval,-2);
       }
  }   }
     }      }
     return $result;      return $result;
 }  }
   
 sub make_eps_image {  sub make_eps_image {
     my ($bgimg,$parstack,$safeeval,$depth)=@_;      my ($bgimg,$parstack,$safeeval,$depth)=@_;
       &Apache::lonxml::debug("image prior to get_eps_image: $bgimg");
     my ($path,$file) = &Apache::londefdef::get_eps_image($bgimg);      my ($path,$file) = &Apache::londefdef::get_eps_image($bgimg);
       &Apache::lonxml::debug("image after:  $bgimg");
     ($height_param,$width_param)=      ($height_param,$width_param)=
  &Apache::londefdef::image_size($bgimg,0.3,$parstack,$safeeval,   &Apache::londefdef::image_size($bgimg,0.3,$parstack,$safeeval,
        $depth,1);         $depth,1);
   
       &Apache::lonxml::debug("Image size: $height_param x $width_param");
   
     my $dirtywidth=$width_param+5;      my $dirtywidth=$width_param+5;
     my $result ="\n".'\vspace*{2mm}\noindent'."\n".      my $result ="\n".'\vspace*{2mm}\noindent'."\n".
  '\parbox{'.$dirtywidth.   '\parbox{'.$dirtywidth.
Line 179  sub make_eps_image { Line 211  sub make_eps_image {
  ' mm \epsffile{'.$path.$file.   ' mm \epsffile{'.$path.$file.
  '}\setlength{\unitlength}{1mm}'."\n".'  \begin{picture}('.   '}\setlength{\unitlength}{1mm}'."\n".'  \begin{picture}('.
  $width_param.','.$height_param.')(0,-'.$height_param.')'."\n";   $width_param.','.$height_param.')(0,-'.$height_param.')'."\n";
       my $magick = Image::Magick->new;
       $magick->Read($bgimg);
       my $initial_width = $magick->Get('width');
       &Apache::lonxml::debug("ImageMagick thinks width is; $initial_width");
       $scale_factor = $width_param / $initial_width;
     return $result;      return $result;
 }  }
   
Line 226  sub start_labelgroup { Line 263  sub start_labelgroup {
     return $result;      return $result;
 }  }
   
   #
   #   Utility sub to compute the width of a label.
   #
   sub get_label_width {
       my $label         = shift;
       &Apache::lonxml::debug("image label = $label");
       if (-e $label) {
    &Apache::lonxml::debug("$label exists");
       } else {
    &Apache::lonxml::debug("$label does not exist");
       }
       my $magick        = Image::Magick->new;
       $magick->Read($label);
       my $pixel_width   = $magick->Get('width');
       return $pixel_width * $scale_factor;
       
   
   }
 sub add_vars {  sub add_vars {
     my ($name,$order,$label,$labelorder,$value,$image,$safeeval) = @_;      my ($name,$order,$label,$labelorder,$value,$image,$safeeval) = @_;
     if (!defined($name) || $name eq '') { return; }      if (!defined($name) || $name eq '') { return; }
Line 302  sub end_labelgroup { Line 357  sub end_labelgroup {
     my $tcY=$height_param-$y*($height_param/$wheight);      my $tcY=$height_param-$y*($height_param/$wheight);
     $tcX=sprintf('%.2f',$tcX);      $tcX=sprintf('%.2f',$tcX);
     $tcY=sprintf('%.2f',$tcY);      $tcY=sprintf('%.2f',$tcY);
     $result.='\put('.$tcX.','.$tcY.'){'.$TeXsize.' \bf '.$label.'}'."\n";      $result .= '\put('.$tcX.','.$tcY.'){';
     if( $type eq 'text') {      if( $type eq 'text') {
    $result.= $TeXsize.' \bf '.$label."}\n";
  &add_vars($gname,$i,$label,$idx_arr[$i],$value,'',$safeeval);   &add_vars($gname,$i,$label,$idx_arr[$i],$value,'',$safeeval);
     } elsif ( $type eq 'image') {      } elsif ( $type eq 'image') {
    my ($path,$file) = &Apache::londefdef::get_eps_image($label);
    my $image_name = $path.$file;
    my $label_width = get_label_width($label);
   
    $result .=  '\includegraphics[width='.$label_width.'mm]{'
               .$image_name."}}\n";
  &add_vars($gname,$i,   &add_vars($gname,$i,
   $Apache::randomlabel::description[$idx_arr[$i]],    $Apache::randomlabel::description[$idx_arr[$i]],
   $idx_arr[$i],$value,$label,$safeeval);    $idx_arr[$i],$value,$label,$safeeval);
Line 403  sub end_label { Line 465  sub end_label {
  my $type = &Apache::lonxml::get_param('type',$parstack,$safeeval,-2);   my $type = &Apache::lonxml::get_param('type',$parstack,$safeeval,-2);
  my $ltext=&Apache::lonxml::endredirection;    my $ltext=&Apache::lonxml::endredirection; 
  if ($type eq 'image') {   if ($type eq 'image') {
     &Apache::lonxml::debug("Turning $ltext, $Apache::lonxml::pwd[-1]");  
     $ltext=&Apache::imageresponse::clean_up_image($ltext);  
     #  In .tex output mode, at least _ has to be replaced with  
     #  \_   
     if ($target eq 'tex') {      if ($target eq 'tex') {
  $ltext =~ s/\_/\\\_/g;   # For tex targets, our image url has been potentially corrupted
    # by prepending \'s in front of special latex symbols.
    # For now we only worry about the _ case (most common?)
    # There's a whole host of theim in lonxml::latex_special_symbols
    # that could potentially have to be re-done.
   
    $ltext =~ s/\\_/_/g;
     }      }
       &Apache::lonxml::debug("Turning $ltext, $Apache::lonxml::pwd[-1]");
       $ltext=&Apache::imageresponse::clean_up_image($ltext);
 #    $ltext=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],  #    $ltext=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],
 # $ltext);  # $ltext);
     &Apache::lonxml::debug("into $ltext");      &Apache::lonxml::debug("into $ltext");

Removed from v.1.69  
changed lines
  Added in v.1.73


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