version 1.251, 2005/01/19 18:20:12
|
version 1.259, 2005/03/01 03:21:58
|
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 88 sub start_m {
|
Line 84 sub start_m {
|
my $currentstring = ''; |
my $currentstring = ''; |
my $inside = &Apache::lonxml::get_all_text_unbalanced("/m",$parser); |
my $inside = &Apache::lonxml::get_all_text_unbalanced("/m",$parser); |
if ($target eq 'web' || $target eq 'analyze') { |
if ($target eq 'web' || $target eq 'analyze') { |
$inside ='\\documentstyle{article}'.$inside; |
|
&Apache::lonxml::debug("M is starting with:$inside:"); |
&Apache::lonxml::debug("M is starting with:$inside:"); |
my $eval=&Apache::lonxml::get_param('eval',$parstack,$safeeval); |
my $eval=&Apache::lonxml::get_param('eval',$parstack,$safeeval); |
if ($eval eq 'on') { |
if ($eval eq 'on') { |
Line 110 sub start_m {
|
Line 105 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 158 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 181 sub end_html {
|
Line 184 sub end_html {
|
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 = &Apache::lonxml::xmlend($target,$parser); |
$currentstring = '</html>'; |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
Line 561 EDITBUTTON
|
Line 564 EDITBUTTON
|
} |
} |
|
|
sub end_body { |
sub end_body { |
my ($target,$token) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web') { |
if ($target eq 'web') { |
$currentstring = $token->[2]; |
$currentstring = &Apache::lonxml::xmlend($target,$parser); |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring = '\strut\newline\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\newline\noindent \end{document}'; |
$currentstring = '\strut\newline\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\newline\noindent \end{document}'; |
} |
} |
Line 2494 sub start_img {
|
Line 2497 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 2545 sub start_img {
|
Line 2523 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 2565 sub start_img {
|
Line 2544 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 |
# And here's where the semi-quote breaks down: allow the user |
# to edit the beast as well by rendering the problem for edit: |
# 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 3782 sub image_replication {
|
Line 3755 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 3823 sub image_height {
|
Line 3809 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"; |