Remove eekxml.
This commit is contained in:
@ -267,7 +267,6 @@ data/icons/scalable/Makefile
|
|||||||
data/themes/Makefile
|
data/themes/Makefile
|
||||||
data/keyboards/Makefile
|
data/keyboards/Makefile
|
||||||
examples/Makefile
|
examples/Makefile
|
||||||
examples/eekxml/Makefile
|
|
||||||
examples/simple-client/Makefile
|
examples/simple-client/Makefile
|
||||||
eek/eek-${EEK_API_VERSION}.pc
|
eek/eek-${EEK_API_VERSION}.pc
|
||||||
eek/eek-gtk-${EEK_API_VERSION}.pc
|
eek/eek-gtk-${EEK_API_VERSION}.pc
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
SUBDIRS = eekxml simple-client
|
SUBDIRS = simple-client
|
||||||
|
|||||||
@ -1,6 +0,0 @@
|
|||||||
bin_SCRIPTS = eekxml
|
|
||||||
EXTRA_DIST = eekxml.in mim2remap.el
|
|
||||||
DISTCLEANFILES = eekxml
|
|
||||||
|
|
||||||
eekxml: eekxml.in
|
|
||||||
$(AM_V_GEN) sed '1s!@''PYTHON@!'$(PYTHON)'!' $< > $@
|
|
||||||
@ -1,128 +0,0 @@
|
|||||||
#!@PYTHON@
|
|
||||||
# -*- python -*-
|
|
||||||
# Copyright (C) 2011 Daiki Ueno <ueno@unixuser.org>
|
|
||||||
# Copyright (C) 2011 Red Hat, Inc.
|
|
||||||
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
|
|
||||||
# This program 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
|
|
||||||
# General Public License for more details.
|
|
||||||
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see
|
|
||||||
# <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import json
|
|
||||||
from gi.repository import GLib, Gtk, Eek, EekXkl, EekGtk, Gio
|
|
||||||
|
|
||||||
DEFAULT_WIDTH = 640
|
|
||||||
DEFAULT_HEIGHT = 480
|
|
||||||
|
|
||||||
# XXX: level3 shift is not supported yet in remap files
|
|
||||||
def remap(keyboard, mapping):
|
|
||||||
def __each_key(element, data):
|
|
||||||
matrix = element.get_symbol_matrix()
|
|
||||||
for level in xrange(matrix.num_levels):
|
|
||||||
symbol = matrix.get_symbol(0, level)
|
|
||||||
if isinstance(symbol, Eek.Keysym):
|
|
||||||
mapped = data.get(symbol.get_name(), None)
|
|
||||||
if mapped:
|
|
||||||
if mapped.has_key('xkeysym'):
|
|
||||||
replace = Eek.Keysym.new(mapped['xkeysym'])
|
|
||||||
elif mapped.has_key('text'):
|
|
||||||
replace = Eek.Text.new(mapped['text'])
|
|
||||||
else:
|
|
||||||
replace = Eek.Symbol.new(mapped['name'])
|
|
||||||
replace.set_category(Eek.SymbolCategory.LETTER)
|
|
||||||
replace.set_name(symbol.get_name())
|
|
||||||
if mapped.has_key('label'):
|
|
||||||
replace.set_label(mapped['label'])
|
|
||||||
if mapped.has_key('category'):
|
|
||||||
cat = Eek.symbol_category_from_name(mapped['category'])
|
|
||||||
replace.set_category(cat)
|
|
||||||
matrix.set_symbol(0, level, replace)
|
|
||||||
def __each_section(element, data):
|
|
||||||
element.foreach_child(__each_key, data)
|
|
||||||
keyboard.foreach_child(__each_section, mapping)
|
|
||||||
|
|
||||||
def create_keyboard(args):
|
|
||||||
if args.file:
|
|
||||||
_file = Gio.file_new_for_path(args.file)
|
|
||||||
layout = Eek.XmlLayout.new(_file.read(None))
|
|
||||||
else:
|
|
||||||
layout = EekXkl.Layout.new()
|
|
||||||
if args.model:
|
|
||||||
layout.set_model(args.model)
|
|
||||||
if args.layout:
|
|
||||||
layout.set_layouts(args.layout)
|
|
||||||
if args.variant:
|
|
||||||
layout.set_variants(args.variant)
|
|
||||||
if args.option:
|
|
||||||
layout.set_options(args.option)
|
|
||||||
|
|
||||||
keyboard = Eek.Keyboard.new(layout, DEFAULT_WIDTH, DEFAULT_HEIGHT)
|
|
||||||
if args.remap_file:
|
|
||||||
with open(args.remap_file) as remap_file:
|
|
||||||
mapping = json.load(remap_file)
|
|
||||||
remap(keyboard, mapping)
|
|
||||||
return keyboard
|
|
||||||
|
|
||||||
def show(args):
|
|
||||||
keyboard = create_keyboard(args)
|
|
||||||
keyboard.set_modifier_behavior(Eek.ModifierBehavior.LATCH)
|
|
||||||
widget = EekGtk.Keyboard.new(keyboard)
|
|
||||||
if args.theme:
|
|
||||||
theme = Eek.Theme.new(args.theme, None, None)
|
|
||||||
widget.set_theme(theme)
|
|
||||||
window = Gtk.Window.new(Gtk.WindowType.TOPLEVEL)
|
|
||||||
bounds = keyboard.get_bounds()
|
|
||||||
window.set_default_size(bounds.width, bounds.height)
|
|
||||||
window.connect('destroy', lambda *args: Gtk.main_quit())
|
|
||||||
window.add(widget)
|
|
||||||
window.show_all()
|
|
||||||
Gtk.main()
|
|
||||||
|
|
||||||
def dump(args):
|
|
||||||
keyboard = create_keyboard(args)
|
|
||||||
output = GLib.String()
|
|
||||||
keyboard.output(output, 0)
|
|
||||||
print output.str
|
|
||||||
|
|
||||||
# Add a simple function to print usage, for the 'help' command
|
|
||||||
def usage(args, parser):
|
|
||||||
parser.print_help()
|
|
||||||
|
|
||||||
def parse_cmdline():
|
|
||||||
parser = argparse.ArgumentParser(
|
|
||||||
description='manipulate XML files used by eekboard')
|
|
||||||
subparsers = parser.add_subparsers(help='sub-command help')
|
|
||||||
parser_help = subparsers.add_parser('help', help = 'show usage')
|
|
||||||
parser_help.set_defaults(command = lambda args: usage(args, parser=parser))
|
|
||||||
parser_common = subparsers.add_parser('common', add_help=False)
|
|
||||||
parser_common.add_argument('--model', help='specify XKB model')
|
|
||||||
parser_common.add_argument('--layout', help='specify XKB layout')
|
|
||||||
parser_common.add_argument('--variant', help='specify XKB variant')
|
|
||||||
parser_common.add_argument('--option', help='specify XKB option')
|
|
||||||
parser_common.add_argument('--file', help='specify XML layout file')
|
|
||||||
parser_common.add_argument('--remap-file', help='remap keysyms with the file')
|
|
||||||
parser_show = subparsers.add_parser('show',
|
|
||||||
help='show help',
|
|
||||||
parents=[parser_common])
|
|
||||||
parser_show.add_argument('--theme', help='use the theme file')
|
|
||||||
parser_show.add_argument('--group', help='switch to the given group')
|
|
||||||
parser_show.set_defaults(command = show)
|
|
||||||
parser_dump = subparsers.add_parser('dump',
|
|
||||||
help='dump help',
|
|
||||||
parents=[parser_common])
|
|
||||||
parser_dump.set_defaults(command = dump)
|
|
||||||
return parser.parse_args()
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
args = parse_cmdline()
|
|
||||||
args.command(args)
|
|
||||||
@ -1,174 +0,0 @@
|
|||||||
;; mim2remap.el -- generate eekxml remap file from m17n MIM file
|
|
||||||
;; Copyright (C) 2011 Daiki Ueno <ueno@unixuser.org>
|
|
||||||
;; Copyright (C) 2011 Red Hat, Inc.
|
|
||||||
|
|
||||||
;; This program is free software: you can redistribute it and/or modify
|
|
||||||
;; it under the terms of the GNU General Public License as published by
|
|
||||||
;; the Free Software Foundation, either version 3 of the License, or
|
|
||||||
;; (at your option) any later version.
|
|
||||||
|
|
||||||
;; This program 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
|
|
||||||
;; General Public License for more details.
|
|
||||||
|
|
||||||
;; You should have received a copy of the GNU General Public License
|
|
||||||
;; along with this program. If not, see
|
|
||||||
;; <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
;;; Commentary:
|
|
||||||
|
|
||||||
;; emacs -Q -batch -l mim2remap.el -f batch-mim2remap \
|
|
||||||
;; /usr/share/m17n/te-inscript.mim trans
|
|
||||||
|
|
||||||
;;; Code:
|
|
||||||
|
|
||||||
(require 'json)
|
|
||||||
|
|
||||||
(defconst mim2remap--char-to-keyname-alist
|
|
||||||
'((32 . "space")
|
|
||||||
(33 . "exclam")
|
|
||||||
(34 . "quotedbl")
|
|
||||||
(35 . "numbersign")
|
|
||||||
(36 . "dollar")
|
|
||||||
(37 . "percent")
|
|
||||||
(38 . "ampersand")
|
|
||||||
(39 . "apostrophe")
|
|
||||||
(40 . "parenleft")
|
|
||||||
(41 . "parenright")
|
|
||||||
(42 . "asterisk")
|
|
||||||
(43 . "plus")
|
|
||||||
(44 . "comma")
|
|
||||||
(45 . "minus")
|
|
||||||
(46 . "period")
|
|
||||||
(47 . "slash")
|
|
||||||
(48 . "0")
|
|
||||||
(49 . "1")
|
|
||||||
(50 . "2")
|
|
||||||
(51 . "3")
|
|
||||||
(52 . "4")
|
|
||||||
(53 . "5")
|
|
||||||
(54 . "6")
|
|
||||||
(55 . "7")
|
|
||||||
(56 . "8")
|
|
||||||
(57 . "9")
|
|
||||||
(58 . "colon")
|
|
||||||
(59 . "semicolon")
|
|
||||||
(60 . "less")
|
|
||||||
(61 . "equal")
|
|
||||||
(62 . "greater")
|
|
||||||
(63 . "question")
|
|
||||||
(64 . "at")
|
|
||||||
(65 . "A")
|
|
||||||
(66 . "B")
|
|
||||||
(67 . "C")
|
|
||||||
(68 . "D")
|
|
||||||
(69 . "E")
|
|
||||||
(70 . "F")
|
|
||||||
(71 . "G")
|
|
||||||
(72 . "H")
|
|
||||||
(73 . "I")
|
|
||||||
(74 . "J")
|
|
||||||
(75 . "K")
|
|
||||||
(76 . "L")
|
|
||||||
(77 . "M")
|
|
||||||
(78 . "N")
|
|
||||||
(79 . "O")
|
|
||||||
(80 . "P")
|
|
||||||
(81 . "Q")
|
|
||||||
(82 . "R")
|
|
||||||
(83 . "S")
|
|
||||||
(84 . "T")
|
|
||||||
(85 . "U")
|
|
||||||
(86 . "V")
|
|
||||||
(87 . "W")
|
|
||||||
(88 . "X")
|
|
||||||
(89 . "Y")
|
|
||||||
(90 . "Z")
|
|
||||||
(91 . "bracketleft")
|
|
||||||
(92 . "backslash")
|
|
||||||
(93 . "bracketright")
|
|
||||||
(94 . "asciicircum")
|
|
||||||
(95 . "underscore")
|
|
||||||
(96 . "grave")
|
|
||||||
(97 . "a")
|
|
||||||
(98 . "b")
|
|
||||||
(99 . "c")
|
|
||||||
(100 . "d")
|
|
||||||
(101 . "e")
|
|
||||||
(102 . "f")
|
|
||||||
(103 . "g")
|
|
||||||
(104 . "h")
|
|
||||||
(105 . "i")
|
|
||||||
(106 . "j")
|
|
||||||
(107 . "k")
|
|
||||||
(108 . "l")
|
|
||||||
(109 . "m")
|
|
||||||
(110 . "n")
|
|
||||||
(111 . "o")
|
|
||||||
(112 . "p")
|
|
||||||
(113 . "q")
|
|
||||||
(114 . "r")
|
|
||||||
(115 . "s")
|
|
||||||
(116 . "t")
|
|
||||||
(117 . "u")
|
|
||||||
(118 . "v")
|
|
||||||
(119 . "w")
|
|
||||||
(120 . "x")
|
|
||||||
(121 . "y")
|
|
||||||
(122 . "z")
|
|
||||||
(123 . "braceleft")
|
|
||||||
(124 . "bar")
|
|
||||||
(125 . "braceright")
|
|
||||||
(126 . "asciitilde")))
|
|
||||||
|
|
||||||
(defun mim2remap--char-to-keyname (char)
|
|
||||||
(let ((entry (assq char mim2remap--char-to-keyname-alist)))
|
|
||||||
(if entry
|
|
||||||
(cdr entry))))
|
|
||||||
|
|
||||||
(defun mim2remap (file map)
|
|
||||||
(with-current-buffer (find-file-noselect file)
|
|
||||||
(let (sexp)
|
|
||||||
(goto-char (point-min))
|
|
||||||
(while (and (null sexp) (not (eobp)))
|
|
||||||
(setq sexp (read (current-buffer)))
|
|
||||||
(if (eq (car sexp) 'map)
|
|
||||||
(setq sexp (cdr sexp))
|
|
||||||
(setq sexp nil)))
|
|
||||||
(if sexp
|
|
||||||
(setq sexp (assq map sexp)))
|
|
||||||
(unless sexp
|
|
||||||
(error "No map named %S in %s" map file))
|
|
||||||
(json-encode
|
|
||||||
(mapcar
|
|
||||||
(lambda (entry)
|
|
||||||
(let ((from (car entry))
|
|
||||||
(to (car (cdr entry))))
|
|
||||||
(cons (if (listp from)
|
|
||||||
(car from)
|
|
||||||
(or (mim2remap--char-to-keyname (aref from 0))
|
|
||||||
(error "No keyname for %c" (aref from 0))))
|
|
||||||
(list (cons :text (if (characterp to)
|
|
||||||
(char-to-string to)
|
|
||||||
(if (and (symbolp to)
|
|
||||||
(string-match
|
|
||||||
"\\`0x\\([0-9A-Fa-f]+\\)"
|
|
||||||
(symbol-name to)))
|
|
||||||
(char-to-string (string-to-number
|
|
||||||
(match-string
|
|
||||||
1
|
|
||||||
(symbol-name to))
|
|
||||||
16))
|
|
||||||
to)))
|
|
||||||
(cons :category 'letter)))))
|
|
||||||
(cdr sexp))))))
|
|
||||||
|
|
||||||
(defun batch-mim2remap ()
|
|
||||||
(interactive)
|
|
||||||
(let ((file (car command-line-args-left))
|
|
||||||
(map (car (cdr command-line-args-left))))
|
|
||||||
(princ (mim2remap file (intern map)))
|
|
||||||
(setq command-line-args-left (nthcdr 2 command-line-args-left))))
|
|
||||||
|
|
||||||
;;; mim2remap.el ends here
|
|
||||||
Reference in New Issue
Block a user