2 from lxml import etree as ET
3 from sphinx.errors import ExtensionError
6 def set_doxygen_xml(app):
7 """Load all doxygen XML files from the app config variable
8 `app.config.doxygen_xml` which should be a path to a directory
9 containing doxygen xml output
12 '[autodoxy] No doxygen xml output found in doxygen_xml="%s"' % app.config.doxygen_xml)
14 if not os.path.isdir(app.config.doxygen_xml):
17 files = [os.path.join(app.config.doxygen_xml, f)
18 for f in os.listdir(app.config.doxygen_xml)
19 if f.lower().endswith('.xml') and not f.startswith('._')]
23 setup.DOXYGEN_ROOT = ET.ElementTree(ET.Element('root')).getroot()
25 root = ET.parse(file).getroot()
27 setup.DOXYGEN_ROOT.append(node)
30 def get_doxygen_root():
31 """Get the root element of the doxygen XML document.
33 if not hasattr(setup, 'DOXYGEN_ROOT'):
34 setup.DOXYGEN_ROOT = ET.Element("root") # dummy
35 return setup.DOXYGEN_ROOT
39 import sphinx.ext.autosummary
40 from autodoxy.autodoxy import DoxygenClassDocumenter, DoxygenMethodDocumenter, DoxygenVariableDocumenter
41 from autodoxy.autosummary import DoxygenAutosummary, DoxygenAutoEnum
42 from autodoxy.autosummary.generate import process_generate_options
44 app.connect("builder-inited", set_doxygen_xml)
45 app.connect("builder-inited", process_generate_options)
47 app.setup_extension('sphinx.ext.autodoc')
48 app.setup_extension('sphinx.ext.autosummary')
50 app.add_autodocumenter(DoxygenClassDocumenter)
51 app.add_autodocumenter(DoxygenMethodDocumenter)
52 app.add_autodocumenter(DoxygenVariableDocumenter)
53 app.add_config_value("doxygen_xml", "", True)
55 app.add_directive('autodoxysummary', DoxygenAutosummary)
56 app.add_directive('autodoxyenum', DoxygenAutoEnum)
58 return {'version': sphinx.__display_version__, 'parallel_read_safe': True}