Diff for /loncom/homework/randomlabel.pm between versions 1.67 and 1.74

version 1.67, 2005/04/07 06:56:22 version 1.74, 2005/05/23 11:02:13
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'};
    my $initial_width= $Apache::lonplot::plot{'width'};
    $width_param  = $Apache::lonplot::plot{'texwidth'};
    $scale_factor = $width_param / $initial_width;
    $height_param = $height_param*$scale_factor;
    &Apache::lonxml::debug("height $height_param");
    &Apache::lonxml::debug("Width $width_param");
   
    my $dirty_width = $width_param + 5;
    $result .= '\parbox{'.$dirty_width.'mm}{';
    $result  .= $src."\n";
    $result  .= '\setlength{\unitlength}{1mm}'."\n";
    $result  .= '\begin{picture}('."$height_param,$width_param)";
    $result  .= "(0,-$height_param)";
    $result  .= "\n";
   
       } 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.='\vspace*{2mm}\noindent \parbox{'.$dirtywidth.      my $result ="\n".'\vspace*{2mm}\noindent'."\n".
    '\parbox{'.$dirtywidth.
  ' mm}{  \noindent \epsfxsize='.$width_param.   ' mm}{  \noindent \epsfxsize='.$width_param.
  ' mm \epsffile{'.$path.$file.   ' mm \epsffile{'.$path.$file.
  '}\setlength{\unitlength}{1mm}  \begin{picture}('.   '}\setlength{\unitlength}{1mm}'."\n".'  \begin{picture}('.
  $width_param.','.$height_param.')(0,-'.$height_param.')';   $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 198  sub start_labelgroup { Line 242  sub start_labelgroup {
  @Apache::randomlabel::ycoord = ();   @Apache::randomlabel::ycoord = ();
  @Apache::randomlabel::value = ();   @Apache::randomlabel::value = ();
  @Apache::randomlabel::label_arr  = ();   @Apache::randomlabel::label_arr  = ();
  @Apache::randomlabel::decription  = ();   @Apache::randomlabel::description  = ();
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
  $result.=&Apache::edit::tag_start($target,$token);   $result.=&Apache::edit::tag_start($target,$token);
  $result.=&Apache::edit::text_arg('Name:','name',$token).   $result.=&Apache::edit::text_arg('Name:','name',$token).
Line 225  sub start_labelgroup { Line 269  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 301  sub end_labelgroup { Line 363  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 402  sub end_label { Line 471  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') {
       if ($target eq 'tex') {
    # 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]");      &Apache::lonxml::debug("Turning $ltext, $Apache::lonxml::pwd[-1]");
     $ltext=&Apache::imageresponse::clean_up_image($ltext);      $ltext=&Apache::imageresponse::clean_up_image($ltext);
 #    $ltext=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],  #    $ltext=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],

Removed from v.1.67  
changed lines
  Added in v.1.74


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