summaryrefslogtreecommitdiff
path: root/sphinx/domains/std.py
diff options
context:
space:
mode:
Diffstat (limited to 'sphinx/domains/std.py')
-rw-r--r--sphinx/domains/std.py65
1 files changed, 41 insertions, 24 deletions
diff --git a/sphinx/domains/std.py b/sphinx/domains/std.py
index 8769309b..36fea796 100644
--- a/sphinx/domains/std.py
+++ b/sphinx/domains/std.py
@@ -205,6 +205,41 @@ class OptionXRefRole(XRefRole):
return title, target
+def make_termnodes_from_paragraph_node(env, node):
+ gloss_entries = env.temp_data.setdefault('gloss_entries', set())
+ objects = env.domaindata['std']['objects']
+
+ termtext = node.astext()
+ new_id = 'term-' + nodes.make_id(termtext)
+ if new_id in gloss_entries:
+ new_id = 'term-' + str(len(gloss_entries))
+ gloss_entries.add(new_id)
+ objects['term', termtext.lower()] = env.docname, new_id
+
+ # add an index entry too
+ indexnode = addnodes.index()
+ indexnode['entries'] = [('single', termtext, new_id, 'main')]
+ new_termnodes = []
+ new_termnodes.append(indexnode)
+ new_termnodes.extend(node.children)
+ new_termnodes.append(addnodes.termsep())
+ for termnode in new_termnodes:
+ termnode.source, termnode.line = node.source, node.line
+
+ return new_id, termtext, new_termnodes
+
+
+def make_term_from_paragraph_node(termnodes, ids):
+ # make a single "term" node with all the terms, separated by termsep
+ # nodes (remove the dangling trailing separator)
+ term = nodes.term('', '', *termnodes[:-1])
+ term.source, term.line = termnodes[0].source, termnodes[0].line
+ term.rawsource = term.astext()
+ term['ids'].extend(ids)
+ term['names'].extend(ids)
+ return term
+
+
class Glossary(Directive):
"""
Directive to create a glossary with cross-reference targets for :term:
@@ -221,8 +256,6 @@ class Glossary(Directive):
def run(self):
env = self.state.document.settings.env
- objects = env.domaindata['std']['objects']
- gloss_entries = env.temp_data.setdefault('gloss_entries', set())
node = addnodes.glossary()
node.document = self.state.document
@@ -296,31 +329,15 @@ class Glossary(Directive):
# get a text-only representation of the term and register it
# as a cross-reference target
tmp = nodes.paragraph('', '', *res[0])
- termtext = tmp.astext()
- new_id = 'term-' + nodes.make_id(termtext)
- if new_id in gloss_entries:
- new_id = 'term-' + str(len(gloss_entries))
- gloss_entries.add(new_id)
+ tmp.source = source
+ tmp.line = lineno
+ new_id, termtext, new_termnodes = \
+ make_termnodes_from_paragraph_node(env, tmp)
ids.append(new_id)
- objects['term', termtext.lower()] = env.docname, new_id
termtexts.append(termtext)
- # add an index entry too
- indexnode = addnodes.index()
- indexnode['entries'] = [('single', termtext, new_id, 'main')]
- new_termnodes = []
- new_termnodes.append(indexnode)
- new_termnodes.extend(res[0])
- new_termnodes.append(addnodes.termsep())
- for termnode in new_termnodes:
- termnode.source, termnode.line = source, lineno
termnodes.extend(new_termnodes)
- # make a single "term" node with all the terms, separated by termsep
- # nodes (remove the dangling trailing separator)
- term = nodes.term('', '', *termnodes[:-1])
- term.source, term.line = termnodes[0].source, termnodes[0].line
- term.rawsource = term.astext()
- term['ids'].extend(ids)
- term['names'].extend(ids)
+
+ term = make_term_from_paragraph_node(termnodes, ids)
term += system_messages
defnode = nodes.definition()