mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00

Change get_doc_indented() to preserve indentation on all subsequent text lines, and create a compatibility dedent() function for qapidoc.py that removes indentation the same way get_doc_indented() did. This is being done for the benefit of a new qapidoc generator which requires that indentation in argument and features sections are preserved. Prior to this patch, a section like this: ``` @name: lorem ipsum dolor sit amet consectetur adipiscing elit ``` would have its body text be parsed into: ``` lorem ipsum dolor sit amet consectetur adipiscing elit ``` We want to preserve the indentation for even the first body line so that the entire block can be parsed directly as rST. This patch would now parse that segment into: ``` lorem ipsum dolor sit amet consectetur adipiscing elit ``` This is helpful for formatting arguments and features as field lists in rST, where the new generator will format this information as: ``` :arg type name: lorem ipsum dolor sit amet consectetur apidiscing elit ``` ...and can be formed by the simple concatenation of the field list construct and the body text. The indents help preserve the continuation of a block-level element, and further allow the use of additional rST block-level constructs such as code blocks, lists, and other such markup. This understandably breaks the existing qapidoc.py; so a new function is added there to dedent the text for compatibility. Once the new generator is merged, this function will not be needed any longer and can be dropped. I verified this patch changes absolutely nothing by comparing the md5sums of the QMP ref html pages both before and after the change, so it's certified inert. QAPI test output has been updated to reflect the new strategy of preserving indents for rST. Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Message-ID: <20240626222128.406106-6-jsnow@redhat.com> [Lost commit message paragraph restored] Signed-off-by: Markus Armbruster <armbru@redhat.com>
208 lines
3.4 KiB
Text
208 lines
3.4 KiB
Text
module ./builtin
|
|
object q_empty
|
|
enum QType
|
|
prefix QTYPE
|
|
member none
|
|
member qnull
|
|
member qnum
|
|
member qstring
|
|
member qdict
|
|
member qlist
|
|
member qbool
|
|
module doc-good.json
|
|
enum Enum
|
|
member one
|
|
if IFONE
|
|
feature enum-member-feat
|
|
member two
|
|
if IFCOND
|
|
feature enum-feat
|
|
object Base
|
|
member base1: Enum optional=False
|
|
if {'all': ['IFALL1', 'IFALL2']}
|
|
object Variant1
|
|
member var1: str optional=False
|
|
if IFSTR
|
|
feature member-feat
|
|
feature variant1-feat
|
|
object Variant2
|
|
object Object
|
|
base Base
|
|
tag base1
|
|
case one: Variant1
|
|
case two: Variant2
|
|
if {'any': ['IFONE', 'IFTWO']}
|
|
feature union-feat1
|
|
alternate Alternate
|
|
tag type
|
|
case i: int
|
|
case b: bool
|
|
if {'not': {'any': ['IFONE', 'IFTWO']}}
|
|
feature alt-feat
|
|
object q_obj_cmd-arg
|
|
member arg1: int optional=False
|
|
member arg2: str optional=True
|
|
member arg3: bool optional=False
|
|
command cmd q_obj_cmd-arg -> Object
|
|
gen=True success_response=True boxed=False oob=False preconfig=False
|
|
feature cmd-feat1
|
|
feature cmd-feat2
|
|
command cmd-boxed Object -> None
|
|
gen=True success_response=True boxed=True oob=False preconfig=False
|
|
feature cmd-feat1
|
|
feature cmd-feat2
|
|
event EVT_BOXED Object
|
|
boxed=True
|
|
feature feat3
|
|
doc freeform
|
|
body=
|
|
= Section
|
|
doc freeform
|
|
body=
|
|
== Subsection
|
|
|
|
*with emphasis*
|
|
@var {in braces}
|
|
|
|
* List item one
|
|
* Two, multiple
|
|
lines
|
|
|
|
* Three
|
|
Still in list
|
|
|
|
Not in list
|
|
|
|
- Second list
|
|
Note: still in list
|
|
|
|
Note: not in list
|
|
|
|
1. Third list
|
|
is numbered
|
|
|
|
2. another item
|
|
|
|
Returns: the King
|
|
Since: the first age
|
|
Notes:
|
|
|
|
1. Lorem ipsum dolor sit amet
|
|
|
|
2. Ut enim ad minim veniam
|
|
|
|
Duis aute irure dolor
|
|
|
|
Example:
|
|
|
|
-> in
|
|
<- out
|
|
Examples:
|
|
- *verbatim*
|
|
- {braces}
|
|
doc symbol=Enum
|
|
body=
|
|
|
|
arg=one
|
|
The _one_ {and only}, description on the same line
|
|
arg=two
|
|
|
|
feature=enum-feat
|
|
Also _one_ {and only}
|
|
feature=enum-member-feat
|
|
a member feature
|
|
section=None
|
|
@two is undocumented
|
|
doc symbol=Base
|
|
body=
|
|
|
|
arg=base1
|
|
description starts on a new line,
|
|
minimally indented
|
|
doc symbol=Variant1
|
|
body=
|
|
A paragraph
|
|
|
|
Another paragraph
|
|
|
|
@var1 is undocumented
|
|
arg=var1
|
|
|
|
feature=variant1-feat
|
|
a feature
|
|
feature=member-feat
|
|
a member feature
|
|
doc symbol=Variant2
|
|
body=
|
|
|
|
doc symbol=Object
|
|
body=
|
|
|
|
feature=union-feat1
|
|
a feature
|
|
doc symbol=Alternate
|
|
body=
|
|
|
|
arg=i
|
|
description starts on the same line
|
|
remainder indented the same
|
|
@b is undocumented
|
|
arg=b
|
|
|
|
feature=alt-feat
|
|
a feature
|
|
doc freeform
|
|
body=
|
|
== Another subsection
|
|
doc symbol=cmd
|
|
body=
|
|
|
|
arg=arg1
|
|
description starts on a new line,
|
|
indented
|
|
arg=arg2
|
|
description starts on the same line
|
|
remainder indented differently
|
|
arg=arg3
|
|
|
|
feature=cmd-feat1
|
|
a feature
|
|
feature=cmd-feat2
|
|
another feature
|
|
section=Note
|
|
@arg3 is undocumented
|
|
section=Returns
|
|
@Object
|
|
section=Errors
|
|
some
|
|
section=TODO
|
|
frobnicate
|
|
section=Notes
|
|
- Lorem ipsum dolor sit amet
|
|
- Ut enim ad minim veniam
|
|
|
|
Duis aute irure dolor
|
|
section=Example
|
|
-> in
|
|
<- out
|
|
section=Examples
|
|
- *verbatim*
|
|
- {braces}
|
|
section=Since
|
|
2.10
|
|
doc symbol=cmd-boxed
|
|
body=
|
|
If you're bored enough to read this, go see a video of boxed cats
|
|
feature=cmd-feat1
|
|
a feature
|
|
feature=cmd-feat2
|
|
another feature
|
|
section=Example
|
|
-> in
|
|
|
|
<- out
|
|
doc symbol=EVT_BOXED
|
|
body=
|
|
|
|
feature=feat3
|
|
a feature
|