version 1.358, 2007/03/13 13:35:39
|
version 1.365, 2007/05/10 09:50:10
|
Line 128 sub start_m {
|
Line 128 sub start_m {
|
#&Apache::lonxml::debug("M is ends with:$currentstring:"); |
#&Apache::lonxml::debug("M is ends with:$currentstring:"); |
$Apache::lonxml::post_evaluate=0; |
$Apache::lonxml::post_evaluate=0; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
|
|
$currentstring = $inside; |
$currentstring = $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 135 sub start_m {
|
Line 136 sub start_m {
|
} |
} |
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 |
# detect simple math mode entry exits, and convert them |
# to use \ensuremath |
# to use \ensuremath ... unless there's a \verb inside. |
if ($currentstring=~/^\s*\$[^\$].*[^\$]\$\s*$/) { |
if (! ($currentstring=~/\\verb/)) { |
$currentstring=~s/^(\s*)\$/$1/; |
if ($currentstring=~/^\s*\$[^\$].*[^\$]\$\s*$/) { |
$currentstring=~s/\$(\s*)$/$1/; |
$currentstring=~s/^(\s*)\$/$1/; |
$currentstring='\ensuremath{'.$currentstring.'}'; |
$currentstring=~s/\$(\s*)$/$1/; |
|
$currentstring='\ensuremath{'.$currentstring.'}'; |
|
} |
} |
} |
$Apache::lonxml::post_evaluate=0; |
$Apache::lonxml::post_evaluate=0; |
} |
} |
Line 1458 sub start_hr {
|
Line 1461 sub start_hr {
|
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') { |
|
|
|
# <hr /> can't be inside of <sup><sub> thank you LaTeX. |
|
# |
|
my $restart_sub = 0; |
|
my $restart_sup = 0; |
|
|
|
# Since <sub> and <sup> are simple tags it's ok to turn off/on |
|
# using the start_ stop_ functions.. those tags only care about |
|
# $target. |
|
|
|
if (&is_inside_of($tagstack, "sub")) { |
|
$restart_sub = 1; |
|
$currentstring .= &end_sub($target, $token, $tagstack, |
|
$parstack, $parser, $safeeval); |
|
} |
|
if (&is_inside_of($tagstack, "sup")) { |
|
$restart_sup = 1; |
|
$currentstring .= &end_sup($target, $token, $tagstack, |
|
$parstack, $parser, $safeeval); |
|
} |
|
|
my $LaTeXwidth = &Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval,undef,0); |
my $LaTeXwidth = &Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval,undef,0); |
if (defined $LaTeXwidth) { |
if (defined $LaTeXwidth) { |
if ($LaTeXwidth=~/^%/) { |
if ($LaTeXwidth=~/^%/) { |
Line 1478 sub start_hr {
|
Line 1502 sub start_hr {
|
} |
} |
$currentstring .= ' \vskip 0 mm \noindent\makebox['.$LaTeXwidth.']{'.$pre.'\makebox['. |
$currentstring .= ' \vskip 0 mm \noindent\makebox['.$LaTeXwidth.']{'.$pre.'\makebox['. |
$LaTeXwidth.'][b]{\hrulefill}'.$post.'}\vskip 0 mm '; |
$LaTeXwidth.'][b]{\hrulefill}'.$post.'}\vskip 0 mm '; |
|
# Turn stuff back on that we can't be inside of. |
|
|
|
if ($restart_sub) { |
|
$currentstring .= &start_sub($target, $token, $tagstack, |
|
$parstack, $parser, $safeeval); |
|
} |
|
if ($restart_sup) { |
|
$currentstring .= &start_sup($target, $token, $tagstack, |
|
$parstack, $parser, $safeeval); |
|
} |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
Line 1575 sub end_a {
|
Line 1609 sub end_a {
|
&Apache::lonxml::get_param('name',$parstack,$safeeval,undef,1); |
&Apache::lonxml::get_param('name',$parstack,$safeeval,undef,1); |
if ($href =~ /\S/) { |
if ($href =~ /\S/) { |
$href =~ s/([^\\])%/$1\\\%/g; |
$href =~ s/([^\\])%/$1\\\%/g; |
$currentstring .= ' ({\tt URI:'.&Apache::lonxml::latex_special_symbols($href).'})'; |
# Substitute special symbols... and allow line breaks at each / |
|
# |
|
$href = &Apache::lonxml::latex_special_symbols($href); |
|
$href =~ s/\//\/\\-/g; # Map / to /\- to allow hyphenation. |
|
$currentstring .= ' ({\tt URI:'.$href.'})'; |
} elsif ($name =~ /\S/) { |
} elsif ($name =~ /\S/) { |
$currentstring .= ' ({\tt Anchor:'.&Apache::lonxml::latex_special_symbols($name).'})'; |
$currentstring .= ' ({\tt Anchor:'.&Apache::lonxml::latex_special_symbols($name).'})'; |
} else { |
} else { |
Line 1951 sub start_table {
|
Line 1989 sub start_table {
|
} else { |
} else { |
$TeXwidth = $textwidth; |
$TeXwidth = $textwidth; |
} |
} |
} else { |
|
$Apache::londefdef::table[-1]{'forcedtablewidth'} = 1; |
|
} |
} |
|
# if the width is specified as a % it is converted to an absolute width. |
|
# otherwise.. just plugged right in the hash |
|
|
if ($TeXwidth=~/%/) { |
if ($TeXwidth=~/%/) { |
$Apache::londefdef::table[-1]{'percent'}=1; |
|
$TeXwidth=~/(\d+)/; |
$TeXwidth=~/(\d+)/; |
$Apache::londefdef::table[-1]{'width'}=$1*$textwidth/100; |
$Apache::londefdef::table[-1]{'width'}=$1*$textwidth/100; |
} else { |
} else { |
Line 1966 sub start_table {
|
Line 2004 sub start_table {
|
if ($Apache::londefdef::table[-1]{'width'} > $textwidth) { |
if ($Apache::londefdef::table[-1]{'width'} > $textwidth) { |
$Apache::londefdef::table[-1]{'width'} = $textwidth; |
$Apache::londefdef::table[-1]{'width'} = $textwidth; |
} |
} |
|
|
#table's border |
#table's border |
my $border = &Apache::lonxml::get_param('border',$parstack,$safeeval); |
my $border = &Apache::lonxml::get_param('border',$parstack,$safeeval); |
my $permission=&Apache::lonxml::get_param('TeXDropEmptyColumns',$parstack,$safeeval,undef,0); |
my $permission=&Apache::lonxml::get_param('TeXDropEmptyColumns',$parstack,$safeeval,undef,0); |
Line 2107 sub end_table {
|
Line 2144 sub end_table {
|
$space_neeeded=$space_neeeded+$max_len[$jn]; |
$space_neeeded=$space_neeeded+$max_len[$jn]; |
} |
} |
if ($space_neeeded<=$available_space) { |
if ($space_neeeded<=$available_space) { |
|
|
for (my $jn=0;$jn<=$#max_len;$jn++) { |
for (my $jn=0;$jn<=$#max_len;$jn++) { |
if ($fwidth[$jn]==0) { |
if ($fwidth[$jn]==0) { |
$fwidth[$jn]=$max_len[$jn]; |
$fwidth[$jn]=$max_len[$jn]; |
Line 2190 sub end_table {
|
Line 2228 sub end_table {
|
} |
} |
} |
} |
} |
} |
#use all available width if it is defined in % or as TeXwidth |
# use all available width or specified width as if not specified, |
if (($Apache::londefdef::table[-1]{'percent'}==1) || ($Apache::londefdef::table[-1]{'forcetablewidth'}==1)) { |
# the specified width gets defaulted to the available width. |
my $current=0; |
|
for (my $i=0;$i<=$#fwidth;$i++) { |
my $current=0; |
$current+=$fwidth[$i]; |
for (my $i=0;$i<=$#fwidth;$i++) { |
} |
$current+=$fwidth[$i]; |
my $coef=$Apache::londefdef::table[-1]{'width'}/$current; |
} |
for (my $i=0;$i<=$#fwidth;$i++) { |
my $coef=$Apache::londefdef::table[-1]{'width'}/$current; |
$fwidth[$i]*=$coef; |
for (my $i=0;$i<=$#fwidth;$i++) { |
} |
$fwidth[$i]*=$coef; |
} |
} |
#removing of empty columns if allowed |
#removing of empty columns if allowed |
my $permission=&Apache::lonxml::get_param('TeXDropEmptyColumns',$parstack,$safeeval,undef,0); |
my $permission=&Apache::lonxml::get_param('TeXDropEmptyColumns',$parstack,$safeeval,undef,0); |
Line 2220 sub end_table {
|
Line 2258 sub end_table {
|
$Apache::londefdef::table[-1]{'content'}=\@cleaned_table; |
$Apache::londefdef::table[-1]{'content'}=\@cleaned_table; |
@fwidth=@cleaned_header; |
@fwidth=@cleaned_header; |
} |
} |
# At this time we must be sure the table does not overhang the total width |
|
# this can happen due to our 'average width' adjustment. |
|
# Total the column widths and see if they are larger than the avail width; |
|
# If so scale them down in proportion to their percentage of total width. |
|
|
|
my $current_total_width = 0; |
|
for (my $col = 0; $col < $#fwidth; $col++) { |
|
$current_total_width = $current_total_width + $fwidth[$col]; |
|
} |
|
|
|
#construct header of the table |
#construct header of the table |
my $header_of_table = '{'.$Apache::londefdef::table[-1]{'vvinc'}; |
my $header_of_table = '{'.$Apache::londefdef::table[-1]{'vvinc'}; |
Line 3064 sub start_applet {
|
Line 3094 sub start_applet {
|
$currentstring='[APPLET: '.$alttag.']'; |
$currentstring='[APPLET: '.$alttag.']'; |
} |
} |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
|
# Turn off some stuff we can't be inside thank you LaTeX |
|
|
|
|
|
my $restart_sub = 0; |
|
my $restart_sup = 0; |
|
|
|
# Since <sub> and <sup> are simple tags it's ok to turn off/on |
|
# using the start_ stop_ functions.. those tags only care about |
|
# $target. |
|
|
|
if (&is_inside_of($tagstack, "sub")) { |
|
$restart_sub = 1; |
|
$currentstring .= &end_sub($target, $token, $tagstack, |
|
$parstack, $parser, $safeeval); |
|
} |
|
if (&is_inside_of($tagstack, "sup")) { |
|
$restart_sup = 1; |
|
$currentstring .= &end_sup($target, $token, $tagstack, |
|
$parstack, $parser, $safeeval); |
|
} |
|
|
|
# Now process the applet; just replace it with its alt attribute. |
|
|
my $alttag= &Apache::lonxml::get_param('alt',$parstack, |
my $alttag= &Apache::lonxml::get_param('alt',$parstack, |
$safeeval,undef,1); |
$safeeval,undef,1); |
unless ($alttag) { |
unless ($alttag) { |
Line 3074 sub start_applet {
|
Line 3127 sub start_applet {
|
} |
} |
$currentstring.='\begin{center} \fbox{Java Applet: '.$alttag. |
$currentstring.='\begin{center} \fbox{Java Applet: '.$alttag. |
'.}\end{center}'; |
'.}\end{center}'; |
|
|
|
# Turn stuff back on that we can't be inside of. |
|
|
|
if ($restart_sub) { |
|
$currentstring .= &start_sub($target, $token, $tagstack, |
|
$parstack, $parser, $safeeval); |
|
} |
|
if ($restart_sup) { |
|
$currentstring .= &start_sup($target, $token, $tagstack, |
|
$parstack, $parser, $safeeval); |
|
} |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |