summaryrefslogtreecommitdiffstats
path: root/plugins/src/inputmethods/simple/xcompose2q.rb
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/src/inputmethods/simple/xcompose2q.rb')
-rw-r--r--plugins/src/inputmethods/simple/xcompose2q.rb450
1 files changed, 450 insertions, 0 deletions
diff --git a/plugins/src/inputmethods/simple/xcompose2q.rb b/plugins/src/inputmethods/simple/xcompose2q.rb
new file mode 100644
index 0000000..af5bd70
--- /dev/null
+++ b/plugins/src/inputmethods/simple/xcompose2q.rb
@@ -0,0 +1,450 @@
+#!/usr/bin/env ruby
+
+# xcompose2q.rb: X Compose table to QSimpleInputContext table translator
+# Copyright (C) 2004 immodule for Qt Project. All rights reserved.
+#
+# This file is written to contribute to Trolltech AS under their own
+# licence. You may use this file under your Qt license. Following
+# description is copied from their original file headers. Contact
+# immodule-qt@freedesktop.org if any conditions of this licensing are
+# not clear to you.
+
+# This file may be distributed under the terms of the Q Public License
+# as defined by Trolltech AS of Norway and appearing in the file
+# LICENSE.QPL included in the packaging of this file.
+#
+# This file may be distributed and/or modified under the terms of the
+# GNU General Public License version 2 as published by the Free Software
+# Foundation and appearing in the file LICENSE.GPL included in the
+# packaging of this file.
+#
+# Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
+# licenses may use this file in accordance with the Qt Commercial License
+# Agreement provided with the Software.
+#
+# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+#
+# See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
+# information about Qt Commercial License Agreements.
+# See http://www.trolltech.com/qpl/ for QPL licensing information.
+# See http://www.trolltech.com/gpl/ for GPL licensing information.
+#
+# Contact info@trolltech.com if any conditions of this licensing are
+# not clear to you.
+
+
+# Usage:
+# xcompose2q.rb /usr/X11R6/lib/X11/locale/en_US.UTF-8/Compose
+
+require 'uconv'
+
+# translation table for lazy sorting
+raw2key = {
+ "0y1120" => "UNITIZE(Qt::Key_Multi_key)",
+ "0y1250" => "UNITIZE(Qt::Key_Dead_Grave)",
+ "0y1251" => "UNITIZE(Qt::Key_Dead_Acute)",
+ "0y1252" => "UNITIZE(Qt::Key_Dead_Circumflex)",
+ "0y1253" => "UNITIZE(Qt::Key_Dead_Tilde)",
+ "0y1254" => "UNITIZE(Qt::Key_Dead_Macron)",
+ "0y1255" => "UNITIZE(Qt::Key_Dead_Breve)",
+ "0y1256" => "UNITIZE(Qt::Key_Dead_Abovedot)",
+ "0y1257" => "UNITIZE(Qt::Key_Dead_Diaeresis)",
+ "0y1258" => "UNITIZE(Qt::Key_Dead_Abovering)",
+ "0y1259" => "UNITIZE(Qt::Key_Dead_Doubleacute)",
+ "0y125a" => "UNITIZE(Qt::Key_Dead_Caron)",
+ "0y125b" => "UNITIZE(Qt::Key_Dead_Cedilla)",
+ "0y125c" => "UNITIZE(Qt::Key_Dead_Ogonek)",
+ "0y125d" => "UNITIZE(Qt::Key_Dead_Iota)",
+ "0y125e" => "UNITIZE(Qt::Key_Dead_Voiced_Sound)",
+ "0y125f" => "UNITIZE(Qt::Key_Dead_Semivoiced_Sound)",
+ "0y1260" => "UNITIZE(Qt::Key_Dead_Belowdot)",
+ "0y1261" => "UNITIZE(Qt::Key_Dead_Hook)",
+ "0y1262" => "UNITIZE(Qt::Key_Dead_Horn)",
+}
+
+# X's KeySym to Unicode translation table. The unicode value is
+# extracted from
+# QETWidget::translateKeyEventInternal(). Translation for some
+# keys are not available
+x2q = {
+ "Multi_key" => "0y1120",
+ "dead_grave" => "0y1250",
+ "dead_acute" => "0y1251",
+ "dead_circumflex" => "0y1252",
+ "dead_tilde" => "0y1253",
+ "dead_macron" => "0y1254",
+ "dead_breve" => "0y1255",
+ "dead_abovedot" => "0y1256",
+ "dead_diaeresis" => "0y1257",
+ "dead_abovering" => "0y1258",
+ "dead_doubleacute" => "0y1259",
+ "dead_caron" => "0y125a",
+ "dead_cedilla" => "0y125b",
+ "dead_ogonek" => "0y125c",
+ "dead_iota" => "0y125d",
+ "dead_voiced_sound" => "0y125e",
+ "dead_semivoiced_sound" => "0y125f",
+ "dead_belowdot" => "0y1260",
+ "dead_hook" => "0y1261",
+ "dead_horn" => "0y1262",
+
+ "0" => "0x0030",
+ "1" => "0x0031",
+ "2" => "0x0032",
+ "3" => "0x0033",
+ "4" => "0x0034",
+ "5" => "0x0035",
+ "6" => "0x0036",
+ "7" => "0x0037",
+ "8" => "0x0038",
+ "9" => "0x0039",
+ "A" => "0x0041",
+ "AE" => "0x00c6",
+ "Abreve" => "0x0102",
+ "Acircumflex" => "0x00c2",
+ "Adiaeresis" => "0x00c4",
+ "Arabic_alef" => "0x0627",
+ "Arabic_waw" => "0x0648",
+ "Arabic_yeh" => "0x064a",
+ "Aring" => "0x00c5",
+ "B" => "0x0042",
+ "C" => "0x0043",
+ "Ccedilla" => "0x00c7",
+ "Cyrillic_A" => "0x0410",
+ "Cyrillic_CHE" => "0x0427",
+ "Cyrillic_E" => "0x042d",
+ "Cyrillic_GHE" => "0x0413",
+ "Cyrillic_I" => "0x0418",
+ "Cyrillic_IE" => "0x0415",
+ "Cyrillic_KA" => "0x041a",
+ "Cyrillic_O" => "0x041e",
+ "Cyrillic_U" => "0x0423",
+ "Cyrillic_YERU" => "0x042b",
+ "Cyrillic_ZE" => "0x0417",
+ "Cyrillic_ZHE" => "0x0416",
+ "Cyrillic_a" => "0x0430",
+ "Cyrillic_che" => "0x0447",
+ "Cyrillic_e" => "0x044d",
+ "Cyrillic_ghe" => "0x0433",
+ "Cyrillic_i" => "0x0438",
+ "Cyrillic_ie" => "0x0435",
+ "Cyrillic_ka" => "0x043a",
+ "Cyrillic_o" => "0x043e",
+ "Cyrillic_u" => "0x0443",
+ "Cyrillic_yeru" => "0x044b",
+ "Cyrillic_ze" => "0x0437",
+ "Cyrillic_zhe" => "0x0436",
+ "D" => "0x0044",
+ "E" => "0x0045",
+ "Ecircumflex" => "0x00ca",
+ "Emacron" => "0x0112",
+ "F" => "0x0046",
+ "G" => "0x0047",
+ "Greek_ALPHA" => "0x0391",
+ "Greek_EPSILON" => "0x0395",
+ "Greek_ETA" => "0x0397",
+ "Greek_IOTA" => "0x0399",
+ "Greek_OMEGA" => "0x03a9",
+ "Greek_OMICRON" => "0x039f",
+ "Greek_RHO" => "0x03a1",
+ "Greek_UPSILON" => "0x03a5",
+ "Greek_alpha" => "0x03b1",
+ "Greek_alphaaccent" => "0x03ac",
+ "Greek_epsilon" => "0x03b5",
+ "Greek_eta" => "0x03b7",
+ "Greek_etaaccent" => "0x03ae",
+ "Greek_iota" => "0x03b9",
+ "Greek_iotadieresis" => "0x03ca",
+ "Greek_omega" => "0x03c9",
+ "Greek_omegaaccent" => "0x03ce",
+ "Greek_omicron" => "0x03bf",
+ "Greek_rho" => "0x03c1",
+ "Greek_upsilon" => "0x03c5",
+ "Greek_upsilondieresis" => "0x03cb",
+ "H" => "0x0048",
+ "I" => "0x0049",
+ "Idiaeresis" => "0x00cf",
+ "J" => "0x004a",
+ "K" => "0x004b",
+ "KP_0" => "0x0000",
+ "KP_1" => "0x0000",
+ "KP_2" => "0x0000",
+ "KP_3" => "0x0000",
+ "KP_4" => "0x0000",
+ "KP_5" => "0x0000",
+ "KP_6" => "0x0000",
+ "KP_7" => "0x0000",
+ "KP_8" => "0x0000",
+ "KP_9" => "0x0000",
+ "KP_Add" => "0x0000",
+ "KP_Divide" => "0x0000",
+ "KP_Equal" => "0x0000",
+ "KP_Space" => "0x0000",
+ "L" => "0x004c",
+ "M" => "0x004d",
+ "N" => "0x004e",
+ "O" => "0x004f",
+ "Ocircumflex" => "0x00d4",
+ "Odiaeresis" => "0x00d6",
+ "Ohorn" => "0x0000",
+ "Omacron" => "0x014c",
+ "Ooblique" => "0x00d8",
+ "Otilde" => "0x00d5",
+ "P" => "0x0050",
+ "Q" => "0x0051",
+ "R" => "0x0052",
+ "S" => "0x0053",
+ "Sacute" => "0x015a",
+ "Scaron" => "0x0160",
+ "T" => "0x0054",
+ "U" => "0x0055",
+ "Udiaeresis" => "0x00dc",
+ "Uhorn" => "0x0000",
+ "Ukrainian_I" => "0x0406",
+ "Ukrainian_i" => "0x0456",
+ "Umacron" => "0x016a",
+ "Utilde" => "0x0168",
+ "V" => "0x0056",
+ "W" => "0x0057",
+ "X" => "0x0058",
+ "Y" => "0x0059",
+ "Z" => "0x005a",
+ "a" => "0x0061",
+ "abreve" => "0x0103",
+ "acircumflex" => "0x00e2",
+ "acute" => "0x00b4",
+ "adiaeresis" => "0x00e4",
+ "ae" => "0x00e6",
+ "ampersand" => "0x0026",
+ "apostrophe" => "0x0027",
+ "approximate" => "0x223c",
+ "aring" => "0x00e5",
+ "asciicircum" => "0x005e",
+ "asciitilde" => "0x007e",
+ "asterisk" => "0x002a",
+ "at" => "0x0040",
+ "b" => "0x0062",
+ "backslash" => "0x005c",
+ "bar" => "0x007c",
+ "braceleft" => "0x007b",
+ "braceright" => "0x007d",
+ "bracketleft" => "0x005b",
+ "bracketright" => "0x005d",
+ "c" => "0x0063",
+ "ccedilla" => "0x00e7",
+ "colon" => "0x003a",
+ "combining_acute" => "0x0000",
+ "combining_belowdot" => "0x0000",
+ "combining_grave" => "0x0000",
+ "combining_hook" => "0x0000",
+ "combining_tilde" => "0x0000",
+ "comma" => "0x002c",
+ "d" => "0x0064",
+ "diaeresis" => "0x00a8",
+ "dollar" => "0x0024",
+ "e" => "0x0065",
+ "ecircumflex" => "0x00ea",
+ "emacron" => "0x0113",
+ "equal" => "0x003d",
+ "exclam" => "0x0021",
+ "f" => "0x0066",
+ "g" => "0x0067",
+ "grave" => "0x0060",
+ "greater" => "0x003e",
+ "greaterthanequal" => "0x2265",
+ "h" => "0x0068",
+ "hebrew_aleph" => "0x05d0",
+ "hebrew_bet" => "0x05d1",
+ "hebrew_beth" => "0x05d1",
+ "hebrew_dalet" => "0x05d3",
+ "hebrew_daleth" => "0x05d3",
+ "hebrew_finalkaph" => "0x05da",
+ "hebrew_finalpe" => "0x05e3",
+ "hebrew_gimel" => "0x05d2",
+ "hebrew_gimmel" => "0x05d2",
+ "hebrew_he" => "0x05d4",
+ "hebrew_kaph" => "0x05db",
+ "hebrew_kuf" => "0x05e7",
+ "hebrew_lamed" => "0x05dc",
+ "hebrew_mem" => "0x05de",
+ "hebrew_nun" => "0x05e0",
+ "hebrew_pe" => "0x05e4",
+ "hebrew_qoph" => "0x05e7",
+ "hebrew_resh" => "0x05e8",
+ "hebrew_samech" => "0x05e1",
+ "hebrew_samekh" => "0x05e1",
+ "hebrew_shin" => "0x05e9",
+ "hebrew_taf" => "0x05ea",
+ "hebrew_taw" => "0x05ea",
+ "hebrew_tet" => "0x05d8",
+ "hebrew_teth" => "0x05d8",
+ "hebrew_waw" => "0x05d5",
+ "hebrew_yod" => "0x05d9",
+ "hebrew_zade" => "0x05e6",
+ "hebrew_zadi" => "0x05e6",
+ "hebrew_zain" => "0x05d6",
+ "hebrew_zayin" => "0x05d6",
+ "i" => "0x0069",
+ "identical" => "0x2261",
+ "idiaeresis" => "0x00ef",
+ "includedin" => "0x2282",
+ "includes" => "0x2283",
+ "j" => "0x006a",
+ "k" => "0x006b",
+ "kana_A" => "0x30a2",
+ "kana_CHI" => "0x30c1",
+ "kana_E" => "0x30a8",
+ "kana_FU" => "0x30d5",
+ "kana_HA" => "0x30cf",
+ "kana_HE" => "0x30d8",
+ "kana_HI" => "0x30d2",
+ "kana_HO" => "0x30db",
+ "kana_I" => "0x30a4",
+ "kana_KA" => "0x30ab",
+ "kana_KE" => "0x30b1",
+ "kana_KI" => "0x30ad",
+ "kana_KO" => "0x30b3",
+ "kana_KU" => "0x30af",
+ "kana_MA" => "0x30de",
+ "kana_ME" => "0x30e1",
+ "kana_MI" => "0x30df",
+ "kana_MO" => "0x30e2",
+ "kana_MU" => "0x30e0",
+ "kana_NA" => "0x30ca",
+ "kana_NE" => "0x30cd",
+ "kana_NI" => "0x30cb",
+ "kana_NO" => "0x30ce",
+ "kana_NU" => "0x30cc",
+ "kana_O" => "0x30aa",
+ "kana_RA" => "0x30e9",
+ "kana_RE" => "0x30ec",
+ "kana_RI" => "0x30ea",
+ "kana_RO" => "0x30ed",
+ "kana_RU" => "0x30eb",
+ "kana_SA" => "0x30b5",
+ "kana_SE" => "0x30bb",
+ "kana_SHI" => "0x30b7",
+ "kana_SO" => "0x30bd",
+ "kana_SU" => "0x30b9",
+ "kana_TA" => "0x30bf",
+ "kana_TE" => "0x30c6",
+ "kana_TO" => "0x30c8",
+ "kana_TSU" => "0x30c4",
+ "kana_U" => "0x30a6",
+ "kana_WA" => "0x30ef",
+ "kana_WO" => "0x30f2",
+ "kana_YA" => "0x30e4",
+ "kana_YO" => "0x30e8",
+ "kana_YU" => "0x30e6",
+ "l" => "0x006c",
+ "leftarrow" => "0x2190",
+ "leftcaret" => "0x003c",
+ "leftshoe" => "0x2282",
+ "less" => "0x003c",
+ "lessthanequal" => "0x2264",
+ "m" => "0x006d",
+ "macron" => "0x00af",
+ "minus" => "0x002d",
+ "n" => "0x006e",
+ "numbersign" => "0x0023",
+ "o" => "0x006f",
+ "ocircumflex" => "0x00f4",
+ "odiaeresis" => "0x00f6",
+ "ohorn" => "0x0000",
+ "omacron" => "0x014d",
+ "oslash" => "0x00f8",
+ "otilde" => "0x00f5",
+ "p" => "0x0070",
+ "parenleft" => "0x0028",
+ "parenright" => "0x0029",
+ "percent" => "0x0025",
+ "period" => "0x002e",
+ "plus" => "0x002b",
+ "q" => "0x0071",
+ "question" => "0x003f",
+ "quotedbl" => "0x0022",
+ "r" => "0x0072",
+ "rightarrow" => "0x2192",
+ "rightcaret" => "0x003e",
+ "rightshoe" => "0x2283",
+ "righttack" => "0x22a3",
+ "s" => "0x0073",
+ "sacute" => "0x015b",
+ "scaron" => "0x0161",
+ "semicolon" => "0x003b",
+ "slash" => "0x002f",
+ "space" => "0x0020",
+ "t" => "0x0074",
+ "u" => "0x0075",
+ "udiaeresis" => "0x00fc",
+ "uhorn" => "0x0000",
+ "umacron" => "0x016b",
+ "underbar" => "0x005f",
+ "underscore" => "0x005f",
+ "utilde" => "0x0169",
+ "v" => "0x0076",
+ "w" => "0x0077",
+ "x" => "0x0078",
+ "y" => "0x0079",
+ "z" => "0x007a",
+}
+
+readlines.collect {
+ |line|
+
+ broken = ""
+ seq = ["0", "0", "0", "0", "0", "0"]
+ index = 0
+ rhs = "0x0000"
+ comment = ""
+
+ case line
+ when /^(#|XCOMM)(.*)$/
+ comment = "// #{$2}\n"
+ rhs = :isCommentLine
+ when /^$/
+ comment = "\n"
+ rhs = :isCommentLine
+ else
+ line.scan(/<([^>]+)>/) {
+ |args|
+ keysym = args[0]
+ unit = x2q[keysym] || keysym.sub(/^U([\da-fA-F]{4,5})$/, "0x\\1")
+ if (/^(0x(0000|[\da-fA-F]{5,})|dead_space)$/ =~ unit)
+ broken = "// /* broken */"
+ end
+ seq[index] = unit
+ index += 1
+ }
+
+ Regexp.new(':\s+"(.+)"\s+(.+)$', nil, 'u') =~ line
+ rhs = Uconv::u8tou16($1).unpack('v')[0]
+ rhs = format("0x%04x", rhs)
+ comment = $2
+ end
+
+ entry = {
+ :broken => broken,
+ :seq => seq,
+ :rhs => rhs,
+ :comment => comment
+ }
+}.sort {
+ |entry_a, entry_b|
+
+ entry_a[:seq] <=> entry_b[:seq]
+}.each {
+ |entry|
+
+ broken, seq, rhs, comment = entry.values_at(:broken, :seq, :rhs, :comment)
+ if (rhs == :isCommentLine)
+ print comment
+ else
+ seq = seq.collect {
+ |unit|
+ raw2key[unit] || unit
+ }
+ print "#{broken} { {#{seq.join(", ")}}, #{rhs} }, // #{comment}\n"
+ end
+}