diff --git a/docs/reference/glib/glib-docs.xml b/docs/reference/glib/glib-docs.xml index c6713ca45..657f2356d 100644 --- a/docs/reference/glib/glib-docs.xml +++ b/docs/reference/glib/glib-docs.xml @@ -118,7 +118,6 @@ - diff --git a/docs/reference/glib/glib.toml.in b/docs/reference/glib/glib.toml.in index d2a00090d..c907c3d79 100644 --- a/docs/reference/glib/glib.toml.in +++ b/docs/reference/glib/glib.toml.in @@ -42,6 +42,8 @@ urlmap_file = "urlmap.js" content_files = [ "running.md", + "gvariant-text-format.md", + "character-set.md", "i18n.md", diff --git a/docs/reference/glib/gvariant-text-format.md b/docs/reference/glib/gvariant-text-format.md new file mode 100644 index 000000000..4a142e460 --- /dev/null +++ b/docs/reference/glib/gvariant-text-format.md @@ -0,0 +1,346 @@ +Title: GVariant Text Format + +# GVariant Text Format + +This page attempts to document the `GVariant` text format as produced by +[`method@GLib.Variant.print`] and parsed by the [`func@GLib.Variant.parse`] +family of functions. In most cases the style closely resembles the +formatting of literals in Python but there are some additions and +exceptions. + +The functions that deal with `GVariant` text format absolutely always deal +in UTF-8. Conceptually, `GVariant` text format is a string of Unicode +characters, not bytes. Non-ASCII but otherwise printable Unicode characters +are not treated any differently from normal ASCII characters. + +The parser makes two passes. The purpose of the first pass is to determine +the type of the value being parsed. The second pass does the actual parsing. +Based on the fact that all elements in an array have to have the same type, +`GVariant` is able to make some deductions that would not otherwise be +possible. As an example: + + [[1, 2, 3], [4, 5, 6]] + +is parsed as an array of arrays of integers (type `aai`), but + + [[1, 2, 3], [4, 5, 6.0]] + +is parsed as an array of arrays of doubles (type `aad`). + +As another example, `GVariant` is able to determine that + + ["hello", nothing] + +is an array of maybe strings (type `ams`). + +What the parser accepts as valid input is dependent on context. The API +permits for out-of-band type information to be supplied to the parser (which +will change its behaviour). This can be seen in the GSettings and GDBus +command line utilities where the type information is available from the +schema or the remote introspection information. The additional information +can cause parses to succeed when they would not otherwise have been able to +(by resolving ambiguous type information) or can cause them to fail (due to +conflicting type information). Unless stated otherwise, the examples given +in this section assume that no out-of-band type data has been given to the +parser. + +## Syntax Summary + +The following table describes the rough meaning of symbols that may appear +inside GVariant text format. Each symbol is described in detail in its own +section, including usage examples. + +| Symbol | Meaning | +|--------|---------| +| `true`, `false` | [Booleans](#booleans). | +| `""`, `''` | String literal. See [Strings](#strings) below. | +| numbers | See [Numbers](#numbers) below. | +| `()` | [Tuples](#tuples). | +| `[]` | [Arrays](#arrays). | +| `{}` | [Dictionaries and Dictionary Entries](#dictionaries-and-dictionary-entries). | +| `<>` | [Variants](#variants). | +| `just`, `nothing` | [Maybe Types](#maybe-types). | +| `@` | [Type Annotations](#type-annotations). | +| `boolean`, `byte`, `int16`, `uint16`, `int32`, `uint32`, `handle`, `int64`, `uint64`, `double`, `string`, `objectpath`, `signature` | [Type Annotations](#type-annotations) | +| `b""`, `b''` | [Bytestrings](#bytestrings). | +| `%` | [Positional Parameters](#positional-parameters). | + +## Booleans + +The strings `true` and `false` are parsed as booleans. This is the only way +to specify a boolean value. + +## Strings + +Strings literals must be quoted using `""` or `''`. The two are completely +equivalent (except for the fact that each one is unable to contain itself +unescaped). + +Strings are Unicode strings with no particular encoding. For example, to +specify the character `é`, you just write `'é'`. You could also give the +Unicode codepoint of that character (`U+E9`) as the escape sequence +`'\u00e9'`. Since the strings are pure Unicode, you should not attempt to +encode the UTF-8 byte sequence corresponding to the string using escapes; it +won't work and you'll end up with the individual characters corresponding to +each byte. + +Unicode escapes of the form `\uxxxx` and `\Uxxxxxxxx` are supported, in +hexadecimal. The usual control sequence escapes `\a`, `\b`, `\f`, `\n`, +`\r`, `\t` and `\v` are supported. Additionally, a `\` before a newline +character causes the newline to be ignored. Finally, any other character +following `\` is copied literally (for example, `\"` or `\\`) but for +forwards compatibility with future additions you should only use this +feature when necessary for escaping backslashes or quotes. + +The usual octal and hexadecimal escapes `\0nnn` and `\xnn` are not supported +here. Those escapes are used to encode byte values and `GVariant` strings +are Unicode. + +Single-character strings are not interpreted as bytes. Bytes must be +specified by their numerical value. + +## Numbers + +Numbers are given by default as decimal values. Octal and hex values can be +given in the usual way (by prefixing with `0` or `0x`). Note that `GVariant` +considers bytes to be unsigned integers and will print them as a two digit +hexadecimal number by default. + +Floating point numbers can also be given in the usual ways, including +scientific and hexadecimal notations. + +For lack of additional information, integers will be parsed as `int32` +values by default. If the number has a point or an `e` in it, then it will +be parsed as a double precision floating point number by default. If type +information is available (either explicitly or inferred) then that type will +be used instead. + +Some examples: + +`5` parses as the `int32` value five. + +`37.5` parses as a floating point value. + +`3.75e1` parses the same as the value above. + +`uint64 7` parses seven as a `uint64`. See [Type Annotations](#type-annotations). + +## Tuples + +Tuples are formed using the same syntax as Python. Here are some examples: + +`()` parses as the empty tuple. + +`(5,)` is a tuple containing a single value. + +`("hello", 42)` is a pair. Note that values of different types are +permitted. + +## Arrays + +Arrays are formed using the same syntax as Python uses for lists (which is +arguably the term that `GVariant` should have used). Note that, unlike Python +lists, `GVariant` arrays are statically typed. This has two implications. + +First, all items in the array must have the same type. Second, the type of +the array must be known, even in the case that it is empty. This means that +(unless there is some other way to infer it) type information will need to +be given explicitly for empty arrays. + +The parser is able to infer some types based on the fact that all items in +an array must have the same type. See the examples below: + +`[1]` parses (without additional type information) as a one-item array of +signed integers. + +`[1, 2, 3]` parses (similarly) as a three-item array. + +`[1, 2, 3.0]` parses as an array of doubles. This is the most simple case of +the type inferencing in action. + +`[(1, 2), (3, 4.0)]` causes the 2 to also be parsed as a double (but the 1 +and 3 are still integers). + +`["", nothing]` parses as an array of maybe strings. The presence of +"nothing" clearly implies that the array elements are nullable. + +`[[], [""]]` will parse properly because the type of the first (empty) array +can be inferred to be equal to the type of the second array (both are arrays +of strings). + +`[b'hello', []]` looks odd but will parse properly. See +[Bytestrings](#bytestrings). + +And some examples of errors: + +`["hello", 42]` fails to parse due to conflicting types. + +`[]` will fail to parse without additional type information. + +## Dictionaries and Dictionary Entries + +Dictionaries and dictionary entries are both specified using the `{}` +characters. + +The dictionary syntax is more commonly used. This is what the printer elects +to use in the normal case of dictionary entries appearing in an array (AKA +"a dictionary"). The separate syntax for dictionary entries is typically +only used for when the entries appear on their own, outside of an array +(which is valid but unusual). Of course, you are free to use the dictionary +entry syntax within arrays but there is no good reason to do so (and the +printer itself will never do so). Note that, as with arrays, the type of +empty dictionaries must be established (either explicitly or through +inference). + +The dictionary syntax is the same as Python's syntax for dictionaries. Some +examples: + +`@a{sv} {}` parses as the empty dictionary of everyone's favourite type. + +`@a{sv} []` is the same as above (owing to the fact that dictionaries are +really arrays). + +`{1: "one", 2: "two", 3: "three"}` parses as a dictionary mapping integers +to strings. + +The dictionary entry syntax looks just like a pair (2-tuple) that uses +braces instead of parens. The presence of a comma immediately following the +key differentiates it from the dictionary syntax (which features a colon +after the first key). Some examples: + +`{1, "one"}` is a free-standing dictionary entry that can be parsed on its +own or as part of another container value. + +`[{1, "one"}, {2, "two"}, {3, "three"}]` is exactly equivalent to the +dictionary example given above. + +## Variants + +Variants are denoted using angle brackets (aka "XML brackets"), `<>`. They +may not be omitted. + +Using `<>` effectively disrupts the type inferencing that occurs between +array elements. This can have positive and negative effects. + +`[<"hello">, <42>]` will parse whereas `["hello", 42]` would not. + +`[<['']>, <[]>]` will fail to parse even though `[[''], []]` parses +successfully. You would need to specify `[<['']>, <@as []>]`. + +`{"title": <"frobit">, "enabled": , "width": <800>}` is an example of +perhaps the most pervasive use of both dictionaries and variants. + +## Maybe Types + +The syntax for specifying maybe types is inspired by Haskell. + +The null case is specified using the keyword nothing and the non-null case +is explicitly specified using the keyword just. GVariant allows just to be +omitted in every case that it is able to unambiguously determine the +intention of the writer. There are two cases where it must be specified: + +- when using nested maybes, in order to specify the just nothing case +- to establish the nullability of the type of a value without explicitly + specifying its full type + +Some examples: + +`just 'hello'` parses as a non-null nullable string. + +`@ms 'hello'` is the same (demonstrating how just can be dropped if the type is already known). + +`nothing` will not parse without extra type information. + +`@ms nothing` parses as a null nullable string. + +`[just 3, nothing]` is an array of nullable integers + +`[3, nothing]` is the same as the above (demonstrating another place were just can be dropped). + +`[3, just nothing]` parses as an array of maybe maybe integers (type `ammi`). + +## Type Annotations + +Type annotations allow additional type information to be given to the +parser. Depending on the context, this type information can change the +output of the parser, cause an error when parsing would otherwise have +succeeded or resolve an error when parsing would have otherwise failed. + +Type annotations come in two forms: type codes and type keywords. + +Type keywords can be seen as more verbose (and more legible) versions of a +common subset of the type codes. The type keywords `boolean`, `byte`, +`int16`, `uint16`, `int32`, `uint32`, `handle`, `int64`, `uint64`, `double`, +`string`, `objectpath` and literal signature are each exactly equivalent to +their corresponding type code. + +Type codes are an `@` ("at" sign) followed by a definite `GVariant` type +string. Some examples: + +`uint32 5` causes the number to be parsed unsigned instead of signed (the +default). + +`@u 5` is the same + +`objectpath "/org/gnome/xyz"` creates an object path instead of a normal +string + +`@au []` specifies the type of the empty array (which would not parse +otherwise) + +`@ms ""` indicates that a string value is meant to have a maybe type + +## Bytestrings + +The bytestring syntax is a piece of syntactic sugar meant to complement the +bytestring APIs in GVariant. It constructs arrays of non-`NUL` bytes (type +`ay`) with a `NUL` terminator at the end. These are normal C strings with no +particular encoding enforced, so the bytes may not be valid UTF-8. +Bytestrings are a special case of byte arrays; byte arrays (also type 'ay'), +in the general case, can contain a `NUL` byte at any position, and need not +end with a `NUL` byte. + +Bytestrings are specified with either `b""` or `b''`. As with strings, there +is no fundamental difference between the two different types of quotes. + +Bytestrings support the full range of escapes that you would expect (ie: +those supported by [`func@GLib.strcompress`]. This includes the normal control +sequence escapes (as mentioned in the section on strings) as well as octal +and hexadecimal escapes of the forms `\0nnn` and `\xnn`. + +`b'abc'` is equivalent to `[byte 0x61, 0x62, 0x63, 0]`. + +When formatting arrays of bytes, the printer will choose to display the +array as a bytestring if it contains a nul character at the end and no other +nul bytes within. Otherwise, it is formatted as a normal array. + +## Positional Parameters + +Positional parameters are not a part of the normal `GVariant` text format, +but they are mentioned here because they can be used with +[`ctor@GLib.Variant.new_parsed`]. + +A positional parameter is indicated with a `%` followed by any valid +[GVariant Format String](gvariant-format-strings.html). Variable arguments +are collected as specified by the format string and the resulting value is +inserted at the current position. + +This feature is best explained by example: + +```c +char *t = "xyz"; +gboolean en = false; +GVariant *value; + +value = g_variant_new_parsed ("{'title': <%s>, 'enabled': <%b>}", t, en); +``` + +This constructs a dictionary mapping strings to variants (type `a{sv}`) with +two items in it. The key names are parsed from the string and the values for +those keys are taken as variable arguments parameters. + +The arguments are always collected in the order that they appear in the +string to be parsed. Format strings that collect multiple arguments are +permitted, so you may require more varargs parameters than the number of `%` +signs that appear. You can also give format strings that collect no +arguments, but there's no good reason to do so. diff --git a/docs/reference/glib/gvariant-text.xml b/docs/reference/glib/gvariant-text.xml deleted file mode 100644 index 55d476e39..000000000 --- a/docs/reference/glib/gvariant-text.xml +++ /dev/null @@ -1,622 +0,0 @@ - - - - - GVariant Text Format - - - GVariant Text Format - textual representation of GVariants - - - - GVariant Text Format - - - This page attempts to document the GVariant text format as produced by - g_variant_print() and parsed by the - g_variant_parse() family of functions. In most - cases the style closely resembles the formatting of literals in Python but there are some additions and - exceptions. - - - - The functions that deal with GVariant text format absolutely always deal in utf-8. Conceptually, GVariant - text format is a string of Unicode characters -- not bytes. Non-ASCII but otherwise printable Unicode - characters are not treated any differently from normal ASCII characters. - - - - The parser makes two passes. The purpose of the first pass is to determine the type of the value being - parsed. The second pass does the actual parsing. Based on the fact that all elements in an array have to - have the same type, GVariant is able to make some deductions that would not otherwise be possible. As an - example: - - [[1, 2, 3], [4, 5, 6]] - - is parsed as an array of arrays of integers (type 'aai'), but - - [[1, 2, 3], [4, 5, 6.0]] - - is parsed as an array of arrays of doubles (type 'aad'). - - - - As another example, GVariant is able to determine that - - ["hello", nothing] - - is an array of maybe strings (type 'ams'). - - - - What the parser accepts as valid input is dependent on context. The API permits for out-of-band type - information to be supplied to the parser (which will change its behaviour). This can be seen in the - GSettings and GDBus command line utilities where the type information is available from the schema or the - remote introspection information. The additional information can cause parses to succeed when they would not - otherwise have been able to (by resolving ambiguous type information) or can cause them to fail (due to - conflicting type information). Unless stated otherwise, the examples given in this section assume that no - out-of-band type data has been given to the parser. - - - - - Syntax Summary - - - The following table describes the rough meaning of symbols that may appear inside GVariant text format. - Each symbol is described in detail in its own section, including usage examples. - - - - - - - - - - - - Symbol - - - - - Meaning - - - - - - - - true, - false - - - - - Booleans. - - - - - - - - "", - '' - - - - - String literal. See Strings below. - - - - - - - - numbers - - - - - See Numbers below. - - - - - - - - () - - - - - Tuples. - - - - - - - - [] - - - - - Arrays. - - - - - - - - {} - - - - - Dictionaries and Dictionary Entries. - - - - - - - - <> - - - - - Variants. - - - - - - - - just, - nothing - - - - - Maybe Types. - - - - - - - - @ - - - - - Type Annotations. - - - - - - - - type keywords - - - - - boolean, - byte, - int16, - uint16, - int32, - uint32, - handle, - int64, - uint64, - double, - string, - objectpath, - signature - - - See Type Annotations below. - - - - - - - - b"", - b'' - - - - - Bytestrings. - - - - - - - - % - - - - - Positional Parameters. - - - - - - - - - Booleans - - The strings true and false are parsed as booleans. This is the only - way to specify a boolean value. - - - - - Strings - - Strings literals must be quoted using "" or ''. The two are - completely equivalent (except for the fact that each one is unable to contain itself unescaped). - - - Strings are Unicode strings with no particular encoding. For example, to specify the character - é, you just write 'é'. You could also give the Unicode codepoint of - that character (U+E9) as the escape sequence '\u00e9'. Since the strings are pure - Unicode, you should not attempt to encode the utf-8 byte sequence corresponding to the string using escapes; - it won't work and you'll end up with the individual characters corresponding to each byte. - - - Unicode escapes of the form \uxxxx and \Uxxxxxxxx are supported, in - hexadecimal. The usual control sequence escapes \a, \b, - \f, \n, \r, \t and - \v are supported. Additionally, a \ before a newline character causes - the newline to be ignored. Finally, any other character following \ is copied literally - (for example, \" or \\) but for forwards compatibility with future - additions you should only use this feature when necessary for escaping backslashes or quotes. - - - The usual octal and hexadecimal escapes \0nnn and \xnn are not - supported here. Those escapes are used to encode byte values and GVariant strings are Unicode. - - - Single-character strings are not interpreted as bytes. Bytes must be specified by their numerical value. - - - - - Numbers - - Numbers are given by default as decimal values. Octal and hex values can be given in the usual way (by - prefixing with 0 or 0x). Note that GVariant considers bytes to be - unsigned integers and will print them as a two digit hexadecimal number by default. - - - Floating point numbers can also be given in the usual ways, including scientific and hexadecimal notations. - - - For lack of additional information, integers will be parsed as int32 values by default. If the number has a - point or an 'e' in it, then it will be parsed as a double precision floating point number by default. If - type information is available (either explicitly or inferred) then that type will be used instead. - - - Some examples: - - - 5 parses as the int32 value five. - - - 37.5 parses as a floating point value. - - - 3.75e1 parses the same as the value above. - - - uint64 7 parses seven as a uint64. - See Type Annotations. - - - - - Tuples - - Tuples are formed using the same syntax as Python. Here are some examples: - - - () parses as the empty tuple. - - - (5,) is a tuple containing a single value. - - - ("hello", 42) is a pair. Note that values of different types are permitted. - - - - - Arrays - - Arrays are formed using the same syntax as Python uses for lists (which is arguably the term that GVariant - should have used). Note that, unlike Python lists, GVariant arrays are statically typed. This has two - implications. - - - First, all items in the array must have the same type. Second, the type of the array must be known, even in - the case that it is empty. This means that (unless there is some other way to infer it) type information - will need to be given explicitly for empty arrays. - - - The parser is able to infer some types based on the fact that all items in an array must have the same type. - See the examples below: - - - [1] parses (without additional type information) as a one-item array of signed integers. - - - [1, 2, 3] parses (similarly) as a three-item array. - - - [1, 2, 3.0] parses as an array of doubles. This is the most simple case of the type - inferencing in action. - - - [(1, 2), (3, 4.0)] causes the 2 to also be parsed as a double (but the 1 and 3 are still - integers). - - - ["", nothing] parses as an array of maybe strings. The presence of - "nothing" clearly implies that the array elements are nullable. - - - [[], [""]] will parse properly because the type of the first (empty) array can be - inferred to be equal to the type of the second array (both are arrays of strings). - - - [b'hello', []] looks odd but will parse properly. - See Bytestrings - - - And some examples of errors: - - - ["hello", 42] fails to parse due to conflicting types. - - - [] will fail to parse without additional type information. - - - - - Dictionaries and Dictionary Entries - - Dictionaries and dictionary entries are both specified using the {} characters. - - - The dictionary syntax is more commonly used. This is what the printer elects to use in the normal case of - dictionary entries appearing in an array (aka "a dictionary"). The separate syntax for dictionary entries - is typically only used for when the entries appear on their own, outside of an array (which is valid but - unusual). Of course, you are free to use the dictionary entry syntax within arrays but there is no good - reason to do so (and the printer itself will never do so). Note that, as with arrays, the type of empty - dictionaries must be established (either explicitly or through inference). - - - The dictionary syntax is the same as Python's syntax for dictionaries. Some examples: - - - @a{sv} {} parses as the empty dictionary of everyone's favourite type. - - - @a{sv} [] is the same as above (owing to the fact that dictionaries are really arrays). - - - {1: "one", 2: "two", 3: "three"} parses as a dictionary mapping integers to strings. - - - The dictionary entry syntax looks just like a pair (2-tuple) that uses braces instead of parens. The - presence of a comma immediately following the key differentiates it from the dictionary syntax (which - features a colon after the first key). Some examples: - - - {1, "one"} is a free-standing dictionary entry that can be parsed on its own or as part - of another container value. - - - [{1, "one"}, {2, "two"}, {3, "three"}] is exactly equivalent to the dictionary example - given above. - - - - - Variants - - Variants are denoted using angle brackets (aka "XML brackets"), <>. They may not - be omitted. - - - Using <> effectively disrupts the type inferencing that occurs between array - elements. This can have positive and negative effects. - - - [<"hello">, <42>] will parse whereas ["hello", 42] would - not. - - - [<['']>, <[]>] will fail to parse even though [[''], []] - parses successfully. You would need to specify [<['']>, <@as []>]. - - - {"title": <"frobit">, "enabled": <true>, "width": <800>} is an example of - perhaps the most pervasive use of both dictionaries and variants. - - - - - Maybe Types - - The syntax for specifying maybe types is inspired by Haskell. - - - The null case is specified using the keyword nothing and the non-null case is explicitly - specified using the keyword just. GVariant allows just to be omitted - in every case that it is able to unambiguously determine the intention of the writer. There are two cases - where it must be specified: - - - - when using nested maybes, in order to specify the just nothing case - - - - to establish the nullability of the type of a value without explicitly specifying its full type - - - - - Some examples: - - - just 'hello' parses as a non-null nullable string. - - - @ms 'hello' is the same (demonstrating how just can be dropped if the type is already - known). - - - nothing will not parse wtihout extra type information. - - - @ms nothing parses as a null nullable string. - - - [just 3, nothing] is an array of nullable integers - - - [3, nothing] is the same as the above (demonstrating another place were - just can be dropped). - - - [3, just nothing] parses as an array of maybe maybe integers (type - 'ammi'). - - - - - Type Annotations - - Type annotations allow additional type information to be given to the parser. Depending on the context, - this type information can change the output of the parser, cause an error when parsing would otherwise have - succeeded or resolve an error when parsing would have otherwise failed. - - - Type annotations come in two forms: type codes and type keywords. - - - Type keywords can be seen as more verbose (and more legible) versions of a common subset of the type codes. - The type keywords boolean, byte, int16, - uint16, int32, uint32, handle, - int64, uint64, double, string, - objectpath and literal signature are each exactly equivalent to their - corresponding type code. - - - Type codes are an @ ("at" sign) followed by a definite GVariant type string. Some - examples: - - - uint32 5 causes the number to be parsed unsigned instead of signed (the default). - - - @u 5 is the same - - - objectpath "/org/gnome/xyz" creates an object path instead of a normal string - - - @au [] specifies the type of the empty array (which would not parse otherwise) - - - @ms "" indicates that a string value is meant to have a maybe type - - - - - Bytestrings - - The bytestring syntax is a piece of syntactic sugar meant to complement the bytestring APIs in GVariant. It - constructs arrays of non-nul bytes (type 'ay') with a nul terminator at the end. These are - normal C strings with no particular encoding enforced, so the bytes may not be valid UTF-8. - Bytestrings are a special case of byte arrays; byte arrays (also type 'ay'), in the general - case, can contain nul at any position, and need not end with nul. - - - Bytestrings are specified with either b"" or b''. As with strings, - there is no fundamental difference between the two different types of quotes. - - - Bytestrings support the full range of escapes that you would expect (ie: those supported by - g_strcompress(). This includes the normal control - sequence escapes (as mentioned in the section on strings) as well as octal and hexadecimal escapes of the - forms \0nnn and \xnn. - - - b'abc' is equivalent to [byte 0x61, 0x62, 0x63, 0]. - - - When formatting arrays of bytes, the printer will choose to display the array as a bytestring if it contains - a nul character at the end and no other nul bytes within. Otherwise, it is formatted as a normal array. - - - - - Positional Parameters - - Positional parameters are not a part of the normal GVariant text format, but they are mentioned here because - they can be used with g_variant_new_parsed(). - - - A positional parameter is indicated with a % followed by any valid - GVariant Format String. Variable arguments are collected as - specified by the format string and the resulting value is inserted at the current position. - - - This feature is best explained by example: - - , 'enabled': <%b>}", t, en);]]> - - This constructs a dictionary mapping strings to variants (type 'a{sv}') with two items in - it. The key names are parsed from the string and the values for those keys are taken as variable arguments - parameters. - - - The arguments are always collected in the order that they appear in the string to be parsed. Format strings - that collect multiple arguments are permitted, so you may require more varargs parameters than the number of - % signs that appear. You can also give format strings that collect no arguments, but - there's no good reason to do so. - - - - diff --git a/docs/reference/glib/meson.build b/docs/reference/glib/meson.build index badd0d718..e508be3f5 100644 --- a/docs/reference/glib/meson.build +++ b/docs/reference/glib/meson.build @@ -82,7 +82,6 @@ if get_option('gtk_doc') 'gtester.xml', 'gtester-report.xml', 'gvariant-varargs.xml', - 'gvariant-text.xml', ], expand_content_files : [ 'compiling.xml', @@ -153,6 +152,7 @@ endif expand_content_files = [ 'character-set.md', 'error-reporting.md', + 'gvariant-text-format.md', 'i18n.md', 'logging.md', 'main-loop.md',