Messages: add new messages to registry

This commit is another step to identify and document the maximum number
of logging messages. Bulk changes:

- Rename `conflicting-key-type` to `conflicting-key-type-merging-groups`.
  Giving more context in the name allow us to introduce
  `conflicting-key-type-definitions` later.
- Add conflicting-key-type-definitions
- Add conflicting-key-type-map-entry
- Add undeclared-modifiers-in-key-type
  Also improve the log messages.
- Add conflicting-key-type-preserve-entries
- Use XKB_ERROR_UNSUPPORTED_MODIFIER_MASK
- Add illegal-key-type-preserve-result
- Add conflicting-key-type-level-names
- Add duplicate-entry
- Add unsupported-symbols-field
- Add missing-symbols-group-name-index
- Use XKB_ERROR_WRONG_FIELD_TYPE
- Add conflicting-key-name
- Use XKB_WARNING_UNDEFINED_KEYCODE
- Add illegal-keycode-alias
- Add unsupported-geometry-section
- Add missing-default-section
- Add XKB_LOG_MESSAGE_NO_ID
- Rename log_vrb_with_code to log_vrb
- Use ERROR_WRONG_FIELD_TYPE & ERROR_INVALID_SYNTAX
- Add unknown-identifier
- Add invalid-expression-type
- Add invalid-operation + fixes
- Add unknown-operator
- Rename ERROR_UNKNOWN_IDENTIFIER to ERROR_INVALID_IDENTIFIER
- Add undeclared-virtual-modifier
- Add expected-array-entry
- Add invalid-include-statement
- Add included-file-not-found
- Add allocation-error
- Add invalid-included-file
- Process symbols.c
- Add invalid-value
- Add invalid-real-modifier
- Add unknown-field
- Add wrong-scope
- Add invalid-modmap-entry
- Add wrong-statement-type
- Add conflicting-key-symbols-entry
- Add invalid-set-default-statement
master
Pierre Le Marre 2023-09-21 20:06:27 +02:00 committed by Wismill
parent b900faf77b
commit a83d745b62
16 changed files with 846 additions and 111 deletions

View File

@ -6,7 +6,7 @@ NOTE: This file has been generated automatically by “update-message-registry.p
--> -->
This page lists the warnings and errors generated by xkbcommon. This page lists the warnings and errors generated by xkbcommon.
There are currently 21 entries. There are currently 52 entries.
@todo The documentation of the log messages is a work in progress. @todo The documentation of the log messages is a work in progress.
@ -15,26 +15,57 @@ There are currently 21 entries.
| Code | Identifier | Description | Type | | Code | Identifier | Description | Type |
| --------- | ---------------------------- | ----------- | ---- | | --------- | ---------------------------- | ----------- | ---- |
| [XKB-034] | `malformed-number-literal` | Warn on malformed number literals | Error | | [XKB-034] | `malformed-number-literal` | Warn on malformed number literals | Error |
| [XKB-043] | `conflicting-key-type-preserve-entries` | Conflicting “preserve” entries in a key type | Warning |
| [XKB-060] | `unsupported-modifier-mask` | Warn on unsupported modifier mask | Error | | [XKB-060] | `unsupported-modifier-mask` | Warn on unsupported modifier mask | Error |
| [XKB-077] | `expected-array-entry` | Expected an array entry, but the index is missing | Error |
| [XKB-101] | `illegal-keycode-alias` | Illegal keycode alias with the name of a real key | Warning |
| [XKB-107] | `unrecognized-keysym` | Warn on unrecognized keysyms | Warning | | [XKB-107] | `unrecognized-keysym` | Warn on unrecognized keysyms | Warning |
| [XKB-123] | `undeclared-virtual-modifier` | A virtual modifier is used before being declared | Error |
| [XKB-150] | `wrong-statement-type` | The type of the statement is not allowed in the context | Error |
| [XKB-172] | `unsupported-geometry-section` | Geometry sections are not supported | Warning |
| [XKB-183] | `cannot-infer-key-type` | Warn if no key type can be inferred | Warning | | [XKB-183] | `cannot-infer-key-type` | Warn if no key type can be inferred | Warning |
| [XKB-195] | `illegal-key-type-preserve-result` | The result of a key type “preserve” entry must be a subset of its input modifiers. | Warning |
| [XKB-203] | `invalid-include-statement` | Syntax error in the include statement | Error |
| [XKB-206] | `invalid-modmap-entry` | A modmap entry is invalid | Error |
| [XKB-237] | `unsupported-group-index` | Warn when a group index is not supported | Error | | [XKB-237] | `unsupported-group-index` | Warn when a group index is not supported | Error |
| [XKB-239] | `conflicting-key-type-level-names` | The name of a key type level is defined multiple times. | Warning |
| [XKB-254] | `invalid-set-default-statement` | Invalid statement setting default values | Error |
| [XKB-266] | `conflicting-key-type-map-entry` | Conflicting “map” entries in type definition | Warning |
| [XKB-286] | `undefined-key-type` | Warn if using an undefined key type | Warning | | [XKB-286] | `undefined-key-type` | Warn if using an undefined key type | Warning |
| [XKB-305] | `non-base-group-name` | Warn if a group name was defined for group other than the first one | Warning | | [XKB-305] | `non-base-group-name` | Warn if a group name was defined for group other than the first one | Warning |
| [XKB-312] | `unsupported-shift-level` | Warn when a shift level is not supported | Error | | [XKB-312] | `unsupported-shift-level` | Warn when a shift level is not supported | Error |
| [XKB-338] | `included-file-not-found` | Could not find a file used in an include statement | Error |
| [XKB-345] | `unknown-operator` | Use of an operator that is unknown and thus unsupported | Error |
| [XKB-378] | `duplicate-entry` | An entry is duplicated and will be ignored | Warning |
| [XKB-407] | `conflicting-key-type-definitions` | Conflicting definitions of a key type | Warning |
| [XKB-428] | `wrong-scope` | A statement is in a wrong scope and should be moved | Error |
| [XKB-433] | `missing-default-section` | Missing default section in included file | Warning |
| [XKB-461] | `conflicting-key-symbol` | Warn if there are conflicting keysyms while merging keys | Warning | | [XKB-461] | `conflicting-key-symbol` | Warn if there are conflicting keysyms while merging keys | Warning |
| [XKB-478] | `invalid-operation` | The operation is invalid in the context | Error |
| [XKB-489] | `numeric-keysym` | Warn on numeric keysym (other than 0-9) | Warning | | [XKB-489] | `numeric-keysym` | Warn on numeric keysym (other than 0-9) | Warning |
| [XKB-516] | `extra-symbols-ignored` | <span class="todo">TODO:</span> add description | Warning | | [XKB-516] | `extra-symbols-ignored` | <span class="todo">TODO:</span> add description | Warning |
| [XKB-523] | `conflicting-key-name` | Conflicting definitions of a key name or alias | Warning |
| [XKB-550] | `allocation-error` | Cannot allocate memory | Error |
| [XKB-578] | `wrong-field-type` | Warn when a field has not the expected type | Error | | [XKB-578] | `wrong-field-type` | Warn when a field has not the expected type | Error |
| [XKB-623] | `invalid-real-modifier` | Invalid _real_ modifier | Error |
| [XKB-645] | `unknown-char-escape-sequence` | Warn on unknown escape sequence in string literal | Warning | | [XKB-645] | `unknown-char-escape-sequence` | Warn on unknown escape sequence in string literal | Warning |
| [XKB-661] | `invalid-included-file` | The target file of an include statement could not be processed | Error |
| [XKB-700] | `multiple-groups-at-once` | Warn if a key defines multiple groups at once | Warning | | [XKB-700] | `multiple-groups-at-once` | Warn if a key defines multiple groups at once | Warning |
| [XKB-711] | `unsupported-symbols-field` | A legacy X11 symbol field is not supported | Warning |
| [XKB-769] | `invalid-syntax` | The syntax is invalid and the file cannot be parsed | Error | | [XKB-769] | `invalid-syntax` | The syntax is invalid and the file cannot be parsed | Error |
| [XKB-770] | `undefined-keycode` | <span class="todo">TODO:</span> add description | Warning | | [XKB-770] | `undefined-keycode` | Reference to an undefined keycode | Warning |
| [XKB-784] | `invalid-expression-type` | An expression has not the expected type | Error |
| [XKB-796] | `invalid-value` | A value is invalid and will be ignored | Error |
| [XKB-800] | `conflicting-modmap` | Warn if there are conflicting modmap definitions | Warning | | [XKB-800] | `conflicting-modmap` | Warn if there are conflicting modmap definitions | Warning |
| [XKB-812] | `unknown-field` | A field is unknown and will be ignored | Error |
| [XKB-883] | `conflicting-key-action` | Warn if there are conflicting actions while merging keys | Warning | | [XKB-883] | `conflicting-key-action` | Warn if there are conflicting actions while merging keys | Warning |
| [XKB-893] | `conflicting-key-type` | Warn if there are conflicting key types while merging groups | Warning | | [XKB-893] | `conflicting-key-type-merging-groups` | Warn if there are conflicting key types while merging groups | Warning |
| [XKB-901] | `conflicting-key-symbols-entry` | Conflicting symbols entry for a key | Error |
| [XKB-903] | `missing-symbols-group-name-index` | Missing group index in a group name entry | Warning |
| [XKB-935] | `conflicting-key-fields` | Warn if there are conflicting fields while merging keys | Warning | | [XKB-935] | `conflicting-key-fields` | Warn if there are conflicting fields while merging keys | Warning |
| [XKB-949] | `invalid-identifier` | An identifier is used but is not built-in | Error |
| [XKB-965] | `unresolved-keymap-symbol` | Warn if using a symbol not defined in the keymap | Warning | | [XKB-965] | `unresolved-keymap-symbol` | Warn if using a symbol not defined in the keymap | Warning |
| [XKB-971] | `undeclared-modifiers-in-key-type` | Some modifiers used in a key type “map” or “preserve” entry are not declared | Warning |
## Details ## Details
@ -53,6 +84,14 @@ xkbcommon can parse the following number literal formats:
- *hexadecimal integer:* prefixed with “0x”: 0x123, 0xff, 0xAB, etc. - *hexadecimal integer:* prefixed with “0x”: 0x123, 0xff, 0xAB, etc.
### XKB-043 Conflicting key type preserve entries {#XKB-043}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Warning</dd>
<dt>Summary</dt><dd>Conflicting “preserve” entries in a key type</dd>
</dl>
### XKB-060 Unsupported modifier mask {#XKB-060} ### XKB-060 Unsupported modifier mask {#XKB-060}
<dl> <dl>
@ -61,6 +100,22 @@ xkbcommon can parse the following number literal formats:
<dt>Summary</dt><dd>Warn on unsupported modifier mask</dd> <dt>Summary</dt><dd>Warn on unsupported modifier mask</dd>
</dl> </dl>
### XKB-077 Expected array entry {#XKB-077}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Error</dd>
<dt>Summary</dt><dd>Expected an array entry, but the index is missing</dd>
</dl>
### XKB-101 Illegal keycode alias {#XKB-101}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Warning</dd>
<dt>Summary</dt><dd>Illegal keycode alias with the name of a real key</dd>
</dl>
### XKB-107 Unrecognized keysym {#XKB-107} ### XKB-107 Unrecognized keysym {#XKB-107}
<dl> <dl>
@ -111,6 +166,30 @@ key <AB08> {[ comma, semicolon, periodcentered, multiply ]};
</div> </div>
</details> </details>
### XKB-123 Undeclared virtual modifier {#XKB-123}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Error</dd>
<dt>Summary</dt><dd>A virtual modifier is used before being declared</dd>
</dl>
### XKB-150 Wrong statement type {#XKB-150}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Error</dd>
<dt>Summary</dt><dd>The type of the statement is not allowed in the context</dd>
</dl>
### XKB-172 Unsupported geometry section {#XKB-172}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Warning</dd>
<dt>Summary</dt><dd>Geometry sections are not supported</dd>
</dl>
### XKB-183 Cannot infer key type {#XKB-183} ### XKB-183 Cannot infer key type {#XKB-183}
<dl> <dl>
@ -119,6 +198,30 @@ key <AB08> {[ comma, semicolon, periodcentered, multiply ]};
<dt>Summary</dt><dd>Warn if no key type can be inferred</dd> <dt>Summary</dt><dd>Warn if no key type can be inferred</dd>
</dl> </dl>
### XKB-195 Illegal key type preserve result {#XKB-195}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Warning</dd>
<dt>Summary</dt><dd>The result of a key type “preserve” entry must be a subset of its input modifiers.</dd>
</dl>
### XKB-203 Invalid include statement {#XKB-203}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Error</dd>
<dt>Summary</dt><dd>Syntax error in the include statement</dd>
</dl>
### XKB-206 Invalid modmap entry {#XKB-206}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Error</dd>
<dt>Summary</dt><dd>A modmap entry is invalid</dd>
</dl>
### XKB-237 Unsupported group index {#XKB-237} ### XKB-237 Unsupported group index {#XKB-237}
<dl> <dl>
@ -130,6 +233,30 @@ key <AB08> {[ comma, semicolon, periodcentered, multiply ]};
xkbcommon supports group index in the range (1..4). xkbcommon supports group index in the range (1..4).
### XKB-239 Conflicting key type level names {#XKB-239}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Warning</dd>
<dt>Summary</dt><dd>The name of a key type level is defined multiple times.</dd>
</dl>
### XKB-254 Invalid set default statement {#XKB-254}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Error</dd>
<dt>Summary</dt><dd>Invalid statement setting default values</dd>
</dl>
### XKB-266 Conflicting key type map entry {#XKB-266}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Warning</dd>
<dt>Summary</dt><dd>Conflicting “map” entries in type definition</dd>
</dl>
### XKB-286 Undefined key type {#XKB-286} ### XKB-286 Undefined key type {#XKB-286}
<dl> <dl>
@ -158,6 +285,66 @@ Shift levels are _one_-indexed. xkbcommon supports two formats of shift levels:
as numbers and as identifiers `LevelN`, where `N` is in the range (1..8). as numbers and as identifiers `LevelN`, where `N` is in the range (1..8).
### XKB-338 Included file not found {#XKB-338}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Error</dd>
<dt>Summary</dt><dd>Could not find a file used in an include statement</dd>
</dl>
### XKB-345 Unknown operator {#XKB-345}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Error</dd>
<dt>Summary</dt><dd>Use of an operator that is unknown and thus unsupported</dd>
</dl>
### XKB-378 Duplicate entry {#XKB-378}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Warning</dd>
<dt>Summary</dt><dd>An entry is duplicated and will be ignored</dd>
</dl>
### XKB-407 Conflicting key type definitions {#XKB-407}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Warning</dd>
<dt>Summary</dt><dd>Conflicting definitions of a key type</dd>
</dl>
The given key type is defined multiple times, but only one definition is kept.
### XKB-428 Wrong scope {#XKB-428}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Error</dd>
<dt>Summary</dt><dd>A statement is in a wrong scope and should be moved</dd>
</dl>
### XKB-433 Missing default section {#XKB-433}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Warning</dd>
<dt>Summary</dt><dd>Missing default section in included file</dd>
</dl>
When using an include statement, the included file may contains multiple sections.
The include statement may specify the name of the section to include, or leave it
unspecified. In the latter case, the included file must then define a *default* section.
The present warning is shown when no default section is defined.
To solve this, either fix the include statement by specifying the exact section to
include, or declare a default section in the included file.
### XKB-461 Conflicting key symbol {#XKB-461} ### XKB-461 Conflicting key symbol {#XKB-461}
<dl> <dl>
@ -166,6 +353,14 @@ as numbers and as identifiers `LevelN`, where `N` is in the range (1..8).
<dt>Summary</dt><dd>Warn if there are conflicting keysyms while merging keys</dd> <dt>Summary</dt><dd>Warn if there are conflicting keysyms while merging keys</dd>
</dl> </dl>
### XKB-478 Invalid operation {#XKB-478}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Error</dd>
<dt>Summary</dt><dd>The operation is invalid in the context</dd>
</dl>
### XKB-489 Numeric keysym {#XKB-489} ### XKB-489 Numeric keysym {#XKB-489}
<dl> <dl>
@ -221,6 +416,22 @@ key <AE01> { [ U1ED0 ] };
<dt>Summary</dt><dd><span class="todo">TODO:</span> add description</dd> <dt>Summary</dt><dd><span class="todo">TODO:</span> add description</dd>
</dl> </dl>
### XKB-523 Conflicting key name {#XKB-523}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Warning</dd>
<dt>Summary</dt><dd>Conflicting definitions of a key name or alias</dd>
</dl>
### XKB-550 Allocation error {#XKB-550}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Error</dd>
<dt>Summary</dt><dd>Cannot allocate memory</dd>
</dl>
### XKB-578 Wrong field type {#XKB-578} ### XKB-578 Wrong field type {#XKB-578}
<dl> <dl>
@ -229,6 +440,14 @@ key <AE01> { [ U1ED0 ] };
<dt>Summary</dt><dd>Warn when a field has not the expected type</dd> <dt>Summary</dt><dd>Warn when a field has not the expected type</dd>
</dl> </dl>
### XKB-623 Invalid real modifier {#XKB-623}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Error</dd>
<dt>Summary</dt><dd>Invalid _real_ modifier</dd>
</dl>
### XKB-645 Unknown char escape sequence {#XKB-645} ### XKB-645 Unknown char escape sequence {#XKB-645}
<dl> <dl>
@ -252,6 +471,14 @@ xkbcommon support the following escape sequences in string literals:
| `\NNN` | _Octal_ escape, from `\0` to `\777` | | `\NNN` | _Octal_ escape, from `\0` to `\777` |
### XKB-661 Invalid included file {#XKB-661}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Error</dd>
<dt>Summary</dt><dd>The target file of an include statement could not be processed</dd>
</dl>
### XKB-700 Multiple groups at once {#XKB-700} ### XKB-700 Multiple groups at once {#XKB-700}
<dl> <dl>
@ -260,6 +487,14 @@ xkbcommon support the following escape sequences in string literals:
<dt>Summary</dt><dd>Warn if a key defines multiple groups at once</dd> <dt>Summary</dt><dd>Warn if a key defines multiple groups at once</dd>
</dl> </dl>
### XKB-711 Unsupported symbols field {#XKB-711}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Warning</dd>
<dt>Summary</dt><dd>A legacy X11 symbol field is not supported</dd>
</dl>
### XKB-769 Invalid syntax {#XKB-769} ### XKB-769 Invalid syntax {#XKB-769}
<dl> <dl>
@ -273,7 +508,23 @@ xkbcommon support the following escape sequences in string literals:
<dl> <dl>
<dt>Since</dt><dd>1.0.0</dd> <dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Warning</dd> <dt>Type</dt><dd>Warning</dd>
<dt>Summary</dt><dd><span class="todo">TODO:</span> add description</dd> <dt>Summary</dt><dd>Reference to an undefined keycode</dd>
</dl>
### XKB-784 Invalid expression type {#XKB-784}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Error</dd>
<dt>Summary</dt><dd>An expression has not the expected type</dd>
</dl>
### XKB-796 Invalid value {#XKB-796}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Error</dd>
<dt>Summary</dt><dd>A value is invalid and will be ignored</dd>
</dl> </dl>
### XKB-800 Conflicting modmap {#XKB-800} ### XKB-800 Conflicting modmap {#XKB-800}
@ -287,6 +538,14 @@ xkbcommon support the following escape sequences in string literals:
@todo detailed explanation and examples @todo detailed explanation and examples
### XKB-812 Unknown field {#XKB-812}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Error</dd>
<dt>Summary</dt><dd>A field is unknown and will be ignored</dd>
</dl>
### XKB-883 Conflicting key action {#XKB-883} ### XKB-883 Conflicting key action {#XKB-883}
<dl> <dl>
@ -295,7 +554,7 @@ xkbcommon support the following escape sequences in string literals:
<dt>Summary</dt><dd>Warn if there are conflicting actions while merging keys</dd> <dt>Summary</dt><dd>Warn if there are conflicting actions while merging keys</dd>
</dl> </dl>
### XKB-893 Conflicting key type {#XKB-893} ### XKB-893 Conflicting key type merging groups {#XKB-893}
<dl> <dl>
<dt>Since</dt><dd>1.0.0</dd> <dt>Since</dt><dd>1.0.0</dd>
@ -303,6 +562,22 @@ xkbcommon support the following escape sequences in string literals:
<dt>Summary</dt><dd>Warn if there are conflicting key types while merging groups</dd> <dt>Summary</dt><dd>Warn if there are conflicting key types while merging groups</dd>
</dl> </dl>
### XKB-901 Conflicting key symbols entry {#XKB-901}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Error</dd>
<dt>Summary</dt><dd>Conflicting symbols entry for a key</dd>
</dl>
### XKB-903 Missing symbols group name index {#XKB-903}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Warning</dd>
<dt>Summary</dt><dd>Missing group index in a group name entry</dd>
</dl>
### XKB-935 Conflicting key fields {#XKB-935} ### XKB-935 Conflicting key fields {#XKB-935}
<dl> <dl>
@ -311,6 +586,14 @@ xkbcommon support the following escape sequences in string literals:
<dt>Summary</dt><dd>Warn if there are conflicting fields while merging keys</dd> <dt>Summary</dt><dd>Warn if there are conflicting fields while merging keys</dd>
</dl> </dl>
### XKB-949 Invalid identifier {#XKB-949}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Error</dd>
<dt>Summary</dt><dd>An identifier is used but is not built-in</dd>
</dl>
### XKB-965 Unresolved keymap symbol {#XKB-965} ### XKB-965 Unresolved keymap symbol {#XKB-965}
<dl> <dl>
@ -319,24 +602,67 @@ xkbcommon support the following escape sequences in string literals:
<dt>Summary</dt><dd>Warn if using a symbol not defined in the keymap</dd> <dt>Summary</dt><dd>Warn if using a symbol not defined in the keymap</dd>
</dl> </dl>
### XKB-971 Undeclared modifiers in key type {#XKB-971}
<dl>
<dt>Since</dt><dd>1.0.0</dd>
<dt>Type</dt><dd>Warning</dd>
<dt>Summary</dt><dd>Some modifiers used in a key type “map” or “preserve” entry are not declared</dd>
</dl>
The modifiers used in `map` or `preserve` entries should be declared using the entry
`modifiers` in the key type.
[XKB-034]: @ref XKB-034 [XKB-034]: @ref XKB-034
[XKB-043]: @ref XKB-043
[XKB-060]: @ref XKB-060 [XKB-060]: @ref XKB-060
[XKB-077]: @ref XKB-077
[XKB-101]: @ref XKB-101
[XKB-107]: @ref XKB-107 [XKB-107]: @ref XKB-107
[XKB-123]: @ref XKB-123
[XKB-150]: @ref XKB-150
[XKB-172]: @ref XKB-172
[XKB-183]: @ref XKB-183 [XKB-183]: @ref XKB-183
[XKB-195]: @ref XKB-195
[XKB-203]: @ref XKB-203
[XKB-206]: @ref XKB-206
[XKB-237]: @ref XKB-237 [XKB-237]: @ref XKB-237
[XKB-239]: @ref XKB-239
[XKB-254]: @ref XKB-254
[XKB-266]: @ref XKB-266
[XKB-286]: @ref XKB-286 [XKB-286]: @ref XKB-286
[XKB-305]: @ref XKB-305 [XKB-305]: @ref XKB-305
[XKB-312]: @ref XKB-312 [XKB-312]: @ref XKB-312
[XKB-338]: @ref XKB-338
[XKB-345]: @ref XKB-345
[XKB-378]: @ref XKB-378
[XKB-407]: @ref XKB-407
[XKB-428]: @ref XKB-428
[XKB-433]: @ref XKB-433
[XKB-461]: @ref XKB-461 [XKB-461]: @ref XKB-461
[XKB-478]: @ref XKB-478
[XKB-489]: @ref XKB-489 [XKB-489]: @ref XKB-489
[XKB-516]: @ref XKB-516 [XKB-516]: @ref XKB-516
[XKB-523]: @ref XKB-523
[XKB-550]: @ref XKB-550
[XKB-578]: @ref XKB-578 [XKB-578]: @ref XKB-578
[XKB-623]: @ref XKB-623
[XKB-645]: @ref XKB-645 [XKB-645]: @ref XKB-645
[XKB-661]: @ref XKB-661
[XKB-700]: @ref XKB-700 [XKB-700]: @ref XKB-700
[XKB-711]: @ref XKB-711
[XKB-769]: @ref XKB-769 [XKB-769]: @ref XKB-769
[XKB-770]: @ref XKB-770 [XKB-770]: @ref XKB-770
[XKB-784]: @ref XKB-784
[XKB-796]: @ref XKB-796
[XKB-800]: @ref XKB-800 [XKB-800]: @ref XKB-800
[XKB-812]: @ref XKB-812
[XKB-883]: @ref XKB-883 [XKB-883]: @ref XKB-883
[XKB-893]: @ref XKB-893 [XKB-893]: @ref XKB-893
[XKB-901]: @ref XKB-901
[XKB-903]: @ref XKB-903
[XKB-935]: @ref XKB-935 [XKB-935]: @ref XKB-935
[XKB-949]: @ref XKB-949
[XKB-965]: @ref XKB-965 [XKB-965]: @ref XKB-965
[XKB-971]: @ref XKB-971

View File

@ -30,11 +30,26 @@
- *decimal integer:* 1, 123, etc. - *decimal integer:* 1, 123, etc.
- *decimal floating-point number:* 1.23, etc. - *decimal floating-point number:* 1.23, etc.
- *hexadecimal integer:* prefixed with “0x”: 0x123, 0xff, 0xAB, etc. - *hexadecimal integer:* prefixed with “0x”: 0x123, 0xff, 0xAB, etc.
- id: "conflicting-key-type-preserve-entries"
code: 43
added: ALWAYS
type: warning
description: "Conflicting “preserve” entries in a key type"
- id: "unsupported-modifier-mask" - id: "unsupported-modifier-mask"
code: 60 code: 60
added: ALWAYS added: ALWAYS
type: error type: error
description: "Warn on unsupported modifier mask" description: "Warn on unsupported modifier mask"
- id: "expected-array-entry"
code: 77
added: ALWAYS
type: error
description: "Expected an array entry, but the index is missing"
- id: "illegal-keycode-alias"
code: 101
added: ALWAYS
type: warning
description: "Illegal keycode alias with the name of a real key"
- id: "unrecognized-keysym" - id: "unrecognized-keysym"
code: 107 code: 107
added: ALWAYS added: ALWAYS
@ -65,11 +80,41 @@
```c ```c
key <AB08> {[ comma, semicolon, periodcentered, multiply ]}; key <AB08> {[ comma, semicolon, periodcentered, multiply ]};
``` ```
- id: "undeclared-virtual-modifier"
code: 123
added: ALWAYS
type: error
description: "A virtual modifier is used before being declared"
- id: "wrong-statement-type"
code: 150
added: ALWAYS
type: error
description: "The type of the statement is not allowed in the context"
- id: "unsupported-geometry-section"
code: 172
added: ALWAYS
type: warning
description: "Geometry sections are not supported"
- id: "cannot-infer-key-type" - id: "cannot-infer-key-type"
code: 183 code: 183
added: ALWAYS added: ALWAYS
type: warning type: warning
description: "Warn if no key type can be inferred" description: "Warn if no key type can be inferred"
- id: "illegal-key-type-preserve-result"
code: 195
added: ALWAYS
type: warning
description: "The result of a key type “preserve” entry must be a subset of its input modifiers."
- id: "invalid-include-statement"
code: 203
added: ALWAYS
type: error
description: "Syntax error in the include statement"
- id: "invalid-modmap-entry"
code: 206
added: ALWAYS
type: error
description: "A modmap entry is invalid"
- id: "unsupported-group-index" - id: "unsupported-group-index"
code: 237 code: 237
added: ALWAYS added: ALWAYS
@ -77,6 +122,21 @@
description: "Warn when a group index is not supported" description: "Warn when a group index is not supported"
details: | details: |
xkbcommon supports group index in the range (1..{{XKB_MAX_GROUPS}}). xkbcommon supports group index in the range (1..{{XKB_MAX_GROUPS}}).
- id: "conflicting-key-type-level-names"
code: 239
added: ALWAYS
type: warning
description: "The name of a key type level is defined multiple times."
- id: "invalid-set-default-statement"
code: 254
added: ALWAYS
type: error
description: "Invalid statement setting default values"
- id: "conflicting-key-type-map-entry"
code: 266
added: ALWAYS
type: warning
description: "Conflicting “map” entries in type definition"
- id: "undefined-key-type" - id: "undefined-key-type"
code: 286 code: 286
added: ALWAYS added: ALWAYS
@ -95,11 +155,56 @@
details: | details: |
Shift levels are _one_-indexed. xkbcommon supports two formats of shift levels: Shift levels are _one_-indexed. xkbcommon supports two formats of shift levels:
as numbers and as identifiers `LevelN`, where `N` is in the range (1..8). as numbers and as identifiers `LevelN`, where `N` is in the range (1..8).
- id: "included-file-not-found"
code: 338
added: ALWAYS
type: error
description: "Could not find a file used in an include statement"
- id: "unknown-operator"
code: 345
added: ALWAYS
type: error
description: "Use of an operator that is unknown and thus unsupported"
- id: "duplicate-entry"
code: 378
added: ALWAYS
type: warning
description: "An entry is duplicated and will be ignored"
- id: "conflicting-key-type-definitions"
code: 407
added: ALWAYS
type: warning
description: "Conflicting definitions of a key type"
details: |
The given key type is defined multiple times, but only one definition is kept.
- id: "wrong-scope"
code: 428
added: ALWAYS
type: error
description: "A statement is in a wrong scope and should be moved"
- id: "missing-default-section"
code: 433
added: ALWAYS
type: warning
description: "Missing default section in included file"
details: |
When using an include statement, the included file may contains multiple sections.
The include statement may specify the name of the section to include, or leave it
unspecified. In the latter case, the included file must then define a *default* section.
The present warning is shown when no default section is defined.
To solve this, either fix the include statement by specifying the exact section to
include, or declare a default section in the included file.
- id: "conflicting-key-symbol" - id: "conflicting-key-symbol"
code: 461 code: 461
added: ALWAYS added: ALWAYS
type: warning type: warning
description: "Warn if there are conflicting keysyms while merging keys" description: "Warn if there are conflicting keysyms while merging keys"
- id: "invalid-operation"
code: 478
added: ALWAYS
type: error
description: "The operation is invalid in the context"
- id: "numeric-keysym" - id: "numeric-keysym"
code: 489 code: 489
added: 1.6.0 added: 1.6.0
@ -132,11 +237,26 @@
added: ALWAYS added: ALWAYS
type: warning type: warning
description: "TODO: add description" description: "TODO: add description"
- id: "conflicting-key-name"
code: 523
added: ALWAYS
type: warning
description: "Conflicting definitions of a key name or alias"
- id: "allocation-error"
code: 550
added: ALWAYS
type: error
description: "Cannot allocate memory"
- id: "wrong-field-type" - id: "wrong-field-type"
code: 578 code: 578
added: ALWAYS added: ALWAYS
type: error type: error
description: "Warn when a field has not the expected type" description: "Warn when a field has not the expected type"
- id: "invalid-real-modifier"
code: 623
added: ALWAYS
type: error
description: "Invalid _real_ modifier"
- id: "unknown-char-escape-sequence" - id: "unknown-char-escape-sequence"
code: 645 code: 645
added: ALWAYS added: ALWAYS
@ -156,11 +276,21 @@
| `\e` | `U+001B` Escape | | `\e` | `U+001B` Escape |
| `\\` | `U+005C` Backslash | | `\\` | `U+005C` Backslash |
| `\NNN` | _Octal_ escape, from `\0` to `\777` | | `\NNN` | _Octal_ escape, from `\0` to `\777` |
- id: "invalid-included-file"
code: 661
added: ALWAYS
type: error
description: "The target file of an include statement could not be processed"
- id: "multiple-groups-at-once" - id: "multiple-groups-at-once"
code: 700 code: 700
added: ALWAYS added: ALWAYS
type: warning type: warning
description: "Warn if a key defines multiple groups at once" description: "Warn if a key defines multiple groups at once"
- id: "unsupported-symbols-field"
code: 711
added: ALWAYS
type: warning
description: "A legacy X11 symbol field is not supported"
- id: "invalid-syntax" - id: "invalid-syntax"
code: 769 code: 769
added: ALWAYS added: ALWAYS
@ -170,7 +300,17 @@
code: 770 code: 770
added: ALWAYS added: ALWAYS
type: warning type: warning
description: "TODO: add description" description: "Reference to an undefined keycode"
- id: "invalid-expression-type"
code: 784
added: ALWAYS
type: error
description: "An expression has not the expected type"
- id: "invalid-value"
code: 796
added: ALWAYS
type: error
description: "A value is invalid and will be ignored"
- id: "conflicting-modmap" - id: "conflicting-modmap"
code: 800 code: 800
added: ALWAYS added: ALWAYS
@ -178,26 +318,54 @@
description: "Warn if there are conflicting modmap definitions" description: "Warn if there are conflicting modmap definitions"
details: | details: |
@todo detailed explanation and examples @todo detailed explanation and examples
- id: "unknown-field"
code: 812
added: ALWAYS
type: error
description: "A field is unknown and will be ignored"
- id: "conflicting-key-action" - id: "conflicting-key-action"
code: 883 code: 883
added: ALWAYS added: ALWAYS
type: warning type: warning
description: "Warn if there are conflicting actions while merging keys" description: "Warn if there are conflicting actions while merging keys"
- id: "conflicting-key-type" - id: "conflicting-key-type-merging-groups"
code: 893 code: 893
added: ALWAYS added: ALWAYS
type: warning type: warning
description: "Warn if there are conflicting key types while merging groups" description: "Warn if there are conflicting key types while merging groups"
- id: "conflicting-key-symbols-entry"
code: 901
added: ALWAYS
type: error
description: "Conflicting symbols entry for a key"
- id: "missing-symbols-group-name-index"
code: 903
added: ALWAYS
type: warning
description: "Missing group index in a group name entry"
- id: "conflicting-key-fields" - id: "conflicting-key-fields"
code: 935 code: 935
added: ALWAYS added: ALWAYS
type: warning type: warning
description: "Warn if there are conflicting fields while merging keys" description: "Warn if there are conflicting fields while merging keys"
- id: "invalid-identifier"
code: 949
added: ALWAYS
type: error
description: "An identifier is used but is not built-in"
- id: "unresolved-keymap-symbol" - id: "unresolved-keymap-symbol"
code: 965 code: 965
added: ALWAYS added: ALWAYS
type: warning type: warning
description: "Warn if using a symbol not defined in the keymap" description: "Warn if using a symbol not defined in the keymap"
- id: "undeclared-modifiers-in-key-type"
code: 971
added: ALWAYS
type: warning
description: "Some modifiers used in a key type “map” or “preserve” entry are not declared"
details: |
The modifiers used in `map` or `preserve` entries should be declared using the entry
`modifiers` in the key type.
# TODO: deprecated keysym # TODO: deprecated keysym
# TODO: unicode keysym when named and recommended keysym exists # TODO: unicode keysym when named and recommended keysym exists

View File

@ -138,10 +138,8 @@ xkb_context_sanitize_rule_names(struct xkb_context *ctx,
xkb_log_with_code((ctx), XKB_LOG_LEVEL_CRITICAL, 0, (id), __VA_ARGS__) xkb_log_with_code((ctx), XKB_LOG_LEVEL_CRITICAL, 0, (id), __VA_ARGS__)
#define log_wsgo(ctx, ...) \ #define log_wsgo(ctx, ...) \
xkb_log((ctx), XKB_LOG_LEVEL_CRITICAL, 0, __VA_ARGS__) xkb_log((ctx), XKB_LOG_LEVEL_CRITICAL, 0, __VA_ARGS__)
#define log_vrb_with_code(ctx, vrb, id, ...) \ #define log_vrb(ctx, vrb, id, ...) \
xkb_log_with_code((ctx), XKB_LOG_LEVEL_WARNING, (vrb), (id), __VA_ARGS__) xkb_log_with_code((ctx), XKB_LOG_LEVEL_WARNING, (vrb), (id), __VA_ARGS__)
#define log_vrb(ctx, vrb, ...) \
xkb_log((ctx), XKB_LOG_LEVEL_WARNING, (vrb), __VA_ARGS__)
/* /*
* Variants which are prefixed by the name of the function they're * Variants which are prefixed by the name of the function they're

View File

@ -6,6 +6,14 @@
#include <stdint.h> #include <stdint.h>
/**
* Special case when no message identifier is defined.
*
* @added 1.6.0
*
*/
#define XKB_LOG_MESSAGE_NO_ID 0
/** /**
* @name Codes of the log messages * @name Codes of the log messages
* *
@ -16,47 +24,109 @@ enum xkb_message_code {
_XKB_LOG_MESSAGE_MIN_CODE = 34, _XKB_LOG_MESSAGE_MIN_CODE = 34,
/** Warn on malformed number literals */ /** Warn on malformed number literals */
XKB_ERROR_MALFORMED_NUMBER_LITERAL = 34, XKB_ERROR_MALFORMED_NUMBER_LITERAL = 34,
/** Conflicting “preserve” entries in a key type */
XKB_WARNING_CONFLICTING_KEY_TYPE_PRESERVE_ENTRIES = 43,
/** Warn on unsupported modifier mask */ /** Warn on unsupported modifier mask */
XKB_ERROR_UNSUPPORTED_MODIFIER_MASK = 60, XKB_ERROR_UNSUPPORTED_MODIFIER_MASK = 60,
/** Expected an array entry, but the index is missing */
XKB_ERROR_EXPECTED_ARRAY_ENTRY = 77,
/** Illegal keycode alias with the name of a real key */
XKB_WARNING_ILLEGAL_KEYCODE_ALIAS = 101,
/** Warn on unrecognized keysyms */ /** Warn on unrecognized keysyms */
XKB_WARNING_UNRECOGNIZED_KEYSYM = 107, XKB_WARNING_UNRECOGNIZED_KEYSYM = 107,
/** A virtual modifier is used before being declared */
XKB_ERROR_UNDECLARED_VIRTUAL_MODIFIER = 123,
/** The type of the statement is not allowed in the context */
XKB_ERROR_WRONG_STATEMENT_TYPE = 150,
/** Geometry sections are not supported */
XKB_WARNING_UNSUPPORTED_GEOMETRY_SECTION = 172,
/** Warn if no key type can be inferred */ /** Warn if no key type can be inferred */
XKB_WARNING_CANNOT_INFER_KEY_TYPE = 183, XKB_WARNING_CANNOT_INFER_KEY_TYPE = 183,
/** The result of a key type “preserve” entry must be a subset of its input modifiers. */
XKB_WARNING_ILLEGAL_KEY_TYPE_PRESERVE_RESULT = 195,
/** Syntax error in the include statement */
XKB_ERROR_INVALID_INCLUDE_STATEMENT = 203,
/** A modmap entry is invalid */
XKB_ERROR_INVALID_MODMAP_ENTRY = 206,
/** Warn when a group index is not supported */ /** Warn when a group index is not supported */
XKB_ERROR_UNSUPPORTED_GROUP_INDEX = 237, XKB_ERROR_UNSUPPORTED_GROUP_INDEX = 237,
/** The name of a key type level is defined multiple times. */
XKB_WARNING_CONFLICTING_KEY_TYPE_LEVEL_NAMES = 239,
/** Invalid statement setting default values */
XKB_ERROR_INVALID_SET_DEFAULT_STATEMENT = 254,
/** Conflicting “map” entries in type definition */
XKB_WARNING_CONFLICTING_KEY_TYPE_MAP_ENTRY = 266,
/** Warn if using an undefined key type */ /** Warn if using an undefined key type */
XKB_WARNING_UNDEFINED_KEY_TYPE = 286, XKB_WARNING_UNDEFINED_KEY_TYPE = 286,
/** Warn if a group name was defined for group other than the first one */ /** Warn if a group name was defined for group other than the first one */
XKB_WARNING_NON_BASE_GROUP_NAME = 305, XKB_WARNING_NON_BASE_GROUP_NAME = 305,
/** Warn when a shift level is not supported */ /** Warn when a shift level is not supported */
XKB_ERROR_UNSUPPORTED_SHIFT_LEVEL = 312, XKB_ERROR_UNSUPPORTED_SHIFT_LEVEL = 312,
/** Could not find a file used in an include statement */
XKB_ERROR_INCLUDED_FILE_NOT_FOUND = 338,
/** Use of an operator that is unknown and thus unsupported */
XKB_ERROR_UNKNOWN_OPERATOR = 345,
/** An entry is duplicated and will be ignored */
XKB_WARNING_DUPLICATE_ENTRY = 378,
/** Conflicting definitions of a key type */
XKB_WARNING_CONFLICTING_KEY_TYPE_DEFINITIONS = 407,
/** A statement is in a wrong scope and should be moved */
XKB_ERROR_WRONG_SCOPE = 428,
/** Missing default section in included file */
XKB_WARNING_MISSING_DEFAULT_SECTION = 433,
/** Warn if there are conflicting keysyms while merging keys */ /** Warn if there are conflicting keysyms while merging keys */
XKB_WARNING_CONFLICTING_KEY_SYMBOL = 461, XKB_WARNING_CONFLICTING_KEY_SYMBOL = 461,
/** The operation is invalid in the context */
XKB_ERROR_INVALID_OPERATION = 478,
/** Warn on numeric keysym (other than 0-9) */ /** Warn on numeric keysym (other than 0-9) */
XKB_WARNING_NUMERIC_KEYSYM = 489, XKB_WARNING_NUMERIC_KEYSYM = 489,
/** TODO: add description */ /** TODO: add description */
XKB_WARNING_EXTRA_SYMBOLS_IGNORED = 516, XKB_WARNING_EXTRA_SYMBOLS_IGNORED = 516,
/** Conflicting definitions of a key name or alias */
XKB_WARNING_CONFLICTING_KEY_NAME = 523,
/** Cannot allocate memory */
XKB_ERROR_ALLOCATION_ERROR = 550,
/** Warn when a field has not the expected type */ /** Warn when a field has not the expected type */
XKB_ERROR_WRONG_FIELD_TYPE = 578, XKB_ERROR_WRONG_FIELD_TYPE = 578,
/** Invalid _real_ modifier */
XKB_ERROR_INVALID_REAL_MODIFIER = 623,
/** Warn on unknown escape sequence in string literal */ /** Warn on unknown escape sequence in string literal */
XKB_WARNING_UNKNOWN_CHAR_ESCAPE_SEQUENCE = 645, XKB_WARNING_UNKNOWN_CHAR_ESCAPE_SEQUENCE = 645,
/** The target file of an include statement could not be processed */
XKB_ERROR_INVALID_INCLUDED_FILE = 661,
/** Warn if a key defines multiple groups at once */ /** Warn if a key defines multiple groups at once */
XKB_WARNING_MULTIPLE_GROUPS_AT_ONCE = 700, XKB_WARNING_MULTIPLE_GROUPS_AT_ONCE = 700,
/** A legacy X11 symbol field is not supported */
XKB_WARNING_UNSUPPORTED_SYMBOLS_FIELD = 711,
/** The syntax is invalid and the file cannot be parsed */ /** The syntax is invalid and the file cannot be parsed */
XKB_ERROR_INVALID_SYNTAX = 769, XKB_ERROR_INVALID_SYNTAX = 769,
/** TODO: add description */ /** Reference to an undefined keycode */
XKB_WARNING_UNDEFINED_KEYCODE = 770, XKB_WARNING_UNDEFINED_KEYCODE = 770,
/** An expression has not the expected type */
XKB_ERROR_INVALID_EXPRESSION_TYPE = 784,
/** A value is invalid and will be ignored */
XKB_ERROR_INVALID_VALUE = 796,
/** Warn if there are conflicting modmap definitions */ /** Warn if there are conflicting modmap definitions */
XKB_WARNING_CONFLICTING_MODMAP = 800, XKB_WARNING_CONFLICTING_MODMAP = 800,
/** A field is unknown and will be ignored */
XKB_ERROR_UNKNOWN_FIELD = 812,
/** Warn if there are conflicting actions while merging keys */ /** Warn if there are conflicting actions while merging keys */
XKB_WARNING_CONFLICTING_KEY_ACTION = 883, XKB_WARNING_CONFLICTING_KEY_ACTION = 883,
/** Warn if there are conflicting key types while merging groups */ /** Warn if there are conflicting key types while merging groups */
XKB_WARNING_CONFLICTING_KEY_TYPE = 893, XKB_WARNING_CONFLICTING_KEY_TYPE_MERGING_GROUPS = 893,
/** Conflicting symbols entry for a key */
XKB_ERROR_CONFLICTING_KEY_SYMBOLS_ENTRY = 901,
/** Missing group index in a group name entry */
XKB_WARNING_MISSING_SYMBOLS_GROUP_NAME_INDEX = 903,
/** Warn if there are conflicting fields while merging keys */ /** Warn if there are conflicting fields while merging keys */
XKB_WARNING_CONFLICTING_KEY_FIELDS = 935, XKB_WARNING_CONFLICTING_KEY_FIELDS = 935,
/** An identifier is used but is not built-in */
XKB_ERROR_INVALID_IDENTIFIER = 949,
/** Warn if using a symbol not defined in the keymap */ /** Warn if using a symbol not defined in the keymap */
XKB_WARNING_UNRESOLVED_KEYMAP_SYMBOL = 965, XKB_WARNING_UNRESOLVED_KEYMAP_SYMBOL = 965,
_XKB_LOG_MESSAGE_MAX_CODE = 965 /** Some modifiers used in a key type “map” or “preserve” entry are not declared */
XKB_WARNING_UNDECLARED_MODIFIERS_IN_KEY_TYPE = 971,
_XKB_LOG_MESSAGE_MAX_CODE = 971
}; };
typedef uint32_t xkb_message_code_t; typedef uint32_t xkb_message_code_t;

View File

@ -6,6 +6,14 @@
#include <stdint.h> #include <stdint.h>
/**
* Special case when no message identifier is defined.
*
* @added 1.6.0
*
*/
#define XKB_LOG_MESSAGE_NO_ID 0
/** /**
* @name Codes of the log messages * @name Codes of the log messages
* *

View File

@ -525,7 +525,9 @@ IncludeCreate(struct xkb_context *ctx, char *str, enum merge_mode merge)
return first; return first;
err: err:
log_err(ctx, "Illegal include statement \"%s\"; Ignored\n", stmt); log_err_with_code(ctx,
XKB_ERROR_INVALID_INCLUDE_STATEMENT,
"Illegal include statement \"%s\"; Ignored\n", stmt);
FreeInclude(first); FreeInclude(first);
free(stmt); free(stmt);
return NULL; return NULL;

View File

@ -63,7 +63,9 @@ ExprResolveLhs(struct xkb_context *ctx, const ExprDef *expr,
default: default:
break; break;
} }
log_wsgo(ctx, "Unexpected operator %d in ResolveLhs\n", expr->expr.op); log_wsgo_with_code(ctx,
XKB_ERROR_INVALID_SYNTAX,
"Unexpected operator %d in ResolveLhs\n", expr->expr.op);
return false; return false;
} }
@ -139,7 +141,8 @@ ExprResolveBoolean(struct xkb_context *ctx, const ExprDef *expr,
switch (expr->expr.op) { switch (expr->expr.op) {
case EXPR_VALUE: case EXPR_VALUE:
if (expr->expr.value_type != EXPR_TYPE_BOOLEAN) { if (expr->expr.value_type != EXPR_TYPE_BOOLEAN) {
log_err(ctx, log_err_with_code(ctx,
XKB_ERROR_WRONG_FIELD_TYPE,
"Found constant of type %s where boolean was expected\n", "Found constant of type %s where boolean was expected\n",
expr_value_type_to_string(expr->expr.value_type)); expr_value_type_to_string(expr->expr.value_type));
return false; return false;
@ -163,11 +166,15 @@ ExprResolveBoolean(struct xkb_context *ctx, const ExprDef *expr,
return true; return true;
} }
} }
log_err(ctx, "Identifier \"%s\" of type boolean is unknown\n", ident); log_err_with_code(ctx,
XKB_ERROR_INVALID_IDENTIFIER,
"Identifier \"%s\" of type boolean is unknown\n", ident);
return false; return false;
case EXPR_FIELD_REF: case EXPR_FIELD_REF:
log_err(ctx, "Default \"%s.%s\" of type boolean is unknown\n", log_err_with_code(ctx,
XKB_ERROR_INVALID_EXPRESSION_TYPE,
"Default \"%s.%s\" of type boolean is unknown\n",
xkb_atom_text(ctx, expr->field_ref.element), xkb_atom_text(ctx, expr->field_ref.element),
xkb_atom_text(ctx, expr->field_ref.field)); xkb_atom_text(ctx, expr->field_ref.field));
return false; return false;
@ -188,12 +195,16 @@ ExprResolveBoolean(struct xkb_context *ctx, const ExprDef *expr,
case EXPR_ACTION_DECL: case EXPR_ACTION_DECL:
case EXPR_ACTION_LIST: case EXPR_ACTION_LIST:
case EXPR_KEYSYM_LIST: case EXPR_KEYSYM_LIST:
log_err(ctx, "%s of boolean values not permitted\n", log_err_with_code(ctx,
XKB_ERROR_INVALID_OPERATION,
"%s of boolean values not permitted\n",
expr_op_type_to_string(expr->expr.op)); expr_op_type_to_string(expr->expr.op));
break; break;
default: default:
log_wsgo(ctx, "Unknown operator %d in ResolveBoolean\n", log_wsgo_with_code(ctx,
XKB_ERROR_UNKNOWN_OPERATOR,
"Unknown operator %d in ResolveBoolean\n",
expr->expr.op); expr->expr.op);
break; break;
} }
@ -210,7 +221,8 @@ ExprResolveKeyCode(struct xkb_context *ctx, const ExprDef *expr,
switch (expr->expr.op) { switch (expr->expr.op) {
case EXPR_VALUE: case EXPR_VALUE:
if (expr->expr.value_type != EXPR_TYPE_INT) { if (expr->expr.value_type != EXPR_TYPE_INT) {
log_err(ctx, log_err_with_code(ctx,
XKB_ERROR_WRONG_FIELD_TYPE,
"Found constant of type %s where an int was expected\n", "Found constant of type %s where an int was expected\n",
expr_value_type_to_string(expr->expr.value_type)); expr_value_type_to_string(expr->expr.value_type));
return false; return false;
@ -239,7 +251,9 @@ ExprResolveKeyCode(struct xkb_context *ctx, const ExprDef *expr,
break; break;
case EXPR_DIVIDE: case EXPR_DIVIDE:
if (rightRtrn == 0) { if (rightRtrn == 0) {
log_err(ctx, "Cannot divide by zero: %d / %d\n", log_err_with_code(ctx,
XKB_ERROR_INVALID_OPERATION,
"Cannot divide by zero: %d / %d\n",
leftRtrn, rightRtrn); leftRtrn, rightRtrn);
return false; return false;
} }
@ -263,8 +277,9 @@ ExprResolveKeyCode(struct xkb_context *ctx, const ExprDef *expr,
return ExprResolveKeyCode(ctx, expr->unary.child, kc); return ExprResolveKeyCode(ctx, expr->unary.child, kc);
default: default:
log_wsgo(ctx, "Unknown operator %d in ResolveKeyCode\n", log_wsgo_with_code(ctx,
expr->expr.op); XKB_ERROR_INVALID_SYNTAX,
"Unknown operator %d in ResolveKeyCode\n", expr->expr.op);
break; break;
} }
@ -294,7 +309,8 @@ ExprResolveIntegerLookup(struct xkb_context *ctx, const ExprDef *expr,
switch (expr->expr.op) { switch (expr->expr.op) {
case EXPR_VALUE: case EXPR_VALUE:
if (expr->expr.value_type != EXPR_TYPE_INT) { if (expr->expr.value_type != EXPR_TYPE_INT) {
log_err(ctx, log_err_with_code(ctx,
XKB_ERROR_WRONG_FIELD_TYPE,
"Found constant of type %s where an int was expected\n", "Found constant of type %s where an int was expected\n",
expr_value_type_to_string(expr->expr.value_type)); expr_value_type_to_string(expr->expr.value_type));
return false; return false;
@ -308,7 +324,9 @@ ExprResolveIntegerLookup(struct xkb_context *ctx, const ExprDef *expr,
ok = lookup(ctx, lookupPriv, expr->ident.ident, EXPR_TYPE_INT, &u); ok = lookup(ctx, lookupPriv, expr->ident.ident, EXPR_TYPE_INT, &u);
if (!ok) if (!ok)
log_err(ctx, "Identifier \"%s\" of type int is unknown\n", log_err_with_code(ctx,
XKB_ERROR_INVALID_IDENTIFIER,
"Identifier \"%s\" of type int is unknown\n",
xkb_atom_text(ctx, expr->ident.ident)); xkb_atom_text(ctx, expr->ident.ident));
else else
*val_rtrn = (int) u; *val_rtrn = (int) u;
@ -316,7 +334,9 @@ ExprResolveIntegerLookup(struct xkb_context *ctx, const ExprDef *expr,
return ok; return ok;
case EXPR_FIELD_REF: case EXPR_FIELD_REF:
log_err(ctx, "Default \"%s.%s\" of type int is unknown\n", log_err_with_code(ctx,
XKB_ERROR_INVALID_EXPRESSION_TYPE,
"Default \"%s.%s\" of type int is unknown\n",
xkb_atom_text(ctx, expr->field_ref.element), xkb_atom_text(ctx, expr->field_ref.element),
xkb_atom_text(ctx, expr->field_ref.field)); xkb_atom_text(ctx, expr->field_ref.field));
return false; return false;
@ -343,13 +363,17 @@ ExprResolveIntegerLookup(struct xkb_context *ctx, const ExprDef *expr,
break; break;
case EXPR_DIVIDE: case EXPR_DIVIDE:
if (r == 0) { if (r == 0) {
log_err(ctx, "Cannot divide by zero: %d / %d\n", l, r); log_err_with_code(ctx,
XKB_ERROR_INVALID_OPERATION,
"Cannot divide by zero: %d / %d\n", l, r);
return false; return false;
} }
*val_rtrn = l / r; *val_rtrn = l / r;
break; break;
default: default:
log_err(ctx, "%s of integers not permitted\n", log_err_with_code(ctx,
XKB_ERROR_INVALID_OPERATION,
"%s of integers not permitted\n",
expr_op_type_to_string(expr->expr.op)); expr_op_type_to_string(expr->expr.op));
return false; return false;
} }
@ -357,11 +381,15 @@ ExprResolveIntegerLookup(struct xkb_context *ctx, const ExprDef *expr,
return true; return true;
case EXPR_ASSIGN: case EXPR_ASSIGN:
log_wsgo(ctx, "Assignment operator not implemented yet\n"); log_wsgo_with_code(ctx,
XKB_ERROR_INVALID_OPERATION,
"Assignment operator not implemented yet\n");
break; break;
case EXPR_NOT: case EXPR_NOT:
log_err(ctx, "The ! operator cannot be applied to an integer\n"); log_err_with_code(ctx,
XKB_ERROR_INVALID_OPERATION,
"The ! operator cannot be applied to an integer\n");
return false; return false;
case EXPR_INVERT: case EXPR_INVERT:
@ -379,7 +407,9 @@ ExprResolveIntegerLookup(struct xkb_context *ctx, const ExprDef *expr,
lookupPriv); lookupPriv);
default: default:
log_wsgo(ctx, "Unknown operator %d in ResolveInteger\n", log_wsgo_with_code(ctx,
XKB_ERROR_UNKNOWN_OPERATOR,
"Unknown operator %d in ResolveInteger\n",
expr->expr.op); expr->expr.op);
break; break;
} }
@ -454,7 +484,9 @@ ExprResolveString(struct xkb_context *ctx, const ExprDef *expr,
switch (expr->expr.op) { switch (expr->expr.op) {
case EXPR_VALUE: case EXPR_VALUE:
if (expr->expr.value_type != EXPR_TYPE_STRING) { if (expr->expr.value_type != EXPR_TYPE_STRING) {
log_err(ctx, "Found constant of type %s, expected a string\n", log_err_with_code(ctx,
XKB_ERROR_WRONG_FIELD_TYPE,
"Found constant of type %s, expected a string\n",
expr_value_type_to_string(expr->expr.value_type)); expr_value_type_to_string(expr->expr.value_type));
return false; return false;
} }
@ -463,12 +495,16 @@ ExprResolveString(struct xkb_context *ctx, const ExprDef *expr,
return true; return true;
case EXPR_IDENT: case EXPR_IDENT:
log_err(ctx, "Identifier \"%s\" of type string not found\n", log_err_with_code(ctx,
XKB_ERROR_INVALID_IDENTIFIER,
"Identifier \"%s\" of type string not found\n",
xkb_atom_text(ctx, expr->ident.ident)); xkb_atom_text(ctx, expr->ident.ident));
return false; return false;
case EXPR_FIELD_REF: case EXPR_FIELD_REF:
log_err(ctx, "Default \"%s.%s\" of type string not found\n", log_err_with_code(ctx,
XKB_ERROR_INVALID_EXPRESSION_TYPE,
"Default \"%s.%s\" of type string not found\n",
xkb_atom_text(ctx, expr->field_ref.element), xkb_atom_text(ctx, expr->field_ref.element),
xkb_atom_text(ctx, expr->field_ref.field)); xkb_atom_text(ctx, expr->field_ref.field));
return false; return false;
@ -485,12 +521,16 @@ ExprResolveString(struct xkb_context *ctx, const ExprDef *expr,
case EXPR_ACTION_DECL: case EXPR_ACTION_DECL:
case EXPR_ACTION_LIST: case EXPR_ACTION_LIST:
case EXPR_KEYSYM_LIST: case EXPR_KEYSYM_LIST:
log_err(ctx, "%s of strings not permitted\n", log_err_with_code(ctx,
XKB_ERROR_INVALID_SYNTAX,
"%s of strings not permitted\n",
expr_op_type_to_string(expr->expr.op)); expr_op_type_to_string(expr->expr.op));
return false; return false;
default: default:
log_wsgo(ctx, "Unknown operator %d in ResolveString\n", log_wsgo_with_code(ctx,
XKB_ERROR_UNKNOWN_OPERATOR,
"Unknown operator %d in ResolveString\n",
expr->expr.op); expr->expr.op);
break; break;
} }
@ -502,18 +542,22 @@ ExprResolveEnum(struct xkb_context *ctx, const ExprDef *expr,
unsigned int *val_rtrn, const LookupEntry *values) unsigned int *val_rtrn, const LookupEntry *values)
{ {
if (expr->expr.op != EXPR_IDENT) { if (expr->expr.op != EXPR_IDENT) {
log_err(ctx, "Found a %s where an enumerated value was expected\n", log_err_with_code(ctx,
XKB_ERROR_WRONG_FIELD_TYPE,
"Found a %s where an enumerated value was expected\n",
expr_op_type_to_string(expr->expr.op)); expr_op_type_to_string(expr->expr.op));
return false; return false;
} }
if (!SimpleLookup(ctx, values, expr->ident.ident, EXPR_TYPE_INT, if (!SimpleLookup(ctx, values, expr->ident.ident, EXPR_TYPE_INT,
val_rtrn)) { val_rtrn)) {
log_err(ctx, "Illegal identifier %s; expected one of:\n", log_err_with_code(ctx,
XKB_ERROR_INVALID_IDENTIFIER,
"Illegal identifier %s; expected one of:\n",
xkb_atom_text(ctx, expr->ident.ident)); xkb_atom_text(ctx, expr->ident.ident));
while (values && values->name) while (values && values->name)
{ {
log_err(ctx, "\t%s\n", values->name); log_err_with_code(ctx, XKB_ERROR_INVALID_IDENTIFIER, "\t%s\n", values->name);
values++; values++;
} }
return false; return false;
@ -536,7 +580,8 @@ ExprResolveMaskLookup(struct xkb_context *ctx, const ExprDef *expr,
switch (expr->expr.op) { switch (expr->expr.op) {
case EXPR_VALUE: case EXPR_VALUE:
if (expr->expr.value_type != EXPR_TYPE_INT) { if (expr->expr.value_type != EXPR_TYPE_INT) {
log_err(ctx, log_err_with_code(ctx,
XKB_ERROR_WRONG_FIELD_TYPE,
"Found constant of type %s where a mask was expected\n", "Found constant of type %s where a mask was expected\n",
expr_value_type_to_string(expr->expr.value_type)); expr_value_type_to_string(expr->expr.value_type));
return false; return false;
@ -548,12 +593,16 @@ ExprResolveMaskLookup(struct xkb_context *ctx, const ExprDef *expr,
ok = lookup(ctx, lookupPriv, expr->ident.ident, EXPR_TYPE_INT, ok = lookup(ctx, lookupPriv, expr->ident.ident, EXPR_TYPE_INT,
val_rtrn); val_rtrn);
if (!ok) if (!ok)
log_err(ctx, "Identifier \"%s\" of type int is unknown\n", log_err_with_code(ctx,
XKB_ERROR_INVALID_IDENTIFIER,
"Identifier \"%s\" of type int is unknown\n",
xkb_atom_text(ctx, expr->ident.ident)); xkb_atom_text(ctx, expr->ident.ident));
return ok; return ok;
case EXPR_FIELD_REF: case EXPR_FIELD_REF:
log_err(ctx, "Default \"%s.%s\" of type int is unknown\n", log_err_with_code(ctx,
XKB_ERROR_INVALID_EXPRESSION_TYPE,
"Default \"%s.%s\" of type int is unknown\n",
xkb_atom_text(ctx, expr->field_ref.element), xkb_atom_text(ctx, expr->field_ref.element),
xkb_atom_text(ctx, expr->field_ref.field)); xkb_atom_text(ctx, expr->field_ref.field));
return false; return false;
@ -564,7 +613,8 @@ ExprResolveMaskLookup(struct xkb_context *ctx, const ExprDef *expr,
case EXPR_ACTION_DECL: case EXPR_ACTION_DECL:
if (bogus == NULL) if (bogus == NULL)
bogus = "function use"; bogus = "function use";
log_err(ctx, log_err_with_code(ctx,
XKB_ERROR_WRONG_FIELD_TYPE,
"Unexpected %s in mask expression; Expression Ignored\n", "Unexpected %s in mask expression; Expression Ignored\n",
bogus); bogus);
return false; return false;
@ -588,7 +638,9 @@ ExprResolveMaskLookup(struct xkb_context *ctx, const ExprDef *expr,
break; break;
case EXPR_MULTIPLY: case EXPR_MULTIPLY:
case EXPR_DIVIDE: case EXPR_DIVIDE:
log_err(ctx, "Cannot %s masks; Illegal operation ignored\n", log_err_with_code(ctx,
XKB_ERROR_INVALID_OPERATION,
"Cannot %s masks; Illegal operation ignored\n",
(expr->expr.op == EXPR_DIVIDE ? "divide" : "multiply")); (expr->expr.op == EXPR_DIVIDE ? "divide" : "multiply"));
return false; return false;
default: default:
@ -598,7 +650,9 @@ ExprResolveMaskLookup(struct xkb_context *ctx, const ExprDef *expr,
return true; return true;
case EXPR_ASSIGN: case EXPR_ASSIGN:
log_wsgo(ctx, "Assignment operator not implemented yet\n"); log_wsgo_with_code(ctx,
XKB_ERROR_INVALID_OPERATION,
"Assignment operator not implemented yet\n");
break; break;
case EXPR_INVERT: case EXPR_INVERT:
@ -614,12 +668,16 @@ ExprResolveMaskLookup(struct xkb_context *ctx, const ExprDef *expr,
case EXPR_NOT: case EXPR_NOT:
left = expr->unary.child; left = expr->unary.child;
if (!ExprResolveIntegerLookup(ctx, left, &v, lookup, lookupPriv)) if (!ExprResolveIntegerLookup(ctx, left, &v, lookup, lookupPriv))
log_err(ctx, "The %s operator cannot be used with a mask\n", log_err_with_code(ctx,
XKB_ERROR_INVALID_OPERATION,
"The %s operator cannot be used with a mask\n",
(expr->expr.op == EXPR_NEGATE ? "-" : "!")); (expr->expr.op == EXPR_NEGATE ? "-" : "!"));
return false; return false;
default: default:
log_wsgo(ctx, "Unknown operator %d in ResolveMask\n", log_wsgo_with_code(ctx,
XKB_ERROR_UNKNOWN_OPERATOR,
"Unknown operator %d in ResolveMask\n",
expr->expr.op); expr->expr.op);
break; break;
} }
@ -696,7 +754,8 @@ ExprResolveMod(struct xkb_context *ctx, const ExprDef *def,
xkb_atom_t name; xkb_atom_t name;
if (def->expr.op != EXPR_IDENT) { if (def->expr.op != EXPR_IDENT) {
log_err(ctx, log_err_with_code(ctx,
XKB_ERROR_WRONG_FIELD_TYPE,
"Cannot resolve virtual modifier: " "Cannot resolve virtual modifier: "
"found %s where a virtual modifier name was expected\n", "found %s where a virtual modifier name was expected\n",
expr_op_type_to_string(def->expr.op)); expr_op_type_to_string(def->expr.op));
@ -706,7 +765,8 @@ ExprResolveMod(struct xkb_context *ctx, const ExprDef *def,
name = def->ident.ident; name = def->ident.ident;
ndx = XkbModNameToIndex(mods, name, mod_type); ndx = XkbModNameToIndex(mods, name, mod_type);
if (ndx == XKB_MOD_INVALID) { if (ndx == XKB_MOD_INVALID) {
log_err(ctx, log_err_with_code(ctx,
XKB_ERROR_UNDECLARED_VIRTUAL_MODIFIER,
"Cannot resolve virtual modifier: " "Cannot resolve virtual modifier: "
"\"%s\" was not previously declared\n", "\"%s\" was not previously declared\n",
xkb_atom_text(ctx, name)); xkb_atom_text(ctx, name));

View File

@ -201,21 +201,31 @@ LogIncludePaths(struct xkb_context *ctx)
unsigned int i; unsigned int i;
if (xkb_context_num_include_paths(ctx) > 0) { if (xkb_context_num_include_paths(ctx) > 0) {
log_err(ctx, "%d include paths searched:\n", log_err_with_code(ctx,
XKB_ERROR_INCLUDED_FILE_NOT_FOUND,
"%d include paths searched:\n",
xkb_context_num_include_paths(ctx)); xkb_context_num_include_paths(ctx));
for (i = 0; i < xkb_context_num_include_paths(ctx); i++) for (i = 0; i < xkb_context_num_include_paths(ctx); i++)
log_err(ctx, "\t%s\n", log_err_with_code(ctx,
XKB_ERROR_INCLUDED_FILE_NOT_FOUND,
"\t%s\n",
xkb_context_include_path_get(ctx, i)); xkb_context_include_path_get(ctx, i));
} }
else { else {
log_err(ctx, "There are no include paths to search\n"); log_err_with_code(ctx,
XKB_ERROR_INCLUDED_FILE_NOT_FOUND,
"There are no include paths to search\n");
} }
if (xkb_context_num_failed_include_paths(ctx) > 0) { if (xkb_context_num_failed_include_paths(ctx) > 0) {
log_err(ctx, "%d include paths could not be added:\n", log_err_with_code(ctx,
XKB_ERROR_INCLUDED_FILE_NOT_FOUND,
"%d include paths could not be added:\n",
xkb_context_num_failed_include_paths(ctx)); xkb_context_num_failed_include_paths(ctx));
for (i = 0; i < xkb_context_num_failed_include_paths(ctx); i++) for (i = 0; i < xkb_context_num_failed_include_paths(ctx); i++)
log_err(ctx, "\t%s\n", log_err_with_code(ctx,
XKB_ERROR_INCLUDED_FILE_NOT_FOUND,
"\t%s\n",
xkb_context_failed_include_path_get(ctx, i)); xkb_context_failed_include_path_get(ctx, i));
} }
} }
@ -246,7 +256,9 @@ FindFileInXkbPath(struct xkb_context *ctx, const char *name,
buf = asprintf_safe("%s/%s/%s", xkb_context_include_path_get(ctx, i), buf = asprintf_safe("%s/%s/%s", xkb_context_include_path_get(ctx, i),
typeDir, name); typeDir, name);
if (!buf) { if (!buf) {
log_err(ctx, "Failed to alloc buffer for (%s/%s/%s)\n", log_err_with_code(ctx,
XKB_ERROR_ALLOCATION_ERROR,
"Failed to alloc buffer for (%s/%s/%s)\n",
xkb_context_include_path_get(ctx, i), typeDir, name); xkb_context_include_path_get(ctx, i), typeDir, name);
continue; continue;
} }
@ -264,7 +276,9 @@ FindFileInXkbPath(struct xkb_context *ctx, const char *name,
/* We only print warnings if we can't find the file on the first lookup */ /* We only print warnings if we can't find the file on the first lookup */
if (*offset == 0) { if (*offset == 0) {
log_err(ctx, "Couldn't find file \"%s/%s\" in include paths\n", log_err_with_code(ctx,
XKB_ERROR_INCLUDED_FILE_NOT_FOUND,
"Couldn't find file \"%s/%s\" in include paths\n",
typeDir, name); typeDir, name);
LogIncludePaths(ctx); LogIncludePaths(ctx);
} }
@ -292,7 +306,8 @@ ProcessIncludeFile(struct xkb_context *ctx, IncludeStmt *stmt,
if (xkb_file) { if (xkb_file) {
if (xkb_file->file_type != file_type) { if (xkb_file->file_type != file_type) {
log_err(ctx, log_err_with_code(ctx,
XKB_ERROR_INVALID_INCLUDED_FILE,
"Include file of wrong type (expected %s, got %s); " "Include file of wrong type (expected %s, got %s); "
"Include file \"%s\" ignored\n", "Include file \"%s\" ignored\n",
xkb_file_type_to_string(file_type), xkb_file_type_to_string(file_type),
@ -310,10 +325,14 @@ ProcessIncludeFile(struct xkb_context *ctx, IncludeStmt *stmt,
if (!xkb_file) { if (!xkb_file) {
if (stmt->map) if (stmt->map)
log_err(ctx, "Couldn't process include statement for '%s(%s)'\n", log_err_with_code(ctx,
XKB_ERROR_INVALID_INCLUDED_FILE,
"Couldn't process include statement for '%s(%s)'\n",
stmt->file, stmt->map); stmt->file, stmt->map);
else else
log_err(ctx, "Couldn't process include statement for '%s'\n", log_err_with_code(ctx,
XKB_ERROR_INVALID_INCLUDED_FILE,
"Couldn't process include statement for '%s'\n",
stmt->file); stmt->file);
} }

View File

@ -230,13 +230,15 @@ AddKeyName(KeyNamesInfo *info, xkb_keycode_t kc, xkb_atom_t name,
if (merge == MERGE_OVERRIDE) { if (merge == MERGE_OVERRIDE) {
darray_item(info->key_names, old_kc) = XKB_ATOM_NONE; darray_item(info->key_names, old_kc) = XKB_ATOM_NONE;
if (report) if (report)
log_warn(info->ctx, log_warn_with_code(info->ctx,
XKB_WARNING_CONFLICTING_KEY_NAME,
"Key name %s assigned to multiple keys; " "Key name %s assigned to multiple keys; "
"Using %d, ignoring %d\n", kname, kc, old_kc); "Using %d, ignoring %d\n", kname, kc, old_kc);
} }
else { else {
if (report) if (report)
log_vrb(info->ctx, 3, log_vrb(info->ctx, 3,
XKB_WARNING_CONFLICTING_KEY_NAME,
"Key name %s assigned to multiple keys; " "Key name %s assigned to multiple keys; "
"Using %d, ignoring %d\n", kname, old_kc, kc); "Using %d, ignoring %d\n", kname, old_kc, kc);
return true; return true;
@ -397,6 +399,7 @@ HandleAliasDef(KeyNamesInfo *info, KeyAliasDef *def, enum merge_mode merge)
if (old->alias == def->alias) { if (old->alias == def->alias) {
if (def->real == old->real) { if (def->real == old->real) {
log_vrb(info->ctx, 1, log_vrb(info->ctx, 1,
XKB_WARNING_CONFLICTING_KEY_NAME,
"Alias of %s for %s declared more than once; " "Alias of %s for %s declared more than once; "
"First definition ignored\n", "First definition ignored\n",
KeyNameText(info->ctx, def->alias), KeyNameText(info->ctx, def->alias),
@ -408,7 +411,8 @@ HandleAliasDef(KeyNamesInfo *info, KeyAliasDef *def, enum merge_mode merge)
use = (merge == MERGE_AUGMENT ? old->real : def->real); use = (merge == MERGE_AUGMENT ? old->real : def->real);
ignore = (merge == MERGE_AUGMENT ? def->real : old->real); ignore = (merge == MERGE_AUGMENT ? def->real : old->real);
log_warn(info->ctx, log_warn_with_code(info->ctx,
XKB_WARNING_CONFLICTING_KEY_NAME,
"Multiple definitions for alias %s; " "Multiple definitions for alias %s; "
"Using %s, ignoring %s\n", "Using %s, ignoring %s\n",
KeyNameText(info->ctx, old->alias), KeyNameText(info->ctx, old->alias),
@ -573,6 +577,7 @@ CopyKeyAliasesToKeymap(struct xkb_keymap *keymap, KeyNamesInfo *info)
/* Check that ->real is a key. */ /* Check that ->real is a key. */
if (!XkbKeyByName(keymap, alias->real, false)) { if (!XkbKeyByName(keymap, alias->real, false)) {
log_vrb(info->ctx, 5, log_vrb(info->ctx, 5,
XKB_WARNING_UNDEFINED_KEYCODE,
"Attempt to alias %s to non-existent key %s; Ignored\n", "Attempt to alias %s to non-existent key %s; Ignored\n",
KeyNameText(info->ctx, alias->alias), KeyNameText(info->ctx, alias->alias),
KeyNameText(info->ctx, alias->real)); KeyNameText(info->ctx, alias->real));
@ -583,6 +588,7 @@ CopyKeyAliasesToKeymap(struct xkb_keymap *keymap, KeyNamesInfo *info)
/* Check that ->alias is not a key. */ /* Check that ->alias is not a key. */
if (XkbKeyByName(keymap, alias->alias, false)) { if (XkbKeyByName(keymap, alias->alias, false)) {
log_vrb(info->ctx, 5, log_vrb(info->ctx, 5,
XKB_WARNING_ILLEGAL_KEYCODE_ALIAS,
"Attempt to create alias with the name of a real key; " "Attempt to create alias with the name of a real key; "
"Alias \"%s = %s\" ignored\n", "Alias \"%s = %s\" ignored\n",
KeyNameText(info->ctx, alias->alias), KeyNameText(info->ctx, alias->alias),

View File

@ -245,6 +245,7 @@ CompileKeymap(XkbFile *file, struct xkb_keymap *keymap, enum merge_mode merge)
file->file_type > LAST_KEYMAP_FILE_TYPE) { file->file_type > LAST_KEYMAP_FILE_TYPE) {
if (file->file_type == FILE_TYPE_GEOMETRY) { if (file->file_type == FILE_TYPE_GEOMETRY) {
log_vrb(ctx, 1, log_vrb(ctx, 1,
XKB_WARNING_UNSUPPORTED_GEOMETRY_SECTION,
"Geometry sections are not supported; ignoring\n"); "Geometry sections are not supported; ignoring\n");
} else { } else {
log_err(ctx, "Cannot define %s in a keymap file\n", log_err(ctx, "Cannot define %s in a keymap file\n",

View File

@ -856,6 +856,7 @@ parse(struct xkb_context *ctx, struct scanner *scanner, const char *map)
if (first) if (first)
log_vrb(ctx, 5, log_vrb(ctx, 5,
XKB_WARNING_MISSING_DEFAULT_SECTION,
"No map in include statement, but \"%s\" contains several; " "No map in include statement, but \"%s\" contains several; "
"Using first defined map, \"%s\"\n", "Using first defined map, \"%s\"\n",
scanner->file_name, first->name); scanner->file_name, first->name);

View File

@ -62,9 +62,6 @@
#include "keysym.h" #include "keysym.h"
// TODO: convert log_err to log_err_with_code
// TODO: convert log_vrb to log_vrb_with_code
enum key_repeat { enum key_repeat {
KEY_REPEAT_UNDEFINED = 0, KEY_REPEAT_UNDEFINED = 0,
KEY_REPEAT_YES = 1, KEY_REPEAT_YES = 1,
@ -246,7 +243,7 @@ MergeGroups(SymbolsInfo *info, GroupInfo *into, GroupInfo *from, bool clobber,
if (report) { if (report) {
log_warn_with_code(info->ctx, log_warn_with_code(info->ctx,
XKB_WARNING_CONFLICTING_KEY_TYPE, XKB_WARNING_CONFLICTING_KEY_TYPE_MERGING_GROUPS,
"Multiple definitions for group %d type of key %s; " "Multiple definitions for group %d type of key %s; "
"Using %s, ignoring %s\n", "Using %s, ignoring %s\n",
group + 1, KeyNameText(info->ctx, key_name), group + 1, KeyNameText(info->ctx, key_name),
@ -592,7 +589,8 @@ HandleIncludeSymbols(SymbolsInfo *info, IncludeStmt *include)
if (stmt->modifier) { if (stmt->modifier) {
next_incl.explicit_group = atoi(stmt->modifier) - 1; next_incl.explicit_group = atoi(stmt->modifier) - 1;
if (next_incl.explicit_group >= XKB_MAX_GROUPS) { if (next_incl.explicit_group >= XKB_MAX_GROUPS) {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_UNSUPPORTED_GROUP_INDEX,
"Cannot set explicit group to %d - must be between 1..%d; " "Cannot set explicit group to %d - must be between 1..%d; "
"Ignoring group number\n", "Ignoring group number\n",
next_incl.explicit_group + 1, XKB_MAX_GROUPS); next_incl.explicit_group + 1, XKB_MAX_GROUPS);
@ -640,7 +638,8 @@ GetGroupIndex(SymbolsInfo *info, KeyInfo *keyi, ExprDef *arrayNdx,
} }
if (i >= XKB_MAX_GROUPS) { if (i >= XKB_MAX_GROUPS) {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_UNSUPPORTED_GROUP_INDEX,
"Too many groups of %s for key %s (max %u); " "Too many groups of %s for key %s (max %u); "
"Ignoring %s defined for extra groups\n", "Ignoring %s defined for extra groups\n",
name, KeyInfoText(info, keyi), XKB_MAX_GROUPS, name); name, KeyInfoText(info, keyi), XKB_MAX_GROUPS, name);
@ -686,7 +685,8 @@ AddSymbolsToKey(SymbolsInfo *info, KeyInfo *keyi, ExprDef *arrayNdx,
} }
if (value->expr.op != EXPR_KEYSYM_LIST) { if (value->expr.op != EXPR_KEYSYM_LIST) {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_WRONG_FIELD_TYPE,
"Expected a list of symbols, found %s; " "Expected a list of symbols, found %s; "
"Ignoring symbols for group %u of %s\n", "Ignoring symbols for group %u of %s\n",
expr_op_type_to_string(value->expr.op), ndx + 1, expr_op_type_to_string(value->expr.op), ndx + 1,
@ -695,7 +695,8 @@ AddSymbolsToKey(SymbolsInfo *info, KeyInfo *keyi, ExprDef *arrayNdx,
} }
if (groupi->defined & GROUP_FIELD_SYMS) { if (groupi->defined & GROUP_FIELD_SYMS) {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_CONFLICTING_KEY_SYMBOLS_ENTRY,
"Symbols for key %s, group %u already defined; " "Symbols for key %s, group %u already defined; "
"Ignoring duplicate definition\n", "Ignoring duplicate definition\n",
KeyInfoText(info, keyi), ndx + 1); KeyInfoText(info, keyi), ndx + 1);
@ -784,7 +785,8 @@ AddActionsToKey(SymbolsInfo *info, KeyInfo *keyi, ExprDef *arrayNdx,
union xkb_action *toAct = &darray_item(groupi->levels, i).action; union xkb_action *toAct = &darray_item(groupi->levels, i).action;
if (!HandleActionDef(info->ctx, info->actions, &info->mods, act, toAct)) if (!HandleActionDef(info->ctx, info->actions, &info->mods, act, toAct))
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_INVALID_VALUE,
"Illegal action definition for %s; " "Illegal action definition for %s; "
"Action for group %u/level %u ignored\n", "Action for group %u/level %u ignored\n",
KeyInfoText(info, keyi), ndx + 1, i + 1); KeyInfoText(info, keyi), ndx + 1, i + 1);
@ -815,7 +817,8 @@ SetSymbolsField(SymbolsInfo *info, KeyInfo *keyi, const char *field,
xkb_atom_t val; xkb_atom_t val;
if (!ExprResolveString(info->ctx, value, &val)) { if (!ExprResolveString(info->ctx, value, &val)) {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_WRONG_FIELD_TYPE,
"The type field of a key symbol map must be a string; " "The type field of a key symbol map must be a string; "
"Ignoring illegal type definition\n"); "Ignoring illegal type definition\n");
return false; return false;
@ -853,7 +856,8 @@ SetSymbolsField(SymbolsInfo *info, KeyInfo *keyi, const char *field,
if (!ExprResolveModMask(info->ctx, value, MOD_VIRT, &info->mods, if (!ExprResolveModMask(info->ctx, value, MOD_VIRT, &info->mods,
&mask)) { &mask)) {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_UNSUPPORTED_MODIFIER_MASK,
"Expected a virtual modifier mask, found %s; " "Expected a virtual modifier mask, found %s; "
"Ignoring virtual modifiers definition for key %s\n", "Ignoring virtual modifiers definition for key %s\n",
expr_op_type_to_string(value->expr.op), expr_op_type_to_string(value->expr.op),
@ -868,6 +872,7 @@ SetSymbolsField(SymbolsInfo *info, KeyInfo *keyi, const char *field,
istreq(field, "lock") || istreq(field, "lock") ||
istreq(field, "locks")) { istreq(field, "locks")) {
log_vrb(info->ctx, 1, log_vrb(info->ctx, 1,
XKB_WARNING_UNSUPPORTED_SYMBOLS_FIELD,
"Key behaviors not supported; " "Key behaviors not supported; "
"Ignoring locking specification for key %s\n", "Ignoring locking specification for key %s\n",
KeyInfoText(info, keyi)); KeyInfoText(info, keyi));
@ -876,6 +881,7 @@ SetSymbolsField(SymbolsInfo *info, KeyInfo *keyi, const char *field,
istreq(field, "permanentradiogroup") || istreq(field, "permanentradiogroup") ||
istreq(field, "allownone")) { istreq(field, "allownone")) {
log_vrb(info->ctx, 1, log_vrb(info->ctx, 1,
XKB_WARNING_UNSUPPORTED_SYMBOLS_FIELD,
"Radio groups not supported; " "Radio groups not supported; "
"Ignoring radio group specification for key %s\n", "Ignoring radio group specification for key %s\n",
KeyInfoText(info, keyi)); KeyInfoText(info, keyi));
@ -883,6 +889,7 @@ SetSymbolsField(SymbolsInfo *info, KeyInfo *keyi, const char *field,
else if (istreq_prefix("overlay", field) || else if (istreq_prefix("overlay", field) ||
istreq_prefix("permanentoverlay", field)) { istreq_prefix("permanentoverlay", field)) {
log_vrb(info->ctx, 1, log_vrb(info->ctx, 1,
XKB_WARNING_UNSUPPORTED_SYMBOLS_FIELD,
"Overlays not supported; " "Overlays not supported; "
"Ignoring overlay specification for key %s\n", "Ignoring overlay specification for key %s\n",
KeyInfoText(info, keyi)); KeyInfoText(info, keyi));
@ -893,7 +900,8 @@ SetSymbolsField(SymbolsInfo *info, KeyInfo *keyi, const char *field,
unsigned int val; unsigned int val;
if (!ExprResolveEnum(info->ctx, value, &val, repeatEntries)) { if (!ExprResolveEnum(info->ctx, value, &val, repeatEntries)) {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_INVALID_VALUE,
"Illegal repeat setting for %s; " "Illegal repeat setting for %s; "
"Non-boolean repeat setting ignored\n", "Non-boolean repeat setting ignored\n",
KeyInfoText(info, keyi)); KeyInfoText(info, keyi));
@ -908,7 +916,8 @@ SetSymbolsField(SymbolsInfo *info, KeyInfo *keyi, const char *field,
bool set; bool set;
if (!ExprResolveBoolean(info->ctx, value, &set)) { if (!ExprResolveBoolean(info->ctx, value, &set)) {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_INVALID_VALUE,
"Illegal groupsWrap setting for %s; " "Illegal groupsWrap setting for %s; "
"Non-boolean value ignored\n", "Non-boolean value ignored\n",
KeyInfoText(info, keyi)); KeyInfoText(info, keyi));
@ -923,7 +932,8 @@ SetSymbolsField(SymbolsInfo *info, KeyInfo *keyi, const char *field,
bool set; bool set;
if (!ExprResolveBoolean(info->ctx, value, &set)) { if (!ExprResolveBoolean(info->ctx, value, &set)) {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_INVALID_VALUE,
"Illegal groupsClamp setting for %s; " "Illegal groupsClamp setting for %s; "
"Non-boolean value ignored\n", "Non-boolean value ignored\n",
KeyInfoText(info, keyi)); KeyInfoText(info, keyi));
@ -950,7 +960,8 @@ SetSymbolsField(SymbolsInfo *info, KeyInfo *keyi, const char *field,
keyi->defined |= KEY_FIELD_GROUPINFO; keyi->defined |= KEY_FIELD_GROUPINFO;
} }
else { else {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_UNKNOWN_FIELD,
"Unknown field %s in a symbol interpretation; " "Unknown field %s in a symbol interpretation; "
"Definition ignored\n", "Definition ignored\n",
field); field);
@ -968,6 +979,7 @@ SetGroupName(SymbolsInfo *info, ExprDef *arrayNdx, ExprDef *value)
if (!arrayNdx) { if (!arrayNdx) {
log_vrb(info->ctx, 1, log_vrb(info->ctx, 1,
XKB_WARNING_MISSING_SYMBOLS_GROUP_NAME_INDEX,
"You must specify an index when specifying a group name; " "You must specify an index when specifying a group name; "
"Group name definition without array subscript ignored\n"); "Group name definition without array subscript ignored\n");
return false; return false;
@ -981,7 +993,8 @@ SetGroupName(SymbolsInfo *info, ExprDef *arrayNdx, ExprDef *value)
} }
if (!ExprResolveString(info->ctx, value, &name)) { if (!ExprResolveString(info->ctx, value, &name)) {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_WRONG_FIELD_TYPE,
"Group name must be a string; " "Group name must be a string; "
"Illegal name for group %d ignored\n", group); "Illegal name for group %d ignored\n", group);
return false; return false;
@ -1031,24 +1044,28 @@ HandleGlobalVar(SymbolsInfo *info, VarDef *stmt)
} }
else if (!elem && (istreq(field, "groupswrap") || else if (!elem && (istreq(field, "groupswrap") ||
istreq(field, "wrapgroups"))) { istreq(field, "wrapgroups"))) {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_WARNING_UNSUPPORTED_SYMBOLS_FIELD,
"Global \"groupswrap\" not supported; Ignored\n"); "Global \"groupswrap\" not supported; Ignored\n");
ret = true; ret = true;
} }
else if (!elem && (istreq(field, "groupsclamp") || else if (!elem && (istreq(field, "groupsclamp") ||
istreq(field, "clampgroups"))) { istreq(field, "clampgroups"))) {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_WARNING_UNSUPPORTED_SYMBOLS_FIELD,
"Global \"groupsclamp\" not supported; Ignored\n"); "Global \"groupsclamp\" not supported; Ignored\n");
ret = true; ret = true;
} }
else if (!elem && (istreq(field, "groupsredirect") || else if (!elem && (istreq(field, "groupsredirect") ||
istreq(field, "redirectgroups"))) { istreq(field, "redirectgroups"))) {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_WARNING_UNSUPPORTED_SYMBOLS_FIELD,
"Global \"groupsredirect\" not supported; Ignored\n"); "Global \"groupsredirect\" not supported; Ignored\n");
ret = true; ret = true;
} }
else if (!elem && istreq(field, "allownone")) { else if (!elem && istreq(field, "allownone")) {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_WARNING_UNSUPPORTED_SYMBOLS_FIELD,
"Radio groups not supported; " "Radio groups not supported; "
"Ignoring \"allownone\" specification\n"); "Ignoring \"allownone\" specification\n");
ret = true; ret = true;
@ -1070,7 +1087,8 @@ HandleSymbolsBody(SymbolsInfo *info, VarDef *def, KeyInfo *keyi)
for (; def; def = (VarDef *) def->common.next) { for (; def; def = (VarDef *) def->common.next) {
if (def->name && def->name->expr.op == EXPR_FIELD_REF) { if (def->name && def->name->expr.op == EXPR_FIELD_REF) {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_WRONG_SCOPE,
"Cannot set a global default value from within a key statement; " "Cannot set a global default value from within a key statement; "
"Move statements to the global file scope\n"); "Move statements to the global file scope\n");
continue; continue;
@ -1180,7 +1198,8 @@ HandleModMapDef(SymbolsInfo *info, ModMapDef *def)
// Handle normal entry // Handle normal entry
ndx = XkbModNameToIndex(&info->mods, def->modifier, MOD_REAL); ndx = XkbModNameToIndex(&info->mods, def->modifier, MOD_REAL);
if (ndx == XKB_MOD_INVALID) { if (ndx == XKB_MOD_INVALID) {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_INVALID_REAL_MODIFIER,
"Illegal modifier map definition; " "Illegal modifier map definition; "
"Ignoring map for non-modifier \"%s\"\n", "Ignoring map for non-modifier \"%s\"\n",
xkb_atom_text(ctx, def->modifier)); xkb_atom_text(ctx, def->modifier));
@ -1205,7 +1224,8 @@ HandleModMapDef(SymbolsInfo *info, ModMapDef *def)
tmp.u.keySym = sym; tmp.u.keySym = sym;
} }
else { else {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_INVALID_MODMAP_ENTRY,
"Modmap entries may contain only key names or keysyms; " "Modmap entries may contain only key names or keysyms; "
"Illegal definition for %s modifier ignored\n", "Illegal definition for %s modifier ignored\n",
ModIndexText(info->ctx, &info->mods, tmp.modifier)); ModIndexText(info->ctx, &info->mods, tmp.modifier));
@ -1243,7 +1263,8 @@ HandleSymbolsFile(SymbolsInfo *info, XkbFile *file, enum merge_mode merge)
ok = HandleModMapDef(info, (ModMapDef *) stmt); ok = HandleModMapDef(info, (ModMapDef *) stmt);
break; break;
default: default:
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_WRONG_STATEMENT_TYPE,
"Symbols files may not include other types; " "Symbols files may not include other types; "
"Ignoring %s\n", stmt_type_to_string(stmt->type)); "Ignoring %s\n", stmt_type_to_string(stmt->type));
ok = false; ok = false;
@ -1254,7 +1275,9 @@ HandleSymbolsFile(SymbolsInfo *info, XkbFile *file, enum merge_mode merge)
info->errorCount++; info->errorCount++;
if (info->errorCount > 10) { if (info->errorCount > 10) {
log_err(info->ctx, "Abandoning symbols file \"%s\"\n", log_err_with_code(info->ctx,
XKB_ERROR_INVALID_SYNTAX,
"Abandoning symbols file \"%s\"\n",
file->name); file->name);
break; break;
} }
@ -1436,7 +1459,7 @@ CopySymbolsDefToKeymap(struct xkb_keymap *keymap, SymbolsInfo *info,
*/ */
key = XkbKeyByName(keymap, keyi->name, false); key = XkbKeyByName(keymap, keyi->name, false);
if (!key) { if (!key) {
log_vrb_with_code(info->ctx, 5, log_vrb(info->ctx, 5,
XKB_WARNING_UNDEFINED_KEYCODE, XKB_WARNING_UNDEFINED_KEYCODE,
"Key %s not found in keycodes; Symbols ignored\n", "Key %s not found in keycodes; Symbols ignored\n",
KeyInfoText(info, keyi)); KeyInfoText(info, keyi));
@ -1480,7 +1503,7 @@ CopySymbolsDefToKeymap(struct xkb_keymap *keymap, SymbolsInfo *info,
if (type->num_levels < darray_size(groupi->levels)) { if (type->num_levels < darray_size(groupi->levels)) {
struct xkb_level *leveli; struct xkb_level *leveli;
log_vrb_with_code(info->ctx, 1, log_vrb(info->ctx, 1,
XKB_WARNING_EXTRA_SYMBOLS_IGNORED, XKB_WARNING_EXTRA_SYMBOLS_IGNORED,
"Type \"%s\" has %d levels, but %s has %d levels; " "Type \"%s\" has %d levels, but %s has %d levels; "
"Ignoring extra symbols\n", "Ignoring extra symbols\n",
@ -1533,7 +1556,7 @@ CopyModMapDefToKeymap(struct xkb_keymap *keymap, SymbolsInfo *info,
if (!entry->haveSymbol) { if (!entry->haveSymbol) {
key = XkbKeyByName(keymap, entry->u.keyName, true); key = XkbKeyByName(keymap, entry->u.keyName, true);
if (!key) { if (!key) {
log_vrb_with_code(info->ctx, 5, log_vrb(info->ctx, 5,
XKB_WARNING_UNDEFINED_KEYCODE, XKB_WARNING_UNDEFINED_KEYCODE,
"Key %s not found in keycodes; " "Key %s not found in keycodes; "
"Modifier map entry for %s not updated\n", "Modifier map entry for %s not updated\n",
@ -1545,7 +1568,7 @@ CopyModMapDefToKeymap(struct xkb_keymap *keymap, SymbolsInfo *info,
else { else {
key = FindKeyForSymbol(keymap, entry->u.keySym); key = FindKeyForSymbol(keymap, entry->u.keySym);
if (!key) { if (!key) {
log_vrb_with_code(info->ctx, 5, log_vrb(info->ctx, 5,
XKB_WARNING_UNRESOLVED_KEYMAP_SYMBOL, XKB_WARNING_UNRESOLVED_KEYMAP_SYMBOL,
"Key \"%s\" not found in symbol map; " "Key \"%s\" not found in symbol map; "
"Modifier map entry for %s not updated\n", "Modifier map entry for %s not updated\n",

View File

@ -143,7 +143,8 @@ AddKeyType(KeyTypesInfo *info, KeyTypeInfo *new, bool same_file)
if (old) { if (old) {
if (new->merge == MERGE_REPLACE || new->merge == MERGE_OVERRIDE) { if (new->merge == MERGE_REPLACE || new->merge == MERGE_OVERRIDE) {
if ((same_file && verbosity > 0) || verbosity > 9) { if ((same_file && verbosity > 0) || verbosity > 9) {
log_warn(info->ctx, log_warn_with_code(info->ctx,
XKB_WARNING_CONFLICTING_KEY_TYPE_DEFINITIONS,
"Multiple definitions of the %s key type; " "Multiple definitions of the %s key type; "
"Earlier definition ignored\n", "Earlier definition ignored\n",
xkb_atom_text(info->ctx, new->name)); xkb_atom_text(info->ctx, new->name));
@ -158,6 +159,7 @@ AddKeyType(KeyTypesInfo *info, KeyTypeInfo *new, bool same_file)
if (same_file) if (same_file)
log_vrb(info->ctx, 4, log_vrb(info->ctx, 4,
XKB_WARNING_CONFLICTING_KEY_TYPE_DEFINITIONS,
"Multiple definitions of the %s key type; " "Multiple definitions of the %s key type; "
"Later definition ignored\n", "Later definition ignored\n",
xkb_atom_text(info->ctx, new->name)); xkb_atom_text(info->ctx, new->name));
@ -255,7 +257,8 @@ SetModifiers(KeyTypesInfo *info, KeyTypeInfo *type, ExprDef *arrayNdx,
"Illegal array subscript ignored\n"); "Illegal array subscript ignored\n");
if (!ExprResolveModMask(info->ctx, value, MOD_BOTH, &info->mods, &mods)) { if (!ExprResolveModMask(info->ctx, value, MOD_BOTH, &info->mods, &mods)) {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_UNSUPPORTED_MODIFIER_MASK,
"Key type mask field must be a modifier mask; " "Key type mask field must be a modifier mask; "
"Key type definition ignored\n"); "Key type definition ignored\n");
return false; return false;
@ -298,7 +301,8 @@ AddMapEntry(KeyTypesInfo *info, KeyTypeInfo *type,
old = FindMatchingMapEntry(type, new->mods.mods); old = FindMatchingMapEntry(type, new->mods.mods);
if (old) { if (old) {
if (report && old->level != new->level) { if (report && old->level != new->level) {
log_warn(info->ctx, log_warn_with_code(info->ctx,
XKB_WARNING_CONFLICTING_KEY_TYPE_MAP_ENTRY,
"Multiple map entries for %s in %s; " "Multiple map entries for %s in %s; "
"Using %d, ignoring %d\n", "Using %d, ignoring %d\n",
MapEntryTxt(info, new), TypeTxt(info, type), MapEntryTxt(info, new), TypeTxt(info, type),
@ -307,6 +311,7 @@ AddMapEntry(KeyTypesInfo *info, KeyTypeInfo *type,
} }
else { else {
log_vrb(info->ctx, 10, log_vrb(info->ctx, 10,
XKB_WARNING_CONFLICTING_KEY_TYPE_MAP_ENTRY,
"Multiple occurrences of map[%s]= %d in %s; Ignored\n", "Multiple occurrences of map[%s]= %d in %s; Ignored\n",
MapEntryTxt(info, new), new->level + 1, MapEntryTxt(info, new), new->level + 1,
TypeTxt(info, type)); TypeTxt(info, type));
@ -345,7 +350,8 @@ SetMapEntry(KeyTypesInfo *info, KeyTypeInfo *type, ExprDef *arrayNdx,
if (entry.mods.mods & (~type->mods)) { if (entry.mods.mods & (~type->mods)) {
log_vrb(info->ctx, 1, log_vrb(info->ctx, 1,
"Map entry for unused modifiers in %s; " XKB_WARNING_UNDECLARED_MODIFIERS_IN_KEY_TYPE,
"Map entry for modifiers not used by type %s; "
"Using %s instead of %s\n", "Using %s instead of %s\n",
TypeTxt(info, type), TypeTxt(info, type),
ModMaskText(info->ctx, &info->mods, ModMaskText(info->ctx, &info->mods,
@ -388,6 +394,7 @@ AddPreserve(KeyTypesInfo *info, KeyTypeInfo *type,
/* Map exists with same preserve; do nothing. */ /* Map exists with same preserve; do nothing. */
if (entry->preserve.mods == preserve_mods) { if (entry->preserve.mods == preserve_mods) {
log_vrb(info->ctx, 10, log_vrb(info->ctx, 10,
XKB_WARNING_DUPLICATE_ENTRY,
"Identical definitions for preserve[%s] in %s; " "Identical definitions for preserve[%s] in %s; "
"Ignored\n", "Ignored\n",
ModMaskText(info->ctx, &info->mods, mods), ModMaskText(info->ctx, &info->mods, mods),
@ -397,6 +404,7 @@ AddPreserve(KeyTypesInfo *info, KeyTypeInfo *type,
/* Map exists with different preserve; latter wins. */ /* Map exists with different preserve; latter wins. */
log_vrb(info->ctx, 1, log_vrb(info->ctx, 1,
XKB_WARNING_CONFLICTING_KEY_TYPE_PRESERVE_ENTRIES,
"Multiple definitions for preserve[%s] in %s; " "Multiple definitions for preserve[%s] in %s; "
"Using %s, ignoring %s\n", "Using %s, ignoring %s\n",
ModMaskText(info->ctx, &info->mods, mods), ModMaskText(info->ctx, &info->mods, mods),
@ -441,14 +449,16 @@ SetPreserve(KeyTypesInfo *info, KeyTypeInfo *type, ExprDef *arrayNdx,
after = ModMaskText(info->ctx, &info->mods, mods); after = ModMaskText(info->ctx, &info->mods, mods);
log_vrb(info->ctx, 1, log_vrb(info->ctx, 1,
"Preserve for modifiers not used by the %s type; " XKB_WARNING_UNDECLARED_MODIFIERS_IN_KEY_TYPE,
"Preserve entry for modifiers not used by the %s type; "
"Index %s converted to %s\n", "Index %s converted to %s\n",
TypeTxt(info, type), before, after); TypeTxt(info, type), before, after);
} }
if (!ExprResolveModMask(info->ctx, value, MOD_BOTH, &info->mods, if (!ExprResolveModMask(info->ctx, value, MOD_BOTH, &info->mods,
&preserve_mods)) { &preserve_mods)) {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_UNSUPPORTED_MODIFIER_MASK,
"Preserve value in a key type is not a modifier mask; " "Preserve value in a key type is not a modifier mask; "
"Ignoring preserve[%s] in type %s\n", "Ignoring preserve[%s] in type %s\n",
ModMaskText(info->ctx, &info->mods, mods), ModMaskText(info->ctx, &info->mods, mods),
@ -464,6 +474,7 @@ SetPreserve(KeyTypesInfo *info, KeyTypeInfo *type, ExprDef *arrayNdx,
after = ModMaskText(info->ctx, &info->mods, preserve_mods); after = ModMaskText(info->ctx, &info->mods, preserve_mods);
log_vrb(info->ctx, 1, log_vrb(info->ctx, 1,
XKB_WARNING_ILLEGAL_KEY_TYPE_PRESERVE_RESULT,
"Illegal value for preserve[%s] in type %s; " "Illegal value for preserve[%s] in type %s; "
"Converted %s to %s\n", "Converted %s to %s\n",
ModMaskText(info->ctx, &info->mods, mods), ModMaskText(info->ctx, &info->mods, mods),
@ -488,6 +499,7 @@ AddLevelName(KeyTypesInfo *info, KeyTypeInfo *type,
/* Same level, same name. */ /* Same level, same name. */
if (darray_item(type->level_names, level) == name) { if (darray_item(type->level_names, level) == name) {
log_vrb(info->ctx, 10, log_vrb(info->ctx, 10,
XKB_WARNING_DUPLICATE_ENTRY,
"Duplicate names for level %d of key type %s; Ignored\n", "Duplicate names for level %d of key type %s; Ignored\n",
level + 1, TypeTxt(info, type)); level + 1, TypeTxt(info, type));
return true; return true;
@ -500,6 +512,7 @@ AddLevelName(KeyTypesInfo *info, KeyTypeInfo *type,
darray_item(type->level_names, level)); darray_item(type->level_names, level));
new = xkb_atom_text(info->ctx, name); new = xkb_atom_text(info->ctx, name);
log_vrb(info->ctx, 1, log_vrb(info->ctx, 1,
XKB_WARNING_CONFLICTING_KEY_TYPE_LEVEL_NAMES,
"Multiple names for level %d of key type %s; " "Multiple names for level %d of key type %s; "
"Using %s, ignoring %s\n", "Using %s, ignoring %s\n",
level + 1, TypeTxt(info, type), level + 1, TypeTxt(info, type),
@ -531,7 +544,8 @@ SetLevelName(KeyTypesInfo *info, KeyTypeInfo *type, ExprDef *arrayNdx,
type, "level name", "integer"); type, "level name", "integer");
if (!ExprResolveString(info->ctx, value, &level_name)) { if (!ExprResolveString(info->ctx, value, &level_name)) {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_WRONG_FIELD_TYPE,
"Non-string name for level %d in key type %s; " "Non-string name for level %d in key type %s; "
"Ignoring illegal level name definition\n", "Ignoring illegal level name definition\n",
level + 1, xkb_atom_text(info->ctx, type->name)); level + 1, xkb_atom_text(info->ctx, type->name));
@ -566,7 +580,8 @@ SetKeyTypeField(KeyTypesInfo *info, KeyTypeInfo *type,
type_field = TYPE_FIELD_LEVEL_NAME; type_field = TYPE_FIELD_LEVEL_NAME;
ok = SetLevelName(info, type, arrayNdx, value); ok = SetLevelName(info, type, arrayNdx, value);
} else { } else {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_UNKNOWN_FIELD,
"Unknown field %s in key type %s; Definition ignored\n", "Unknown field %s in key type %s; Definition ignored\n",
field, TypeTxt(info, type)); field, TypeTxt(info, type));
} }
@ -589,7 +604,8 @@ HandleKeyTypeBody(KeyTypesInfo *info, VarDef *def, KeyTypeInfo *type)
continue; continue;
if (elem && istreq(elem, "type")) { if (elem && istreq(elem, "type")) {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_INVALID_SET_DEFAULT_STATEMENT,
"Support for changing the default type has been removed; " "Support for changing the default type has been removed; "
"Statement ignored\n"); "Statement ignored\n");
continue; continue;
@ -644,7 +660,8 @@ HandleKeyTypesFile(KeyTypesInfo *info, XkbFile *file, enum merge_mode merge)
ok = HandleKeyTypeDef(info, (KeyTypeDef *) stmt, merge); ok = HandleKeyTypeDef(info, (KeyTypeDef *) stmt, merge);
break; break;
case STMT_VAR: case STMT_VAR:
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_WRONG_STATEMENT_TYPE,
"Support for changing the default type has been removed; " "Support for changing the default type has been removed; "
"Statement ignored\n"); "Statement ignored\n");
ok = true; ok = true;
@ -653,7 +670,8 @@ HandleKeyTypesFile(KeyTypesInfo *info, XkbFile *file, enum merge_mode merge)
ok = HandleVModDef(info->ctx, &info->mods, (VModDef *) stmt, merge); ok = HandleVModDef(info->ctx, &info->mods, (VModDef *) stmt, merge);
break; break;
default: default:
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_WRONG_STATEMENT_TYPE,
"Key type files may not include other declarations; " "Key type files may not include other declarations; "
"Ignoring %s\n", stmt_type_to_string(stmt->type)); "Ignoring %s\n", stmt_type_to_string(stmt->type));
ok = false; ok = false;
@ -664,7 +682,8 @@ HandleKeyTypesFile(KeyTypesInfo *info, XkbFile *file, enum merge_mode merge)
info->errorCount++; info->errorCount++;
if (info->errorCount > 10) { if (info->errorCount > 10) {
log_err(info->ctx, log_err_with_code(info->ctx,
XKB_ERROR_INVALID_SYNTAX,
"Abandoning keytypes file \"%s\"\n", file->name); "Abandoning keytypes file \"%s\"\n", file->name);
break; break;
} }

View File

@ -82,7 +82,8 @@ static inline bool
ReportNotArray(struct xkb_context *ctx, const char *type, const char *field, ReportNotArray(struct xkb_context *ctx, const char *type, const char *field,
const char *name) const char *name)
{ {
log_err(ctx, log_err_with_code(ctx,
XKB_ERROR_WRONG_FIELD_TYPE,
"The %s %s field is not an array; " "The %s %s field is not an array; "
"Ignoring illegal assignment in %s\n", "Ignoring illegal assignment in %s\n",
type, field, name); type, field, name);
@ -93,7 +94,8 @@ static inline bool
ReportShouldBeArray(struct xkb_context *ctx, const char *type, ReportShouldBeArray(struct xkb_context *ctx, const char *type,
const char *field, const char *name) const char *field, const char *name)
{ {
log_err(ctx, log_err_with_code(ctx,
XKB_ERROR_EXPECTED_ARRAY_ENTRY,
"Missing subscript for %s %s; " "Missing subscript for %s %s; "
"Ignoring illegal assignment in %s\n", "Ignoring illegal assignment in %s\n",
type, field, name); type, field, name);

View File

@ -25,6 +25,7 @@
#include "test.h" #include "test.h"
#include "context.h" #include "context.h"
#include "messages-codes.h"
#ifdef __GNUC__ #ifdef __GNUC__
#pragma GCC diagnostic ignored "-Wmissing-format-attribute" #pragma GCC diagnostic ignored "-Wmissing-format-attribute"
@ -89,14 +90,14 @@ main(void)
log_info(ctx, "first info\n"); log_info(ctx, "first info\n");
log_dbg(ctx, "first debug: %s\n", "hello"); log_dbg(ctx, "first debug: %s\n", "hello");
log_err(ctx, "first error: %lu\n", 115415UL); log_err(ctx, "first error: %lu\n", 115415UL);
log_vrb(ctx, 5, "first verbose 5\n"); log_vrb(ctx, 5, XKB_LOG_MESSAGE_NO_ID, "first verbose 5\n");
xkb_context_set_log_level(ctx, XKB_LOG_LEVEL_DEBUG); xkb_context_set_log_level(ctx, XKB_LOG_LEVEL_DEBUG);
log_warn(ctx, "second warning: %d\n", 87); log_warn(ctx, "second warning: %d\n", 87);
log_dbg(ctx, "second debug: %s %s\n", "hello", "world"); log_dbg(ctx, "second debug: %s %s\n", "hello", "world");
log_info(ctx, "second info\n"); log_info(ctx, "second info\n");
log_err(ctx, "second error: %lu\n", 115415UL); log_err(ctx, "second error: %lu\n", 115415UL);
log_vrb(ctx, 6, "second verbose 6\n"); log_vrb(ctx, 6, XKB_LOG_MESSAGE_NO_ID, "second verbose 6\n");
xkb_context_set_log_verbosity(ctx, 0); xkb_context_set_log_verbosity(ctx, 0);
xkb_context_set_log_level(ctx, XKB_LOG_LEVEL_CRITICAL); xkb_context_set_log_level(ctx, XKB_LOG_LEVEL_CRITICAL);
@ -104,14 +105,14 @@ main(void)
log_dbg(ctx, "third debug: %s %s\n", "hello", "world"); log_dbg(ctx, "third debug: %s %s\n", "hello", "world");
log_info(ctx, "third info\n"); log_info(ctx, "third info\n");
log_err(ctx, "third error: %lu\n", 115415UL); log_err(ctx, "third error: %lu\n", 115415UL);
log_vrb(ctx, 0, "third verbose 0\n"); log_vrb(ctx, 0, XKB_LOG_MESSAGE_NO_ID, "third verbose 0\n");
printf("%s", log_string.item); printf("%s", log_string.item);
assert(streq(log_string.item, assert(streq(log_string.item,
"warning: first warning: 87\n" "warning: first warning: 87\n"
"error: first error: 115415\n" "error: first error: 115415\n"
"warning: first verbose 5\n" "warning: [XKB-000] first verbose 5\n"
"warning: second warning: 87\n" "warning: second warning: 87\n"
"debug: second debug: hello world\n" "debug: second debug: hello world\n"
"info: second info\n" "info: second info\n"

View File

@ -39,26 +39,57 @@
static const struct xkb_message_entry xkb_messages[] = { static const struct xkb_message_entry xkb_messages[] = {
{XKB_ERROR_MALFORMED_NUMBER_LITERAL, "Malformed number literal"}, {XKB_ERROR_MALFORMED_NUMBER_LITERAL, "Malformed number literal"},
{XKB_WARNING_CONFLICTING_KEY_TYPE_PRESERVE_ENTRIES, "Conflicting key type preserve entries"},
{XKB_ERROR_UNSUPPORTED_MODIFIER_MASK, "Unsupported modifier mask"}, {XKB_ERROR_UNSUPPORTED_MODIFIER_MASK, "Unsupported modifier mask"},
{XKB_ERROR_EXPECTED_ARRAY_ENTRY, "Expected array entry"},
{XKB_WARNING_ILLEGAL_KEYCODE_ALIAS, "Illegal keycode alias"},
{XKB_WARNING_UNRECOGNIZED_KEYSYM, "Unrecognized keysym"}, {XKB_WARNING_UNRECOGNIZED_KEYSYM, "Unrecognized keysym"},
{XKB_ERROR_UNDECLARED_VIRTUAL_MODIFIER, "Undeclared virtual modifier"},
{XKB_ERROR_WRONG_STATEMENT_TYPE, "Wrong statement type"},
{XKB_WARNING_UNSUPPORTED_GEOMETRY_SECTION, "Unsupported geometry section"},
{XKB_WARNING_CANNOT_INFER_KEY_TYPE, "Cannot infer key type"}, {XKB_WARNING_CANNOT_INFER_KEY_TYPE, "Cannot infer key type"},
{XKB_WARNING_ILLEGAL_KEY_TYPE_PRESERVE_RESULT, "Illegal key type preserve result"},
{XKB_ERROR_INVALID_INCLUDE_STATEMENT, "Invalid include statement"},
{XKB_ERROR_INVALID_MODMAP_ENTRY, "Invalid modmap entry"},
{XKB_ERROR_UNSUPPORTED_GROUP_INDEX, "Unsupported group index"}, {XKB_ERROR_UNSUPPORTED_GROUP_INDEX, "Unsupported group index"},
{XKB_WARNING_CONFLICTING_KEY_TYPE_LEVEL_NAMES, "Conflicting key type level names"},
{XKB_ERROR_INVALID_SET_DEFAULT_STATEMENT, "Invalid set default statement"},
{XKB_WARNING_CONFLICTING_KEY_TYPE_MAP_ENTRY, "Conflicting key type map entry"},
{XKB_WARNING_UNDEFINED_KEY_TYPE, "Undefined key type"}, {XKB_WARNING_UNDEFINED_KEY_TYPE, "Undefined key type"},
{XKB_WARNING_NON_BASE_GROUP_NAME, "Non base group name"}, {XKB_WARNING_NON_BASE_GROUP_NAME, "Non base group name"},
{XKB_ERROR_UNSUPPORTED_SHIFT_LEVEL, "Unsupported shift level"}, {XKB_ERROR_UNSUPPORTED_SHIFT_LEVEL, "Unsupported shift level"},
{XKB_ERROR_INCLUDED_FILE_NOT_FOUND, "Included file not found"},
{XKB_ERROR_UNKNOWN_OPERATOR, "Unknown operator"},
{XKB_WARNING_DUPLICATE_ENTRY, "Duplicate entry"},
{XKB_WARNING_CONFLICTING_KEY_TYPE_DEFINITIONS, "Conflicting key type definitions"},
{XKB_ERROR_WRONG_SCOPE, "Wrong scope"},
{XKB_WARNING_MISSING_DEFAULT_SECTION, "Missing default section"},
{XKB_WARNING_CONFLICTING_KEY_SYMBOL, "Conflicting key symbol"}, {XKB_WARNING_CONFLICTING_KEY_SYMBOL, "Conflicting key symbol"},
{XKB_ERROR_INVALID_OPERATION, "Invalid operation"},
{XKB_WARNING_NUMERIC_KEYSYM, "Numeric keysym"}, {XKB_WARNING_NUMERIC_KEYSYM, "Numeric keysym"},
{XKB_WARNING_EXTRA_SYMBOLS_IGNORED, "Extra symbols ignored"}, {XKB_WARNING_EXTRA_SYMBOLS_IGNORED, "Extra symbols ignored"},
{XKB_WARNING_CONFLICTING_KEY_NAME, "Conflicting key name"},
{XKB_ERROR_ALLOCATION_ERROR, "Allocation error"},
{XKB_ERROR_WRONG_FIELD_TYPE, "Wrong field type"}, {XKB_ERROR_WRONG_FIELD_TYPE, "Wrong field type"},
{XKB_ERROR_INVALID_REAL_MODIFIER, "Invalid real modifier"},
{XKB_WARNING_UNKNOWN_CHAR_ESCAPE_SEQUENCE, "Unknown char escape sequence"}, {XKB_WARNING_UNKNOWN_CHAR_ESCAPE_SEQUENCE, "Unknown char escape sequence"},
{XKB_ERROR_INVALID_INCLUDED_FILE, "Invalid included file"},
{XKB_WARNING_MULTIPLE_GROUPS_AT_ONCE, "Multiple groups at once"}, {XKB_WARNING_MULTIPLE_GROUPS_AT_ONCE, "Multiple groups at once"},
{XKB_WARNING_UNSUPPORTED_SYMBOLS_FIELD, "Unsupported symbols field"},
{XKB_ERROR_INVALID_SYNTAX, "Invalid syntax"}, {XKB_ERROR_INVALID_SYNTAX, "Invalid syntax"},
{XKB_WARNING_UNDEFINED_KEYCODE, "Undefined keycode"}, {XKB_WARNING_UNDEFINED_KEYCODE, "Undefined keycode"},
{XKB_ERROR_INVALID_EXPRESSION_TYPE, "Invalid expression type"},
{XKB_ERROR_INVALID_VALUE, "Invalid value"},
{XKB_WARNING_CONFLICTING_MODMAP, "Conflicting modmap"}, {XKB_WARNING_CONFLICTING_MODMAP, "Conflicting modmap"},
{XKB_ERROR_UNKNOWN_FIELD, "Unknown field"},
{XKB_WARNING_CONFLICTING_KEY_ACTION, "Conflicting key action"}, {XKB_WARNING_CONFLICTING_KEY_ACTION, "Conflicting key action"},
{XKB_WARNING_CONFLICTING_KEY_TYPE, "Conflicting key type"}, {XKB_WARNING_CONFLICTING_KEY_TYPE_MERGING_GROUPS, "Conflicting key type merging groups"},
{XKB_ERROR_CONFLICTING_KEY_SYMBOLS_ENTRY, "Conflicting key symbols entry"},
{XKB_WARNING_MISSING_SYMBOLS_GROUP_NAME_INDEX, "Missing symbols group name index"},
{XKB_WARNING_CONFLICTING_KEY_FIELDS, "Conflicting key fields"}, {XKB_WARNING_CONFLICTING_KEY_FIELDS, "Conflicting key fields"},
{XKB_WARNING_UNRESOLVED_KEYMAP_SYMBOL, "Unresolved keymap symbol"} {XKB_ERROR_INVALID_IDENTIFIER, "Invalid identifier"},
{XKB_WARNING_UNRESOLVED_KEYMAP_SYMBOL, "Unresolved keymap symbol"},
{XKB_WARNING_UNDECLARED_MODIFIERS_IN_KEY_TYPE, "Undeclared modifiers in key type"}
}; };
int int