Sphinx自定义指令解析markdown

问题描述 投票:0回答:1

所以,我知道我可以通过 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
markdown python-sphinx docutils myst
1个回答
0
投票

好吧,我最终找到了一个可行的解决方案。不以此为荣。

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
© www.soinside.com 2019 - 2024. All rights reserved.