diff options
-rw-r--r-- | lib/sbin/ThornUtils.pm | 71 |
1 files changed, 42 insertions, 29 deletions
diff --git a/lib/sbin/ThornUtils.pm b/lib/sbin/ThornUtils.pm index acbdca0b..c3ff5b1d 100644 --- a/lib/sbin/ThornUtils.pm +++ b/lib/sbin/ThornUtils.pm @@ -382,39 +382,52 @@ sub CleanFromC #@@*/ sub CleanForLatex { - my $val = shift; - - # escape special characters - $val =~ s,\\,\{\\textbackslash\},g; - $val =~ s,~,\{\\textasciitilde\},g; - $val =~ s,<,\{\\textless\},g; - $val =~ s,>,\{\\textgreater\},g; - - # at start of string, remove spaces before and after: " - $val =~ s,^\s*?\"\s*?,\",; - - # at end of string, remove spaces before and after: " - $val =~ s,\s*?\"\s*?$,\",; - - # escape _ - $val =~ s,\_,\\\_,g; + my $inval = shift; - # escape $ - $val =~ s,\$,\\\$,g; + # at start of string, remove spaces before: " + $inval =~ s,^\s*\",\",; - # escape ^ - $val =~ s,\^,\\\^,g; + # at end of string, remove spaces after: " + $inval =~ s,\"\s*$,\",; - # escape * - $val =~ s,\*,\\\*,g; - - # escape & - $val =~ s,\&,\\\&,g; - - # escape % - $val =~ s,%,\\%,g; + # escape special characters + my $outval = ""; + foreach my $i (0 .. length($inval)-1) + { + my $char = $inval[i]; + if ($char eq '{' or + $char eq '}' or + $char eq '$' or + $char eq '_' or + $char eq '^' or + $char eq '&' or + $char eq '%') + { + $outval .= '\\' . $char; + } + elsif ($char eq '\\') + { + $outval .= '{\\textbackslash}'; + } + elsif ($char eq '~') + { + $outval .= '{\\textasciitilde}'; + } + elsif ($char eq '<') + { + $outval .= '{\\textless}'; + } + elsif ($char eq '>') + { + $outval .= '{\\textgreater}'; + } + else + { + $outval .= $char; + } + } - return $val; + return $outval; } #/*@@ |