--- loncom/xml/londefdef.pm 2005/07/10 21:43:35 1.278 +++ loncom/xml/londefdef.pm 2005/07/11 10:27:58 1.280 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Tags Default Definition Module # -# $Id: londefdef.pm,v 1.278 2005/07/10 21:43:35 www Exp $ +# $Id: londefdef.pm,v 1.280 2005/07/11 10:27:58 foxr Exp $ # # # Copyright Michigan State University Board of Trustees @@ -563,7 +563,7 @@ EDITBUTTON sub end_body { my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; - my $currentstring = &end_p; # Close off unclosed
+ my $currentstring = &end_p(); # Close off unclosed
if ($target eq 'web') { $currentstring .= &Apache::lonxml::xmlend($target,$parser); } elsif ($target eq 'tex') { @@ -575,7 +575,7 @@ sub end_body { #--
sub start_b {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
- $currentstring = '\textbf{';
+ &disable_para();
+ $currentstring .= '\textbf{';
}
return $currentstring;
}
@@ -613,18 +615,21 @@ sub end_b {
if ($target eq 'web') {
$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') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
+ &disable_para();
$currentstring = '\textbf{';
}
return $currentstring;
@@ -636,6 +641,7 @@ sub end_strong {
if ($target eq 'web') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
+ &enable_para();
$currentstring = '}';
}
return $currentstring;
@@ -644,7 +650,7 @@ sub end_strong {
#--
+# 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 = &end_p; # close off prior para if in progress.
+ my $currentstring = '';
if ($target eq 'web') {
+ $currentstring .= &end_p(); # close off prior para if in progress.
$currentstring .= $token->[4];
- $closing_string = ' tag (end tag required)
sub start_h1 {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
- my $currentstring = &end_p; # Close off any prior para.
+ my $currentstring = &end_p(); # Close off any prior para.
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
@@ -693,7 +699,7 @@ sub end_h1 {
#--
tag
sub start_h2 {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
- my $currentstring = &end_p; # Close off any prior para.
+ my $currentstring = &end_p(); # Close off any prior para.
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
@@ -736,7 +742,7 @@ sub end_h2 {
#--
tag
sub start_h3 {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
- my $currentstring = &end_p; # Close off any prior para.
+ my $currentstring = &end_p(); # Close off any prior para.
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
@@ -779,7 +785,7 @@ sub end_h3 {
#--
tag
sub start_h4 {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
- my $currentstring = &end_p; # Close off any prior para.
+ my $currentstring = &end_p(); # Close off any prior para.
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
@@ -822,7 +828,7 @@ sub end_h4 {
#--
tag
sub start_h5 {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
- my $currentstring = &end_p; # Close off any prior paras.
+ my $currentstring = &end_p(); # Close off any prior paras.
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
@@ -865,7 +871,7 @@ sub end_h5 {
#--
tag
sub start_h6 {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
- my $currentstring = &end_p; # Close off any prior paras.
+ my $currentstring = &end_p(); # Close off any prior paras.
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
@@ -1123,15 +1129,34 @@ sub end_q {
my $closing_string = ''; # String required to close
does not work inside ... - foreach my $tag (@$tagstack) { - if (lc($tag) eq 'b') { - $signal=0; - } - } - if (!$signal) { - $currentstring = &end_p; # Just close the prior? Not sure this is correct - $closing_string = ''; # Probably correct? - } } return $currentstring; @@ -1164,9 +1179,16 @@ sub start_p { # End paragraph processing just requires that we output the # closing string that was saved and blank it. sub end_p { - my $current_string = $closing_string; - $closing_string = ''; # Not in a para anymore. - return $current_string; + # 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 ''; + } } } @@ -1415,7 +1437,7 @@ sub end_sup { #--
in the
in the
prior to the list. + my $currentstring = &end_p(); # In case there's a
prior to the list. if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { @@ -1663,7 +1722,7 @@ sub end_dir { #--
prior to the list. + my $currentstring = &end_p(); # In case there's a
prior to the list. if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { @@ -1717,7 +1776,7 @@ sub end_ol { #--
unclosed prior to the list. + my $currentstring = &end_p(); # In case there's a
unclosed prior to the list. if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { @@ -1833,7 +1892,7 @@ sub end_dd { sub start_table { my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $textwidth = ''; - my $currentstring = &end_p; + my $currentstring = &end_p(); if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { @@ -2153,7 +2212,7 @@ sub start_tr { sub end_tr { my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; - my $currentstring = &end_p; # Close any pending
in the row. + my $currentstring = &end_p(); # Close any pending
in the row. if ($target eq 'web') { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { @@ -2430,7 +2489,7 @@ sub end_th_tex { sub end_th { my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; - my $currentstring = &end_p; # Close any open
in the row. + my $currentstring = &end_p(); # Close any open
in the row. if ($target eq 'web') { $currentstring .= $token->[2]; } elsif ($target eq 'tex') { @@ -2880,7 +2939,7 @@ sub end_xmp { #--
(end tag required) sub start_pre { my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; - my $currentstring = &end_p; # close off pending+ my $currentstring = &end_p(); # close off pending
if ($target eq 'web') { $currentstring .= $token->[4]; } elsif ($target eq 'tex') { @@ -2943,7 +3002,7 @@ sub end_externallink { #--
sub start_blankspace { my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; - my $currentstring = &end_p; # closes off any unclosed + my $currentstring = &end_p(); # closes off any unclosed
if ($target eq 'tex') { my $howmuch = &Apache::lonxml::get_param('heigth',$parstack,$safeeval,undef,1); $currentstring .= '\vskip '.$howmuch.' '; @@ -3096,7 +3155,7 @@ sub end_blink { #--
tag (end tag required) sub start_blockquote { my ($target,$token) = @_; - my $currentstring = &end_p; # Close any unclosed+ my $currentstring = &end_p(); # Close any unclosed
if ($target eq 'web') { $currentstring .= $token->[4]; } @@ -3419,7 +3478,7 @@ sub end_marquee { #--
tag (end tag required) sub start_multicol { my ($target,$token) = @_; - my $currentstring = &end_p; # Close any pending + my $currentstring = &end_p(); # Close any pending
if ($target eq 'web') { $currentstring .= $token->[4]; } @@ -3617,7 +3676,7 @@ sub end_server { #--
tag (end tag forbidden) sub start_spacer { my ($target,$token) = @_; - my $currentstring = &end_p; # Close off any open tag. + my $currentstring = &end_p(); # Close off any open
tag. if ($target eq 'web') { $currentstring .= $token->[4]; }