Browse Source

convert relative path to absolute

Add generated dotfile.dot to gitignore since doxygen 1.9.3 copies the dotfile(s) to XML_OUTPUT

Considering the path to conf.py, make a dot file's relative path absolute using the project's XML_OUTPUT.
pull/821/head
2bndy5 5 months ago
parent
commit
083aa1ebf6
  1. 1
      .gitignore
  2. 18
      breathe/renderer/sphinxrenderer.py

1
.gitignore vendored

@ -47,3 +47,4 @@ com_crashlytics_export_strings.xml
# modified by build process
examples/doxygen/example.tag
examples/specific/dot_graphs/xml/dotfile.dot

18
breathe/renderer/sphinxrenderer.py

@ -1,3 +1,4 @@
import os
import sphinx
from breathe.parser import compound, compoundsuper, DoxygenCompoundParser
@ -2369,11 +2370,22 @@ class SphinxRenderer:
def visit_docdotfile(self, node) -> List[Node]:
"""Translate node from doxygen's dotfile command to sphinx's graphviz directive."""
dotcode = ""
dot_file_path = node.name # type: str
# Doxygen v1.9.3+ uses a relative path to specify the dot file.
# Previously, Doxygen used an absolute path.
# This relative path is with respect to the XML_OUTPUT path.
# furthermore, Doxygen v1.9.3+ will copy the dot file into the XML_OUTPUT
if not os.path.isabs(dot_file_path):
# use self.project_info.project_path as the XML_OUTPUT path,
# and make it absolute with consideration to the conf.py path
dot_file_path = os.path.abspath(
self.app.confdir + os.sep + self.project_info.project_path() + dot_file_path
)
try:
with open(node.name, encoding="utf-8") as fp:
with open(dot_file_path, encoding="utf-8") as fp:
dotcode = fp.read()
if not dotcode.rstrip("\n"):
raise RuntimeError("%s found but without any content" % node.name)
raise RuntimeError("%s found but without any content" % dot_file_path)
except OSError as exc:
# doxygen seems to prevent this from triggering as a non-existant file
# generates no XML output for the corresponding `\dotfile` cmd
@ -2382,7 +2394,7 @@ class SphinxRenderer:
self.state.document.reporter.warning(exc)
graph_node = graphviz()
graph_node["code"] = dotcode
graph_node["options"] = {"docname": node.name}
graph_node["options"] = {"docname": dot_file_path}
caption = "" if not node.content_ else node.content_[0].getValue()
if caption:
caption_node = nodes.caption(caption, "")

Loading…
Cancel
Save