def render_dot_html(self, node, code, options, prefix='graphviz', imgcls=None, alt=None): try: fname, outfn = render_dot(self, code, options, "svg", prefix) except GraphvizError, exc: self.builder.warn('dot code %r: ' % code + str(exc)) raise nodes.SkipNode
def visit_graphviz(self, node): dprint() fname, filename = graphviz.render_dot(self, node['code'], node['options'],'png') self.flush_state() width, height = self.get_image_scaled_width_height(node, filename) self.docx.picture(filename, '',width, height) raise nodes.SkipNode
def render_dot_html(self, node, code, options, prefix='graphviz', imgcls=None, alt=None): try: fname, outfn = render_dot(self, code, options, "svg", prefix) except GraphvizError as exc: self.builder.warn('dot code %r: ' % code + str(exc)) raise nodes.SkipNode inline = node.get('inline', False) if inline: wrapper = 'span' else: wrapper = 'p' self.body.append(self.starttag(node, wrapper, CLASS='graphviz')) if fname is None: self.body.append(self.encode(code)) else: # inline the svg with io.open(outfn, "r", encoding="utf-8") as h: data = h.read() data = data[data.find("<svg"):] os.remove(outfn) self.body.append(data) self.body.append('</%s>\n' % wrapper) raise nodes.SkipNode
def render_dot_html(self, node, code, options, prefix='graphviz', imgcls=None, alt=None): try: fname, outfn = render_dot(self, code, options, "svg", prefix) except GraphvizError as exc: self.builder.warn('dot code %r: ' % code + str(exc)) raise nodes.SkipNode inline = node.get('inline', False) if inline: wrapper = 'span' else: wrapper = 'p' self.body.append(self.starttag(node, wrapper, CLASS='graphviz')) if fname is None: self.body.append(self.encode(code)) else: # inline the svg with io.open(outfn, "r", encoding="utf-8") as h: data = h.read() data = data[data.find("<svg"):] os.remove(outfn) self.body.append(data) self.body.append('</%s>\n' % wrapper) raise nodes.SkipNode
def visit_graphviz(self, node): dprint() fname, filename = graphviz.render_dot(self, node['code'], node['options'], 'png') self.flush_state() width, height = self.get_image_scaled_width_height(node, filename) self.docx.picture(filename, '', width, height) raise nodes.SkipNode
def _replace_inheritance_diagram(self, doctree): """ replace inheritance diagrams with images Inheritance diagrams are pre-processed and replaced with respective images in the processed documentation set. Typically, the node support from `sphinx.ext.inheritance_diagram` would be added to the builder; however, this extension renders graphs during the translation phase (which is not ideal for how assets are managed in this extension). Instead, this implementation just traverses for inheritance diagrams, generates renderings and replaces the nodes with image nodes (which in turn will be handled by the existing image-based implementation). Note that the interactive image map is not handled in this implementation since Confluence does not support image maps (without external extensions). Args: doctree: the doctree to replace blocks on """ if inheritance_diagram is None: return # graphviz's render_dot call expects a translator to be passed in; mock # a translator tied to our self-builder class MockTranslator: def __init__(self, builder): self.builder = builder mock_translator = MockTranslator(self) for node in doctree.traverse(inheritance_diagram.inheritance_diagram): graph = node['graph'] graph_hash = inheritance_diagram.get_graph_hash(node) name = 'inheritance%s' % graph_hash dotcode = graph.generate_dot(name, {}, env=self.env) try: _, out_filename = render_dot(mock_translator, dotcode, {}, self.graphviz_output_format, 'inheritance') if not out_filename: node.parent.remove(node) continue new_node = nodes.image(candidates={'?'}, uri=out_filename) if 'align' in node: new_node['align'] = node['align'] node.replace_self(new_node) except GraphvizError as exc: ConfluenceLogger.warn('dot code {}: {}'.format(dotcode, exc)) node.parent.remove(node)
def render_dot_html(self, node, code, options, prefix='graphviz', imgcls=None, alt=None): try: fname, outfn = render_dot(self, code, options, 'svg', prefix) except GraphvizError, exc: self.builder.warn('dot code %r: ' % code + str(exc)) raise nodes.SkipNode
def replace_graphviz_nodes(builder, doctree): """ replace graphviz nodes with images graphviz nodes are pre-processed and replaced with respective images in the processed documentation set. Typically, the node support from `sphinx.ext.graphviz` would be added to the builder; however, this extension renders graphs during the translation phase (which is not ideal for how assets are managed in this extension). Instead, this implementation just traverses for graphviz nodes, generates renderings and replaces the nodes with image nodes (which in turn will be handled by the existing image-based implementation). Args: builder: the builder doctree: the doctree to replace blocks on """ # allow users to disabled implemented extension changes restricted = builder.config.confluence_adv_restricted if 'ext-graphviz' in restricted: return if graphviz is None: return # graphviz's render_dot call expects a translator to be passed in; mock a # translator tied to our builder class MockTranslator: def __init__(self, builder): self.builder = builder mock_translator = MockTranslator(builder) for node in doctree.traverse(graphviz): try: _, out_filename = render_dot(mock_translator, node['code'], node['options'], builder.graphviz_output_format, 'graphviz') if not out_filename: node.parent.remove(node) continue new_node = nodes.image(candidates={'?'}, uri=out_filename) if 'align' in node: new_node['align'] = node['align'] node.replace_self(new_node) except GraphvizError as exc: ConfluenceLogger.warn('dot code {}: {}'.format(node['code'], exc)) node.parent.remove(node)