--- loncom/xml/londefdef.pm 2003/04/10 14:31:09 1.124 +++ loncom/xml/londefdef.pm 2003/07/15 20:47:24 1.154 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Tags Default Definition Module # -# $Id: londefdef.pm,v 1.124 2003/04/10 14:31:09 sakharuk Exp $ +# $Id: londefdef.pm,v 1.154 2003/07/15 20:47:24 www Exp $ # # # Copyright Michigan State University Board of Trustees @@ -54,7 +54,7 @@ use Apache::lonmeta(); BEGIN { - &Apache::lonxml::register('Apache::londefdef',('a','abbr','acronym','accessrule','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')); + &Apache::lonxml::register('Apache::londefdef',('a','abbr','acronym','accessrule','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','hideweboutput')); } @@ -157,9 +157,11 @@ sub start_html { &Apache::lonxml::fontsettings(); } elsif ($target eq 'tex') { @Apache::londefdef::table = (); - $currentstring .= '\documentclass[letterpaper]{article} - \newcommand{\keephidden}[1]{} + $currentstring .= '\documentclass[letterpaper]{article}'; + if ($ENV{'form.latex_type'}=~'batchmode') {$currentstring .='\batchmode';} + $currentstring .= '\newcommand{\keephidden}[1]{} \renewcommand{\deg}{$^{\circ}$} + \usepackage{longtable} \usepackage{textcomp} \usepackage[dvips]{graphicx} \usepackage{epsfig}\usepackage{calc} @@ -354,8 +356,7 @@ sub start_meta { } else { $currentstring = $token->[4]; } - } - if ($target eq 'meta') { + } elsif ($target eq 'meta') { unless (&Apache::lonxml::get_param ('http-equiv',$parstack,$safeeval,undef,1)) { my $name=$token->[2]->{'name'}; @@ -363,11 +364,31 @@ sub start_meta { $name=~s/\s/\_/gs; $name=~s/\W//gs; if ($name) { - $currentstring='<'.$name.'>'. + $currentstring='<'.$name; + my $display=&Apache::lonxml::get_param + ('display',$parstack,$safeeval,undef,1); + if ($display) { + $display=~s/\"/\'/g; + $currentstring.=' display="'.$display.'"'; + } + $currentstring.='>'. &Apache::lonxml::get_param ('content',$parstack,$safeeval,undef,1). - ''; + ''; } + my $display=&Apache::lonxml::get_param + ('display',$parstack,$safeeval,undef,1); + if ($display) { + $display=&HTML::Entities::encode($display); + $currentstring.='<'.$name.'.display>'.$display. + ''; + } + } + } elsif ($target eq 'tex') { + my $content=&Apache::lonxml::get_param('content',$parstack,$safeeval); + my $name=&Apache::lonxml::get_param('name',$parstack,$safeeval); + if ((not defined $content) && (not defined $name)) { + &Apache::lonxml::startredirection(); } } return $currentstring; @@ -382,7 +403,10 @@ sub end_meta { if ($args ne '') { $currentstring = $token->[4]; } - } + } elsif ($target eq 'tex') { + $currentstring=&Apache::lonxml::endredirection(); + $currentstring=''; + } return $currentstring; } @@ -497,9 +521,7 @@ sub start_center { $currentstring = $token->[4]; } elsif ($target eq 'tex') { $currentstring = '\begin{center}'; - } elsif ($target eq 'latexsource') { - $currentstring = '\begin{center}'; - } + } return $currentstring; } @@ -510,9 +532,7 @@ sub end_center { $currentstring = $token->[2]; } elsif ($target eq 'tex') { $currentstring = '\end{center}'; - } elsif ($target eq 'latexsource') { - $currentstring = '\end{center}'; - } + } return $currentstring; } @@ -524,8 +544,6 @@ sub start_b { $currentstring = $token->[4]; } elsif ($target eq 'tex') { $currentstring = '\textbf{'; - } elsif ($target eq 'latexsource') { - $currentstring = '\textbf{'; } return $currentstring; } @@ -537,8 +555,6 @@ sub end_b { $currentstring = $token->[2]; } elsif ($target eq 'tex') { $currentstring = '}'; - } elsif ($target eq 'latexsource') { - $currentstring = '}'; } return $currentstring; } @@ -551,8 +567,6 @@ sub start_strong { $currentstring = $token->[4]; } elsif ($target eq 'tex') { $currentstring = '\textbf{'; - } elsif ($target eq 'latexsource') { - $currentstring = '\textbf{'; } return $currentstring; } @@ -565,20 +579,29 @@ sub end_strong { $currentstring = $token->[2]; } elsif ($target eq 'tex') { $currentstring = '}'; - } elsif ($target eq 'latexsource') { - $currentstring = '}'; - } + } return $currentstring; } #--

tag sub start_h1 { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '{\large \textbf{'; + my $pre; + my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); + if (($align eq 'center') || (not defined $align)) { + $pre='\begin{center}'; + } elsif ($align eq 'left') { + $pre='\rlap{'; + } elsif ($align eq 'right') { + $pre=' \hfill \llap{'; + } + my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0); + if (not defined $TeXsize) {$TeXsize="large";} + $currentstring .= $pre.'{\\'.$TeXsize.' \textbf{'; } elsif ($target eq 'meta') { $currentstring=''; &start_output(); @@ -587,12 +610,21 @@ sub start_h1 { } sub end_h1 { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { - $currentstring .= '}}'; + my $post; + my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); + if (($align eq 'center') || (not defined $align)) { + $post='\end{center}'; + } elsif ($align eq 'left') { + $post='} \hfill'.'\vskip 0 mm '; + } elsif ($align eq 'right') { + $post='}'.'\vskip 0 mm '; + } + $currentstring .= '}}'.$post; } elsif ($target eq 'meta') { &end_output(); $currentstring=''; @@ -602,115 +634,215 @@ sub end_h1 { #--

tag sub start_h2 { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '{\large \textbf{'; + my $pre; + my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); + if (($align eq 'center') || (not defined $align)) { + $pre='\begin{center}'; + } elsif ($align eq 'left') { + $pre='\rlap{'; + } elsif ($align eq 'right') { + $pre=' \hfill \llap{'; + } + my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0); + if (not defined $TeXsize) {$TeXsize="large";} + $currentstring .= $pre.'{\\'.$TeXsize.' \textbf{'; } return $currentstring; } sub end_h2 { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { - $currentstring .= '}}'; + my $post; + my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); + if (($align eq 'center') || (not defined $align)) { + $post='\end{center}'; + } elsif ($align eq 'left') { + $post='} \hfill'.'\vskip 0 mm '; + } elsif ($align eq 'right') { + $post='}'.'\vskip 0 mm '; + } + $currentstring .= '}}'.$post; } return $currentstring; } #--

tag sub start_h3 { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '{\large \textbf{'; + my $pre; + my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); + if (($align eq 'center') || (not defined $align)) { + $pre='\begin{center}'; + } elsif ($align eq 'left') { + $pre='\rlap{'; + } elsif ($align eq 'right') { + $pre=' \hfill \llap{'; + } + my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0); + if (not defined $TeXsize) {$TeXsize="large";} + $currentstring .= $pre.'{\\'.$TeXsize.' \textbf{'; } return $currentstring; } sub end_h3 { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { - $currentstring .= '}}'; + my $post; + my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); + if (($align eq 'center') || (not defined $align)) { + $post='\end{center}'; + } elsif ($align eq 'left') { + $post='} \hfill'.'\vskip 0 mm '; + } elsif ($align eq 'right') { + $post='}'.'\vskip 0 mm '; + } + $currentstring .= '}}'.$post; } return $currentstring; } #--

tag sub start_h4 { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '{\large \textbf{'; + my $pre; + my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); + if (($align eq 'center') || (not defined $align)) { + $pre='\begin{center}'; + } elsif ($align eq 'left') { + $pre='\rlap{'; + } elsif ($align eq 'right') { + $pre=' \hfill \llap{'; + } + my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0); + if (not defined $TeXsize) {$TeXsize="large";} + $currentstring .= $pre.'{\\'.$TeXsize.' \textbf{'; } return $currentstring; } sub end_h4 { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { - $currentstring .= '}}'; + my $post; + my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); + if (($align eq 'center') || (not defined $align)) { + $post='\end{center}'; + } elsif ($align eq 'left') { + $post='} \hfill'.'\vskip 0 mm '; + } elsif ($align eq 'right') { + $post='}'.'\vskip 0 mm '; + } + $currentstring .= '}}'.$post; } return $currentstring; } #--

tag sub start_h5 { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '{\large \textbf{'; + my $pre; + my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); + if (($align eq 'center') || (not defined $align)) { + $pre='\begin{center}'; + } elsif ($align eq 'left') { + $pre='\rlap{'; + } elsif ($align eq 'right') { + $pre=' \hfill \llap{'; + } + my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0); + if (not defined $TeXsize) {$TeXsize="large";} + $currentstring .= $pre.'{\\'.$TeXsize.' \textbf{'; } return $currentstring; } sub end_h5 { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { - $currentstring .= '}}'; + my $post; + my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); + if (($align eq 'center') || (not defined $align)) { + $post='\end{center}'; + } elsif ($align eq 'left') { + $post='} \hfill'.'\vskip 0 mm '; + } elsif ($align eq 'right') { + $post='}'.'\vskip 0 mm '; + } + $currentstring .= '}}'.$post; } return $currentstring; } #--
tag sub start_h6 { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '{\large \textbf{'; + my $pre; + my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); + if (($align eq 'center') || (not defined $align)) { + $pre='\begin{center}'; + } elsif ($align eq 'left') { + $pre='\rlap{'; + } elsif ($align eq 'right') { + $pre=' \hfill \llap{'; + } + my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0); + if (not defined $TeXsize) {$TeXsize="large";} + $currentstring .= $pre.'{\\'.$TeXsize.' \textbf{'; } return $currentstring; } sub end_h6 { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { - $currentstring .= '}}'; + my $post; + my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); + if (($align eq 'center') || (not defined $align)) { + $post='\end{center}'; + } elsif ($align eq 'left') { + $post='} \hfill'.'\vskip 0 mm '; + } elsif ($align eq 'right') { + $post='}'.'\vskip 0 mm '; + } + $currentstring .= '}}'.$post; } return $currentstring; } @@ -723,9 +855,7 @@ sub start_cite { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { $currentstring .= "\\textit{"; - } elsif ($target eq 'latexsource') { - $currentstring .= "\\textit{"; - } + } return $currentstring; } @@ -736,9 +866,7 @@ sub end_cite { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { $currentstring .= "}"; - } elsif ($target eq 'latexsource') { - $currentstring .= "}"; - } + } return $currentstring; } @@ -750,9 +878,7 @@ sub start_i { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { $currentstring .= '\textit{'; - } elsif ($target eq 'latexsource') { - $currentstring .= '\textit{'; - } + } return $currentstring; } @@ -763,8 +889,6 @@ sub end_i { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { $currentstring .= '}'; - } elsif ($target eq 'latexsource') { - $currentstring .= '}'; } return $currentstring; } @@ -777,9 +901,7 @@ sub start_address { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { $currentstring .= "\\textit{"; - } elsif ($target eq 'latexsource') { - $currentstring .= "\\textit{"; - } + } return $currentstring; } @@ -790,8 +912,6 @@ sub end_address { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { $currentstring .= "}"; - } elsif ($target eq 'latexsource') { - $currentstring .= "}"; } return $currentstring; } @@ -804,8 +924,6 @@ sub start_dfn { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { $currentstring .= "\\textit{"; - } elsif ($target eq 'latexsource') { - $currentstring .= "\\textit{"; } return $currentstring; } @@ -817,9 +935,7 @@ sub end_dfn { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { $currentstring .= "}"; - } elsif ($target eq 'latexsource') { - $currentstring .= "}"; - } + } return $currentstring; } @@ -831,9 +947,7 @@ sub start_tt { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { $currentstring .= '\texttt{'; - } elsif ($target eq 'latexsource') { - $currentstring .= '\texttt{'; - } + } return $currentstring; } @@ -844,8 +958,6 @@ sub end_tt { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { $currentstring .= '}'; - } elsif ($target eq 'latexsource') { - $currentstring .= '}'; } return $currentstring; } @@ -858,9 +970,7 @@ sub start_kbd { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { $currentstring .= "\\texttt"; - } elsif ($target eq 'latexsource') { - $currentstring .= "\\texttt{"; - } + } return $currentstring; } @@ -871,9 +981,7 @@ sub end_kbd { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { $currentstring .= "}"; - } elsif ($target eq 'latexsource') { - $currentstring .= "}"; - } + } return $currentstring; } @@ -908,9 +1016,7 @@ sub start_em { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { $currentstring .= '\emph{'; - } elsif ($target eq 'latexsource') { - $currentstring .= '\emph{'; - } + } return $currentstring; } @@ -921,9 +1027,7 @@ sub end_em { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { $currentstring .= '}'; - } elsif ($target eq 'latexsource') { - $currentstring .= '}'; - } + } return $currentstring; } @@ -935,8 +1039,6 @@ sub start_q { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { $currentstring .= "\\emph{"; - } elsif ($target eq 'latexsource') { - $currentstring .= "\\emph{"; } return $currentstring; } @@ -948,9 +1050,7 @@ sub end_q { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { $currentstring .= "}"; - } elsif ($target eq 'latexsource') { - $currentstring .= "}"; - } + } return $currentstring; } @@ -961,10 +1061,8 @@ sub start_p { if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '{\par '; - } elsif ($target eq 'latexsource') { - $currentstring .= '{\par '; - } + $currentstring .= '\par '; + } return $currentstring; } @@ -973,10 +1071,6 @@ sub end_p { my $currentstring = ''; if ($target eq 'web') { $currentstring .= $token->[2]; - } elsif ($target eq 'tex') { - $currentstring .= '}'; - } elsif ($target eq 'latexsource') { - $currentstring .= '}'; } return $currentstring; } @@ -989,11 +1083,9 @@ sub start_br { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { if ($$tagstack[-2] ne 'sub' && $$tagstack[-2] ne 'sup') { - $currentstring .= '\vskip 0.2 mm'; + $currentstring .= '\vskip 0.2 mm '; } - } elsif ($target eq 'latexsource') { - $currentstring .= '\\'; - } + } return $currentstring; } @@ -1013,10 +1105,8 @@ sub start_big { if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - $currentstring .= '\large{'; - } elsif ($target eq 'latexsource') { - $currentstring .= '{\Large '; - } + $currentstring .= '{\large '; + } return $currentstring; } @@ -1027,8 +1117,6 @@ sub end_big { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { $currentstring .= '}'; - } elsif ($target eq 'latexsource') { - $currentstring .= '}'; } return $currentstring; } @@ -1041,9 +1129,7 @@ sub start_small { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { $currentstring .= '{\footnotesize '; - } elsif ($target eq 'latexsource') { - $currentstring .= '{\footnotesize '; - } + } return $currentstring; } @@ -1054,28 +1140,36 @@ sub end_small { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { $currentstring .= '}'; - } elsif ($target eq 'latexsource') { - $currentstring .= '}'; } return $currentstring; } #-- tag sub start_basefont { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; my $currentstring = ''; if ($target eq 'web') { $currentstring = $token->[4]; - } + } elsif ($target eq 'tex') { + my $basesize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval); + if (defined $basesize) { + $currentstring = '{\\'.$basesize.' '; + } + } return $currentstring; } sub end_basefont { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { $currentstring = $token->[4]; - } + } elsif ($target eq 'tex') { + my $basesize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval); + if (defined $basesize) { + $currentstring = '}'; + } + } return $currentstring; } @@ -1087,7 +1181,12 @@ sub start_font { my $face=&Apache::lonxml::get_param('face',$parstack,$safeeval); if ($face=~/symbol/i) {$Apache::lonxml::prevent_entity_encode++;} $currentstring = $token->[4]; - } + } elsif ($target eq 'tex') { + my $fontsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval); + if (defined $fontsize) { + $currentstring = '{\\'.$fontsize.' '; + } + } return $currentstring; } @@ -1098,7 +1197,12 @@ sub end_font { my $face=&Apache::lonxml::get_param('face',$parstack,$safeeval); if ($face=~/symbol/i) {$Apache::lonxml::prevent_entity_encode--;} $currentstring = $token->[2]; - } + } elsif ($target eq 'tex') { + my $fontsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval); + if (defined $fontsize) { + $currentstring = '}'; + } + } return $currentstring; } @@ -1207,14 +1311,14 @@ sub start_hr { if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { - my $LaTeXwidth = &Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval); + my $LaTeXwidth = &Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval,undef,0); if (defined $LaTeXwidth) { if ($LaTeXwidth=~/^%/) { substr($LaTeXwidth,0,1)=''; $LaTeXwidth=($LaTeXwidth/100).'\textwidth'; } } else { - $LaTeXwidth ='0.95\textwidth'; + $LaTeXwidth ='0.9\textwidth'; } my ($pre,$post); my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); @@ -1225,7 +1329,7 @@ sub start_hr { } elsif ($align eq 'right') { $pre=' \hfill \llap{'; $post='}'; } - $currentstring .= ' \vskip 0 mm \noindent\makebox[\textwidth]{'.$pre.'\makebox['. + $currentstring .= ' \vskip 0 mm \noindent\makebox['.$LaTeXwidth.']{'.$pre.'\makebox['. $LaTeXwidth.'][b]{\hrulefill}'.$post.'}\vskip 0 mm '; } return $currentstring; @@ -1236,8 +1340,7 @@ sub end_hr { my $currentstring = ''; if ($target eq 'web') { $currentstring .= $token->[2]; - } elsif ($target eq 'tex') { - } + } return $currentstring; } @@ -1262,50 +1365,43 @@ sub end_div { #-- tag sub start_a { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { + my $a=&Apache::lonxml::get_param('href',$parstack,$safeeval,undef,1); + $a=~s/([^\\])%/$1\\\%/g; + $currentstring .= '\ref{'.$a.'}'; } return $currentstring; } sub end_a { - my ($target,$token,$tagstack,$stackref) = @_; + my ($target,$token,$tagstack,$parstack,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { $currentstring .= $token->[2]; - } elsif ($target eq 'tex') { - my $tempor_var = $stackref->[$#$stackref]; - if (index($tempor_var,'name') != -1 ) { - $tempor_var =~ s/name=([^,]*),/$1/g; - } elsif (index($tempor_var,'href') != -1 ) { - $tempor_var =~ s/href=([^,]*),/$1/g; - $currentstring .= " \\ref{$tempor_var}"; - } } return $currentstring; } #--
  • tag sub start_li { - my ($target,$token,$tagstack,$stackref) = @_; + my ($target,$token,$tagstack,$parstack,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { $currentstring = $token->[4]; } elsif ($target eq 'tex') { - my $tempor_var = $stackref->[$#$stackref]; - if (index($tempor_var,'circle') != -1 ) { - $currentstring .= " \\item[o] "; - } elsif (index($tempor_var,'square') != -1 ) { - $currentstring .= " \\item[$\Box$] "; - } elsif ($tempor_var ne '') { - $_ = $tempor_var; - m/my\s*([^=]*)=/; - $currentstring .= " \\item[$1] "; + my $type=&Apache::lonxml::get_param('type',$parstack,$safeeval,undef,1); + if ($type=~/circle/) { + $currentstring .= ' \item[o] '; + } elsif ($type=~/square/) { + $currentstring .= ' \item[$\Box$] '; + } elsif ($type ne '') { + $currentstring .= ' \item['.$type.'] '; } else { - $currentstring .= " \\item "; + $currentstring .= ' \item '; } } return $currentstring; @@ -1348,12 +1444,29 @@ sub end_u { #--
      tag sub start_ul { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { $currentstring = $token->[4]; } elsif ($target eq 'tex') { - $currentstring = '\begin{itemize}'; + my $TeXtype=&Apache::lonxml::get_param('type',$parstack,$safeeval,undef,0); + if ($TeXtype eq 'disc') { + $currentstring .= ' \renewcommand{\labelitemi}{$\bullet$} + \renewcommand{\labelitemii}{$\bullet$} + \renewcommand{\labelitemiii}{$\bullet$} + \renewcommand{\labelitemiv}{$\bullet$}'; + } elsif ($TeXtype eq 'circle') { + $currentstring .= ' \renewcommand{\labelitemi}{$\circ$} + \renewcommand{\labelitemii}{$\circ$} + \renewcommand{\labelitemiii}{$\circ$} + \renewcommand{\labelitemiv}{$\circ$}'; + } elsif ($TeXtype eq 'square') { + $currentstring .= ' \renewcommand{\labelitemi}{$\diamond$} + \renewcommand{\labelitemii}{$\diamond$} + \renewcommand{\labelitemiii}{$\diamond$} + \renewcommand{\labelitemiv}{$\diamond$}'; + } + $currentstring .= '\begin{itemize}'; } return $currentstring; } @@ -1364,7 +1477,10 @@ sub end_ul { if ($target eq 'web') { $currentstring = $token->[2]; } elsif ($target eq 'tex') { - $currentstring = '\end{itemize}'; + $currentstring = '\end{itemize} \renewcommand{\labelitemi}{$\bullet$} + \renewcommand{\labelitemii}{$\bullet$} + \renewcommand{\labelitemiii}{$\bullet$} + \renewcommand{\labelitemiv}{$\bullet$}'; } return $currentstring; } @@ -1417,12 +1533,39 @@ sub end_dir { #--
        tag sub start_ol { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { $currentstring = $token->[4]; } elsif ($target eq 'tex') { - $currentstring = '\begin{enumerate}'; + my $type=&Apache::lonxml::get_param('type',$parstack,$safeeval,undef,0); + if ($type eq '1') { + $currentstring .= ' \renewcommand{\labelenumi}{\arabic{enumi}.} + \renewcommand{\labelenumii}{\arabic{enumii}.} + \renewcommand{\labelenumiii}{\arabic{enumiii}.} + \renewcommand{\labelenumiv}{\arabic{enumiv}.}'; + } elsif ($type eq 'A') { + $currentstring .= ' \renewcommand{\labelenumi}{\Alph{enumi}.} + \renewcommand{\labelenumii}{\Alph{enumii}.} + \renewcommand{\labelenumiii}{\Alph{enumiii}.} + \renewcommand{\labelenumiv}{\Alph{enumiv}.}'; + } elsif ($type eq 'a') { + $currentstring .= ' \renewcommand{\labelenumi}{\alph{enumi}.} + \renewcommand{\labelenumii}{\alph{enumii}.} + \renewcommand{\labelenumiii}{\alph{enumiii}.} + \renewcommand{\labelenumiv}{\alph{enumiv}.} '; + } elsif ($type eq 'i') { + $currentstring .= ' \renewcommand{\labelenumi}{\roman{enumi}.} + \renewcommand{\labelenumii}{\roman{enumii}.} + \renewcommand{\labelenumiii}{\roman{enumiii}.} + \renewcommand{\labelenumiv}{\roman{enumiv}.} '; + } elsif ($type eq 'I') { + $currentstring .= ' \renewcommand{\labelenumi}{\Roman{enumi}.} + \renewcommand{\labelenumii}{\Roman{enumii}.} + \renewcommand{\labelenumiii}{\Roman{enumiii}.} + \renewcommand{\labelenumiv}{\Roman{enumiv}.} '; + } + $currentstring .= '\begin{enumerate}'; } return $currentstring; } @@ -1433,7 +1576,10 @@ sub end_ol { if ($target eq 'web') { $currentstring = $token->[2]; } elsif ($target eq 'tex') { - $currentstring = '\end{enumerate}'; + $currentstring = '\end{enumerate} \renewcommand{\labelenumi}{\arabic{enumi}.} + \renewcommand{\labelenumii}{\arabic{enumii}.} + \renewcommand{\labelenumiii}{\arabic{enumiii}.} + \renewcommand{\labelenumiv}{\arabic{enumiv}.}'; } return $currentstring; } @@ -1486,10 +1632,16 @@ sub end_dt { #--
        tag sub start_dd { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { $currentstring = $token->[4]; + } elsif ($target eq 'tex') { + if ($$tagstack[-2] eq 'dl') { + $currentstring = ' \item [] '; + } elsif ($$tagstack[-2] eq 'dt') { + $currentstring = ']'; + } } return $currentstring; } @@ -1506,6 +1658,14 @@ sub end_dd { #-- tag sub start_table { my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; + my $textwidth=''; + if (not defined @Apache::londefdef::table) { + $textwidth=&recalc($ENV{'form.textwidth'}); + $textwidth=~/(\d+\.?\d*)/; + $textwidth=0.95*$1; + } else { + $textwidth=&Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval,undef,0); + } my $currentstring = ''; if ($target eq 'web') { $currentstring = $token->[4]; @@ -1513,7 +1673,25 @@ sub start_table { my $aa = {}; push @Apache::londefdef::table, $aa; $Apache::londefdef::table[-1]{'row_number'} = -1; - $Apache::londefdef::table[-1]{'output'} = ' \noindent \begin{tabular} '; + #table's width + my $TeXwidth = &Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval,undef,0); + if (not defined $TeXwidth) { + my $htmlwidth = &Apache::lonxml::get_param('width',$parstack,$safeeval,undef,1); + if ($htmlwidth=~/%/) { + $htmlwidth=~/(\d+)/; + my $value=$1*$textwidth/100; + $Apache::londefdef::table[-1]{'width'}=$value; + } else { + $Apache::londefdef::table[-1]{'width'}=$textwidth; + } + } elsif ($TeXwidth=~/%/) { + $TeXwidth=~/(\d+)/; + my $value=$1*$textwidth/100; + $Apache::londefdef::table[-1]{'width'}=$value; + } else { + $Apache::londefdef::table[-1]{'width'}=$textwidth; + } + #table's border my $border = &Apache::lonxml::get_param('border',$parstack,$safeeval,undef,1); unless (defined $border) { $border = 0; } if ($border) { @@ -1525,13 +1703,8 @@ sub start_table { $Apache::londefdef::table[-1]{'vinc'} = '&'; $Apache::londefdef::table[-1]{'vvinc'} = ''; } - my $width; - foreach my $key (keys(%{$token->[2]})) { - if ($key =~ /^width$/i) { - $width = &Apache::lonxml::get_param($key,$parstack,$safeeval,undef,1); - } - } - if (defined($width)) { $Apache::londefdef::table[-1]{'width'}=$width; } + $Apache::londefdef::table[-1]{'output'} = ' \noindent \begin{tabular} '; + $currentstring = '\keephidden{NEW TABLE ENTRY}'; } return $currentstring; } @@ -1546,107 +1719,70 @@ sub end_table { my $output = ''; #construct header of the table my $header_of_table = '{'.$Apache::londefdef::table[-1]{'vvinc'}; - my $in; - for ($in=0;$in<=$Apache::londefdef::table[-1]{'counter_columns'};$in++) { + for (my $in=0;$in<=$Apache::londefdef::table[-1]{'counter_columns'};$in++) { $header_of_table .= $Apache::londefdef::table[-1]{'columns'}[$in].$Apache::londefdef::table[-1]{'vvinc'}; } $header_of_table .= '}'; - #fill the table - for ($in=0;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) { - $output .= $Apache::londefdef::table[-1]{'rowdata'}[$in]; - chop $output; - $output .= ' \\\\ '; - } #define the length of the table cells - my @lengthforoutput = split(/,/,$Apache::londefdef::table[-1]{'lengthrow'}[0]); - my $how_many_columns = $#lengthforoutput + 1; #total number of columns in the table - my $filled_columns = 0; #number of columns with information about width - my $available_space = ' '; - foreach my $tempo_length (@{ $Apache::londefdef::table[-1]{'lengthrow'} }) { - my @length = split(/,/,$tempo_length); - for (my $ico=0;$ico<=$#lengthforoutput;$ico++) { - $lengthforoutput[$ico] =~ m/(\d*\.?\d*)\s*(\w+)/; - my $old_value = $1; - my $old_unit = $2; - if ($old_unit eq 'cm') { - $old_value = $old_value * 10; - } elsif ($old_unit eq 'in') { - $old_value = $old_value * 25.4; - } elsif ($old_unit eq 'pt') { - $old_value = $old_value * 25.4/72.27; - } elsif ($old_unit eq 'pc') { - $old_value = $old_value * 25.4/6.022; - } - $old_unit = 'mm'; - $length[$ico] =~ m/(\d*\.?\d*)\s*(\w+)/; - my $new_value = $1; - my $new_unit = $2; - if ($new_unit eq 'cm') { - $new_value = $new_value * 10; - } elsif ($old_unit eq 'in') { - $new_value = $new_value * 25.4; - } elsif ($old_unit eq 'pt') { - $new_value = $new_value * 25.4/72.27; - } elsif ($old_unit eq 'pc') { - $new_value = $new_value * 25.4/6.022; - } - $new_unit = 'mm'; - if ($old_value < $new_value) { - $lengthforoutput[$ico] = $new_value.' mm'; - } else { - $lengthforoutput[$ico] = $old_value.' mm'; + #always starts with TeXwidth (if defined everything else is ignored) + my @length_row_final = split(/,/,$Apache::londefdef::table[-1]{'TeXlengthrow'}[0]); + for (my $in=1;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) { + my @length_row = split(/,/,$Apache::londefdef::table[-1]{'TeXlengthrow'}[$in]); + for (my $jn=0;$jn<=$#length_row;$jn++) { + if ($length_row_final[$jn]<$length_row[$jn]) {$length_row_final[$jn]=$length_row[$jn];} + } + } + #continues trying estimate the width of raw data + my @length_raw_row = split(/,/,$Apache::londefdef::table[-1]{'lengthrow'}[0]); + for (my $in=1;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) { + my @length_row = split(/,/,$Apache::londefdef::table[-1]{'lengthrow'}[$in]); + for (my $jn=0;$jn<=$#length_row;$jn++) { + if ($length_raw_row[$jn]<$length_row[$jn]) {$length_raw_row[$jn]=$length_row[$jn];} + } + } + #comparing of TeXwidth and raw data width + my $available_length=$Apache::londefdef::table[-1]{'width'}; + my $needed=0; + for (my $jn=0;$jn<=$#length_row_final;$jn++) { + if ($length_row_final[$jn]!=0) { + $available_length=$available_length-$length_row_final[$jn]; + $needed++; + } + } + $needed=$#length_row_final-$needed+1; + for (my $jn=0;$jn<=$#length_row_final;$jn++) { + if ($length_row_final[$jn]==0) { + if ($length_raw_row[$jn]<$available_length/3) { + $length_row_final[$jn]=$length_raw_row[$jn]; + $available_length=$available_length-$length_raw_row[$jn]; + $needed--; } } } - for (my $ico=0;$ico<=$#lengthforoutput;$ico++) { - if (not $lengthforoutput[$ico]=~m/^\s*0\s*\w*\s*$/) { - $filled_columns++; - $available_space = $available_space.' - '.$lengthforoutput[$ico]; + for (my $jn=0;$jn<=$#length_row_final;$jn++) { + if ($length_row_final[$jn]==0) { + $length_row_final[$jn]=0.9*$available_length/$needed; } } - my $temp_file; - my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.tbl"; - if (-e $filename) { - $temp_file = Apache::File->new($filename); - my @tbl_file_content = <$temp_file>; - my ($one,$two,$three) = split(/,/,$tbl_file_content[0]); - $how_many_columns+=$one-1; - $filled_columns+=$two; - if($three=~/\S/) {$available_space = $available_space.' - '.$three;} - } else { - $temp_file = Apache::File->new('>>'.$filename); - } - print $temp_file "$how_many_columns,$filled_columns,$available_space\n"; - $output =~ s/\\parbox{TOBECHANGEDONNUMBER}{}/\\parbox{1 mm}{}/g; - $output =~ s/\\parbox{TOBECHANGEDONNUMBER}/\\parbox{\$SpacePerColumn}/g; - my @tagar = @$tagstack; - my $signature = 1; - for (my $ico=0;$ico<$#tagar;$ico++) { - if ($tagar[$ico] eq 'table') { $signature = 0; } - } - if ($signature) { - my $NumberEmptyLength = $how_many_columns - $filled_columns; - my $SpacePerColumn = '(\textwidth '.$available_space.')/'.$NumberEmptyLength; - 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 + #fill the table + for (my $in=0;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) { + for (my $jn=0;$jn<=$#length_row_final;$jn++) { + my $substituted=$length_row_final[$jn]; + $Apache::londefdef::table[-1]{'rowdata'}[$in]=~s/TOBECHANGEDONNUMBER/$substituted mm/; + } + $output .= $Apache::londefdef::table[-1]{'rowdata'}[$in]; + chop $output; + $output .= ' \\\\ '; } $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'}; + if ($#Apache::londefdef::table > 0) { + my $inmemory = $Apache::londefdef::table[-1]{'output'}; pop @Apache::londefdef::table; - $Apache::londefdef::table[-1]{'rowdata'}[$Apache::londefdef::table[-1]{'row_number'}] .= $inmemory + push @{$Apache::londefdef::table[-1]{'include'}}, $inmemory; } else { - $currentstring = $Apache::londefdef::table[-1]{'output'}; - $currentstring =~ s/\\\\\s+\\\\/\\\\/g; + $currentstring .= $Apache::londefdef::table[-1]{'output'}; pop @Apache::londefdef::table; - if (-e $filename) { - unlink $filename; - } + undef @Apache::londefdef::table; } } return $currentstring; @@ -1668,7 +1804,8 @@ sub start_tr { } push ( @{ $Apache::londefdef::table[-1]{'rowdata'} }, $Apache::londefdef::table[-1]{'hinc'}); $Apache::londefdef::table[-1]{'counter_columns'} = -1; - $Apache::londefdef::table[-1]{'length'} = ''; + $Apache::londefdef::table[-1]{'TeXlength'} = ''; + $Apache::londefdef::table[-1]{'length'} = ''; } return $currentstring; } @@ -1679,8 +1816,8 @@ sub end_tr { if ($target eq 'web') { $currentstring = $token->[2]; } elsif ($target eq 'tex') { + push @{ $Apache::londefdef::table[-1]{'TeXlengthrow'} },$Apache::londefdef::table[-1]{'TeXlength'}; push @{ $Apache::londefdef::table[-1]{'lengthrow'} },$Apache::londefdef::table[-1]{'length'}; - } return $currentstring; } @@ -1704,27 +1841,37 @@ sub start_td { } sub end_td { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; - my $tempolen = ''; if ($target eq 'web') { $currentstring = $token->[2]; } elsif ($target eq 'tex') { my $current_row = $Apache::londefdef::table[-1]{'row_number'}; my $data=&Apache::lonxml::endredirection(); - if ($data=~m/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt))/) { - $Apache::londefdef::table[-1]{'length'} .= $1.','; - $tempolen = $1; + my $TeXwidth=&Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval,undef,0); + if (defined $TeXwidth) { + my $current_length=&recalc($TeXwidth); + $current_length=~/(\d+)/; + $Apache::londefdef::table[-1]{'TeXlength'} .= $1.','; + $Apache::londefdef::table[-1]{'length'} .= '0,'; } else { - if (length($data)<5) { - $Apache::londefdef::table[-1]{'length'} .= '0 mm,'; - $tempolen = '6 mm'; - } else { - $Apache::londefdef::table[-1]{'length'} .= '0 mm,'; - $tempolen = 'TOBECHANGEDONNUMBER'; - } - } - @{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= '\parbox{'.$tempolen.'}{'.$data.'} '.$Apache::londefdef::table[-1]{'vinc'}; + if ($data=~m/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)/) { + my $current_length=&recalc($1); + $current_length=~/(\d+\.?\d*)/; + $Apache::londefdef::table[-1]{'TeXlength'} .= $1.','; + $Apache::londefdef::table[-1]{'length'} .= '0,'; + } else { + $data=~s/^\s+(\S.*)/$1/; + $data=~s/(.*\S)\s+$/$1/; + my $current_length=2*length($data); + $Apache::londefdef::table[-1]{'length'} .= $current_length.','; + $Apache::londefdef::table[-1]{'TeXlength'} .= '0,'; + } + } + for (my $in=0; $in<=$#{$Apache::londefdef::table[-1]{'include'}};$in++) { + $data=~s/\\keephidden\{NEW TABLE ENTRY\}/$Apache::londefdef::table[-1]{'include'}[$in]/; + } + @{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= '\parbox{TOBECHANGEDONNUMBER}{'.$data.'} '.$Apache::londefdef::table[-1]{'vinc'}; } return $currentstring; } @@ -1743,29 +1890,48 @@ sub start_th { push @{ $Apache::londefdef::table[-1]{'columns'} }, $what_to_push; $Apache::londefdef::table[-1]{'counter_columns'}++; &Apache::lonxml::startredirection(); - ; } return $currentstring; -} - +} + sub end_th { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web') { $currentstring = $token->[2]; } elsif ($target eq 'tex') { my $current_row = $Apache::londefdef::table[-1]{'row_number'}; my $data=&Apache::lonxml::endredirection(); - if ($data=~m/width\s*=\s*(\d+\.*\d*\s*(mm|cm))/) { - $Apache::londefdef::table[-1]{'length'} .= $1.','; + my $TeXwidth=&Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval,undef,0); + if (defined $TeXwidth) { + my $current_length=&recalc($TeXwidth); + $current_length=~/(\d+)/; + $Apache::londefdef::table[-1]{'TeXlength'} .= $1.','; + $Apache::londefdef::table[-1]{'length'} .= '0,'; } else { - $Apache::londefdef::table[-1]{'length'} .= '0 mm,'; - } - @{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= '\parbox{'.$1.'}{\textbf{'.$data.'}} '.$Apache::londefdef::table[-1]{'vinc'}; + if ($data=~m/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)/) { + my $current_length=&recalc($1); + $current_length=~/(\d+)/; + $Apache::londefdef::table[-1]{'TeXlength'} .= $1.','; + $Apache::londefdef::table[-1]{'length'} .= '0,'; + } else { + $data=~/^\s*(\S.*)/; + $data=$1; + $data=~/(.*\S)\s*$/; + $data=$1; + my $current_length=2*length($data); + $Apache::londefdef::table[-1]{'length'} .= $current_length.','; + $Apache::londefdef::table[-1]{'TeXlength'} .= '0,'; + } + } + for (my $in=0; $in<=$#{$Apache::londefdef::table[-1]{'include'}};$in++) { + $data=~s/\\keephidden\{NEW TABLE ENTRY\}/$Apache::londefdef::table[-1]{'include'}[$in]/; + } + $data='\textbf{'.$data.'}'; + @{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= '\parbox{TOBECHANGEDONNUMBER}{'.$data.'} '.$Apache::londefdef::table[-1]{'vinc'}; } return $currentstring; } - #-- tag sub start_img { my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; @@ -1989,7 +2155,8 @@ sub start_allow { my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $src = &Apache::lonxml::get_param('src',$parstack,$safeeval,undef,1); $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src); - $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=$src; + $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]= + &Apache::lonnet::clutter($src); &image_replication($src); my $result; if ($target eq 'edit') { @@ -2019,7 +2186,29 @@ sub start_frameset { $currentstring.=''. &Apache::lonmenu::registerurl(undef,$target).''; } - $currentstring .= $token->[4]; + my $onLoad=''; + foreach my $key (keys(%{$token->[2]})) { + if ($key =~ /^onload$/i) { + $onLoad.=$token->[2]->{$key}.';'; + delete($token->[2]->{$key}); + } + } + $token->[2]->{'onload'}=&Apache::lonmenu::loadevents().';'.$onLoad; + my $onUnload=''; + foreach my $key (keys(%{$token->[2]})) { + if ($key =~ /^onunload$/i) { + $onUnload.=$token->[2]->{$key}.';'; + delete($token->[2]->{$key}); + } + } + $token->[2]->{'onunload'}=&Apache::lonmenu::unloadevents(). + ';'.$onUnload; + + $currentstring .= '<'.$token->[1]; + foreach (keys %{$token->[2]}) { + $currentstring.=' '.$_.'="'.$token->[2]->{$_}.'"'; + } + $currentstring.='>'; } return $currentstring; } @@ -2035,7 +2224,7 @@ sub end_frameset { #--
         sub start_pre {
        -    my ($target,$token) = @_;
        +    my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
             my $currentstring = '';
             if ($target eq 'web') {
         	$currentstring .= $token->[4];
        @@ -2895,6 +3084,26 @@ sub end_wbr {
             return $currentstring;
         }
         
        +
        +#--  tag
        +sub start_hideweboutput {
        +    my ($target,$token) = @_;
        +    if ($target eq 'web') {
        +	&Apache::lonxml::startredirection();     
        +    } 
        +    return '';
        +}
        +
        +sub end_hideweboutput {
        +    my ($target,$token) = @_;
        +    my $currentstring = '';
        +    if ($target eq 'web') {
        +	$currentstring = &Apache::lonxml::endredirection();    
        +    } 
        +    return '';
        +}
        +
        +
         sub image_replication {
             my $src = shift;
             if (not -e $src) {
        @@ -2913,5 +3122,23 @@ sub image_replication {
             return '';
         }
         
        +sub recalc {
        +    my $argument = shift;
        +    if (not $argument=~/(mm|cm|in|pc|pt)/) {return $argument.' mm';}
        +    $argument=~/\s*(\d+\.?\d*)\s*(mm|cm|in|pc|pt)/;
        +    my $value=$1;
        +    my $units=$2;
        +    if ($units eq 'cm') {
        +	$value*=10;
        +    } elsif ($units eq 'in') {
        +	$value*=25.4;
        +    } elsif ($units eq 'pc') {
        +	$value*=(25.4*12/72.27);
        +    } elsif ($units eq 'pt') {
        +	$value*=(25.4/72.27);
        +    }
        +    return $value.' mm';
        +}
        +
         1;
         __END__