From 35152bf02250061dee89136f786ee91c1a3a9600 Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Tue, 20 Sep 2022 22:51:44 -0700 Subject: [PATCH] create genindex entries for all tools and commands --- docs/sphinx_extensions/dfhack/tool_docs.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/docs/sphinx_extensions/dfhack/tool_docs.py b/docs/sphinx_extensions/dfhack/tool_docs.py index c7883e14c..6f5df5568 100644 --- a/docs/sphinx_extensions/dfhack/tool_docs.py +++ b/docs/sphinx_extensions/dfhack/tool_docs.py @@ -8,14 +8,18 @@ import os from typing import List, Optional, Type import docutils.nodes as nodes +from docutils.nodes import Node import docutils.parsers.rst.directives as rst_directives import sphinx import sphinx.addnodes as addnodes import sphinx.directives +from sphinx.util.docutils import SphinxDirective +from sphinx.util.nodes import process_index_entry import dfhack.util + logger = sphinx.util.logging.getLogger(__name__) @@ -46,6 +50,17 @@ def make_summary(builder: sphinx.builders.Builder, summary: str) -> nodes.paragr para += nodes.inline(text=summary) return para +def make_index(directive: SphinxDirective, name: str, summary: str) -> List[Node]: + targetid = 'index-%s' % directive.env.new_serialno('index') + targetnode = nodes.target('', '', ids=[targetid]) + directive.state.document.note_explicit_target(targetnode) + indexnode = addnodes.index() + indexnode['entries'] = [] + indexnode['inline'] = False + directive.set_source_info(indexnode) + entry_text = 'single: {}; {}'.format(name, summary) + indexnode['entries'].extend(process_index_entry(entry_text, targetnode['ids'][0])) + return [indexnode, targetnode] _KEYBINDS = {} _KEYBINDS_RENDERED = set() # commands whose keybindings have been rendered @@ -160,6 +175,7 @@ class DFHackToolDirective(DFHackToolDirectiveBase): ret_nodes = [tag_paragraph] if 'no-command' in self.options: + ret_nodes += make_index(self, self.get_name_or_docname() + ' (plugin)', self.options.get('summary', '')) ret_nodes += [make_summary(self.env.app.builder, self.options.get('summary', ''))] return ret_nodes @@ -177,11 +193,13 @@ class DFHackCommandDirective(DFHackToolDirectiveBase): def render_content(self) -> List[nodes.Node]: command = self.get_name_or_docname() - return [ - self.make_labeled_paragraph('Command', command, content_class=nodes.literal), + ret_nodes = [self.make_labeled_paragraph('Command', command, content_class=nodes.literal)] + ret_nodes += make_index(self, command, self.options.get('summary', '')) + ret_nodes += [ make_summary(self.env.app.builder, self.options.get('summary', '')), *render_dfhack_keybind(command, builder=self.env.app.builder), ] + return ret_nodes def register(app):