From nobody Thu Nov 13 20:40:35 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1582639758; cv=none; d=zohomail.com; s=zohoarc; b=IbZC9J5lmxtxPC+aM8OitK2rGU1hQ3Eeye6DSXd95umleteNUaTDshqg5a71S/hPnFmTuq/WVTlgtiDtj8yvJe2vQtbSf69lBqdIyIcKzDFjzd7LF1r9R7tvBSKaDf7utDEIJlEOPiHuG5K29Adq/rvDrA1MtuB+FYfZlc4psvI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1582639758; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=rfB6aFnyMDHV8qgUZJ4NYi9OqE7EgeqrDtxkONHm7eg=; b=IEtAqU7kq9JjwsUrjwDNbupsneAWKVSfpoOsKMAXQQ2vfo8vjkKTAdpQP/I8QmTWugcuv5b9xY8mmFoD+xibEDf8kSM+0r6DrA10PJd/CuhXvBfPvmPKWHwLBVcEwA9ggGJxXTWlhhxkoHl4IMVfuygVzs86X8NVjWXnaYnGoI8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1582639758190424.4595832950446; Tue, 25 Feb 2020 06:09:18 -0800 (PST) Received: from localhost ([::1]:57195 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6ath-00063T-3T for importer@patchew.org; Tue, 25 Feb 2020 09:09:17 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:44896) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6ape-0006zL-3m for qemu-devel@nongnu.org; Tue, 25 Feb 2020 09:05:11 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j6apY-0005L9-Qe for qemu-devel@nongnu.org; Tue, 25 Feb 2020 09:05:06 -0500 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:52849) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1j6apY-0005Kl-GT for qemu-devel@nongnu.org; Tue, 25 Feb 2020 09:05:00 -0500 Received: by mail-wm1-x344.google.com with SMTP id p9so3130891wmc.2 for ; Tue, 25 Feb 2020 06:05:00 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id f127sm4322136wma.4.2020.02.25.06.04.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2020 06:04:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=rfB6aFnyMDHV8qgUZJ4NYi9OqE7EgeqrDtxkONHm7eg=; b=R1Y+mT6i3F9soc2z35ge1zpwd62tg6CtONy/C+oQn3kD+2wYAdEkTjc2lWzZ9yZtfy vcH0t8AzGFln0aCPMhifQ1BpcJtlErSBxiJnx7sghHI+DamXK9R5Ef+h8mOeSSh3a90U dnM2FIBaC3q3tSgOsdtLw8WfKtQTtPFW+w0epQTEXP3jGEN6ld8AqMpUBPxyaaJhaFpn Rn1xYMGOV4cVbdB5wDBgWftNQagceITPIoRc4U/yAOV7epyjxfGqk0uZDvFZ4dWX+VQM w+ixE3/wOBbRwdOTbrW/hXciowvtizqiqISAJtGcKhNjbkbc22HKS3Hyv77V4JpKB9JS uwoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=rfB6aFnyMDHV8qgUZJ4NYi9OqE7EgeqrDtxkONHm7eg=; b=FwtWQWM90o4JuyBRPOTgmjGV26nF1PAeBRCC4/UVPxaEkScOhVfeZ8WNN2KlZRGPQs gOF5pa+mNkxPpMcVj9g5FFChjxaTGyIrpJXbet8Xw1o0pi4aww48Gf9F5iOUIpGYWqGK +X+qbzo/1vDfQ3Zb87mYweMVUDEoO+TUWdYNyPK+pIAV5+3usmJ2Yd9cXlonmF6gOoGp 0O5OGTKvajJpizXblrJe+rsxKcK6tVxGQG4UfDqWZrwX3DISSFh+8xpY0Q2XDazYlBOf GS4jBhQikXIkHVMbs273dTmW5qiAxC0N6ygsapJ540/RImhd+adQ52mywyocwcn72Vjz bzKA== X-Gm-Message-State: APjAAAUN6yB0jjxapCSRti7lW24kt4d5wMeWf8SslZBbDCu1arP0XdKg Qv16ZravHrRIQat9RLeIM+SwJqOQ6p06BA== X-Google-Smtp-Source: APXvYqyZe3AcuyxM45cBn0TdGnE54UI66LifqNIH3svq/Ktzb0lPjTadJWLN/9bvWc98rQVJtCbdLA== X-Received: by 2002:a05:600c:294a:: with SMTP id n10mr5629957wmd.11.1582639498531; Tue, 25 Feb 2020 06:04:58 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PATCH v3 11/12] scripts/qapi: Remove texinfo generation support Date: Tue, 25 Feb 2020 14:04:36 +0000 Message-Id: <20200225140437.20609-12-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200225140437.20609-1-peter.maydell@linaro.org> References: <20200225140437.20609-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::344 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Markus Armbruster , Michael Roth , Stefan Hajnoczi , John Snow Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" We no longer use the generated texinfo format documentation, so delete the code that generates it, and the test case for the generation. Signed-off-by: Peter Maydell --- Makefile | 1 - tests/Makefile.include | 15 +- scripts/qapi-gen.py | 2 - scripts/qapi/doc.py | 302 -------------------------------- scripts/qapi/gen.py | 7 - tests/qapi-schema/doc-good.texi | 281 ----------------------------- 6 files changed, 1 insertion(+), 607 deletions(-) delete mode 100644 scripts/qapi/doc.py delete mode 100644 tests/qapi-schema/doc-good.texi diff --git a/Makefile b/Makefile index f6e7f500416..191fd7f6e3f 100644 --- a/Makefile +++ b/Makefile @@ -611,7 +611,6 @@ qemu-keymap$(EXESUF): QEMU_CFLAGS +=3D $(XKBCOMMON_CFLA= GS) qapi-py =3D $(SRC_PATH)/scripts/qapi/__init__.py \ $(SRC_PATH)/scripts/qapi/commands.py \ $(SRC_PATH)/scripts/qapi/common.py \ -$(SRC_PATH)/scripts/qapi/doc.py \ $(SRC_PATH)/scripts/qapi/error.py \ $(SRC_PATH)/scripts/qapi/events.py \ $(SRC_PATH)/scripts/qapi/expr.py \ diff --git a/tests/Makefile.include b/tests/Makefile.include index edcbd475aa7..ee84107e1be 100644 --- a/tests/Makefile.include +++ b/tests/Makefile.include @@ -32,7 +32,6 @@ export SRC_PATH qapi-py =3D $(SRC_PATH)/scripts/qapi/__init__.py \ $(SRC_PATH)/scripts/qapi/commands.py \ $(SRC_PATH)/scripts/qapi/common.py \ -$(SRC_PATH)/scripts/qapi/doc.py \ $(SRC_PATH)/scripts/qapi/error.py \ $(SRC_PATH)/scripts/qapi/events.py \ $(SRC_PATH)/scripts/qapi/expr.py \ @@ -488,16 +487,8 @@ tests/test-qapi-gen-timestamp: \ $(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-gen.py \ -o tests -p "test-" $<, \ "GEN","$(@:%-timestamp=3D%)") - @rm -f tests/test-qapi-doc.texi @>$@ =20 -tests/qapi-schema/doc-good.test.texi: $(SRC_PATH)/tests/qapi-schema/doc-go= od.json $(qapi-py) - $(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/qapi-gen.py \ - -o tests/qapi-schema -p "doc-good-" $<, \ - "GEN","$@") - @mv tests/qapi-schema/doc-good-qapi-doc.texi $@ - @rm -f tests/qapi-schema/doc-good-qapi-*.[ch] tests/qapi-schema/doc-good-= qmp-*.[ch] - tests/qtest/dbus-vmstate1.h tests/qtest/dbus-vmstate1.c: tests/qtest/dbus-= vmstate1-gen-timestamp ; tests/qtest/dbus-vmstate1-gen-timestamp: $(SRC_PATH)/tests/qtest/dbus-vmst= ate1.xml $(call quiet-command,$(GDBUS_CODEGEN) $< \ @@ -849,10 +840,6 @@ check-tests/qapi-schema/frontend: $(addprefix $(SRC_PA= TH)/, $(check-qapi-schema- PYTHONIOENCODING=3Dutf-8 $(PYTHON) $(SRC_PATH)/tests/qapi-schema/test-q= api.py $^, \ TEST, check-qapi-schema) =20 -.PHONY: check-tests/qapi-schema/doc-good.texi -check-tests/qapi-schema/doc-good.texi: tests/qapi-schema/doc-good.test.texi - @diff -u $(SRC_PATH)/tests/qapi-schema/doc-good.texi $< - .PHONY: check-decodetree check-decodetree: $(call quiet-command, \ @@ -900,7 +887,7 @@ check-acceptance: check-venv $(TESTS_RESULTS_DIR) # Consolidated targets =20 .PHONY: check-block check-qapi-schema check-qtest check-unit check check-c= lean -check-qapi-schema: check-tests/qapi-schema/frontend check-tests/qapi-schem= a/doc-good.texi +check-qapi-schema: check-tests/qapi-schema/frontend check-qtest: $(patsubst %,check-qtest-%, $(QTEST_TARGETS)) ifeq ($(CONFIG_TOOLS),y) check-block: $(patsubst %,check-%, $(check-block-y)) diff --git a/scripts/qapi-gen.py b/scripts/qapi-gen.py index 4b03f7d53be..541e8c1f55d 100755 --- a/scripts/qapi-gen.py +++ b/scripts/qapi-gen.py @@ -10,7 +10,6 @@ import re import sys =20 from qapi.commands import gen_commands -from qapi.doc import gen_doc from qapi.events import gen_events from qapi.introspect import gen_introspect from qapi.schema import QAPIError, QAPISchema @@ -51,7 +50,6 @@ def main(argv): gen_commands(schema, args.output_dir, args.prefix) gen_events(schema, args.output_dir, args.prefix) gen_introspect(schema, args.output_dir, args.prefix, args.unmask) - gen_doc(schema, args.output_dir, args.prefix) =20 =20 if __name__ =3D=3D '__main__': diff --git a/scripts/qapi/doc.py b/scripts/qapi/doc.py deleted file mode 100644 index 26cd1a1751e..00000000000 --- a/scripts/qapi/doc.py +++ /dev/null @@ -1,302 +0,0 @@ -# QAPI texi generator -# -# This work is licensed under the terms of the GNU LGPL, version 2+. -# See the COPYING file in the top-level directory. -"""This script produces the documentation of a qapi schema in texinfo form= at""" - -import re -from qapi.gen import QAPIGenDoc, QAPISchemaVisitor - - -MSG_FMT =3D """ -@deftypefn {type} {{}} {name} - -{body}{members}{features}{sections} -@end deftypefn - -""".format - -TYPE_FMT =3D """ -@deftp {{{type}}} {name} - -{body}{members}{features}{sections} -@end deftp - -""".format - -EXAMPLE_FMT =3D """@example -{code} -@end example -""".format - - -def subst_strong(doc): - """Replaces *foo* by @strong{foo}""" - return re.sub(r'\*([^*\n]+)\*', r'@strong{\1}', doc) - - -def subst_emph(doc): - """Replaces _foo_ by @emph{foo}""" - return re.sub(r'\b_([^_\n]+)_\b', r'@emph{\1}', doc) - - -def subst_vars(doc): - """Replaces @var by @code{var}""" - return re.sub(r'@([\w-]+)', r'@code{\1}', doc) - - -def subst_braces(doc): - """Replaces {} with @{ @}""" - return doc.replace('{', '@{').replace('}', '@}') - - -def texi_example(doc): - """Format @example""" - # TODO: Neglects to escape @ characters. - # We should probably escape them in subst_braces(), and rename the - # function to subst_special() or subs_texi_special(). If we do that, = we - # need to delay it until after subst_vars() in texi_format(). - doc =3D subst_braces(doc).strip('\n') - return EXAMPLE_FMT(code=3Ddoc) - - -def texi_format(doc): - """ - Format documentation - - Lines starting with: - - |: generates an @example - - =3D: generates @section - - =3D=3D: generates @subsection - - 1. or 1): generates an @enumerate @item - - */-: generates an @itemize list - """ - ret =3D '' - doc =3D subst_braces(doc) - doc =3D subst_vars(doc) - doc =3D subst_emph(doc) - doc =3D subst_strong(doc) - inlist =3D '' - lastempty =3D False - for line in doc.split('\n'): - line =3D line.strip() - empty =3D line =3D=3D '' - - # FIXME: Doing this in a single if / elif chain is - # problematic. For instance, a line without markup terminates - # a list if it follows a blank line (reaches the final elif), - # but a line with some *other* markup, such as a =3D title - # doesn't. - # - # Make sure to update section "Documentation markup" in - # docs/devel/qapi-code-gen.txt when fixing this. - if line.startswith('| '): - line =3D EXAMPLE_FMT(code=3Dline[2:]) - elif line.startswith('=3D '): - line =3D '@section ' + line[2:] - elif line.startswith('=3D=3D '): - line =3D '@subsection ' + line[3:] - elif re.match(r'^([0-9]*\.) ', line): - if not inlist: - ret +=3D '@enumerate\n' - inlist =3D 'enumerate' - ret +=3D '@item\n' - line =3D line[line.find(' ')+1:] - elif re.match(r'^[*-] ', line): - if not inlist: - ret +=3D '@itemize %s\n' % {'*': '@bullet', - '-': '@minus'}[line[0]] - inlist =3D 'itemize' - ret +=3D '@item\n' - line =3D line[2:] - elif lastempty and inlist: - ret +=3D '@end %s\n\n' % inlist - inlist =3D '' - - lastempty =3D empty - ret +=3D line + '\n' - - if inlist: - ret +=3D '@end %s\n\n' % inlist - return ret - - -def texi_body(doc): - """Format the main documentation body""" - return texi_format(doc.body.text) - - -def texi_if(ifcond, prefix=3D'\n', suffix=3D'\n'): - """Format the #if condition""" - if not ifcond: - return '' - return '%s@b{If:} @code{%s}%s' % (prefix, ', '.join(ifcond), suffix) - - -def texi_enum_value(value, desc, suffix): - """Format a table of members item for an enumeration value""" - return '@item @code{%s}\n%s%s' % ( - value.name, desc, texi_if(value.ifcond, prefix=3D'@*')) - - -def texi_member(member, desc, suffix): - """Format a table of members item for an object type member""" - typ =3D member.type.doc_type() - membertype =3D ': ' + typ if typ else '' - return '@item @code{%s%s}%s%s\n%s%s' % ( - member.name, membertype, - ' (optional)' if member.optional else '', - suffix, desc, texi_if(member.ifcond, prefix=3D'@*')) - - -def texi_members(doc, what, base=3DNone, variants=3DNone, - member_func=3Dtexi_member): - """Format the table of members""" - items =3D '' - for section in doc.args.values(): - # TODO Drop fallbacks when undocumented members are outlawed - if section.text: - desc =3D texi_format(section.text) - elif (variants and variants.tag_member =3D=3D section.member - and not section.member.type.doc_type()): - values =3D section.member.type.member_names() - members_text =3D ', '.join(['@t{"%s"}' % v for v in values]) - desc =3D 'One of ' + members_text + '\n' - else: - desc =3D 'Not documented\n' - items +=3D member_func(section.member, desc, suffix=3D'') - if base: - items +=3D '@item The members of @code{%s}\n' % base.doc_type() - if variants: - for v in variants.variants: - when =3D ' when @code{%s} is @t{"%s"}%s' % ( - variants.tag_member.name, v.name, texi_if(v.ifcond, " (", = ")")) - if v.type.is_implicit(): - assert not v.type.base and not v.type.variants - for m in v.type.local_members: - items +=3D member_func(m, desc=3D'', suffix=3Dwhen) - else: - items +=3D '@item The members of @code{%s}%s\n' % ( - v.type.doc_type(), when) - if not items: - return '' - return '\n@b{%s:}\n@table @asis\n%s@end table\n' % (what, items) - - -def texi_arguments(doc, boxed_arg_type): - if boxed_arg_type: - assert not doc.args - return ('\n@b{Arguments:} the members of @code{%s}\n' - % boxed_arg_type.name) - return texi_members(doc, 'Arguments') - - -def texi_features(doc): - """Format the table of features""" - items =3D '' - for section in doc.features.values(): - desc =3D texi_format(section.text) - items +=3D '@item @code{%s}\n%s' % (section.name, desc) - if not items: - return '' - return '\n@b{Features:}\n@table @asis\n%s@end table\n' % (items) - - -def texi_sections(doc, ifcond): - """Format additional sections following arguments""" - body =3D '' - for section in doc.sections: - if section.name: - # prefer @b over @strong, so txt doesn't translate it to *Foo:* - body +=3D '\n@b{%s:}\n' % section.name - if section.name and section.name.startswith('Example'): - body +=3D texi_example(section.text) - else: - body +=3D texi_format(section.text) - body +=3D texi_if(ifcond, suffix=3D'') - return body - - -def texi_type(typ, doc, ifcond, members): - return TYPE_FMT(type=3Dtyp, - name=3Ddoc.symbol, - body=3Dtexi_body(doc), - members=3Dmembers, - features=3Dtexi_features(doc), - sections=3Dtexi_sections(doc, ifcond)) - - -def texi_msg(typ, doc, ifcond, members): - return MSG_FMT(type=3Dtyp, - name=3Ddoc.symbol, - body=3Dtexi_body(doc), - members=3Dmembers, - features=3Dtexi_features(doc), - sections=3Dtexi_sections(doc, ifcond)) - - -class QAPISchemaGenDocVisitor(QAPISchemaVisitor): - def __init__(self, prefix): - self._prefix =3D prefix - self._gen =3D QAPIGenDoc(self._prefix + 'qapi-doc.texi') - self.cur_doc =3D None - - def write(self, output_dir): - self._gen.write(output_dir) - - def visit_enum_type(self, name, info, ifcond, members, prefix): - doc =3D self.cur_doc - self._gen.add(texi_type('Enum', doc, ifcond, - texi_members(doc, 'Values', - member_func=3Dtexi_enum_value= ))) - - def visit_object_type(self, name, info, ifcond, base, members, variant= s, - features): - doc =3D self.cur_doc - if base and base.is_implicit(): - base =3D None - self._gen.add(texi_type('Object', doc, ifcond, - texi_members(doc, 'Members', base, variant= s))) - - def visit_alternate_type(self, name, info, ifcond, variants): - doc =3D self.cur_doc - self._gen.add(texi_type('Alternate', doc, ifcond, - texi_members(doc, 'Members'))) - - def visit_command(self, name, info, ifcond, arg_type, ret_type, gen, - success_response, boxed, allow_oob, allow_preconfig, - features): - doc =3D self.cur_doc - self._gen.add(texi_msg('Command', doc, ifcond, - texi_arguments(doc, - arg_type if boxed else None)= )) - - def visit_event(self, name, info, ifcond, arg_type, boxed): - doc =3D self.cur_doc - self._gen.add(texi_msg('Event', doc, ifcond, - texi_arguments(doc, - arg_type if boxed else None)= )) - - def symbol(self, doc, entity): - if self._gen._body: - self._gen.add('\n') - self.cur_doc =3D doc - entity.visit(self) - self.cur_doc =3D None - - def freeform(self, doc): - assert not doc.args - if self._gen._body: - self._gen.add('\n') - self._gen.add(texi_body(doc) + texi_sections(doc, None)) - - -def gen_doc(schema, output_dir, prefix): - vis =3D QAPISchemaGenDocVisitor(prefix) - vis.visit_begin(schema) - for doc in schema.docs: - if doc.symbol: - vis.symbol(doc, schema.lookup_entity(doc.symbol)) - else: - vis.freeform(doc) - vis.write(output_dir) diff --git a/scripts/qapi/gen.py b/scripts/qapi/gen.py index 95afae0615a..7712d2d49f7 100644 --- a/scripts/qapi/gen.py +++ b/scripts/qapi/gen.py @@ -177,13 +177,6 @@ def ifcontext(ifcond, *args): arg.end_if() =20 =20 -class QAPIGenDoc(QAPIGen): - - def _top(self): - return (QAPIGen._top(self) - + '@c AUTOMATICALLY GENERATED, DO NOT MODIFY\n\n') - - class QAPISchemaMonolithicCVisitor(QAPISchemaVisitor): =20 def __init__(self, prefix, what, blurb, pydoc): diff --git a/tests/qapi-schema/doc-good.texi b/tests/qapi-schema/doc-good.t= exi deleted file mode 100644 index 1e8063c8579..00000000000 --- a/tests/qapi-schema/doc-good.texi +++ /dev/null @@ -1,281 +0,0 @@ -@c AUTOMATICALLY GENERATED, DO NOT MODIFY - -@section Section - -@subsection Subsection - -@strong{strong} @emph{with emphasis} -@code{var} @{in braces@} - -@itemize @bullet -@item -List item one -@item -Two, multiple -lines - -@item -Three -Still in list - -@end itemize - -Not in list - -@itemize @minus -@item -Second list -Note: still in list - -@end itemize - -Note: not in list - -@enumerate -@item -Third list -is numbered - -@item -another item - -@end enumerate - -Returns: the King -Since: the first age -Notes: - -@enumerate -@item -Lorem ipsum dolor sit amet - -@item -Ut enim ad minim veniam - -@end enumerate - -Duis aute irure dolor - -Example: - --> in -<- out -Examples: -@itemize @minus -@item -@strong{verbatim} -@item -@{braces@} -@end itemize - - - -@deftp {Enum} Enum - - - -@b{Values:} -@table @asis -@item @code{one} -The @emph{one} @{and only@} -@*@b{If:} @code{defined(IFONE)} -@item @code{two} -Not documented -@end table -@code{two} is undocumented - -@b{If:} @code{defined(IFCOND)} -@end deftp - - - -@deftp {Object} Base - - - -@b{Members:} -@table @asis -@item @code{base1: Enum} -the first member -@end table - -@end deftp - - - -@deftp {Object} Variant1 - -A paragraph - -Another paragraph (but no @code{var}: line) - -@b{Members:} -@table @asis -@item @code{var1: string} -Not documented -@*@b{If:} @code{defined(IFSTR)} -@end table - -@b{Features:} -@table @asis -@item @code{variant1-feat} -a feature -@end table - -@end deftp - - - -@deftp {Object} Variant2 - - - -@end deftp - - - -@deftp {Object} Object - - - -@b{Members:} -@table @asis -@item The members of @code{Base} -@item The members of @code{Variant1} when @code{base1} is @t{"one"} -@item The members of @code{Variant2} when @code{base1} is @t{"two"} (@b{If= :} @code{IFTWO}) -@end table - -@end deftp - - - -@deftp {Object} SugaredUnion - - - -@b{Members:} -@table @asis -@item @code{type} -One of @t{"one"}, @t{"two"} -@item @code{data: Variant1} when @code{type} is @t{"one"} -@item @code{data: Variant2} when @code{type} is @t{"two"} (@b{If:} @code{I= FTWO}) -@end table - -@end deftp - - - -@deftp {Alternate} Alternate - - - -@b{Members:} -@table @asis -@item @code{i: int} -an integer -@code{b} is undocumented -@item @code{b: boolean} -Not documented -@end table - -@end deftp - - -@subsection Another subsection - - -@deftypefn Command {} cmd - - - -@b{Arguments:} -@table @asis -@item @code{arg1: int} -the first argument -@item @code{arg2: string} (optional) -the second -argument -@item @code{arg3: boolean} -Not documented -@end table - -@b{Features:} -@table @asis -@item @code{cmd-feat1} -a feature -@item @code{cmd-feat2} -another feature -@end table - -@b{Note:} -@code{arg3} is undocumented - -@b{Returns:} -@code{Object} - -@b{TODO:} -frobnicate - -@b{Notes:} -@itemize @minus -@item -Lorem ipsum dolor sit amet -@item -Ut enim ad minim veniam - -@end itemize - -Duis aute irure dolor - -@b{Example:} -@example --> in -<- out -@end example - -@b{Examples:} -@example -- *verbatim* -- @{braces@} -@end example - -@b{Since:} -2.10 - -@end deftypefn - - - -@deftypefn Command {} cmd-boxed - -If you're bored enough to read this, go see a video of boxed cats - -@b{Arguments:} the members of @code{Object} - -@b{Features:} -@table @asis -@item @code{cmd-feat1} -a feature -@item @code{cmd-feat2} -another feature -@end table - -@b{Example:} -@example --> in - -<- out -@end example - -@end deftypefn - - - -@deftypefn Event {} EVT-BOXED - - - -@b{Arguments:} the members of @code{Object} - -@end deftypefn - --=20 2.20.1