--- loncom/xml/lonxml.pm	2001/05/04 15:29:32	1.68
+++ loncom/xml/lonxml.pm	2001/05/04 21:17:24	1.72
@@ -9,13 +9,52 @@
 
 package Apache::lonxml; 
 use vars 
-qw(@pwd @outputstack $redirection $import @extlinks $metamode);
+qw(@pwd @outputstack $redirection $import @extlinks $metamode $evaluate);
 use strict;
 use HTML::TokeParser;
 use Safe;
 use Safe::Hole;
 use Opcode;
+
+sub register {
+  my $space;
+  my @taglist;
+  my $temptag;
+  ($space,@taglist) = @_;
+  foreach $temptag (@taglist) {
+    $Apache::lonxml::alltags{$temptag}=$space;
+  }
+}
+
 use Apache::Constants qw(:common);
+use Apache::lontexconvert;
+use Apache::style;
+use Apache::run;
+use Apache::londefdef;
+use Apache::scripttag;
+use Apache::edit;
+#==================================================   Main subroutine: xmlparse  
+#debugging control, to turn on debugging modify the correct handler
+$Apache::lonxml::debug=0;
+
+#path to the directory containing the file currently being processed
+@pwd=();
+
+#these two are used for capturing a subset of the output for later processing,
+#don't touch them directly use &startredirection and &endredirection
+@outputstack = ();
+$redirection = 0;
+
+#controls wheter the <import> tag actually does
+$import = 1;
+@extlinks=();
+
+# meta mode is a bit weird only some output is to be turned off
+#<output> tag turns metamode off (defined in londefdef.pm)
+$metamode = 0;
+
+# turns on and of run::evaluate actually derefencing var refs
+$evaluate = 1;
 
 
 sub xmlbegin {
@@ -37,26 +76,44 @@ sub xmlend {
     return '</html>';
 }
 
+sub fontsettings() {
+    my $headerstring='';
+    if (($ENV{'browser.os'} eq 'mac') && (!$ENV{'browser.mathml'})) { 
+         $headerstring.=
+             '<meta Content-Type="text/html; charset=x-mac-roman">';
+    }
+    return $headerstring;
+}
+
 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;
+// BEGIN LON-CAPA Internal
+    function LONCAPAreg() {
+       if (window.location.pathname!="/res/adm/pages/menu.html") {
+	  menu=window.open("","LONCAPAmenu");
+	  menu.currentURL=window.location.pathname;
+          menu.currentStale=0;
+       }
+    }
+  
+    function LONCAPAstale() {
+       if (window.location.pathname!="/res/adm/pages/menu.html") {
+	  menu=window.open("","LONCAPAmenu");
+          menu.currentStale=1;
+       }
     }
+// END LON-CAPA Internal
 </script>
 ENDSCRIPT
 }
 
-sub register {
-  my $space;
-  my @taglist;
-  my $temptag;
-  ($space,@taglist) = @_;
-  foreach $temptag (@taglist) {
-    $Apache::lonxml::alltags{$temptag}=$space;
-  }
+sub loadevents() {
+    return 'LONCAPAreg();';
+}
+
+sub unloadevents() {
+    return 'LONCAPAstale();';
 }
 
 sub printalltags {
@@ -65,35 +122,29 @@ sub printalltags {
     &Apache::lonxml::debug("$temp -- $Apache::lonxml::alltags{$temp}");
   }
 }
-use Apache::style;
-use Apache::run;
-use Apache::londefdef;
-use Apache::scripttag;
-use Apache::edit;
-#==================================================   Main subroutine: xmlparse  
-@pwd=();
-@outputstack = ();
-$redirection = 0;
-$import = 1;
-@extlinks=();
-$metamode = 0;
 
 sub xmlparse {
 
  my ($target,$content_file_string,$safeinit,%style_for_target) = @_;
  if ($target eq 'meta') {
-   # meta mode is a bit weird only some output is to be turned off
-   #<output> tag turns metamode off (defined in londefdef.pm)
    $Apache::lonxml::redirection = 0;
    $Apache::lonxml::metamode = 1;
+   $Apache::lonxml::evaluate = 1;
    $Apache::lonxml::import = 0;
  } elsif ($target eq 'grade') {
    &startredirection;
    $Apache::lonxml::metamode = 0;
+   $Apache::lonxml::evaluate = 1;
    $Apache::lonxml::import = 1;
- } else {
+ } elsif ($target eq 'modified') {
+   $Apache::lonxml::redirection = 0;
    $Apache::lonxml::metamode = 0;
+   $Apache::lonxml::evaluate = 0;
+   $Apache::lonxml::import = 0;
+ } else {
    $Apache::lonxml::redirection = 0;
+   $Apache::lonxml::metamode = 0;
+   $Apache::lonxml::evaluate = 1;
    $Apache::lonxml::import = 1;
  }
  #&printalltags();
@@ -279,6 +330,7 @@ sub recurse {
 sub callsub {
   my ($sub,$target,$token,$parstack,$parser,$safeeval,$style)=@_;
   my $currentstring='';
+  my $nodefault;
   {
     my $sub1;
     no strict 'refs';
@@ -294,24 +346,36 @@ sub callsub {
 	$space=$Apache::lonxml::alltags{$tag}
     }
     if ($space) {
-      &Apache::lonxml::debug("Calling sub $sub in $space $metamode<br />\n");
+      #&Apache::lonxml::debug("Calling sub $sub in $space $metamode<br />\n");
       $sub1="$space\:\:$sub";
       $Apache::lonxml::curdepth=join('_',@Apache::lonxml::depthcounter);
-      $currentstring .= &$sub1($target,$token,$parstack,$parser,
-			     $safeeval,$style);
+      ($currentstring,$nodefault) = &$sub1($target,$token,$parstack,$parser,
+					   $safeeval,$style);
     } else {
-      &Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode<br />\n");
+      #&Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode<br />\n");
       if ($metamode <1) {
 	if (defined($token->[4]) && ($metamode < 1)) {
-	  $currentstring .= $token->[4];
+	  $currentstring = $token->[4];
 	} else {
-	  $currentstring .= $token->[2];
+	  $currentstring = $token->[2];
 	}
       }
     }
-    if ($target eq 'edit' && $token->[0] eq 'E') {
-      $currentstring .= &Apache::edit::tag_end($target,$token,$parstack,$parser,
-						$safeeval,$style);
+    &Apache::lonxml::debug("nodefalt:$nodefault:");
+    if ($currentstring eq '' && $nodefault eq '') {
+      if ($target eq 'edit') {
+	if ($token->[0] eq 'S') {
+	  $currentstring = &Apache::edit::tag_start($token,$target);
+	} elsif ($token->[0] eq 'E') {
+	  $currentstring = &Apache::edit::tag_end($token,$target);
+	}
+      } elsif ($target eq 'modified') {
+	if ($token->[0] eq 'S') {
+	  $currentstring = $token->[4];
+	} else {
+	  $currentstring = $token->[2];
+	}
+      }
     }
     use strict 'refs';
   }
@@ -325,7 +389,7 @@ sub startredirection {
 
 sub endredirection {
   if (!$Apache::lonxml::redirection) {
-    &Apache::lonxml::error("Endredirection was called, before a startredirection, perhaps you have unbalanced tags. Some debuggin information:".join ":",caller);
+    &Apache::lonxml::error("Endredirection was called, before a startredirection, perhaps you have unbalanced tags. Some debuging information:".join ":",caller);
     return '';
   }
   $Apache::lonxml::redirection--;
@@ -455,7 +519,6 @@ sub writeallows {
 #
 # Afterburner handles anchors, highlights and links
 #
-
 sub afterburn {
     my $result=shift;
     map {
@@ -570,9 +633,9 @@ sub error {
 }
 
 sub warning {
-  if ($Apache::lonxml::debug eq 1) {
+  #if ($Apache::lonxml::debug eq 1) {
     print "<b>W</b>ARNING<b>:</b>".$_[0]."<br />\n";
-  }
+ # }
 }
 
 1;