--- loncom/xml/lonxml.pm 2004/08/29 08:14:41 1.338
+++ loncom/xml/lonxml.pm 2004/10/12 22:55:22 1.344
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# XML Parser Module
#
-# $Id: lonxml.pm,v 1.338 2004/08/29 08:14:41 albertel Exp $
+# $Id: lonxml.pm,v 1.344 2004/10/12 22:55:22 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -51,7 +51,7 @@ use Math::Cephes();
use Math::Random();
use Opcode();
use POSIX qw(strftime);
-
+use Time::HiRes qw( gettimeofday tv_interval );
sub register {
my ($space,@taglist) = @_;
@@ -159,7 +159,8 @@ sub xmlbegin {
.'';
} else {
- $output='';
+ $output='
+';
}
return $output;
}
@@ -287,7 +288,7 @@ sub fontsettings() {
my $headerstring='';
if (($ENV{'browser.os'} eq 'mac') && (!$ENV{'browser.mathml'})) {
$headerstring.=
- '';
+ '';
} elsif (!$ENV{'browser.mathml'} && $ENV{'browser.unicode'}) {
$headerstring.=
'';
@@ -815,6 +816,8 @@ sub initdepth {
$Apache::lonxml::olddepth=-1;
}
+my @timers;
+my $lasttime;
sub increasedepth {
my ($token) = @_;
$Apache::lonxml::depth++;
@@ -822,8 +825,15 @@ sub increasedepth {
if ($Apache::lonxml::depthcounter[$Apache::lonxml::depth]==1) {
$Apache::lonxml::olddepth=$Apache::lonxml::depth;
}
+ my $time;
+ if ($Apache::lonxml::debug eq "1") {
+ push(@timers,[&gettimeofday()]);
+ $time=&tv_interval($lasttime);
+ $lasttime=[&gettimeofday()];
+ }
+ my $spacing=' 'x($Apache::lonxml::depth-1);
my $curdepth=join('_',@Apache::lonxml::depthcounter);
- &Apache::lonxml::debug("s $Apache::lonxml::depth : $Apache::lonxml::olddepth : $curdepth : $token->[1]\n");
+ &Apache::lonxml::debug("s$spacing$Apache::lonxml::depth : $Apache::lonxml::olddepth : $curdepth : $token->[1] : $time : \n");
#print "
s $Apache::lonxml::depth : $Apache::lonxml::olddepth : $curdepth : $token->[1]\n";
}
@@ -838,8 +848,15 @@ sub decreasedepth {
&Apache::lonxml::warning(&mt("Missing tags, unable to properly run file."));
$Apache::lonxml::depth='-1';
}
+ my ($timer,$time);
+ if ($Apache::lonxml::debug eq "1") {
+ $timer=pop(@timers);
+ $time=&tv_interval($lasttime);
+ $lasttime=[&gettimeofday()];
+ }
+ my $spacing=' 'x$Apache::lonxml::depth;
my $curdepth=join('_',@Apache::lonxml::depthcounter);
- &Apache::lonxml::debug("e $Apache::lonxml::depth : $Apache::lonxml::olddepth : $token->[1] : $curdepth\n");
+ &Apache::lonxml::debug("e$spacing$Apache::lonxml::depth : $Apache::lonxml::olddepth : $curdepth : $token->[1] : $time : ".&tv_interval($timer)."\n");
#print "
e $Apache::lonxml::depth : $Apache::lonxml::olddepth : $token->[1] : $curdepth\n";
}
@@ -1012,6 +1029,7 @@ sub parstring {
unless ($_=~/\W/) {
my $val=$token->[2]->{$_};
$val =~ s/([\%\@\\\"\'])/\\$1/g;
+ $val =~ s/(\$[^{a-zA-Z_])/\\$1/g;
#if ($val =~ m/^[\%\@]/) { $val="\\".$val; }
$temp .= "my \$$_=\"$val\";";
}
@@ -1271,7 +1289,7 @@ $bodytag
ENDNOTFOUND
- $filecontents='';
+ $filecontents='';
if ($ENV{'request.state'} ne 'published') {
if ($filetype eq 'sty') {
$filecontents=&createnewsty();
@@ -1282,6 +1300,10 @@ ENDNOTFOUND
}
} else {
unless ($ENV{'request.state'} eq 'published') {
+ if ($filecontents=~/BEGIN LON-CAPA Internal/) {
+ &Apache::lonxml::error(&mt('This file appears to be a rendering of a Lon-CAPA resource. If this is correct, this resource will act very oddly and incorrectly.'));
+ }
+
if ($ENV{'form.attemptclean'}) {
$filecontents=&htmlclean($filecontents,1);
}
@@ -1461,7 +1483,7 @@ sub get_param_var {
} 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 =~ /^[\$\@\%]\w+$/) {
+ if ($value =~ /^[\$\@\%][a-zA-Z_]\w*$/) {
&Apache::lonxml::debug("doing second");
my @result=&Apache::run::run("return $value",$safeeval,1);
if (!defined($result[0])) {