--- loncom/xml/lonxml.pm	2001/03/26 17:32:14	1.62
+++ loncom/xml/lonxml.pm	2001/05/04 15:29:32	1.68
@@ -5,6 +5,7 @@
 # 11/6 Gerd Kortemeyer
 # 6/1/1 Gerd Kortemeyer
 # 2/21,3/13 Guy
+# 3/29,5/4 Gerd Kortemeyer
 
 package Apache::lonxml; 
 use vars 
@@ -16,6 +17,38 @@ use Safe::Hole;
 use Opcode;
 use Apache::Constants qw(:common);
 
+
+sub xmlbegin {
+  my $output='';
+  if ($ENV{'browser.mathml'}) {
+      $output='<?xml version="1.0"?>'
+            .'<?xml-stylesheet type="text/css" href="/adm/MathML/mathml.css"?>'
+            .'<!DOCTYPE html SYSTEM "/adm/MathML/mathml.dtd" '
+            .'[<!ENTITY mathns "http://www.w3.org/1998/Math/MathML">]>'
+            .'<html xmlns:math="http://www.w3.org/1998/Math/MathML" ' 
+		.'xmlns="http://www.w3.org/TR/REC-html40">';
+  } else {
+      $output='<html>';
+  }
+  return $output;
+}
+
+sub xmlend {
+    return '</html>';
+}
+
+sub registerurl {
+  return (<<ENDSCRIPT);
+<script language="JavaScript">
+    if (window.location.pathname!="/res/adm/pages/menu.html") {
+	menu=window.open("","LONCAPAmenu");
+	menu.currentURL=window.location.pathname;
+        menu.currentStale=0;
+    }
+</script>
+ENDSCRIPT
+}
+
 sub register {
   my $space;
   my @taglist;
@@ -33,7 +66,6 @@ sub printalltags {
   }
 }
 use Apache::style;
-use Apache::lontexconvert;
 use Apache::run;
 use Apache::londefdef;
 use Apache::scripttag;
@@ -170,9 +202,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 = (); 
@@ -248,7 +286,14 @@ sub callsub {
       $currentstring = &Apache::edit::tag_start($target,$token,$parstack,$parser,
 						$safeeval,$style);
     }
-    if (my $space=$Apache::lonxml::alltags{$token->[1]}) {
+    my $tag=$token->[1];
+    my $space=$Apache::lonxml::alltags{$tag};
+    if (!$space) {
+	$tag=~tr/A-Z/a-z/;
+	$sub=~tr/A-Z/a-z/;
+	$space=$Apache::lonxml::alltags{$tag}
+    }
+    if ($space) {
       &Apache::lonxml::debug("Calling sub $sub in $space $metamode<br />\n");
       $sub1="$space\:\:$sub";
       $Apache::lonxml::curdepth=join('_',@Apache::lonxml::depthcounter);
@@ -407,17 +452,65 @@ 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)/\<font color=\"red\"\>$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)/\<a href=\"$linkurl\"\>$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)/\<a name=\"$anchorname\"\>$1\<\/a\>/s;
+        $result.=(<<"ENDSCRIPT");
+<script>
+    document.location.hash='$anchorname';
+</script>
+ENDSCRIPT
+    }
+    return $result;
+}
+
 sub handler {
   my $request=shift;
-  
+
   my $target='web';
+
   $Apache::lonxml::debug=0;
+
   if ($ENV{'browser.mathml'}) {
     $request->content_type('text/xml');
   } else {
     $request->content_type('text/html');
   }
-
+  
 #  $request->print(<<ENDHEADER);
 #<html>
 #<head>
@@ -427,12 +520,9 @@ 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('<body bgcolor="#FFFFFF">'."\n");
 
   my $file=&Apache::lonnet::filelocation("",$request->uri);
   my %mystyle;
@@ -444,16 +534,13 @@ sub handler {
   } else {
     $result = &Apache::lonxml::xmlparse($target,$filecontents,'',%mystyle);
   }
-  $request->print($result);
 
+  $request->print($result);
 
-  $request->print('</body>');
-  $request->print(&Apache::lontexconvert::footer());
   writeallows($request->uri);
   return OK;
 }
  
-$Apache::lonxml::debug=0;
 sub debug {
   if ($Apache::lonxml::debug eq 1) {
     print "DEBUG:".$_[0]."<br />\n";
@@ -490,3 +577,5 @@ sub warning {
 
 1;
 __END__
+
+