From eafd3aceca97d4984070115ec67f639b045b0d65 Mon Sep 17 00:00:00 2001 From: Pierre Le Marre Date: Mon, 18 Sep 2023 18:17:39 +0200 Subject: [PATCH] Add a new warning for numeric keysyms Usually it is better to use the corresponding human-friendly keysym names. If there is none, then the keysym is most probably not supported in the ecosystem. The only use case I see is similar to the PUA in Unicode (see: https://en.wikipedia.org/wiki/Private_Use_Areas). I am not aware of examples of this kind of use. --- doc/message-registry.md | 51 ++++++++++++++++++++++++++++++++++++++- doc/message-registry.yaml | 27 +++++++++++++++++++++ src/messages-codes.h | 2 ++ src/xkbcomp/expr.c | 3 +++ src/xkbcomp/parser.y | 5 ++++ tools/messages.c | 1 + 6 files changed, 88 insertions(+), 1 deletion(-) diff --git a/doc/message-registry.md b/doc/message-registry.md index 69027be..dac4175 100644 --- a/doc/message-registry.md +++ b/doc/message-registry.md @@ -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. -There are currently 20 entries. +There are currently 21 entries. @todo The documentation of the log messages is a work in progress. @@ -23,6 +23,7 @@ There are currently 20 entries. | [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-461] | `conflicting-key-symbol` | Warn if there are conflicting keysyms while merging keys | Warning | +| [XKB-489] | `numeric-keysym` | Warn on numeric keysym (other than 0-9) | Warning | | [XKB-516] | `extra-symbols-ignored` | TODO: add description | Warning | | [XKB-578] | `wrong-field-type` | Warn when a field has not the expected type | Error | | [XKB-645] | `unknown-char-escape-sequence` | Warn on unknown escape sequence in string literal | Warning | @@ -165,6 +166,53 @@ as numbers and as identifiers `LevelN`, where `N` is in the range (1..8).
Summary
Warn if there are conflicting keysyms while merging keys
+### XKB-489 – Numeric keysym {#XKB-489} + +
+
Since
1.6.0
+
Type
Warning
+
Summary
Warn on numeric keysym (other than 0-9)
+
+ +Numeric keysyms are not human-friendly. Use the corresponding named keysym +or Unicode keysym, if available. + + +#### Examples + +
+ Hexadecimal keysym `0x1001ed0` + +**Error message:** + +``` +xkbcommon: WARNING: [XKB-489] numeric keysym "0x1001ed0" +``` + +**Fix:** +
+
+
+
Before
+```c +key { [ 0x1001ed0] }; +``` +
+
+
+
+
After
+```c +// Preferred form: human-friendly +key { [ Ocircumflexacute ] }; +// or +key { [ U1ED0 ] }; +``` +
+
+
+
+ ### XKB-516 – Extra symbols ignored {#XKB-516}
@@ -280,6 +328,7 @@ xkbcommon support the following escape sequences in string literals: [XKB-305]: @ref XKB-305 [XKB-312]: @ref XKB-312 [XKB-461]: @ref XKB-461 +[XKB-489]: @ref XKB-489 [XKB-516]: @ref XKB-516 [XKB-578]: @ref XKB-578 [XKB-645]: @ref XKB-645 diff --git a/doc/message-registry.yaml b/doc/message-registry.yaml index fea4658..f7e0c2e 100644 --- a/doc/message-registry.yaml +++ b/doc/message-registry.yaml @@ -100,6 +100,33 @@ added: ALWAYS type: warning description: "Warn if there are conflicting keysyms while merging keys" +- id: "numeric-keysym" + code: 489 + added: 1.6.0 + type: warning + description: "Warn on numeric keysym (other than 0-9)" + details: | + Numeric keysyms are not human-friendly. Use the corresponding named keysym + or Unicode keysym, if available. + examples: + - name: Hexadecimal keysym `0x1001ed0` + description: | + **Error message:** + + ``` + xkbcommon: WARNING: [XKB-489] numeric keysym "0x1001ed0" + ``` + before: | + ```c + key { [ 0x1001ed0] }; + ``` + after: | + ```c + // Preferred form: human-friendly + key { [ Ocircumflexacute ] }; + // or + key { [ U1ED0 ] }; + ``` - id: "extra-symbols-ignored" code: 516 added: ALWAYS diff --git a/src/messages-codes.h b/src/messages-codes.h index 64a6177..1ba568c 100644 --- a/src/messages-codes.h +++ b/src/messages-codes.h @@ -32,6 +32,8 @@ enum xkb_message_code { XKB_ERROR_UNSUPPORTED_SHIFT_LEVEL = 312, /** Warn if there are conflicting keysyms while merging keys */ XKB_WARNING_CONFLICTING_KEY_SYMBOL = 461, + /** Warn on numeric keysym (other than 0-9) */ + XKB_WARNING_NUMERIC_KEYSYM = 489, /** TODO: add description */ XKB_WARNING_EXTRA_SYMBOLS_IGNORED = 516, /** Warn when a field has not the expected type */ diff --git a/src/xkbcomp/expr.c b/src/xkbcomp/expr.c index f935ce6..558fef3 100644 --- a/src/xkbcomp/expr.c +++ b/src/xkbcomp/expr.c @@ -673,6 +673,9 @@ ExprResolveKeySym(struct xkb_context *ctx, const ExprDef *expr, } if (val <= XKB_KEYSYM_MAX) { + log_warn_with_code(ctx, XKB_WARNING_NUMERIC_KEYSYM, + "numeric keysym \"0x%x\" (%d)", + (unsigned int) val, val); *sym_rtrn = (xkb_keysym_t) val; return true; } diff --git a/src/xkbcomp/parser.y b/src/xkbcomp/parser.y index 1beb30b..e1226b1 100644 --- a/src/xkbcomp/parser.y +++ b/src/xkbcomp/parser.y @@ -765,6 +765,11 @@ KeySym : IDENT ); $$ = XKB_KEY_NoSymbol; } + parser_warn( + param, XKB_WARNING_NUMERIC_KEYSYM, + "numeric keysym \"0x%"PRIx64"\" (%"PRId64")", + $1, $1 + ); } } ; diff --git a/tools/messages.c b/tools/messages.c index 365792b..abda073 100644 --- a/tools/messages.c +++ b/tools/messages.c @@ -47,6 +47,7 @@ static const struct xkb_message_entry xkb_messages[] = { {XKB_WARNING_NON_BASE_GROUP_NAME, "Non base group name"}, {XKB_ERROR_UNSUPPORTED_SHIFT_LEVEL, "Unsupported shift level"}, {XKB_WARNING_CONFLICTING_KEY_SYMBOL, "Conflicting key symbol"}, + {XKB_WARNING_NUMERIC_KEYSYM, "Numeric keysym"}, {XKB_WARNING_EXTRA_SYMBOLS_IGNORED, "Extra symbols ignored"}, {XKB_ERROR_WRONG_FIELD_TYPE, "Wrong field type"}, {XKB_WARNING_UNKNOWN_CHAR_ESCAPE_SEQUENCE, "Unknown char escape sequence"},