1 | # This program is public domain |
---|
2 | # Author: Paul Kienzle |
---|
3 | r""" |
---|
4 | Allow $math$ markup in text and docstrings, ignoring \$. |
---|
5 | |
---|
6 | The $math$ markup should be separated from the surrounding text by spaces. To |
---|
7 | embed markup within a word, place backslash-space before and after. For |
---|
8 | convenience, the final $ can be followed by punctuation (period, comma or |
---|
9 | semicolon). |
---|
10 | """ |
---|
11 | |
---|
12 | import re |
---|
13 | _dollar = re.compile(r"(?:^|(?<=\s|[-(]))[$]([^\n]*?)(?<![\\])[$](?:$|(?=\s|[-.,;:?\\)]))") |
---|
14 | _notdollar = re.compile(r"\\[$]") |
---|
15 | |
---|
16 | def replace_dollar(content): |
---|
17 | content = _dollar.sub(r":math:`\1`",content) |
---|
18 | content = _notdollar.sub("$", content) |
---|
19 | return content |
---|
20 | |
---|
21 | def rewrite_rst(app, docname, source): |
---|
22 | source[0] = replace_dollar(source[0]) |
---|
23 | |
---|
24 | def rewrite_autodoc(app, what, name, obj, options, lines): |
---|
25 | lines[:] = [replace_dollar(L) for L in lines] |
---|
26 | |
---|
27 | def setup(app): |
---|
28 | app.connect('source-read', rewrite_rst) |
---|
29 | app.connect('autodoc-process-docstring', rewrite_autodoc) |
---|
30 | |
---|
31 | |
---|
32 | def test_dollar(): |
---|
33 | assert replace_dollar(u"no dollar")==u"no dollar" |
---|
34 | assert replace_dollar(u"$only$")==u":math:`only`" |
---|
35 | assert replace_dollar(u"$first$ is good")==u":math:`first` is good" |
---|
36 | assert replace_dollar(u"so is $last$")==u"so is :math:`last`" |
---|
37 | assert replace_dollar(u"and $mid$ too")==u"and :math:`mid` too" |
---|
38 | assert replace_dollar(u"$first$, $mid$, $last$")==u":math:`first`, :math:`mid`, :math:`last`" |
---|
39 | assert replace_dollar(u"dollar\$ escape")==u"dollar$ escape" |
---|
40 | assert replace_dollar(u"dollar \$escape\$ too")==u"dollar $escape$ too" |
---|
41 | assert replace_dollar(u"emb\ $ed$\ ed")==u"emb\ :math:`ed`\ ed" |
---|
42 | assert replace_dollar(u"$first$a")==u"$first$a" |
---|
43 | assert replace_dollar(u"a$last$")==u"a$last$" |
---|
44 | assert replace_dollar(u"a $mid$dle a")==u"a $mid$dle a" |
---|
45 | |
---|
46 | if __name__ == "__main__": |
---|
47 | test_dollar() |
---|