--- loncom/xml/lonxml.pm	2004/07/12 16:25:51	1.328
+++ loncom/xml/lonxml.pm	2004/08/10 18:25:53	1.335
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # XML Parser Module 
 #
-# $Id: lonxml.pm,v 1.328 2004/07/12 16:25:51 albertel Exp $
+# $Id: lonxml.pm,v 1.335 2004/08/10 18:25:53 sakharuk Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -165,13 +165,21 @@ sub xmlbegin {
 }
 
 sub xmlend {
+    my ($target,$parser)=@_;
     my $mode='xml';
     my $status='OPEN';
     if ($Apache::lonhomework::parsing_a_problem) {
 	$mode='problem';
 	$status=$Apache::inputtags::status[-1]; 
     }
-    return &Apache::lonfeedback::list_discussion($mode,$status).'</html>';
+    my $discussion=&Apache::lonfeedback::list_discussion($mode,$status);    
+    if ($target eq 'tex') {
+	$discussion.='<tex>\keephidden{ENDOFPROBLEM}\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\end{document}</tex>';
+	&Apache::lonxml::newparser($parser,\$discussion,'');
+	return '';
+    } else {
+	return $discussion.'</html>';
+    }
 }
 
 sub tokeninputfield {
@@ -389,9 +397,10 @@ sub latex_special_symbols {
     } else {
 	$string=~s/\\/\\ensuremath{\\backslash}/g;
 	$string=~s/([^\\]|^)\%/$1\\\%/g;
-	$string=~s/\b_{2,}\b/ \\makebox\[1 cm\]\[b\]{\\hrulefill}/g;
-	$string=~s/([^\\]|^)(\$|_)/$1\\$2/g;
+	$string=~s/([^\\]|^)\$/$1\\\$/g;
+	$string=~s/([^\\])\_/$1\\_/g;
 	$string=~s/\$\$/\$\\\$/g;
+	$string=~s/\_\_/\_\\\_/g;
 	$string=~s/\#\#/\#\\\#/g;
         $string=~s/([^\\]|^)(\~|\^)/$1\\$2\\strut /g;
 	$string=~s/(>|<)/\\ensuremath\{$1\}/g; #more or less
@@ -399,6 +408,7 @@ sub latex_special_symbols {
 	# any & or # leftover should be safe to just escape
         $string=~s/([^\\]|^)\&/$1\\\&/g;
         $string=~s/([^\\]|^)\#/$1\\\#/g;
+        $string=~s/\|/\$\\mid\$/g;
 #single { or } How to escape?
     }
     return $string;
@@ -745,6 +755,7 @@ sub init_safespace {
 
 #need to inspect this class of ops
 # $safeeval->deny(":base_orig");
+  $safeeval->permit("require");
   $safeinit .= ';$external::target="'.$target.'";';
   my $rndseed;
   my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser();
@@ -753,27 +764,6 @@ sub init_safespace {
   &Apache::lonxml::debug("Setting rndseed to $rndseed");
   &Apache::run::run($safeinit,$safeeval);
 
-  my $subroutine=<<'EVALUATESUB';
-sub __LC_INTERNAL_EVALUATE__ {
-    my ($__LC__a,$__LC__b,$__LC__c)=@_;
-    my $__LC__prefix;
-    while(1){
-	{ 
-	    use strict;
-	    no strict "vars";
-	    if (eval(defined(eval($__LC__a.$__LC__b)))) {
-		return $__LC__prefix.eval($__LC__a.$__LC__b.$__LC__c);
-	    }
-	}
-	$__LC__prefix.=substr($__LC__a,0,1,"");
-	if ($__LC__a!~/^(\$|&|\#)/) { last; }
-    }
-    return $__LC__prefix.$__LC__a.$__LC__b.$__LC__c;
-}
-EVALUATESUB
-    $safeeval->permit("require");
-    $safeeval->reval($subroutine);
-    $safeeval->deny("require");
 }
 
 sub default_homework_load {
@@ -1145,7 +1135,8 @@ sub inserteditinfo {
       my $initialize='';
       if ($filetype eq 'html') {
 	  my $addbuttons=&Apache::lonhtmlcommon::htmlareaaddbuttons();
-	  $initialize=&Apache::lonhtmlcommon::htmlareaheaders().(<<FULLPAGE);
+	  $initialize=&Apache::lonhtmlcommon::htmlareaheaders().
+	      &Apache::lonhtmlcommon::spellheader().(<<FULLPAGE);
 <script type="text/javascript">
 $addbuttons
 
@@ -1175,11 +1166,12 @@ $cleanbut
 <input type="submit" name="savethisfile" accesskey="s"  value="$lt{'st'}" />
 <input type="submit" name="viewmode" accesskey="v" value="$lt{'vi'}" />
 BUTTONS
+      $buttons.=&Apache::lonhtmlcommon::spelllink('xmledit','filecont');
       my $editfooter=(<<ENDFOOTER);
 $initialize
 <hr />
 <a name="editsection" />
-<form method="post">
+<form method="post" name="xmledit">
 $xml_help
 <input type="hidden" name="editmode" value="$lt{'ed'}" />
 $buttons<br />