--- loncom/xml/londefdef.pm 2002/10/08 15:35:22 1.91 +++ loncom/xml/londefdef.pm 2003/02/05 23:17:32 1.111 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Tags Default Definition Module # -# $Id: londefdef.pm,v 1.91 2002/10/08 15:35:22 sakharuk Exp $ +# $Id: londefdef.pm,v 1.111 2003/02/05 23:17:32 albertel Exp $ # # # Copyright Michigan State University Board of Trustees @@ -52,7 +52,7 @@ use Image::Magick; BEGIN { - &Apache::lonxml::register('Apache::londefdef',('a','abbr','acronym','address','allow','applet','area','b','base','basefont','bgo','bgsound','big','blink','blockquote','blankspace','body','br','button','caption','center','cite','code','col','colgroup','dd','del','dfn','dir','div','dl','dt','em','embed','externallink','fieldset','font','form','frame','frameset','h1','h2','h3','h4','h5','h6','head','hr','html','i','iframe','img','input','ins','insert','isindex','kbd','keygen','label','layer','legend','li','link','m','map','marquee','menu','meta','multicol','nobr','noembed','noframes','nolayer','noscript','object','ol','optgroup','option','output','p','param','pre','q','s','samp','select','server','small','spacer','span','strike','strong','sub','sup','table','tbody','td','textarea','tfoot','th','thead','title','tr','tt','u','ul','var','wbr')); + &Apache::lonxml::register('Apache::londefdef',('a','abbr','acronym','address','allow','applet','area','b','base','basefont','bgo','bgsound','big','blink','blockquote','blankspace','body','br','button','caption','center','cite','code','col','colgroup','dd','del','dfn','dir','div','dl','dt','em','embed','externallink','fieldset','font','form','frame','frameset','h1','h2','h3','h4','h5','h6','head','hr','html','i','iframe','img','input','ins','insert','isindex','kbd','keygen','label','layer','legend','li','link','m','map','marquee','menu','meta','multicol','nobr','noembed','noframes','nolayer','noscript','object','ol','optgroup','option','output','p','param','pre','q','s','samp','select','server','small','spacer','span','strike','strong','sub','sup','table','tbody','td','textarea','tfoot','th','thead','title','tr','tt','tthoption','u','ul','var','wbr')); } @@ -108,29 +108,60 @@ sub end_m { } return $currentstring; } + +sub start_tthoption { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; + my $result; + if ($target eq 'web') { + my $inside = &Apache::lonxml::get_all_text("/tthoption",$parser); + $inside=~s/^\s*//; + if ($ENV{'browser.mathml'}) { + &tth::ttmoptions($inside); + } else { + &tth::tthoptions($inside); + } + } +} + +sub end_tthoption { + my ($target,$token) = @_; + my $result; + return $result; +} + #-- tag - sub start_html { - my ($target,$token) = @_; - my $currentstring = ''; - if ($ENV{'browser.mathml'}) { - &tth::ttminit(); - } else { - &tth::tthinit(); - } - if ($target eq 'web') { - $currentstring = &Apache::lonxml::xmlbegin(). - &Apache::lonxml::fontsettings(); - } elsif ($target eq 'tex') { - @Apache::londefdef::table = (); - $currentstring .= '\documentclass[letterpaper]{article} +sub start_html { + my ($target,$token) = @_; + my $currentstring = ''; + if ($ENV{'browser.mathml'}) { + &tth::ttminit(); + if ($ENV{'browser.unicode'}) { + &tth::ttmoptions('-L -u1'); + } else { + &tth::ttmoptions('-L -u0'); + } + } else { + &tth::tthinit(); + if ($ENV{'browser.unicode'}) { + &tth::tthoptions('-L -u1'); + } else { + &tth::tthoptions('-L -u0'); + } + } + if ($target eq 'web') { + $currentstring = &Apache::lonxml::xmlbegin(). + &Apache::lonxml::fontsettings(); + } elsif ($target eq 'tex') { + @Apache::londefdef::table = (); + $currentstring .= '\documentclass[letterpaper]{article} \newcommand{\keephidden}[1]{} \renewcommand{\deg}{$^{\circ}$} \usepackage[dvips]{graphicx} \usepackage{epsfig}\usepackage{calc} \newenvironment{choicelist}{\begin{enumerate}}{\end{enumerate}}'; - } - return $currentstring; - } + } + return $currentstring; +} sub end_html { my ($target,$token) = @_; my $currentstring = ''; @@ -330,7 +361,6 @@ sub end_m { #--
tag sub start_body { my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; -# my ($target,$token) = @_; my $currentstring = ''; if ($target eq 'web') { if (!$Apache::lonxml::registered) { @@ -344,7 +374,7 @@ sub end_m { delete($token->[2]->{$key}); } } - $token->[2]->{'onLoad'}=&Apache::lonxml::loadevents(). + $token->[2]->{'onload'}=&Apache::lonxml::loadevents(). ';'.$onLoad; my $onUnload=''; foreach my $key (keys(%{$token->[2]})) { @@ -353,7 +383,7 @@ sub end_m { delete($token->[2]->{$key}); } } - $token->[2]->{'onUnload'}=&Apache::lonxml::unloadevents(). + $token->[2]->{'onunload'}=&Apache::lonxml::unloadevents(). ';'.$onUnload; $currentstring .= '<'.$token->[1]; @@ -846,7 +876,7 @@ EDITBUTTON $currentstring .= $token->[4]; } elsif ($target eq 'tex') { if ($$tagstack[-2] ne 'sub' && $$tagstack[-2] ne 'sup') { - $currentstring .= '\vskip 0 mm'; + $currentstring .= '\vskip 0.2 mm'; } } elsif ($target eq 'latexsource') { $currentstring .= '\\'; @@ -956,7 +986,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '\underline{'; + &Apache::lonxml::startredirection(); } return $currentstring; } @@ -966,7 +996,10 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { - $currentstring .= '}'; + $currentstring=&Apache::lonxml::endredirection(); + $currentstring=~s/(\S)(\s+)(\S)/$1}$2\\underline{$3/g; + $currentstring=~s/^\s*(\S)/\\underline{$1/; + $currentstring=~s/(\S)\s*$/$1}/; } return $currentstring; } @@ -977,7 +1010,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '\underline{'; + &Apache::lonxml::startredirection(); } return $currentstring; } @@ -987,7 +1020,10 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { - $currentstring .= '}'; + $currentstring=&Apache::lonxml::endredirection(); + $currentstring=~s/(\S)(\s+)(\S)/$1}$2\\underline{$3/g; + $currentstring=~s/^\s*(\S)/\\underline{$1/; + $currentstring=~s/(\S)\s*$/$1}/; } return $currentstring; } @@ -1133,7 +1169,7 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '\underline{'; + &Apache::lonxml::startredirection(); } return $currentstring; } @@ -1143,7 +1179,10 @@ EDITBUTTON if ($target eq 'web') { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { - $currentstring .= '}'; + $currentstring=&Apache::lonxml::endredirection(); + $currentstring=~s/(\S)(\s+)(\S)/$1}$2\\underline{$3/g; + $currentstring=~s/^\s*(\S)/\\underline{$1/; + $currentstring=~s/(\S)\s*$/$1}/; } return $currentstring; } @@ -1301,7 +1340,7 @@ sub start_table { push @Apache::londefdef::table, $aa; $Apache::londefdef::table[-1]{'row_number'} = -1; $Apache::londefdef::table[-1]{'output'} = ' \noindent \begin{tabular} '; - my $border = &Apache::lonxml::get_param('border',$parstack,$safeeval); + my $border = &Apache::lonxml::get_param('border',$parstack,$safeeval,undef,1); unless (defined $border) { $border = 0; } if ($border) { $Apache::londefdef::table[-1]{'hinc'} = '\hline '; @@ -1315,7 +1354,7 @@ sub start_table { my $width; foreach my $key (keys(%{$token->[2]})) { if ($key =~ /^width$/i) { - $width = &Apache::lonxml::get_param($key,$parstack,$safeeval); + $width = &Apache::lonxml::get_param($key,$parstack,$safeeval,undef,1); } } if (defined($width)) { $Apache::londefdef::table[-1]{'width'}=$width; } @@ -1413,8 +1452,12 @@ sub start_table { if ($signature) { my $NumberEmptyLength = $how_many_columns - $filled_columns; my $SpacePerColumn = '(\textwidth '.$available_space.')/'.$NumberEmptyLength; - $output =~ s/\$SpacePerColumn/$SpacePerColumn/g; + my $shorthand = ($filled_columns+1)*4; + $output =~ s/\$SpacePerColumn/$SpacePerColumn - $shorthand mm/g; } + if ($how_many_columns==1) { #start of block with width correction for one column table + $output=~s/^\s*\\parbox{([^}]*)}/\\parbox{\\textwidth - 1 cm}/; + } #end of block with width correction for one column table $Apache::londefdef::table[-1]{'output'} .= $header_of_table.$output.$Apache::londefdef::table[-1]{'hinc'}.'\end{tabular}\vskip 0 mm '; if ($#Apache::londefdef::table > 0) { $inmemory = $Apache::londefdef::table[-1]{'output'}; @@ -1439,7 +1482,7 @@ sub start_table { $currentstring = $token->[4]; } elsif ($target eq 'tex') { $Apache::londefdef::table[-1]{'row_number'}++; - my $alignchar = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval),0,1); + my $alignchar = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1),0,1); if ($alignchar ne '') { push @ {$Apache::londefdef::table[-1]{'rows'} }, $alignchar; } else { @@ -1468,15 +1511,14 @@ sub start_table { my $currentstring = ''; if ($target eq 'web') { $currentstring = $token->[4]; - } elsif ($target eq 'tex') { - my $what_to_push = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval),0,1); + } elsif ($target eq 'tex') { + my $what_to_push = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1),0,1); if ($what_to_push eq '') { $what_to_push = substr($Apache::londefdef::table[-1]{'rows'}[0],0,1);; } push @{ $Apache::londefdef::table[-1]{'columns'} }, $what_to_push; $Apache::londefdef::table[-1]{'counter_columns'}++; &Apache::lonxml::startredirection(); -; } return $currentstring; } @@ -1495,7 +1537,7 @@ sub start_table { } else { if (length($data)<5) { $Apache::londefdef::table[-1]{'length'} .= '0 mm,'; - $tempolen = '5 mm'; + $tempolen = '6 mm'; } else { $Apache::londefdef::table[-1]{'length'} .= '0 mm,'; $tempolen = 'TOBECHANGEDONNUMBER'; @@ -1512,7 +1554,7 @@ sub start_table { if ($target eq 'web') { $currentstring = $token->[4]; } elsif ($target eq 'tex') { - my $what_to_push = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval),0,1); + my $what_to_push = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1),0,1); if ($what_to_push eq '') { $what_to_push = substr($Apache::londefdef::table[-1]{'rows'}[0],0,1);; } @@ -1543,19 +1585,20 @@ sub start_table { #--