xref: /petsc/src/binding/petsc4py/conf/epydocify.py (revision 552edb6364df478b294b3111f33a8f37ca096b20)
11b37a2a7SPierre Jolivet#!/usr/bin/env python3
25808f684SSatish Balay
35808f684SSatish Balay# --------------------------------------------------------------------
45808f684SSatish Balay
55808f684SSatish Balay
65808f684SSatish Balay# --------------------------------------------------------------------
75808f684SSatish Balay
85808f684SSatish Balaytry:
95808f684SSatish Balay    from docutils.nodes import NodeVisitor
10*6f336411SStefano Zampini
115808f684SSatish Balay    NodeVisitor.unknown_visit = lambda self, node: None
125808f684SSatish Balay    NodeVisitor.unknown_departure = lambda self, node: None
135808f684SSatish Balayexcept ImportError:
145808f684SSatish Balay    pass
155808f684SSatish Balay
165808f684SSatish Balaytry:  # epydoc 3.0.1 + docutils 0.6
175808f684SSatish Balay    from docutils.nodes import Text
185808f684SSatish Balay    from UserString import UserString
19*6f336411SStefano Zampini
205808f684SSatish Balay    if not isinstance(Text, UserString):
21*6f336411SStefano Zampini
225808f684SSatish Balay        def Text_get_data(s):
235808f684SSatish Balay            try:
245808f684SSatish Balay                return s._data
255808f684SSatish Balay            except AttributeError:
265808f684SSatish Balay                return s.astext()
27*6f336411SStefano Zampini
285808f684SSatish Balay        def Text_set_data(s, d):
295808f684SSatish Balay            s.astext = lambda: d
305808f684SSatish Balay            s._data = d
31*6f336411SStefano Zampini
325808f684SSatish Balay        Text.data = property(Text_get_data, Text_set_data)
335808f684SSatish Balayexcept ImportError:
345808f684SSatish Balay    pass
355808f684SSatish Balay
365808f684SSatish Balay# --------------------------------------------------------------------
375808f684SSatish Balay
385808f684SSatish Balayfrom epydoc.docwriter import dotgraph
39*6f336411SStefano Zampinifrom epydoc import docstringparser as dsp
405808f684SSatish Balay
415808f684SSatish Balayimport re
42*6f336411SStefano Zampiniimport sys
43*6f336411SStefano Zampiniimport os
44*6f336411SStefano Zampiniimport epydoc.cli
45*6f336411SStefano Zampini
46*6f336411SStefano Zampinidotgraph._DOT_VERSION_RE = re.compile(r'dot (?:- Graphviz )version ([\d\.]+)')
475808f684SSatish Balay
485808f684SSatish Balaytry:
495808f684SSatish Balay    dotgraph.DotGraph.DEFAULT_HTML_IMAGE_FORMAT = 'png'
505808f684SSatish Balay
515808f684SSatish Balayexcept AttributeError:
525808f684SSatish Balay    DotGraph_to_html = dotgraph.DotGraph.to_html
535808f684SSatish Balay    DotGraph_run_dot = dotgraph.DotGraph._run_dot
545808f684SSatish Balay
555808f684SSatish Balay    def to_html(self, image_file, image_url, center=True):
565808f684SSatish Balay        if image_file[-4:] == '.gif':
575808f684SSatish Balay            image_file = image_file[:-4] + '.png'
585808f684SSatish Balay        if image_url[-4:] == '.gif':
595808f684SSatish Balay            image_url = image_url[:-4] + '.png'
605808f684SSatish Balay        return DotGraph_to_html(self, image_file, image_url)
615808f684SSatish Balay
625808f684SSatish Balay    def _run_dot(self, *options):
635808f684SSatish Balay        if '-Tgif' in options:
645808f684SSatish Balay            opts = list(options)
655808f684SSatish Balay            for i, o in enumerate(opts):
66*6f336411SStefano Zampini                if o == '-Tgif':
67*6f336411SStefano Zampini                    opts[i] = '-Tpng'
685808f684SSatish Balay            options = type(options)(opts)
695808f684SSatish Balay        return DotGraph_run_dot(self, *options)
705808f684SSatish Balay
715808f684SSatish Balay    dotgraph.DotGraph.to_html = to_html
725808f684SSatish Balay    dotgraph.DotGraph._run_dot = _run_dot
735808f684SSatish Balay
745808f684SSatish Balay# --------------------------------------------------------------------
755808f684SSatish Balay
765808f684SSatish Balay
775808f684SSatish Balay_SIGNATURE_RE = re.compile(
785808f684SSatish Balay    # Class name (for builtin methods)
79*6f336411SStefano Zampini    r'^\s*((?P<class>\w+)\.)?'
80*6f336411SStefano Zampini    +
815808f684SSatish Balay    # The function name
82*6f336411SStefano Zampini    r'(?P<func>\w+)'
83*6f336411SStefano Zampini    +
845808f684SSatish Balay    # The parameters
85*6f336411SStefano Zampini    r'\(((?P<self>(?:self|cls|mcs)),?)?(?P<params>.*)\)'
86*6f336411SStefano Zampini    +
875808f684SSatish Balay    # The return value (optional)
88*6f336411SStefano Zampini    r'(\s*(->)\s*(?P<return>\S.*?))?'
89*6f336411SStefano Zampini    +
905808f684SSatish Balay    # The end marker
91*6f336411SStefano Zampini    r'\s*(\n|\s+(--|<=+>)\s+|$|\.\s+|\.\n)'
92*6f336411SStefano Zampini)
935808f684SSatish Balay
94*6f336411SStefano Zampini
955808f684SSatish Balaydsp._SIGNATURE_RE = _SIGNATURE_RE
965808f684SSatish Balay
975808f684SSatish Balay# --------------------------------------------------------------------
985808f684SSatish Balay
995808f684SSatish Balay
1005808f684SSatish Balaydef epydocify():
1015808f684SSatish Balay    dirname = os.path.dirname(__file__)
1025808f684SSatish Balay    config = os.path.join(dirname, 'epydoc.cfg')
1035808f684SSatish Balay    sys.argv.append('--config=' + config)
1045808f684SSatish Balay    epydoc.cli.cli()
1055808f684SSatish Balay
106*6f336411SStefano Zampini
1075808f684SSatish Balayif __name__ == '__main__':
1085808f684SSatish Balay    epydocify()
1095808f684SSatish Balay
1105808f684SSatish Balay# --------------------------------------------------------------------
111