--- loncom/xml/lonxml.pm	2002/09/04 03:57:18	1.190
+++ loncom/xml/lonxml.pm	2002/09/13 20:46:09	1.196
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # XML Parser Module 
 #
-# $Id: lonxml.pm,v 1.190 2002/09/04 03:57:18 albertel Exp $
+# $Id: lonxml.pm,v 1.196 2002/09/13 20:46:09 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -154,6 +154,7 @@ sub xmlbegin {
 }
 
 sub xmlend {
+    my ($discussiononly,$symb)=@_;
     my $discussion='';
     if ($ENV{'request.course.id'}) {
        my $crs='/'.$ENV{'request.course.id'};
@@ -162,14 +163,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 +186,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 +215,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 +226,27 @@ sub xmlend {
 	        }
                } 
               }
-              $discussion.='</address>';
+              unless ($discussiononly) {
+                 $discussion.='</address>';
+	      }
+          }
+          if ($discussiononly) {
+	      $discussion.=(<<ENDDISCUSS);
+<form action="/adm/feedback" method="post">
+<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
           }
        }
     }
-    return $discussion.'</html>';
+    return $discussion.($discussiononly?'':'</html>');
 }
 
 sub tokeninputfield {
@@ -539,21 +570,19 @@ sub htmlclean {
     return $output;
 }
 
-sub latex_special_sumbols {
+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;}
-    } else {
-	if ($current_token=~m/\^/) {$current_token=~s/\^/}\\verb|\^|{/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/\\/\\char92 /g;
+    $current_token=~s/\^/\\char94 /g;
+    $current_token=~s/\~/\\char126 /g;
+    $current_token=~s/(&[^a-z#])/\\$1/g;
+    $current_token=~s/([^&]\#)/\\$1/g;
+    $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 +596,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;
 	    }
@@ -636,7 +665,7 @@ sub inner_xmlparse {
       }
       if (($token->[0] eq 'T') || ($token->[0] eq 'C') || ($token->[0] eq 'D') ) {
 	if ($target eq 'tex') {
-	    $result=&latex_special_sumbols($result,$stack,$parstack);
+	    $result=&latex_special_symbols($result,$stack,$parstack);
 	}
       }