Make paragraph labels render as plain text (not bold) under the text builder

develop
lethosor 2022-08-17 23:17:08 -04:00
parent 06c8269002
commit fa8bceba93
No known key found for this signature in database
GPG Key ID: 76A269552F4F58C1
1 changed files with 17 additions and 7 deletions

@ -5,7 +5,7 @@
import logging import logging
import os import os
from typing import List, Optional from typing import List, Optional, Type
import docutils.nodes as nodes import docutils.nodes as nodes
import docutils.parsers.rst.directives as rst_directives import docutils.parsers.rst.directives as rst_directives
@ -19,12 +19,17 @@ import dfhack.util
logger = sphinx.util.logging.getLogger(__name__) logger = sphinx.util.logging.getLogger(__name__)
def get_label_class(builder: sphinx.builders.Builder) -> Type[nodes.Inline]:
if builder.format == 'text':
return nodes.inline
else:
return nodes.strong
def make_labeled_paragraph(label: Optional[str]=None, content: Optional[str]=None, def make_labeled_paragraph(label: Optional[str]=None, content: Optional[str]=None,
label_class=nodes.strong, content_class=nodes.inline) -> nodes.paragraph: label_class=nodes.strong, content_class=nodes.inline) -> nodes.paragraph:
p = nodes.paragraph('', '') p = nodes.paragraph('', '')
if label is not None: if label is not None:
p += [ p += [
# TODO: use inline instead of strong when rendering to text
label_class('', '{}:'.format(label)), label_class('', '{}:'.format(label)),
nodes.inline('', ' '), nodes.inline('', ' '),
] ]
@ -63,13 +68,13 @@ def scan_all_keybinds(root_dir):
return keybindings return keybindings
def render_dfhack_keybind(command) -> List[nodes.paragraph]: def render_dfhack_keybind(command, builder: sphinx.builders.Builder) -> List[nodes.paragraph]:
_KEYBINDS_RENDERED.add(command) _KEYBINDS_RENDERED.add(command)
out = [] out = []
if command not in _KEYBINDS: if command not in _KEYBINDS:
return out return out
for keycmd, key, ctx in _KEYBINDS[command]: for keycmd, key, ctx in _KEYBINDS[command]:
n = make_labeled_paragraph('Keybinding') n = make_labeled_paragraph('Keybinding', label_class=get_label_class(builder))
for k in key: for k in key:
n += nodes.inline(k, k, classes=['kbd']) n += nodes.inline(k, k, classes=['kbd'])
if keycmd != command: if keycmd != command:
@ -104,6 +109,11 @@ class DFHackToolDirectiveBase(sphinx.directives.ObjectDescription):
def wrap_box(*children: List[nodes.Node]) -> nodes.Admonition: def wrap_box(*children: List[nodes.Node]) -> nodes.Admonition:
return nodes.topic('', *children, classes=['dfhack-tool-summary']) return nodes.topic('', *children, classes=['dfhack-tool-summary'])
def make_labeled_paragraph(self, *args, **kwargs):
# convenience wrapper to set label_class to the desired builder-specific node type
kwargs.setdefault('label_class', get_label_class(self.env.app.builder))
return make_labeled_paragraph(*args, **kwargs)
def render_content(self) -> List[nodes.Node]: def render_content(self) -> List[nodes.Node]:
raise NotImplementedError raise NotImplementedError
@ -119,7 +129,7 @@ class DFHackToolDirective(DFHackToolDirectiveBase):
} }
def render_content(self) -> List[nodes.Node]: def render_content(self) -> List[nodes.Node]:
tag_paragraph = make_labeled_paragraph('Tags') tag_paragraph = self.make_labeled_paragraph('Tags')
for tag in self.options.get('tags', []): for tag in self.options.get('tags', []):
tag_paragraph += [ tag_paragraph += [
addnodes.pending_xref(tag, nodes.inline(text=tag), **{ addnodes.pending_xref(tag, nodes.inline(text=tag), **{
@ -153,9 +163,9 @@ class DFHackCommandDirective(DFHackToolDirectiveBase):
def render_content(self) -> List[nodes.Node]: def render_content(self) -> List[nodes.Node]:
command = self.get_name_or_docname() command = self.get_name_or_docname()
return [ return [
make_labeled_paragraph('Command', command, content_class=nodes.literal), self.make_labeled_paragraph('Command', command, content_class=nodes.literal),
nodes.paragraph('', '', nodes.inline(text=self.options.get('summary', ''))), nodes.paragraph('', '', nodes.inline(text=self.options.get('summary', ''))),
*render_dfhack_keybind(command), *render_dfhack_keybind(command, builder=self.env.app.builder),
] ]