Add StandardDomain.add_object()

This commit is contained in:
Takeshi KOMIYA 2018-08-11 13:18:54 +09:00
parent 4c96c6efce
commit 608ed677d7

View File

@ -13,6 +13,7 @@ import re
import unicodedata import unicodedata
import warnings import warnings
from copy import copy from copy import copy
from typing import cast
from docutils import nodes from docutils import nodes
from docutils.parsers.rst import directives from docutils.parsers.rst import directives
@ -79,8 +80,9 @@ class GenericObject(ObjectDescription):
indexentry = self.indextemplate % (name,) indexentry = self.indextemplate % (name,)
self.indexnode['entries'].append((indextype, indexentry, self.indexnode['entries'].append((indextype, indexentry,
targetname, '', None)) targetname, '', None))
self.env.domaindata['std']['objects'][self.objtype, name] = \
self.env.docname, targetname std = cast(StandardDomain, self.env.get_domain('std'))
std.add_object(self.objtype, name, self.env.docname, targetname)
class EnvVar(GenericObject): class EnvVar(GenericObject):
@ -141,8 +143,10 @@ class Target(SphinxDirective):
name = self.name name = self.name
if ':' in self.name: if ':' in self.name:
_, name = self.name.split(':', 1) _, name = self.name.split(':', 1)
self.env.domaindata['std']['objects'][name, fullname] = \
self.env.docname, targetname std = cast(StandardDomain, self.env.get_domain('std'))
std.add_object(name, fullname, self.env.docname, targetname)
return ret return ret
@ -248,15 +252,15 @@ def make_glossary_term(env, textnodes, index_key, source, lineno, new_id=None):
term.line = lineno term.line = lineno
gloss_entries = env.temp_data.setdefault('gloss_entries', set()) gloss_entries = env.temp_data.setdefault('gloss_entries', set())
objects = env.domaindata['std']['objects']
termtext = term.astext() termtext = term.astext()
if new_id is None: if new_id is None:
new_id = nodes.make_id('term-' + termtext) new_id = nodes.make_id('term-' + termtext)
if new_id in gloss_entries: if new_id in gloss_entries:
new_id = 'term-' + str(len(gloss_entries)) new_id = 'term-' + str(len(gloss_entries))
gloss_entries.add(new_id) gloss_entries.add(new_id)
objects['term', termtext.lower()] = env.docname, new_id
std = cast(StandardDomain, env.get_domain('std'))
std.add_object('term', termtext.lower(), env.docname, new_id)
# add an index entry too # add an index entry too
indexnode = addnodes.index() indexnode = addnodes.index()
@ -414,7 +418,7 @@ class ProductionList(SphinxDirective):
def run(self): def run(self):
# type: () -> List[nodes.Node] # type: () -> List[nodes.Node]
objects = self.env.domaindata['std']['objects'] domain = cast(StandardDomain, self.env.get_domain('std'))
node = addnodes.productionlist() # type: nodes.Node node = addnodes.productionlist() # type: nodes.Node
messages = [] # type: List[nodes.Node] messages = [] # type: List[nodes.Node]
i = 0 i = 0
@ -435,7 +439,7 @@ class ProductionList(SphinxDirective):
if idname not in self.state.document.ids: if idname not in self.state.document.ids:
subnode['ids'].append(idname) subnode['ids'].append(idname)
self.state.document.note_implicit_target(subnode, subnode) self.state.document.note_implicit_target(subnode, subnode)
objects['token', subnode['tokenname']] = self.env.docname, idname domain.add_object('token', subnode['tokenname'], self.env.docname, idname)
subnode.extend(token_xrefs(tokens)) subnode.extend(token_xrefs(tokens))
node.append(subnode) node.append(subnode)
return [node] + messages return [node] + messages
@ -644,6 +648,10 @@ class StandardDomain(Domain):
continue continue
labels[name] = docname, labelid, sectname labels[name] = docname, labelid, sectname
def add_object(self, objtype, name, docname, labelid):
# type: (unicode, unicode, unicode, unicode) -> None
self.data['objects'][objtype, name] = (docname, labelid)
def check_consistency(self): def check_consistency(self):
# type: () -> None # type: () -> None
for name, (docname, labelid, lineno) in self.data['citations'].items(): for name, (docname, labelid, lineno) in self.data['citations'].items():