version 1.291, 2005/11/03 21:42:15
|
version 1.294, 2005/11/27 23:54:00
|
Line 48 use Apache::lonmenu();
|
Line 48 use Apache::lonmenu();
|
use Apache::lonmeta(); |
use Apache::lonmeta(); |
use Apache::Constants qw(:common); |
use Apache::Constants qw(:common); |
use File::Basename; |
use File::Basename; |
|
use Data::Dumper; |
|
|
BEGIN { |
BEGIN { |
|
|
Line 55 BEGIN {
|
Line 56 BEGIN {
|
|
|
} |
} |
|
|
|
# |
|
# Dumps all elements of the table structure. |
|
# Need this 'cause evidently when given an array, Data::Dumper only seems |
|
# to dump element 0. |
|
# |
|
sub debug_dump_table { |
|
my $lastrow = $#Apache::londefdef::table; |
|
&Apache::lonnet::logthis("Dumping table: Last row index: $lastrow"); |
|
my $row; |
|
for ($row =0; $row <= $lastrow; $row++ ) { |
|
my $text = Dumper($Apache::londefdef::table[$row]); |
|
&Apache::lonnet::logthis("table [ $row ]".$text); |
|
|
|
} |
|
} |
|
|
sub initialize_londefdef { |
sub initialize_londefdef { |
$Apache::londefdef::TD_redirection=0; |
$Apache::londefdef::TD_redirection=0; |
Line 110 sub start_m {
|
Line 126 sub start_m {
|
# detect simple math mode entry exits, and convert them |
# detect simple math mode entry exits, and convert them |
# to use \ensuremath |
# to use \ensuremath |
if ($currentstring=~/^\s*\$[^\$].*[^\$]\$\s*$/) { |
if ($currentstring=~/^\s*\$[^\$].*[^\$]\$\s*$/) { |
$currentstring=~s/^\$//; |
$currentstring=~s/^(\s*)\$/$1/; |
$currentstring=~s/\$$//; |
$currentstring=~s/\$(\s*)$/$1/; |
$currentstring='\ensuremath{'.$currentstring.'}'; |
$currentstring='\ensuremath{'.$currentstring.'}'; |
} |
} |
$Apache::lonxml::post_evaluate=0; |
$Apache::lonxml::post_evaluate=0; |
Line 1925 sub start_table {
|
Line 1941 sub start_table {
|
} |
} |
} |
} |
} |
} |
|
|
|
# width either comes forced from the TeXwidth or the width parameters. |
|
# in either case it can be a percentage or 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 (not defined $TeXwidth) { |
if (not defined $TeXwidth) { |
my $htmlwidth = &Apache::lonxml::get_param('width',$parstack,$safeeval,undef,1); |
$TeXwidth = &Apache::lonxml::get_param('width',$parstack,$safeeval,undef,1); |
if ($htmlwidth=~/%/) { |
|
$Apache::londefdef::table[-1]{'percent'}=1; |
} else { |
$htmlwidth=~/(\d+)/; |
$Apache::londefdef::table[-1]{'forcedtablewidth'} = 1; |
$Apache::londefdef::table[-1]{'width'}=$1*$textwidth/100;; |
} |
} else { |
if ($TeXwidth=~/%/) { |
$Apache::londefdef::table[-1]{'width'}=$textwidth; |
|
} |
|
} elsif ($TeXwidth=~/%/) { |
|
$Apache::londefdef::table[-1]{'percent'}=1; |
$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 { |
$Apache::londefdef::table[-1]{'forcetablewidth'}=1; |
|
$Apache::londefdef::table[-1]{'width'}=$TeXwidth; |
$Apache::londefdef::table[-1]{'width'}=$TeXwidth; |
} |
} |
|
|
#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 1970 sub start_table {
|
Line 1987 sub start_table {
|
$Apache::londefdef::table[-1]{'content'}=[]; |
$Apache::londefdef::table[-1]{'content'}=[]; |
$Apache::londefdef::table[-1]{'align'}=[]; |
$Apache::londefdef::table[-1]{'align'}=[]; |
$currentstring.='\keephidden{NEW TABLE ENTRY}'; |
$currentstring.='\keephidden{NEW TABLE ENTRY}'; |
} |
&Apache::lonnet::logthis("------ start-table------"); |
|
&debug_dump_table; |
|
&Apache::lonnet::logthis("-------start-table------"); |
|
|
|
} |
return $currentstring; |
return $currentstring; |
} |
} |
|
|
Line 1984 sub end_table {
|
Line 2005 sub end_table {
|
my $output = ''; |
my $output = ''; |
my $WARNING=''; |
my $WARNING=''; |
#width of columns from TeXwidth attributes |
#width of columns from TeXwidth attributes |
|
&Apache::lonnet::logthis("----------------end_table-----------------"); |
|
&debug_dump_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++) { |
for (my $jn=0;$jn<=$Apache::londefdef::table[-1]{'counter_columns'};$jn++) { |
for (my $jn=0;$jn<=$Apache::londefdef::table[-1]{'counter_columns'};$jn++) { |
if ($Apache::londefdef::table[-1]{'TeXlen'}[0][$jn]<$Apache::londefdef::table[-1]{'TeXlen'}[$in][$jn]) { |
if ($Apache::londefdef::table[-1]{'TeXlen'}[0][$jn]<$Apache::londefdef::table[-1]{'TeXlen'}[$in][$jn]) { |
Line 2168 sub end_table {
|
Line 2192 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++) { |
for (my $jn=0;$jn<=$#fwidth;$jn++) { |
for (my $jn=0;$jn<=$#fwidth;$jn++) { |
if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') { |
if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') { |
$output.='\vspace*{-6 mm}\begin{center}'; |
# $output.='\vspace*{-6 mm}\begin{center}'; |
|
$output.='\begin{center}'; |
} elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') { |
} elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') { |
$output.=' \hfill \llap{' |
$output.=' \hfill \llap{' |
} |
} |
$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}\vspace*{-6 mm}'; |
# $output.='\end{center}\vspace*{-6 mm}'; |
|
$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 2187 sub end_table {
|
Line 2213 sub end_table {
|
$Apache::londefdef::table[-1]{'output'} .= $header_of_table.$Apache::londefdef::table[-1]{'hinc'}.$output.'\end{tabular}\strut'.'\\\\'."\n".'\strut '; |
$Apache::londefdef::table[-1]{'output'} .= $header_of_table.$Apache::londefdef::table[-1]{'hinc'}.$output.'\end{tabular}\strut'.'\\\\'."\n".'\strut '; |
if ($#Apache::londefdef::table > 0) { |
if ($#Apache::londefdef::table > 0) { |
my $inmemory = $Apache::londefdef::table[-1]{'output'}; |
my $inmemory = $Apache::londefdef::table[-1]{'output'}; |
|
&Apache::lonnet::logthis("--- popping nested table --"); |
|
# Figure out max/and min width by summing us and then |
|
# apply that to the current column of the table we nest in |
|
# if it's larger than the current width or the current width |
|
# is undefined. |
|
# |
|
my $min_nested_width = 0; |
|
my $max_nested_width = 0; |
|
for (my $col = 0; $col <= $Apache::londefdef::table[-1]{'counter_columns'}; $col++) { |
|
|
|
$min_nested_width += $min_len[$col]; |
|
$max_nested_width += $max_len[$col]; |
|
} |
|
# Fudge in an extra 5 mm for borders etc: |
|
|
|
$min_nested_width += 5; |
|
$max_nested_width += 5; |
|
|
|
&Apache::lonnet::logthis("Nested min: $min_nested_width"); |
|
&Apache::lonnet::logthis("Nested max: $max_nested_width"); |
|
my $outer_column = $Apache::londefdef::table[-2]{'counter_columns'}; |
|
my $outer_row = $Apache::londefdef::table[-2]{'row_number'}; |
|
&Apache::lonnet::logthis("Outer row/column: $outer_row : $outer_column"); |
|
if ($min_nested_width > $Apache::londefdef::table[-2]{'minlen'}[$outer_row][$outer_column]) { |
|
$Apache::londefdef::table[-2]{'minlen'}[$outer_row][$outer_column] = $min_nested_width; |
|
} |
|
if ($max_nested_width > $Apache::londefdef::table[-2]{'maxlen'}[$outer_row][$outer_column]) { |
|
$Apache::londefdef::table[-2]{'maxlen'}[$outer_row][$outer_column] = $max_nested_width; |
|
} |
|
|
pop @Apache::londefdef::table; |
pop @Apache::londefdef::table; |
push @{$Apache::londefdef::table[-1]{'include'}}, $inmemory; |
push @{$Apache::londefdef::table[-1]{'include'}}, $inmemory; |
} else { |
} else { |
Line 2194 sub end_table {
|
Line 2250 sub end_table {
|
pop @Apache::londefdef::table; |
pop @Apache::londefdef::table; |
undef @Apache::londefdef::table; |
undef @Apache::londefdef::table; |
} |
} |
|
&debug_dump_table; |
|
&Apache::lonnet::logthis("---------end table------"); |
|
|
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
Line 2205 sub start_tr {
|
Line 2264 sub start_tr {
|
if ($target eq 'web') { |
if ($target eq 'web') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
|
&Apache::lonnet::logthis("--------------start-tr----------"); |
$Apache::londefdef::table[-1]{'row_number'}++; |
$Apache::londefdef::table[-1]{'row_number'}++; |
my $alignchar=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); |
my $alignchar=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); |
if ($alignchar ne '') { |
if ($alignchar ne '') { |
Line 2219 sub start_tr {
|
Line 2279 sub start_tr {
|
push @ {$Apache::londefdef::table[-1]{'minlen'}}, []; |
push @ {$Apache::londefdef::table[-1]{'minlen'}}, []; |
push @ {$Apache::londefdef::table[-1]{'maxlen'}}, []; |
push @ {$Apache::londefdef::table[-1]{'maxlen'}}, []; |
push @ {$Apache::londefdef::table[-1]{'content'}}, []; |
push @ {$Apache::londefdef::table[-1]{'content'}}, []; |
|
&debug_dump_table; |
|
&Apache::lonnet::logthis("------------start-tr-----------"); |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
Line 2229 sub end_tr {
|
Line 2291 sub end_tr {
|
if ($target eq 'web') { |
if ($target eq 'web') { |
$currentstring .= $token->[2]; |
$currentstring .= $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
|
&Apache::lonnet::logthis("-------end-tr-----"); |
if ($Apache::londefdef::TD_redirection) { |
if ($Apache::londefdef::TD_redirection) { |
&end_td_tex($parstack,$parser,$safeeval); |
&end_td_tex($parstack,$parser,$safeeval); |
} |
} |
|
&debug_dump_table; |
|
&Apache::lonnet::logthis("------end-tr------"); |
|
|
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
Line 2243 sub start_td {
|
Line 2309 sub start_td {
|
if ($target eq 'web') { |
if ($target eq 'web') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
|
&Apache::lonnet::logthis("------start-td----"); |
$Apache::londefdef::TD_redirection = 1; |
$Apache::londefdef::TD_redirection = 1; |
&tag_check('tr','td',$tagstack,$parstack,$parser,$safeeval); |
&tag_check('tr','td',$tagstack,$parstack,$parser,$safeeval); |
|
&debug_dump_table; |
|
&Apache::lonnet::logthis("-----start-td-----"); |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
Line 2365 sub end_td_tex {
|
Line 2434 sub end_td_tex {
|
} |
} |
} |
} |
for (my $in=0; $in<=$#{$Apache::londefdef::table[-1]{'include'}};$in++) { |
for (my $in=0; $in<=$#{$Apache::londefdef::table[-1]{'include'}};$in++) { |
$data=~s/\\keephidden\{NEW TABLE ENTRY\}/$Apache::londefdef::table[-1]{'include'}[$in]/; |
$data=~s/\\keephidden\{NEW TABLE ENTRY\}/$Apache::londefdef::table[-1]{'include'}[$in] \&/; |
} |
} |
push @ {$Apache::londefdef::table[-1]{'content'}[-1] },$data; |
push @ {$Apache::londefdef::table[-1]{'content'}[-1] },$data; |
return''; |
return''; |
Line 2377 sub end_td {
|
Line 2446 sub end_td {
|
if ($target eq 'web') { |
if ($target eq 'web') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
|
&Apache::lonnet::logthis("--------end_td-----"); |
$Apache::londefdef::TD_redirection =0; |
$Apache::londefdef::TD_redirection =0; |
&end_td_tex($parstack,$parser,$safeeval); |
&end_td_tex($parstack,$parser,$safeeval); |
|
&debug_dump_table; |
|
&Apache::lonnet::logthis("--------end-td----"); |
} |
} |
return $currentstring; |
return $currentstring; |
} |
} |
Line 3456 sub end_legend {
|
Line 3528 sub end_legend {
|
|
|
#-- <link> tag (end tag forbidden) |
#-- <link> tag (end tag forbidden) |
sub start_link { |
sub start_link { |
my ($target,$token) = @_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; |
my $currentstring = ''; |
my $currentstring = ''; |
if ($target eq 'web') { |
if ($target eq 'web') { |
my $href=&Apache::lonxml::get_param('href',$parstack,$safeeval, |
my $href=&Apache::lonxml::get_param('href',$parstack,$safeeval, |
Line 4056 sub file_path {
|
Line 4128 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';} |