Name Description Size This crate implements a prefs file parser. Pref files have the following grammar. Note that there are slight differences between the grammar for a default prefs files and a user prefs file. ```text <pref-file> = <pref>* <pref> = <pref-spec> "(" <pref-name> "," <pref-value> <pref-attrs> ")" ";" <pref-spec> = "user_pref" | "pref" | "sticky_pref" // in default pref files <pref-spec> = "user_pref" // in user pref files <pref-name> = <string-literal> <pref-value> = <string-literal> | "true" | "false" | <int-value> <int-value> = <sign>? <int-literal> <sign> = "+" | "-" <int-literal> = [0-9]+ (and cannot be followed by [A-Za-z_]) <string-literal> = A single or double-quoted string, with the following escape sequences allowed: \", \', \\, \n, \r, \xNN, \uNNNN, where \xNN gives a raw byte value that is copied directly into an 8-bit string value, and \uNNNN gives a UTF-16 code unit that is converted to UTF-8 before being copied into an 8-bit string value. \x00 and \u0000 are disallowed because they would cause C++ code handling such strings to misbehave. <pref-attrs> = ("," <pref-attr>)* // in default pref files = <empty> // in user pref files <pref-attr> = "sticky" | "locked" // default pref files only ``` Comments can take three forms: - `# Python-style comments` - `// C++ style comments` - `/* C style comments (non-nested) */` Non-end-of-line whitespace chars are `\t`, `\v`, `\f`, and space. End-of-line sequences can take three forms, each of which is considered as a single EOL: - `\n` - `\r` (without subsequent `\n`) - `\r\n` The valid range for `<int-value>` is -2,147,483,648..2,147,483,647. Values outside that range will result in a parse error. A `\0` char is interpreted as the end of the file. The use of this character in a prefs file is not recommended. Within string literals `\x00` or `\u0000` can be used instead. The parser performs error recovery. On a syntax error, it will scan forward to the next `;` token and then continue parsing. If the syntax error occurs in the middle of a token, it will first finish obtaining the current token in an appropriate fashion. 41207