--- loncom/xml/londefdef.pm 2004/06/17 17:03:00 1.222
+++ loncom/xml/londefdef.pm 2007/05/10 09:50:10 1.365
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Tags Default Definition Module
#
-# $Id: londefdef.pm,v 1.222 2004/06/17 17:03:00 sakharuk Exp $
+# $Id: londefdef.pm,v 1.365 2007/05/10 09:50:10 foxr Exp $
#
#
# Copyright Michigan State University Board of Trustees
@@ -36,14 +36,10 @@
# The C source of the Code may not be distributed by the Licensee
# to any other parties under any circumstances.
#
-#
-# last modified 06/26/00 by Alexander Sakharuk
-# 11/6,11/30,02/01/01,5/4 Gerd Kortemeyer
-# 01/18 Alex Sakharuk
package Apache::londefdef;
-use Apache::lonnet();
+use Apache::lonnet;
use strict;
use Apache::lonxml;
use Apache::File();
@@ -51,7 +47,9 @@ use Image::Magick;
use Apache::lonmenu();
use Apache::lonmeta();
use Apache::Constants qw(:common);
-
+use File::Basename;
+use LONCAPA();
+# use Data::Dumper;
BEGIN {
@@ -59,13 +57,31 @@ 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 {
$Apache::londefdef::TD_redirection=0;
@Apache::londefdef::table = ();
$Apache::londefdef::select=0;
- @Apache::londefdef::description=();
- $Apache::londefdef::DD_redirection=0;
- $Apache::londefdef::DT_redirection=0;
+ undef(@Apache::londefdef::description);
+ @Apache::londefdef::DD=(0);
+ @Apache::londefdef::DT=(0);
+ @Apache::londefdef::seenDT=(0);
+ $Apache::londefdef::list_index=0;
+ undef($Apache::londefdef::head);
+ undef($Apache::londefdef::title);
}
#======================= TAG SUBROUTINES =====================
@@ -86,28 +102,48 @@ sub start_m {
my $currentstring = '';
my $inside = &Apache::lonxml::get_all_text_unbalanced("/m",$parser);
if ($target eq 'web' || $target eq 'analyze') {
- $inside ='\\documentstyle{article}'.$inside;
&Apache::lonxml::debug("M is starting with:$inside:");
my $eval=&Apache::lonxml::get_param('eval',$parstack,$safeeval);
if ($eval eq 'on') {
$inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]);
#&Apache::lonxml::debug("M is evaulated to:$inside:");
}
- $currentstring = &Apache::lontexconvert::converted(\$inside);
+ my $tex = $inside;
+ my $display=&Apache::lonxml::get_param('display',$parstack,$safeeval);
+ $currentstring = &Apache::lontexconvert::converted(\$inside,$display);
if ($Apache::lontexconvert::errorstring) {
- &Apache::lonxml::warning("tth error: ".
- $Apache::lontexconvert::errorstring);
+ my $errormsg='
');
$Apache::lontexconvert::errorstring='';
}
#&Apache::lonxml::debug("M is ends with:$currentstring:");
$Apache::lonxml::post_evaluate=0;
} elsif ($target eq 'tex') {
+
$currentstring = $inside;
my $eval=&Apache::lonxml::get_param('eval',$parstack,$safeeval);
if ($eval eq 'on') {
$currentstring=&Apache::run::evaluate($currentstring,$safeeval,$$parstack[-1]);
}
if ($currentstring=~/^(\s*\\\\\s*)*$/) {$currentstring = ' \vskip 0 mm ';}
+ # detect simple math mode entry exits, and convert them
+ # to use \ensuremath ... unless there's a \verb inside.
+ if (! ($currentstring=~/\\verb/)) {
+ if ($currentstring=~/^\s*\$[^\$].*[^\$]\$\s*$/) {
+ $currentstring=~s/^(\s*)\$/$1/;
+ $currentstring=~s/\$(\s*)$/$1/;
+ $currentstring='\ensuremath{'.$currentstring.'}';
+ }
+ }
$Apache::lonxml::post_evaluate=0;
}
return $currentstring;
@@ -123,12 +159,13 @@ sub end_m {
}
sub start_tthoption {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
my $result;
- if ($target eq 'web') {
- my $inside = &Apache::lonxml::get_all_text("/tthoption",$parser);
+ if ($target eq 'web' || $target eq 'webgrade') {
+ my $inside = &Apache::lonxml::get_all_text("/tthoption",$parser,
+ $style);
$inside=~s/^\s*//;
- if ($ENV{'browser.mathml'}) {
+ if ($env{'browser.mathml'}) {
&tth::ttmoptions($inside);
} else {
&tth::tthoptions($inside);
@@ -147,21 +184,22 @@ sub end_tthoption {
sub start_html {
my ($target,$token) = @_;
my $currentstring = '';
- my $options=$ENV{'course.'.$ENV{'request.course.id'}.'.tthoptions'};
- &Apache::lontexconvert::init_tth();
- if ($target eq 'web' || $target eq 'edit') {
- $currentstring = &Apache::lonxml::xmlbegin().
- &Apache::lonxml::fontsettings();
- } elsif ($target eq 'tex') {
- @Apache::londefdef::table = ();
- $currentstring .= '\documentclass[letterpaper]{article}';
- if ($ENV{'form.latex_type'}=~'batchmode') {$currentstring .='\batchmode';}
+ if ($target eq 'web' || $target eq 'edit' || $target eq 'webgrade' ) {
+ # start_body() takes care of emitting the
+ } elsif ($target eq 'tex') {
+ $currentstring .=
+ '\documentclass[letterpaper,twoside]{article}\raggedbottom';
+ if (($env{'form.latex_type'}=~'batchmode') ||
+ (!$env{'request.role.adv'})) {$currentstring .='\batchmode';}
$currentstring .= '\newcommand{\keephidden}[1]{}'.
'\renewcommand{\deg}{$^{\circ}$}'.
+ '\usepackage{multirow}'.
'\usepackage{longtable}'.
'\usepackage{textcomp}'.
'\usepackage{makeidx}'.
'\usepackage[dvips]{graphicx}'.
+ '\usepackage{wrapfig}'.
+ '\usepackage{picins}'.
'\usepackage{epsfig}'.
'\usepackage{calc}'.
'\usepackage{amsmath}'.
@@ -176,10 +214,10 @@ sub start_html {
}
sub end_html {
- my ($target,$token) = @_;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
- if ($target eq 'web') {
- $currentstring = &Apache::lonxml::xmlend();
+ if ($target eq 'web' || $target eq 'webgrade') {
+ # end_body takes care of the
}
return $currentstring;
}
@@ -188,8 +226,8 @@ sub end_html {
sub start_head {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
- $currentstring = $token->[4];
+ if ($target eq 'web' || $target eq 'webgrade') {
+ &Apache::lonxml::startredirection();
}
return $currentstring;
}
@@ -197,9 +235,12 @@ sub start_head {
sub end_head {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web' && $ENV{'request.state'} eq 'published') {
- $currentstring = &Apache::lonmenu::registerurl(undef,$target).
- $token->[2];
+ if (($target eq 'web' && $env{'request.state'} eq 'published') ||
+ ($target eq 'webgrade' && $env{'request.state'} eq 'published')) {
+ # in case there is a but no
+ if ($Apache::lonxml::redirection) {
+ $Apache::londefdef::head = &Apache::lonxml::endredirection();
+ }
}
return $currentstring;
}
@@ -208,7 +249,7 @@ sub end_head {
sub start_map {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring = $token->[4];
}
return $currentstring;
@@ -217,7 +258,7 @@ sub start_map {
sub end_map {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring = $token->[2];
}
return $currentstring;
@@ -227,7 +268,7 @@ sub end_map {
sub start_select {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
$Apache::londefdef::select=0;
@@ -238,7 +279,7 @@ sub start_select {
sub end_select {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring = $token->[2];
}
return $currentstring;
@@ -248,7 +289,7 @@ sub end_select {
sub start_option {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
$Apache::londefdef::select++;
@@ -264,7 +305,7 @@ sub start_option {
sub end_option {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
$currentstring='}';
@@ -276,7 +317,7 @@ sub end_option {
sub start_input {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring = $token->[4];
}
return $currentstring;
@@ -285,7 +326,7 @@ sub start_input {
sub end_input {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring = $token->[2];
}
return $currentstring;
@@ -295,7 +336,7 @@ sub end_input {
sub start_textarea {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring = $token->[4];
}
return $currentstring;
@@ -304,7 +345,7 @@ sub start_textarea {
sub end_textarea {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring = $token->[2];
}
return $currentstring;
@@ -314,7 +355,7 @@ sub end_textarea {
sub start_form {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring = $token->[4];
}
return $currentstring;
@@ -323,7 +364,7 @@ sub start_form {
sub end_form {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring = $token->[2];
}
return $currentstring;
@@ -331,10 +372,11 @@ sub end_form {
#-- tag (end tag required)
sub start_title {
- my ($target,$token) = @_;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
my $currentstring = '';
- if ($target eq 'web') {
- $currentstring = $token->[4];
+ if ($target eq 'web' || $target eq 'webgrade') {
+ $Apache::londefdef::title =
+ &Apache::lonxml::get_all_text('/title',$parser,$style);
} elsif ($target eq 'tex') {
$currentstring .= '\keephidden{Title of the document: '
}
@@ -348,8 +390,8 @@ sub start_title {
sub end_title {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
- $currentstring = $token->[2];
+ if ($target eq 'web' || $target eq 'webgrade') {
+ # start_title takes care of swallowing the title
} elsif ($target eq 'tex') {
$currentstring .= '}';
}
@@ -362,13 +404,13 @@ sub end_title {
#-- tag (end tag forbidden)
sub start_meta {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
my $args='';
if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; }
if ($args eq '') {
- &Apache::lonxml::get_all_text("/meta",$parser);
+ &Apache::lonxml::get_all_text("/meta",$parser,$style);
} else {
$currentstring = $token->[4];
}
@@ -413,7 +455,7 @@ sub start_meta {
sub end_meta {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
my $args='';
if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; }
if ($args ne '') {
@@ -431,7 +473,7 @@ sub end_meta {
# accessrule
sub start_accessrule {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
my $currentstring = '';
my $eff=&Apache::lonxml::get_param
('effect',$parstack,$safeeval,undef,1);
@@ -450,7 +492,7 @@ sub start_accessrule {
my $args='';
if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; }
if ($args eq '') {
- &Apache::lonxml::get_all_text("/accessrule",$parser);
+ &Apache::lonxml::get_all_text("/accessrule",$parser,$style);
} else {
$currentstring = $token->[4];
}
@@ -478,70 +520,31 @@ sub end_accessrule {
sub start_body {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+
+ if ($target eq 'web' || $target eq 'webgrade') {
if ($Apache::lonhomework::parsing_a_problem) {
&Apache::lonxml::warning(" tag found inside of tag this can cause problems.");
return '';
}
- if (!$Apache::lonxml::registered &&
- $ENV{'request.state'} eq 'published') {
- $currentstring.=''.
- &Apache::lonmenu::registerurl(undef,$target).'';
- }
-# Accessibility
- if ($ENV{'browser.imagesuppress'} eq 'on') {
- delete($token->[2]->{'background'});
- }
- if ($ENV{'browser.fontenhance'} eq 'on') {
- my $style='';
- foreach my $key (keys(%{$token->[2]})) {
- if ($key =~ /^style$/i) {
- $style.=$token->[2]->{$key}.';';
- delete($token->[2]->{$key});
- }
- }
- $token->[2]->{'style'}=$style.'; font-size: x-large;';
- }
- if ($ENV{'browser.blackwhite'} eq 'on') {
- delete($token->[2]->{'font'});
- delete($token->[2]->{'link'});
- delete($token->[2]->{'alink'});
- delete($token->[2]->{'vlink'});
- delete($token->[2]->{'bgcolor'});
- delete($token->[2]->{'background'});
- }
-# Overload loads
- 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]->{$_}.'"';
+ if (&is_inside_of($tagstack, "head")) {
+ &end_head(@_);
}
- $currentstring.='>';
- if ($ENV{'request.state'} ne 'published') {
+ $currentstring =
+ &Apache::loncommon::start_page($Apache::londefdef::title,
+ $Apache::londefdef::head,
+ {'add_entries' => $token->[2],
+ 'no_title' => 1,
+ 'force_register' => 1});
+
+ if ($env{'request.state'} ne 'published') {
+ $currentstring.=&Apache::lonmenu::constspaceform();
$currentstring.=(<
-
-
+
+
EDITBUTTON
- } else {
- $currentstring.=&Apache::lonmenu::menubuttons(undef,$target,1);
}
$currentstring.=&Apache::lonxml::message_location();
} elsif ($target eq 'tex') {
@@ -551,47 +554,62 @@ EDITBUTTON
}
sub end_body {
- my ($target,$token) = @_;
- my $currentstring = '';
- if ($target eq 'web') {
- $currentstring = $token->[2];
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
+ my $currentstring = &end_p(); # Close off unclosed
+ if ($target eq 'web' || $target eq 'webgrade') {
+ $currentstring .= &Apache::loncommon::end_page({'discussion' => 1});
} elsif ($target eq 'tex') {
- $currentstring = '\strut\newline\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\newline\noindent \end{document}';
+ $currentstring .= '\strut\newline\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\newline\noindent \end{document}';
}
return $currentstring;
}
+# \begin{center} causes a new paragprah spacing that looks odd inside
+# of a table cell. Same at the end of a \center but with a slightly
+# larger space .. hence center_correction and center_end_correction.
+#
+sub center_correction { return '\vspace*{-6 mm}'; }
+sub center_end_correction { return '\vspace*{-7 mm}'; }
+
#--
tag (end tag required)
sub start_center {
- my ($target,$token) = @_;
- my $currentstring = '';
- if ($target eq 'web') {
- $currentstring = $token->[4];
+ my ($target,$token,$tagstack) = @_;
+ my $currentstring = &end_p(); # Close off any prior para.
+ if ($target eq 'web' || $target eq 'webgrade') {
+ $currentstring .= $token->[4];
} elsif ($target eq 'tex') {
- $currentstring = '\begin{center}';
+ if (&is_inside_of($tagstack, "table")) {
+ $currentstring .= ¢er_correction();
+ }
+ $currentstring .= '\begin{center}';
}
return $currentstring;
}
sub end_center {
- my ($target,$token) = @_;
+ my ($target,$token,$tagstack) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
$currentstring = '\end{center}';
+ if (&is_inside_of($tagstack, "table")) {
+ $currentstring .= ¢er_end_correction();
+ }
}
return $currentstring;
}
#-- tag (end tag required)
+# NOTE: In TeX mode disables internal
sub start_b {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
- $currentstring = '\textbf{';
+ &disable_para();
+ $currentstring .= '\textbf{';
}
return $currentstring;
}
@@ -599,21 +617,24 @@ sub start_b {
sub end_b {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
- $currentstring = '}';
+ &enable_para();
+ $currentstring = '}';
}
return $currentstring;
}
#-- tag (end tag required)
+# NOTE: in TeX mode disables internal
sub start_strong {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
+ &disable_para();
$currentstring = '\textbf{';
}
return $currentstring;
@@ -622,9 +643,10 @@ sub start_strong {
sub end_strong {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
+ &enable_para();
$currentstring = '}';
}
return $currentstring;
@@ -633,8 +655,8 @@ sub end_strong {
#--
tag (end tag required)
sub start_h1 {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
- my $currentstring = '';
- if ($target eq 'web') {
+ my $currentstring = &end_p(); # Close off any prior para.
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
my $pre;
@@ -648,9 +670,9 @@ sub start_h1 {
}
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0);
if (not defined $TeXsize) {$TeXsize="large";}
- $currentstring .= $pre.'{\\'.$TeXsize.' \textbf{';
+ $currentstring .= '\strut\newline '.$pre.'{\\'.$TeXsize.' \textbf{';
} elsif ($target eq 'meta') {
- $currentstring='';
+ $currentstring.='';
&start_output($target);
}
return $currentstring;
@@ -659,7 +681,7 @@ sub start_h1 {
sub end_h1 {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
my $post='\vskip 0 mm ';
@@ -682,8 +704,8 @@ sub end_h1 {
#--
tag
sub start_h2 {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
- my $currentstring = '';
- if ($target eq 'web') {
+ my $currentstring = &end_p(); # Close off any prior para.
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
my $pre;
@@ -697,7 +719,7 @@ sub start_h2 {
}
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0);
if (not defined $TeXsize) {$TeXsize="large";}
- $currentstring .= $pre.'{\\'.$TeXsize.' \textbf{';
+ $currentstring .= '\strut\newline '.$pre.'{\\'.$TeXsize.' \textbf{';
}
return $currentstring;
}
@@ -705,7 +727,7 @@ sub start_h2 {
sub end_h2 {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
my $post='\vskip 0 mm ';
@@ -725,8 +747,8 @@ sub end_h2 {
#--
tag
sub start_h3 {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
- my $currentstring = '';
- if ($target eq 'web') {
+ my $currentstring = &end_p(); # Close off any prior para.
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
my $pre;
@@ -740,7 +762,7 @@ sub start_h3 {
}
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0);
if (not defined $TeXsize) {$TeXsize="large";}
- $currentstring .= $pre.'{\\'.$TeXsize.' \textbf{';
+ $currentstring .= '\strut\newline '.$pre.'{\\'.$TeXsize.' \textbf{';
}
return $currentstring;
}
@@ -748,7 +770,7 @@ sub start_h3 {
sub end_h3 {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
my $post='\vskip 0 mm ';
@@ -768,8 +790,8 @@ sub end_h3 {
#--
tag
sub start_h4 {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
- my $currentstring = '';
- if ($target eq 'web') {
+ my $currentstring = &end_p(); # Close off any prior para.
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
my $pre;
@@ -783,7 +805,7 @@ sub start_h4 {
}
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0);
if (not defined $TeXsize) {$TeXsize="large";}
- $currentstring .= $pre.'{\\'.$TeXsize.' \textbf{';
+ $currentstring .= '\strut\newline '.$pre.'{\\'.$TeXsize.' \textbf{';
}
return $currentstring;
}
@@ -791,7 +813,7 @@ sub start_h4 {
sub end_h4 {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
my $post='\vskip 0 mm ';
@@ -811,8 +833,8 @@ sub end_h4 {
#--
tag
sub start_h5 {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
- my $currentstring = '';
- if ($target eq 'web') {
+ my $currentstring = &end_p(); # Close off any prior paras.
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
my $pre;
@@ -826,7 +848,7 @@ sub start_h5 {
}
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0);
if (not defined $TeXsize) {$TeXsize="large";}
- $currentstring .= $pre.'{\\'.$TeXsize.' \textbf{';
+ $currentstring .= '\strut\newline '.$pre.'{\\'.$TeXsize.' \textbf{';
}
return $currentstring;
}
@@ -834,7 +856,7 @@ sub start_h5 {
sub end_h5 {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
my $post='\vskip 0 mm ';
@@ -854,8 +876,8 @@ sub end_h5 {
#--
tag
sub start_h6 {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
- my $currentstring = '';
- if ($target eq 'web') {
+ my $currentstring = &end_p(); # Close off any prior paras.
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
my $pre;
@@ -869,7 +891,7 @@ sub start_h6 {
}
my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval,undef,0);
if (not defined $TeXsize) {$TeXsize="large";}
- $currentstring .= $pre.'{\\'.$TeXsize.' \textbf{';
+ $currentstring .= '\strut\newline '.$pre.'{\\'.$TeXsize.' \textbf{';
}
return $currentstring;
}
@@ -877,7 +899,7 @@ sub start_h6 {
sub end_h6 {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
my $post='\vskip 0 mm ';
@@ -898,7 +920,7 @@ sub end_h6 {
sub start_cite {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= '\textit{';
@@ -909,7 +931,7 @@ sub start_cite {
sub end_cite {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= '}';
@@ -921,7 +943,7 @@ sub end_cite {
sub start_i {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= '\textit{';
@@ -932,7 +954,7 @@ sub start_i {
sub end_i {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= '}';
@@ -944,7 +966,7 @@ sub end_i {
sub start_address {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= '\textit{';
@@ -955,7 +977,7 @@ sub start_address {
sub end_address {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= '}';
@@ -967,7 +989,7 @@ sub end_address {
sub start_dfn {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= '\textit{';
@@ -978,7 +1000,7 @@ sub start_dfn {
sub end_dfn {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= '}';
@@ -990,7 +1012,7 @@ sub end_dfn {
sub start_tt {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= '\texttt{';
@@ -1001,7 +1023,7 @@ sub start_tt {
sub end_tt {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= '}';
@@ -1013,7 +1035,7 @@ sub end_tt {
sub start_kbd {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= '\texttt{';
@@ -1024,7 +1046,7 @@ sub start_kbd {
sub end_kbd {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= '}';
@@ -1036,7 +1058,7 @@ sub end_kbd {
sub start_code {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= '\texttt{';
@@ -1047,7 +1069,7 @@ sub start_code {
sub end_code {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= '}';
@@ -1059,7 +1081,7 @@ sub end_code {
sub start_em {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= '\emph{';
@@ -1070,7 +1092,7 @@ sub start_em {
sub end_em {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= '}';
@@ -1082,7 +1104,7 @@ sub end_em {
sub start_q {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= '\emph{';
@@ -1093,7 +1115,7 @@ sub start_q {
sub end_q {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= '}';
@@ -1101,65 +1123,117 @@ sub end_q {
return $currentstring;
}
+#
is a bit strange since it does not require a closing
+# However in latex, we must often output closing stuff to end
+# environments and {}'s etc. Therefore we do all the work
+# of figuring out the ending strings in the start tag processing,
+# and provide a mechanism to output the stop text external
+# to tag processing.
+#
+{
+
+ my $closing_string = ''; # String required to close
+
+# Some tags are
fragile meaning that
inside of them
+# does not work within TeX mode. This is managed via the
+# counter below:
+#
+
+ my $para_disabled = 0;
+
+sub disable_para {
+ $para_disabled++;
+}
+sub enable_para {
+ $para_disabled--;
+}
+
+
#--
tag (end tag optional)
#optional attribute - align="center|left|right"
sub start_p {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
+ $currentstring .= &end_p(); # close off prior para if in progress.
$currentstring .= $token->[4];
- } elsif ($target eq 'tex') {
+ if (! ($currentstring =~ /\//)) {
+ $closing_string = '
'; # Deal correctly with e.g.
+ }
+ } elsif ($target eq 'tex' && !$para_disabled) {
+
+ $currentstring .= &end_p(); # close off prior para if in progress.
my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1);
if ($align eq 'center') {
- $currentstring='\begin{center}\par';
+ $currentstring .='\begin{center}\par ';
+ $closing_string = '\end{center}';
+ if (&is_inside_of($tagstack, "table")) {
+ $currentstring = ¢er_correction().$currentstring;
+ }
} elsif ($align eq 'right') {
- $currentstring='\makebox['.$ENV{'form.textwidth'}.']{\hfill\llap{';
+ $currentstring.="\n".'{\flushright ';
+# $currentstring.='\makebox['.$env{'form.textwidth'}.']{\hfill\llap{';
+ $closing_string= "}\n";
} elsif ($align eq 'left') {
- $currentstring='\noindent\makebox['.$ENV{'form.textwidth'}.']{\rlap{';
+ $currentstring.= "\n".'{\flushleft ';
+# $currentstring.='\noindent\makebox['.$env{'form.textwidth'}.']{{';
+ $closing_string = "}\n";
} else {
- $currentstring='\par ';
+ $currentstring.='\par ';
+ if (&is_inside_of($tagstack, 'table')) {
+ $closing_string = '\vskip 0pt'; # Seems to be consistent with
in tables.
+ } else {
+ $closing_string = '\strut\\\\\strut ';
+ }
}
- my $signal=1;#
does not work inside ...
- foreach my $tag (@$tagstack) {if (lc($tag) eq 'b') {$signal=0;}
- if (!$signal) {$currentstring = '';}
- }
+
}
return $currentstring;
}
-
+#
+# End paragraph processing just requires that we output the
+# closing string that was saved and blank it.
sub end_p {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
- my $currentstring = '';
- if ($target eq 'web') {
- $currentstring .= $token->[2];
- } elsif ($target eq 'tex') {
- if ($$tagstack[-1] eq 'p') {
- my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1);
- if ($align eq 'center') {
- $currentstring .= '\end{center}';
- } elsif ($align eq 'right') {
- $currentstring .= '}}';
- } elsif ($align eq 'left') {
- $currentstring .= '}\hfill}';
- }
- }
+ # Note only 'tex' mode uses disable_para and enable_para
+ # so we don't need to know the target in the check below:
+
+ if (!$para_disabled) {
+ my $current_string = $closing_string;
+ $closing_string = ''; # Not in a para anymore.
+ return $current_string;
+ } else {
+ return '';
}
- return $currentstring;
-}
+}
+}
#-- tag (end tag forbidden)
sub start_br {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
- if (($$tagstack[-2] eq 'b') || ($$tagstack[-2] eq 'strong') ||
- ($$tagstack[-2] eq 'ol') || ($$tagstack[-2] eq 'ul')) {
+ my @tempo=@$tagstack;
+ my $signal=0;
+ # Not going to factor this to is_inside_of since that would require
+ # multiple stack traversals.
+ #
+ for (my $i=$#tempo;$i>=0;$i--) {
+ if (($tempo[$i] eq 'b') || ($tempo[$i] eq 'strong') ||
+ ($tempo[$i] eq 'ol') || ($tempo[$i] eq 'ul')) {
+ $signal=1;
+ }
+ if (($tempo[$i] eq 'td') || ($tempo[$i] eq 'th')) {
+ $signal = 1;
+ }
+ }
+ if ($signal eq 1) {
$currentstring .= ' \vskip 0 mm ';
- } elsif ($$tagstack[-2] ne 'sub' && $$tagstack[-2] ne 'sup') {
+ } else {
$currentstring .= '\strut \\\\ \strut ';
}
+
}
return $currentstring;
}
@@ -1167,7 +1241,7 @@ sub start_br {
sub end_br {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[2];
}
return $currentstring;
@@ -1177,7 +1251,7 @@ sub end_br {
sub start_big {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= '{\large ';
@@ -1188,7 +1262,7 @@ sub start_big {
sub end_big {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= '}';
@@ -1200,7 +1274,7 @@ sub end_big {
sub start_small {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
$currentstring .= '{\footnotesize ';
@@ -1211,7 +1285,7 @@ sub start_small {
sub end_small {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= '}';
@@ -1223,7 +1297,7 @@ sub end_small {
sub start_basefont {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
my $basesize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval);
@@ -1237,7 +1311,7 @@ sub start_basefont {
sub end_basefont {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
my $basesize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval);
@@ -1252,11 +1326,11 @@ sub end_basefont {
sub start_font {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
my $face=&Apache::lonxml::get_param('face',$parstack,$safeeval);
if ($face!~/symbol/i) {
- if (($ENV{'browser.fontenhance'} eq 'on') ||
- ($ENV{'browser.blackwhite'} eq 'on')) { return ''; }
+ if (($env{'browser.fontenhance'} eq 'on') ||
+ ($env{'browser.blackwhite'} eq 'on')) { return ''; }
}
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
@@ -1271,7 +1345,7 @@ sub start_font {
sub end_font {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
my $fontsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval);
@@ -1286,7 +1360,7 @@ sub end_font {
sub start_strike {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
&Apache::lonxml::startredirection();
@@ -1297,7 +1371,7 @@ sub start_strike {
sub end_strike {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring=&Apache::lonxml::endredirection();
@@ -1312,7 +1386,7 @@ sub end_strike {
sub start_s {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
&Apache::lonxml::startredirection();
@@ -1323,7 +1397,7 @@ sub start_s {
sub end_s {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring=&Apache::lonxml::endredirection();
@@ -1338,10 +1412,10 @@ sub end_s {
sub start_sub {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
- $currentstring .= '\ensuremath{_{';
+ $currentstring .= '\raisebox{-\smallskipamount}{\scriptsize{';
}
return $currentstring;
}
@@ -1349,7 +1423,7 @@ sub start_sub {
sub end_sub {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= '}}';
@@ -1361,10 +1435,10 @@ sub end_sub {
sub start_sup {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
- $currentstring .= '\ensuremath{^{';
+ $currentstring .= '\raisebox{\smallskipamount}{\scriptsize{';
}
return $currentstring;
}
@@ -1372,7 +1446,7 @@ sub start_sup {
sub end_sup {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
$currentstring .= '}}';
@@ -1383,10 +1457,31 @@ sub end_sup {
#--
tag (end tag forbidden)
sub start_hr {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
- my $currentstring = '';
- if ($target eq 'web') {
+ my $currentstring = &end_p(); # End enclosing para.
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
+
+ # can't be inside of thank you LaTeX.
+ #
+ my $restart_sub = 0;
+ my $restart_sup = 0;
+
+ # Since and are simple tags it's ok to turn off/on
+ # using the start_ stop_ functions.. those tags only care about
+ # $target.
+
+ if (&is_inside_of($tagstack, "sub")) {
+ $restart_sub = 1;
+ $currentstring .= &end_sub($target, $token, $tagstack,
+ $parstack, $parser, $safeeval);
+ }
+ if (&is_inside_of($tagstack, "sup")) {
+ $restart_sup = 1;
+ $currentstring .= &end_sup($target, $token, $tagstack,
+ $parstack, $parser, $safeeval);
+ }
+
my $LaTeXwidth = &Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval,undef,0);
if (defined $LaTeXwidth) {
if ($LaTeXwidth=~/^%/) {
@@ -1407,6 +1502,16 @@ sub start_hr {
}
$currentstring .= ' \vskip 0 mm \noindent\makebox['.$LaTeXwidth.']{'.$pre.'\makebox['.
$LaTeXwidth.'][b]{\hrulefill}'.$post.'}\vskip 0 mm ';
+ # Turn stuff back on that we can't be inside of.
+
+ if ($restart_sub) {
+ $currentstring .= &start_sub($target, $token, $tagstack,
+ $parstack, $parser, $safeeval);
+ }
+ if ($restart_sup) {
+ $currentstring .= &start_sup($target, $token, $tagstack,
+ $parstack, $parser, $safeeval);
+ }
}
return $currentstring;
}
@@ -1414,48 +1519,79 @@ sub start_hr {
sub end_hr {
my ($target,$token) = @_;
my $currentstring = '';
- if ($target eq 'web') {
+ if ($target eq 'web' || $target eq 'webgrade') {
$currentstring .= $token->[2];
}
return $currentstring;
}
#--