所以,我知道我可以通过 nested_parse 调用嵌套在指令中的内容的解析,即:
vl = docutils.statemachine.ViewList(inputLines, source=self.content.source, parent=self.content, parent_offset=0)
self.state.nested_parse(vl, 0, section)
但是,这假设我传递给它的输入是 RST。我尝试过类似的事情
parser = MystParser()
docu = docutils.utils.new_document(".")
parser.parse("**Some Markdown** `goes here`", docu)
...我在一些文档示例中找到了它,但它因
docu
缺少一些属性而失败。而且,我并不是真的想创建一个新文档;只需将内容附加到现有节点即可。
有什么方法可以从指令中显式嵌套解析 Markdown 吗?我使用最新的 sphinx docker 镜像
sphinxdoc/sphinx:latest
。
编辑: 我也试过了
with tempfile.NamedTemporaryFile() as tmp:
tmp.write(schemaObject["description"].encode("utf-8"))
content = f"""
.. include:: "{tmp.name}"
:parser: myst_parser.sphinx_
"""
vl = docutils.statemachine.ViewList(content.splitlines(), source=self.content.source, parent=self.content, parent_offset=0)
self.state.nested_parse(vl, 0, section)
但出于某种原因,我明白了
expected str, bytes or os.PathLike object, not method
好吧,我最终找到了一个可行的解决方案。不以此为荣。
from sphinx.util.docutils import new_document
from docutils import nodes
from myst_parser.parsers.sphinx_ import MystParser
# within the directive run(self)
title = nodes.title(text=schemaTitle)
section = nodes.section(ids=title)
section += title
parser = MystParser()
document = new_document(".")
document.settings.env = self.env
parser.parse("..my markdown content", document)
section += document.children