--- loncom/xml/lonxml.pm 2006/04/11 14:17:06 1.404
+++ loncom/xml/lonxml.pm 2006/09/26 04:26:15 1.419
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# XML Parser Module
#
-# $Id: lonxml.pm,v 1.404 2006/04/11 14:17:06 albertel Exp $
+# $Id: lonxml.pm,v 1.419 2006/09/26 04:26:15 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -40,7 +40,7 @@
package Apache::lonxml;
use vars
-qw(@pwd @outputstack $redirection $import @extlinks $metamode $evaluate %insertlist @namespace $errorcount $warningcount @htmlareafields);
+qw(@pwd @outputstack $redirection $import @extlinks $metamode $evaluate %insertlist @namespace $errorcount $warningcount);
use strict;
use HTML::LCParser();
use HTML::TreeBuilder();
@@ -123,9 +123,6 @@ $evaluate = 1;
# stores the list of active tag namespaces
@namespace=();
-# has the dynamic menu been updated to know about this resource
-$Apache::lonxml::registered=0;
-
# a pointer the the Apache request object
$Apache::lonxml::request='';
@@ -162,28 +159,6 @@ sub disable_LaTeX_substitutions {
$Apache::lonxml::substitute_LaTeX_symbols = 0;
}
-sub xmlbegin {
- my ($style)=@_;
- my $output='';
- @htmlareafields=();
- if ($env{'browser.mathml'}) {
- $output=''
- #.''."\n"
-# .'] >'
- .''
- .'';
- } else {
- $output='';
- }
- if ($style eq 'encode') {
- $output=&HTML::Entities::encode($output,'<>&"');
- }
- return $output;
-}
-
sub xmlend {
my ($target,$parser)=@_;
my $mode='xml';
@@ -204,9 +179,9 @@ sub xmlend {
$discussion.='\keephidden{ENDOFPROBLEM}\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\end{document}';
&Apache::lonxml::newparser($parser,\$discussion,'');
return '';
- } else {
- return $discussion.&Apache::loncommon::endbodytag();
}
+
+ return $discussion;
}
sub tokeninputfield {
@@ -304,18 +279,6 @@ sub printtokenheader {
}
}
-sub fontsettings {
- my $headerstring='';
- if (($env{'browser.os'} eq 'mac') && (!$env{'browser.mathml'})) {
- $headerstring.=
- '';
- } elsif (!$env{'browser.mathml'} && $env{'browser.unicode'}) {
- $headerstring.=
- '';
- }
- return $headerstring;
-}
-
sub printalltags {
my $temp;
foreach $temp (sort keys %Apache::lonxml::alltags) {
@@ -403,13 +366,14 @@ sub latex_special_symbols {
return $string;
}
if ($where eq 'header') {
- $string =~ s/(\\|_|\^)/ /g;
+ $string =~ s/\\/\$\\backslash\$/g; # \ -> $\backslash$ per LaTex line by line pg 10.
$string =~ s/(\$|%|\{|\})/\\$1/g;
- $string =~ s/_/ /g;
$string=&Apache::lonprintout::character_chart($string);
# any & or # leftover should be safe to just escape
$string=~s/([^\\])\&/$1\\\&/g;
$string=~s/([^\\])\#/$1\\\#/g;
+ $string =~ s/_/\\_/g; # _ -> \_
+ $string =~ s/\^/\\\^{}/g; # ^ -> \^{}
} else {
$string=~s/\\/\\ensuremath{\\backslash}/g;
$string=~s/\\\%|\%/\\\%/g;
@@ -637,8 +601,6 @@ sub callsub {
sub setup_globals {
my ($request,$target)=@_;
$Apache::lonxml::request=$request;
- $Apache::lonxml::registered = 0;
- @Apache::lonxml::htmlareafields=();
$errorcount=0;
$warningcount=0;
$Apache::lonxml::default_homework_loaded=0;
@@ -1187,19 +1149,23 @@ sub newparser {
}
sub parstring {
- my ($token) = @_;
- my $temp='';
- foreach (@{$token->[3]}) {
- unless ($_=~/\W/) {
- my $val=$token->[2]->{$_};
- $val =~ s/([\%\@\\\"\'])/\\$1/g;
- $val =~ s/(\$[^{a-zA-Z_])/\\$1/g;
- $val =~ s/(\$)$/\\$1/;
- #if ($val =~ m/^[\%\@]/) { $val="\\".$val; }
- $temp .= "my \$$_=\"$val\";";
- }
- }
- return $temp;
+ my ($token) = @_;
+ my (@vars,@values);
+ foreach my $attr (@{$token->[3]}) {
+ if ($attr!~/\W/) {
+ my $val=$token->[2]->{$attr};
+ $val =~ s/([\%\@\\\"\'])/\\$1/g;
+ $val =~ s/(\$[^\{a-zA-Z_])/\\$1/g;
+ $val =~ s/(\$)$/\\$1/;
+ #if ($val =~ m/^[\%\@]/) { $val="\\".$val; }
+ push(@vars,"\$$attr");
+ push(@values,"\"$val\"");
+ }
+ }
+ my $var_init =
+ (@vars) ? 'my ('.join(',',@vars).') = ('.join(',',@values).');'
+ : '';
+ return $var_init;
}
sub extlink {
@@ -1327,8 +1293,7 @@ sub inserteditinfo {
my $initialize='';
if ($filetype eq 'html') {
my $addbuttons=&Apache::lonhtmlcommon::htmlareaaddbuttons();
- $initialize=&Apache::lonhtmlcommon::htmlareaheaders().
- &Apache::lonhtmlcommon::spellheader();
+ $initialize=&Apache::lonhtmlcommon::spellheader();
if (!&Apache::lonhtmlcommon::htmlareablocked() &&
&Apache::lonhtmlcommon::htmlareabrowser()) {
$initialize.=(<',@_);
+ my $host=$Apache::lonnet::perlvar{'lonHostID'};
+ my $msg = join('
',(@_,"The error occurred on host $host"));
#notify author
&Apache::lonmsg::author_res_msg($env{'request.filename'},$msg);
#notify course
@@ -1663,14 +1628,14 @@ sub get_param {
}
if ( ! $args ) { return undef; }
if ( $case_insensitive ) {
- if ($args =~ s/(my \$)(\Q$param\E)(=\")/$1.lc($2).$3/ei) {
+ if ($args =~ s/(my (?:.*))(\$\Q$param\E[,\)])/$1.lc($2)/ei) {
return &Apache::run::run("{$args;".'return $'.$param.'}',
$safeeval); #'
} else {
return undef;
}
} else {
- if ( $args =~ /my \$\Q$param\E=\"/ ) {
+ if ( $args =~ /my .*\$\Q$param\E[,\)]/ ) {
return &Apache::run::run("{$args;".'return $'.$param.'}',
$safeeval); #'
} else {
@@ -1689,10 +1654,10 @@ sub get_param_var {
}
&Apache::lonxml::debug("Args are $args param is $param");
if ($case_insensitive) {
- if (! ($args=~s/(my \$)(\Q$param\E)(=\")/$1.lc($2).$3/ei)) {
+ if (! ($args=~s/(my (?:.*))(\$\Q$param\E[,\)])/$1.lc($2)/ei)) {
return undef;
}
- } elsif ( $args !~ /my \$\Q$param\E=\"/ ) { return undef; }
+ } elsif ( $args !~ /my .*\$\Q$param\E[,\)]/ ) { return undef; }
my $value=&Apache::run::run("{$args;".'return $'.$param.'}',$safeeval); #'
&Apache::lonxml::debug("first run is $value");
if ($value =~ /^[\$\@\%][a-zA-Z_]\w*$/) {