version 1.386, 2008/04/29 10:16:37
|
version 1.397, 2008/11/24 18:55:01
|
Line 46 use Apache::File();
|
Line 46 use Apache::File();
|
use Image::Magick; |
use Image::Magick; |
use Apache::lonmenu(); |
use Apache::lonmenu(); |
use Apache::lonmeta(); |
use Apache::lonmeta(); |
|
use Apache::lonlocal; |
use Apache::Constants qw(:common); |
use Apache::Constants qw(:common); |
use File::Basename; |
use File::Basename; |
use LONCAPA(); |
use LONCAPA(); |
Line 106 sub start_m {
|
Line 107 sub start_m {
|
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') { |
$inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]); |
$inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]); |
#&Apache::lonxml::debug("M is evaulated to:$inside:"); |
#&Apache::lonxml::debug("M is evaluated to:$inside:"); |
} |
} |
my $tex = $inside; |
my $tex = $inside; |
my $display=&Apache::lonxml::get_param('display',$parstack,$safeeval); |
my $display=&Apache::lonxml::get_param('display',$parstack,$safeeval); |
$currentstring = &Apache::lontexconvert::converted(\$inside,$display); |
$currentstring = &Apache::lontexconvert::converted(\$inside,$display); |
if ($Apache::lontexconvert::errorstring) { |
if ($Apache::lontexconvert::errorstring) { |
my $errormsg='<pre>'.&HTML::Entities::encode($Apache::lontexconvert::errorstring,'<>&"').'</pre> occured while attempting to convert this TeX: <pre>'; |
my $errormsg='<pre>'.&HTML::Entities::encode($Apache::lontexconvert::errorstring,'<>&"').'</pre> occurred while attempting to convert this TeX: <pre>'; |
$tex = &HTML::Entities::encode($tex,'<>&"'); |
$tex = &HTML::Entities::encode($tex,'<>&"'); |
my ($linenumber) = |
my ($linenumber) = |
($Apache::lontexconvert::errorstring =~ /Line (\d+)/); |
($Apache::lontexconvert::errorstring =~ /Line (\d+)/); |
Line 138 sub start_m {
|
Line 139 sub start_m {
|
# detect simple math mode entry exits, and convert them |
# detect simple math mode entry exits, and convert them |
# to use \ensuremath ... unless there's a \verb inside. |
# to use \ensuremath ... unless there's a \verb inside. |
if (! ($currentstring=~/\\verb/)) { |
if (! ($currentstring=~/\\verb/)) { |
if ($currentstring=~/^\s*\$[^\$].*[^\$]\$\s*$/) { |
if ($currentstring=~/^\s*\$[^\$].*\$\s*$/) { |
$currentstring=~s/^(\s*)\$/$1/; |
$currentstring=~s/^(\s*)\$/$1/; |
$currentstring=~s/\$(\s*)$/$1/; |
$currentstring=~s/\$(\s*)$/$1/; |
$currentstring='\ensuremath{'.$currentstring.'}'; |
$currentstring='\ensuremath{'.$currentstring.'}'; |
Line 201 sub start_html {
|
Line 202 sub start_html {
|
'\usepackage{wrapfig}'. |
'\usepackage{wrapfig}'. |
'\usepackage{picins}'. |
'\usepackage{picins}'. |
'\usepackage[T1]{fontenc}'."\n". |
'\usepackage[T1]{fontenc}'."\n". |
'\usepacakge{ucs}'."\n". |
'\usepackage{lmodern}'."\n". |
'\usepackage[utf8]{inputenc}'."\n". |
'\usepackage[postscript]{ucs}'."\n". |
|
'\usepackage[utf8x]{inputenc}'."\n". |
|
'\usepackage{pifont}' ."\n". |
'\usepackage{latexsym}'."\n". |
'\usepackage{latexsym}'."\n". |
'\usepackage{epsfig}'. |
'\usepackage{epsfig}'. |
'\usepackage{calc}'. |
'\usepackage{calc}'. |
Line 210 sub start_html {
|
Line 213 sub start_html {
|
'\usepackage{amssymb}'. |
'\usepackage{amssymb}'. |
'\usepackage{amsfonts}'. |
'\usepackage{amsfonts}'. |
'\usepackage{amsthm}'. |
'\usepackage{amsthm}'. |
'\usepackage{amscd}'. |
'\usepackage{amscd}'; |
'\newenvironment{choicelist}{\begin{list}{}{\setlength{\rightmargin}{0in}\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.05in}\setlength{\itemsep}{0.022in}\setlength{\parsep}{0in}\setlength{\belowdisplayskip}{0.04in}\setlength{\abovedisplayskip}{0.05in}\setlength{\abovedisplayshortskip}{-0.04in}\setlength{\belowdisplayshortskip}{0.04in}}}{\end{list}}'. |
|
|
if($env{'form.pdfFormFields'} eq 'yes') { |
|
$currentstring .= '\usepackage{hyperref}'. |
|
'\usepackage{eforms}'. |
|
'\usepackage{tabularx}'; |
|
} |
|
|
|
$currentstring .= '\newenvironment{choicelist}{\begin{list}{}{\setlength{\rightmargin}{0in}\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.05in}\setlength{\itemsep}{0.022in}\setlength{\parsep}{0in}\setlength{\belowdisplayskip}{0.04in}\setlength{\abovedisplayskip}{0.05in}\setlength{\abovedisplayshortskip}{-0.04in}\setlength{\belowdisplayshortskip}{0.04in}}}{\end{list}}'. |
'\renewenvironment{theindex}{\begin{list}{}{{\vskip 1mm \noindent \large\textbf{Index}} \newline \setlength{\rightmargin}{0in}\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.01in}\setlength{\itemsep}{0.1in}\setlength{\parsep}{-0.02in}\setlength{\belowdisplayskip}{0.01in}\setlength{\abovedisplayskip}{0.01in}\setlength{\abovedisplayshortskip}{-0.04in}\setlength{\belowdisplayshortskip}{0.01in}}}{\end{list}}'; |
'\renewenvironment{theindex}{\begin{list}{}{{\vskip 1mm \noindent \large\textbf{Index}} \newline \setlength{\rightmargin}{0in}\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.01in}\setlength{\itemsep}{0.1in}\setlength{\parsep}{-0.02in}\setlength{\belowdisplayskip}{0.01in}\setlength{\abovedisplayskip}{0.01in}\setlength{\abovedisplayshortskip}{-0.04in}\setlength{\belowdisplayshortskip}{0.01in}}}{\end{list}}'; |
} |
} |
return $currentstring; |
return $currentstring; |
Line 593 sub start_body {
|
Line 603 sub start_body {
|
} |
} |
|
|
sub edit_controls { |
sub edit_controls { |
my $result .= (<<EDITBUTTON); |
my $result .= ' |
<form method="post"> |
<form method="post"> |
<input type="submit" name="editmode" accesskey="e" value="Edit" /> |
<div class="LC_edit_problem_header"> |
|
<div class="LC_edit_problem_header_row1">'. |
|
&Apache::lonxml::renderingoptions().' |
|
<input type="submit" name="changeproblemmode" value="'.&mt('Change View').'" /> |
|
</div> |
|
<div class="LC_edit_problem_header_edit_row"><input type="submit" name="editmode" accesskey="e" value="'.&mt('Edit').'" /></div></div> |
</form> |
</form> |
<br /> |
<br />'; |
EDITBUTTON |
|
return $result; |
return $result; |
} |
} |
|
|
Line 2012 sub start_table {
|
Line 2026 sub start_table {
|
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring .= $token->[4]; |
$currentstring .= $token->[4]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
|
&disable_para(); # Can't have paras in a table. |
push(@Apache::londefdef::table, {}); |
push(@Apache::londefdef::table, {}); |
$Apache::londefdef::table[-1]{'row_number'} = -1; |
$Apache::londefdef::table[-1]{'row_number'} = -1; |
#maximum table's width (default coincides with text line length) |
#maximum table's width (default coincides with text line length) |
Line 2510 sub end_table {
|
Line 2525 sub end_table {
|
pop @Apache::londefdef::table; |
pop @Apache::londefdef::table; |
undef @Apache::londefdef::table; |
undef @Apache::londefdef::table; |
} |
} |
} |
} |
|
&enable_para(); |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
Line 3010 sub start_img {
|
Line 3026 sub start_img {
|
|
|
# &Apache::lonxml::debug("LaTeX rendering = $latex_rendering image file: $src"); |
# &Apache::lonxml::debug("LaTeX rendering = $latex_rendering image file: $src"); |
|
|
#if original gif/jpg/png file exist do following: |
#if original bmp/gif/jpg/png file exist do following: |
my $origsrc=$src; |
my $origsrc=$src; |
my ($path,$file) = &get_eps_image($src); |
my ($path,$file) = &get_eps_image($src); |
# &Apache::lonnet::logthis("Image source: $src result: $path $file"); |
# &Apache::lonnet::logthis("Image source: $src result: $path $file"); |
Line 4288 sub image_replication {
|
Line 4304 sub image_replication {
|
} |
} |
return ''; |
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 { |
sub resize_image { |
my ($height_param, $width_param, $scaling, |
my ($height_param, $width_param, $scaling, |
$parstack, $safeeval, $depth, $cis) = @_; |
$parstack, $safeeval, $depth, $cis) = @_; |
Line 4411 sub get_eps_image {
|
Line 4409 sub get_eps_image {
|
&Apache::lonnet::repcopy($orig_src); # Failure is not completely fatal. |
&Apache::lonnet::repcopy($orig_src); # Failure is not completely fatal. |
} |
} |
&Apache::lonxml::debug("get_eps_image: Original image: $orig_src"); |
&Apache::lonxml::debug("get_eps_image: Original image: $orig_src"); |
my ($spath, $sname, $sext) = &fileparse($src, qr/\.(gif|png|jpg|jpeg)/i); |
my ($spath, $sname, $sext) = &fileparse($src, qr/\.(bmp|gif|png|jpg|jpeg)/i); |
$src=~s/\.(gif|png|jpg|jpeg)$/\.eps/i; |
$src=~s/\.(bmp|gif|png|jpg|jpeg)$/\.eps/i; |
$src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src); |
$src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src); |
&Apache::lonxml::debug("Filelocation gives: $src"); |
&Apache::lonxml::debug("Filelocation gives: $src"); |
if (! -e $src) { |
if (! -e $src) { |
Line 4473 sub eps_generation {
|
Line 4471 sub eps_generation {
|
my $temp_file = Apache::File->new('>>'.$filename); |
my $temp_file = Apache::File->new('>>'.$filename); |
print $temp_file "$src\n"; |
print $temp_file "$src\n"; |
my $newsrc = $src; |
my $newsrc = $src; |
$newsrc =~ s/(\.gif|\.jpg|\.jpeg)$/\.eps/i; |
$newsrc =~ s/(\.bmp|\.gif|\.jpg|\.jpeg)$/\.eps/i; |
$newsrc=~s{/home/httpd/html/res}{}; |
$newsrc=~s{/home/httpd/html/res}{}; |
$newsrc=~s{/home/($LONCAPA::username_re)/public_html/}{/$1/}; |
$newsrc=~s{/home/($LONCAPA::username_re)/public_html/}{/$1/}; |
$newsrc=~s{/\./}{/}; |
$newsrc=~s{/\./}{/}; |
Line 4498 sub file_path {
|
Line 4496 sub file_path {
|
} |
} |
return $file,$path; |
return $file,$path; |
} |
} |
# Converts a measurement in to mm from any of |
|
# the other valid LaTeX units of measure. |
|
# If the units of measure are missing from the |
|
# parameter, it is assumed to be in and returned |
|
# with mm units of measure |
|
sub recalc { |
sub recalc { |
my $argument = shift; |
my $argument = shift; |
if (not $argument=~/(mm|cm|in|pc|pt)/) {return $argument.' mm';} |
if (not $argument=~/(mm|cm|in|pc|pt)/) {return $argument.' mm';} |
Line 4546 sub LATEX_length {
|
Line 4541 sub LATEX_length {
|
return $value; |
return $value; |
} |
} |
|
|
# Wrap image 'stuff' inside of the LaTeX required to implement |
|
# alignment: |
|
# align_tex_image(align, latex_rendering, image) |
|
# Where: |
|
# align - The HTML alignment specification. |
|
# latex_rendering - rendering hint for latex. |
|
# image - The LaTeX needed to insert the image itsef. |
|
# width,height - dimensions of the image. |
|
# Returns: |
|
# The 1/2 wrapped image and the stuff required to close the |
|
# wrappage. This allows e.g. randomlabel to insert more stuff |
|
# into the closure. |
|
# |
|
sub align_latex_image { |
sub align_latex_image { |
my ($align, $latex_rendering, $image, $width, $height) = @_; |
my ($align, $latex_rendering, $image, $width, $height) = @_; |
my $currentstring; # The 1/2 wrapped image. |
my $currentstring; # The 1/2 wrapped image. |
Line 4625 sub align_latex_image {
|
Line 4608 sub align_latex_image {
|
return ($currentstring, $closure); |
return ($currentstring, $closure); |
} |
} |
|
|
# is_inside_of $tagstack $tag |
|
# This sub returns true if the current state of Xml processing |
|
# is inside of the tag. |
|
# Parameters: |
|
# tagstack - The tagstack from the parser. |
|
# tag - The tag (without the <>'s.). |
|
# Sample usage: |
|
# if (is_inside_of($tagstack "table")) { |
|
# # I'm in a table.... |
|
# } |
|
sub is_inside_of { |
sub is_inside_of { |
my ($tagstack, $tag) = @_; |
my ($tagstack, $tag) = @_; |
my @stack = @$tagstack; |
my @stack = @$tagstack; |
Line 4647 sub is_inside_of {
|
Line 4621 sub is_inside_of {
|
} |
} |
|
|
|
|
|
=pod |
|
|
|
=head1 NAME |
|
|
|
Apache::londefdef.pm |
|
|
|
=head1 SYNOPSIS |
|
|
|
Tags Default Definition Module |
|
|
|
This is part of the LearningOnline Network with CAPA project |
|
described at http://www.lon-capa.org. |
|
|
|
|
|
=head1 NOTABLE SUBROUTINES |
|
|
|
=over |
|
|
|
=item start_hideweboutput() |
|
|
|
=item end_hideweboutput() |
|
|
|
=item image_replication() |
|
|
|
=item resize_image() |
|
|
|
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. |
|
|
|
=item image_size() |
|
|
|
=item image_width() |
|
|
|
=item image_height() |
|
|
|
=item get_eps_image() |
|
|
|
=item eps_generation() |
|
|
|
=item file_path() |
|
|
|
=item recalc() |
|
|
|
Converts a measurement in to mm from any of |
|
the other valid LaTeX units of measure. |
|
If the units of measure are missing from the |
|
parameter, it is assumed to be in and returned |
|
with mm units of measure |
|
|
|
=item LATEX_length() |
|
|
|
=item align_latex_image() |
|
|
|
Wrap image 'stuff' inside of the LaTeX required to implement |
|
alignment: |
|
align_tex_image(align, latex_rendering, image) |
|
Where: |
|
align - The HTML alignment specification. |
|
latex_rendering - rendering hint for latex. |
|
image - The LaTeX needed to insert the image itsef. |
|
width,height - dimensions of the image. |
|
Returns: |
|
The 1/2 wrapped image and the stuff required to close the |
|
wrappage. This allows e.g. randomlabel to insert more stuff |
|
into the closure. |
|
|
|
|
|
=item is_inside_of($tagstack, $tag) |
|
This sub returns true if the current state of Xml processing is inside of the tag. |
|
Parameters: |
|
tagstack - The tagstack from the parser. |
|
tag - The tag (without the <>'s.). |
|
Sample usage: |
|
if (is_inside_of($tagstack "table")) { |
|
I'm in a table.... |
|
} |
|
|
|
|
|
|
|
=back |
|
|
|
=cut |
|
|
|
|
1; |
1; |
__END__ |
__END__ |