--- loncom/xml/lonxml.pm 2001/03/26 15:42:05 1.61
+++ loncom/xml/lonxml.pm 2001/03/29 20:47:06 1.66
@@ -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
@@ -249,17 +250,19 @@ sub callsub {
$safeeval,$style);
}
if (my $space=$Apache::lonxml::alltags{$token->[1]}) {
- #&Apache::lonxml::debug("Calling sub $sub in $space
\n");
+# &Apache::lonxml::debug("Calling sub $sub in $space $metamode
\n");
$sub1="$space\:\:$sub";
$Apache::lonxml::curdepth=join('_',@Apache::lonxml::depthcounter);
$currentstring .= &$sub1($target,$token,$parstack,$parser,
$safeeval,$style);
} else {
- #&Apache::lonxml::debug("NOT Calling sub $sub in $space
\n");
- if (defined($token->[4]) && ($metamode < '1')) {
- $currentstring .= $token->[4];
- } else {
- $currentstring .= $token->[2];
+# &Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode
\n");
+ if ($metamode <1) {
+ if (defined($token->[4]) && ($metamode < 1)) {
+ $currentstring .= $token->[4];
+ } else {
+ $currentstring .= $token->[2];
+ }
}
}
if ($target eq 'edit' && $token->[0] eq 'E') {
@@ -405,6 +408,52 @@ 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;
@@ -415,7 +464,7 @@ sub handler {
} else {
$request->content_type('text/html');
}
-
+
# $request->print(<
#
@@ -425,12 +474,13 @@ 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 'web') {
+ $request->print(&Apache::lontexconvert::header());
+ $request->print(''."\n");
+ }
my $file=&Apache::lonnet::filelocation("",$request->uri);
my %mystyle;
@@ -442,11 +492,22 @@ sub handler {
} else {
$result = &Apache::lonxml::xmlparse($target,$filecontents,'',%mystyle);
}
+#
+# Afterburner
+#
+ if ($ENV{'QUERY_STRING'}) {
+ $result=&afterburn($result);
+ }
$request->print($result);
- $request->print('');
- $request->print(&Apache::lontexconvert::footer());
+ if ($target eq 'tex') {
+# $request->print('\end{document}'."\n");
+ } elsif ($target eq 'web') {
+ $request->print('');
+ $request->print(&Apache::lontexconvert::footer());
+ }
+
writeallows($request->uri);
return OK;
}