域 API¶
- class sphinx.domains.Domain(env: BuildEnvironment)[源代码]¶
一个域旨在成为一组针对相似性质对象的”对象”描述指令,以及相应的角色来创建对它们的引用.例子包括Python模块、类、函数等,模板语言的元素,Sphinx角色和指令等.
每个域都有一个单独的存储区,用于存储关于现有对象的信息以及如何在 self.data 中引用它们,这必须是一个字典.它还必须实现几个函数,以以统一的方式向 Sphinx 的各个部分公开对象信息,使用户能够以与域无关的方式引用或搜索对象.
关于 self.data :由于所有对象和交叉引用信息都存储在 BuildEnvironment 实例中, domain.data 对象也存储在 env.domaindata 字典中,键为 domain.name .在构建过程开始之前,每个活动领域都会被实例化并分配环境对象;因此, domaindata 字典必须是不存在的,或者是一个字典,其 ‘version’ 键等于领域类的
data_version
属性.否则,将引发 OSError ,并且序列化的环境将被丢弃.- get_objects() Iterable[tuple[str, str, str, str, str, int]] [源代码]¶
返回一个可迭代的”对象描述”.
对象描述是包含六个项目的元组:
name
完全限定名.
dispname
搜索/链接时显示的名称.
type
对象类型,
self.object_types
中的一个键.docname
该文档可以在此找到.
anchor
对象的锚点名称.
priority
对象的 “重要性 “程度(决定在搜索结果中的位置).包含以下之一:
1
默认优先级(置于全文匹配之前).
0
对象很重要(置于默认优先级对象之前).
2
对象不重要(位于全文匹配之后).
-1
对象根本不应出现在搜索结果中.
- merge_domaindata(docnames: list[str], otherdata: dict[str, Any]) None [源代码]¶
合并来自不同域数据清单的*docnames*信息(来自于并行构建中的子进程).
- process_doc(env: BuildEnvironment, docname: str, document: nodes.document) None [源代码]¶
处理文档在环境读取之后.
- process_field_xref(pnode: pending_xref) None [源代码]¶
处理在文档字段中创建的待处理的交叉引用.例如,附加有关当前范围的信息.
- resolve_any_xref(env: BuildEnvironment, fromdocname: str, builder: Builder, target: str, node: pending_xref, contnode: Element) list[tuple[str, Element]] [源代码]¶
使用给定的 target 解析挂起的 xref node.
引用来自于”any”或类似的角色,这意味着我们不知道类型.否则,参数与
resolve_xref()
相同.该方法必须返回一个元组列表(可能为空),格式为
('domain:role', newnode)
,其中'domain:role'
是可能创建同一引用的角色的名称,例如'py:func'
.newnode
是resolve_xref()
将返回的内容.Added in version 1.3.
- resolve_xref(env: BuildEnvironment, fromdocname: str, builder: Builder, typ: str, target: str, node: pending_xref, contnode: Element) Element | None [源代码]¶
解决具有给定 typ 和 target 的待处理交叉引用 node.
该方法应返回一个新节点,以替换xref节点,其中包含*contnode*,即交叉引用的标记内容.
如果没有找到解析,则可以返回 None;xref 节点将被传递给
missing-reference
事件,如果仍未找到解析,则将被 contnode 替换.该方法还可以引发
sphinx.environment.NoUri
以抑制发出missing-reference
事件.
- data_version = 0¶
数据版本,当 self.data 的格式发生变化时,增加此版本号
- enumerable_nodes: dict[type[Node], tuple[str, TitleGetter | None]] = {}¶
node_class -> (枚举节点类型, 标题获取器)
- label = ''¶
更长,更具描述性(用于消息)
- 类型:
域标签
- name = ''¶
应该简短,但独特
- 类型:
域名
- class sphinx.domains.ObjType(lname: str, /, *roles: Any, **attrs: Any)[源代码]¶
ObjType 是一种描述对象类型的类,域可以对该类型的对象进行文档化.在 Domain 子类的 object_types 属性中,对象类型名称映射到此类的实例.
构造函数参数:
lname: 类型的本地化名称(不包括域名)
roles:可以引用此类型对象的所有角色
attrs: 对象属性 – 当前仅知道 “searchprio”,它定义了对象在全文搜索索引中的优先级,参见
Domain.get_objects()
.
- class sphinx.domains.Index(domain: Domain)[源代码]¶
索引是特定领域索引的描述.要向一个领域添加索引,需继承 Index 类,并重写三个名称属性:
name is an identifier used for generating file names. It is also used for a hyperlink target for the index. Therefore, users can refer the index page using
ref
role and a string which is combined domain name andname
attribute (ex.:ref:`py-modindex`
).localname is the section title for the index.
shortname is a short name for the index, for use in the relation bar in HTML output. Can be empty to disable entries in the relation bar.
并提供一个
generate()
方法.然后,将索引类添加到您领域的 indices 列表中.扩展可以使用add_index_to_domain()
向现有领域添加索引.在 3.0 版本发生变更: 索引页面可以通过域名和索引名通过
ref
角色进行引用.- abstract generate(docnames: Iterable[str] | None = None) tuple[list[tuple[str, list[IndexEntry]]], bool] [源代码]¶
获取索引的条目.
如果给定了
docnames
,则限制为引用这些 docnames 的条目.返回值是一个元组
(content, collapse)
:collapse
一个布尔值,用于确定子条目是否应该默认折叠(适用于支持折叠子条目的输出格式).
content
:一系列
(字母, 条目)
元组,其中字母
是给定条目
的 “标题”,通常是起始字母,而条目
是单个条目的序列.每个条目是一个序列[名称, 子类型, 文档名称, 锚点, 额外, 修饰符, 描述]
.这个序列中的各个项具有以下含义:name
要显示的索引条目名称.
subtype
与子条目相关的类型.包括:
0
一个普通条目.
1
一个带有子条目的条目.
2
一个子条目.
docname
docname 该条目的所在位置.
anchor
文档内
docname
的条目标记extra
额外信息条目.
qualifier
描述的限定符.
descr
条目的描述.
资格和描述在某些输出格式(例如LaTeX)中不被渲染.
- class sphinx.directives.ObjectDescription(name, arguments, options, content, lineno, content_offset, block_text, state, state_machine)[源代码]¶
描述类、函数或类似对象的指令.并不直接使用,而是在特定领域的指令中被子类化,以添加自定义行为.
- _object_hierarchy_parts(sig_node: desc_signature) tuple[str, ...] [源代码]¶
返回一个字符串元组,每个条目对应于对象层次结构的每个部分(例如
('module', 'submodule', 'Class', 'method')
).返回的元组用于在目录中正确嵌套子项和父项,也可以在_toc_entry_name()
方法中使用.此方法不得在目录生成之外使用.
- _toc_entry_name(sig_node: desc_signature) str [源代码]¶
返回对象的目录条目的文本.
此函数在
run()
中被调用一次,用于设置目录条目的名称(在对象节点上设置了一个特殊属性_toc_name
,稍后在environment.collectors.toctree.TocTreeCollector.process_doc().build_toc()
中,当收集目录条目时使用).为了支持其对象的目录条目,领域必须重写此方法,同时遵循配置设置
toc_object_entries_show_parents
.领域还必须重写_object_hierarchy_parts()
,为对象层次结构的每个部分提供一个(字符串)条目.该方法的结果被设置在签名节点上,可以通过sig_node['_toc_parts']
访问,以便在此方法中使用.生成的元组还用于在目录中正确地将子项嵌套在父项中.这个方法的一个示例实现位于python领域中(
PyObject._toc_entry_name()
).python领域在:py:meth:handle_signature() 方法中设置_toc_parts
属性.
- add_target_and_index(name: ObjDescT, sig: str, signode: desc_signature) None [源代码]¶
添加交叉引用ID和条目到self.indexnode,如果适用.
name 是
handle_signature()
返回的任意值.
- handle_signature(sig: str, signode: desc_signature) ObjDescT [源代码]¶
解析签名 sig 为单独的节点,并将它们附加到 signode.如果引发 ValueError,解析将中止,整个 sig 将被放入一个单独的 desc_name 节点中.
返回值应该是一个标识对象的值.它会以未修改的状态传递给
add_target_and_index()
,此外仅用于跳过重复项.
- run() list[Node] [源代码]¶
主指令入口函数,当docutils遇到该指令时调用.
这个指令旨在易于子类化,因此它委托给几个额外的方法.它的作用是:
找出是否作为特定领域指令被调用,设置 self.domain
创建一个 desc 节点以容纳所有描述
解析标准选项,目前为 no-index
在需要时创建索引节点作为 self.indexnode
解析所有给定的签名(由 self.get_signatures() 返回),使用 self.handle_signature(),该方法应返回一个名称或引发 ValueError
使用 self.add_target_and_index() 添加索引条目
解析内容并处理其中的文档字段
- transform_content(content_node: desc_content) None [源代码]¶
在通过嵌套解析创建内容后调用,但在发出
object-description-transform
事件之前,以及在信息字段被转换之前.可以用于处理内容.
- final_argument_whitespace = True¶
最终参数可以包含空格吗?
- has_content = True¶
指令可以包含内容吗?
- option_spec: ClassVar[dict[str, Callable[[str], Any]]] = {'no-contents-entry': <function flag>, 'no-index': <function flag>, 'no-index-entry': <function flag>, 'no-typesetting': <function flag>, 'nocontentsentry': <function flag>, 'noindex': <function flag>, 'noindexentry': <function flag>}¶
选项名称映射到验证函数.
- optional_arguments = 0¶
所需参数后可选参数的数量.
- required_arguments = 1¶
所需指令参数的数量.