diff -r be27ed110b50 -r d8ac696cc51f buildframework/helium/external/python/lib/common/Sphinx-0.5.1-py2.5.egg/sphinx/ext/mathbase.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/buildframework/helium/external/python/lib/common/Sphinx-0.5.1-py2.5.egg/sphinx/ext/mathbase.py Wed Dec 23 19:29:07 2009 +0200 @@ -0,0 +1,139 @@ +# -*- coding: utf-8 -*- +""" + sphinx.ext.mathbase + ~~~~~~~~~~~~~~~~~~~ + + Set up math support in source files and LaTeX/text output. + + :copyright: 2008 by Georg Brandl. + :license: BSD. +""" + +from docutils import nodes, utils +from docutils.parsers.rst import directives + + +class math(nodes.Inline, nodes.TextElement): + pass + +class displaymath(nodes.Part, nodes.Element): + pass + +class eqref(nodes.Inline, nodes.TextElement): + pass + + +def wrap_displaymath(math, label): + parts = math.split('\n\n') + ret = [] + for i, part in enumerate(parts): + if label is not None and i == 0: + ret.append('\\begin{split}%s\\end{split}' % part + + (label and '\\label{'+label+'}' or '')) + else: + ret.append('\\begin{split}%s\\end{split}\\notag' % part) + return '\\begin{gather}\n' + '\\\\'.join(ret) + '\n\\end{gather}' + + +def math_role(role, rawtext, text, lineno, inliner, options={}, content=[]): + latex = utils.unescape(text, restore_backslashes=True) + return [math(latex=latex)], [] + +def eq_role(role, rawtext, text, lineno, inliner, options={}, content=[]): + text = utils.unescape(text) + node = eqref('(?)', '(?)', target=text) + node['docname'] = inliner.document.settings.env.docname + return [node], [] + +def math_directive(name, arguments, options, content, lineno, + content_offset, block_text, state, state_machine): + latex = '\n'.join(content) + if arguments and arguments[0]: + latex = arguments[0] + '\n\n' + latex + node = displaymath() + node['latex'] = latex + node['label'] = options.get('label', None) + node['nowrap'] = 'nowrap' in options + node['docname'] = state.document.settings.env.docname + ret = [node] + if node['label']: + tnode = nodes.target('', '', ids=['equation-' + node['label']]) + state.document.note_explicit_target(tnode) + ret.insert(0, tnode) + return ret + + +def latex_visit_math(self, node): + self.body.append('$' + node['latex'] + '$') + raise nodes.SkipNode + +def latex_visit_displaymath(self, node): + if node['nowrap']: + self.body.append(node['latex']) + else: + label = node['label'] and node['docname'] + '-' + node['label'] or None + self.body.append(wrap_displaymath(node['latex'], label)) + raise nodes.SkipNode + +def latex_visit_eqref(self, node): + self.body.append('\\eqref{%s-%s}' % (node['docname'], node['target'])) + raise nodes.SkipNode + + +def text_visit_math(self, node): + self.add_text(node['latex']) + raise nodes.SkipNode + +def text_visit_displaymath(self, node): + self.new_state() + self.add_text(node['latex']) + self.end_state() + raise nodes.SkipNode + +def text_visit_eqref(self, node): + self.add_text(node['target']) + raise nodes.SkipNode + + +def html_visit_eqref(self, node): + self.body.append('' % node['target']) + +def html_depart_eqref(self, node): + self.body.append('') + + +def number_equations(app, doctree, docname): + num = 0 + numbers = {} + for node in doctree.traverse(displaymath): + if node['label'] is not None: + num += 1 + node['number'] = num + numbers[node['label']] = num + else: + node['number'] = None + for node in doctree.traverse(eqref): + if node['target'] not in numbers: + continue + num = '(%d)' % numbers[node['target']] + node[0] = nodes.Text(num, num) + + +def setup(app, htmlinlinevisitors, htmldisplayvisitors): + app.add_node(math, + latex=(latex_visit_math, None), + text=(text_visit_math, None), + html=htmlinlinevisitors) + app.add_node(displaymath, + latex=(latex_visit_displaymath, None), + text=(text_visit_displaymath, None), + html=htmldisplayvisitors) + app.add_node(eqref, + latex=(latex_visit_eqref, None), + text=(text_visit_eqref, None), + html=(html_visit_eqref, html_depart_eqref)) + app.add_role('math', math_role) + app.add_role('eq', eq_role) + app.add_directive('math', math_directive, 1, (0, 1, 1), + label=directives.unchanged, nowrap=directives.flag) + app.connect('doctree-resolved', number_equations)