Skip to content

Commit

Permalink
docs/sphinx: fix extra stuff in TOC after freeform QMP sections
Browse files Browse the repository at this point in the history
Freeform sections with titles are currently generating a TOC entry for
the first paragraph in the section after the header, which is not what
we want.

(Easiest to observe directly in the QMP reference manual's
"Introduction" section.)

When freeform sections are parsed, we create both a section header *and*
an empty, title-less section. This causes some problems with sphinx's
post-parse tree transforms, see also 2664f31 - this is a similar issue:
Sphinx doesn't like section-less titles and it also doesn't like
title-less sections.

Modify qapidoc.py to parse text directly into the preceding section
title as child nodes, eliminating the section duplication. This removes
the extra text from the TOC.

Only very, very lightly tested: "it looks right at a glance" ™️. I am
still in the process of rewriting qapidoc, so I didn't give it much
deeper thought.

Reported-by: Markus Armbruster <[email protected]>
Signed-off-by: John Snow <[email protected]>
Message-ID: <[email protected]>
  • Loading branch information
jnsnow authored and Markus Armbruster committed Aug 27, 2024
1 parent afaee42 commit 43e0d14
Showing 1 changed file with 2 additions and 3 deletions.
5 changes: 2 additions & 3 deletions docs/sphinx/qapidoc.py
Original file line number Diff line number Diff line change
Expand Up @@ -388,6 +388,7 @@ def _start_new_heading(self, heading, level):
self._active_headings[level - 1] += snode
self._active_headings = self._active_headings[:level]
self._active_headings.append(snode)
return snode

def _add_node_to_current_heading(self, node):
"""Add the node to whatever the current active heading is"""
Expand Down Expand Up @@ -417,13 +418,11 @@ def freeform(self, doc):
# the first line of the block)
(heading, _, text) = text.partition('\n')
(leader, _, heading) = heading.partition(' ')
self._start_new_heading(heading, len(leader))
node = self._start_new_heading(heading, len(leader))
if text == '':
return

node = self._make_section(None)
self._parse_text_into_node(text, node)
self._add_node_to_current_heading(node)
self._cur_doc = None

def _parse_text_into_node(self, doctext, node):
Expand Down

0 comments on commit 43e0d14

Please sign in to comment.