Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package gtk-vnc for openSUSE:Factory checked 
in at 2022-08-10 17:12:52
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gtk-vnc (Old)
 and      /work/SRC/openSUSE:Factory/.gtk-vnc.new.1521 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gtk-vnc"

Wed Aug 10 17:12:52 2022 rev:56 rq:993939 version:1.3.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/gtk-vnc/gtk-vnc.changes  2021-11-24 
23:54:23.536495181 +0100
+++ /work/SRC/openSUSE:Factory/.gtk-vnc.new.1521/gtk-vnc.changes        
2022-08-10 17:13:11.125690049 +0200
@@ -1,0 +2,8 @@
+Fri Aug  5 07:53:17 UTC 2022 - Bj??rn Lie <[email protected]>
+
+- Update to version 1.3.1:
+  + Fix invalid use of subprojects with meson.
+  + Support ZRLE encoding for zero size alpha cursors.
+  + Add 'check' arg to meson run_command().
+
+-------------------------------------------------------------------

Old:
----
  gtk-vnc-1.3.0.tar.xz

New:
----
  gtk-vnc-1.3.1.tar.xz

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

Other differences:
------------------
++++++ gtk-vnc.spec ++++++
--- /var/tmp/diff_new_pack.8VwOKK/_old  2022-08-10 17:13:11.633691375 +0200
+++ /var/tmp/diff_new_pack.8VwOKK/_new  2022-08-10 17:13:11.641691396 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package gtk-vnc
 #
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2022 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -21,7 +21,7 @@
 %define _sonamepkg 2_0
 
 Name:           gtk-vnc
-Version:        1.3.0
+Version:        1.3.1
 Release:        0
 Summary:        A GTK widget for VNC clients
 License:        LGPL-2.1-only AND LGPL-2.1-or-later

++++++ gtk-vnc-1.3.0.tar.xz -> gtk-vnc-1.3.1.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtk-vnc-1.3.0/.gitignore new/gtk-vnc-1.3.1/.gitignore
--- old/gtk-vnc-1.3.0/.gitignore        1970-01-01 01:00:00.000000000 +0100
+++ new/gtk-vnc-1.3.1/.gitignore        2022-07-14 10:10:55.000000000 +0200
@@ -0,0 +1,3 @@
+*~
+build/
+vroot/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtk-vnc-1.3.0/.gitmodules 
new/gtk-vnc-1.3.1/.gitmodules
--- old/gtk-vnc-1.3.0/.gitmodules       1970-01-01 01:00:00.000000000 +0100
+++ new/gtk-vnc-1.3.1/.gitmodules       2022-07-14 10:10:55.000000000 +0200
@@ -0,0 +1,3 @@
+[submodule "src/keycodemapdb"]
+       path = subprojects/keycodemapdb
+       url = https://gitlab.com/keycodemap/keycodemapdb.git
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtk-vnc-1.3.0/AUTHORS new/gtk-vnc-1.3.1/AUTHORS
--- old/gtk-vnc-1.3.0/AUTHORS   2021-11-17 11:24:01.254825400 +0100
+++ new/gtk-vnc-1.3.1/AUTHORS   2022-07-14 10:12:54.293014300 +0200
@@ -42,6 +42,7 @@
 Daniel P. Berrang?? <[email protected]>
 Doug Goldstein <[email protected]>
 Dr. Matthias St. Pierre <[email protected]>
+Eli Schwartz <[email protected]>
 Emilio Pozuelo Monfort <[email protected]>
 Enrico Nicoletto <[email protected]>
 Eric R. Schulz <[email protected]>
@@ -65,6 +66,7 @@
 Jakub Jank?? <[email protected]>
 Jan Tojnar <[email protected]>
 J??n Tomko <[email protected]>
+Johannes Maibaum <[email protected]>
 John Haxby <[email protected]>
 Jonh Wendell <[email protected]>
 Jorge Gonz??lez <[email protected]>
@@ -122,6 +124,7 @@
 Victor Toso <[email protected]>
 Yaron Shahrabani <[email protected]>
 Zeeshan Ali (Khattak) <[email protected]>
+Zurab Kargareteli <[email protected]>
 ???????????????? ?????????????? <[email protected]>
 
     ...send patches to get your name here...
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtk-vnc-1.3.0/ChangeLog new/gtk-vnc-1.3.1/ChangeLog
--- old/gtk-vnc-1.3.0/ChangeLog 2021-11-17 11:24:01.237825400 +0100
+++ new/gtk-vnc-1.3.1/ChangeLog 2022-07-14 10:12:54.280014300 +0200
@@ -1,3 +1,36 @@
+2022-07-14  Daniel P. Berrang??  <[email protected]>
+
+       Bump version to 1.3.1 and add release notes
+
+       Add 'check' arg to meson run_command()
+
+2022-07-07  Zurab Kargareteli  <[email protected]>
+
+       Add Georgian translation
+
+2022-06-27  Eli Schwartz  <[email protected]>
+
+       fix invalid use of subprojects
+       The keycodemapdb Meson subproject provides a program and a source input.
+       Since it is a subproject, Meson wants to sandbox that and requires it to
+       be explicitly exported. But this never happened -- instead, we manually
+       poked at files using the actual string path "subprojects/......"
+
+       This was always a Meson sandbox violation, but Meson 0.63.0 started
+       noticing it and erroring out.
+
+       Instead, do the right thing. Update the subproject to a version that has
+       a meson.build with actually meaningful contents -- namely, a files
+       variable and a found program. Then use these in order to run the needed
+       custom_target.
+
+       In the process, it is also necessary to correct the argument ordering
+       when running keymap-gen.
+
+2022-02-23  Johannes Maibaum  <[email protected]>
+
+       Handle ZRLE encoding of zero size alpha cursor
+
 2021-11-17  Daniel P. Berrang??  <[email protected]>
 
        Bump version to 1.3.0 and add release notes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtk-vnc-1.3.0/NEWS new/gtk-vnc-1.3.1/NEWS
--- old/gtk-vnc-1.3.0/NEWS      2021-11-17 11:23:59.967830400 +0100
+++ new/gtk-vnc-1.3.1/NEWS      2022-07-14 10:10:55.000000000 +0200
@@ -1,6 +1,13 @@
     GTK VNC News
     ============
 
+Jul 14, 2022: Release 1.3.1
+===========================
+
+ o Fix invalid use of subprojects with meson
+ o Support ZRLE encoding for zero size alpha cursors
+ o Add 'check' arg to meson run_command()
+
 Nov 16, 2021: Release 1.3.0
 ===========================
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtk-vnc-1.3.0/gtk-vnc.spec 
new/gtk-vnc-1.3.1/gtk-vnc.spec
--- old/gtk-vnc-1.3.0/gtk-vnc.spec      2021-11-17 11:24:01.238825600 +0100
+++ new/gtk-vnc-1.3.1/gtk-vnc.spec      2022-07-14 10:12:54.282014400 +0200
@@ -8,7 +8,7 @@
 
 Summary: A GTK widget for VNC clients
 Name: gtk-vnc
-Version: 1.3.0
+Version: 1.3.1
 Release: 1%{?dist}
 License: LGPLv2+
 Source: 
https://download.gnome.org/sources/%{name}/%{verdir}/%{name}-%{version}.tar.xz
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtk-vnc-1.3.0/meson.build 
new/gtk-vnc-1.3.1/meson.build
--- old/gtk-vnc-1.3.0/meson.build       2021-11-17 11:23:59.969830300 +0100
+++ new/gtk-vnc-1.3.1/meson.build       2022-07-14 10:10:55.000000000 +0200
@@ -1,6 +1,6 @@
 project(
   'gtk-vnc','c',
-  version: '1.3.0',
+  version: '1.3.1',
   license: 'LGPLv2.1+',
   default_options: [
     'buildtype=debugoptimized',
@@ -24,7 +24,7 @@
 # ninja dist helper
 meson.add_dist_script('build-aux/dist.sh', meson.source_root(), 
meson.build_root())
 
-git = run_command('test', '-d', '.git').returncode() == 0
+git = run_command('test', '-d', '.git', check: false).returncode() == 0
 
 if git
   test(
@@ -133,10 +133,10 @@
   '-DGDK_VERSION_MAX_ALLOWED=@0@'.format(gtk_min_version_symbol),
 ]
 
-subproject('keycodemapdb')
+keycodemapdb = subproject('keycodemapdb')
 
-keymapgen = files('subprojects/keycodemapdb/tools/keymap-gen')
-keymapcsv = files('subprojects/keycodemapdb/data/keymaps.csv')
+keymapgen = find_program('keymap-gen')
+keymapcsv = keycodemapdb.get_variable('keymaps_csv')
 
 
 gnome = import('gnome')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtk-vnc-1.3.0/po/LINGUAS new/gtk-vnc-1.3.1/po/LINGUAS
--- old/gtk-vnc-1.3.0/po/LINGUAS        2021-11-17 11:23:59.969830300 +0100
+++ new/gtk-vnc-1.3.1/po/LINGUAS        2022-07-14 10:10:55.000000000 +0200
@@ -22,6 +22,7 @@
 id
 it
 ja
+ka
 ko
 lt
 lv
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtk-vnc-1.3.0/po/ka.po new/gtk-vnc-1.3.1/po/ka.po
--- old/gtk-vnc-1.3.0/po/ka.po  1970-01-01 01:00:00.000000000 +0100
+++ new/gtk-vnc-1.3.1/po/ka.po  2022-07-14 10:10:55.000000000 +0200
@@ -0,0 +1,31 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gtk-vnc master\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gtk-vnc/issues\n";
+"POT-Creation-Date: 2022-02-23 12:19+0000\n"
+"PO-Revision-Date: 2022-04-30 20:39+0200\n"
+"Last-Translator: Temuri Doghonadze <[email protected]>\n"
+"Language-Team: Georgian <[email protected]>\n"
+"Language: ka\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 3.0.1\n"
+
+#: src/vncdisplay.c:180
+msgid "Enables debug output"
+msgstr "??????????????????????????? ????????????????????????????????? 
????????????????????????"
+
+#: src/vncdisplay.c:3748
+msgid "GTK-VNC Options:"
+msgstr "GTK-VNC-?????? ?????????????????????????????????:"
+
+#: src/vncdisplay.c:3748
+msgid "Show GTK-VNC Options"
+msgstr "GTK-VNC-?????? ???????????????????????????????????? 
?????????????????????"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtk-vnc-1.3.0/src/meson.build 
new/gtk-vnc-1.3.1/src/meson.build
--- old/gtk-vnc-1.3.0/src/meson.build   2021-11-17 11:23:59.972830300 +0100
+++ new/gtk-vnc-1.3.1/src/meson.build   2022-07-14 10:10:55.000000000 +0200
@@ -336,9 +336,10 @@
   cmd = [
     python,
     keymapgen,
+    'code-map',
     '--lang', 'glib2',
     '--varname', varname,
-    'code-map', keymapcsv, keymap, 'qnum'
+    keymapcsv, keymap, 'qnum'
   ]
   gtk_vnc_sources += custom_target(
     target,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtk-vnc-1.3.0/src/vncconnection.c 
new/gtk-vnc-1.3.1/src/vncconnection.c
--- old/gtk-vnc-1.3.0/src/vncconnection.c       2021-11-17 11:23:59.974830400 
+0100
+++ new/gtk-vnc-1.3.1/src/vncconnection.c       2022-07-14 10:10:55.000000000 
+0200
@@ -3297,10 +3297,24 @@
         switch (encoding) {
         case VNC_CONNECTION_ENCODING_RAW:
             break;
+        case VNC_CONNECTION_ENCODING_ZRLE: {
+            guint32 length = vnc_connection_read_u32(conn);
+            if (vnc_connection_has_error(conn)) {
+                return;
+            }
+            if (length != 0) {
+                vnc_connection_set_error(conn,
+                                         "Read non-zero length %u for zero 
sized ZRLE alpha cursor",
+                                         length);
+                return;
+            }
+            break;
+        }
         default:
             vnc_connection_set_error(conn,
                                      "Unsupported encoding %u for zero size 
alpha cursor",
                                      encoding);
+            return;
             break;
         }
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtk-vnc-1.3.0/subprojects/keycodemapdb/README 
new/gtk-vnc-1.3.1/subprojects/keycodemapdb/README
--- old/gtk-vnc-1.3.0/subprojects/keycodemapdb/README   2021-11-17 
11:24:01.167825700 +0100
+++ new/gtk-vnc-1.3.1/subprojects/keycodemapdb/README   2022-06-22 
02:20:27.000000000 +0200
@@ -85,6 +85,7 @@
  - GLib2 (standard C, but with GLib2 data types)
  - Python
  - Perl
+ - Rust
 
 
 Usage
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gtk-vnc-1.3.0/subprojects/keycodemapdb/data/keymaps.csv 
new/gtk-vnc-1.3.1/subprojects/keycodemapdb/data/keymaps.csv
--- old/gtk-vnc-1.3.0/subprojects/keycodemapdb/data/keymaps.csv 2021-11-17 
11:24:01.168825600 +0100
+++ new/gtk-vnc-1.3.1/subprojects/keycodemapdb/data/keymaps.csv 2022-06-22 
02:20:27.000000000 +0200
@@ -144,19 +144,19 @@
 
KEY_KPDOT,83,ANSI_KeypadDecimal,0x41,0x53,0x71,0x71,99,VK_DECIMAL,0x6e,83,83,XK_KP_Decimal,0xffae,NumpadDecimal,KPDL,kp_decimal,0x32,0x41
 
KEY_KPDOT,83,ANSI_KeypadDecimal,0x41,0x53,0x71,0x71,99,VK_DECIMAL,0x6e,83,83,XK_KP_Decimal,0xffae,NumpadDecimal,KPDC,kp_decimal,0x32,0x41
 ,84,,,0x54,,,,,,,,,,,,,,
-KEY_ZENKAKUHANKAKU,85,,,0x76,0x5f,,148,,,,,,,Lang5,HZTG,,,
-KEY_102ND,86,,,0x56,0x61,0x13,100,VK_OEM_102,0xe1,86,86,,,IntlBackslash,LSGT,less,0x7c,
+KEY_ZENKAKUHANKAKU,85,,,0x76,0x5f,,148,,,,,XK_Zenkaku_Hankaku,0xff2a,Lang5,HZTG,,,
+KEY_102ND,86,,,0x56,0x61,0x13,100,VK_OEM_102,0xe2,86,86,XK_backslash,0x005c,IntlBackslash,LSGT,less,0x7c,
 
KEY_F11,87,F11,0x67,0x57,0x78,0x56,68,VK_F11,0x7a,87,87,XK_F11,0xffc8,F11,FK11,f11,0x09,0x67
 
KEY_F12,88,F12,0x6f,0x58,0x07,0x5e,69,VK_F12,0x7b,88,88,XK_F12,0xffc9,F12,FK12,f12,0x0b,0x6f
-KEY_RO,89,,,0x73,0x51,,135,,,,,,,IntlRo,AB11,ro,,
-KEY_KATAKANA,90,JIS_Kana,0x68,0x78,0x63,,146,VK_KANA,0x15,,,,,Katakana,KATA,,,
-KEY_KATAKANA,90,JIS_Kana,0x68,0x78,0x63,,146,VK_KANA,0x15,,,,,Lang3,KATA,,,
-KEY_HIRAGANA,91,,,0x77,0x62,0x87,147,,,,,,,Hiragana,HIRA,hiragana,,
-KEY_HIRAGANA,91,,,0x77,0x62,0x87,147,,,,,,,Lang4,HIRA,hiragana,,
-KEY_HENKAN,92,,,0x79,0x64,0x86,138,,,,,,,Convert,HENK,henkan,,
-KEY_KATAKANAHIRAGANA,93,,,0x70,0x13,0x87,136,,,0xc8,0xc8,,,KanaMode,HKTG,katakanahiragana,,
-KEY_MUHENKAN,94,,,0x7b,0x67,0x85,139,,,,,,,NonConvert,NFER,muhenkan,,
-KEY_MUHENKAN,94,,,0x7b,0x67,0x85,139,,,,,,,NonConvert,MUHE,muhenkan,,
+KEY_RO,89,JIS_Underscore,0x5e,0x73,0x51,,135,VK_OEM_102,0xe2,0xcb,0x73,XK_underscore,0x005f,IntlRo,AB11,ro,,
+KEY_KATAKANA,90,,,0x78,0x63,,146,VK_KANA,0x15,,,XK_Katakana,0xff26,Katakana,KATA,,,
+KEY_KATAKANA,90,,,0x78,0x63,,146,VK_KANA,0x15,,,XK_Katakana,0xff26,Lang3,KATA,,,
+KEY_HIRAGANA,91,,,0x77,0x62,0x87,147,,,,,XK_Hiragana,0xff25,Hiragana,HIRA,hiragana,,
+KEY_HIRAGANA,91,,,0x77,0x62,0x87,147,,,,,XK_Hiragana,0xff25,Lang4,HIRA,hiragana,,
+KEY_HENKAN,92,,,0x79,0x64,0x86,138,VK_CONVERT,0x1c,0x79,0x79,XK_Henkan,0xff23,Convert,HENK,henkan,,
+KEY_KATAKANAHIRAGANA,93,,,0x70,0x13,0x87,136,VK_OEM_COPY,0xf2,0xc8,0x70,XK_Hiragana_Katakana,0xff27,KanaMode,HKTG,katakanahiragana,,
+KEY_MUHENKAN,94,,,0x7b,0x67,0x85,139,VK_NONCONVERT,0x1d,0x7b,0x7b,XK_Muhenkan,0xff22,NonConvert,NFER,muhenkan,,
+KEY_MUHENKAN,94,,,0x7b,0x67,0x85,139,VK_NONCONVERT,0x1d,0x7b,0x7b,XK_Muhenkan,0xff22,NonConvert,MUHE,muhenkan,,
 
KEY_KPJPCOMMA,95,JIS_KeypadComma,0x5f,0x5c,0x27,,140,,,,,XK_KP_Separator,0xffac,,KPSP,,,
 
KEY_KPJPCOMMA,95,JIS_KeypadComma,0x5f,0x5c,0x27,,140,,,,,XK_KP_Separator,0xffac,,JPCM,,,
 
KEY_KPENTER,96,ANSI_KeypadEnter,0x4c,0xe01c,0xe05a,0x79,88,,,0x64,0x64,XK_KP_Enter,0xff8d,NumpadEnter,KPEN,kp_enter,0x5a,0x4c
@@ -192,9 +192,11 @@
 KEY_SCALE,120,,,0xe00b,,,,,,,,,,,I128,,,
 
KEY_KPCOMMA,121,,,0x7e,0x6d,,133,VK_SEPARATOR??,0x6c,,,,,NumpadComma,KPCO,kp_comma,,
 KEY_KPCOMMA,121,,,0x7e,0x6d,,133,VK_SEPARATOR??,0x6c,,,,,NumpadComma,I129,,,
-KEY_HANGEUL,122,,,,,,144,VK_HANGEUL,0x15,,,,,,HNGL,,,
-KEY_HANJA,123,,,0xe00d,,,145,VK_HANJA,0x19,,,,,,HJCV,,,
-KEY_YEN,124,JIS_Yen,0x5d,0x7d,0x6a,0x5d,137,,,0x7d,0x7d,,,IntlYen,AE13,yen,,
+KEY_HANGEUL,122,JIS_Kana,0x68,0x72,,,144,VK_HANGEUL,0x15,,0x71,,,Lang1,HNGL,lang1,,
+KEY_HANGEUL,122,JIS_Kana,0x68,0x72,,,144,VK_IME_ON,0x16,,0x71,,,Lang1,HNGL,lang1,,
+KEY_HANJA,123,JIS_Eisu,0x66,0x71,,,145,VK_HANJA,0x19,,0x72,,,Lang2,HJCV,lang2,,
+KEY_HANJA,123,JIS_Eisu,0x66,0x71,,,145,VK_IME_OFF,0x1A,,0x72,,,Lang2,HJCV,lang2,,
+KEY_YEN,124,JIS_Yen,0x5d,0x7d,0x6a,0x5d,137,VK_OEM_5,0xdc,0x7d,0x7d,,,IntlYen,AE13,yen,,
 
KEY_LEFTMETA,125,Command,0x37,0xe05b,0xe01f,0x8b,227,VK_LWIN,0x5b,0x6b,0x6b,XK_Meta_L,0xffe7,MetaLeft,LMTA,meta_l,0x78,0x37
 
KEY_LEFTMETA,125,Command,0x37,0xe05b,0xe01f,0x8b,227,VK_LWIN,0x5b,0x6b,0x6b,XK_Meta_L,0xffe7,MetaLeft,LWIN,meta_l,0x78,0x37
 
KEY_RIGHTMETA,126,RightCommand,0x36,0xe05c,0xe027,0x8c,231,VK_RWIN,0x5c,0x6c,0x6c,XK_Meta_R,0xffe8,MetaRight,RMTA,meta_r,0x7a,0x37
@@ -250,8 +252,8 @@
 KEY_CONFIG,171,,,0xe001,,,,,,,,,,,I179,,,
 
KEY_HOMEPAGE,172,,,0xe032,0xe03a,0x97,,VK_BROWSER_HOME,0xac,,,,,BrowserHome,I180,ac_home,,
 
KEY_REFRESH,173,,,0xe067,0xe020,,250,VK_BROWSER_REFRESH,0xa8,,,,,BrowserRefresh,I181,ac_refresh,,
-KEY_EXIT,174,,,0x71,,,,,,,,,,,I182,,,
-KEY_MOVE,175,,,0x72,,,,,,,,,,,I183,,,
+KEY_EXIT,174,,,,,,,,,,,,,,I182,,,
+KEY_MOVE,175,,,,,,,,,,,,,,I183,,,
 KEY_EDIT,176,,,0xe008,,,247,,,,,,,,I184,,,
 KEY_SCROLLUP,177,,,0x75,,,245,,,,,,,,I185,,,
 KEY_SCROLLDOWN,178,,,0xe00f,,,246,,,,,,,,I186,,,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtk-vnc-1.3.0/subprojects/keycodemapdb/meson.build 
new/gtk-vnc-1.3.1/subprojects/keycodemapdb/meson.build
--- old/gtk-vnc-1.3.0/subprojects/keycodemapdb/meson.build      2021-11-17 
11:24:01.168825600 +0100
+++ new/gtk-vnc-1.3.1/subprojects/keycodemapdb/meson.build      2022-06-22 
02:20:27.000000000 +0200
@@ -1 +1,6 @@
-project('keycodemapdb')
+project('keycodemapdb', meson_version: '>=0.46.0')
+
+keymap_gen = find_program('tools/keymap-gen')
+meson.override_find_program('keymap-gen', keymap_gen)
+
+keymaps_csv = files('data/keymaps.csv')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gtk-vnc-1.3.0/subprojects/keycodemapdb/tests/.gitignore 
new/gtk-vnc-1.3.1/subprojects/keycodemapdb/tests/.gitignore
--- old/gtk-vnc-1.3.0/subprojects/keycodemapdb/tests/.gitignore 2021-11-17 
11:24:01.168825600 +0100
+++ new/gtk-vnc-1.3.1/subprojects/keycodemapdb/tests/.gitignore 1970-01-01 
01:00:00.000000000 +0100
@@ -1,11 +0,0 @@
-osx2win32.*
-osx2win32_name.*
-osx2xkb.*
-osx2xkb_name.*
-html2win32.*
-html2win32_name.*
-osx.*
-osx_name.*
-stdc
-stdc++
-node_modules/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gtk-vnc-1.3.0/subprojects/keycodemapdb/tests/Makefile 
new/gtk-vnc-1.3.1/subprojects/keycodemapdb/tests/Makefile
--- old/gtk-vnc-1.3.0/subprojects/keycodemapdb/tests/Makefile   2021-11-17 
11:24:01.168825600 +0100
+++ new/gtk-vnc-1.3.1/subprojects/keycodemapdb/tests/Makefile   2022-06-22 
02:20:27.000000000 +0200
@@ -1,4 +1,4 @@
-TESTS := stdc stdc++ python2 python3 javascript
+TESTS := stdc stdc++ python2 python3 javascript rust
 
 check: $(TESTS)
        @set -e; for fn in $(TESTS); do \
@@ -19,37 +19,37 @@
              osx.h osx.c osx_name.h osx_name.c
        $(CC) -Wall -o $@ $(filter %.c, $^)
 osx2win32.c: $(SOURCES)
-       $(GEN) --lang stdc code-map $(DATA) osx win32 > $@
+       $(GEN) code-map --lang stdc $(DATA) osx win32 > $@
 osx2win32.h: $(SOURCES)
-       $(GEN) --lang stdc-header code-map $(DATA) osx win32 > $@
+       $(GEN) code-map --lang stdc-header $(DATA) osx win32 > $@
 osx2win32_name.c: $(SOURCES)
-       $(GEN) --lang stdc name-map $(DATA) osx win32 > $@
+       $(GEN) name-map --lang stdc $(DATA) osx win32 > $@
 osx2win32_name.h: $(SOURCES)
-       $(GEN) --lang stdc-header name-map $(DATA) osx win32 > $@
+       $(GEN) name-map --lang stdc-header $(DATA) osx win32 > $@
 osx2xkb.c: $(SOURCES)
-       $(GEN) --lang stdc code-map $(DATA) osx xkb > $@
+       $(GEN) code-map --lang stdc $(DATA) osx xkb > $@
 osx2xkb.h: $(SOURCES)
-       $(GEN) --lang stdc-header code-map $(DATA) osx xkb > $@
+       $(GEN) code-map --lang stdc-header $(DATA) osx xkb > $@
 osx2xkb_name.c: $(SOURCES)
-       $(GEN) --lang stdc name-map $(DATA) osx xkb > $@
+       $(GEN) name-map --lang stdc $(DATA) osx xkb > $@
 osx2xkb_name.h: $(SOURCES)
-       $(GEN) --lang stdc-header name-map $(DATA) osx xkb > $@
+       $(GEN) name-map --lang stdc-header $(DATA) osx xkb > $@
 html2win32.c: $(SOURCES)
-       $(GEN) --lang stdc code-map $(DATA) html win32 > $@
+       $(GEN) code-map --lang stdc $(DATA) html win32 > $@
 html2win32.h: $(SOURCES)
-       $(GEN) --lang stdc-header code-map $(DATA) html win32 > $@
+       $(GEN) code-map --lang stdc-header $(DATA) html win32 > $@
 html2win32_name.c: $(SOURCES)
-       $(GEN) --lang stdc name-map $(DATA) html win32 > $@
+       $(GEN) name-map --lang stdc $(DATA) html win32 > $@
 html2win32_name.h: $(SOURCES)
-       $(GEN) --lang stdc-header name-map $(DATA) html win32 > $@
+       $(GEN) name-map --lang stdc-header $(DATA) html win32 > $@
 osx.c: $(SOURCES)
-       $(GEN) --lang stdc code-table $(DATA) osx > $@
+       $(GEN) code-table --lang stdc $(DATA) osx > $@
 osx.h: $(SOURCES)
-       $(GEN) --lang stdc-header code-table $(DATA) osx > $@
+       $(GEN) code-table --lang stdc-header $(DATA) osx > $@
 osx_name.c: $(SOURCES)
-       $(GEN) --lang stdc name-table $(DATA) osx > $@
+       $(GEN) name-table --lang stdc $(DATA) osx > $@
 osx_name.h: $(SOURCES)
-       $(GEN) --lang stdc-header name-table $(DATA) osx > $@
+       $(GEN) name-table --lang stdc-header $(DATA) osx > $@
 
 stdc++: stdc++.cc osx2win32.hh osx2win32.cc osx2win32_name.hh 
osx2win32_name.cc \
              osx2xkb.hh osx2xkb.cc osx2xkb_name.hh osx2xkb_name.cc \
@@ -57,58 +57,58 @@
              osx.hh osx.cc osx_name.hh osx_name.cc
        $(CXX) -Wall -std=c++11 -o $@ $(filter %.cc, $^)
 osx2win32.cc: $(SOURCES)
-       $(GEN) --lang stdc++ code-map $(DATA) osx win32 > $@
+       $(GEN) code-map --lang stdc++ $(DATA) osx win32 > $@
 osx2win32.hh: $(SOURCES)
-       $(GEN) --lang stdc++-header code-map $(DATA) osx win32 > $@
+       $(GEN) code-map --lang stdc++-header $(DATA) osx win32 > $@
 osx2win32_name.cc: $(SOURCES)
-       $(GEN) --lang stdc++ name-map $(DATA) osx win32 > $@
+       $(GEN) name-map --lang stdc++ $(DATA) osx win32 > $@
 osx2win32_name.hh: $(SOURCES)
-       $(GEN) --lang stdc++-header name-map $(DATA) osx win32 > $@
+       $(GEN) name-map --lang stdc++-header $(DATA) osx win32 > $@
 osx2xkb.cc: $(SOURCES)
-       $(GEN) --lang stdc++ code-map $(DATA) osx xkb > $@
+       $(GEN) code-map --lang stdc++ $(DATA) osx xkb > $@
 osx2xkb.hh: $(SOURCES)
-       $(GEN) --lang stdc++-header code-map $(DATA) osx xkb > $@
+       $(GEN) code-map --lang stdc++-header $(DATA) osx xkb > $@
 osx2xkb_name.cc: $(SOURCES)
-       $(GEN) --lang stdc++ name-map $(DATA) osx xkb > $@
+       $(GEN) name-map --lang stdc++ $(DATA) osx xkb > $@
 osx2xkb_name.hh: $(SOURCES)
-       $(GEN) --lang stdc++-header name-map $(DATA) osx xkb > $@
+       $(GEN) name-map --lang stdc++-header $(DATA) osx xkb > $@
 html2win32.cc: $(SOURCES)
-       $(GEN) --lang stdc++ code-map $(DATA) html win32 > $@
+       $(GEN) code-map --lang stdc++ $(DATA) html win32 > $@
 html2win32.hh: $(SOURCES)
-       $(GEN) --lang stdc++-header code-map $(DATA) html win32 > $@
+       $(GEN) code-map --lang stdc++-header $(DATA) html win32 > $@
 html2win32_name.cc: $(SOURCES)
-       $(GEN) --lang stdc++ name-map $(DATA) html win32 > $@
+       $(GEN) name-map --lang stdc++ $(DATA) html win32 > $@
 html2win32_name.hh: $(SOURCES)
-       $(GEN) --lang stdc++-header name-map $(DATA) html win32 > $@
+       $(GEN) name-map --lang stdc++-header $(DATA) html win32 > $@
 osx.cc: $(SOURCES)
-       $(GEN) --lang stdc++ code-table $(DATA) osx > $@
+       $(GEN) code-table --lang stdc++ $(DATA) osx > $@
 osx.hh: $(SOURCES)
-       $(GEN) --lang stdc++-header code-table $(DATA) osx > $@
+       $(GEN) code-table --lang stdc++-header $(DATA) osx > $@
 osx_name.cc: $(SOURCES)
-       $(GEN) --lang stdc++ name-table $(DATA) osx > $@
+       $(GEN) name-table --lang stdc++ $(DATA) osx > $@
 osx_name.hh: $(SOURCES)
-       $(GEN) --lang stdc++-header name-table $(DATA) osx > $@
+       $(GEN) name-table --lang stdc++-header $(DATA) osx > $@
 
 python2: osx2win32.py osx2win32_name.py \
          osx2xkb.py osx2xkb_name.py \
          html2win32.py html2win32_name.py \
          osx.py osx_name.py
 osx2win32.py: $(SOURCES)
-       $(GEN) --lang python2 code-map $(DATA) osx win32 > $@
+       $(GEN) code-map --lang python2 $(DATA) osx win32 > $@
 osx2win32_name.py: $(SOURCES)
-       $(GEN) --lang python2 name-map $(DATA) osx win32 > $@
+       $(GEN) name-map --lang python2 $(DATA) osx win32 > $@
 osx2xkb.py: $(SOURCES)
-       $(GEN) --lang python2 code-map $(DATA) osx xkb > $@
+       $(GEN) code-map --lang python2 $(DATA) osx xkb > $@
 osx2xkb_name.py: $(SOURCES)
-       $(GEN) --lang python2 name-map $(DATA) osx xkb > $@
+       $(GEN) name-map --lang python2 $(DATA) osx xkb > $@
 html2win32.py: $(SOURCES)
-       $(GEN) --lang python2 code-map $(DATA) html win32 > $@
+       $(GEN) code-map --lang python2 $(DATA) html win32 > $@
 html2win32_name.py: $(SOURCES)
-       $(GEN) --lang python2 name-map $(DATA) html win32 > $@
+       $(GEN) name-map --lang python2 $(DATA) html win32 > $@
 osx.py: $(SOURCES)
-       $(GEN) --lang python2 code-table $(DATA) osx > $@
+       $(GEN) code-table --lang python2 $(DATA) osx > $@
 osx_name.py: $(SOURCES)
-       $(GEN) --lang python2 name-table $(DATA) osx > $@
+       $(GEN) name-table --lang python2 $(DATA) osx > $@
 
 javascript: node_modules/babel-core \
             node_modules/babel-plugin-transform-es2015-modules-commonjs \
@@ -121,21 +121,42 @@
 node_modules/babel-plugin-transform-es2015-modules-commonjs:
        npm install babel-plugin-transform-es2015-modules-commonjs
 osx2win32.js: $(SOURCES)
-       $(GEN) --lang js code-map $(DATA) osx win32 > $@
+       $(GEN) code-map --lang js $(DATA) osx win32 > $@
 osx2win32_name.js: $(SOURCES)
-       $(GEN) --lang js name-map $(DATA) osx win32 > $@
+       $(GEN) name-map --lang js $(DATA) osx win32 > $@
 osx2xkb.js: $(SOURCES)
-       $(GEN) --lang js code-map $(DATA) osx xkb > $@
+       $(GEN) code-map --lang js $(DATA) osx xkb > $@
 osx2xkb_name.js: $(SOURCES)
-       $(GEN) --lang js name-map $(DATA) osx xkb > $@
+       $(GEN) name-map --lang js $(DATA) osx xkb > $@
 html2win32.js: $(SOURCES)
-       $(GEN) --lang js code-map $(DATA) html win32 > $@
+       $(GEN) code-map --lang js $(DATA) html win32 > $@
 html2win32_name.js: $(SOURCES)
-       $(GEN) --lang js name-map $(DATA) html win32 > $@
+       $(GEN) name-map --lang js $(DATA) html win32 > $@
 osx.js: $(SOURCES)
-       $(GEN) --lang js code-table $(DATA) osx > $@
+       $(GEN) code-table --lang js $(DATA) osx > $@
 osx_name.js: $(SOURCES)
-       $(GEN) --lang js name-table $(DATA) osx > $@
+       $(GEN) name-table --lang js $(DATA) osx > $@
+
+rust: osx2win32.rs osx2win32_name.rs \
+      osx2xkb.rs osx2xkb_name.rs \
+      html2win32.rs html2win32_name.rs \
+      osx.rs osx_name.rs
+osx2win32.rs: $(SOURCES)
+       $(GEN) code-map --lang rust $(DATA) osx win32 > $@
+osx2win32_name.rs: $(SOURCES)
+       $(GEN) name-map --lang rust $(DATA) osx win32 > $@
+osx2xkb.rs: $(SOURCES)
+       $(GEN) code-map --lang rust $(DATA) osx xkb > $@
+osx2xkb_name.rs: $(SOURCES)
+       $(GEN) name-map --lang rust $(DATA) osx xkb > $@
+html2win32.rs: $(SOURCES)
+       $(GEN) code-map --lang rust $(DATA) html win32 > $@
+html2win32_name.rs: $(SOURCES)
+       $(GEN) name-map --lang rust $(DATA) html win32 > $@
+osx.rs: $(SOURCES)
+       $(GEN) code-table --lang rust $(DATA) osx > $@
+osx_name.rs: $(SOURCES)
+       $(GEN) name-table --lang rust $(DATA) osx > $@
 
 clean:
        rm -rf node_modules
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gtk-vnc-1.3.0/subprojects/keycodemapdb/tests/rust 
new/gtk-vnc-1.3.1/subprojects/keycodemapdb/tests/rust
--- old/gtk-vnc-1.3.0/subprojects/keycodemapdb/tests/rust       1970-01-01 
01:00:00.000000000 +0100
+++ new/gtk-vnc-1.3.1/subprojects/keycodemapdb/tests/rust       2022-06-22 
02:20:27.000000000 +0200
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+cd rust-test
+cargo test
+cargo clippy
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gtk-vnc-1.3.0/subprojects/keycodemapdb/tests/rust-test/Cargo.toml 
new/gtk-vnc-1.3.1/subprojects/keycodemapdb/tests/rust-test/Cargo.toml
--- old/gtk-vnc-1.3.0/subprojects/keycodemapdb/tests/rust-test/Cargo.toml       
1970-01-01 01:00:00.000000000 +0100
+++ new/gtk-vnc-1.3.1/subprojects/keycodemapdb/tests/rust-test/Cargo.toml       
2022-06-22 02:20:27.000000000 +0200
@@ -0,0 +1,10 @@
+[package]
+name = "rust-test"
+version = "0.1.0"
+authors = ["Marc-Andr?? Lureau <[email protected]>"]
+edition = "2018"
+
+# See more keys and their definitions at 
https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+phf = { version = "0.8", features = ["macros"] }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gtk-vnc-1.3.0/subprojects/keycodemapdb/tests/rust-test/src/main.rs 
new/gtk-vnc-1.3.1/subprojects/keycodemapdb/tests/rust-test/src/main.rs
--- old/gtk-vnc-1.3.0/subprojects/keycodemapdb/tests/rust-test/src/main.rs      
1970-01-01 01:00:00.000000000 +0100
+++ new/gtk-vnc-1.3.1/subprojects/keycodemapdb/tests/rust-test/src/main.rs      
2022-06-22 02:20:27.000000000 +0200
@@ -0,0 +1,28 @@
+include!("../../html2win32_name.rs");
+include!("../../html2win32.rs");
+include!("../../osx2win32_name.rs");
+include!("../../osx2win32.rs");
+include!("../../osx2xkb_name.rs");
+include!("../../osx2xkb.rs");
+include!("../../osx_name.rs");
+include!("../../osx.rs");
+
+fn main() {
+    assert_eq!(CODE_MAP_OSX_TO_WIN32[0x1d], 0x30);
+    assert_eq!(NAME_MAP_OSX_TO_WIN32[0x1d], "VK_0");
+
+    assert_eq!(CODE_MAP_OSX_TO_XKB[0x1d], "AE10");
+    assert_eq!(NAME_MAP_OSX_TO_XKB[0x1d], "AE10");
+
+    assert_eq!(CODE_MAP_HTML_TO_WIN32["ControlLeft"], 0x11);
+    assert_eq!(NAME_MAP_HTML_TO_WIN32["ControlLeft"], "VK_CONTROL");
+
+    assert_eq!(CODE_TABLE_OSX[0x1d], 0x3b);
+    assert_eq!(NAME_TABLE_OSX[0x1d], "Control");
+}
+
+
+#[test]
+fn test() {
+    main()
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gtk-vnc-1.3.0/subprojects/keycodemapdb/tools/keymap-gen 
new/gtk-vnc-1.3.1/subprojects/keycodemapdb/tools/keymap-gen
--- old/gtk-vnc-1.3.0/subprojects/keycodemapdb/tools/keymap-gen 2021-11-17 
11:24:01.170825700 +0100
+++ new/gtk-vnc-1.3.1/subprojects/keycodemapdb/tools/keymap-gen 2022-06-22 
02:20:27.000000000 +0200
@@ -508,7 +508,7 @@
     def _array_code_entry(self, value, name):
         raise NotImplementedError()
 
-    def generate_name_docs(self, varname, database, mapname):
+    def generate_name_docs(self, title, subtitle, database, mapname):
         if mapname not in database.mapname:
             raise Exception("Unknown map %s, expected one of %s" % (
                             mapname, ", ".join(database.mapname.keys())))
@@ -517,10 +517,12 @@
         keys.sort()
         names = [database.mapname[Database.MAP_LINUX].get(key, "unnamed") for 
key in keys]
 
-        if varname is None:
-            varname = mapname
+        if title is None:
+            title = mapname
+        if subtitle is None:
+            subtitle = "Docs for %s" % mapname
 
-        self._array_start_name_doc(varname, mapname)
+        self._array_start_name_doc(title, subtitle, mapname)
 
         for i in range(len(keys)):
             key = keys[i]
@@ -530,7 +532,7 @@
         self._array_end()
 
 
-    def generate_code_docs(self, varname, database, mapname):
+    def generate_code_docs(self, title, subtitle, database, mapname):
         if mapname not in database.mapfrom:
             raise Exception("Unknown map %s, expected one of %s" % (
                             mapname, ", ".join(database.mapfrom.keys())))
@@ -545,10 +547,12 @@
             names = database.mapname[Database.MAP_LINUX]
             namemap = Database.MAP_LINUX
 
-        if varname is None:
-            varname = mapname
+        if title is None:
+            title = mapname
+        if subtitle is None:
+            subtitle = "Docs for %s" % mapname
 
-        self._array_start_code_doc(varname, mapname, namemap)
+        self._array_start_code_doc(title, subtitle, mapname, namemap)
 
         for i in range(len(keys)):
             key = keys[i]
@@ -748,6 +752,54 @@
     def __init__(self):
         super(StdCppHeaderLanguageGenerator, self).__init__("unsigned short", 
"char *", "unsigned int")
 
+
+class RustLanguageGenerator(LanguageSrcGenerator):
+
+    def _boilerplate(self, lines):
+        print("//")
+        for line in lines:
+            print("// %s" % line)
+        print("//")
+
+    def _array_start(self, varname, length, defvalue, fromtype, totype):
+        if fromtype == self.TYPE_ENUM:
+            raise NotImplementedError("Enums not supported as source in Rust 
generator")
+
+        totypename = "&str" if totype == self.TYPE_STRING else "u16"
+        if fromtype != self.TYPE_STRING:
+            print("pub static %s: &[%s] = &[" % (varname.upper(), totypename))
+        else:
+            print("pub static %s: phf::Map<&str, %s> = phf::phf_map! {" %
+                  (varname.upper(), totypename))
+
+    def _array_end(self, fromtype, totype):
+        if fromtype != self.TYPE_STRING:
+            print("];")
+        else:
+            print("};")
+
+    def _array_entry(self, index, value, comment, fromtype, totype):
+        none = "\"\"" if totype == self.TYPE_STRING else "0"
+        if fromtype == self.TYPE_INT:
+            if value is None:
+                print("  %s, // %s" % (none, comment))
+            elif totype == self.TYPE_INT:
+                print("  0x%x, // %s" % (value, comment))
+            elif totype == self.TYPE_ENUM:
+                print("  %s, // %s" % (value, comment))
+            else:
+                print("  \"%s\", // %s" % (value, comment))
+        else:
+            if value is None:
+                print("  \"%s\" => %s, // %s" % (index, none, comment))
+            elif totype == self.TYPE_INT:
+                print("  \"%s\" => 0x%x, // %s" % (index, value, comment))
+            elif totype == self.TYPE_ENUM:
+                print("  \"%s\" => %s, // %s" % (index, value, comment))
+            else:
+                print("  \"%s\" => \"%s\", // %s" % (index, value, comment))
+
+
 class PythonLanguageGenerator(LanguageSrcGenerator):
 
     def _boilerplate(self, lines):
@@ -872,10 +924,10 @@
             print("# %s" % line)
         print("#")
 
-    def _array_start_name_doc(self, varname, namemap):
+    def _array_start_name_doc(self, title, subtitle, namemap):
         print("=head1 NAME")
         print("")
-        print("%s" % varname)
+        print("%s - %s" % (title, subtitle))
         print("")
         print("=head1 DESCRIPTION")
         print("")
@@ -884,10 +936,10 @@
         print("=over 4")
         print("")
 
-    def _array_start_code_doc(self, varname, codemap, namemap):
+    def _array_start_code_doc(self, title, subtitle, codemap, namemap):
         print("=head1 NAME")
         print("")
-        print("%s" % varname)
+        print("%s - %s" % (title, subtitle))
         print("")
         print("=head1 DESCRIPTION")
         print("")
@@ -912,6 +964,63 @@
         print("Key name %s" % name)
         print("")
 
+class RSTLanguageGenerator(LanguageDocGenerator):
+
+    def _boilerplate(self, lines):
+        print("..")
+        for line in lines:
+            print("   %s" % line)
+        print("")
+
+    def _array_start_name_doc(self, title, subtitle, namemap):
+        print("=" * len(title))
+        print(title)
+        print("=" * len(title))
+        print("")
+        print("-" * len(subtitle))
+        print(subtitle)
+        print("-" * len(subtitle))
+        print("")
+        print(":Manual section: 7")
+        print(":Manual group: Virtualization Support")
+        print("")
+        print("DESCRIPTION")
+        print("===========")
+        print("List of %s key code names, with corresponding key code values" 
% namemap)
+        print("")
+
+    def _array_start_code_doc(self, title, subtitle, codemap, namemap):
+        print("=" * len(title))
+        print(title)
+        print("=" * len(title))
+        print("")
+        print("-" * len(subtitle))
+        print(subtitle)
+        print("-" * len(subtitle))
+        print("")
+        print(":Manual section: 7")
+        print(":Manual group: Virtualization Support")
+        print("")
+        print("DESCRIPTION")
+        print("===========")
+        print("List of %s key code values, with corresponding %s key code 
names" % (codemap, namemap))
+        print("")
+
+    def _array_end(self):
+        print("")
+
+    def _array_name_entry(self, value, name):
+        print("* %s" % name)
+        print("")
+        print("  Key value %d (0x%x)" % (value, value))
+        print("")
+
+    def _array_code_entry(self, value, name):
+        print("* %d (0x%x)" % (value, value))
+        print("")
+        print("  Key name %s" % name)
+        print("")
+
 SRC_GENERATORS = {
     "stdc": StdCLanguageGenerator(),
     "stdc-header": StdCHeaderLanguageGenerator(),
@@ -923,19 +1032,21 @@
     "python3": PythonLanguageGenerator(),
     "perl": PerlLanguageGenerator(),
     "js": JavaScriptLanguageGenerator(),
+    "rust": RustLanguageGenerator(),
 }
 DOC_GENERATORS = {
     "pod": PodLanguageGenerator(),
+    "rst": RSTLanguageGenerator(),
 }
 
 def code_map(args):
     database = Database()
     database.load(args.keymaps)
 
-    cliargs = ["keymap-gen", "--lang=%s" % args.lang]
+    cliargs = ["keymap-gen", "code-map", "--lang=%s" % args.lang]
     if args.varname is not None:
         cliargs.append("--varname=%s" % args.varname)
-    cliargs.extend(["code-map", "keymaps.csv", args.frommapname, 
args.tomapname])
+    cliargs.extend(["keymaps.csv", args.frommapname, args.tomapname])
     SRC_GENERATORS[args.lang].generate_header(database, " ".join(cliargs))
 
     SRC_GENERATORS[args.lang].generate_code_map(args.varname, database, 
args.frommapname, args.tomapname)
@@ -944,10 +1055,10 @@
     database = Database()
     database.load(args.keymaps)
 
-    cliargs = ["keymap-gen", "--lang=%s" % args.lang]
+    cliargs = ["keymap-gen", "code-table", "--lang=%s" % args.lang]
     if args.varname is not None:
         cliargs.append("--varname=%s" % args.varname)
-    cliargs.extend(["code-table", "keymaps.csv", args.mapname])
+    cliargs.extend(["keymaps.csv", args.mapname])
     SRC_GENERATORS[args.lang].generate_header(database, " ".join(cliargs))
 
     SRC_GENERATORS[args.lang].generate_code_table(args.varname, database, 
args.mapname)
@@ -956,10 +1067,10 @@
     database = Database()
     database.load(args.keymaps)
 
-    cliargs = ["keymap-gen", "--lang=%s" % args.lang]
+    cliargs = ["keymap-gen", "name-map", "--lang=%s" % args.lang]
     if args.varname is not None:
         cliargs.append("--varname=%s" % args.varname)
-    cliargs.extend(["name-map", "keymaps.csv", args.frommapname, 
args.tomapname])
+    cliargs.extend(["keymaps.csv", args.frommapname, args.tomapname])
     SRC_GENERATORS[args.lang].generate_header(database, " ".join(cliargs))
 
     SRC_GENERATORS[args.lang].generate_name_map(args.varname, database, 
args.frommapname, args.tomapname)
@@ -969,10 +1080,10 @@
     database.load(args.keymaps)
 
 
-    cliargs = ["keymap-gen", "--lang=%s" % args.lang]
+    cliargs = ["keymap-gen", "name-table", "--lang=%s" % args.lang]
     if args.varname is not None:
         cliargs.append("--varname=%s" % args.varname)
-    cliargs.extend(["name-table", "keymaps.csv", args.mapname])
+    cliargs.extend(["keymaps.csv", args.mapname])
     SRC_GENERATORS[args.lang].generate_header(database, " ".join(cliargs))
 
     SRC_GENERATORS[args.lang].generate_name_table(args.varname, database, 
args.mapname)
@@ -982,26 +1093,30 @@
     database.load(args.keymaps)
 
 
-    cliargs = ["keymap-gen", "--lang=%s" % args.lang]
-    if args.varname is not None:
-        cliargs.append("--varname=%s" % args.varname)
-    cliargs.extend(["code-docs", "keymaps.csv", args.mapname])
+    cliargs = ["keymap-gen", "code-docs", "--lang=%s" % args.lang]
+    if args.title is not None:
+        cliargs.append("--title=%s" % args.title)
+    if args.subtitle is not None:
+        cliargs.append("--subtitle=%s" % args.subtitle)
+    cliargs.extend(["keymaps.csv", args.mapname])
     DOC_GENERATORS[args.lang].generate_header(database, " ".join(cliargs))
 
-    DOC_GENERATORS[args.lang].generate_code_docs(args.varname, database, 
args.mapname)
+    DOC_GENERATORS[args.lang].generate_code_docs(args.title, args.subtitle, 
database, args.mapname)
 
 def name_docs(args):
     database = Database()
     database.load(args.keymaps)
 
 
-    cliargs = ["keymap-gen", "--lang=%s" % args.lang]
-    if args.varname is not None:
-        cliargs.append("--varname=%s" % args.varname)
-    cliargs.extend(["name-docs", "keymaps.csv", args.mapname])
+    cliargs = ["keymap-gen", "name-docs", "--lang=%s" % args.lang]
+    if args.title is not None:
+        cliargs.append("--title=%s" % args.title)
+    if args.subtitle is not None:
+        cliargs.append("--subtitle=%s" % args.subtitle)
+    cliargs.extend(["keymaps.csv", args.mapname])
     DOC_GENERATORS[args.lang].generate_header(database, " ".join(cliargs))
 
-    DOC_GENERATORS[args.lang].generate_name_docs(args.varname, database, 
args.mapname)
+    DOC_GENERATORS[args.lang].generate_name_docs(args.title, args.subtitle, 
database, args.mapname)
 
 def usage():
     print ("Please select a command:")
@@ -1011,43 +1126,62 @@
 def main():
     parser = argparse.ArgumentParser()
 
-    parser.add_argument("--lang", default="stdc",
-                        help="Output language, (src=%s, doc=%s)" % (
-                            ",".join(SRC_GENERATORS.keys()),
-                            ",".join(DOC_GENERATORS.keys())))
-    parser.add_argument("--varname", default=None,
-                        help="Data variable name")
-
     subparsers = parser.add_subparsers(help="sub-command help")
 
     codemapparser = subparsers.add_parser("code-map", help="Generate a mapping 
between code tables")
+    codemapparser.add_argument("--varname", default=None, help="Data variable 
name")
+    codemapparser.add_argument("--lang", default="stdc",
+                        help="Output language (%s)" % (
+                            ",".join(SRC_GENERATORS.keys())))
     codemapparser.add_argument("keymaps", help="Path to keymap CSV data file")
     codemapparser.add_argument("frommapname", help="Source code table name")
     codemapparser.add_argument("tomapname", help="Target code table name")
     codemapparser.set_defaults(func=code_map)
 
     codetableparser = subparsers.add_parser("code-table", help="Generate a 
flat code table")
+    codetableparser.add_argument("--lang", default="stdc",
+                        help="Output language (%s)" % (
+                            ",".join(SRC_GENERATORS.keys())))
+    codetableparser.add_argument("--varname", default=None, help="Data 
variable name")
     codetableparser.add_argument("keymaps", help="Path to keymap CSV data 
file")
     codetableparser.add_argument("mapname", help="Code table name")
     codetableparser.set_defaults(func=code_table)
 
     namemapparser = subparsers.add_parser("name-map", help="Generate a mapping 
to names")
+    namemapparser.add_argument("--lang", default="stdc",
+                        help="Output language (%s)" % (
+                            ",".join(SRC_GENERATORS.keys())))
+    namemapparser.add_argument("--varname", default=None, help="Data variable 
name")
     namemapparser.add_argument("keymaps", help="Path to keymap CSV data file")
     namemapparser.add_argument("frommapname", help="Source code table name")
     namemapparser.add_argument("tomapname", help="Target name table name")
     namemapparser.set_defaults(func=name_map)
 
     nametableparser = subparsers.add_parser("name-table", help="Generate a 
flat name table")
+    nametableparser.add_argument("--lang", default="stdc",
+                        help="Output language, (%s)" % (
+                            ",".join(SRC_GENERATORS.keys())))
+    nametableparser.add_argument("--varname", default=None, help="Data 
variable name")
     nametableparser.add_argument("keymaps", help="Path to keymap CSV data 
file")
     nametableparser.add_argument("mapname", help="Name table name")
     nametableparser.set_defaults(func=name_table)
 
     codedocsparser = subparsers.add_parser("code-docs", help="Generate code 
documentation")
+    codedocsparser.add_argument("--lang", default="pod",
+                        help="Output language (%s)" % (
+                            ",".join(DOC_GENERATORS.keys())))
+    codedocsparser.add_argument("--title", default=None, help="Document title")
+    codedocsparser.add_argument("--subtitle", default=None, help="Document 
subtitle")
     codedocsparser.add_argument("keymaps", help="Path to keymap CSV data file")
     codedocsparser.add_argument("mapname", help="Code table name")
     codedocsparser.set_defaults(func=code_docs)
 
     namedocsparser = subparsers.add_parser("name-docs", help="Generate name 
documentation")
+    namedocsparser.add_argument("--lang", default="pod",
+                        help="Output language (%s)" % (
+                            ",".join(DOC_GENERATORS.keys())))
+    namedocsparser.add_argument("--title", default=None, help="Document title")
+    namedocsparser.add_argument("--subtitle", default=None, help="Document 
subtitle")
     namedocsparser.add_argument("keymaps", help="Path to keymap CSV data file")
     namedocsparser.add_argument("mapname", help="Name table name")
     namedocsparser.set_defaults(func=name_docs)

Reply via email to