1
#!/usr/bin/env python3
2

3
# Contest Management System - http://cms-dev.github.io/
4
# Copyright © 2014 Fabian Gundlach <320pointsguy@gmail.com>
5
#
6
# This program is free software: you can redistribute it and/or modify
7
# it under the terms of the GNU Affero General Public License as
8
# published by the Free Software Foundation, either version 3 of the
9
# License, or (at your option) any later version.
10
#
11
# This program is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
# GNU Affero General Public License for more details.
15
#
16
# You should have received a copy of the GNU Affero General Public License
17
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
18

19

20 0
REPLACEMENTS = {"&": r"\&{}",
21
                "%": r"\%{}",
22
                "$": r"\${}",
23
                "#": r"\#{}",
24
                "_": r"\_{}",
25
                "{": r"\{{}",
26
                "}": r"\}{}",
27
                "~": r"\textasciitilde{}",
28
                "^": r"\textasciicircum{}",
29
                "\\": r"\textbackslash{}"}
30

31

32 0
def escape_tex_normal(string):
33
    """Escape a string for use inside latex.
34

35
    string (unicode): string to escape
36
    return (unicode): escaped string
37

38
    """
39 0
    def repc(c):
40 0
        if c in REPLACEMENTS:
41 0
            return REPLACEMENTS[c]
42
        else:
43 0
            return c
44 0
    return "".join(repc(c) for c in string)
45

46

47 0
def escape_tex_tt(string):
48
    """Escape a string for use inside latex with \texttt.
49

50
    string (unicode): string to escape
51
    return (unicode): escaped string
52

53
    """
54 0
    def repc(c):
55 0
        if c in REPLACEMENTS:
56 0
            return "\\char\"%02X{}" % ord(c)
57
        else:
58 0
            return c
59 0
    return "".join(repc(c) for c in string)

Read our documentation on viewing source code .

Loading