Skip to content

Commit

Permalink
Merge pull request sphinx-doc#8766 from tk0miya/8232_graphviz_in_subdir
Browse files Browse the repository at this point in the history
graphviz: Image node is not rendered if graph file is in subdir (refs: sphinx-doc#8232)
  • Loading branch information
tk0miya committed Jan 27, 2021
2 parents 62dad2f + 2952d9a commit 7f63c54
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 10 deletions.
1 change: 1 addition & 0 deletions CHANGES
Expand Up @@ -76,6 +76,7 @@ Bugs fixed
* #8134: autodoc: crashes when mocked decorator takes arguments
* #8306: autosummary: mocked modules are documented as empty page when using
:recursive: option
* #8232: graphviz: Image node is not rendered if graph file is in subdirectory
* #8618: html: kbd role produces incorrect HTML when compound-key separators (-,
+ or ^) are used as keystrokes
* #8629: html: A type warning for html_use_opensearch is shown twice
Expand Down
27 changes: 17 additions & 10 deletions sphinx/ext/graphviz.py
Expand Up @@ -142,6 +142,7 @@ def run(self) -> List[Node]:
'it failed') % filename, line=self.lineno)]
else:
dotcode = '\n'.join(self.content)
rel_filename = None
if not dotcode.strip():
return [self.state_machine.reporter.warning(
__('Ignoring "graphviz" directive without content.'),
Expand All @@ -160,6 +161,8 @@ def run(self) -> List[Node]:
node['align'] = self.options['align']
if 'class' in self.options:
node['classes'] = self.options['class']
if rel_filename:
node['filename'] = rel_filename

if 'caption' not in self.options:
self.add_name(node)
Expand Down Expand Up @@ -213,8 +216,8 @@ def run(self) -> List[Node]:
return [figure]


def render_dot(self: SphinxTranslator, code: str, options: Dict,
format: str, prefix: str = 'graphviz') -> Tuple[str, str]:
def render_dot(self: SphinxTranslator, code: str, options: Dict, format: str,
prefix: str = 'graphviz', filename: str = None) -> Tuple[str, str]:
"""Render graphviz code into a PNG or PDF output file."""
graphviz_dot = options.get('graphviz_dot', self.builder.config.graphviz_dot)
hashkey = (code + str(options) + str(graphviz_dot) +
Expand All @@ -238,7 +241,10 @@ def render_dot(self: SphinxTranslator, code: str, options: Dict,
dot_args.extend(['-T' + format, '-o' + outfn])

docname = options.get('docname', 'index')
cwd = path.dirname(path.join(self.builder.srcdir, docname))
if filename:
cwd = path.dirname(path.join(self.builder.srcdir, filename))
else:
cwd = path.dirname(path.join(self.builder.srcdir, docname))

if format == 'png':
dot_args.extend(['-Tcmapx', '-o%s.map' % outfn])
Expand All @@ -263,14 +269,14 @@ def render_dot(self: SphinxTranslator, code: str, options: Dict,


def render_dot_html(self: HTMLTranslator, node: graphviz, code: str, options: Dict,
prefix: str = 'graphviz', imgcls: str = None, alt: str = None
) -> Tuple[str, str]:
prefix: str = 'graphviz', imgcls: str = None, alt: str = None,
filename: str = None) -> Tuple[str, str]:
format = self.builder.config.graphviz_output_format
try:
if format not in ('png', 'svg'):
raise GraphvizError(__("graphviz_output_format must be one of 'png', "
"'svg', but is %r") % format)
fname, outfn = render_dot(self, code, options, format, prefix)
fname, outfn = render_dot(self, code, options, format, prefix, filename)
except GraphvizError as exc:
logger.warning(__('dot code %r: %s'), code, exc)
raise nodes.SkipNode from exc
Expand Down Expand Up @@ -315,13 +321,14 @@ def render_dot_html(self: HTMLTranslator, node: graphviz, code: str, options: Di


def html_visit_graphviz(self: HTMLTranslator, node: graphviz) -> None:
render_dot_html(self, node, node['code'], node['options'])
render_dot_html(self, node, node['code'], node['options'], filename=node.get('filename'))


def render_dot_latex(self: LaTeXTranslator, node: graphviz, code: str,
options: Dict, prefix: str = 'graphviz') -> None:
options: Dict, prefix: str = 'graphviz', filename: str = None
) -> None:
try:
fname, outfn = render_dot(self, code, options, 'pdf', prefix)
fname, outfn = render_dot(self, code, options, 'pdf', prefix, filename)
except GraphvizError as exc:
logger.warning(__('dot code %r: %s'), code, exc)
raise nodes.SkipNode from exc
Expand Down Expand Up @@ -352,7 +359,7 @@ def render_dot_latex(self: LaTeXTranslator, node: graphviz, code: str,


def latex_visit_graphviz(self: LaTeXTranslator, node: graphviz) -> None:
render_dot_latex(self, node, node['code'], node['options'])
render_dot_latex(self, node, node['code'], node['options'], filename=node.get('filename'))


def render_dot_texinfo(self: TexinfoTranslator, node: graphviz, code: str,
Expand Down

0 comments on commit 7f63c54

Please sign in to comment.