--- loncom/xml/londefdef.pm 2016/08/13 19:39:40 1.462 +++ loncom/xml/londefdef.pm 2020/09/10 00:28:48 1.465 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Tags Default Definition Module # -# $Id: londefdef.pm,v 1.462 2016/08/13 19:39:40 raeburn Exp $ +# $Id: londefdef.pm,v 1.465 2020/09/10 00:28:48 raeburn Exp $ # # # Copyright Michigan State University Board of Trustees @@ -98,7 +98,7 @@ sub start_m { # On top of that, MathJax will render math without $, but # it will fail with tth. This is worth a warning. # (even though some people might just use latex for printing) - &Apache::lonxml::warning(&mt("Missing \$ in <m>.")); + &Apache::lonxml::warning(&mt('Missing $ in [_1].','<m>')); } my $eval=&Apache::lonxml::get_param('eval',$parstack,$safeeval); if ($eval eq 'on') { @@ -826,7 +826,7 @@ sub end_h1 { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { my $post='\vskip 0 mm '; - my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); + my $align=lc(&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1)); if ($align eq 'center') { $post='\end{center}'; } elsif ($align eq 'left') { @@ -1305,6 +1305,10 @@ sub start_p { $currentstring .= &end_p(); # close off prior para if in progress. my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1); + if (!defined $align) { + # check inline CSS + $align = &get_css_property('text-align',$parstack,$safeeval); + } if ($align eq 'center') { $currentstring .='\begin{center}\par '; $closing_string = '\end{center}'; @@ -1312,13 +1316,13 @@ sub start_p { $currentstring = ¢er_correction().$currentstring; } } elsif ($align eq 'right') { - $currentstring.="\n".'{\flushright '; + $currentstring.="\n".'\begin{flushright}'; # $currentstring.='\makebox['.$env{'form.textwidth'}.']{\hfill\llap{'; - $closing_string= "}\n"; + $closing_string= '\end{flushright}'."\n"; } elsif ($align eq 'left') { - $currentstring.= "\n".'{\flushleft '; + $currentstring.= "\n".'\begin{flushleft}'; # $currentstring.='\noindent\makebox['.$env{'form.textwidth'}.']{{'; - $closing_string = "}\n"; + $closing_string = '\end{flushleft}'."\n"; } else { $currentstring.='\par '; if (&is_inside_of($tagstack, 'table')) { @@ -4053,13 +4057,33 @@ sub end_spacer { return $currentstring; } +my @span_end_stack; # for span tex target + #-- tag (end tag required) sub start_span { - my ($target,$token) = @_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; if ($target eq 'web' || $target eq 'webgrade') { $currentstring = $token->[4]; - } + } elsif ($target eq 'tex') { + my $endstring = ''; + my $family = &get_css_property('font-family',$parstack,$safeeval); + if ($family eq 'monospace') { + $currentstring .= '\texttt{'; + $endstring .= '}'; + } + my $weight = &get_css_property('font-weight',$parstack,$safeeval); + if ($weight eq 'bold') { + $currentstring .= '\textbf{'; + $endstring .= '}'; + } + my $style = &get_css_property('font-style',$parstack,$safeeval); + if ($style eq 'italic') { + $currentstring .= '\textit{'; + $endstring .= '}'; + } + push(@span_end_stack, $endstring); + } return $currentstring; } @@ -4068,7 +4092,10 @@ sub end_span { my $currentstring = ''; if ($target eq 'web' || $target eq 'webgrade') { $currentstring = $token->[2]; - } + } elsif ($target eq 'tex') { + my $endstring = pop @span_end_stack; + $currentstring .= $endstring; + } return $currentstring; } @@ -4666,6 +4693,23 @@ sub clean_docs_httpref { return $cleanhref; } +# This is retrieving a CSS property from the style attribute of the current element. +# It is not checking