Escape RST special character '^' and take care of special math cases

(cherry picked from commit 453521c8e6)
This commit is contained in:
Richard Berger 2016-09-06 23:46:14 -04:00 committed by Axel Kohlmeyer
parent 3f312244a0
commit 925f1bfb6f
2 changed files with 23 additions and 0 deletions

View File

@ -64,6 +64,7 @@ class RSTMarkup(Markup):
def escape_rst_chars(self, text):
text = text.replace('*', '\\*')
text = text.replace('^', '\\^')
return text
def inline_math(self, text):
@ -73,6 +74,8 @@ class RSTMarkup(Markup):
while start_pos >= 0 and end_pos >= 0:
original = text[start_pos:end_pos+2]
formula = original[2:-2]
formula = formula.replace('\\*', '*')
formula = formula.replace('\\^', '^')
replacement = ":math:`" + formula.replace('\n', ' ').strip() + "`"
text = text.replace(original, replacement)
@ -300,6 +303,9 @@ class RSTFormatting(Formatting):
start = ""
body = parts[0]
body = body.replace('\\*', '*')
body = body.replace('\\^', '^')
if len(start) > 0:
text += start + "\n"
text += "\n.. math::\n\n"

View File

@ -81,6 +81,10 @@ class TestMarkup(unittest.TestCase):
s = self.markup.convert("[*bold] and {italic*}")
self.assertEqual("**\*bold** and *italic\**", s)
def test_escape_hat_character(self):
s = self.markup.convert("x^2")
self.assertEqual("x\^2", s)
def test_paragraph_with_italic(self):
self.assertEqual("A sentence with a *italic* word", self.markup.convert("A sentence with a {italic} word"))
@ -411,6 +415,16 @@ class TestMathMarkup(unittest.TestCase):
" \\frac{s_{ij} r_{ij} }{2} \\right)\n"
" \\exp \\left( - s_{ij} r_{ij} \\right) \\end{equation}\n\n", s)
def test_detect_latex_equation_with_mult(self):
s = self.txt2rst.convert("\\begin\\{equation\\} a = b * c \\end\\{equation\\}\n")
self.assertEqual("\n.. math::\n\n"
" \\begin{equation} a = b * c \\end{equation}\n\n", s)
def test_detect_latex_equation_with_pow(self):
s = self.txt2rst.convert("\\begin\\{equation\\} a = b^c \\end\\{equation\\}\n")
self.assertEqual("\n.. math::\n\n"
" \\begin{equation} a = b^c \\end{equation}\n\n", s)
def test_detect_inline_latex_equation(self):
s = self.txt2rst.convert("Masses: \\begin\\{equation\\} M' = M + m \\end\\{equation\\}\n"
"\\begin\\{equation\\} m' = \\frac \\{M\\, m \\} \\{M'\\} \\end\\{equation\\}\n")
@ -426,6 +440,9 @@ class TestMathMarkup(unittest.TestCase):
def test_detect_inline_math(self):
self.assertEqual(":math:`x^2`", self.markup.convert("\\( x^2 \\)"))
def test_detect_inline_math_mult(self):
self.assertEqual(":math:`x * 2`", self.markup.convert("\\( x * 2 \\)"))
def test_detect_multiline_inline_math(self):
line = "\\(\\sqrt \\{ \\frac \\{2\, k_B \\mathtt\\{Tcom\\}\, m'\\}\n" \
"\\{\\mathrm dt\\, \\mathtt\\{damp\\_com\\} \\}\n" \