@ -117,10 +117,13 @@ Example:
==== Expression documentation ====
==== Expression documentation ====
Each expression that isn't an include directive must be preceded by a
Each expression that isn't an include directive may be preceded by a
documentation block. Such blocks are called expression documentation
documentation block. Such blocks are called expression documentation
blocks.
blocks.
When documentation is required (see pragma 'doc-required'), expression
documentation blocks are mandatory.
The documentation block consists of a first line naming the
The documentation block consists of a first line naming the
expression, an optional overview, a description of each argument (for
expression, an optional overview, a description of each argument (for
commands and events) or member (for structs, unions and alternates),
commands and events) or member (for structs, unions and alternates),
@ -204,17 +207,17 @@ once. It is permissible for the schema to contain additional types
not used by any commands or events in the Client JSON Protocol, for
not used by any commands or events in the Client JSON Protocol, for
the side effect of generated C code used internally.
the side effect of generated C code used internally.
There are seven top-level expressions recognized by the parser:
There are eight top-level expressions recognized by the parser:
'include', 'command', 'struct', 'enum', 'union', 'alternate', and
'include', 'pragma', ' command', 'struct', 'enum', 'union',
'event'. There are several groups of types: simple types (a number of
'alternate', and 'event'. There are several groups of types: simple
built-in types, such as 'int' and 'str'; as well as enumerations),
types (a number of built-in types, such as 'int' and 'str'; as well as
complex types (structs and two flavors of unions), and alternate types
enumerations), complex types (structs and two flavors of unions), and
(a choice between other types). The 'command' and 'event' expressions
alternate types (a choice between other types). The 'command' and
can refer to existing types by name, or list an anonymous type as a
'event' expressions can refer to existing types by name, or list an
dictionary. Listing a type name inside an array refers to a
anonymous type as a dictionary. Listing a type name inside an array
single-dimension array of that type; multi-dimension arrays are not
refers to a single-dimension array of that type; multi-dimension
directly supported (although an array of a complex struct that
arrays are not directly supported (although an array of a complex
contains an array member is possible).
struct that contains an array member is possible).
All names must begin with a letter, and contain only ASCII letters,
All names must begin with a letter, and contain only ASCII letters,
digits, hyphen, and underscore. There are two exceptions: enum values
digits, hyphen, and underscore. There are two exceptions: enum values
@ -282,7 +285,7 @@ The following types are predefined, and map to C as follows:
QType QType JSON string matching enum QType values
QType QType JSON string matching enum QType values
=== Includes ===
=== Include directive s ===
Usage: { 'include': STRING }
Usage: { 'include': STRING }
@ -302,6 +305,20 @@ an outer file. The parser may be made stricter in the future to
prevent incomplete include files.
prevent incomplete include files.
=== Pragma directives ===
Usage: { 'pragma': DICT }
The pragma directive lets you control optional generator behavior.
The dictionary's entries are pragma names and values.
Pragma's scope is currently the complete schema. Setting the same
pragma to different values in parts of the schema doesn't work.
Pragma 'doc-required' takes a boolean value. If true, documentation
is required. Default is false.
=== Struct types ===
=== Struct types ===
Usage: { 'struct': STRING, 'data': DICT, '*base': STRUCT-NAME }
Usage: { 'struct': STRING, 'data': DICT, '*base': STRUCT-NAME }