Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libxkbcommon for openSUSE:Factory 
checked in at 2022-05-23 15:51:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libxkbcommon (Old)
 and      /work/SRC/openSUSE:Factory/.libxkbcommon.new.2254 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libxkbcommon"

Mon May 23 15:51:43 2022 rev:39 rq:978470 version:1.4.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/libxkbcommon/libxkbcommon.changes        
2022-02-06 23:55:25.502358623 +0100
+++ /work/SRC/openSUSE:Factory/.libxkbcommon.new.2254/libxkbcommon.changes      
2022-05-23 15:51:45.738647321 +0200
@@ -1,0 +2,11 @@
+Sun May 22 00:09:05 UTC 2022 - Jan Engelhardt <[email protected]>
+
+- Update to release 1.4.1
+  * Fix compose sequence overriding (common prefix) not working
+    correctly. Regressed in 1.2.0.
+  * Remove various bogus currency sign (particulary Euro and
+    Korean Won) entries from the keysym <-> Unicode mappings.
+    They prevented the real keysyms/codepoints for these from
+    mapping correctly.
+
+-------------------------------------------------------------------

Old:
----
  libxkbcommon-1.4.0.tar.xz

New:
----
  libxkbcommon-1.4.1.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libxkbcommon.spec ++++++
--- /var/tmp/diff_new_pack.WXP7CS/_old  2022-05-23 15:51:46.154647713 +0200
+++ /var/tmp/diff_new_pack.WXP7CS/_new  2022-05-23 15:51:46.158647717 +0200
@@ -23,7 +23,7 @@
 %endif
 
 Name:           libxkbcommon
-Version:        1.4.0
+Version:        1.4.1
 Release:        0
 Summary:        Library for handling xkb descriptions
 License:        MIT
@@ -102,7 +102,7 @@
 Group:          System/X11/Utilities
 
 %description tools
-xkbcommon tools for introspectino and debugging.
+xkbcommon tools for introspection and debugging.
 
 %package x11-devel
 Summary:        Development files for the libxkbcommon-x11 library

++++++ libxkbcommon-1.4.0.tar.xz -> libxkbcommon-1.4.1.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libxkbcommon-1.4.0/.github/workflows/github-release.yml 
new/libxkbcommon-1.4.1/.github/workflows/github-release.yml
--- old/libxkbcommon-1.4.0/.github/workflows/github-release.yml 2022-02-04 
11:41:50.000000000 +0100
+++ new/libxkbcommon-1.4.1/.github/workflows/github-release.yml 2022-05-21 
21:55:22.000000000 +0200
@@ -29,4 +29,4 @@
           body: |
             See the 
[NEWS](https://github.com/xkbcommon/libxkbcommon/blob/master/NEWS) file for the 
changes.
 
-            Official tarball: 
https://xkbcommon.org/download/lib${GITHUB_REF#refs/tags/}.tar.xz
+            Official tarball: https://xkbcommon.org/download/lib${{ github.ref 
}}.tar.xz
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-1.4.0/.github/workflows/linux.yml 
new/libxkbcommon-1.4.1/.github/workflows/linux.yml
--- old/libxkbcommon-1.4.0/.github/workflows/linux.yml  2022-02-04 
11:41:50.000000000 +0100
+++ new/libxkbcommon-1.4.1/.github/workflows/linux.yml  2022-05-21 
21:55:22.000000000 +0200
@@ -23,6 +23,7 @@
       - name: Install dependencies
         run: |
           python -m pip install --upgrade meson
+          sudo apt update
           sudo apt install -y \
             doxygen libxcb-xkb-dev valgrind ninja-build \
             libwayland-dev wayland-protocols bison graphviz
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-1.4.0/NEWS new/libxkbcommon-1.4.1/NEWS
--- old/libxkbcommon-1.4.0/NEWS 2022-02-04 11:41:50.000000000 +0100
+++ new/libxkbcommon-1.4.1/NEWS 2022-05-21 21:55:22.000000000 +0200
@@ -1,3 +1,17 @@
+libxkbcommon 1.4.1 - 2022-05-21
+==================
+
+- Fix compose sequence overriding (common prefix) not working correctly.
+  Regressed in 1.2.0.
+
+  Contributed by Weng Xuetian.
+
+- Remove various bogus currency sign (particulary Euro and Korean Won) entries
+  from the keysym <-> Unicode mappings. They prevented the real
+  keysyms/codepoints for these from mapping correctly.
+
+  Contributed by Sam Lantinga and Simon Ser.
+
 libxkbcommon 1.4.0 - 2022-02-04
 ==================
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-1.4.0/include/xkbcommon/xkbcommon.h 
new/libxkbcommon-1.4.1/include/xkbcommon/xkbcommon.h
--- old/libxkbcommon-1.4.0/include/xkbcommon/xkbcommon.h        2022-02-04 
11:41:50.000000000 +0100
+++ new/libxkbcommon-1.4.1/include/xkbcommon/xkbcommon.h        2022-05-21 
21:55:22.000000000 +0200
@@ -1201,7 +1201,8 @@
  * @code xkb_keymap_num_levels_for_key(keymap, key) @endcode
  * @param[out] masks_out  A buffer in which the requested masks should be
  * stored.
- * @param[out] masks_size The size of the buffer pointed to by masks_out.
+ * @param[out] masks_size The number of elements in the buffer pointed to by
+ * masks_out.
  *
  * If @c layout is out of range for this key (that is, larger or equal to
  * the value returned by xkb_keymap_num_layouts_for_key()), it is brought
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-1.4.0/meson.build 
new/libxkbcommon-1.4.1/meson.build
--- old/libxkbcommon-1.4.0/meson.build  2022-02-04 11:41:50.000000000 +0100
+++ new/libxkbcommon-1.4.1/meson.build  2022-05-21 21:55:22.000000000 +0200
@@ -1,7 +1,7 @@
 project(
     'libxkbcommon',
     'c',
-    version: '1.4.0',
+    version: '1.4.1',
     default_options: [
         'c_std=c11',
         'warning_level=2',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-1.4.0/src/compose/parser.c 
new/libxkbcommon-1.4.1/src/compose/parser.c
--- old/libxkbcommon-1.4.0/src/compose/parser.c 2022-02-04 11:41:50.000000000 
+0100
+++ new/libxkbcommon-1.4.1/src/compose/parser.c 2022-05-21 21:55:22.000000000 
+0200
@@ -126,18 +126,18 @@
 {
 skip_more_whitespace_and_comments:
     /* Skip spaces. */
-    while (is_space(peek(s)))
-        if (next(s) == '\n')
+    while (is_space(scanner_peek(s)))
+        if (scanner_next(s) == '\n')
             return TOK_END_OF_LINE;
 
     /* Skip comments. */
-    if (chr(s, '#')) {
-        skip_to_eol(s);
+    if (scanner_chr(s, '#')) {
+        scanner_skip_to_eol(s);
         goto skip_more_whitespace_and_comments;
     }
 
     /* See if we're done. */
-    if (eof(s)) return TOK_END_OF_FILE;
+    if (scanner_eof(s)) return TOK_END_OF_FILE;
 
     /* New token. */
     s->token_line = s->line;
@@ -145,14 +145,14 @@
     s->buf_pos = 0;
 
     /* LHS Keysym. */
-    if (chr(s, '<')) {
-        while (peek(s) != '>' && !eol(s) && !eof(s))
-            buf_append(s, next(s));
-        if (!chr(s, '>')) {
+    if (scanner_chr(s, '<')) {
+        while (scanner_peek(s) != '>' && !scanner_eol(s) && !scanner_eof(s))
+            scanner_buf_append(s, scanner_next(s));
+        if (!scanner_chr(s, '>')) {
             scanner_err(s, "unterminated keysym literal");
             return TOK_ERROR;
         }
-        if (!buf_append(s, '\0')) {
+        if (!scanner_buf_append(s, '\0')) {
             scanner_err(s, "keysym literal is too long");
             return TOK_ERROR;
         }
@@ -162,46 +162,46 @@
     }
 
     /* Colon. */
-    if (chr(s, ':'))
+    if (scanner_chr(s, ':'))
         return TOK_COLON;
-    if (chr(s, '!'))
+    if (scanner_chr(s, '!'))
         return TOK_BANG;
-    if (chr(s, '~'))
+    if (scanner_chr(s, '~'))
         return TOK_TILDE;
 
     /* String literal. */
-    if (chr(s, '\"')) {
-        while (!eof(s) && !eol(s) && peek(s) != '\"') {
-            if (chr(s, '\\')) {
+    if (scanner_chr(s, '\"')) {
+        while (!scanner_eof(s) && !scanner_eol(s) && scanner_peek(s) != '\"') {
+            if (scanner_chr(s, '\\')) {
                 uint8_t o;
-                if (chr(s, '\\')) {
-                    buf_append(s, '\\');
+                if (scanner_chr(s, '\\')) {
+                    scanner_buf_append(s, '\\');
                 }
-                else if (chr(s, '"')) {
-                    buf_append(s, '"');
+                else if (scanner_chr(s, '"')) {
+                    scanner_buf_append(s, '"');
                 }
-                else if (chr(s, 'x') || chr(s, 'X')) {
-                    if (hex(s, &o))
-                        buf_append(s, (char) o);
+                else if (scanner_chr(s, 'x') || scanner_chr(s, 'X')) {
+                    if (scanner_hex(s, &o))
+                        scanner_buf_append(s, (char) o);
                     else
                         scanner_warn(s, "illegal hexadecimal escape sequence 
in string literal");
                 }
-                else if (oct(s, &o)) {
-                    buf_append(s, (char) o);
+                else if (scanner_oct(s, &o)) {
+                    scanner_buf_append(s, (char) o);
                 }
                 else {
-                    scanner_warn(s, "unknown escape sequence (%c) in string 
literal", peek(s));
+                    scanner_warn(s, "unknown escape sequence (%c) in string 
literal", scanner_peek(s));
                     /* Ignore. */
                 }
             } else {
-                buf_append(s, next(s));
+                scanner_buf_append(s, scanner_next(s));
             }
         }
-        if (!chr(s, '\"')) {
+        if (!scanner_chr(s, '\"')) {
             scanner_err(s, "unterminated string literal");
             return TOK_ERROR;
         }
-        if (!buf_append(s, '\0')) {
+        if (!scanner_buf_append(s, '\0')) {
             scanner_err(s, "string literal is too long");
             return TOK_ERROR;
         }
@@ -215,11 +215,11 @@
     }
 
     /* Identifier or include. */
-    if (is_alpha(peek(s)) || peek(s) == '_') {
+    if (is_alpha(scanner_peek(s)) || scanner_peek(s) == '_') {
         s->buf_pos = 0;
-        while (is_alnum(peek(s)) || peek(s) == '_')
-            buf_append(s, next(s));
-        if (!buf_append(s, '\0')) {
+        while (is_alnum(scanner_peek(s)) || scanner_peek(s) == '_')
+            scanner_buf_append(s, scanner_next(s));
+        if (!scanner_buf_append(s, '\0')) {
             scanner_err(s, "identifier is too long");
             return TOK_ERROR;
         }
@@ -233,7 +233,7 @@
     }
 
     /* Discard rest of line. */
-    skip_to_eol(s);
+    scanner_skip_to_eol(s);
 
     scanner_err(s, "unrecognized token");
     return TOK_ERROR;
@@ -243,68 +243,68 @@
 lex_include_string(struct scanner *s, struct xkb_compose_table *table,
                    union lvalue *val_out)
 {
-    while (is_space(peek(s)))
-        if (next(s) == '\n')
+    while (is_space(scanner_peek(s)))
+        if (scanner_next(s) == '\n')
             return TOK_END_OF_LINE;
 
     s->token_line = s->line;
     s->token_column = s->column;
     s->buf_pos = 0;
 
-    if (!chr(s, '\"')) {
+    if (!scanner_chr(s, '\"')) {
         scanner_err(s, "include statement must be followed by a path");
         return TOK_ERROR;
     }
 
-    while (!eof(s) && !eol(s) && peek(s) != '\"') {
-        if (chr(s, '%')) {
-            if (chr(s, '%')) {
-                buf_append(s, '%');
+    while (!scanner_eof(s) && !scanner_eol(s) && scanner_peek(s) != '\"') {
+        if (scanner_chr(s, '%')) {
+            if (scanner_chr(s, '%')) {
+                scanner_buf_append(s, '%');
             }
-            else if (chr(s, 'H')) {
+            else if (scanner_chr(s, 'H')) {
                 const char *home = secure_getenv("HOME");
                 if (!home) {
                     scanner_err(s, "%%H was used in an include statement, but 
the HOME environment variable is not set");
                     return TOK_ERROR;
                 }
-                if (!buf_appends(s, home)) {
+                if (!scanner_buf_appends(s, home)) {
                     scanner_err(s, "include path after expanding %%H is too 
long");
                     return TOK_ERROR;
                 }
             }
-            else if (chr(s, 'L')) {
+            else if (scanner_chr(s, 'L')) {
                 char *path = get_locale_compose_file_path(table->locale);
                 if (!path) {
                     scanner_err(s, "failed to expand %%L to the locale Compose 
file");
                     return TOK_ERROR;
                 }
-                if (!buf_appends(s, path)) {
+                if (!scanner_buf_appends(s, path)) {
                     free(path);
                     scanner_err(s, "include path after expanding %%L is too 
long");
                     return TOK_ERROR;
                 }
                 free(path);
             }
-            else if (chr(s, 'S')) {
+            else if (scanner_chr(s, 'S')) {
                 const char *xlocaledir = get_xlocaledir_path();
-                if (!buf_appends(s, xlocaledir)) {
+                if (!scanner_buf_appends(s, xlocaledir)) {
                     scanner_err(s, "include path after expanding %%S is too 
long");
                     return TOK_ERROR;
                 }
             }
             else {
-                scanner_err(s, "unknown %% format (%c) in include statement", 
peek(s));
+                scanner_err(s, "unknown %% format (%c) in include statement", 
scanner_peek(s));
                 return TOK_ERROR;
             }
         } else {
-            buf_append(s, next(s));
+            scanner_buf_append(s, scanner_next(s));
         }
     }
-    if (!chr(s, '\"')) {
+    if (!scanner_chr(s, '\"')) {
         scanner_err(s, "unterminated include statement");
         return TOK_ERROR;
     }
-    if (!buf_append(s, '\0')) {
+    if (!scanner_buf_append(s, '\0')) {
         scanner_err(s, "include path is too long");
         return TOK_ERROR;
     }
@@ -387,7 +387,7 @@
         } else if (!last) {
             if (node->is_leaf) {
                 scanner_warn(s, "a sequence already exists which is a prefix 
of this sequence; overriding");
-                node->internal.eqkid = node->lokid = node->hikid = 0;
+                node->internal.eqkid = 0;
                 node->internal.is_leaf = false;
             }
             lhs_pos++;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-1.4.0/src/keysym-utf.c 
new/libxkbcommon-1.4.1/src/keysym-utf.c
--- old/libxkbcommon-1.4.0/src/keysym-utf.c     2022-02-04 11:41:50.000000000 
+0100
+++ new/libxkbcommon-1.4.1/src/keysym-utf.c     2022-05-21 21:55:22.000000000 
+0200
@@ -819,22 +819,9 @@
     { 0x0ef9, 0x11f0 }, /*  Hangul_J_KkogjiDalrinIeung ??? HANGUL JONGSEONG 
YESIEUNG */
     { 0x0efa, 0x11f9 }, /*        Hangul_J_YeorinHieuh ??? HANGUL JONGSEONG 
YEORINHIEUH */
     { 0x0eff, 0x20a9 }, /*                  Korean_Won ??? WON SIGN */
-    { 0x13a4, 0x20ac }, /*                        Euro ??? EURO SIGN */
     { 0x13bc, 0x0152 }, /*                          OE ?? LATIN CAPITAL 
LIGATURE OE */
     { 0x13bd, 0x0153 }, /*                          oe ?? LATIN SMALL LIGATURE 
OE */
     { 0x13be, 0x0178 }, /*                  Ydiaeresis ?? LATIN CAPITAL LETTER 
Y WITH DIAERESIS */
-    { 0x20a0, 0x20a0 }, /*                     EcuSign ??? EURO-CURRENCY SIGN 
*/
-    { 0x20a1, 0x20a1 }, /*                   ColonSign ??? COLON SIGN */
-    { 0x20a2, 0x20a2 }, /*                CruzeiroSign ??? CRUZEIRO SIGN */
-    { 0x20a3, 0x20a3 }, /*                  FFrancSign ??? FRENCH FRANC SIGN */
-    { 0x20a4, 0x20a4 }, /*                    LiraSign ??? LIRA SIGN */
-    { 0x20a5, 0x20a5 }, /*                    MillSign ??? MILL SIGN */
-    { 0x20a6, 0x20a6 }, /*                   NairaSign ??? NAIRA SIGN */
-    { 0x20a7, 0x20a7 }, /*                  PesetaSign ??? PESETA SIGN */
-    { 0x20a8, 0x20a8 }, /*                   RupeeSign ??? RUPEE SIGN */
-    { 0x20a9, 0x20a9 }, /*                     WonSign ??? WON SIGN */
-    { 0x20aa, 0x20aa }, /*               NewSheqelSign ??? NEW SHEQEL SIGN */
-    { 0x20ab, 0x20ab }, /*                    DongSign ??? DONG SIGN */
     { 0x20ac, 0x20ac }, /*                    EuroSign ??? EURO SIGN */
 };
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-1.4.0/src/scanner-utils.h 
new/libxkbcommon-1.4.1/src/scanner-utils.h
--- old/libxkbcommon-1.4.0/src/scanner-utils.h  2022-02-04 11:41:50.000000000 
+0100
+++ new/libxkbcommon-1.4.1/src/scanner-utils.h  2022-05-21 21:55:22.000000000 
+0200
@@ -85,7 +85,7 @@
 }
 
 static inline char
-peek(struct scanner *s)
+scanner_peek(struct scanner *s)
 {
     if (unlikely(s->pos >= s->len))
         return '\0';
@@ -93,19 +93,19 @@
 }
 
 static inline bool
-eof(struct scanner *s)
+scanner_eof(struct scanner *s)
 {
     return s->pos >= s->len;
 }
 
 static inline bool
-eol(struct scanner *s)
+scanner_eol(struct scanner *s)
 {
-    return peek(s) == '\n';
+    return scanner_peek(s) == '\n';
 }
 
 static inline void
-skip_to_eol(struct scanner *s)
+scanner_skip_to_eol(struct scanner *s)
 {
     const char *nl = memchr(s->s + s->pos, '\n', s->len - s->pos);
     const size_t new_pos = nl ? (size_t) (nl - s->s) : s->len;
@@ -114,11 +114,11 @@
 }
 
 static inline char
-next(struct scanner *s)
+scanner_next(struct scanner *s)
 {
-    if (unlikely(eof(s)))
+    if (unlikely(scanner_eof(s)))
         return '\0';
-    if (unlikely(eol(s))) {
+    if (unlikely(scanner_eol(s))) {
         s->line++;
         s->column = 1;
     }
@@ -129,16 +129,16 @@
 }
 
 static inline bool
-chr(struct scanner *s, char ch)
+scanner_chr(struct scanner *s, char ch)
 {
-    if (likely(peek(s) != ch))
+    if (likely(scanner_peek(s) != ch))
         return false;
     s->pos++; s->column++;
     return true;
 }
 
 static inline bool
-str(struct scanner *s, const char *string, size_t len)
+scanner_str(struct scanner *s, const char *string, size_t len)
 {
     if (s->len - s->pos < len)
         return false;
@@ -148,10 +148,10 @@
     return true;
 }
 
-#define lit(s, literal) str(s, literal, sizeof(literal) - 1)
+#define scanner_lit(s, literal) scanner_str(s, literal, sizeof(literal) - 1)
 
 static inline bool
-buf_append(struct scanner *s, char ch)
+scanner_buf_append(struct scanner *s, char ch)
 {
     if (s->buf_pos + 1 >= sizeof(s->buf))
         return false;
@@ -160,7 +160,7 @@
 }
 
 static inline bool
-buf_appends(struct scanner *s, const char *str)
+scanner_buf_appends(struct scanner *s, const char *str)
 {
     int ret;
     ret = snprintf(s->buf + s->buf_pos, sizeof(s->buf) - s->buf_pos, "%s", 
str);
@@ -171,20 +171,20 @@
 }
 
 static inline bool
-oct(struct scanner *s, uint8_t *out)
+scanner_oct(struct scanner *s, uint8_t *out)
 {
     int i;
-    for (i = 0, *out = 0; peek(s) >= '0' && peek(s) <= '7' && i < 3; i++)
-        *out = *out * 8 + next(s) - '0';
+    for (i = 0, *out = 0; scanner_peek(s) >= '0' && scanner_peek(s) <= '7' && 
i < 3; i++)
+        *out = *out * 8 + scanner_next(s) - '0';
     return i > 0;
 }
 
 static inline bool
-hex(struct scanner *s, uint8_t *out)
+scanner_hex(struct scanner *s, uint8_t *out)
 {
     int i;
-    for (i = 0, *out = 0; is_xdigit(peek(s)) && i < 2; i++) {
-        const char c = next(s);
+    for (i = 0, *out = 0; is_xdigit(scanner_peek(s)) && i < 2; i++) {
+        const char c = scanner_next(s);
         const char offset = (c >= '0' && c <= '9' ? '0' :
                              c >= 'a' && c <= 'f' ? 'a' - 10 : 'A' - 10);
         *out = *out * 16 + c - offset;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-1.4.0/src/xkbcomp/rules.c 
new/libxkbcommon-1.4.1/src/xkbcomp/rules.c
--- old/libxkbcommon-1.4.0/src/xkbcomp/rules.c  2022-02-04 11:41:50.000000000 
+0100
+++ new/libxkbcommon-1.4.1/src/xkbcomp/rules.c  2022-05-21 21:55:22.000000000 
+0200
@@ -86,49 +86,49 @@
 {
 skip_more_whitespace_and_comments:
     /* Skip spaces. */
-    while (chr(s, ' ') || chr(s, '\t') || chr(s, '\r'));
+    while (scanner_chr(s, ' ') || scanner_chr(s, '\t') || scanner_chr(s, 
'\r'));
 
     /* Skip comments. */
-    if (lit(s, "//")) {
-        skip_to_eol(s);
+    if (scanner_lit(s, "//")) {
+        scanner_skip_to_eol(s);
     }
 
     /* New line. */
-    if (eol(s)) {
-        while (eol(s)) next(s);
+    if (scanner_eol(s)) {
+        while (scanner_eol(s)) scanner_next(s);
         return TOK_END_OF_LINE;
     }
 
     /* Escaped line continuation. */
-    if (chr(s, '\\')) {
+    if (scanner_chr(s, '\\')) {
         /* Optional \r. */
-        chr(s, '\r');
-        if (!eol(s)) {
+        scanner_chr(s, '\r');
+        if (!scanner_eol(s)) {
             scanner_err(s, "illegal new line escape; must appear at end of 
line");
             return TOK_ERROR;
         }
-        next(s);
+        scanner_next(s);
         goto skip_more_whitespace_and_comments;
     }
 
     /* See if we're done. */
-    if (eof(s)) return TOK_END_OF_FILE;
+    if (scanner_eof(s)) return TOK_END_OF_FILE;
 
     /* New token. */
     s->token_line = s->line;
     s->token_column = s->column;
 
     /* Operators and punctuation. */
-    if (chr(s, '!')) return TOK_BANG;
-    if (chr(s, '=')) return TOK_EQUALS;
-    if (chr(s, '*')) return TOK_STAR;
+    if (scanner_chr(s, '!')) return TOK_BANG;
+    if (scanner_chr(s, '=')) return TOK_EQUALS;
+    if (scanner_chr(s, '*')) return TOK_STAR;
 
     /* Group name. */
-    if (chr(s, '$')) {
+    if (scanner_chr(s, '$')) {
         val->string.start = s->s + s->pos;
         val->string.len = 0;
-        while (is_ident(peek(s))) {
-            next(s);
+        while (is_ident(scanner_peek(s))) {
+            scanner_next(s);
             val->string.len++;
         }
         if (val->string.len == 0) {
@@ -139,15 +139,15 @@
     }
 
     /* Include statement. */
-    if (lit(s, "include"))
+    if (scanner_lit(s, "include"))
         return TOK_INCLUDE;
 
     /* Identifier. */
-    if (is_ident(peek(s))) {
+    if (is_ident(scanner_peek(s))) {
         val->string.start = s->s + s->pos;
         val->string.len = 0;
-        while (is_ident(peek(s))) {
-            next(s);
+        while (is_ident(scanner_peek(s))) {
+            scanner_next(s);
             val->string.len++;
         }
         return TOK_IDENTIFIER;
@@ -376,46 +376,46 @@
         return;
     }
 
-    while (!eof(&s) && !eol(&s)) {
-        if (chr(&s, '%')) {
-            if (chr(&s, '%')) {
-                buf_append(&s, '%');
+    while (!scanner_eof(&s) && !scanner_eol(&s)) {
+        if (scanner_chr(&s, '%')) {
+            if (scanner_chr(&s, '%')) {
+                scanner_buf_append(&s, '%');
             }
-            else if (chr(&s, 'H')) {
+            else if (scanner_chr(&s, 'H')) {
                 const char *home = secure_getenv("HOME");
                 if (!home) {
                     scanner_err(&s, "%%H was used in an include statement, but 
the HOME environment variable is not set");
                     return;
                 }
-                if (!buf_appends(&s, home)) {
+                if (!scanner_buf_appends(&s, home)) {
                     scanner_err(&s, "include path after expanding %%H is too 
long");
                     return;
                 }
             }
-            else if (chr(&s, 'S')) {
+            else if (scanner_chr(&s, 'S')) {
                 const char *default_root = 
xkb_context_include_path_get_system_path(m->ctx);
-                if (!buf_appends(&s, default_root) || !buf_appends(&s, 
"/rules")) {
+                if (!scanner_buf_appends(&s, default_root) || 
!scanner_buf_appends(&s, "/rules")) {
                     scanner_err(&s, "include path after expanding %%S is too 
long");
                     return;
                 }
             }
-            else if (chr(&s, 'E')) {
+            else if (scanner_chr(&s, 'E')) {
                 const char *default_root = 
xkb_context_include_path_get_extra_path(m->ctx);
-                if (!buf_appends(&s, default_root) || !buf_appends(&s, 
"/rules")) {
+                if (!scanner_buf_appends(&s, default_root) || 
!scanner_buf_appends(&s, "/rules")) {
                     scanner_err(&s, "include path after expanding %%E is too 
long");
                     return;
                 }
             }
             else {
-                scanner_err(&s, "unknown %% format (%c) in include statement", 
peek(&s));
+                scanner_err(&s, "unknown %% format (%c) in include statement", 
scanner_peek(&s));
                 return;
             }
         }
         else {
-            buf_append(&s, next(&s));
+            scanner_buf_append(&s, scanner_next(&s));
         }
     }
-    if (!buf_append(&s, '\0')) {
+    if (!scanner_buf_append(&s, '\0')) {
         scanner_err(&s, "include path is too long");
         return;
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-1.4.0/src/xkbcomp/scanner.c 
new/libxkbcommon-1.4.1/src/xkbcomp/scanner.c
--- old/libxkbcommon-1.4.0/src/xkbcomp/scanner.c        2022-02-04 
11:41:50.000000000 +0100
+++ new/libxkbcommon-1.4.1/src/xkbcomp/scanner.c        2022-05-21 
21:55:22.000000000 +0200
@@ -34,14 +34,14 @@
     const char *start = s->s + s->pos;
     char *end;
 
-    if (lit(s, "0x")) {
-        while (is_xdigit(peek(s))) next(s);
+    if (scanner_lit(s, "0x")) {
+        while (is_xdigit(scanner_peek(s))) scanner_next(s);
         is_hex = true;
     }
     else {
-        while (is_digit(peek(s))) next(s);
-        is_float = chr(s, '.');
-        while (is_digit(peek(s))) next(s);
+        while (is_digit(scanner_peek(s))) scanner_next(s);
+        is_float = scanner_chr(s, '.');
+        while (is_digit(scanner_peek(s))) scanner_next(s);
     }
     if (s->s + s->pos == start)
         return false;
@@ -69,16 +69,16 @@
 
 skip_more_whitespace_and_comments:
     /* Skip spaces. */
-    while (is_space(peek(s))) next(s);
+    while (is_space(scanner_peek(s))) scanner_next(s);
 
     /* Skip comments. */
-    if (lit(s, "//") || chr(s, '#')) {
-        skip_to_eol(s);
+    if (scanner_lit(s, "//") || scanner_chr(s, '#')) {
+        scanner_skip_to_eol(s);
         goto skip_more_whitespace_and_comments;
     }
 
     /* See if we're done. */
-    if (eof(s)) return END_OF_FILE;
+    if (scanner_eof(s)) return END_OF_FILE;
 
     /* New token. */
     s->token_line = s->line;
@@ -86,28 +86,28 @@
     s->buf_pos = 0;
 
     /* String literal. */
-    if (chr(s, '\"')) {
-        while (!eof(s) && !eol(s) && peek(s) != '\"') {
-            if (chr(s, '\\')) {
+    if (scanner_chr(s, '\"')) {
+        while (!scanner_eof(s) && !scanner_eol(s) && scanner_peek(s) != '\"') {
+            if (scanner_chr(s, '\\')) {
                 uint8_t o;
-                if      (chr(s, '\\')) buf_append(s, '\\');
-                else if (chr(s, 'n'))  buf_append(s, '\n');
-                else if (chr(s, 't'))  buf_append(s, '\t');
-                else if (chr(s, 'r'))  buf_append(s, '\r');
-                else if (chr(s, 'b'))  buf_append(s, '\b');
-                else if (chr(s, 'f'))  buf_append(s, '\f');
-                else if (chr(s, 'v'))  buf_append(s, '\v');
-                else if (chr(s, 'e'))  buf_append(s, '\033');
-                else if (oct(s, &o))   buf_append(s, (char) o);
+                if      (scanner_chr(s, '\\')) scanner_buf_append(s, '\\');
+                else if (scanner_chr(s, 'n'))  scanner_buf_append(s, '\n');
+                else if (scanner_chr(s, 't'))  scanner_buf_append(s, '\t');
+                else if (scanner_chr(s, 'r'))  scanner_buf_append(s, '\r');
+                else if (scanner_chr(s, 'b'))  scanner_buf_append(s, '\b');
+                else if (scanner_chr(s, 'f'))  scanner_buf_append(s, '\f');
+                else if (scanner_chr(s, 'v'))  scanner_buf_append(s, '\v');
+                else if (scanner_chr(s, 'e'))  scanner_buf_append(s, '\033');
+                else if (scanner_oct(s, &o))   scanner_buf_append(s, (char) o);
                 else {
                     scanner_warn(s, "unknown escape sequence in string 
literal");
                     /* Ignore. */
                 }
             } else {
-                buf_append(s, next(s));
+                scanner_buf_append(s, scanner_next(s));
             }
         }
-        if (!buf_append(s, '\0') || !chr(s, '\"')) {
+        if (!scanner_buf_append(s, '\0') || !scanner_chr(s, '\"')) {
             scanner_err(s, "unterminated string literal");
             return ERROR_TOK;
         }
@@ -118,10 +118,10 @@
     }
 
     /* Key name literal. */
-    if (chr(s, '<')) {
-        while (is_graph(peek(s)) && peek(s) != '>')
-            buf_append(s, next(s));
-        if (!buf_append(s, '\0') || !chr(s, '>')) {
+    if (scanner_chr(s, '<')) {
+        while (is_graph(scanner_peek(s)) && scanner_peek(s) != '>')
+            scanner_buf_append(s, scanner_next(s));
+        if (!scanner_buf_append(s, '\0') || !scanner_chr(s, '>')) {
             scanner_err(s, "unterminated key name literal");
             return ERROR_TOK;
         }
@@ -131,29 +131,29 @@
     }
 
     /* Operators and punctuation. */
-    if (chr(s, ';')) return SEMI;
-    if (chr(s, '{')) return OBRACE;
-    if (chr(s, '}')) return CBRACE;
-    if (chr(s, '=')) return EQUALS;
-    if (chr(s, '[')) return OBRACKET;
-    if (chr(s, ']')) return CBRACKET;
-    if (chr(s, '(')) return OPAREN;
-    if (chr(s, ')')) return CPAREN;
-    if (chr(s, '.')) return DOT;
-    if (chr(s, ',')) return COMMA;
-    if (chr(s, '+')) return PLUS;
-    if (chr(s, '-')) return MINUS;
-    if (chr(s, '*')) return TIMES;
-    if (chr(s, '/')) return DIVIDE;
-    if (chr(s, '!')) return EXCLAM;
-    if (chr(s, '~')) return INVERT;
+    if (scanner_chr(s, ';')) return SEMI;
+    if (scanner_chr(s, '{')) return OBRACE;
+    if (scanner_chr(s, '}')) return CBRACE;
+    if (scanner_chr(s, '=')) return EQUALS;
+    if (scanner_chr(s, '[')) return OBRACKET;
+    if (scanner_chr(s, ']')) return CBRACKET;
+    if (scanner_chr(s, '(')) return OPAREN;
+    if (scanner_chr(s, ')')) return CPAREN;
+    if (scanner_chr(s, '.')) return DOT;
+    if (scanner_chr(s, ',')) return COMMA;
+    if (scanner_chr(s, '+')) return PLUS;
+    if (scanner_chr(s, '-')) return MINUS;
+    if (scanner_chr(s, '*')) return TIMES;
+    if (scanner_chr(s, '/')) return DIVIDE;
+    if (scanner_chr(s, '!')) return EXCLAM;
+    if (scanner_chr(s, '~')) return INVERT;
 
     /* Identifier. */
-    if (is_alpha(peek(s)) || peek(s) == '_') {
+    if (is_alpha(scanner_peek(s)) || scanner_peek(s) == '_') {
         s->buf_pos = 0;
-        while (is_alnum(peek(s)) || peek(s) == '_')
-            buf_append(s, next(s));
-        if (!buf_append(s, '\0')) {
+        while (is_alnum(scanner_peek(s)) || scanner_peek(s) == '_')
+            scanner_buf_append(s, scanner_next(s));
+        if (!scanner_buf_append(s, '\0')) {
             scanner_err(s, "identifier too long");
             return ERROR_TOK;
         }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-1.4.0/test/compose.c 
new/libxkbcommon-1.4.1/test/compose.c
--- old/libxkbcommon-1.4.0/test/compose.c       2022-02-04 11:41:50.000000000 
+0100
+++ new/libxkbcommon-1.4.1/test/compose.c       2022-05-21 21:55:22.000000000 
+0200
@@ -560,6 +560,26 @@
     free(table_string);
 }
 
+static void
+test_override(struct xkb_context *ctx)
+{
+    const char *table_string = "<dead_circumflex> <dead_circumflex> : \"foo\" 
X\n"
+                               "<dead_circumflex> <e> : \"bar\" Y\n"
+                               "<dead_circumflex> <dead_circumflex> <e> : 
\"baz\" Z\n";
+
+    assert(test_compose_seq_buffer(ctx, table_string,
+        /* Comes after - does override. */
+        XKB_KEY_dead_circumflex, XKB_COMPOSE_FEED_ACCEPTED,  
XKB_COMPOSE_COMPOSING,  "",     XKB_KEY_NoSymbol,
+        XKB_KEY_dead_circumflex, XKB_COMPOSE_FEED_ACCEPTED,  
XKB_COMPOSE_COMPOSING,  "",     XKB_KEY_NoSymbol,
+        XKB_KEY_e,               XKB_COMPOSE_FEED_ACCEPTED,  
XKB_COMPOSE_COMPOSED,   "baz",  XKB_KEY_Z,
+
+        /* Override does not affect sibling nodes */
+        XKB_KEY_dead_circumflex, XKB_COMPOSE_FEED_ACCEPTED,  
XKB_COMPOSE_COMPOSING,  "",     XKB_KEY_NoSymbol,
+        XKB_KEY_e,               XKB_COMPOSE_FEED_ACCEPTED,  
XKB_COMPOSE_COMPOSED,   "bar",  XKB_KEY_Y,
+
+        XKB_KEY_NoSymbol));
+}
+
 int
 main(int argc, char *argv[])
 {
@@ -575,6 +595,7 @@
     test_state(ctx);
     test_modifier_syntax(ctx);
     test_include(ctx);
+    test_override(ctx);
 
     xkb_context_unref(ctx);
     return 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxkbcommon-1.4.0/test/keysym.c 
new/libxkbcommon-1.4.1/test/keysym.c
--- old/libxkbcommon-1.4.0/test/keysym.c        2022-02-04 11:41:50.000000000 
+0100
+++ new/libxkbcommon-1.4.1/test/keysym.c        2022-05-21 21:55:22.000000000 
+0200
@@ -252,6 +252,7 @@
     assert(test_utf32_to_keysym(0xd7, XKB_KEY_multiply));
     assert(test_utf32_to_keysym('-', XKB_KEY_minus));
     assert(test_utf32_to_keysym(0x10fffd, 0x110fffd));
+    assert(test_utf32_to_keysym(0x20ac, XKB_KEY_EuroSign));
 
     // Unicode non-characters
     assert(test_utf32_to_keysym(0xfdd0, XKB_KEY_NoSymbol));

Reply via email to