source: sasmodels/doc/_extensions/dollarmath.py @ eaa4458

core_shell_microgelsmagnetic_modelticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change on this file since eaa4458 was 103ea45, checked in by Paul Kienzle <pkienzle@…>, 9 years ago

more flexible handling of inline latex

  • Property mode set to 100644
File size: 2.5 KB
Line 
1# This program is public domain
2# Author: Paul Kienzle
3r"""
4Allow $math$ markup in text and docstrings, ignoring \$.
5
6The $math$ markup should be separated from the surrounding text by spaces.  To
7embed markup within a word, place backslash-space before and after.  For
8convenience, the final $ can be followed by punctuation (period, comma or
9semicolon).
10"""
11
12import re
13
14_dollar = re.compile(r"(?:^|(?<=\s|[(]))[$]([^\n]*?)(?<![\\])[$](?:$|(?=\s|[.,;)\\]))")
15_notdollar = re.compile(r"\\[$]")
16
17def replace_dollar(content):
18    original = content
19    content = _dollar.sub(r":math:`\1`",content)
20    content = _notdollar.sub("$", content)
21    #if '$' in content:
22    #    import sys
23    #    sys.stdout.write("\n========> not converted\n")
24    #    sys.stdout.write(content)
25    #    sys.stdout.write("\n")
26    #elif '$' in original:
27    #    import sys
28    #    sys.stdout.write("\n========> converted\n")
29    #    sys.stdout.write(content)
30    #    sys.stdout.write("\n")
31    return content
32
33def rewrite_rst(app, docname, source):
34    source[0] = replace_dollar(source[0])
35
36def rewrite_autodoc(app, what, name, obj, options, lines):
37    lines[:] = [replace_dollar(L) for L in lines]
38
39def setup(app):
40    app.connect('source-read', rewrite_rst)
41    app.connect('autodoc-process-docstring', rewrite_autodoc)
42
43
44def test_dollar():
45    assert replace_dollar(u"no dollar")==u"no dollar"
46    assert replace_dollar(u"$only$")==u":math:`only`"
47    assert replace_dollar(u"$first$ is good")==u":math:`first` is good"
48    assert replace_dollar(u"so is $last$")==u"so is :math:`last`"
49    assert replace_dollar(u"and $mid$ too")==u"and :math:`mid` too"
50    assert replace_dollar(u"$first$, $mid$, $last$")==u":math:`first`, :math:`mid`, :math:`last`"
51    assert replace_dollar(u"dollar\$ escape")==u"dollar$ escape"
52    assert replace_dollar(u"dollar \$escape\$ too")==u"dollar $escape$ too"
53    assert replace_dollar(u"spaces $in the$ math")==u"spaces :math:`in the` math"
54    assert replace_dollar(u"emb\ $ed$\ ed")==u"emb\ :math:`ed`\ ed"
55    assert replace_dollar(u"$first$a")==u"$first$a"
56    assert replace_dollar(u"a$last$")==u"a$last$"
57    assert replace_dollar(u"$37")==u"$37"
58    assert replace_dollar(u"($37)")==u"($37)"
59    assert replace_dollar(u"$37 - $43")==u"$37 - $43"
60    assert replace_dollar(u"($37, $38)")==u"($37, $38)"
61    assert replace_dollar(u"a $mid$dle a")==u"a $mid$dle a"
62    assert replace_dollar(u"a ($in parens$) a")==u"a (:math:`in parens`) a"
63    assert replace_dollar(u"a (again $in parens$) a")==u"a (again :math:`in parens`) a"
64
65if __name__ == "__main__":
66    test_dollar()
Note: See TracBrowser for help on using the repository browser.