Merge pull request #5156 from rokroskar/use-doc-dir

graphviz: run dot in the document directory
This commit is contained in:
Takeshi KOMIYA 2018-08-07 23:13:55 +09:00 committed by GitHub
commit 928b030915
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 3 deletions

View File

@ -12,6 +12,9 @@ Dependencies
Incompatible changes Incompatible changes
-------------------- --------------------
* #5156: the :py:mod:`sphinx.ext.graphviz: extension runs `dot` in the
directory of the document being built instead of in the root directory of
the documentation.
* #4460: extensions which stores any data to environment should return the * #4460: extensions which stores any data to environment should return the
version of its env data structure as metadata. In detail, please see version of its env data structure as metadata. In detail, please see
:ref:`ext-metadata`. :ref:`ext-metadata`.

View File

@ -155,7 +155,10 @@ class Graphviz(SphinxDirective):
line=self.lineno)] line=self.lineno)]
node = graphviz() node = graphviz()
node['code'] = dotcode node['code'] = dotcode
node['options'] = {} node['options'] = {
'docname': path.splitext(self.state.document.current_source)[0],
}
if 'graphviz_dot' in self.options: if 'graphviz_dot' in self.options:
node['options']['graphviz_dot'] = self.options['graphviz_dot'] node['options']['graphviz_dot'] = self.options['graphviz_dot']
if 'alt' in self.options: if 'alt' in self.options:
@ -192,7 +195,9 @@ class GraphvizSimple(SphinxDirective):
node = graphviz() node = graphviz()
node['code'] = '%s %s {\n%s\n}\n' % \ node['code'] = '%s %s {\n%s\n}\n' % \
(self.name, self.arguments[0], '\n'.join(self.content)) (self.name, self.arguments[0], '\n'.join(self.content))
node['options'] = {} node['options'] = {
'docname': path.splitext(self.state.document.current_source)[0],
}
if 'graphviz_dot' in self.options: if 'graphviz_dot' in self.options:
node['options']['graphviz_dot'] = self.options['graphviz_dot'] node['options']['graphviz_dot'] = self.options['graphviz_dot']
if 'alt' in self.options: if 'alt' in self.options:
@ -235,10 +240,14 @@ def render_dot(self, code, options, format, prefix='graphviz'):
dot_args = [graphviz_dot] dot_args = [graphviz_dot]
dot_args.extend(self.builder.config.graphviz_dot_args) dot_args.extend(self.builder.config.graphviz_dot_args)
dot_args.extend(['-T' + format, '-o' + outfn]) dot_args.extend(['-T' + format, '-o' + outfn])
docname = options.get('docname', 'index')
cwd = path.dirname(path.join(self.builder.srcdir, docname))
if format == 'png': if format == 'png':
dot_args.extend(['-Tcmapx', '-o%s.map' % outfn]) dot_args.extend(['-Tcmapx', '-o%s.map' % outfn])
try: try:
p = Popen(dot_args, stdout=PIPE, stdin=PIPE, stderr=PIPE) p = Popen(dot_args, stdout=PIPE, stdin=PIPE, stderr=PIPE, cwd=cwd)
except OSError as err: except OSError as err:
if err.errno != ENOENT: # No such file or directory if err.errno != ENOENT: # No such file or directory
raise raise