version 1.310, 2006/01/04 23:14:24
|
version 1.323, 2006/03/23 22:34:53
|
Line 105 sub start_m {
|
Line 105 sub start_m {
|
$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 evaulated to:$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) { |
&Apache::lonxml::warning("tth error: ". |
my $errormsg='<pre>'.&HTML::Entities::encode($Apache::lontexconvert::errorstring,'<>&"').'</pre> occured while attempting to convert this TeX: <pre>'; |
$Apache::lontexconvert::errorstring); |
$tex = &HTML::Entities::encode($tex,'<>&"'); |
|
my ($linenumber) = |
|
($Apache::lontexconvert::errorstring =~ /Line (\d+)/); |
|
if (defined($linenumber)) { |
|
my @tex=split("\n",$tex); |
|
$tex[$linenumber]='<b><font color="red">'. |
|
$tex[$linenumber].'</font></b>'; |
|
$tex=join("\n",@tex); |
|
} |
|
&Apache::lonxml::warning($errormsg.$tex.'</pre>'); |
$Apache::lontexconvert::errorstring=''; |
$Apache::lontexconvert::errorstring=''; |
} |
} |
#&Apache::lonxml::debug("M is ends with:$currentstring:"); |
#&Apache::lonxml::debug("M is ends with:$currentstring:"); |
Line 619 sub end_center {
|
Line 629 sub end_center {
|
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring = '\end{center}'; |
$currentstring = '\end{center}'; |
if (&is_inside_of($tagstack, "table")) { |
|
$currentstring .= ¢er_correction(); |
|
} |
|
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
Line 1187 sub start_p {
|
Line 1194 sub start_p {
|
$closing_string = '</p>'; # Deal correctly with <p /> e.g. |
$closing_string = '</p>'; # Deal correctly with <p /> e.g. |
} |
} |
} elsif ($target eq 'tex' && !$para_disabled) { |
} elsif ($target eq 'tex' && !$para_disabled) { |
|
|
$currentstring .= &end_p(); # close off prior para if in progress. |
$currentstring .= &end_p(); # close off prior para if in progress. |
my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); |
my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); |
if ($align eq 'center') { |
if ($align eq 'center') { |
Line 1194 sub start_p {
|
Line 1202 sub start_p {
|
$closing_string = '\end{center}'; |
$closing_string = '\end{center}'; |
if (&is_inside_of($tagstack, "table")) { |
if (&is_inside_of($tagstack, "table")) { |
$currentstring = ¢er_correction().$currentstring; |
$currentstring = ¢er_correction().$currentstring; |
$closing_string .= ¢er_correction(); |
|
} |
} |
} elsif ($align eq 'right') { |
} elsif ($align eq 'right') { |
$currentstring.='\makebox['.$env{'form.textwidth'}.']{\hfill\llap{'; |
$currentstring.="\n".'{\flushright '; |
$closing_string= '}}'; |
# $currentstring.='\makebox['.$env{'form.textwidth'}.']{\hfill\llap{'; |
|
$closing_string= "}\n"; |
} elsif ($align eq 'left') { |
} elsif ($align eq 'left') { |
$currentstring.='\noindent\makebox['.$env{'form.textwidth'}.']{\rlap{'; |
$currentstring.= "\n".'{\flushleft '; |
$closing_string = '}\hfill}'; |
# $currentstring.='\noindent\makebox['.$env{'form.textwidth'}.']{{'; |
|
$closing_string = "}\n"; |
} else { |
} else { |
$currentstring.='\par '; |
$currentstring.='\par '; |
$closing_string = '\strut\\\\\strut '; |
if (&is_inside_of($tagstack, 'table')) { |
|
$closing_string = '\vskip 0pt'; # Seems to be consistent with <p> in tables. |
|
} else { |
|
$closing_string = '\strut\\\\\strut '; |
|
} |
} |
} |
|
|
} |
} |
Line 1539 sub start_div {
|
Line 1552 sub start_div {
|
$endstring = '\end{center}'; |
$endstring = '\end{center}'; |
if (&is_inside_of($tagstack, "table")) { |
if (&is_inside_of($tagstack, "table")) { |
$currentstring = ¢er_correction().$currentstring; |
$currentstring = ¢er_correction().$currentstring; |
$endstring .= ¢er_correction(); |
|
} |
} |
} |
} |
elsif ($align eq 'right') { |
elsif ($align eq 'right') { |
Line 1961 sub start_table {
|
Line 1973 sub start_table {
|
|
|
# width either comes forced from the TeXwidth or the width parameters. |
# width either comes forced from the TeXwidth or the width parameters. |
# in either case it can be a percentage or absolute width. |
# in either case it can be a percentage or absolute width. |
|
# in the width case we ignore absolute width |
my $TeXwidth = &Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval,undef,0); |
my $TeXwidth = &Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval,undef,0); |
if (!defined($TeXwidth)) { |
if (!defined($TeXwidth)) { |
$TeXwidth = &Apache::lonxml::get_param('width',$parstack,$safeeval,undef,1); |
my $htmlwidth = &Apache::lonxml::get_param('width',$parstack, |
if (!defined($TeXwidth)) { $TeXwidth = $textwidth; } |
$safeeval,undef,1); |
|
if ($htmlwidth =~ /%/) { |
|
$TeXwidth = $htmlwidth; |
|
} else { |
|
$TeXwidth = $textwidth; |
|
} |
} else { |
} else { |
$Apache::londefdef::table[-1]{'forcedtablewidth'} = 1; |
$Apache::londefdef::table[-1]{'forcedtablewidth'} = 1; |
} |
} |
Line 1975 sub start_table {
|
Line 1992 sub start_table {
|
$Apache::londefdef::table[-1]{'width'}=$1*$textwidth/100; |
$Apache::londefdef::table[-1]{'width'}=$1*$textwidth/100; |
} else { |
} else { |
$Apache::londefdef::table[-1]{'width'}=$TeXwidth; |
$Apache::londefdef::table[-1]{'width'}=$TeXwidth; |
} |
} |
|
# In the end, however the table width cannot be wider than $textwidth... |
|
|
|
if ($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); |
Line 2019 sub end_table {
|
Line 2041 sub end_table {
|
my $inmemory = ''; |
my $inmemory = ''; |
my $output = ''; |
my $output = ''; |
my $WARNING=''; |
my $WARNING=''; |
# &debug_dump_table($Apache::londefdef::table[-1]); |
|
#width of columns from TeXwidth attributes |
#width of columns from TeXwidth attributes |
|
|
for (my $in=0;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) { |
for (my $in=0;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) { |
Line 2206 sub end_table {
|
Line 2227 sub end_table {
|
for (my $in=0;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) { |
for (my $in=0;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) { |
my $have_rowspan = 0; |
my $have_rowspan = 0; |
for (my $jn=0;$jn<=$#fwidth;$jn++) { |
for (my $jn=0;$jn<=$#fwidth;$jn++) { |
|
|
|
#----------------------------------------------------------- |
|
# I think this order of doing things will ensure that |
|
# single rowspan, columspan and combined row/colspans will |
|
# work correctly. LaTeX is delicate here. |
|
# RF. |
|
|
|
# Start a rowspan if necessary: |
|
|
|
my $rowspan = $Apache::londefdef::table[-1]{'rowspan'}[$in][$jn]; |
|
my $colspan = $Apache::londefdef::table[-1]{'colspan'}[$in][$jn]; |
# |
# |
# Do the appropriate magic if this has a colspan |
# Do the appropriate magic if this has a colspan |
# |
# |
my $colspan = $Apache::londefdef::table[-1]{'colspan'}[$in][$jn]; |
|
if ($colspan > 1) { |
if ($colspan > 1) { |
$output .= '\multicolumn{'. |
$output .= '\multicolumn{'. |
$colspan |
$colspan |
.'}{|l|}{'; |
.'}{|l|}{'; |
} |
} |
my $rowspan = $Apache::londefdef::table[-1]{'rowspan'}[$in][$jn]; |
|
|
|
# Start a rowspan if necessary: |
|
|
|
if ($rowspan > 1) { |
if ($rowspan > 1) { |
$have_rowspan++; |
$have_rowspan++; |
Line 2226 sub end_table {
|
Line 2255 sub end_table {
|
if (($rowspan eq '^') || ($rowspan eq '_')) { |
if (($rowspan eq '^') || ($rowspan eq '_')) { |
$have_rowspan++; |
$have_rowspan++; |
} |
} |
|
#-------------------------------------------------------------- |
|
|
if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') { |
if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') { |
$output.=¢er_correction().'\begin{center}'; |
$output.=¢er_correction().'\begin{center}'; |
Line 2234 sub end_table {
|
Line 2264 sub end_table {
|
} |
} |
$output.=$Apache::londefdef::table[-1]{'content'}[$in][$jn]; |
$output.=$Apache::londefdef::table[-1]{'content'}[$in][$jn]; |
if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') { |
if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') { |
$output.='\end{center}'.¢er_correction(); |
$output.='\end{center}'; |
} elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') { |
} elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') { |
$output.='} '; |
$output.='} '; |
} |
} |
Line 2260 sub end_table {
|
Line 2290 sub end_table {
|
$output .= ' \\\\ '; |
$output .= ' \\\\ '; |
for (my $jn=0; $jn<=$#fwidth;$jn++) { |
for (my $jn=0; $jn<=$#fwidth;$jn++) { |
my $rowspan = $Apache::londefdef::table[-1]{'rowspan'}[$in][$jn]; |
my $rowspan = $Apache::londefdef::table[-1]{'rowspan'}[$in][$jn]; |
if (($rowspan <= 1) || ($rowspan eq '_')) { |
if ($rowspan ne "^") { |
my $column = $jn+1; |
if (($rowspan <= 1) || ($rowspan eq '_')) { |
$output .= '\cline{'.$column.'-'.$column.'} '; |
my $column = $jn+1; |
|
$output .= '\cline{'.$column.'-'.$column.'} '; |
|
} |
} |
} |
} |
} |
|
|
Line 2432 sub end_td_tex {
|
Line 2464 sub end_td_tex {
|
$Apache::londefdef::table[-1]{'counter_columns'} = $current_column; |
$Apache::londefdef::table[-1]{'counter_columns'} = $current_column; |
|
|
|
|
|
# Get the column and row spans. |
|
# Colspan can be done via \multicolumn if I can figure out the data structs. |
|
|
|
my $colspan = &Apache::lonxml::get_param('colspan', $parstack, $safeeval, undef, 0); |
|
if (!$colspan) { |
|
$colspan = 1; |
|
} |
|
|
my $rowspan = &Apache::lonxml::get_param('rowspan', $parstack, $safeeval, undef, 0); |
my $rowspan = &Apache::lonxml::get_param('rowspan', $parstack, $safeeval, undef, 0); |
if (!$rowspan) { |
if (!$rowspan) { |
Line 2440 sub end_td_tex {
|
Line 2479 sub end_td_tex {
|
|
|
|
|
|
|
$Apache::londefdef::table[-1]{'rowspan'}[$current_row][$current_column] = $rowspan; |
for (my $c = 0; $c < $colspan; $c++) { |
for (my $i = 1; $i < $rowspan; $i++) { |
$Apache::londefdef::table[-1]{'rowspan'}[$current_row][$current_column+$c] = $rowspan; |
$Apache::londefdef::table[-1]{'rowspan'}[$current_row+$i][$current_column] = '^'; |
for (my $i = 1; $i < $rowspan; $i++) { |
if ($i == ($rowspan-1)) { |
$Apache::londefdef::table[-1]{'rowspan'}[$current_row+$i][$current_column+$c] = '^'; |
$Apache::londefdef::table[-1]{'rowspan'}[$current_row+$i][$current_column] = '_'; |
if ($i == ($rowspan-1)) { |
|
$Apache::londefdef::table[-1]{'rowspan'}[$current_row+$i][$current_column+$c] = '_'; |
|
} |
} |
} |
} |
} |
|
|
Line 2539 sub end_td_tex {
|
Line 2580 sub end_td_tex {
|
|
|
push @ {$Apache::londefdef::table[-1]{'content'}[-1] },$data; |
push @ {$Apache::londefdef::table[-1]{'content'}[-1] },$data; |
|
|
# Get the column and row spans. |
|
# Colspan can be done via \multicolumn if I can figure out the data structs. |
|
|
|
my $colspan = &Apache::lonxml::get_param('colspan', $parstack, $safeeval, undef, 0); |
|
if (!$colspan) { |
|
$colspan = 1; |
|
} |
|
|
|
|
|
# the colspan array will indicate how many columns will be spanned by this |
# the colspan array will indicate how many columns will be spanned by this |
Line 2554 sub end_td_tex {
|
Line 2589 sub end_td_tex {
|
# counter_columns is incremented in the start_td_tex, we adjust by colspan-1. |
# counter_columns is incremented in the start_td_tex, we adjust by colspan-1. |
# |
# |
|
|
$Apache::londefdef::table[-1]{'colspan'}[$current_row][$current_column] = $colspan; |
|
$Apache::londefdef::table[-1]{'counter_columns'} += $colspan -1; |
$Apache::londefdef::table[-1]{'counter_columns'} += $colspan -1; |
|
|
# Put empty text in spanned cols. |
|
|
|
for (my $i = 0; $i < ($colspan -1); $i++) { |
for (my $i = 0; $i < ($colspan -1); $i++) { |
push @ {$Apache::londefdef::table[-1]{'content'}[-1] },''; |
push @ {$Apache::londefdef::table[-1]{'content'}[-1] },''; |
} |
} |
|
for (my $r = 0; $r < $rowspan; $r++) { |
|
$Apache::londefdef::table[-1]{'colspan'}[$current_row+$r][$current_column] = $colspan; |
|
# Put empty text in spanned cols. |
|
|
|
} |
|
|
|
|
|
|
return ''; |
return ''; |
Line 2735 sub start_img {
|
Line 2772 sub start_img {
|
|
|
if ($target eq 'web') { |
if ($target eq 'web') { |
if ($env{'browser.imagesuppress'} ne 'on') { |
if ($env{'browser.imagesuppress'} ne 'on') { |
$currentstring.=&Apache::lonenc::encrypt_ref($token,{'src'=>$src}); |
my $enc = ('yes' eq |
} else { |
lc(&Apache::lonxml::get_param('encrypturl',$parstack, |
my $alttag= &Apache::lonxml::get_param |
$safeeval))); |
('alt',$parstack,$safeeval,undef,1); |
$currentstring.=&Apache::lonenc::encrypt_ref($token,{'src'=>$src}, |
unless ($alttag) { |
$enc); |
$alttag=&Apache::lonmeta::alttag |
} else { |
($Apache::lonxml::pwd[-1],$src); |
my $alttag = &Apache::lonxml::get_param('alt',$parstack,$safeeval, |
|
undef,1); |
|
if (!$alttag) { |
|
$alttag = &Apache::lonmeta::alttag($Apache::lonxml::pwd[-1], |
|
$src); |
} |
} |
$currentstring.='[IMAGE: '.$alttag.']'; |
$currentstring.='[IMAGE: '.$alttag.']'; |
} |
} |
Line 2760 sub start_img {
|
Line 2801 sub start_img {
|
$safeeval, |
$safeeval, |
undef,1)); |
undef,1)); |
if(!$align) { |
if(!$align) { |
# disabled for now see BUG#4535 |
|
if (0 && &is_inside_of($tagstack, "table")) { |
|
$align = "right"; # Force wraptext use. |
|
} else { |
|
$align = "bottom"; # This is html's default so it's ours too. |
$align = "bottom"; # This is html's default so it's ours too. |
} |
|
} |
} |
# |
# |
&Apache::lonxml::debug("Alignemnt = $align"); |
&Apache::lonxml::debug("Alignemnt = $align"); |
Line 2780 sub start_img {
|
Line 2816 sub start_img {
|
$parstack, |
$parstack, |
$safeeval, |
$safeeval, |
undef,0); |
undef,0); |
&Apache::lonxml::debug("LaTeX rendering = $latex_rendering"); |
# &Apache::lonxml::debug("LaTeX rendering = $latex_rendering"); |
if(!$latex_rendering) { |
if(!$latex_rendering) { |
$latex_rendering = "texwrap"; |
$latex_rendering = "texwrap"; |
} |
} |
&Apache::lonxml::debug("LaTeX rendering = $latex_rendering image file: $src"); |
# using texwrap inside a table does not work. So, if after all of this, |
|
# texwrap is on, we turn it off if we detect we're in a table: |
|
# |
|
if (($latex_rendering eq 'texwrap') && &is_inside_of($tagstack, "table")) { |
|
$latex_rendering = 'parpic'; |
|
} |
|
|
|
# &Apache::lonxml::debug("LaTeX rendering = $latex_rendering image file: $src"); |
|
|
#if original gif/jpg/png file exist do following: |
#if original gif/jpg/png file exist do following: |
my $origsrc=$src; |
my $origsrc=$src; |
Line 2866 sub start_img {
|
Line 2909 sub start_img {
|
['','bottom','middle','top','left','right'],$token,5); |
['','bottom','middle','top','left','right'],$token,5); |
$currentstring .=&Apache::edit::select_arg('TeXwrap:', 'TeXwrap', |
$currentstring .=&Apache::edit::select_arg('TeXwrap:', 'TeXwrap', |
['', 'parbox', 'parpic'], $token, 2); |
['', 'parbox', 'parpic'], $token, 2); |
|
$currentstring .=&Apache::edit::select_arg('Encyrpt URL:','encrypturl', |
|
['no','yes'], $token, 2); |
$currentstring .=&Apache::edit::end_row().&Apache::edit::start_spanning_row(); |
$currentstring .=&Apache::edit::end_row().&Apache::edit::start_spanning_row(); |
my $src= &Apache::lonxml::get_param('src',$parstack,$safeeval); |
my $src= &Apache::lonxml::get_param('src',$parstack,$safeeval); |
my $alt= &Apache::lonxml::get_param('alt',$parstack,$safeeval); |
my $alt= &Apache::lonxml::get_param('alt',$parstack,$safeeval); |
Line 2883 sub start_img {
|
Line 2928 sub start_img {
|
my $ctag=&Apache::edit::get_new_args($token,$parstack, |
my $ctag=&Apache::edit::get_new_args($token,$parstack, |
$safeeval,'src','alt','align', |
$safeeval,'src','alt','align', |
'TeXwidth','TeXheight', 'TeXwrap', |
'TeXwidth','TeXheight', 'TeXwrap', |
'width','height'); |
'width','height','encrypturl'); |
my ($nsrc,$nwidth,$nheight)= |
my ($nsrc,$nwidth,$nheight)= |
($token->[2]{'src'},$token->[2]{'width'},$token->[2]{'height'}); |
($token->[2]{'src'},$token->[2]{'width'},$token->[2]{'height'}); |
my $loc=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$nsrc); |
my $loc=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$nsrc); |
Line 3158 sub start_pre {
|
Line 3203 sub start_pre {
|
$currentstring .= $token->[4]; |
$currentstring .= $token->[4]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring .= '\begin{verbatim}'; |
$currentstring .= '\begin{verbatim}'; |
|
&Apache::lonxml::disable_LaTeX_substitutions(); |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
Line 3169 sub end_pre {
|
Line 3215 sub end_pre {
|
$currentstring .= $token->[2]; |
$currentstring .= $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
$currentstring .= '\end{verbatim}'; |
$currentstring .= '\end{verbatim}'; |
|
&Apache::lonxml::enable_LaTeX_substitutions(); |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |