--- loncom/xml/lonxml.pm 2002/04/10 14:46:30 1.166
+++ loncom/xml/lonxml.pm 2002/05/29 16:22:09 1.175
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# XML Parser Module
#
-# $Id: lonxml.pm,v 1.166 2002/04/10 14:46:30 matthew Exp $
+# $Id: lonxml.pm,v 1.175 2002/05/29 16:22:09 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -60,9 +60,9 @@
package Apache::lonxml;
use vars
-qw(@pwd @outputstack $redirection $import @extlinks $metamode $evaluate %insertlist @namespace);
+qw(@pwd @outputstack $redirection $import @extlinks $metamode $evaluate %insertlist @namespace $prevent_entity_encode);
use strict;
-use HTML::TokeParser();
+use HTML::LCParser();
use HTML::TreeBuilder();
use HTML::Entities();
use Safe();
@@ -129,9 +129,15 @@ $evaluate = 1;
# stores the list of active tag namespaces
@namespace=();
+# if 0 all high ASCII characters will be encoded into HTML Entities
+$prevent_entity_encode=0;
+
# 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='';
+
sub xmlbegin {
my $output='';
if ($ENV{'browser.mathml'}) {
@@ -326,7 +332,7 @@ sub registerurl {
my $target = shift;
my $result = '';
if (($ENV{'request.publicaccess'}) ||
- ($ENV{'REQUEST_URI'} eq '/res/adm/pages/menu.html')) {
+ (!&Apache::lonnet::is_on_map($ENV{'REQUEST_URI'}))) {
return
'';
}
@@ -334,28 +340,23 @@ sub registerurl {
$Apache::lonxml::registered=1;
my $nothing='';
if ($ENV{'browser.type'} eq 'explorer') { $nothing='javascript:void(0);'; }
+ my $timesync='menu.clock.setTime(1000*'.time.');';
if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) {
my $hwkadd='';
- if ($ENV{'REQUEST_URI'}=~/\.(problem|exam|quiz|assess|survey|form)$/) {
+ if ($ENV{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form)$/) {
if (&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'})) {
$hwkadd.=(< -1 ) {
- if ($Apache::lonxml::redirection) {
- $Apache::lonxml::outputstack['-1'] .=
- &Apache::run::evaluate($result,$safeeval,$$parstack['-1']);
- } else {
- $finaloutput .= &Apache::run::evaluate($result,$safeeval,
- $$parstack['-1']);
- }
+ $result=&Apache::run::evaluate($result,$safeeval,$$parstack[-1]);
} else {
- $finaloutput .= &Apache::run::evaluate($result,$safeeval,'');
+ $result= &Apache::run::evaluate($result,$safeeval,'');
}
- $result = '';
}
+ # Encode any high ASCII characters
+ if (!$Apache::lonxml::prevent_entity_encode) {
+ $result=&HTML::Entities::encode($result,"\200-\377");
+ }
+ if ($Apache::lonxml::redirection) {
+ $Apache::lonxml::outputstack['-1'] .= $result;
+ } else {
+ $finaloutput.=$result;
+ }
+ $result = '';
+
if ($token->[0] eq 'E') {
&end_tag($stack,$parstack,$token);
}
@@ -654,6 +664,7 @@ sub inner_xmlparse {
# $finaloutput.=&endredirection;
# }
+
if (($ENV{'QUERY_STRING'}) && ($target eq 'web')) {
$finaloutput=&afterburn($finaloutput);
}
@@ -796,7 +807,8 @@ sub callsub {
}
sub setup_globals {
- my ($target)=@_;
+ my ($request,$target)=@_;
+ $Apache::lonxml::request=$request;
$Apache::lonxml::registered = 0;
@Apache::lonxml::pwd=();
@Apache::lonxml::extlinks=();
@@ -1003,9 +1015,8 @@ sub get_all_text {
sub newparser {
my ($parser,$contentref,$dir) = @_;
- push (@$parser,HTML::TokeParser->new($contentref));
+ push (@$parser,HTML::LCParser->new($contentref));
$$parser['-1']->xml_mode('1');
-# $$parser['-1']->attr_encoded('1');
if ( $dir eq '' ) {
push (@Apache::lonxml::pwd, $Apache::lonxml::pwd[$#Apache::lonxml::pwd]);
} else {
@@ -1127,9 +1138,9 @@ BUTTONS
ENDFOOTER
@@ -1218,7 +1229,8 @@ ENDNOTFOUND
}
}
if (!$ENV{'form.editmode'} || $ENV{'form.viewmode'}) {
- $result = &Apache::lonxml::xmlparse($target,$filecontents,'',%mystyle);
+ $result = &Apache::lonxml::xmlparse($request,$target,$filecontents,
+ '',%mystyle);
}
}
@@ -1249,7 +1261,7 @@ sub debug {
sub error {
if (($Apache::lonxml::debug eq 1) || ($ENV{'request.state'} eq 'construct') ) {
# If printing in construction space, put the error inside
- print "ERROR:".join("\n",@_)."
\n";
+ print "ERROR:".join("\n",@_)."\n";
} else {
print "An Error occured while processing this resource. The instructor has been notified.
";
#notify author