[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 10/23] docs/qapidoc: add visit_freeform() method
From: |
Markus Armbruster |
Subject: |
Re: [PATCH 10/23] docs/qapidoc: add visit_freeform() method |
Date: |
Fri, 20 Dec 2024 14:25:07 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
John Snow <jsnow@redhat.com> writes:
> Signed-off-by: John Snow <jsnow@redhat.com>
> ---
> docs/sphinx/qapidoc.py | 47 ++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 47 insertions(+)
>
> diff --git a/docs/sphinx/qapidoc.py b/docs/sphinx/qapidoc.py
> index 7d2f7bfb415..6f8f69077b1 100644
> --- a/docs/sphinx/qapidoc.py
> +++ b/docs/sphinx/qapidoc.py
> @@ -133,6 +133,53 @@ def visit_module(self, path: str) -> None:
> self.add_line_raw(f".. qapi:module:: {name}", path, 1)
> self.ensure_blank_line()
>
> + def visit_freeform(self, doc) -> None:
> + # Once the old qapidoc transformer is deprecated,
> + # freeform sections can be transformed into pure rST.
> + #
> + # For now, translate our micro-format into rST.
> + # Code adapted from Peter Maydell's freeform().
> +
> + assert len(doc.all_sections) == 1, doc.all_sections
> + body = doc.all_sections[0]
> + text = body.text
> + info = doc.info
> +
> + if re.match(r"=+ ", text):
> + # Section/subsection heading (if present, will always be the
> + # first line of the block)
> + (heading, _, text) = text.partition("\n")
> + (leader, _, heading) = heading.partition(" ")
> + level = len(leader) + 1 # Implicit +1 for heading in .rST stub
> +
> + #
> https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html#sections
> + markers = {
> + 1: "#",
> + 2: "*",
> + 3: "=",
> + 4: "-",
> + 5: "^",
> + 6: '"',
> + }
> + overline = level <= 2
> + marker = markers[level]
> +
> + self.ensure_blank_line()
> + # This credits all 2 or 3 lines to the single source line.
> + if overline:
> + self.add_line(marker * len(heading), info)
> + self.add_line(heading, info)
> + self.add_line(marker * len(heading), info)
> + self.ensure_blank_line()
> +
> + # Eat blank line(s) and advance info
> + trimmed = text.lstrip("\n")
> + text = trimmed
> + info = info.next_line(len(text) - len(trimmed) + 1)
We could instead eat newlines one at a time, calling .next_line()
without an argument for each newline eaten. Less efficient, but won't
matter here. Possibly easier to understand.
> +
> + self.add_lines(text, info)
> + self.ensure_blank_line()
> +
>
> # Disable black auto-formatter until re-enabled:
> # fmt: off
- Re: [PATCH 04/23] qapi: expand tags to all doc sections, (continued)
- [PATCH 05/23] qapi/schema: add __repr__ to QAPIDoc.Section, John Snow, 2024/12/12
- [PATCH 06/23] docs/qapidoc: add transmogrifier stub, John Snow, 2024/12/12
- [PATCH 07/23] docs/qapidoc: add transmogrifier class stub, John Snow, 2024/12/12
- [PATCH 08/23] docs/qapidoc: add visit_module() method, John Snow, 2024/12/12
- [PATCH 09/23] qapi/source: allow multi-line QAPISourceInfo advancing, John Snow, 2024/12/12
- [PATCH 10/23] docs/qapidoc: add visit_freeform() method, John Snow, 2024/12/12
- Re: [PATCH 10/23] docs/qapidoc: add visit_freeform() method,
Markus Armbruster <=
- [PATCH 11/23] docs/qapidoc: add preamble() method, John Snow, 2024/12/12
- [PATCH 12/23] docs/qapidoc: add visit_paragraph() method, John Snow, 2024/12/12
- [PATCH 14/23] docs/qapidoc: add format_type() method, John Snow, 2024/12/12
- [PATCH 15/23] docs/qapidoc: add add_field() and generate_field() helper methods, John Snow, 2024/12/12
- [PATCH 13/23] docs/qapidoc: add visit_errors() method, John Snow, 2024/12/12
- [PATCH 16/23] docs/qapidoc: add visit_feature() method, John Snow, 2024/12/12
- [PATCH 19/23] docs/qapidoc: add visit_member() method, John Snow, 2024/12/12
- [PATCH 17/23] docs/qapidoc: record current documented entity in transmogrifier, John Snow, 2024/12/12