Replace eekboard-xml and eekboard-inscript with eekxml and mim2remap.

This commit is contained in:
Daiki Ueno
2011-08-23 14:14:30 +09:00
parent 360da8a3c9
commit 158542ec0a
15 changed files with 212 additions and 619 deletions

73
examples/eekxml/mim2remap Executable file
View File

@ -0,0 +1,73 @@
#!/usr/bin/env python
# Copyright (C) 2011 Daiki Ueno <ueno@unixuser.org>
# Copyright (C) 2011 Red Hat, Inc.
# 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 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, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 USA
import json
import gtk.gdk
import sys, os.path, re
class MapFile(object):
MAPENTRY_PATTERN = re.compile(r'\A\s*\((?:\((.*?)\)|"(.*?)")\s*(?:"(.*?)"|\?(.*?))\)')
def __init__(self, path):
self.__dict = dict()
with open(path, 'r') as fp:
for line in fp:
match = re.match(self.MAPENTRY_PATTERN, line)
if match:
if match.group(1):
keyseq = re.sub(r'\\(.)', r'\1', match.group(1))
# should check G-* and A-*
else:
keyseq = re.sub(r'\\(.)', r'\1', match.group(2))
# combination of keys is not supported
if len(keyseq) > 1:
continue
try:
keyval = gtk.gdk.unicode_to_keyval(ord(keyseq))
keyseq = gtk.gdk.keyval_name(keyval)
except:
pass
if match.group(3):
insert = match.group(3).decode('UTF-8')
else:
insert = match.group(4).decode('UTF-8')
replace = {}
if len(insert) > 1:
replace = { 'name': insert,
'label': insert }
else:
try:
keyval = gtk.gdk.unicode_to_keyval(ord(insert))
name = gtk.gdk.keyval_name(keyval)
replace = { 'name': name,
'label': insert,
'xkeysym': keyval }
except:
replace = { 'name': insert,
'label': insert }
self.__dict[keyseq] = replace
def __str__(self):
return json.dumps(self.__dict)
if __name__ == "__main__":
mapfile = MapFile(sys.argv[1])
print mapfile