You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过API在Sphinx/docutils创建新文档?VHDL扩展需求

针对Sphinx VHDL扩展创建独立文档的解决方案

核心问题解答

1. 如何为每个VHDL构造生成独立HTML文件?

你可以直接通过Sphinx的环境API创建并注册docutils文档对象,无需经过ReST文件中转:

  • 选择合适钩子时机:在扩展的env-before-read-docs或builder-inited事件钩子中执行文档创建逻辑。
  • 手动构建文档树:利用已有的CodeDOM和docutils节点生成能力,为每个VHDL构造(实体、架构、包等)创建独立的docutils.nodes.document实例,直接填充对应的内容节点(标题、参数列表、注释段落等)。
  • 注册文档到Sphinx环境:调用Sphinx环境对象的add_doc()方法,传入唯一的文档路径(比如vhdl/entities/uart_tx)和你构建好的document对象。这个路径会对应最终生成的HTML文件路径(如vhdl/entities/uart_tx.html)。
  • 更新待处理文档列表:在env-updated钩子中,将新增的文档路径添加到env.found_docs集合中,确保Sphinx的Builder会处理这些文档。

2. 是否必须采用生成ReST文件的方式?

完全不需要。autoapi的ReST生成方式是为兼容没有直接操作docutils节点能力的场景设计的,而你已经具备解析VHDL到CodeDOM、生成docutils节点的能力,直接操作Sphinx环境和文档树是更高效的方案——既避免了序列化ReST再解析的冗余步骤,也能减少潜在的格式转换问题。

关键代码示例

from docutils.nodes import document, section, title
from sphinx.application import Sphinx

def setup(app: Sphinx):
    app.connect('env-before-read-docs', create_vhdl_docs)
    app.connect('env-updated', update_doc_list)

def create_vhdl_docs(app: Sphinx, env, docnames):
    # 假设你已经有了解析好的VHDL构造列表
    vhdl_constructs = get_parsed_vhdl_constructs()
    
    for construct in vhdl_constructs:
        # 创建docutils文档根节点
        doc = document()
        # 添加标题节点
        sect = section()
        sect += title(text=f"VHDL {construct.type}: {construct.name}")
        doc += sect
        
        # 这里添加你生成的其他内容节点(比如参数列表、注释等)
        doc += generate_construct_details(construct)
        
        # 注册文档到环境,指定唯一文档名
        doc_name = f"vhdl/{construct.type}s/{construct.name}"
        env.add_doc(doc_name, doc)
        
        # 缓存文档名,后续更新待处理列表
        if not hasattr(env, 'vhdl_docs'):
            env.vhdl_docs = []
        env.vhdl_docs.append(doc_name)

def update_doc_list(app: Sphinx, env):
    if hasattr(env, 'vhdl_docs'):
        env.found_docs.update(env.vhdl_docs)

内容的提问来源于stack exchange,提问作者Paebbels

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:21:02