diff --git a/bindings/python/eekboard/__init__.py b/bindings/python/eekboard/__init__.py index 8ef0987a..26e859e2 100644 --- a/bindings/python/eekboard/__init__.py +++ b/bindings/python/eekboard/__init__.py @@ -25,6 +25,7 @@ Section = Eek.Section Key = Eek.Key Symbol = Eek.Symbol Keysym = Eek.Keysym +SymbolMatrix = Eek.SymbolMatrix MODIFIER_BEHAVIOR_NONE, \ MODIFIER_BEHAVIOR_LOCK, \ diff --git a/configure.ac b/configure.ac index f195e2cc..20c5c3f6 100644 --- a/configure.ac +++ b/configure.ac @@ -245,7 +245,9 @@ data/icons/32x32/Makefile data/icons/48x48/Makefile data/icons/scalable/Makefile data/themes/Makefile +data/keyboards/Makefile examples/Makefile +examples/eekboard-inscript/Makefile eek/eek-${EEK_API_VERSION}.pc eek/eek-clutter-${EEK_API_VERSION}.pc eek/eek-gtk-${EEK_API_VERSION}.pc diff --git a/data/Makefile.am b/data/Makefile.am index 82f73078..95dff22e 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -1 +1 @@ -SUBDIRS = icons themes +SUBDIRS = icons themes keyboards diff --git a/data/keyboards/Makefile.am b/data/keyboards/Makefile.am new file mode 100644 index 00000000..6c0ffc32 --- /dev/null +++ b/data/keyboards/Makefile.am @@ -0,0 +1,2 @@ +keyboarddir = $(pkgdatadir)/keyboards +dist_keyboard_DATA = us-qwerty.xml diff --git a/data/keyboards/us-qwerty.xml b/data/keyboards/us-qwerty.xml new file mode 100644 index 00000000..977e4f57 --- /dev/null +++ b/data/keyboards/us-qwerty.xml @@ -0,0 +1,707 @@ + + + 0.000000,0.000000,410.000000,190.000000 +
+ 10.000000,50.000000,390.000000,129.000000 + 0 + + 14 + 1 + + + 14 + 1 + + + 13 + 1 + + + 12 + 1 + + + 8 + 1 + + + 359.000000,104.000000,31.000000,24.000000 + outline10 + + Control_R + + + + 326.000000,104.000000,31.000000,24.000000 + outline10 + + Menu + + + + 294.000000,104.000000,31.000000,24.000000 + outline10 + + Super_R + + + + 261.000000,104.000000,31.000000,24.000000 + outline10 + + ISO_Level3_Shift + + + + 106.000000,104.000000,153.000000,24.000000 + outline11 + + space + + + + 73.000000,104.000000,31.000000,24.000000 + outline10 + + Alt_L + Meta_L + + + + 40.000000,104.000000,31.000000,24.000000 + outline10 + + Super_L + + + + 2.000000,104.000000,36.000000,24.000000 + outline9 + + Control_L + + + + 320.000000,78.000000,70.000000,24.000000 + outline8 + + Shift_R + + + + 294.000000,78.000000,24.000000,24.000000 + outline1 + + slash + question + + + + 268.000000,78.000000,24.000000,24.000000 + outline1 + + period + greater + + + + 242.000000,78.000000,24.000000,24.000000 + outline1 + + comma + less + + + + 216.000000,78.000000,24.000000,24.000000 + outline1 + + m + M + + + + 190.000000,78.000000,24.000000,24.000000 + outline1 + + n + N + + + + 164.000000,78.000000,24.000000,24.000000 + outline1 + + b + B + + + + 138.000000,78.000000,24.000000,24.000000 + outline1 + + v + V + + + + 113.000000,78.000000,24.000000,24.000000 + outline1 + + c + C + + + + 87.000000,78.000000,24.000000,24.000000 + outline1 + + x + X + + + + 61.000000,78.000000,24.000000,24.000000 + outline1 + + z + Z + + + + 2.000000,78.000000,57.000000,24.000000 + outline7 + + Shift_L + + + + 333.000000,53.000000,57.000000,24.000000 + outline6 + + Return + + + + 307.000000,53.000000,24.000000,24.000000 + outline1 + + quoteright + quotedbl + + + + 281.000000,53.000000,24.000000,24.000000 + outline1 + + semicolon + colon + + + + 256.000000,53.000000,24.000000,24.000000 + outline1 + + l + L + + + + 230.000000,53.000000,24.000000,24.000000 + outline1 + + k + K + + + + 204.000000,53.000000,24.000000,24.000000 + outline1 + + j + J + + + + 178.000000,53.000000,24.000000,24.000000 + outline1 + + h + H + + + + 152.000000,53.000000,24.000000,24.000000 + outline1 + + g + G + + + + 126.000000,53.000000,24.000000,24.000000 + outline1 + + f + F + + + + 100.000000,53.000000,24.000000,24.000000 + outline1 + + d + D + + + + 74.000000,53.000000,24.000000,24.000000 + outline1 + + s + S + + + + 49.000000,53.000000,24.000000,24.000000 + outline1 + + a + A + + + + 2.000000,53.000000,44.000000,24.000000 + outline5 + + Control_L + Control_L + + + + 352.000000,27.000000,38.000000,24.000000 + outline4 + + backslash + bar + + + + 326.000000,27.000000,24.000000,24.000000 + outline1 + + bracketright + braceright + + + + 300.000000,27.000000,24.000000,24.000000 + outline1 + + bracketleft + braceleft + + + + 275.000000,27.000000,24.000000,24.000000 + outline1 + + p + P + + + + 249.000000,27.000000,24.000000,24.000000 + outline1 + + o + O + + + + 223.000000,27.000000,24.000000,24.000000 + outline1 + + i + I + + + + 197.000000,27.000000,24.000000,24.000000 + outline1 + + u + U + + + + 171.000000,27.000000,24.000000,24.000000 + outline1 + + y + Y + + + + 145.000000,27.000000,24.000000,24.000000 + outline1 + + t + T + + + + 119.000000,27.000000,24.000000,24.000000 + outline1 + + r + R + + + + 93.000000,27.000000,24.000000,24.000000 + outline1 + + e + E + + + + 68.000000,27.000000,24.000000,24.000000 + outline1 + + w + W + + + + 42.000000,27.000000,24.000000,24.000000 + outline1 + + q + Q + + + + 2.000000,27.000000,38.000000,24.000000 + outline3 + + Tab + ISO_Left_Tab + + + + 339.000000,1.000000,51.000000,24.000000 + outline2 + + BackSpace + + + + 313.000000,1.000000,24.000000,24.000000 + outline1 + + equal + plus + + + + 287.000000,1.000000,24.000000,24.000000 + outline1 + + minus + underscore + + + + 261.000000,1.000000,24.000000,24.000000 + outline1 + + 0 + parenright + + + + 235.000000,1.000000,24.000000,24.000000 + outline1 + + 9 + parenleft + + + + 209.000000,1.000000,24.000000,24.000000 + outline1 + + 8 + asterisk + + + + 183.000000,1.000000,24.000000,24.000000 + outline1 + + 7 + ampersand + + + + 157.000000,1.000000,24.000000,24.000000 + outline1 + + 6 + asciicircum + + + + 132.000000,1.000000,24.000000,24.000000 + outline1 + + 5 + percent + + + + 106.000000,1.000000,24.000000,24.000000 + outline1 + + 4 + dollar + + + + 80.000000,1.000000,24.000000,24.000000 + outline1 + + 3 + numbersign + + + + 54.000000,1.000000,24.000000,24.000000 + outline1 + + 2 + at + + + + 28.000000,1.000000,24.000000,24.000000 + outline1 + + 1 + exclam + + + + 2.000000,1.000000,24.000000,24.000000 + outline1 + + quoteleft + asciitilde + + +
+
+ 10.000000,10.000000,410.000000,25.000000 + 0 + + 16 + 1 + + + 366.000000,1.000000,24.000000,24.000000 + outline1 + + F12 + (null) + + + + 340.000000,1.000000,24.000000,24.000000 + outline1 + + F11 + (null) + + + + 314.000000,1.000000,24.000000,24.000000 + outline1 + + F10 + (null) + + + + 288.000000,1.000000,24.000000,24.000000 + outline1 + + F9 + (null) + + + + 249.000000,1.000000,24.000000,24.000000 + outline1 + + F8 + (null) + + + + 223.000000,1.000000,24.000000,24.000000 + outline1 + + F7 + (null) + + + + 197.000000,1.000000,24.000000,24.000000 + outline1 + + F6 + (null) + + + + 171.000000,1.000000,24.000000,24.000000 + outline1 + + F5 + (null) + + + + 132.000000,1.000000,24.000000,24.000000 + outline1 + + F4 + (null) + + + + 106.000000,1.000000,24.000000,24.000000 + outline1 + + F3 + (null) + + + + 80.000000,1.000000,24.000000,24.000000 + outline1 + + F2 + (null) + + + + 54.000000,1.000000,24.000000,24.000000 + outline1 + + F1 + (null) + + + + 2.000000,1.000000,24.000000,24.000000 + outline1 + + Escape + + +
+ + 1.000000 + 0.000000,0.000000 + 24.000000,0.000000 + 24.000000,24.000000 + 0.000000,24.000000 + + + 1.000000 + 0.000000,0.000000 + 38.000000,0.000000 + 38.000000,24.000000 + 0.000000,24.000000 + + + 1.000000 + 0.000000,0.000000 + 38.000000,0.000000 + 38.000000,24.000000 + 0.000000,24.000000 + + + 1.000000 + 0.000000,0.000000 + 44.000000,0.000000 + 44.000000,24.000000 + 0.000000,24.000000 + + + 1.000000 + 0.000000,0.000000 + 57.000000,0.000000 + 57.000000,24.000000 + 0.000000,24.000000 + + + 1.000000 + 0.000000,0.000000 + 57.000000,0.000000 + 57.000000,24.000000 + 0.000000,24.000000 + + + 1.000000 + 0.000000,0.000000 + 70.000000,0.000000 + 70.000000,24.000000 + 0.000000,24.000000 + + + 1.000000 + 0.000000,0.000000 + 36.000000,0.000000 + 36.000000,24.000000 + 0.000000,24.000000 + + + 1.000000 + 0.000000,0.000000 + 31.000000,0.000000 + 31.000000,24.000000 + 0.000000,24.000000 + + + 1.000000 + 0.000000,0.000000 + 153.000000,0.000000 + 153.000000,24.000000 + 0.000000,24.000000 + + + 1.000000 + 0.000000,0.000000 + 24.000000,0.000000 + 24.000000,50.000000 + 0.000000,50.000000 + + + 1.000000 + 0.000000,0.000000 + 50.000000,0.000000 + 50.000000,24.000000 + 0.000000,24.000000 + + + 1.000000 + 0.000000,0.000000 + 51.000000,0.000000 + 51.000000,24.000000 + 0.000000,24.000000 + +
diff --git a/examples/Makefile.am b/examples/Makefile.am index 821b44b8..611a70ae 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -1,8 +1 @@ -bin_SCRIPTS = eekboard-inscript -keyboarddir = $(pkgdatadir)/keyboards -dist_keyboard_DATA = inscript2.xml -EXTRA_DIST = gen-inscript-keyboard.py - -eekboard-inscript: eekboard-inscript.in - $(AM_V_GEN) sed 's!@EEKBOARD_INSCRIPT_PATH@!'$(pkgdatadir)/keyboards/inscript2.xml'!' < $< > $@ - +SUBDIRS = eekboard-inscript diff --git a/examples/eekboard-inscript.in b/examples/eekboard-inscript.in deleted file mode 100644 index 98792c19..00000000 --- a/examples/eekboard-inscript.in +++ /dev/null @@ -1,126 +0,0 @@ -#!/usr/bin/env python - -# Copyright (C) 2011 Daiki Ueno -# 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 gtk, eekboard, virtkey - -GROUPS = ( - "as-inscript2", - "bn-inscript2", - "brx-inscript2-deva", - "doi-inscript2-deva", - "gu-inscript2", - "hi-inscript2", - "kn-inscript2", - "kok-inscript2-deva", - "mai-inscript2", - "ml-inscript2", - "mni-inscript2-beng", - "mni-inscript2-mtei", - "mr-inscript2", - "ne-inscript2-deva", - "or-inscript2", - "pa-inscript2-guru", - "sa-inscript2", - "sat-inscript2-deva", - "sat-inscript2-olck", - "sd-inscript2-deva", - "ta-inscript2", - "te-inscript2") - -class InscriptKeyboard(object): - def __init__(self, client_name, path): - self.__keyboard = eekboard.XmlKeyboard(path, - eekboard.MODIFIER_BEHAVIOR_LATCH) - self.__eekboard = eekboard.Eekboard() - self.__context = self.__eekboard.create_context(client_name) - keyboard_id = self.__context.add_keyboard(self.__keyboard) - self.__context.set_keyboard(keyboard_id) - self.__keyboard.connect('key-pressed', self.__key_pressed_cb) - self.__keyboard.connect('key-released', self.__key_released_cb) - self.__virtkey = virtkey.virtkey() - self.__english = False - self.__eekboard.connect('destroyed', self.__destroyed_cb) - - def __destroyed_cb(self, eekboard): - gtk.main_quit() - - def enable(self): - self.__eekboard.push_context(self.__context) - - def disable(self): - self.__eekboard.pop_context(self.__context) - - def show(self): - self.__context.show_keyboard() - - def set_group(self, group): - self.__group = group - self.__context.set_group(self.__group) - - def __key_pressed_cb(self, keyboard, key): - if key.get_keycode() == 37: - return - symbol = key.get_symbol() - if isinstance(symbol, eekboard.Keysym): - xkeysym = symbol.get_xkeysym() - modifiers = self.__keyboard.get_modifiers() - self.__virtkey.latch_mod(modifiers) - self.__virtkey.press_keysym(xkeysym) - self.__virtkey.unlatch_mod(modifiers) - - def __key_released_cb(self, keyboard, key): - if key.get_keycode() == 37: - if self.__english: - self.__context.set_group(self.__group) - self.__english = False - else: - self.__context.set_group(0) - self.__english = True - return - symbol = key.get_symbol() - if isinstance(symbol, eekboard.Keysym): - xkeysym = symbol.get_xkeysym() - self.__virtkey.release_keysym(xkeysym) - -if __name__ == "__main__": - from optparse import OptionParser - import sys - - parser = OptionParser() - parser.add_option("-n", "--name=LANGCODE", dest="langcode", - help="Specify language code to LANGCODE", - metavar="LANGCODE") - (options, args) = parser.parse_args() - group = 1 - if options.langcode: - group = None - for index, langcode in enumerate(GROUPS): - if langcode.startswith(options.langcode): - group = index + 1 - break - if group is None: - print >> sys.stderr, "Unknown langcode %s" % options.langcode - exit(1) - - inscript = InscriptKeyboard("eekboard-inscript", "@EEKBOARD_INSCRIPT_PATH@") - inscript.set_group(group) - inscript.enable() - inscript.show() - gtk.main() diff --git a/examples/eekboard-inscript/Makefile.am b/examples/eekboard-inscript/Makefile.am new file mode 100644 index 00000000..f0bfa419 --- /dev/null +++ b/examples/eekboard-inscript/Makefile.am @@ -0,0 +1,13 @@ +bin_SCRIPTS = eekboard-inscript +keyboarddir = $(pkgdatadir)/keyboards + +eekboard_inscript_datadir = $(datarootdir)/eekboard-inscript +eekboard_inscript_data_DATA = inscript.py main.py + +eekboard-inscript: eekboard-inscript.in + $(AM_V_GEN) sed -e 's!@''PYTHON@!'$(PYTHON)'!' \ + -e 's!@EEKBOARD_KEYBOARDDIR@!'$(keyboarddir)'!' \ + -e 's!@M17N_DIR@!'$(datadir)/m17n'!' \ + -e 's!@EEKBOARD_INSCRIPT_DATADIR@!'$(eekboard_inscript_datadir)'!' < $< > $@ + +CLEANFILES = eekboard-inscript diff --git a/examples/eekboard-inscript/eekboard-inscript.in b/examples/eekboard-inscript/eekboard-inscript.in new file mode 100644 index 00000000..d5115652 --- /dev/null +++ b/examples/eekboard-inscript/eekboard-inscript.in @@ -0,0 +1,23 @@ +#!/bin/sh + +# Copyright (C) 2011 Daiki Ueno +# 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 + +export EEKBOARD_KEYBOARDDIR=@EEKBOARD_KEYBOARDDIR@ +export M17N_DIR=@M17N_DIR@ +exec @PYTHON@ @EEKBOARD_INSCRIPT_DATADIR@/main.py $@ diff --git a/examples/eekboard-inscript/inscript.py b/examples/eekboard-inscript/inscript.py new file mode 100644 index 00000000..bb48c4cd --- /dev/null +++ b/examples/eekboard-inscript/inscript.py @@ -0,0 +1,176 @@ +#!/usr/bin/env python + +# Copyright (C) 2011 Daiki Ueno +# 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 gtk, eekboard, virtkey +import sys, os.path, re + +KEYCODE_TABLE = { + '1': 10, '2': 11, '3': 12, '4': 13, '5': 14, '6': 15, '7': 16, '8': 17, + '9': 18, '0': 19, '-': 20, '=': 21, 'q': 24, 'w': 25, 'e': 26, 'r': 27, + 't': 28, 'y': 29, 'u': 30, 'i': 31, 'o': 32, 'p': 33, '[': 34, ']': 35, + 'a': 38, 's': 39, 'd': 40, 'f': 41, 'g': 42, 'h': 43, 'j': 44, 'k': 45, + 'l': 46, ';': 47, '\'': 48, '`': 49, '\\': 51, 'z': 52, 'x': 53, 'c': 54, + 'v': 55, 'b': 56, 'n': 57, 'm': 58, ',': 59, '.': 60, '/': 61 +} + +MARK_UPPER = '~!@#$%^&*()_+{}|:"<>?' +MARK_LOWER = '`1234567890-=[]\\;\',./' + +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: + insert = match.group(3).decode('UTF-8') + if match.group(1): + keyseq = re.sub(r'\\(.)', r'\1', match.group(1)) + self.__add_symbol_entry(keyseq, insert) + else: + keyseq = re.sub(r'\\(.)', r'\1', match.group(2)) + self.__add_text_entry(keyseq, insert) + + def get_entry_for_keycode(self, keycode): + return self.__dict.get(keycode) + + def __add_entry(self, letter, level, insert): + if letter.isupper(): + level |= 1 + letter = letter.lower() + elif letter in MARK_UPPER: + level |= 1 + letter = MARK_LOWER[MARK_UPPER.index(letter)] + keycode = KEYCODE_TABLE[letter] + if keycode not in self.__dict: + self.__dict[keycode] = list([None,None,None,None]) + self.__dict[keycode][level] = insert + + def __add_symbol_entry(self, symbol, insert): + level = 0 + if symbol.startswith('G-'): + level |= 2 + symbol = symbol[2:] + if not symbol.startswith('KP_'): + self.__add_entry(symbol, level, insert) + + def __add_text_entry(self, text, insert): + self.__add_entry(text, 0, insert) + +class Keyboard(object): + def __init__(self, client_name, map_path, kbd_path): + self.__keyboard = self.__create_keyboard(map_path, kbd_path) + self.__eekboard = eekboard.Eekboard() + self.__context = self.__eekboard.create_context(client_name) + keyboard_id = self.__context.add_keyboard(self.__keyboard) + self.__context.set_keyboard(keyboard_id) + self.__keyboard.connect('key-pressed', self.__key_pressed_cb) + self.__keyboard.connect('key-released', self.__key_released_cb) + self.__virtkey = virtkey.virtkey() + self.__english = False + self.__eekboard.connect('destroyed', self.__destroyed_cb) + + def __create_keyboard(self, map_path, kbd_path): + def __each_key(element, data): + keycode = element.get_keycode() + # keycode 37 is used to toggle English/Inscript + if keycode == 37: + matrix = eekboard.SymbolMatrix.new(2, 1) + keysym = eekboard.Keysym.new(65507) + keysym.set_label("Ind") + matrix.set_symbol(0, 0, keysym) + keysym = eekboard.Keysym.new(65507) + keysym.set_label("Eng") + matrix.set_symbol(1, 0, keysym) + element.set_symbol_matrix(matrix) + return + + # group(0) is us keyboard + matrix = eekboard.SymbolMatrix.new(2, 4) + for l in xrange(4): + keysym = element.get_symbol_at_index(0, l, 0, 0) + matrix.set_symbol(0, l, keysym) + # group(1) is inscript keyboard + entry = data.get_entry_for_keycode(keycode) + for l in xrange(4): + keysym = None + if entry and entry[l]: + try: + keyval = gtk.gdk.unicode_to_keyval(ord(entry[l])) + keysym = eekboard.Keysym.new(keyval) + except: + print >> sys.stderr, "can't convert %s to keyval" % entry[l] + if not keysym: + keysym = element.get_symbol_at_index(1, l, 0, 0) + matrix.set_symbol(1, l, keysym) + element.set_symbol_matrix(matrix) + + def __each_section(element, data): + element.foreach_child(__each_key, data) + + mapfile = MapFile(map_path) + keyboard = eekboard.XmlKeyboard(kbd_path, + eekboard.MODIFIER_BEHAVIOR_LATCH) + keyboard.foreach_child(__each_section, mapfile) + return keyboard + + def __destroyed_cb(self, eekboard): + gtk.main_quit() + + def enable(self): + self.__eekboard.push_context(self.__context) + + def disable(self): + self.__eekboard.pop_context(self.__context) + + def show(self): + self.__context.show_keyboard() + + def set_group(self, group): + self.__group = group + self.__context.set_group(self.__group) + + def __key_pressed_cb(self, keyboard, key): + if key.get_keycode() == 37: + return + symbol = key.get_symbol() + if isinstance(symbol, eekboard.Keysym): + xkeysym = symbol.get_xkeysym() + modifiers = self.__keyboard.get_modifiers() + self.__virtkey.latch_mod(modifiers) + self.__virtkey.press_keysym(xkeysym) + self.__virtkey.unlatch_mod(modifiers) + + def __key_released_cb(self, keyboard, key): + if key.get_keycode() == 37: + if self.__english: + self.__context.set_group(self.__group) + self.__english = False + else: + self.__context.set_group(0) + self.__english = True + return + symbol = key.get_symbol() + if isinstance(symbol, eekboard.Keysym): + xkeysym = symbol.get_xkeysym() + self.__virtkey.release_keysym(xkeysym) diff --git a/examples/eekboard-inscript/main.py b/examples/eekboard-inscript/main.py new file mode 100644 index 00000000..2c4fd21c --- /dev/null +++ b/examples/eekboard-inscript/main.py @@ -0,0 +1,48 @@ +# Copyright (C) 2011 Daiki Ueno +# 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 inscript +import gtk +from optparse import OptionParser +import sys, os + +parser = OptionParser() +parser.add_option("-n", "--name=LANGCODE", dest="langcode", + help="Specify language code to LANGCODE", + metavar="LANGCODE") +(options, args) = parser.parse_args() + +if options.langcode is None: + print >> sys.stderr, "Specify language code with -n" + exit(1) + +map_path = os.path.join(os.getenv("M17N_DIR"), options.langcode + ".mim") +if not os.path.exists(map_path): + print >> sys.stderr, "%s not found" % map_path + exit(1) + +kbd_path = os.path.join(os.getenv("EEKBOARD_KEYBOARDDIR"), "us-qwerty.xml") +if not os.path.exists(kbd_path): + print >> sys.stderr, "%s not found" % kbd_path + exit(1) + +keyboard = inscript.Keyboard("eekboard-inscript", map_path, kbd_path) +keyboard.set_group(1) +keyboard.enable() +keyboard.show() +gtk.main() diff --git a/examples/gen-inscript-keyboard.py b/examples/gen-inscript-keyboard.py deleted file mode 100644 index ec5bbec2..00000000 --- a/examples/gen-inscript-keyboard.py +++ /dev/null @@ -1,162 +0,0 @@ -#!/usr/bin/env python - -# Copyright (C) 2011 Daiki Ueno -# 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 sys, os.path -import sys -import re - -import gtk, gtk.gdk -import eekboard -from gi.repository import Eek, GLib - -if len(sys.argv) < 3: - print >> sys.stderr, "Usage: %s KEYBOARD M17N-MAP..." % sys.argv[0] - sys.exit(-1) - -MAPENTRY_PATTERN = re.compile(r'\A\s*\((?:\((.*?)\)|"(.*?)")\s*"(.*?)"\)') -KEYCODE_TABLE = { - '1': 10, - '2': 11, - '3': 12, - '4': 13, - '5': 14, - '6': 15, - '7': 16, - '8': 17, - '9': 18, - '0': 19, - '-': 20, - '=': 21, - 'q': 24, - 'w': 25, - 'e': 26, - 'r': 27, - 't': 28, - 'y': 29, - 'u': 30, - 'i': 31, - 'o': 32, - 'p': 33, - '[': 34, - ']': 35, - 'a': 38, - 's': 39, - 'd': 40, - 'f': 41, - 'g': 42, - 'h': 43, - 'j': 44, - 'k': 45, - 'l': 46, - ';': 47, - '\'': 48, - '`': 49, - '\\': 51, - 'z': 52, - 'x': 53, - 'c': 54, - 'v': 55, - 'b': 56, - 'n': 57, - 'm': 58, - ',': 59, - '.': 60, - '/': 61 -} - -MARK_UPPER = '~!@#$%^&*()_+{}|:"<>?' -MARK_LOWER = '`1234567890-=[]\\;\',./' - -class MapFile(object): - def __init__(self, path): - self.__dict = dict() - - with open(path, 'r') as fp: - for line in fp: - match = re.match(MAPENTRY_PATTERN, line) - if match: - insert = match.group(3).decode('UTF-8') - if match.group(1): - keyseq = re.sub(r'\\(.)', r'\1', match.group(1)) - self.__add_symbol_entry(keyseq, insert) - else: - keyseq = re.sub(r'\\(.)', r'\1', match.group(2)) - self.__add_text_entry(keyseq, insert) - - def get_entry_for_keycode(self, keycode): - return self.__dict.get(keycode, list([None, None, None, None])) - - def __add_entry(self, letter, level, insert): - if letter.isupper(): - level |= 1 - letter = letter.lower() - elif letter in MARK_UPPER: - level |= 1 - letter = MARK_LOWER[MARK_UPPER.index(letter)] - keycode = KEYCODE_TABLE[letter] - if keycode not in self.__dict: - self.__dict[keycode] = list([None,None,None,None]) - self.__dict[keycode][level] = insert - - def __add_symbol_entry(self, symbol, insert): - level = 0 - if symbol.startswith('G-'): - level |= 2 - symbol = symbol[2:] - if not symbol.startswith('KP_'): - self.__add_entry(symbol, level, insert) - - def __add_text_entry(self, text, insert): - self.__add_entry(text, 0, insert) - -files = list() -for path in sys.argv[2:]: - files.append(MapFile(path)) - -keyboard = eekboard.XmlKeyboard(os.path.abspath(sys.argv[1])) - -def each_key(element, data): - keycode = element.get_keycode() - matrix = Eek.SymbolMatrix.new(len(files) + 1, 4) - for l in xrange(4): - keysym = element.get_symbol_at_index(0, l, 0, 0) - matrix.set_symbol(0, l, keysym) - for g, f in enumerate(files): - entry = f.get_entry_for_keycode(keycode) - for l in xrange(4): - keysym = None - if entry[l]: - try: - keyval = gtk.gdk.unicode_to_keyval(ord(entry[l])) - keysym = Eek.Keysym.new(keyval) - except: - pass - if not keysym: - keysym = element.get_symbol_at_index(g + 1, l, 0, 0) - matrix.set_symbol(g + 1, l, keysym) - element.set_symbol_matrix(matrix) - -def each_section(element, data): - element.foreach_child(each_key, None) - -keyboard.foreach_child(each_section, None) -output = GLib.string_sized_new(4096) -keyboard.output(output, 0) -print output.str diff --git a/examples/inscript2.xml b/examples/inscript2.xml deleted file mode 100644 index 86f0cad8..00000000 --- a/examples/inscript2.xml +++ /dev/null @@ -1,7297 +0,0 @@ - - - 0.000000,0.000000,640.000000,296.585366 -
- 15.609756,15.609756,640.000000,39.024390 - 0 - - 16 - 1 - - - 3.121951,1.560976,37.463415,37.463415 - outline4 - - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - Escape - - - - 84.292683,1.560976,37.463415,37.463415 - outline4 - - F1 - (null) - F1 - F1 - F1 - (null) - F1 - F1 - F1 - (null) - F1 - F1 - F1 - (null) - F1 - F1 - F1 - (null) - F1 - F1 - F1 - (null) - F1 - F1 - F1 - (null) - F1 - F1 - F1 - (null) - F1 - F1 - F1 - (null) - F1 - F1 - F1 - (null) - F1 - F1 - F1 - (null) - F1 - F1 - F1 - (null) - F1 - F1 - F1 - (null) - F1 - F1 - F1 - (null) - F1 - F1 - F1 - (null) - F1 - F1 - F1 - (null) - F1 - F1 - F1 - (null) - F1 - F1 - F1 - (null) - F1 - F1 - F1 - (null) - F1 - F1 - F1 - (null) - F1 - F1 - F1 - (null) - F1 - F1 - F1 - (null) - F1 - F1 - F1 - (null) - F1 - F1 - - - - 124.878049,1.560976,37.463415,37.463415 - outline4 - - F2 - (null) - F2 - F2 - F2 - (null) - F2 - F2 - F2 - (null) - F2 - F2 - F2 - (null) - F2 - F2 - F2 - (null) - F2 - F2 - F2 - (null) - F2 - F2 - F2 - (null) - F2 - F2 - F2 - (null) - F2 - F2 - F2 - (null) - F2 - F2 - F2 - (null) - F2 - F2 - F2 - (null) - F2 - F2 - F2 - (null) - F2 - F2 - F2 - (null) - F2 - F2 - F2 - (null) - F2 - F2 - F2 - (null) - F2 - F2 - F2 - (null) - F2 - F2 - F2 - (null) - F2 - F2 - F2 - (null) - F2 - F2 - F2 - (null) - F2 - F2 - F2 - (null) - F2 - F2 - F2 - (null) - F2 - F2 - F2 - (null) - F2 - F2 - F2 - (null) - F2 - F2 - - - - 165.463415,1.560976,37.463415,37.463415 - outline4 - - F3 - (null) - F3 - F3 - F3 - (null) - F3 - F3 - F3 - (null) - F3 - F3 - F3 - (null) - F3 - F3 - F3 - (null) - F3 - F3 - F3 - (null) - F3 - F3 - F3 - (null) - F3 - F3 - F3 - (null) - F3 - F3 - F3 - (null) - F3 - F3 - F3 - (null) - F3 - F3 - F3 - (null) - F3 - F3 - F3 - (null) - F3 - F3 - F3 - (null) - F3 - F3 - F3 - (null) - F3 - F3 - F3 - (null) - F3 - F3 - F3 - (null) - F3 - F3 - F3 - (null) - F3 - F3 - F3 - (null) - F3 - F3 - F3 - (null) - F3 - F3 - F3 - (null) - F3 - F3 - F3 - (null) - F3 - F3 - F3 - (null) - F3 - F3 - F3 - (null) - F3 - F3 - - - - 206.048780,1.560976,37.463415,37.463415 - outline4 - - F4 - (null) - F4 - F4 - F4 - (null) - F4 - F4 - F4 - (null) - F4 - F4 - F4 - (null) - F4 - F4 - F4 - (null) - F4 - F4 - F4 - (null) - F4 - F4 - F4 - (null) - F4 - F4 - F4 - (null) - F4 - F4 - F4 - (null) - F4 - F4 - F4 - (null) - F4 - F4 - F4 - (null) - F4 - F4 - F4 - (null) - F4 - F4 - F4 - (null) - F4 - F4 - F4 - (null) - F4 - F4 - F4 - (null) - F4 - F4 - F4 - (null) - F4 - F4 - F4 - (null) - F4 - F4 - F4 - (null) - F4 - F4 - F4 - (null) - F4 - F4 - F4 - (null) - F4 - F4 - F4 - (null) - F4 - F4 - F4 - (null) - F4 - F4 - F4 - (null) - F4 - F4 - - - - 266.926829,1.560976,37.463415,37.463415 - outline4 - - F5 - (null) - F5 - F5 - F5 - (null) - F5 - F5 - F5 - (null) - F5 - F5 - F5 - (null) - F5 - F5 - F5 - (null) - F5 - F5 - F5 - (null) - F5 - F5 - F5 - (null) - F5 - F5 - F5 - (null) - F5 - F5 - F5 - (null) - F5 - F5 - F5 - (null) - F5 - F5 - F5 - (null) - F5 - F5 - F5 - (null) - F5 - F5 - F5 - (null) - F5 - F5 - F5 - (null) - F5 - F5 - F5 - (null) - F5 - F5 - F5 - (null) - F5 - F5 - F5 - (null) - F5 - F5 - F5 - (null) - F5 - F5 - F5 - (null) - F5 - F5 - F5 - (null) - F5 - F5 - F5 - (null) - F5 - F5 - F5 - (null) - F5 - F5 - F5 - (null) - F5 - F5 - - - - 307.512195,1.560976,37.463415,37.463415 - outline4 - - F6 - (null) - F6 - F6 - F6 - (null) - F6 - F6 - F6 - (null) - F6 - F6 - F6 - (null) - F6 - F6 - F6 - (null) - F6 - F6 - F6 - (null) - F6 - F6 - F6 - (null) - F6 - F6 - F6 - (null) - F6 - F6 - F6 - (null) - F6 - F6 - F6 - (null) - F6 - F6 - F6 - (null) - F6 - F6 - F6 - (null) - F6 - F6 - F6 - (null) - F6 - F6 - F6 - (null) - F6 - F6 - F6 - (null) - F6 - F6 - F6 - (null) - F6 - F6 - F6 - (null) - F6 - F6 - F6 - (null) - F6 - F6 - F6 - (null) - F6 - F6 - F6 - (null) - F6 - F6 - F6 - (null) - F6 - F6 - F6 - (null) - F6 - F6 - F6 - (null) - F6 - F6 - - - - 348.097561,1.560976,37.463415,37.463415 - outline4 - - F7 - (null) - F7 - F7 - F7 - (null) - F7 - F7 - F7 - (null) - F7 - F7 - F7 - (null) - F7 - F7 - F7 - (null) - F7 - F7 - F7 - (null) - F7 - F7 - F7 - (null) - F7 - F7 - F7 - (null) - F7 - F7 - F7 - (null) - F7 - F7 - F7 - (null) - F7 - F7 - F7 - (null) - F7 - F7 - F7 - (null) - F7 - F7 - F7 - (null) - F7 - F7 - F7 - (null) - F7 - F7 - F7 - (null) - F7 - F7 - F7 - (null) - F7 - F7 - F7 - (null) - F7 - F7 - F7 - (null) - F7 - F7 - F7 - (null) - F7 - F7 - F7 - (null) - F7 - F7 - F7 - (null) - F7 - F7 - F7 - (null) - F7 - F7 - F7 - (null) - F7 - F7 - - - - 388.682927,1.560976,37.463415,37.463415 - outline4 - - F8 - (null) - F8 - F8 - F8 - (null) - F8 - F8 - F8 - (null) - F8 - F8 - F8 - (null) - F8 - F8 - F8 - (null) - F8 - F8 - F8 - (null) - F8 - F8 - F8 - (null) - F8 - F8 - F8 - (null) - F8 - F8 - F8 - (null) - F8 - F8 - F8 - (null) - F8 - F8 - F8 - (null) - F8 - F8 - F8 - (null) - F8 - F8 - F8 - (null) - F8 - F8 - F8 - (null) - F8 - F8 - F8 - (null) - F8 - F8 - F8 - (null) - F8 - F8 - F8 - (null) - F8 - F8 - F8 - (null) - F8 - F8 - F8 - (null) - F8 - F8 - F8 - (null) - F8 - F8 - F8 - (null) - F8 - F8 - F8 - (null) - F8 - F8 - F8 - (null) - F8 - F8 - - - - 449.560976,1.560976,37.463415,37.463415 - outline4 - - F9 - (null) - F9 - F9 - F9 - (null) - F9 - F9 - F9 - (null) - F9 - F9 - F9 - (null) - F9 - F9 - F9 - (null) - F9 - F9 - F9 - (null) - F9 - F9 - F9 - (null) - F9 - F9 - F9 - (null) - F9 - F9 - F9 - (null) - F9 - F9 - F9 - (null) - F9 - F9 - F9 - (null) - F9 - F9 - F9 - (null) - F9 - F9 - F9 - (null) - F9 - F9 - F9 - (null) - F9 - F9 - F9 - (null) - F9 - F9 - F9 - (null) - F9 - F9 - F9 - (null) - F9 - F9 - F9 - (null) - F9 - F9 - F9 - (null) - F9 - F9 - F9 - (null) - F9 - F9 - F9 - (null) - F9 - F9 - F9 - (null) - F9 - F9 - F9 - (null) - F9 - F9 - - - - 490.146341,1.560976,37.463415,37.463415 - outline4 - - F10 - (null) - F10 - F10 - F10 - (null) - F10 - F10 - F10 - (null) - F10 - F10 - F10 - (null) - F10 - F10 - F10 - (null) - F10 - F10 - F10 - (null) - F10 - F10 - F10 - (null) - F10 - F10 - F10 - (null) - F10 - F10 - F10 - (null) - F10 - F10 - F10 - (null) - F10 - F10 - F10 - (null) - F10 - F10 - F10 - (null) - F10 - F10 - F10 - (null) - F10 - F10 - F10 - (null) - F10 - F10 - F10 - (null) - F10 - F10 - F10 - (null) - F10 - F10 - F10 - (null) - F10 - F10 - F10 - (null) - F10 - F10 - F10 - (null) - F10 - F10 - F10 - (null) - F10 - F10 - F10 - (null) - F10 - F10 - F10 - (null) - F10 - F10 - F10 - (null) - F10 - F10 - - - - 530.731707,1.560976,37.463415,37.463415 - outline4 - - F11 - (null) - F11 - F11 - F11 - (null) - F11 - F11 - F11 - (null) - F11 - F11 - F11 - (null) - F11 - F11 - F11 - (null) - F11 - F11 - F11 - (null) - F11 - F11 - F11 - (null) - F11 - F11 - F11 - (null) - F11 - F11 - F11 - (null) - F11 - F11 - F11 - (null) - F11 - F11 - F11 - (null) - F11 - F11 - F11 - (null) - F11 - F11 - F11 - (null) - F11 - F11 - F11 - (null) - F11 - F11 - F11 - (null) - F11 - F11 - F11 - (null) - F11 - F11 - F11 - (null) - F11 - F11 - F11 - (null) - F11 - F11 - F11 - (null) - F11 - F11 - F11 - (null) - F11 - F11 - F11 - (null) - F11 - F11 - F11 - (null) - F11 - F11 - F11 - (null) - F11 - F11 - - - - 571.317073,1.560976,37.463415,37.463415 - outline4 - - F12 - (null) - F12 - F12 - F12 - (null) - F12 - F12 - F12 - (null) - F12 - F12 - F12 - (null) - F12 - F12 - F12 - (null) - F12 - F12 - F12 - (null) - F12 - F12 - F12 - (null) - F12 - F12 - F12 - (null) - F12 - F12 - F12 - (null) - F12 - F12 - F12 - (null) - F12 - F12 - F12 - (null) - F12 - F12 - F12 - (null) - F12 - F12 - F12 - (null) - F12 - F12 - F12 - (null) - F12 - F12 - F12 - (null) - F12 - F12 - F12 - (null) - F12 - F12 - F12 - (null) - F12 - F12 - F12 - (null) - F12 - F12 - F12 - (null) - F12 - F12 - F12 - (null) - F12 - F12 - F12 - (null) - F12 - F12 - F12 - (null) - F12 - F12 - F12 - (null) - F12 - F12 - - -
-
- 15.609756,78.048780,608.780488,201.365854 - 0 - - 14 - 1 - - - 14 - 1 - - - 13 - 1 - - - 12 - 1 - - - 8 - 1 - - - 3.121951,1.560976,37.463415,37.463415 - outline4 - - quoteleft - asciitilde - quoteleft - quoteleft - quoteleft - asciitilde - quoteleft - quoteleft - quoteleft - asciitilde - quoteleft - quoteleft - quoteleft - asciitilde - quoteleft - quoteleft - quoteleft - asciitilde - quoteleft - quoteleft - quoteleft - asciitilde - quoteleft - quoteleft - quoteleft - asciitilde - quoteleft - quoteleft - - - quoteleft - quoteleft - quoteleft - asciitilde - quoteleft - quoteleft - quoteleft - asciitilde - quoteleft - quoteleft - - - quoteleft - quoteleft - quoteleft - asciitilde - quoteleft - quoteleft - quoteleft - asciitilde - quoteleft - quoteleft - - - quoteleft - quoteleft - quoteleft - asciitilde - quoteleft - quoteleft - quoteleft - asciitilde - quoteleft - quoteleft - quoteleft - asciitilde - quoteleft - quoteleft - quoteleft - asciitilde - quoteleft - quoteleft - quoteleft - asciitilde - quoteleft - quoteleft - quoteleft - - quoteleft - quoteleft - quoteleft - asciitilde - quoteleft - quoteleft - - - quoteleft - quoteleft - - - quoteleft - quoteleft - - - - 43.707317,1.560976,37.463415,37.463415 - outline4 - - 1 - exclam - 1 - 1 - - exclam - 1 - - - exclam - 1 - - - exclam - 1 - 1 - - exclam - 1 - 1 - - - 1 - 1 - - - 1 - 1 - - exclam - 1 - 1 - - - 1 - 1 - - exclam - 1 - 1 - - exclam - 1 - - - exclam - 1 - - (null) - exclam - 1 - 1 - - - 1 - 1 - - exclam - 1 - 1 - - exclam - 1 - 1 - - exclam - 1 - 1 - - exclam - 1 - 1 - - exclam - 1 - 1 - - exclam - 1 - 1 - - exclam - 1 - 1 - - exclam - 1 - 1 - - exclam - 1 - - - - - 84.292683,1.560976,37.463415,37.463415 - outline4 - - 2 - at - 2 - 2 - - at - 2 - - - at - 2 - - - at - 2 - 2 - - at - 2 - 2 - - - 2 - 2 - - - 2 - 2 - - at - 2 - 2 - - - 2 - 2 - - at - 2 - 2 - - at - 2 - - - at - 2 - - (null) - at - 2 - 2 - - - 2 - 2 - - at - 2 - 2 - - at - 2 - 2 - - at - 2 - 2 - - - 2 - 2 - - at - 2 - 2 - - at - 2 - 2 - - at - 2 - 2 - - at - 2 - 2 - - at - 2 - - - - - 124.878049,1.560976,37.463415,37.463415 - outline4 - - 3 - numbersign - 3 - 3 - - numbersign - 3 - - - numbersign - 3 - - - numbersign - 3 - 3 - - numbersign - 3 - 3 - - numbersign - 3 - 3 - - numbersign - 3 - 3 - - numbersign - 3 - 3 - - numbersign - 3 - 3 - - numbersign - 3 - 3 - - numbersign - 3 - - - numbersign - 3 - - (null) - numbersign - 3 - 3 - - numbersign - 3 - 3 - - numbersign - 3 - 3 - - numbersign - 3 - 3 - - numbersign - 3 - 3 - - numbersign - 3 - 3 - - numbersign - 3 - 3 - - numbersign - 3 - 3 - - numbersign - 3 - 3 - - numbersign - 3 - 3 - - numbersign - 3 - - - - - 165.463415,1.560976,37.463415,37.463415 - outline4 - - 4 - dollar - 4 - 4 - - dollar - (null) - - - dollar - (null) - - - dollar - (null) - 4 - - dollar - (null) - 4 - - dollar - (null) - 4 - - dollar - (null) - 4 - - dollar - (null) - 4 - - dollar - (null) - 4 - - dollar - (null) - 4 - - dollar - (null) - - - dollar - (null) - - (null) - dollar - (null) - 4 - - dollar - (null) - 4 - - dollar - (null) - 4 - - dollar - (null) - 4 - - - (null) - 4 - - dollar - (null) - 4 - - dollar - (null) - 4 - - dollar - (null) - 4 - - dollar - (null) - 4 - - dollar - (null) - 4 - - dollar - (null) - - - - - 206.048780,1.560976,37.463415,37.463415 - outline4 - - 5 - percent - 5 - 5 - - percent - 5 - - - percent - 5 - - - percent - 5 - 5 - - percent - 5 - 5 - - percent - 5 - 5 - - percent - 5 - 5 - - percent - 5 - 5 - - percent - 5 - 5 - - percent - 5 - 5 - - percent - 5 - - - percent - 5 - - (null) - percent - 5 - 5 - - percent - 5 - 5 - - percent - 5 - 5 - - percent - 5 - 5 - - percent - 5 - 5 - - percent - 5 - 5 - - percent - 5 - 5 - - percent - 5 - 5 - - percent - 5 - 5 - - percent - 5 - 5 - - percent - 5 - - - - - 245.073171,1.560976,37.463415,37.463415 - outline4 - - 6 - asciicircum - 6 - 6 - - asciicircum - 6 - - - asciicircum - 6 - - - asciicircum - 6 - 6 - - asciicircum - 6 - 6 - - asciicircum - 6 - 6 - - asciicircum - 6 - 6 - - asciicircum - 6 - 6 - - asciicircum - 6 - 6 - - asciicircum - 6 - 6 - - asciicircum - 6 - - - asciicircum - 6 - - (null) - asciicircum - 6 - 6 - - asciicircum - 6 - 6 - - asciicircum - 6 - 6 - - asciicircum - 6 - 6 - - asciicircum - 6 - 6 - - asciicircum - 6 - 6 - - asciicircum - 6 - 6 - - asciicircum - 6 - 6 - - asciicircum - 6 - 6 - - asciicircum - 6 - 6 - - asciicircum - 6 - - - - - 285.658537,1.560976,37.463415,37.463415 - outline4 - - 7 - ampersand - 7 - 7 - - ampersand - 7 - 7 - - ampersand - 7 - 7 - - ampersand - 7 - 7 - - ampersand - 7 - 7 - - ampersand - 7 - 7 - - ampersand - 7 - 7 - - ampersand - 7 - 7 - - ampersand - 7 - 7 - - ampersand - 7 - 7 - - ampersand - 7 - 7 - - ampersand - 7 - 7 - (null) - ampersand - 7 - 7 - - ampersand - 7 - 7 - - ampersand - 7 - 7 - - ampersand - 7 - 7 - - ampersand - 7 - 7 - - ampersand - 7 - 7 - - ampersand - 7 - 7 - - ampersand - 7 - 7 - - ampersand - 7 - 7 - - ampersand - 7 - 7 - - ampersand - 7 - 7 - - - - 326.243902,1.560976,37.463415,37.463415 - outline4 - - 8 - asterisk - 8 - 8 - - asterisk - 8 - 8 - - asterisk - 8 - 8 - - asterisk - 8 - 8 - - asterisk - 8 - 8 - - asterisk - 8 - 8 - - asterisk - 8 - 8 - - asterisk - 8 - 8 - - asterisk - 8 - 8 - - asterisk - 8 - 8 - - asterisk - 8 - 8 - - asterisk - 8 - 8 - (null) - asterisk - 8 - 8 - - asterisk - 8 - 8 - - asterisk - 8 - 8 - - asterisk - 8 - 8 - - asterisk - 8 - 8 - - asterisk - 8 - 8 - - asterisk - 8 - 8 - - asterisk - 8 - 8 - - asterisk - 8 - 8 - - asterisk - 8 - 8 - - asterisk - 8 - 8 - - - - 366.829268,1.560976,37.463415,37.463415 - outline4 - - 9 - parenleft - 9 - 9 - - (null) - 9 - 9 - - (null) - 9 - 9 - - (null) - 9 - 9 - - (null) - 9 - 9 - - (null) - 9 - 9 - - (null) - 9 - 9 - - (null) - 9 - 9 - - (null) - 9 - 9 - - (null) - 9 - 9 - - (null) - 9 - 9 - - (null) - 9 - 9 - (null) - (null) - 9 - 9 - - (null) - 9 - 9 - - (null) - 9 - 9 - - (null) - 9 - 9 - - (null) - 9 - 9 - - (null) - 9 - 9 - - (null) - 9 - 9 - - parenleft - 9 - 9 - - (null) - 9 - 9 - - (null) - 9 - 9 - - (null) - 9 - 9 - - - - 407.414634,1.560976,37.463415,37.463415 - outline4 - - 0 - parenright - 0 - 0 - - (null) - 0 - 0 - - (null) - 0 - 0 - - (null) - 0 - 0 - - (null) - 0 - 0 - - (null) - 0 - 0 - - (null) - 0 - 0 - - (null) - 0 - 0 - - (null) - 0 - 0 - - (null) - 0 - 0 - - (null) - 0 - 0 - - (null) - 0 - 0 - (null) - (null) - 0 - 0 - - (null) - 0 - 0 - - (null) - 0 - 0 - - (null) - 0 - 0 - - (null) - 0 - 0 - - (null) - 0 - 0 - - (null) - 0 - 0 - - parenright - 0 - 0 - - (null) - 0 - 0 - - (null) - - 0 - - (null) - - 0 - - - - 448.000000,1.560976,37.463415,37.463415 - outline4 - - minus - underscore - minus - minus - minus - - minus - minus - minus - - minus - minus - minus - - minus - minus - minus - - minus - minus - minus - - minus - minus - minus - - minus - minus - minus - - minus - minus - minus - - minus - minus - minus - - minus - minus - minus - - minus - minus - minus - - minus - minus - minus - underscore - minus - minus - minus - - minus - minus - minus - - minus - minus - minus - - minus - minus - minus - - minus - minus - minus - - minus - minus - minus - - minus - minus - minus - - minus - minus - minus - underscore - minus - minus - minus - - - minus - minus - - ౿ - minus - - - - 488.585366,1.560976,37.463415,37.463415 - outline4 - - equal - plus - equal - equal - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - equal - plus - equal - equal - - - - - - - - - - - - - equal - plus - equal - equal - - - equal - equal - equal - plus - equal - equal - equal - plus - equal - equal - - - - - equal - plus - - equal - - - - - - - - 529.170732,1.560976,79.609756,37.463415 - outline1 - - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - BackSpace - - - - 3.121951,42.146341,59.317073,37.463415 - outline6 - - Tab - ISO_Left_Tab - Tab - Tab - Tab - ISO_Left_Tab - Tab - Tab - Tab - ISO_Left_Tab - Tab - Tab - Tab - ISO_Left_Tab - Tab - Tab - Tab - ISO_Left_Tab - Tab - Tab - Tab - ISO_Left_Tab - Tab - Tab - Tab - ISO_Left_Tab - Tab - Tab - Tab - ISO_Left_Tab - Tab - Tab - Tab - ISO_Left_Tab - Tab - Tab - Tab - ISO_Left_Tab - Tab - Tab - Tab - ISO_Left_Tab - Tab - Tab - Tab - ISO_Left_Tab - Tab - Tab - Tab - ISO_Left_Tab - Tab - Tab - Tab - ISO_Left_Tab - Tab - Tab - Tab - ISO_Left_Tab - Tab - Tab - Tab - ISO_Left_Tab - Tab - Tab - Tab - ISO_Left_Tab - Tab - Tab - Tab - ISO_Left_Tab - Tab - Tab - Tab - ISO_Left_Tab - Tab - Tab - Tab - ISO_Left_Tab - Tab - Tab - Tab - ISO_Left_Tab - Tab - Tab - Tab - ISO_Left_Tab - Tab - Tab - Tab - ISO_Left_Tab - Tab - Tab - - - - 65.560976,42.146341,37.463415,37.463415 - outline4 - - q - Q - q - q - - - q - q - - - q - q - - - q - q - - - q - q - - - q - q - - - q - q - - - q - q - - - q - q - - - q - q - - - - q - - - q - q - (null) - Q - q - q - - - q - q - - - q - q - - - q - q - - - q - q - - - q - q - - - q - q - q - Q - q - q - - - q - q - - - q - q - - - q - q - - - - 106.146341,42.146341,37.463415,37.463415 - outline4 - - w - W - w - w - - - w - w - - - w - w - - - w - w - - - w - w - - - w - w - - - w - w - - - w - w - - - w - w - - - w - w - - - w - w - - - w - w - (null) - W - w - w - - - w - w - - - w - w - - - w - w - - - w - w - - - w - w - - - w - w - w - W - w - w - - - w - w - - - w - w - - - w - w - - - - 145.170732,42.146341,37.463415,37.463415 - outline4 - - e - E - e - e - - - e - e - - - e - e - - - - e - - - - e - - - e - e - - - - e - - - e - e - - - - e - - - - e - - - e - e - - - e - e - (null) - E - e - e - - - - e - - - - e - - - e - e - - - e - e - - - - e - - - e - e - - E - e - e - - - - e - - - e - e - - - e - e - - - - 185.756098,42.146341,37.463415,37.463415 - outline4 - - r - R - r - r - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - r - - - - - r - R - r - r - - - - - - - - - - - - - - - r - r - - - - - - - r - r - r - R - r - r - - - - - - - r - r - - - - - - - - 226.341463,42.146341,37.463415,37.463415 - outline4 - - t - T - t - t - - - t - t - - - t - t - - - t - t - - - t - t - - - t - t - - - t - t - - - t - t - - - t - t - - - t - t - - - t - t - - - t - t - t - T - t - t - - - t - t - - - t - t - - - t - t - - - t - t - - - t - t - - - t - t - t - T - t - t - - - t - t - - - t - t - - - t - t - - - - 266.926829,42.146341,37.463415,37.463415 - outline4 - - y - Y - y - y - - - y - y - - - y - y - - - y - y - - - y - y - - - y - y - - - y - y - - - y - y - - - y - y - - - y - y - - - y - y - - - y - y - (null) - (null) - y - y - - - y - y - - - y - y - - - y - y - - - y - y - - - y - y - - - y - y - - Y - y - y - - - y - y - y - Y - - y - - - y - y - - - - 307.512195,42.146341,37.463415,37.463415 - outline4 - - u - U - u - u - - - u - u - - - u - u - - - u - u - - - u - u - - - u - u - - - u - u - - - - u - - - u - u - - - u - u - - - u - u - - - u - u - (null) - (null) - u - (null) - - - u - u - - - u - u - - - u - u - - - u - u - - - u - u - - - u - u - - - u - u - - - u - u - - - u - u - - - u - u - - - - 348.097561,42.146341,37.463415,37.463415 - outline4 - - i - I - i - i - - - i - i - - - i - i - - - - i - - - - i - - - i - i - - - - i - - - i - i - - - i - i - - - i - i - - - i - i - - - i - i - (null) - (null) - i - i - - - i - i - - - i - i - - - i - i - - - - i - - - i - i - - - i - i - - I - i - i - - - - i - i - I - i - i - - - i - i - - - - 388.682927,42.146341,37.463415,37.463415 - outline4 - - o - O - o - o - - - o - o - - - o - o - - - o - o - - - o - o - - - o - o - - - o - o - - - o - o - - - o - o - - - o - o - - - o - o - - - o - o - (null) - (null) - o - o - - - o - o - - - o - o - - - o - o - - - o - o - - - o - o - - - o - o - - O - o - o - - - o - o - o - O - o - o - - - o - o - - - - 429.268293,42.146341,37.463415,37.463415 - outline4 - - p - P - p - p - - - p - p - - - p - p - - - p - p - - - - p - - - p - p - - - - p - - - p - p - - - p - p - - - p - p - - - p - p - - - p - p - (null) - (null) - p - p - - - p - p - - - p - p - - - p - p - - - - p - - - p - p - - - p - p - - P - p - p - - - - p - - P - p - p - - - - p - - - - 468.292683,42.146341,37.463415,37.463415 - outline4 - - bracketleft - braceleft - bracketleft - bracketleft - - - - - - - - - - - bracketleft - bracketleft - - - - - - - bracketleft - bracketleft - - - - - - - bracketleft - bracketleft - - - bracketleft - bracketleft - - - - - - - bracketleft - bracketleft - - - - - bracketleft - braceleft - bracketleft - bracketleft - - - bracketleft - bracketleft - - - bracketleft - bracketleft - - - - - - - - bracketleft - - - bracketleft - bracketleft - - - bracketleft - bracketleft - - - bracketleft - bracketleft - - - - - bracketleft - braceleft - bracketleft - bracketleft - - - bracketleft - bracketleft - - - - 508.878049,42.146341,37.463415,37.463415 - outline4 - - bracketright - braceright - bracketright - bracketright - - - bracketright - bracketright - - - bracketright - bracketright - - - bracketright - bracketright - - - bracketright - bracketright - - - bracketright - bracketright - - - bracketright - bracketright - - - bracketright - bracketright - - - bracketright - bracketright - - - bracketright - bracketright - bracketright - - bracketright - bracketright - - - bracketright - bracketright - (null) - braceright - bracketright - bracketright - - - bracketright - bracketright - - - bracketright - bracketright - - - bracketright - bracketright - - - bracketright - bracketright - - - bracketright - bracketright - - - bracketright - bracketright - - - bracketright - bracketright - - - bracketright - bracketright - bracketright - - bracketright - bracketright - bracketright - - bracketright - bracketright - - - - 549.463415,42.146341,59.317073,37.463415 - outline7 - - backslash - bar - backslash - backslash - backslash - bar - backslash - backslash - backslash - bar - backslash - backslash - backslash - bar - backslash - backslash - backslash - bar - backslash - backslash - - - backslash - backslash - - - backslash - backslash - backslash - bar - backslash - backslash - backslash - bar - backslash - backslash - backslash - bar - backslash - backslash - backslash - bar - backslash - backslash - backslash - bar - backslash - backslash - backslash - bar - backslash - backslash - backslash - bar - backslash - backslash - backslash - bar - backslash - backslash - backslash - bar - backslash - backslash - backslash - bar - backslash - backslash - backslash - - backslash - backslash - backslash - bar - backslash - backslash - backslash - bar - backslash - backslash - backslash - bar - backslash - backslash - backslash - bar - backslash - backslash - backslash - bar - backslash - backslash - - - - 3.121951,82.731707,68.682927,37.463415 - outline8 - - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - - - - 76.487805,82.731707,37.463415,37.463415 - outline4 - - a - A - a - a - - - a - a - - - a - a - - - a - a - - - a - a - - - a - a - - - a - a - - - a - a - - - a - a - - - a - a - - - a - a - - - a - a - a - A - a - a - - - a - a - - - a - a - - - a - a - - - a - a - - - a - a - - - a - a - - A - a - a - - - a - a - a - - a - a - - - a - a - - - - 115.512195,82.731707,37.463415,37.463415 - outline4 - - s - S - s - s - - - s - s - - - s - s - - - s - s - - - s - s - - - s - s - - - s - s - - - s - s - - - s - s - - - s - s - - - s - s - - - s - s - (null) - S - s - s - - - s - s - - - s - s - - - s - s - - - s - s - - - s - s - - - s - s - - S - s - s - - - s - s - - - s - s - - - s - s - - - - 156.097561,82.731707,37.463415,37.463415 - outline4 - - d - D - d - d - - - d - d - - - d - d - - - - d - - - - d - - - d - d - - - - d - - - d - d - - - - d - - - - d - - - d - d - - - d - d - (null) - (null) - d - d - - - - d - - - - d - - - d - d - - - - - - - - d - - - d - d - - D - d - d - - - - d - - - d - d - - - d - d - - - - 196.682927,82.731707,37.463415,37.463415 - outline4 - - f - F - f - f - ি - - - - ি - - - - ि - - - - ि - - - - િ - - - - ि - - - - ಿ - - - - ि - - - - ि - - - - ി - - - f - ি - - - - f - (null) - - (null) - ि - - - - ि - - - - ି - - - - ਿ - - f - - ि - - - - ि - - f - - - F - f - f - ि - - - - ி - - f - f - ి - - - - - - - 237.268293,82.731707,37.463415,37.463415 - outline4 - - g - G - g - g - - - g - g - - - g - g - - - g - g - - - g - g - - - g - g - - - g - g - - - g - g - - - g - g - - - g - g - - - g - g - - - g - g - (null) - (null) - g - g - - - g - g - - - g - g - - - g - g - - - g - - - - g - g - - - g - g - - G - g - g - - - g - g - - - g - g - - - g - g - - - - 277.853659,82.731707,37.463415,37.463415 - outline4 - - h - H - h - h - - - h - h - - - h - h - - - h - h - - - h - - - - h - h - - - h - - - - h - - - - h - h - - - h - h - - - h - h - - - h - h - (null) - (null) - (null) - h - - - h - h - - - h - h - - - h - h - - - h - - - - h - - - - h - h - - H - h - h - - - h - - - H - - h - - - h - h - - - - 318.439024,82.731707,37.463415,37.463415 - outline4 - - j - J - j - j - - J - j - j - - J - j - j - - J - j - j - - J - j - j - - J - j - j - - J - j - j - - - - j - - - j - j - - J - j - j - - - - j - - J - j - j - (null) - J - j - j - - - j - j - - - j - j - - J - j - j - - - j - j - - J - j - j - - J - j - j - - J - j - j - - - j - j - - - j - j - - - j - j - - - - 359.024390,82.731707,37.463415,37.463415 - outline4 - - k - K - k - k - - - k - k - - - k - k - - - k - k - - - k - k - - - k - k - - - - - - - k - k - - - k - k - - - k - k - - - ൿ - k - - - k - k - (null) - (null) - (null) - k - - - k - k - - - k - k - - - k - k - - - k - - - - k - k - - - k - k - - K - k - k - - - - - - K - k - k - - - k - k - - - - 399.609756,82.731707,37.463415,37.463415 - outline4 - - l - L - l - l - - - - l - - - - l - - - l - l - - - l - l - - - l - l - - - l - l - - - l - l - - - l - l - - - l - l - - - l - l - - - - l - (null) - (null) - (null) - l - - - l - l - - - l - l - - - l - l - - - l - l - - - l - l - - - l - l - - L - l - l - - - l - l - - L - l - l - - - l - l - - - - 438.634146,82.731707,37.463415,37.463415 - outline4 - - semicolon - colon - semicolon - semicolon - - - semicolon - semicolon - - - semicolon - semicolon - - - semicolon - semicolon - - - semicolon - semicolon - - - semicolon - semicolon - - - semicolon - semicolon - - - semicolon - semicolon - - - semicolon - semicolon - - - semicolon - semicolon - - - semicolon - semicolon - - - semicolon - semicolon - (null) - colon - semicolon - semicolon - - - semicolon - semicolon - - - semicolon - semicolon - - - semicolon - semicolon - - - semicolon - semicolon - - - semicolon - semicolon - - - semicolon - semicolon - - - semicolon - semicolon - - - semicolon - semicolon - - colon - semicolon - semicolon - - - - semicolon - - - - 479.219512,82.731707,37.463415,37.463415 - outline4 - - quoteright - quotedbl - quoteright - quoteright - - quotedbl - quoteright - quoteright - - quotedbl - quoteright - quoteright - - quotedbl - quoteright - quoteright - - quotedbl - quoteright - quoteright - - quotedbl - quoteright - quoteright - - quotedbl - quoteright - quoteright - - quotedbl - quoteright - quoteright - - quotedbl - quoteright - quoteright - - quotedbl - quoteright - quoteright - - quotedbl - quoteright - quoteright - - quotedbl - quoteright - quoteright - quoteright - quotedbl - quoteright - quoteright - - quotedbl - quoteright - quoteright - - quotedbl - quoteright - quoteright - - quotedbl - quoteright - quoteright - - quotedbl - quoteright - quoteright - - quotedbl - quoteright - quoteright - - quotedbl - quoteright - quoteright - - quotedbl - quoteright - quoteright - - quotedbl - quoteright - quoteright - - quotedbl - quoteright - quoteright - - quotedbl - quoteright - quoteright - - - - 519.804878,82.731707,88.975610,37.463415 - outline9 - - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - Return - - - - 3.121951,121.756098,88.975610,37.463415 - outline10 - - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - Shift_L - - - - 95.219512,121.756098,37.463415,37.463415 - outline4 - - z - Z - z - z - ʼ - Z - z - z - z - Z - z - z - ʼ - Z - z - z - ʼ - Z - z - z - z - Z - z - z - z - Z - z - z - - - z - z - z - Z - z - z - ʼ - Z - z - z - - - z - z - z - Z - z - z - z - Z - z - z - z - Z - z - z - z - Z - z - z - z - Z - z - z - z - Z - z - z - z - Z - z - z - ʼ - Z - z - z - - - z - z - z - Z - z - z - - - z - z - - - - - - - - 135.804878,121.756098,37.463415,37.463415 - outline4 - - x - X - x - x - - - - x - - - - x - - - x - - x - - x - - - - x - - - - x - - - X - x - x - - - x - - - - x - - - X - x - x - - - - x - (null) - X - x - x - - - x - - - - - - - - - x - - - - - - - x - - - - x - - - X - x - x - x - - - x - - X - x - - - - x - x - - - - 176.390244,121.756098,37.463415,37.463415 - outline4 - - c - C - c - c - - - c - c - - - c - c - - - c - c - - - c - c - - - c - c - - - c - c - - - c - c - - - c - c - - - c - c - - - - c - - - c - c - (null) - C - (null) - c - - - c - c - - - c - c - - - c - c - - - c - c - - - c - c - - - c - c - - - c - c - - - c - c - - - - - - - c - c - - - - 215.414634,121.756098,37.463415,37.463415 - outline4 - - v - V - v - v - - V - v - v - - V - v - v - - V - v - v - - V - v - v - - V - v - v - - V - v - v - - V - v - v - - V - v - v - - V - v - v - - - - v - - V - v - v - (null) - V - (null) - v - - V - v - v - - V - v - v - - V - v - v - - V - v - v - - V - v - v - - V - v - v - - V - v - v - - - v - v - - - - - - V - v - v - - - - 256.000000,121.756098,37.463415,37.463415 - outline4 - - b - B - b - b - b - B - b - b - b - B - b - b - - B - b - b - - B - b - b - - B - b - b - - B - b - b - - B - b - b - - B - b - b - - B - b - b - - - b - b - b - B - b - b - (null) - B - b - b - - B - b - b - - B - b - b - - B - - b - - - b - b - - B - b - b - - B - b - b - - - b - b - - ॿ - b - b - - - - b - - B - b - b - - - - 296.585366,121.756098,37.463415,37.463415 - outline4 - - n - N - n - n - - N - n - n - - N - n - n - - N - n - - - N - n - - - - n - n - - N - n - - - - n - n - - - n - n - - N - n - - - - - - - N - n - n - (null) - N - (null) - n - - - n - n - - - n - n - - - n - n - - N - n - - - - n - n - - N - n - - - N - n - n - - - n - n - - - n - n - - - n - n - - - - 337.170732,121.756098,37.463415,37.463415 - outline4 - - m - M - m - m - - - m - m - - - m - m - - - m - m - - - m - m - - - m - m - - - m - m - - - m - m - - - m - m - - - m - m - - - m - m - - - m - m - (null) - M - m - m - - - m - m - - - m - m - - - m - m - - - m - m - - - m - m - - M - m - m - - M - m - m - - - m - m - - - m - m - - - m - m - - - - 377.756098,121.756098,37.463415,37.463415 - outline4 - - comma - less - comma - comma - comma - - - - comma - - - - comma - - - comma - comma - - comma - comma - comma - - - comma - comma - - - comma - comma - - comma - comma - comma - - - comma - comma - - comma - comma - comma - - comma - comma - comma - - - - comma - less - comma - comma - comma - - - comma - comma - - - comma - comma - - comma - comma - comma - less - comma - comma - comma - - comma - comma - comma - less - - comma - comma - ᱿ - comma - comma - comma - - - comma - comma - - - comma - comma - - comma - comma - - - - 418.341463,121.756098,37.463415,37.463415 - outline4 - - period - greater - period - period - period - - - - period - - - - period - - - - period - - - - period - - - (null) - period - - - - period - - - - period - - - - period - - - - period - - - - period - - - - period - (null) - period - period - period - - - - period - - - - period - - - - period - - - period - period - - - - period - - - - period - - period - period - period - - - - period - - - period - period - - - - - - - 458.926829,121.756098,37.463415,37.463415 - outline4 - - slash - question - slash - slash - - - slash - slash - - - slash - slash - - question - slash - slash - - question - slash - slash - - question - slash - slash - - question - slash - slash - - question - slash - slash - - question - slash - slash - - question - slash - slash - - question - slash - slash - - - slash - slash - (null) - question - slash - slash - - question - slash - slash - - question - slash - slash - - - slash - slash - - question - - slash - - question - slash - slash - - question - slash - slash - - question - slash - slash - - question - slash - slash - - question - slash - slash - - question - slash - slash - - - - 499.512195,121.756098,109.268293,37.463415 - outline11 - - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - Shift_R - - - - 3.121951,162.341463,56.195122,37.463415 - outline12 - - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - Control_L - - - - 62.439024,162.341463,48.390244,37.463415 - outline2 - - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - Super_L - - - - 113.951220,162.341463,48.390244,37.463415 - outline2 - - Alt_L - Meta_L - Alt_L - Alt_L - Alt_L - Meta_L - Alt_L - Alt_L - Alt_L - Meta_L - Alt_L - Alt_L - Alt_L - Meta_L - Alt_L - Alt_L - Alt_L - Meta_L - Alt_L - Alt_L - Alt_L - Meta_L - Alt_L - Alt_L - Alt_L - Meta_L - Alt_L - Alt_L - Alt_L - Meta_L - Alt_L - Alt_L - Alt_L - Meta_L - Alt_L - Alt_L - Alt_L - Meta_L - Alt_L - Alt_L - Alt_L - Meta_L - Alt_L - Alt_L - Alt_L - Meta_L - Alt_L - Alt_L - Alt_L - Meta_L - Alt_L - Alt_L - Alt_L - Meta_L - Alt_L - Alt_L - Alt_L - Meta_L - Alt_L - Alt_L - Alt_L - Meta_L - Alt_L - Alt_L - Alt_L - Meta_L - Alt_L - Alt_L - Alt_L - Meta_L - Alt_L - Alt_L - Alt_L - Meta_L - Alt_L - Alt_L - Alt_L - Meta_L - Alt_L - Alt_L - Alt_L - Meta_L - Alt_L - Alt_L - Alt_L - Meta_L - Alt_L - Alt_L - Alt_L - Meta_L - Alt_L - Alt_L - - - - 165.463415,162.341463,238.829268,37.463415 - outline3 - - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - space - - - - 407.414634,162.341463,48.390244,37.463415 - outline2 - - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - ISO_Level3_Shift - - - - 458.926829,162.341463,48.390244,37.463415 - outline2 - - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - Super_R - - - - 508.878049,162.341463,48.390244,37.463415 - outline2 - - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - Menu - - - - 560.390244,162.341463,48.390244,37.463415 - outline2 - - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - Control_R - - -
- - 1.000000 - 0.000000,0.000000 - 79.609756,0.000000 - 79.609756,37.463415 - 0.000000,37.463415 - - - 1.000000 - 0.000000,0.000000 - 48.390244,0.000000 - 48.390244,37.463415 - 0.000000,37.463415 - - - 1.000000 - 0.000000,0.000000 - 37.463415,0.000000 - 37.463415,37.463415 - 0.000000,37.463415 - - - 1.000000 - 0.000000,0.000000 - 59.317073,0.000000 - 59.317073,37.463415 - 0.000000,37.463415 - - - 1.000000 - 0.000000,0.000000 - 59.317073,0.000000 - 59.317073,37.463415 - 0.000000,37.463415 - - - 1.000000 - 0.000000,0.000000 - 68.682927,0.000000 - 68.682927,37.463415 - 0.000000,37.463415 - - - 1.000000 - 0.000000,0.000000 - 88.975610,0.000000 - 88.975610,37.463415 - 0.000000,37.463415 - - - 1.000000 - 0.000000,0.000000 - 88.975610,0.000000 - 88.975610,37.463415 - 0.000000,37.463415 - - - 1.000000 - 0.000000,0.000000 - 109.268293,0.000000 - 109.268293,37.463415 - 0.000000,37.463415 - - - 1.000000 - 0.000000,0.000000 - 56.195122,0.000000 - 56.195122,37.463415 - 0.000000,37.463415 - - - 1.000000 - 0.000000,0.000000 - 238.829268,0.000000 - 238.829268,37.463415 - 0.000000,37.463415 - -
-