--- loncom/xml/lonxml.pm	2002/09/04 04:55:13	1.191
+++ loncom/xml/lonxml.pm	2002/10/08 17:09:09	1.199
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # XML Parser Module 
 #
-# $Id: lonxml.pm,v 1.191 2002/09/04 04:55:13 albertel Exp $
+# $Id: lonxml.pm,v 1.199 2002/10/08 17:09:09 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -99,6 +99,7 @@ use Apache::edit();
 use Apache::lonnet();
 use Apache::File();
 use Apache::loncommon();
+use Apache::lonfeedback();
 
 #==================================================   Main subroutine: xmlparse  
 #debugging control, to turn on debugging modify the correct handler
@@ -154,6 +155,7 @@ sub xmlbegin {
 }
 
 sub xmlend {
+    my ($discussiononly,$symb)=@_;
     my $discussion='';
     if ($ENV{'request.course.id'}) {
        my $crs='/'.$ENV{'request.course.id'};
@@ -162,14 +164,18 @@ sub xmlend {
        }                 
        $crs=~s/\_/\//g;
        my $seeid=&Apache::lonnet::allowed('rin',$crs);
-       my $symb=&Apache::lonnet::symbread();
+       unless ($symb) {
+           $symb=&Apache::lonnet::symbread();
+       }
        if ($symb) {
           my %contrib=&Apache::lonnet::restore($symb,$ENV{'request.course.id'},
                      $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
 		     $ENV{'course.'.$ENV{'request.course.id'}.'.num'});
           if ($contrib{'version'}) {
-              $discussion.=
-                  '<address><hr /><h2>Course Discussion of Resource</h2>';
+              unless ($discussiononly) {
+                 $discussion.=
+                  '<address><hr />';
+	     }
               my $idx;
               for ($idx=1;$idx<=$contrib{'version'};$idx++) {
 		my $hidden=($contrib{'hidden'}=~/\.$idx\./);
@@ -181,14 +187,24 @@ sub xmlend {
                   if ($hidden) {
 		      $message='<font color="#888888">'.$message.'</font>';
                   }
+                  my $screenname=&Apache::loncommon::screenname(
+                               $contrib{$idx.':sendername'},
+			       $contrib{$idx.':senderdomain'});
+                  my $plainname=&Apache::loncommon::nickname(
+                               $contrib{$idx.':sendername'},
+			       $contrib{$idx.':senderdomain'});
+
                   my $sender='Anonymous';
                   if ((!$contrib{$idx.':anonymous'}) || ($seeid)) {
-                      $sender=$contrib{$idx.':plainname'}.' ('.
+                      $sender=&Apache::loncommon::aboutmewrapper(
+                               $plainname,
+                               $contrib{$idx.':sendername'},
+                               $contrib{$idx.':senderdomain'}).' ('.
                               $contrib{$idx.':sendername'}.' at '.
 		      $contrib{$idx.':senderdomain'}.')';
                       if ($contrib{$idx.':anonymous'}) {
 			  $sender.=' [anonymous] '.
-                                     $contrib{$idx.':screenname'};
+                                     $screenname;
                       }
                       if ($seeid) {
 			  if ($hidden) {
@@ -200,8 +216,8 @@ sub xmlend {
 			  }
                       }                   
                   } else {
-                      if ($contrib{$idx.':screenname'}) {
-			  $sender='<i>'.$contrib{$idx.':screenname'}.'</i>';
+                      if ($screenname) {
+			  $sender='<i>'.$screenname.'</i>';
                       }
                   }
 		  $discussion.='<p><b>'.$sender.'</b> ('.
@@ -211,11 +227,28 @@ sub xmlend {
 	        }
                } 
               }
-              $discussion.='</address>';
+              unless ($discussiononly) {
+                 $discussion.='</address>';
+	      }
+          }
+          if ($discussiononly) {
+	      $discussion.=(<<ENDDISCUSS);
+<form action="/adm/feedback" method="post" name="mailform">
+<input type="submit" name="discuss" value="Post Discussion" />
+<input type="submit" name="anondiscuss" value="Post Anonymous Discussion" />
+<input type="hidden" name="symb" value="$symb" />
+<input type="hidden" name="sendit" value="true" />
+<br />
+<font size="1">Note: in anonymous discussion, your name is visible only to
+course faculty</font><br />
+<textarea name=comment cols=60 rows=10 wrap=hard></textarea>
+</form>
+ENDDISCUSS
+             $discussion.=&Apache::lonfeedback::generate_preview_button();
           }
        }
     }
-    return $discussion.'</html>';
+    return $discussion.($discussiononly?'':'</html>');
 }
 
 sub tokeninputfield {
@@ -332,6 +365,7 @@ sub registerurl {
     my $forcereg=shift;
     my $target = shift;
     my $result = '';
+    
     if ($target eq 'edit') {
         $result .="<script>\n".
             "if (typeof menu != 'undefined') {menu.currentURL=null;}\n".
@@ -541,19 +575,21 @@ sub htmlclean {
 
 sub latex_special_symbols {
     my ($current_token,$stack,$parstack)=@_;
-    my @temp_array = @$stack;
-    if ($temp_array[-1] ne 'tt') {
-	if ($current_token=~m/\^/) {$current_token=~s/\^/\\verb|\^|/g;}
+    $current_token=~s/\\/\\char92 /g;
+    $current_token=~s/\^/\\char94 /g;
+    $current_token=~s/\~/\\char126 /g;
+    $current_token=~s/(&[^a-z\#])/\\$1/g;
+    if ($current_token=~/ \#\w/) {
+	$current_token=~s/ \#(\w)/ \\#$1/;
     } else {
-	if ($current_token=~m/\^/) {$current_token=~s/\^/}\\verb|\^|{/g;}
+	$current_token=~s/([^&])(\#)/$1\\$2/g;
     }
-    if ($current_token=~m/>/) {$current_token=~s/>/\$>\$/g;} #more
-    if ($current_token=~m/</) {$current_token=~s/</\$<\$/g;} #less
-    if ($current_token=~m/\d%/) {$current_token =~ s/%/\\%/g;} #percent after digit
-    if ($current_token=~m/\s%/) {$current_token =~ s/%/\\%/g;} #persent after space
-
-
-#    $current_token = ' start='.$current_token.'=finish ';
+    $current_token=~s/(\$|_|{|})/\\$1/g;
+    $current_token=~s/\\char92 /\\texttt{\\char92}/g;
+    $current_token=~s/>/\$>\$/g; #more
+    $current_token=~s/</\$<\$/g; #less
+    if ($current_token=~m/\d%/) {$current_token =~ s/(\d)%/$1\\%/g;} #percent after digit
+    if ($current_token=~m/\s%/) {$current_token =~ s/(\s)%/$1\\%/g;} #persent after space
     return $current_token;
 }
 
@@ -567,7 +603,7 @@ sub inner_xmlparse {
       if (($token->[0] eq 'T') || ($token->[0] eq 'C') || ($token->[0] eq 'D') ) {
 	if ($metamode<1) {
 	    my $text=$token->[1];
-	    if ($token->[0] eq 'C') {
+	    if ($token->[0] eq 'C' && $target eq 'tex') {
 		$text = '%'.$text;
 		$text =~ s/[\n\r]//g;
 	    }