diff options
author | fujiwarat <takao.fujiwara1@gmail.com> | 2016-01-15 11:23:56 +0900 |
---|---|---|
committer | fujiwarat <takao.fujiwara1@gmail.com> | 2016-01-15 11:23:56 +0900 |
commit | 3af58fae1710ed3baf800c59da1ab918089c2a9b (patch) | |
tree | 3fa09be108369190dc6f1a6b460d2764769c179a | |
parent | 49f3a73bd658c39311afcbf2dcc0acf9faa59ea9 (diff) | |
download | ibus-3af58fae1710ed3baf800c59da1ab918089c2a9b.tar.gz |
engine: Change language code from ISO 639-2 to ISO 639-1 in simple.xml
BUG=https://github.com/ibus/ibus/issues/1834
Review URL: https://codereview.appspot.com/283040043
-rw-r--r-- | engine/Makefile.am | 5 | ||||
-rwxr-xr-x | engine/iso639converter.py | 197 | ||||
-rw-r--r-- | engine/simple.xml.in | 122 | ||||
-rw-r--r-- | ui/gtk3/switcher.vala | 9 |
4 files changed, 266 insertions, 67 deletions
diff --git a/engine/Makefile.am b/engine/Makefile.am index 19fb6b0a..86f0e2b8 100644 --- a/engine/Makefile.am +++ b/engine/Makefile.am @@ -2,8 +2,8 @@ # # ibus - The Input Bus # -# Copyright (c) 2010-2015, Google Inc. All rights reserved. -# Copyright (c) 2007-2015 Peng Huang <shawn.p.huang@gmail.com> +# Copyright (c) 2010-2016, Google Inc. All rights reserved. +# Copyright (c) 2007-2016 Peng Huang <shawn.p.huang@gmail.com> # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -83,6 +83,7 @@ CLEANFILES = \ $(NULL) EXTRA_DIST = \ + iso639converter.py \ simple.xml.in \ $(NULL) diff --git a/engine/iso639converter.py b/engine/iso639converter.py new file mode 100755 index 00000000..e1e1a917 --- /dev/null +++ b/engine/iso639converter.py @@ -0,0 +1,197 @@ +#!/usr/bin/python +# vim:set fileencoding=utf-8 et sts=4 sw=4: +# +# ibus - Intelligent Input Bus for Linux / Unix OS +# +# Copyright © 2016 Takao Fujiwara <takao.fujiwara1@gmail.com> +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see <http://www.gnu.org/licenses/>. + + +# This script converts ISO 639-2 of three characters to ISO 639-1 of two +# characters in simple.xml. +# E.g. "eng" to "en" + + +from xml.sax import make_parser as sax_make_parser +from xml.sax.handler import feature_namespaces as sax_feature_namespaces +from xml.sax.saxutils import XMLFilterBase, XMLGenerator +from xml.sax._exceptions import SAXParseException + +import codecs +import getopt +import io +import os +import sys + +INSTALLED_SIMPLE_XML = '/usr/share/ibus/component/simple.xml' +PY3K = sys.version_info >= (3, 0) + +if PY3K: + from io import StringIO +else: + # io.StringIO does not work with XMLGenerator + from cStringIO import StringIO + # iso_639.xml includes UTF-8 + reload(sys) + sys.setdefaultencoding('utf-8') + + +def usage(prgname): + print('''\ +Usage: + %s [OPTION...] + +Options: + -h, --help Show this message + -i, --input=SIMPLE_XML Load SIMPLE_XML file (default is: + %s) + -o, --output=FILE Output FILE (default is stdout) +''' % (prgname, INSTALLED_SIMPLE_XML)) + + +class ISO639XML(XMLFilterBase): + def __init__(self, parser=None): + self.__code2to1 = {} + self.__codetoname = {} + XMLFilterBase.__init__(self, parser) + def startElement(self, name, attrs): + if name != 'iso_639_entry': + return + n = attrs.get('name') + iso639_1 = attrs.get('iso_639_1_code') + iso639_2b = attrs.get('iso_639_2B_code') + iso639_2t = attrs.get('iso_639_2T_code') + if iso639_1 != None: + self.__codetoname[iso639_1] = n + if iso639_2b != None: + self.__code2to1[iso639_2b] = iso639_1 + self.__codetoname[iso639_2b] = n + if iso639_2t != None and iso639_2b != iso639_2t: + self.__code2to1[iso639_2t] = iso639_1 + self.__codetoname[iso639_2t] = n + def code2to1(self, iso639_2): + try: + return self.__code2to1[iso639_2] + except KeyError: + return None + + +class IBusComponentXML(XMLFilterBase): + def __init__(self, parser=None, downstream=None, iso639=None): + XMLFilterBase.__init__(self, parser) + self.__downstream = downstream + self.__iso639 = iso639 + self.__is_language = False + def startDocument(self): + if self.__downstream: + self.__downstream.startDocument() + def endDocument(self): + if self.__downstream: + self.__downstream.endDocument() + def startElement(self, name, attrs): + if name == 'language': + self.__is_language = True + if self.__downstream: + self.__downstream.startElement(name, attrs) + def endElement(self, name): + if name == 'language': + self.__is_language = False + if self.__downstream: + self.__downstream.endElement(name) + def characters(self, text): + if self.__is_language: + if self.__iso639: + iso639_1 = self.__iso639.code2to1(text) + if iso639_1 != None: + text = iso639_1 + if self.__downstream: + self.__downstream.characters(text) + + +class ConvertEngineXML(): + def __init__(self, path, iso639=None): + self.__path = path + self.__iso639 = iso639 + + self.__result = StringIO() + downstream = XMLGenerator(self.__result, 'utf-8') + self.__load(downstream) + + def __load(self, downstream=None): + parser = sax_make_parser() + parser.setFeature(sax_feature_namespaces, 0) + self.__handler = IBusComponentXML(parser, downstream, self.__iso639) + parser.setContentHandler(self.__handler) + f = codecs.open(self.__path, 'r', encoding='utf-8') + try: + parser.parse(f) + except SAXParseException: + print('Error: Invalid file format: %s' % path) + finally: + f.close() + def write(self, output=None): + if output != None: + od = codecs.open(output, 'w', encoding='utf-8') + else: + if PY3K: + od = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') + else: + od = codecs.getwriter('utf-8')(sys.stdout) + contents = self.__result.getvalue() + od.write(contents) + + +def parse_iso639(path): + f = codecs.open(path, 'r', encoding='utf-8') + parser = sax_make_parser() + parser.setFeature(sax_feature_namespaces, 0) + handler = ISO639XML(parser) + parser.setContentHandler(handler) + try: + parser.parse(f) + except SAXParseException: + print('Error: Invalid file format: %s' % path) + finally: + f.close() + return handler + + +if __name__ == '__main__': + prgname = os.path.basename(sys.argv[0]) + try: + opts, args = getopt.getopt(sys.argv[1:], + 'hi:o:', + ['help', 'input=', 'output=']) + except getopt.GetoptError as err: + print(err) + usage(prgname) + sys.exit(2) + if len(args) > 0: + usage(prgname) + sys.exit(2) + input = INSTALLED_SIMPLE_XML + output = None + for opt, arg in opts: + if opt in ('-h', '--help'): + usage(prgname) + sys.exit() + elif opt in ('-i', '--input'): + input = arg + elif opt in ('-o', '--output'): + output = arg + + iso639 = parse_iso639('/usr/share/xml/iso-codes/iso_639.xml') + xml = ConvertEngineXML(input, iso639) + xml.write(output) diff --git a/engine/simple.xml.in b/engine/simple.xml.in index c0a7a10b..b3996807 100644 --- a/engine/simple.xml.in +++ b/engine/simple.xml.in @@ -11,7 +11,7 @@ <engines> <engine> <name>xkb:us::eng</name> - <language>eng</language> + <language>en</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>us</layout> @@ -22,7 +22,7 @@ </engine> <engine> <name>xkb:us:intl:eng</name> - <language>eng</language> + <language>en</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>us</layout> @@ -34,7 +34,7 @@ </engine> <engine> <name>xkb:us:colemak:eng</name> - <language>eng</language> + <language>en</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>us</layout> @@ -46,7 +46,7 @@ </engine> <engine> <name>xkb:us:dvorak:eng</name> - <language>eng</language> + <language>en</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>us</layout> @@ -58,7 +58,7 @@ </engine> <engine> <name>xkb:us:altgr-intl:eng</name> - <language>eng</language> + <language>en</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>us</layout> @@ -70,7 +70,7 @@ </engine> <engine> <name>xkb:ara::ara</name> - <language>ara</language> + <language>ar</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>ara</layout> @@ -81,7 +81,7 @@ </engine> <engine> <name>xkb:be::ger</name> - <language>ger</language> + <language>de</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>be</layout> @@ -92,7 +92,7 @@ </engine> <engine> <name>xkb:be::nld</name> - <language>nld</language> + <language>nl</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>be</layout> @@ -103,7 +103,7 @@ </engine> <engine> <name>xkb:be::fra</name> - <language>fra</language> + <language>fr</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>be</layout> @@ -114,7 +114,7 @@ </engine> <engine> <name>xkb:br::por</name> - <language>por</language> + <language>pt</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>br</layout> @@ -125,7 +125,7 @@ </engine> <engine> <name>xkb:br:dvorak:por</name> - <language>por</language> + <language>pt</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>br</layout> @@ -137,7 +137,7 @@ </engine> <engine> <name>xkb:bg::bul</name> - <language>bul</language> + <language>bg</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>bg</layout> @@ -148,7 +148,7 @@ </engine> <engine> <name>xkb:bg:phonetic:bul</name> - <language>bul</language> + <language>bg</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>bg</layout> @@ -160,7 +160,7 @@ </engine> <engine> <name>xkb:ca::fra</name> - <language>fra</language> + <language>fr</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>ca</layout> @@ -171,7 +171,7 @@ </engine> <engine> <name>xkb:ca:eng:eng</name> - <language>eng</language> + <language>en</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>ca</layout> @@ -194,7 +194,7 @@ </engine> <engine> <name>xkb:cz::cze</name> - <language>cze</language> + <language>cs</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>cz</layout> @@ -205,7 +205,7 @@ </engine> <engine> <name>xkb:cz:qwerty:cze</name> - <language>cze</language> + <language>cs</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>cz</layout> @@ -217,7 +217,7 @@ </engine> <engine> <name>xkb:dk::dan</name> - <language>dan</language> + <language>da</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>dk</layout> @@ -228,7 +228,7 @@ </engine> <engine> <name>xkb:ee::est</name> - <language>est</language> + <language>et</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>ee</layout> @@ -239,7 +239,7 @@ </engine> <engine> <name>xkb:fi::fin</name> - <language>fin</language> + <language>fi</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>fi</layout> @@ -250,7 +250,7 @@ </engine> <engine> <name>xkb:fr::fra</name> - <language>fra</language> + <language>fr</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>fr</layout> @@ -261,7 +261,7 @@ </engine> <engine> <name>xkb:fr:oss:fra</name> - <language>fra</language> + <language>fr</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>fr</layout> @@ -273,7 +273,7 @@ </engine> <engine> <name>xkb:fr:bepo:fra</name> - <language>fra</language> + <language>fr</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>fr</layout> @@ -285,7 +285,7 @@ </engine> <engine> <name>xkb:fr:dvorak:fra</name> - <language>fra</language> + <language>fr</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>fr</layout> @@ -297,7 +297,7 @@ </engine> <engine> <name>xkb:de::ger</name> - <language>ger</language> + <language>de</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>de</layout> @@ -308,7 +308,7 @@ </engine> <engine> <name>xkb:de:dvorak:ger</name> - <language>ger</language> + <language>de</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>de</layout> @@ -320,7 +320,7 @@ </engine> <engine> <name>xkb:de:neo:ger</name> - <language>ger</language> + <language>de</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>de</layout> @@ -332,7 +332,7 @@ </engine> <engine> <name>xkb:de:nodeadkeys:ger</name> - <language>ger</language> + <language>de</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>de</layout> @@ -344,7 +344,7 @@ </engine> <engine> <name>xkb:gr::gre</name> - <language>gre</language> + <language>el</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>gr</layout> @@ -355,7 +355,7 @@ </engine> <engine> <name>xkb:hu::hun</name> - <language>hun</language> + <language>hu</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>hu</layout> @@ -366,7 +366,7 @@ </engine> <engine> <name>xkb:il::heb</name> - <language>heb</language> + <language>he</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>il</layout> @@ -377,7 +377,7 @@ </engine> <engine> <name>xkb:it::ita</name> - <language>ita</language> + <language>it</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>it</layout> @@ -388,7 +388,7 @@ </engine> <engine> <name>xkb:jp::jpn</name> - <language>jpn</language> + <language>ja</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>jp</layout> @@ -399,7 +399,7 @@ </engine> <engine> <name>xkb:latam::spa</name> - <language>spa</language> + <language>es</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>latam</layout> @@ -410,7 +410,7 @@ </engine> <engine> <name>xkb:lt::lit</name> - <language>lit</language> + <language>lt</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>lt</layout> @@ -421,7 +421,7 @@ </engine> <engine> <name>xkb:lv:apostrophe:lav</name> - <language>lav</language> + <language>lv</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>lv</layout> @@ -433,7 +433,7 @@ </engine> <engine> <name>xkb:no::nor</name> - <language>nor</language> + <language>no</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>no</layout> @@ -444,7 +444,7 @@ </engine> <engine> <name>xkb:no:dvorak:nor</name> - <language>nor</language> + <language>no</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>no</layout> @@ -456,7 +456,7 @@ </engine> <engine> <name>xkb:pl::pol</name> - <language>pol</language> + <language>pl</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>pl</layout> @@ -467,7 +467,7 @@ </engine> <engine> <name>xkb:pl:dvorak:pol</name> - <language>pol</language> + <language>pl</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>pl</layout> @@ -479,7 +479,7 @@ </engine> <engine> <name>xkb:pl:qwertz:pol</name> - <language>pol</language> + <language>pl</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>pl</layout> @@ -491,7 +491,7 @@ </engine> <engine> <name>xkb:pt::por</name> - <language>por</language> + <language>pt</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>pt</layout> @@ -502,7 +502,7 @@ </engine> <engine> <name>xkb:ro::rum</name> - <language>rum</language> + <language>ro</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>ro</layout> @@ -513,7 +513,7 @@ </engine> <engine> <name>xkb:ru::rus</name> - <language>rus</language> + <language>ru</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>ru</layout> @@ -524,7 +524,7 @@ </engine> <engine> <name>xkb:ru:phonetic:rus</name> - <language>rus</language> + <language>ru</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>ru</layout> @@ -536,7 +536,7 @@ </engine> <engine> <name>xkb:rs::srp</name> - <language>srp</language> + <language>sr</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>rs</layout> @@ -547,7 +547,7 @@ </engine> <engine> <name>xkb:si::slv</name> - <language>slv</language> + <language>sl</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>si</layout> @@ -558,7 +558,7 @@ </engine> <engine> <name>xkb:sk::slo</name> - <language>slo</language> + <language>sk</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>sk</layout> @@ -569,7 +569,7 @@ </engine> <engine> <name>xkb:sk:qwerty:slo</name> - <language>slo</language> + <language>sk</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>sk</layout> @@ -581,7 +581,7 @@ </engine> <engine> <name>xkb:es::spa</name> - <language>spa</language> + <language>es</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>es</layout> @@ -592,7 +592,7 @@ </engine> <engine> <name>xkb:es:cat:cat</name> - <language>cat</language> + <language>ca</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>es</layout> @@ -604,7 +604,7 @@ </engine> <engine> <name>xkb:se::swe</name> - <language>swe</language> + <language>sv</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>se</layout> @@ -615,7 +615,7 @@ </engine> <engine> <name>xkb:se:dvorak:swe</name> - <language>swe</language> + <language>sv</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>se</layout> @@ -627,7 +627,7 @@ </engine> <engine> <name>xkb:se:svdvorak:swe</name> - <language>swe</language> + <language>sv</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>se</layout> @@ -639,7 +639,7 @@ </engine> <engine> <name>xkb:ch::ger</name> - <language>ger</language> + <language>de</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>ch</layout> @@ -650,7 +650,7 @@ </engine> <engine> <name>xkb:ch:fr:fra</name> - <language>fra</language> + <language>fr</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>ch</layout> @@ -662,7 +662,7 @@ </engine> <engine> <name>xkb:tr::tur</name> - <language>tur</language> + <language>tr</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>tr</layout> @@ -673,7 +673,7 @@ </engine> <engine> <name>xkb:ua::ukr</name> - <language>ukr</language> + <language>uk</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>ua</layout> @@ -684,7 +684,7 @@ </engine> <engine> <name>xkb:gb:extd:eng</name> - <language>eng</language> + <language>en</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>gb</layout> @@ -696,7 +696,7 @@ </engine> <engine> <name>xkb:gb:dvorak:eng</name> - <language>eng</language> + <language>en</language> <license>GPL</license> <author>Peng Huang <shawn.p.huang@gmail.com></author> <layout>gb</layout> @@ -707,4 +707,4 @@ <rank>1</rank> </engine> </engines> -</component> +</component>
\ No newline at end of file diff --git a/ui/gtk3/switcher.vala b/ui/gtk3/switcher.vala index 476b159f..666a5a9a 100644 --- a/ui/gtk3/switcher.vala +++ b/ui/gtk3/switcher.vala @@ -2,7 +2,7 @@ * * ibus - The Input Bus * - * Copyright(c) 2011-2014 Peng Huang <shawn.p.huang@gmail.com> + * Copyright(c) 2011-2016 Peng Huang <shawn.p.huang@gmail.com> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -434,17 +434,18 @@ class Switcher : Gtk.Window { return language; language = engine.get_language(); + int length = language.length; /* Maybe invalid layout */ - if (language.length < 2) + if (length < 2) return language; - language = language[0:2].up(); + language = language.up(); int index = 0; foreach (var saved_language in m_xkb_languages.get_values()) { - if (language == saved_language[0:2]) + if (language == saved_language[0:length]) index++; } |