from docutils import nodes from docutils.parsers.rst import Directive from shutil import which import shlex import subprocess import tempfile class D2langDirective(Directive): has_content = True def run(self): # TODO : add tempfile for diag_source d2_bin = which('d2') outdir = self.state.document.settings.env.app.builder.outdir srcdir = self.state.document.settings.env.srcdir diag_source = self.content with tempfile.NamedTemporaryFile() as fp: for line in self.content: fp.write(line) cmd_line = '%s %s %s' % (d2_bin, fp.name, srcdir + "/test.svg") args = shlex.split(cmd_line) subprocess.run(args) image_node = nodes.image(uri="/test.svg") return [image_node]