--- loncom/xml/londefdef.pm 2005/04/06 06:09:42 1.266
+++ loncom/xml/londefdef.pm 2005/07/05 18:59:03 1.276
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Tags Default Definition Module
#
-# $Id: londefdef.pm,v 1.266 2005/04/06 06:09:42 albertel Exp $
+# $Id: londefdef.pm,v 1.276 2005/07/05 18:59:03 albertel Exp $
#
#
# Copyright Michigan State University Board of Trustees
@@ -39,7 +39,7 @@
package Apache::londefdef;
-use Apache::lonnet();
+use Apache::lonnet;
use strict;
use Apache::lonxml;
use Apache::File();
@@ -90,7 +90,8 @@ sub start_m {
$inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]);
#&Apache::lonxml::debug("M is evaulated to:$inside:");
}
- $currentstring = &Apache::lontexconvert::converted(\$inside);
+ my $display=&Apache::lonxml::get_param('display',$parstack,$safeeval);
+ $currentstring = &Apache::lontexconvert::converted(\$inside,$display);
if ($Apache::lontexconvert::errorstring) {
&Apache::lonxml::warning("tth error: ".
$Apache::lontexconvert::errorstring);
@@ -132,7 +133,7 @@ sub start_tthoption {
if ($target eq 'web') {
my $inside = &Apache::lonxml::get_all_text("/tthoption",$parser);
$inside=~s/^\s*//;
- if ($ENV{'browser.mathml'}) {
+ if ($env{'browser.mathml'}) {
&tth::ttmoptions($inside);
} else {
&tth::tthoptions($inside);
@@ -151,14 +152,14 @@ sub end_tthoption {
sub start_html {
my ($target,$token) = @_;
my $currentstring = '';
- my $options=$ENV{'course.'.$ENV{'request.course.id'}.'.tthoptions'};
+ my $options=$env{'course.'.$env{'request.course.id'}.'.tthoptions'};
&Apache::lontexconvert::init_tth();
- if ($target eq 'web' || $target eq 'edit') {
+ if ($target eq 'web' || $target eq 'edit' || $target eq 'webgrade' ) {
$currentstring = &Apache::lonxml::xmlbegin();
} elsif ($target eq 'tex') {
$currentstring .= '\documentclass[letterpaper]{article}';
- if (($ENV{'form.latex_type'}=~'batchmode') ||
- (!$ENV{'request.role.adv'})) {$currentstring .='\batchmode';}
+ if (($env{'form.latex_type'}=~'batchmode') ||
+ (!$env{'request.role.adv'})) {$currentstring .='\batchmode';}
$currentstring .= '\newcommand{\keephidden}[1]{}'.
'\renewcommand{\deg}{$^{\circ}$}'.
'\usepackage{longtable}'.
@@ -201,7 +202,7 @@ sub start_head {
sub end_head {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web' && $ENV{'request.state'} eq 'published') {
+ if ($target eq 'web' && $env{'request.state'} eq 'published') {
$currentstring = &Apache::lonmenu::registerurl(undef,$target).
$token->[2];
}
@@ -489,15 +490,15 @@ sub start_body {
return '';
}
if (!$Apache::lonxml::registered &&
- $ENV{'request.state'} eq 'published') {
+ $env{'request.state'} eq 'published') {
$currentstring.='
'.
&Apache::lonmenu::registerurl(undef,$target).'';
}
# Accessibility
- if ($ENV{'browser.imagesuppress'} eq 'on') {
+ if ($env{'browser.imagesuppress'} eq 'on') {
delete($token->[2]->{'background'});
}
- if ($ENV{'browser.fontenhance'} eq 'on') {
+ if ($env{'browser.fontenhance'} eq 'on') {
my $style='';
foreach my $key (keys(%{$token->[2]})) {
if ($key =~ /^style$/i) {
@@ -507,7 +508,7 @@ sub start_body {
}
$token->[2]->{'style'}=$style.'; font-size: x-large;';
}
- if ($ENV{'browser.blackwhite'} eq 'on') {
+ if ($env{'browser.blackwhite'} eq 'on') {
delete($token->[2]->{'font'});
delete($token->[2]->{'link'});
delete($token->[2]->{'alink'});
@@ -534,17 +535,17 @@ sub start_body {
$token->[2]->{'onunload'}=&Apache::lonmenu::unloadevents().
';'.$onUnload;
- if ($ENV{'request.state'} ne 'construct') {
+ if ($env{'request.state'} ne 'construct') {
$currentstring .= '<'.$token->[1];
}
foreach (keys %{$token->[2]}) {
$currentstring.=' '.$_.'="'.$token->[2]->{$_}.'"';
}
- if ($ENV{'request.state'} ne 'construct') {
+ if ($env{'request.state'} ne 'construct') {
$currentstring.='>';
}
- if ($ENV{'request.state'} ne 'published') {
- my $remote=($ENV{'environment.remote'} ne 'off');
+ if ($env{'request.state'} ne 'published') {
+ my $remote=($env{'environment.remote'} ne 'off');
$currentstring=&Apache::loncommon::bodytag(undef,undef,
$currentstring,$remote);
$currentstring.=(<';
&start_output($target);
@@ -709,7 +710,7 @@ sub start_h2 {
}
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0);
if (not defined $TeXsize) {$TeXsize="large";}
- $currentstring .= $pre.'{\\'.$TeXsize.' \textbf{';
+ $currentstring .= '\strut\newline '.$pre.'{\\'.$TeXsize.' \textbf{';
}
return $currentstring;
}
@@ -752,7 +753,7 @@ sub start_h3 {
}
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0);
if (not defined $TeXsize) {$TeXsize="large";}
- $currentstring .= $pre.'{\\'.$TeXsize.' \textbf{';
+ $currentstring .= '\strut\newline '.$pre.'{\\'.$TeXsize.' \textbf{';
}
return $currentstring;
}
@@ -795,7 +796,7 @@ sub start_h4 {
}
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0);
if (not defined $TeXsize) {$TeXsize="large";}
- $currentstring .= $pre.'{\\'.$TeXsize.' \textbf{';
+ $currentstring .= '\strut\newline '.$pre.'{\\'.$TeXsize.' \textbf{';
}
return $currentstring;
}
@@ -838,7 +839,7 @@ sub start_h5 {
}
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0);
if (not defined $TeXsize) {$TeXsize="large";}
- $currentstring .= $pre.'{\\'.$TeXsize.' \textbf{';
+ $currentstring .= '\strut\newline '.$pre.'{\\'.$TeXsize.' \textbf{';
}
return $currentstring;
}
@@ -881,7 +882,7 @@ sub start_h6 {
}
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0);
if (not defined $TeXsize) {$TeXsize="large";}
- $currentstring .= $pre.'{\\'.$TeXsize.' \textbf{';
+ $currentstring .= '\strut\newline '.$pre.'{\\'.$TeXsize.' \textbf{';
}
return $currentstring;
}
@@ -1125,9 +1126,9 @@ sub start_p {
if ($align eq 'center') {
$currentstring='\begin{center}\par';
} elsif ($align eq 'right') {
- $currentstring='\makebox['.$ENV{'form.textwidth'}.']{\hfill\llap{';
+ $currentstring='\makebox['.$env{'form.textwidth'}.']{\hfill\llap{';
} elsif ($align eq 'left') {
- $currentstring='\noindent\makebox['.$ENV{'form.textwidth'}.']{\rlap{';
+ $currentstring='\noindent\makebox['.$env{'form.textwidth'}.']{\rlap{';
} else {
$currentstring='\par ';
}
@@ -1276,8 +1277,8 @@ sub start_font {
if ($target eq 'web') {
my $face=&Apache::lonxml::get_param('face',$parstack,$safeeval);
if ($face!~/symbol/i) {
- if (($ENV{'browser.fontenhance'} eq 'on') ||
- ($ENV{'browser.blackwhite'} eq 'on')) { return ''; }
+ if (($env{'browser.fontenhance'} eq 'on') ||
+ ($env{'browser.blackwhite'} eq 'on')) { return ''; }
}
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
@@ -1825,7 +1826,7 @@ sub start_table {
$Apache::londefdef::table[-1]{'row_number'} = -1;
#maximum table's width (default coincides with text line length)
if ($#Apache::londefdef::table==0) {
- $textwidth=&recalc($ENV{'form.textwidth'}); #result is always in mm
+ $textwidth=&recalc($env{'form.textwidth'}); #result is always in mm
$textwidth=~/(\d+\.?\d*)/;
$textwidth=0.95*$1; #accounts "internal" LaTeX space for table frame
} else {
@@ -2449,7 +2450,7 @@ sub start_img {
# Render unto browsers that which are the browser's...
if ($target eq 'web') {
- if ($ENV{'browser.imagesuppress'} ne 'on') {
+ if ($env{'browser.imagesuppress'} ne 'on') {
$currentstring.=&Apache::lonenc::encrypt_ref($token,{'src'=>$src});
} else {
my $alttag= &Apache::lonxml::get_param
@@ -2655,7 +2656,7 @@ sub start_applet {
my $currentstring = '';
if ($target eq 'web') {
- if ($ENV{'browser.appletsuppress'} ne 'on') {
+ if ($env{'browser.appletsuppress'} ne 'on') {
$currentstring = &Apache::lonenc::encrypt_ref($token,
{'code'=>$code,
'archive'=>$archive}
@@ -2701,7 +2702,7 @@ sub start_embed {
$Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=$src;
my $currentstring = '';
if ($target eq 'web') {
- if ($ENV{'browser.embedsuppress'} ne 'on') {
+ if ($env{'browser.embedsuppress'} ne 'on') {
$currentstring=&Apache::lonenc::encrypt_ref($token,{'src'=>$src});
} else {
my $alttag=&Apache::lonxml::get_param
@@ -2797,7 +2798,7 @@ sub start_frameset {
my $currentstring = '';
if ($target eq 'web') {
if (!$Apache::lonxml::registered &&
- $ENV{'request.state'} eq 'published') {
+ $env{'request.state'} eq 'published') {
$currentstring.=''.
&Apache::lonmenu::registerurl(undef,$target).'';
}
@@ -3766,21 +3767,36 @@ sub image_replication {
}
return '';
}
+#
+# Get correct sizing parameter for an image given
+# it's initial ht. and wid. This allows sizing of
+# images that are generated on-the-fly (e.g. gnuplot)
+# as well as serving as a utility for image_size.
+#
+# Parameter:
+# height_param
+# width_param - Initial picture dimensions.
+# scaling - A scale factor.
+# parstack, - the current stack of tag attributes
+# from the xml parser
+# safeeval, - pointer to the safespace
+# depth, - from what level in the stack to look for attributes
+# (assumes -1 if unspecified)
+# cis - look for attrubutes case insensitively
+# (assumes false)
+#
+# Returns:
+# height, width - new dimensions.
+#
+sub resize_image {
+ my ($height_param, $width_param, $scaling,
+ $parstack, $safeeval, $depth, $cis) = @_;
-sub image_size {
- my ($src,$scaling,$parstack,$safeeval,$depth,$cis)=@_;
+ # First apply the scaling...
+
+ $height_param = $height_param * $scaling;
+ $width_param = $width_param * $scaling;
- #size of image from gif/jpg/jpeg/png
- my $ressrc=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
- if (-e $ressrc) {
- $src = $ressrc;
- }
- 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;
- &Apache::lonxml::debug("Image magick says: $src : Height = $height_param width = $width_param");
- undef($image);
#do we have any specified LaTeX size of the picture?
my $toget='TeXwidth';
if ($cis) {
@@ -3797,7 +3813,7 @@ sub image_size {
if ($TeXwidth) {
my $old_width_param=$width_param;
if ($TeXwidth=~/(\d+)\s*\%/) {
- $width_param = $1*$ENV{'form.textwidth'}/100;
+ $width_param = $1*$env{'form.textwidth'}/100;
} else {
$width_param = $TeXwidth;
}
@@ -3818,13 +3834,36 @@ sub image_size {
$height_param=$width_param/$old_width_param*$height_param;
}
}
- if ($width_param > $ENV{'form.textwidth'}) {
+ if ($width_param > $env{'form.textwidth'}) {
my $old_width_param=$width_param;
- $width_param =0.95*$ENV{'form.textwidth'};
+ $width_param =0.95*$env{'form.textwidth'};
if ($old_width_param) {
$height_param=$width_param/$old_width_param*$height_param;
}
}
+
+ return ($height_param, $width_param);
+}
+
+sub image_size {
+ my ($src,$scaling,$parstack,$safeeval,$depth,$cis)=@_;
+
+ #size of image from gif/jpg/jpeg/png
+ my $ressrc=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
+ if (-e $ressrc) {
+ $src = $ressrc;
+ }
+ my $image = Image::Magick->new;
+ my $current_figure = $image->Read($src);
+ my $width_param = $image->Get('width');
+ my $height_param = $image->Get('height');
+ &Apache::lonxml::debug("Image magick says: $src : Height = $height_param width = $width_param");
+ undef($image);
+
+ ($height_param, $width_param) = &resize_image($height_param, $width_param,
+ $scaling, $parstack, $safeeval,
+ $depth, $cis);
+
return ($height_param, $width_param);
}
@@ -3843,10 +3882,10 @@ sub image_height {
sub get_eps_image {
my ($src)=@_;
my $orig_src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1], $src);
- &Apache::lonxml::debug("get_eps_image: Original image: $orig_src
");
+ &Apache::lonxml::debug("get_eps_image: Original image: $orig_src");
$src=~s/\.(gif|png|jpg|jpeg)$/\.eps/i;
$src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
- &Apache::lonxml::debug("Filelocation gives; $src
");
+ &Apache::lonxml::debug("Filelocation gives: $src");
if (! -e $src) {
&Apache::lonxml::debug("$src does not exist");
if (&Apache::lonnet::repcopy($src) ne 'ok' ) {
@@ -3854,18 +3893,20 @@ sub get_eps_image {
#if replication failed try to find ps file
$src=~s/\.eps$/\.ps/;
&Apache::lonxml::debug("Now looking for $src");
- #if no ps file try to replicate it
- if (not -e $src &&
- &Apache::lonnet::repcopy($src) ne 'ok') {
+ #if no ps file try to replicate it.
+ my $didrepcopy = &Apache::lonnet::repcopy($src);
+ &Apache::lonxml::debug("repcopy of $src ... $didrepcopy");
+ if ( (not -e $src) ||
+ ($didrepcopy ne 'ok')) {
&Apache::lonxml::debug("Failed to find or replicate $src");
#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");
+ open(FILE,">>/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.dat");
my $newsrc=$orig_src;
$newsrc =~ s|(.*)/res/|/home/httpd/html/res/|;
- &Apache::lonxml::debug("queueing $newsrc for dynamic eps production.
");
+ &Apache::lonxml::debug("queueing $newsrc for dynamic eps production.");
print FILE "$newsrc\n";
close FILE;
$src=~s|/home/httpd/html/res|/home/httpd/prtspool|;
@@ -3880,7 +3921,7 @@ sub get_eps_image {
sub eps_generation {
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";
my $temp_file = Apache::File->new('>>'.$filename);
print $temp_file "$src\n";
my $newsrc = $src;