##// END OF EJS Templates
Revert "Better comment"...
Jonathan Frederic -
Show More
@@ -1,123 +1,123
1 1 """Latex filters.
2 2
3 3 Module of useful filters for processing Latex within Jinja latex templates.
4 4 """
5 5 #-----------------------------------------------------------------------------
6 6 # Copyright (c) 2013, the IPython Development Team.
7 7 #
8 8 # Distributed under the terms of the Modified BSD License.
9 9 #
10 10 # The full license is in the file COPYING.txt, distributed with this software.
11 11 #-----------------------------------------------------------------------------
12 12
13 13 #-----------------------------------------------------------------------------
14 14 # Imports
15 15 #-----------------------------------------------------------------------------
16 16 import re
17 17
18 18 #-----------------------------------------------------------------------------
19 19 # Globals and constants
20 20 #-----------------------------------------------------------------------------
21 21
22 22 LATEX_RE_SUBS = (
23 23 (re.compile(r'\.\.\.+'), r'\\ldots'),
24 24 )
25 25
26 26 # Latex substitutions for escaping latex.
27 27 # see: http://stackoverflow.com/questions/16259923/how-can-i-escape-latex-special-characters-inside-django-templates
28 28
29 29 LATEX_SUBS = {
30 30 '&': r'\&',
31 31 '%': r'\%',
32 32 '$': r'\$',
33 33 '#': r'\#',
34 34 '_': r'\_',
35 35 '{': r'\{',
36 36 '}': r'\}',
37 37 '~': r'\textasciitilde{}',
38 38 '^': r'\^{}',
39 39 '\\': r'\textbackslash{}',
40 40 }
41 41
42 42
43 43 #-----------------------------------------------------------------------------
44 44 # Functions
45 45 #-----------------------------------------------------------------------------
46 46
47 47 __all__ = ['escape_latex',
48 48 'strip_math_space']
49 49
50 50 def escape_latex(text):
51 51 """
52 Remove ansi codes and escape characters that may conflict with latex.
52 Escape characters that may conflict with latex.
53 53
54 54 Parameters
55 55 ----------
56 56 text : str
57 57 Text containing characters that may conflict with Latex
58 58 """
59 59 text = ''.join(LATEX_SUBS.get(c, c) for c in text)
60 60 for pattern, replacement in LATEX_RE_SUBS:
61 61 text = pattern.sub(replacement, text)
62 62
63 63 return text
64 64
65 65
66 66 def strip_math_space(text):
67 67 """
68 68 Remove the space between latex math commands and enclosing $ symbols.
69 69 This filter is important because latex isn't as flexible as the notebook
70 70 front end when it comes to flagging math using ampersand symbols.
71 71
72 72 Parameters
73 73 ----------
74 74 text : str
75 75 Text to filter.
76 76 """
77 77
78 78 # First, scan through the markdown looking for $. If
79 79 # a $ symbol is found, without a preceding \, assume
80 80 # it is the start of a math block. UNLESS that $ is
81 81 # not followed by another within two math_lines.
82 82 math_regions = []
83 83 math_lines = 0
84 84 within_math = False
85 85 math_start_index = 0
86 86 ptext = ''
87 87 last_character = ""
88 88 skip = False
89 89 for index, char in enumerate(text):
90 90
91 91 #Make sure the character isn't preceeded by a backslash
92 92 if (char == "$" and last_character != "\\"):
93 93
94 94 # Close the math region if this is an ending $
95 95 if within_math:
96 96 within_math = False
97 97 skip = True
98 98 ptext = ptext+'$'+text[math_start_index+1:index].strip()+'$'
99 99 math_regions.append([math_start_index, index+1])
100 100 else:
101 101
102 102 # Start a new math region
103 103 within_math = True
104 104 math_start_index = index
105 105 math_lines = 0
106 106
107 107 # If we are in a math region, count the number of lines parsed.
108 108 # Cancel the math region if we find two line breaks!
109 109 elif char == "\n":
110 110 if within_math:
111 111 math_lines += 1
112 112 if math_lines > 1:
113 113 within_math = False
114 114 ptext = ptext+text[math_start_index:index]
115 115
116 116 # Remember the last character so we can easily watch
117 117 # for backslashes
118 118 last_character = char
119 119 if not within_math and not skip:
120 120 ptext = ptext+char
121 121 if skip:
122 122 skip = False
123 123 return ptext
General Comments 0
You need to be logged in to leave comments. Login now