--- loncom/xml/londefdef.pm 2003/08/22 16:29:15 1.164
+++ loncom/xml/londefdef.pm 2003/10/10 19:05:31 1.179
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Tags Default Definition Module
#
-# $Id: londefdef.pm,v 1.164 2003/08/22 16:29:15 albertel Exp $
+# $Id: londefdef.pm,v 1.179 2003/10/10 19:05:31 sakharuk Exp $
#
#
# Copyright Michigan State University Board of Trustees
@@ -92,9 +92,15 @@ sub start_m {
$Apache::lontexconvert::errorstring='';
}
#&Apache::lonxml::debug("M is ends with:$currentstring:");
+ $Apache::lonxml::post_evaluate=0;
} elsif ($target eq 'tex') {
$currentstring = &Apache::lonxml::get_all_text_unbalanced("/m",$parser);
+ 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 ';}
+ $Apache::lonxml::post_evaluate=0;
} else {
my $inside = &Apache::lonxml::get_all_text_unbalanced("/m",$parser);
}
@@ -323,7 +329,7 @@ sub start_title {
if ($target eq 'web') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
- $currentstring .= '\keephidden{'
+ $currentstring .= '\keephidden{Title of the document: '
}
if ($target eq 'meta') {
$currentstring='
';
@@ -398,7 +404,7 @@ sub start_meta {
}
sub end_meta {
- my ($target,$token,$tagstack,$parstack,$parser) = @_;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
if ($target eq 'web') {
my $args='';
@@ -407,8 +413,10 @@ sub end_meta {
$currentstring = $token->[4];
}
} 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();
+ &Apache::lonxml::endredirection();
}
}
return $currentstring;
@@ -464,6 +472,10 @@ sub start_body {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
if ($target eq 'web') {
+ if ($Apache::lonhomework::parsing_a_problem) {
+ &Apache::lonxml::warning(" tag found inside of tag this can cause problems.");
+ return '';
+ }
if (!$Apache::lonxml::registered) {
$currentstring.=''.
&Apache::lonmenu::registerurl(undef,$target).'';
@@ -535,7 +547,7 @@ sub end_body {
if ($target eq 'web') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
- $currentstring = '\end{document}';
+ $currentstring = '\strut\newline\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\newline\noindent \end{document}';
}
return $currentstring;
}
@@ -881,7 +893,7 @@ sub start_cite {
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
- $currentstring .= "\\textit{";
+ $currentstring .= '\textit{';
}
return $currentstring;
}
@@ -892,7 +904,7 @@ sub end_cite {
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
- $currentstring .= "}";
+ $currentstring .= '}';
}
return $currentstring;
}
@@ -927,7 +939,7 @@ sub start_address {
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
- $currentstring .= "\\textit{";
+ $currentstring .= '\textit{';
}
return $currentstring;
}
@@ -938,7 +950,7 @@ sub end_address {
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
- $currentstring .= "}";
+ $currentstring .= '}';
}
return $currentstring;
}
@@ -950,7 +962,7 @@ sub start_dfn {
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
- $currentstring .= "\\textit{";
+ $currentstring .= '\textit{';
}
return $currentstring;
}
@@ -961,7 +973,7 @@ sub end_dfn {
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
- $currentstring .= "}";
+ $currentstring .= '}';
}
return $currentstring;
}
@@ -996,7 +1008,7 @@ sub start_kbd {
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
- $currentstring .= "\\texttt";
+ $currentstring .= '\texttt{';
}
return $currentstring;
}
@@ -1007,7 +1019,7 @@ sub end_kbd {
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
- $currentstring .= "}";
+ $currentstring .= '}';
}
return $currentstring;
}
@@ -1065,7 +1077,7 @@ sub start_q {
if ($target eq 'web') {
$currentstring .= $token->[4];
} elsif ($target eq 'tex') {
- $currentstring .= "\\emph{";
+ $currentstring .= '\emph{';
}
return $currentstring;
}
@@ -1076,7 +1088,7 @@ sub end_q {
if ($target eq 'web') {
$currentstring .= $token->[2];
} elsif ($target eq 'tex') {
- $currentstring .= "}";
+ $currentstring .= '}';
}
return $currentstring;
}
@@ -1419,7 +1431,7 @@ sub start_a {
}
sub end_a {
- my ($target,$token,$tagstack,$parstack,$safeeval) = @_;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring .= $token->[2];
@@ -1429,7 +1441,7 @@ sub end_a {
#--
tag
sub start_li {
- my ($target,$token,$tagstack,$parstack,$safeeval) = @_;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
@@ -1632,45 +1644,77 @@ sub start_dl {
if ($target eq 'web') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
- $currentstring = '\begin{description}';
+ $currentstring = '\begin{description}';
+ @Apache::londefdef::description=();
+ $Apache::londefdef::DD_redirection=0;
+ $Apache::londefdef::DT_redirection=0;
}
return $currentstring;
}
sub end_dl {
- my ($target,$token) = @_;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
- $currentstring = '\end{description}';
+ if ($Apache::londefdef::DT_redirection) {
+ my $data=&item_cleanup;
+ push @Apache::londefdef::description,'\item['.$data.']';
+ $Apache::londefdef::DT_redirection=0;
+ } elsif ($Apache::londefdef::DD_redirection) {
+ $Apache::londefdef::description[-1].=&Apache::lonxml::endredirection();
+ }
+ foreach my $element (@Apache::londefdef::description) {
+ $currentstring.=' '.$element.' ';
+ }
+ @Apache::londefdef::description=();
+ $currentstring.='\end{description}';
}
return $currentstring;
}
-#--
tag
+#--
tag (end tag optional)
sub start_dt {
- my ($target,$token) = @_;
- my $currentstring = '';
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
+ my $currentstring='';
if ($target eq 'web') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
- $currentstring = '\item[';
+ if ($Apache::londefdef::DT_redirection) {
+ my $data=&item_cleanup;
+ push @Apache::londefdef::description,'\item['.$data.']';
+ $Apache::londefdef::DT_redirection=0;
+ } elsif ($Apache::londefdef::DD_redirection) {
+ $Apache::londefdef::description[-1].=&Apache::lonxml::endredirection();
+ $Apache::londefdef::DD_redirection=0;
+ }
+ &Apache::lonxml::startredirection();
+ $Apache::londefdef::DT_redirection=1;
}
return $currentstring;
}
sub end_dt {
- 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 $data=&item_cleanup;
+ push @Apache::londefdef::description,'\item['.$data.']';
+ $Apache::londefdef::DT_redirection=0;
}
return $currentstring;
}
+sub item_cleanup {
+ my $item=&Apache::lonxml::endredirection();
+ $item=~s/\\begin{center}//g;
+ $item=~s/\\end{center}//g;
+ return $item;
+}
+
#--
tag
sub start_dd {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
@@ -1678,21 +1722,26 @@ sub start_dd {
if ($target eq 'web') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
- if ($$tagstack[-2] eq 'dl') {
- $currentstring = ' \item [] ';
- } elsif ($$tagstack[-2] eq 'dt') {
- $currentstring = ']';
+ if ($Apache::londefdef::DT_redirection) {
+ my $data=&item_cleanup;
+ push @Apache::londefdef::description,'\item['.$data.']';
+ $Apache::londefdef::DT_redirection=0;
}
+ $Apache::londefdef::DD_redirection=1;
+ &Apache::lonxml::startredirection();
}
return $currentstring;
}
sub end_dd {
- my ($target,$token) = @_;
+ my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
- }
+ } elsif ($target eq 'tex') {
+ $Apache::londefdef::description[-1].=&Apache::lonxml::endredirection();
+ $Apache::londefdef::DD_redirection=0;
+ }
return $currentstring;
}
@@ -1793,7 +1842,7 @@ sub end_table {
$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) {
+ if ($length_raw_row[$jn]<$available_length) {
$length_row_final[$jn]=$length_raw_row[$jn];
$available_length=$available_length-$length_raw_row[$jn];
$needed--;
@@ -1829,7 +1878,7 @@ sub end_table {
return $currentstring;
}
-#--
tag
+#--
tag (end tag optional)
sub start_tr {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
@@ -1866,7 +1915,7 @@ sub end_tr {
return $currentstring;
}
-#--
tag
+#--
tag (end tag optional)
sub start_td {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
@@ -1925,9 +1974,24 @@ sub end_td_tex {
$Apache::londefdef::table[-1]{'TeXlength'} .= $1.',';
$Apache::londefdef::table[-1]{'length'} .= '0,';
} else {
- $data=~s/^\s+(\S.*)/$1/;
+ $data=~s/^\s+(\S.*)/$1/;
$data=~s/(.*\S)\s+$/$1/;
- my $current_length=2*length($data);
+ $data=~s/(\s)+/$1/;
+ my $current_length=0;
+ if ($data=~/\\vskip/) {
+ my $newdata=$data;
+ $newdata=~s/\\vskip \d*\.?\d*\s*mm/THISISJUSTTEMPORARYSEPARATOR/g;
+ my @newdata=split(/THISISJUSTTEMPORARYSEPARATOR/,$newdata);
+ foreach my $elementdata (@newdata) {
+ $elementdata=~s/^\s+(\S.*)/$1/;
+ $elementdata=~s/(.*\S)\s+$/$1/;
+ $elementdata=~s/(\s)+/$1/;
+ my $lengthnewdata=1.8*length($elementdata);
+ if ($lengthnewdata>$current_length) {$current_length=$lengthnewdata;}
+ }
+ } else {
+ $current_length=1.8*length($data);
+ }
$Apache::londefdef::table[-1]{'length'} .= $current_length.',';
$Apache::londefdef::table[-1]{'TeXlength'} .= '0,';
}
@@ -1951,7 +2015,7 @@ sub end_td {
return $currentstring;
}
-#--
tag
+#--
tag (end tag optional)
sub start_th {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
my $currentstring = '';
@@ -2144,7 +2208,16 @@ sub start_applet {
$currentstring='[APPLET: '.$alttag.']';
}
} elsif ($target eq 'tex') {
- $currentstring = " \\begin{figure} ";
+ my $alttag= &Apache::lonxml::get_param('alt',$parstack,
+ $safeeval,undef,1);
+ unless ($alttag) {
+ my $code=&Apache::lonxml::get_param('code',$parstack,$safeeval,
+ undef,1);
+ $alttag=&Apache::lonmeta::alttag($Apache::lonxml::pwd[-1],
+ $code);
+ }
+ $currentstring.='\begin{center} \fbox{Java Applet: '.$alttag.
+ '.}\end{center}';
}
return $currentstring;
}
@@ -2155,7 +2228,6 @@ sub end_applet {
if ($target eq 'web') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
- $currentstring = " \\end{figure}";
}
return $currentstring;
}
@@ -2178,7 +2250,6 @@ sub start_embed {
$currentstring='[EMBED: '.$alttag.']';
}
} elsif ($target eq 'tex') {
- $currentstring = " \\begin{figure} ";
}
return $currentstring;
}
@@ -2188,8 +2259,7 @@ sub end_embed {
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
- } elsif ($target eq 'tex') {
- $currentstring = " \\end{figure}";
+ } elsif ($target eq 'tex') {
}
return $currentstring;
}
@@ -2208,7 +2278,6 @@ sub start_param {
if ($target eq 'web') {
$currentstring = $token->[4];
} elsif ($target eq 'tex') {
- $currentstring = " \\begin{figure} ";
}
return $currentstring;
}
@@ -2219,7 +2288,6 @@ sub end_param {
if ($target eq 'web') {
$currentstring = $token->[2];
} elsif ($target eq 'tex') {
- $currentstring = " \\end{figure}";
}
return $currentstring;
}
@@ -2858,8 +2926,8 @@ sub end_marquee {
return $currentstring;
}
-#-- tag
-sub start_malticol {
+#-- tag (end tag required)
+sub start_multicol {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
@@ -2868,7 +2936,7 @@ sub start_malticol {
return $currentstring;
}
-sub end_malticol {
+sub end_multicol {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
@@ -2877,13 +2945,15 @@ sub end_malticol {
return $currentstring;
}
-#-- tag
+#-- tag (end tag required)
sub start_nobr {
my ($target,$token) = @_;
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[4];
- }
+ } elsif ($target eq 'tex') {
+ $currentstring='\mbox{';
+ }
return $currentstring;
}
@@ -2892,11 +2962,13 @@ sub end_nobr {
my $currentstring = '';
if ($target eq 'web') {
$currentstring = $token->[2];
- }
+ } elsif ($target eq 'tex') {
+ $currentstring='}';
+ }
return $currentstring;
}
-#-- tag
+#-- tag (end tag required)
sub start_noembed {
my ($target,$token) = @_;
my $currentstring = '';
@@ -2915,7 +2987,7 @@ sub end_noembed {
return $currentstring;
}
-#-- tag
+#-- tag (end tag required)
sub start_noframes {
my ($target,$token) = @_;
my $currentstring = '';
@@ -2934,7 +3006,7 @@ sub end_noframes {
return $currentstring;
}
-#-- tag
+#-- tag (end tag required)
sub start_nolayer {
my ($target,$token) = @_;
my $currentstring = '';
@@ -2953,7 +3025,7 @@ sub end_nolayer {
return $currentstring;
}
-#--