--- loncom/xml/lonxml.pm 2001/03/27 16:57:20 1.63
+++ loncom/xml/lonxml.pm 2001/03/30 01:42:23 1.67
@@ -5,6 +5,7 @@
# 11/6 Gerd Kortemeyer
# 6/1/1 Gerd Kortemeyer
# 2/21,3/13 Guy
+# 3/29 Gerd Kortemeyer
package Apache::lonxml;
use vars
@@ -29,7 +30,7 @@ sub register {
sub printalltags {
my $temp;
foreach $temp (sort keys %Apache::lonxml::alltags) {
-# &Apache::lonxml::debug("$temp -- $Apache::lonxml::alltags{$temp}");
+ &Apache::lonxml::debug("$temp -- $Apache::lonxml::alltags{$temp}");
}
}
use Apache::style;
@@ -106,9 +107,7 @@ sub xmlparse {
# add parameters list to another stack
push (@parstack,&parstring($token));
&increasedepth($token);
-# &Apache::lonxml::debug("Checking for $token->[1] style");
if (exists $style_for_target{$token->[1]}) {
-# &Apache::lonxml::debug("Found $token->[1] style");
if ($Apache::lonxml::redirection) {
$Apache::lonxml::outputstack['-1'] .=
&recurse($style_for_target{$token->[1]},$target,$safeeval,
@@ -118,7 +117,6 @@ sub xmlparse {
$safeeval,\%style_for_target,@parstack);
}
} else {
-# &Apache::lonxml::debug("No style for for $token->[1]");
$result = &callsub("start_$token->[1]", $target, $token,\@parstack,
\@pars, $safeeval, \%style_for_target);
}
@@ -173,9 +171,15 @@ sub xmlparse {
# if ($target eq 'meta') {
# $finaloutput.=&endredirection;
# }
+
+ if (($ENV{'QUERY_STRING'}) && ($target eq 'web')) {
+ $finaloutput=&afterburn($finaloutput);
+ }
+
return $finaloutput;
}
+
sub recurse {
my @innerstack = ();
@@ -304,7 +308,7 @@ sub increasedepth {
$Apache::lonxml::olddepth=$Apache::lonxml::depth;
}
my $curdepth=join('_',@Apache::lonxml::depthcounter);
-# &Apache::lonxml::debug("s $Apache::lonxml::depth : $Apache::lonxml::olddepth : $curdepth : $token->[1]\n");
+ &Apache::lonxml::debug("s $Apache::lonxml::depth : $Apache::lonxml::olddepth : $curdepth : $token->[1]\n");
#print "
s $Apache::lonxml::depth : $Apache::lonxml::olddepth : $curdepth : $token->[1]\n";
}
@@ -320,7 +324,7 @@ sub decreasedepth {
$Apache::lonxml::depth='-1';
}
my $curdepth=join('_',@Apache::lonxml::depthcounter);
-# &Apache::lonxml::debug("e $Apache::lonxml::depth : $Apache::lonxml::olddepth : $token->[1] : $curdepth\n");
+ &Apache::lonxml::debug("e $Apache::lonxml::depth : $Apache::lonxml::olddepth : $token->[1] : $curdepth\n");
#print "
e $Apache::lonxml::depth : $Apache::lonxml::olddepth : $token->[1] : $curdepth\n";
}
@@ -410,17 +414,63 @@ sub writeallows {
&Apache::lonnet::appenv(%httpref);
}
+#
+# Afterburner handles anchors, highlights and links
+#
+
+sub afterburn {
+ my $result=shift;
+ map {
+ my ($name, $value) = split(/=/,$_);
+ $value =~ tr/+/ /;
+ $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
+ if (($name eq 'highlight')||($name eq 'anchor')||($name eq 'link')) {
+ unless ($ENV{'form.'.$name}) {
+ $ENV{'form.'.$name}=$value;
+ }
+ }
+ } (split(/&/,$ENV{'QUERY_STRING'}));
+ if ($ENV{'form.highlight'}) {
+ map {
+ my $anchorname=$_;
+ my $matchthis=$anchorname;
+ $matchthis=~s/\_+/\\s\+/g;
+ $result=~s/($matchthis)/\$1\<\/font\>/gs;
+ } split(/\,/,$ENV{'form.highlight'});
+ }
+ if ($ENV{'form.link'}) {
+ map {
+ my ($anchorname,$linkurl)=split(/\>/,$_);
+ my $matchthis=$anchorname;
+ $matchthis=~s/\_+/\\s\+/g;
+ $result=~s/($matchthis)/\$1\<\/a\>/gs;
+ } split(/\,/,$ENV{'form.link'});
+ }
+ if ($ENV{'form.anchor'}) {
+ my $anchorname=$ENV{'form.anchor'};
+ my $matchthis=$anchorname;
+ $matchthis=~s/\_+/\\s\+/g;
+ $result=~s/($matchthis)/\$1\<\/a\>/s;
+ $result.=(<<"ENDSCRIPT");
+
+ENDSCRIPT
+ }
+ return $result;
+}
+
sub handler {
my $request=shift;
- my $target='tex';
- $Apache::lonxml::debug=1;
+ my $target='web';
+ $Apache::lonxml::debug=0;
if ($ENV{'browser.mathml'}) {
$request->content_type('text/xml');
} else {
$request->content_type('text/html');
}
-
+
# $request->print(<
#
@@ -430,20 +480,12 @@ sub handler {
#ENDHEADER
# &Apache::lonhomework::send_header($request);
$request->send_http_header;
-
+
return OK if $request->header_only;
-## $request->print(&Apache::lontexconvert::header());
-
-## $request->print(''."\n");
-
- if ($target eq 'tex') {
-
-
-
- } else {
- $request->print(&Apache::lontexconvert::header());
- $request->print(''."\n");
+ if ($target eq 'web') {
+ $request->print(&Apache::lontexconvert::header());
+ $request->print(''."\n");
}
my $file=&Apache::lonnet::filelocation("",$request->uri);
@@ -456,17 +498,16 @@ sub handler {
} else {
$result = &Apache::lonxml::xmlparse($target,$filecontents,'',%mystyle);
}
- $request->print($result);
-
-## $request->print('');
if ($target eq 'tex') {
# $request->print('\end{document}'."\n");
- } else {
+ } elsif ($target eq 'web') {
$request->print('');
$request->print(&Apache::lontexconvert::footer());
}
-## $request->print(&Apache::lontexconvert::footer());
+
+ $request->print($result);
+
writeallows($request->uri);
return OK;
}