[eddf6af5] | 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 |
---|
[2a2fb09] | 13 | _dollar = re.compile(r"(?:^|(?<=\s|[-(]))[$]([^\n]*?)(?<![\\])[$](?:$|(?=\s|[-.,;:?\\)]))") |
---|
[eddf6af5] | 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() |
---|