--- loncom/xml/lonxml.pm	2006/06/27 14:22:39	1.413
+++ loncom/xml/lonxml.pm	2006/09/18 21:47:34	1.417
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # XML Parser Module 
 #
-# $Id: lonxml.pm,v 1.413 2006/06/27 14:22:39 albertel Exp $
+# $Id: lonxml.pm,v 1.417 2006/09/18 21:47:34 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -366,13 +366,14 @@ sub latex_special_symbols {
 	return $string;
     }
     if ($where eq 'header') {
-	$string =~ s/(\\|_|\^)/ /g;
+	$string =~ s/\\/\$\\backslash\$/g; # \  -> $\backslash$ per LaTex line by line pg  10.
 	$string =~ s/(\$|%|\{|\})/\\$1/g;
-	$string =~ s/_/ /g;
 	$string=&Apache::lonprintout::character_chart($string);
 	# any & or # leftover should be safe to just escape
         $string=~s/([^\\])\&/$1\\\&/g;
         $string=~s/([^\\])\#/$1\\\#/g;
+	$string =~ s/_/\\_/g;              # _ -> \_
+	$string =~ s/\^/\\\^{}/g;          # ^ -> \^{} 
     } else {
 	$string=~s/\\/\\ensuremath{\\backslash}/g;
 	$string=~s/\\\%|\%/\\\%/g;
@@ -1148,19 +1149,24 @@ sub newparser {
 }
 
 sub parstring {
-  my ($token) = @_;
-  my $temp='';
-  foreach (@{$token->[3]}) {
-    unless ($_=~/\W/) {
-      my $val=$token->[2]->{$_};
-      $val =~ s/([\%\@\\\"\'])/\\$1/g;
-      $val =~ s/(\$[^{a-zA-Z_])/\\$1/g;
-      $val =~ s/(\$)$/\\$1/;
-      #if ($val =~ m/^[\%\@]/) { $val="\\".$val; }
-      $temp .= "my \$$_=\"$val\";";
-    }
-  }
-  return $temp;
+    my ($token) = @_;
+    my (@vars,@values);
+    foreach my $attr (@{$token->[3]}) {
+	if ($attr!~/\W/) {
+	    my $val=$token->[2]->{$attr};
+	    $val =~ s/([\%\@\\\"\'])/\\$1/g;
+	    $val =~ s/(\$[^\{a-zA-Z_])/\\$1/g;
+	    $val =~ s/(\$)$/\\$1/;
+	    #if ($val =~ m/^[\%\@]/) { $val="\\".$val; }
+	    push(@vars,"\$$attr");
+	    push(@values,"\"$val\"");
+	}
+    }
+    my $var_init = 
+	(@vars) ? 'my ('.join(',',@vars).') = ('.join(',',@values).');'
+	        : '';
+    print STDERR $var_init."\n";
+    return $var_init;
 }
 
 sub extlink {
@@ -1540,7 +1546,7 @@ sub error {
 	    $errormsg=&mt("An error occured while processing this resource. The author has been notified.");
 	}
 	my $host=$Apache::lonnet::perlvar{'lonHostID'};
-	my $msg = join('<br />',(@_,"The occured on host <tt>$host</tt>"));
+	my $msg = join('<br />',(@_,"The error occurred on host <tt>$host</tt>"));
 	#notify author
 	&Apache::lonmsg::author_res_msg($env{'request.filename'},$msg);
 	#notify course
@@ -1623,14 +1629,14 @@ sub get_param {
     }
     if ( ! $args ) { return undef; }
     if ( $case_insensitive ) {
-	if ($args =~ s/(my \$)(\Q$param\E)(=\")/$1.lc($2).$3/ei) {
+	if ($args =~ s/(my (?:.*))(\$\Q$param\E[,\)])/$1.lc($2)/ei) {
 	    return &Apache::run::run("{$args;".'return $'.$param.'}',
                                      $safeeval); #'
 	} else {
 	    return undef;
 	}
     } else {
-	if ( $args =~ /my \$\Q$param\E=\"/ ) {
+	if ( $args =~ /my .*\$\Q$param\E[,\)]/ ) {
 	    return &Apache::run::run("{$args;".'return $'.$param.'}',
                                      $safeeval); #'
 	} else {