summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/sbin/ThornUtils.pm71
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;
}
#/*@@