[LON-CAPA-cvs] cvs: loncom /homework imageresponse.pm randomlabel.pm /xml londefdef.pm
albertel
lon-capa-cvs@mail.lon-capa.org
Thu, 10 Feb 2005 23:00:10 -0000
This is a MIME encoded message
--albertel1108076410
Content-Type: text/plain
albertel Thu Feb 10 18:00:10 2005 EDT
Modified files:
/loncom/xml londefdef.pm
/loncom/homework imageresponse.pm randomlabel.pm
Log:
- trying to make all of the eps image getting gernation etc have a common body of code between <randomlabel>'s bgimg, <img> and <imageresponse>'s <image>
--albertel1108076410
Content-Type: text/plain
Content-Disposition: attachment; filename="albertel-20050210180010.txt"
Index: loncom/xml/londefdef.pm
diff -u loncom/xml/londefdef.pm:1.255 loncom/xml/londefdef.pm:1.256
--- loncom/xml/londefdef.pm:1.255 Wed Feb 9 14:51:43 2005
+++ loncom/xml/londefdef.pm Thu Feb 10 18:00:09 2005
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Tags Default Definition Module
#
-# $Id: londefdef.pm,v 1.255 2005/02/09 19:51:43 albertel Exp $
+# $Id: londefdef.pm,v 1.256 2005/02/10 23:00:09 albertel Exp $
#
#
# Copyright Michigan State University Board of Trustees
@@ -2491,40 +2491,15 @@
}
&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:
+ my ($path,$file) = &get_eps_image($src);
+ $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
if (-e $src) {
- #what is the image size?
- my $width_param=&image_width($src,$scaling,$parstack,$safeeval);
- my $height_param=&image_height($src,$scaling,$parstack,$safeeval);
- my ($file,$path)=&file_path($src);
- 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);
- }
- }
+ my ($height_param,$width_param)=
+ &image_size($src,0.3,$parstack,$safeeval);
+ $currentstring .= '\graphicspath{{'.$path.'}}'
+ .'\includegraphics[width='.$width_param.' mm,height='.$height_param.'mm]{'.$file.'} ';
+
# If there's an alignment specification we need to honor it here.
# For the horizontal alignments, we will also honor the
# value of the latex specfication. The default is parbox,
@@ -2563,17 +2538,11 @@
$alt=&Apache::lonmeta::alttag($Apache::lonxml::pwd[-1],$src);
}
- if ($alt) {
- $currentstring .= ' '.$alt.' ';
- } else {
- #<allow> tag will care about replication
- }
+ if ($alt) { $currentstring .= ' '.$alt.' '; }
}
# 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') {
$currentstring .=&Apache::edit::tag_start($target,$token);
$currentstring .=&Apache::edit::text_arg('Image Url:','src',$token,70).
@@ -3780,20 +3749,25 @@
}
sub image_size {
- my ($src,$scaling,$parstack,$safeeval)=@_;
+ my ($src,$scaling,$parstack,$safeeval,$depth,$cis)=@_;
#size of image from gif/jpg/jpeg/png
+ $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
my $image = Image::Magick->new;
my $current_figure = $image->Read($src);
my $width_param = $image->Get('width') * $scaling;;
my $height_param = $image->Get('height') * $scaling;;
- undef $image;
+ undef($image);
#do we have any specified LaTeX size of the picture?
- my $TeXwidth = &Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval);
- my $TeXheight = &Apache::lonxml::get_param('TeXheight',$parstack,$safeeval);
+ my $toget='TeXwidth'; if ($cis) { $toget=lc($toget); }
+ 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?
my $width = &Apache::lonxml::get_param('width',$parstack,$safeeval,
- undef,1);
- if ($TeXwidth ne '') {
+ $depth,1);
+ if ($TeXwidth) {
my $old_width_param=$width_param;
if ($TeXwidth=~/(\d+)\s*\%/) {
$width_param = $1*$ENV{'form.textwidth'}/100;
@@ -3801,12 +3775,12 @@
$width_param = $TeXwidth;
}
$height_param=$TeXwidth/$old_width_param*$height_param;
- } elsif ($TeXheight ne '') {
+ } elsif ($TeXheight) {
$height_param = $TeXheight;
$width_param = $TeXheight/$height_param*$width_param;
- } elsif ($width ne '') {
+ } elsif ($width) {
my $old_width_param=$width_param;
- $width_param = $width*$scaling;
+ $width_param = $width*$scaling;
$height_param=$width_param/$old_width_param*$height_param;
}
if ($width_param > $ENV{'form.textwidth'}) {
@@ -3829,6 +3803,34 @@
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 {
my ($src,$file,$width_param) = @_;
my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.dat";
Index: loncom/homework/imageresponse.pm
diff -u loncom/homework/imageresponse.pm:1.61 loncom/homework/imageresponse.pm:1.62
--- loncom/homework/imageresponse.pm:1.61 Mon Jan 31 18:09:55 2005
+++ loncom/homework/imageresponse.pm Thu Feb 10 18:00:10 2005
@@ -2,7 +2,7 @@
# The LearningOnline Network with CAPA
# image click response style
#
-# $Id: imageresponse.pm,v 1.61 2005/01/31 23:09:55 albertel Exp $
+# $Id: imageresponse.pm,v 1.62 2005/02/10 23:00:10 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -433,7 +433,7 @@
my $result;
my $name = $Apache::imageresponse::curname;
if ($target eq 'web') {
- my $image = &Apache::lonxml::endredirection;
+ my $image = &Apache::lonxml::endredirection();
&Apache::lonxml::debug("original image is $image");
if ( $Apache::imageresponse::conceptgroup
#&& !&Apache::response::showallfoils()
@@ -443,7 +443,7 @@
$Apache::response::foilgroup{"$name.image"} = $image;
}
} elsif ($target eq 'analyze') {
- my $image = &Apache::lonxml::endredirection;
+ my $image = &Apache::lonxml::endredirection();
if ( $Apache::imageresponse::conceptgroup
#&& !&Apache::response::showallfoils()
) {
@@ -454,75 +454,11 @@
} elsif ($target eq 'edit') {
$result=&Apache::edit::end_table();
} elsif ($target eq 'tex') {
- my $src = &Apache::lonxml::endredirection;
- $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
- my $width_param = '';
- my $height_param = '';
- my $scaling = .3;
- my $image = Image::Magick->new;
- my $current_figure = $image->Read($src);
- $width_param = $image->Get('width') * $scaling;;
- $height_param = $image->Get('height') * $scaling;;
- undef $image;
- my $epssrc = $src;
- $epssrc =~ s/(\.gif|\.jpg)$/\.eps/i;
- if (not -e $epssrc) {
- my $localfile = $epssrc;
- $localfile =~ s/.*(\/res)/$1/;
- my $file;
- my $path;
- if ($localfile =~ m!(.*)/([^/]*)$!) {
- $file = $2;
- $path = $1.'/';
- }
- my $signal_eps = 0;
- my @content_directory = &Apache::lonnet::dirlist($path);
- for (my $iy=0;$iy<=$#content_directory;$iy++) {
- my @tempo_array = split(/&/,$content_directory[$iy]);
- $content_directory[$iy] = $tempo_array[0];
- if ($file eq $tempo_array[0]) {
- $signal_eps = 1;
- last;
- }
- }
- if ($signal_eps) {
- my $eps_file = &Apache::lonnet::getfile($localfile);
- } else {
- $localfile = $src;
- $localfile =~ s/.*(\/res)/$1/;
- my $as = &Apache::lonnet::getfile($src);
- }
- }
- my $file;
- my $path;
- if ($src =~ m!(.*)/([^/]*)$!) {
- $file = $2;
- $path = $1.'/';
- }
- my $newsrc = $src;
- $newsrc =~ s/(\.gif|\.jpg|\.jpeg)$/\.eps/i;
- $file=~s/(\.gif|\.jpg|\.jpeg)$/\.eps/i;
- #do we have any specified size of the picture?
- my $TeXwidth = &Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval);
- my $TeXheight = &Apache::lonxml::get_param('TeXheight',$parstack,$safeeval);
- my $width = &Apache::lonxml::get_param('width',$parstack,$safeeval);
- if ($TeXwidth ne '') {
- $width_param = $TeXwidth;
- } elsif ($TeXheight ne '') {
- $width_param = $TeXheight/$height_param*$width_param;
- } elsif ($width ne '') {
- $width_param = $width*$scaling;
- }
- $width_param=&Apache::randomlabel::adjust_textwidth($width_param);
- #where can we find the picture?
- if (-e $newsrc) {
- if ($path) {
- $Apache::response::foilgroup{"$name.image"} ='\vskip 0 mm \noindent\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
- }
- } else {
- #care about eps dynamical generation
- $Apache::response::foilgroup{"$name.image"}='\vskip 0 mm '.&Apache::londefdef::eps_generation($src,$file,$width_param);
- }
+ my $src = &Apache::lonxml::endredirection();
+ my ($path,$file) = &Apache::londefdef::get_eps_image($src);
+ my ($height_param,$width_param)=
+ &Apache::londefdef::image_size($src,0.3,$parstack,$safeeval);
+ $Apache::response::foilgroup{"$name.image"} ='\vskip 0 mm \noindent\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
}
return $result;
}
Index: loncom/homework/randomlabel.pm
diff -u loncom/homework/randomlabel.pm:1.63 loncom/homework/randomlabel.pm:1.64
--- loncom/homework/randomlabel.pm:1.63 Fri Dec 3 20:15:41 2004
+++ loncom/homework/randomlabel.pm Thu Feb 10 18:00:10 2005
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# random labelling tool
#
-# $Id: randomlabel.pm,v 1.63 2004/12/04 01:15:41 albertel Exp $
+# $Id: randomlabel.pm,v 1.64 2005/02/10 23:00:10 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -82,10 +82,12 @@
return $num;
}
+my ($height_param,$width_param);
sub start_randomlabel {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
my $result='';
push (@Apache::lonxml::namespace,'randomlabel');
+ ($height_param,$width_param)=(0,0);
my $bgimg= &Apache::lonxml::get_param('bgimg',$parstack,$safeeval);
if ( defined($bgimg) && $bgimg !~ /^http:/ ) {
$bgimg=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$bgimg);
@@ -98,12 +100,8 @@
$cgi_id=&Apache::loncommon::get_cgi_id();
%args=();
$args{"cgi.$cgi_id.BGIMG"}=&Apache::lonnet::escape($bgimg);
- } elsif ($target eq 'tex') {
- my $w= &check_int(&Apache::lonxml::get_param('width',$parstack,$safeeval));
- my $h= &check_int(&Apache::lonxml::get_param('height',$parstack,$safeeval));
- my $texwidth=&adjust_textwidth(&Apache::lonxml::get_param('texwidth',$parstack,$safeeval,undef,1));
- if (!$texwidth) { $texwidth=90; }
- $result.=&make_eps_image($bgimg,$texwidth,$h,$w);
+ } elsif ($target eq 'tex' && defined($bgimg)) {
+ $result.=&make_eps_image($bgimg,$parstack,$safeeval);
} elsif ($target eq 'edit') {
$result.=&Apache::edit::tag_start($target,$token);
$Apache::edit::bgimgsrc=
@@ -140,13 +138,7 @@
&Apache::lonnet::appenv(%args);
} elsif ($target eq 'tex') {
$result='\end{picture}\\\\';
- my $height=&Apache::lonxml::get_param('height',$parstack,$safeeval);
- my $width=&Apache::lonxml::get_param('width',$parstack,$safeeval);
- my $texwidth=&adjust_textwidth(&Apache::lonxml::get_param('texwidth',$parstack,$safeeval,undef,1));
- if (!$texwidth) { $texwidth=90; }
- # what if width is undefined?
- my $howtoskipback = $texwidth*$height/$width;
- $result.= ' \vskip -'.$howtoskipback.' mm } \\\\ ';
+ $result.= ' \vskip -'.$height_param.' mm } \\\\ ';
} elsif ($target eq 'edit') {
$result.=&Apache::edit::end_table;
}
@@ -157,7 +149,7 @@
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
my $result='';
if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze') {
- &Apache::lonxml::startredirection;
+ &Apache::lonxml::startredirection();
}
return $result;
}
@@ -166,65 +158,32 @@
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
my $result='';
if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze') {
- my $bgimg=&Apache::lonxml::endredirection;
+ my $bgimg=&Apache::lonxml::endredirection();
if ($target eq 'web') {
$bgimg=&Apache::imageresponse::clean_up_image($bgimg);
$args{"cgi.$cgi_id.BGIMG"}=&Apache::lonnet::escape($bgimg);
} elsif ($target eq 'tex') {
- my $w=&check_int(&Apache::lonxml::get_param('width',$parstack,$safeeval,-2));
- my $h=&check_int(&Apache::lonxml::get_param('height',$parstack,$safeeval,-2));
- my $texwidth=&adjust_textwidth(&Apache::lonxml::get_param('texwidth',$parstack,$safeeval,undef,-2));
- if (!$texwidth) { $texwidth=90; }
- $result.=&make_eps_image($bgimg,$texwidth,$h,$w);
+ $result.=&make_eps_image($bgimg,$parstack,$safeeval,-2);
}
}
return $result;
}
sub make_eps_image {
- my ($bgimg,$texwidth,$h,$w)=@_;
- my $newbgimg = $bgimg;
- $bgimg=~s/\.(gif|jpg|png|jpeg)$/\.eps/i;
- $bgimg= &Apache::lonnet::filelocation($bgimg);
- $bgimg=~s|http:/[^/]*|/home/httpd/html|;
- $bgimg=~s|/$||;
- #if no eps file try to replicate it
- if (not-e $bgimg) {
- if (&Apache::lonnet::repcopy($bgimg) ne OK ) {
- #if replication failed try to find ps file
- $bgimg=~s/\.eps$/\.ps/;
- #if no ps file try to replicate it
- if (not -e $bgimg &&
- &Apache::lonnet::repcopy($bgimg) ne OK) {
- #if replication failed try to produce eps file dynamically
- $bgimg=~s/\.ps$/\.eps/;
- my $temp_file;
- my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.dat";
- $temp_file = Apache::File->new('>>'.$filename);
- $newbgimg =~ s|(.*)/res/|/home/httpd/html/res/|;
- print $temp_file "$newbgimg\n";
- $bgimg=~s|/home/httpd/html/res|/home/httpd/prtspool|;
- $bgimg=~s|/home/([^/]*)/public_html/|/home/httpd/prtspool/$1/|;
- }
- }
- }
- $bgimg=~s|/$||;
- my $dirtywidth=$texwidth+5;
+ my ($bgimg,$parstack,$safeeval,$depth)=@_;
+ my ($path,$file) = &Apache::londefdef::get_eps_image($bgimg);
+ ($height_param,$width_param)=
+ &Apache::londefdef::image_size($bgimg,0.3,$parstack,$safeeval,
+ $depth,1);
+ my $dirtywidth=$width_param+5;
my $result.='\vspace*{2mm}\noindent \parbox{'.$dirtywidth.
- ' mm}{ \noindent \epsfxsize='.$texwidth.' mm \epsffile{'.$bgimg.
+ ' mm}{ \noindent \epsfxsize='.$width_param.
+ ' mm \epsffile{'.$path.$file.
'}\setlength{\unitlength}{1mm} \begin{picture}('.
- $texwidth.','.$texwidth*$h/$w.')(0,-'.$texwidth*$h/$w.')';
+ $width_param.','.$height_param.')(0,-'.$height_param.')';
return $result;
}
-sub adjust_textwidth {
- my $texwidth=shift;
- my $pagewidth=$ENV{'form.textwidth'};
- $pagewidth=~s/\s*mm\s*$//;
- if ($texwidth>$pagewidth) {$texwidth=$pagewidth;}
- return $texwidth;
-}
-
sub start_labelgroup {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
my $result='';
@@ -325,11 +284,8 @@
my $WY1=0; # Web y-coord. of (ULC)
my $wwidth=&Apache::lonxml::get_param('width',$parstack,$safeeval,-2);
my $wheight=&Apache::lonxml::get_param('height',$parstack,$safeeval,-2);
- my $texwidth=&adjust_textwidth(&Apache::lonxml::get_param('texwidth',$parstack,$safeeval,-2,1));
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval);
if (!defined($TeXsize)) { $TeXsize='\\normalsize'; }
- if (!$texwidth) { $texwidth=90; }
- my $texheight=$texwidth*($wheight/$wwidth);
my @idx_arr = (0 .. $#Apache::randomlabel::label_arr);
&Apache::structuretags::shuffle(\@idx_arr);
@@ -342,10 +298,10 @@
my $y = $Apache::randomlabel::ycoord[$i]-3.5;
my $value = $Apache::randomlabel::value[$i];
#x latex coordinate
- my $tcX=($x)*($texwidth/$wwidth);
+ my $tcX=($x)*($width_param/$wwidth);
#y latex coordinate
# my $ratio=($wwidth > 0 ? $wheight/$wwidth : 1 );
- my $tcY=$texheight-$y*($texheight/$wheight);
+ my $tcY=$height_param-$y*($height_param/$wheight);
$tcX=sprintf('%.2f',$tcX);
$tcY=sprintf('%.2f',$tcY);
$result.='\put('.$tcX.','.$tcY.'){'.$TeXsize.' \bf '.$label.'}'."\n";
--albertel1108076410--