Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--keyboard.py83
-rwxr-xr-xkeybuilder.py7
-rw-r--r--lessons/en_US/en_US.key2422
-rw-r--r--lessons/ne_NP/ne_NP.key2472
-rw-r--r--lessonscreen.py9
5 files changed, 429 insertions, 4564 deletions
diff --git a/keyboard.py b/keyboard.py
index 2ebb452..ae7f93a 100644
--- a/keyboard.py
+++ b/keyboard.py
@@ -372,7 +372,7 @@ class KeyboardWidget(KeyboardData, gtk.DrawingArea):
"""A GTK widget which implements an interactive visual keyboard, with support
for custom data driven layouts."""
- def __init__(self, image, root_window, poll_keys=False, record_map=False):
+ def __init__(self, image, root_window, poll_keys=False):
KeyboardData.__init__(self)
gtk.DrawingArea.__init__(self)
@@ -398,9 +398,7 @@ class KeyboardWidget(KeyboardData, gtk.DrawingArea):
self.modify_bg(gtk.STATE_NORMAL, self.get_colormap().alloc_color('#d0d0d0'))
- self.record_map = record_map
-
- self.letter_map = []
+ self.letter_map = {}
# Connect keyboard grabbing and releasing callbacks.
if poll_keys:
@@ -417,11 +415,24 @@ class KeyboardWidget(KeyboardData, gtk.DrawingArea):
self.root_window.disconnect(self.key_press_cb_id)
self.root_window.disconnect(self.key_release_cb_id)
- def load_key_map(self, filename):
- try:
- self.letter_map = simplejson.loads(open(filename, 'r').read())
- except:
- pass
+ def load_letter_map(self, filename):
+ self.letter_map = simplejson.loads(open(filename, 'r').read())
+
+ def save_letter_map(self, filename):
+ text = simplejson.dumps(self.letter_map, ensure_ascii=False, sort_keys=True, indent=4)
+ f = open(filename, 'w')
+ f.write(text)
+ f.close()
+
+ def get_key_sig(self, scan, state, group):
+ sig = 'scan%d' % scan
+ if state & gtk.gdk.SHIFT_MASK:
+ sig += ' shift'
+ if state & gtk.gdk.MOD5_MASK:
+ sig += ' altgr'
+ if group != 0:
+ sig += ' group%d' % group
+ return sig
def set_layout(self, layout):
"""Sets the keyboard's layout from a layout description."""
@@ -478,24 +489,19 @@ class KeyboardWidget(KeyboardData, gtk.DrawingArea):
text = k['key-label']
else:
- for l in self.letter_map:
- if l['scan'] == k['key-scan'] and \
- l['state'] == self.active_state & (gtk.gdk.SHIFT_MASK|gtk.gdk.MOD5_MASK) and \
- l['group'] == self.active_group:
- text = l['letter']
-
- if text == '' and self.record_map:
- text = k['key-scan']
-
- # else:
- # info = self.keymap.translate_keyboard_state(
- # k['key-scan'], self.active_state, self.active_group)
- # if info:
- # key = gtk.gdk.keyval_to_unicode(info[0])
- # try:
- # text = unichr(key).encode('utf-8')
- # except:
- # pass
+ sig = self.get_key_sig(k['key-scan'], self.active_state, self.active_group)
+ if self.letter_map.has_key(sig):
+ text = self.letter_map[sig]
+
+ #else:
+ # info = self.keymap.translate_keyboard_state(
+ # k['key-scan'], self.active_state, self.active_group)
+ # if info:
+ # key = gtk.gdk.keyval_to_unicode(info[0])
+ # try:
+ # text = unichr(key).encode('utf-8')
+ # except:
+ # pass
try:
layout = self.create_pango_layout(unicode(text))
@@ -578,26 +584,15 @@ class KeyboardWidget(KeyboardData, gtk.DrawingArea):
self.queue_draw()
- if self.record_map and event.string:
- l = {
- 'scan': event.hardware_keycode,
- 'state': int(event.state) & (gtk.gdk.SHIFT_MASK|gtk.gdk.MOD5_MASK),
- 'group': event.group,
- 'letter': unicode(event.string)
- }
- print '%r' % l
- self.letter_map.append(l)
- self._make_key_images(key)
- self.queue_draw()
+ if event.string:
+ sig = self.get_key_sig(event.hardware_keycode, event.state, event.group)
+ if not self.letter_map.has_key(sig):
+ self.letter_map[sig] = event.string
+ self._make_key_images(key)
+ self.queue_draw()
return False
- def save_letter_map(self, filename):
- text = simplejson.dumps(self.letter_map, sort_keys=True, indent=4)
- f = open(filename, 'w')
- f.write(text)
- f.close()
-
def _keys_changed_cb(self, keymap):
self._make_key_images()
diff --git a/keybuilder.py b/keybuilder.py
index 9d32161..38ec6d1 100755
--- a/keybuilder.py
+++ b/keybuilder.py
@@ -30,9 +30,12 @@ window.realize()
image = keyboard.KeyboardImages(800,400)
image.load_images()
-k = keyboard.KeyboardWidget(image, window, True, record_map=True)
+k = keyboard.KeyboardWidget(image, window, poll_keys=True)
+try:
+ k.load_letter_map(sys.argv[1])
+except:
+ pass
k.set_layout(keyboard.OLPC_LAYOUT)
-k.load_key_map(sys.argv[1])
savebtn = gtk.Button()
savebtn.add(gtk.Label('Save Keys'))
diff --git a/lessons/en_US/en_US.key b/lessons/en_US/en_US.key
index 9fa37cc..efc320d 100644
--- a/lessons/en_US/en_US.key
+++ b/lessons/en_US/en_US.key
@@ -1,2234 +1,188 @@
-[
- {
- "group": 0,
- "letter": "z",
- "scan": 52,
- "state": 0
- },
- {
- "group": 0,
- "letter": "z",
- "scan": 52,
- "state": 0
- },
- {
- "group": 0,
- "letter": "x",
- "scan": 53,
- "state": 0
- },
- {
- "group": 0,
- "letter": "x",
- "scan": 53,
- "state": 0
- },
- {
- "group": 0,
- "letter": "c",
- "scan": 54,
- "state": 0
- },
- {
- "group": 0,
- "letter": "c",
- "scan": 54,
- "state": 0
- },
- {
- "group": 0,
- "letter": "v",
- "scan": 55,
- "state": 0
- },
- {
- "group": 0,
- "letter": "v",
- "scan": 55,
- "state": 0
- },
- {
- "group": 0,
- "letter": "b",
- "scan": 56,
- "state": 0
- },
- {
- "group": 0,
- "letter": "b",
- "scan": 56,
- "state": 0
- },
- {
- "group": 0,
- "letter": "n",
- "scan": 57,
- "state": 0
- },
- {
- "group": 0,
- "letter": "n",
- "scan": 57,
- "state": 0
- },
- {
- "group": 0,
- "letter": "m",
- "scan": 58,
- "state": 0
- },
- {
- "group": 0,
- "letter": "m",
- "scan": 58,
- "state": 0
- },
- {
- "group": 0,
- "letter": ",",
- "scan": 59,
- "state": 0
- },
- {
- "group": 0,
- "letter": ",",
- "scan": 59,
- "state": 0
- },
- {
- "group": 0,
- "letter": ".",
- "scan": 60,
- "state": 0
- },
- {
- "group": 0,
- "letter": ".",
- "scan": 60,
- "state": 0
- },
- {
- "group": 0,
- "letter": "/",
- "scan": 61,
- "state": 0
- },
- {
- "group": 0,
- "letter": "/",
- "scan": 61,
- "state": 0
- },
- {
- "group": 0,
- "letter": "a",
- "scan": 38,
- "state": 0
- },
- {
- "group": 0,
- "letter": "a",
- "scan": 38,
- "state": 0
- },
- {
- "group": 0,
- "letter": "s",
- "scan": 39,
- "state": 0
- },
- {
- "group": 0,
- "letter": "s",
- "scan": 39,
- "state": 0
- },
- {
- "group": 0,
- "letter": "d",
- "scan": 40,
- "state": 0
- },
- {
- "group": 0,
- "letter": "d",
- "scan": 40,
- "state": 0
- },
- {
- "group": 0,
- "letter": "f",
- "scan": 41,
- "state": 0
- },
- {
- "group": 0,
- "letter": "f",
- "scan": 41,
- "state": 0
- },
- {
- "group": 0,
- "letter": "g",
- "scan": 42,
- "state": 0
- },
- {
- "group": 0,
- "letter": "g",
- "scan": 42,
- "state": 0
- },
- {
- "group": 0,
- "letter": "h",
- "scan": 43,
- "state": 0
- },
- {
- "group": 0,
- "letter": "h",
- "scan": 43,
- "state": 0
- },
- {
- "group": 0,
- "letter": "j",
- "scan": 44,
- "state": 0
- },
- {
- "group": 0,
- "letter": "j",
- "scan": 44,
- "state": 0
- },
- {
- "group": 0,
- "letter": "k",
- "scan": 45,
- "state": 0
- },
- {
- "group": 0,
- "letter": "k",
- "scan": 45,
- "state": 0
- },
- {
- "group": 0,
- "letter": "l",
- "scan": 46,
- "state": 0
- },
- {
- "group": 0,
- "letter": "l",
- "scan": 46,
- "state": 0
- },
- {
- "group": 0,
- "letter": ";",
- "scan": 47,
- "state": 0
- },
- {
- "group": 0,
- "letter": ";",
- "scan": 47,
- "state": 0
- },
- {
- "group": 0,
- "letter": "'",
- "scan": 48,
- "state": 0
- },
- {
- "group": 0,
- "letter": "'",
- "scan": 48,
- "state": 0
- },
- {
- "group": 0,
- "letter": "\\",
- "scan": 51,
- "state": 0
- },
- {
- "group": 0,
- "letter": "\\",
- "scan": 51,
- "state": 0
- },
- {
- "group": 0,
- "letter": "q",
- "scan": 24,
- "state": 0
- },
- {
- "group": 0,
- "letter": "q",
- "scan": 24,
- "state": 0
- },
- {
- "group": 0,
- "letter": "w",
- "scan": 25,
- "state": 0
- },
- {
- "group": 0,
- "letter": "w",
- "scan": 25,
- "state": 0
- },
- {
- "group": 0,
- "letter": "e",
- "scan": 26,
- "state": 0
- },
- {
- "group": 0,
- "letter": "e",
- "scan": 26,
- "state": 0
- },
- {
- "group": 0,
- "letter": "r",
- "scan": 27,
- "state": 0
- },
- {
- "group": 0,
- "letter": "r",
- "scan": 27,
- "state": 0
- },
- {
- "group": 0,
- "letter": "t",
- "scan": 28,
- "state": 0
- },
- {
- "group": 0,
- "letter": "t",
- "scan": 28,
- "state": 0
- },
- {
- "group": 0,
- "letter": "y",
- "scan": 29,
- "state": 0
- },
- {
- "group": 0,
- "letter": "y",
- "scan": 29,
- "state": 0
- },
- {
- "group": 0,
- "letter": "u",
- "scan": 30,
- "state": 0
- },
- {
- "group": 0,
- "letter": "u",
- "scan": 30,
- "state": 0
- },
- {
- "group": 0,
- "letter": "i",
- "scan": 31,
- "state": 0
- },
- {
- "group": 0,
- "letter": "i",
- "scan": 31,
- "state": 0
- },
- {
- "group": 0,
- "letter": "o",
- "scan": 32,
- "state": 0
- },
- {
- "group": 0,
- "letter": "o",
- "scan": 32,
- "state": 0
- },
- {
- "group": 0,
- "letter": "p",
- "scan": 33,
- "state": 0
- },
- {
- "group": 0,
- "letter": "p",
- "scan": 33,
- "state": 0
- },
- {
- "group": 0,
- "letter": "[",
- "scan": 34,
- "state": 0
- },
- {
- "group": 0,
- "letter": "[",
- "scan": 34,
- "state": 0
- },
- {
- "group": 0,
- "letter": "]",
- "scan": 35,
- "state": 0
- },
- {
- "group": 0,
- "letter": "]",
- "scan": 35,
- "state": 0
- },
- {
- "group": 0,
- "letter": "`",
- "scan": 49,
- "state": 0
- },
- {
- "group": 0,
- "letter": "`",
- "scan": 49,
- "state": 0
- },
- {
- "group": 0,
- "letter": "1",
- "scan": 10,
- "state": 0
- },
- {
- "group": 0,
- "letter": "1",
- "scan": 10,
- "state": 0
- },
- {
- "group": 0,
- "letter": "2",
- "scan": 11,
- "state": 0
- },
- {
- "group": 0,
- "letter": "2",
- "scan": 11,
- "state": 0
- },
- {
- "group": 0,
- "letter": "3",
- "scan": 12,
- "state": 0
- },
- {
- "group": 0,
- "letter": "3",
- "scan": 12,
- "state": 0
- },
- {
- "group": 0,
- "letter": "4",
- "scan": 13,
- "state": 0
- },
- {
- "group": 0,
- "letter": "4",
- "scan": 13,
- "state": 0
- },
- {
- "group": 0,
- "letter": "5",
- "scan": 14,
- "state": 0
- },
- {
- "group": 0,
- "letter": "5",
- "scan": 14,
- "state": 0
- },
- {
- "group": 0,
- "letter": "6",
- "scan": 15,
- "state": 0
- },
- {
- "group": 0,
- "letter": "6",
- "scan": 15,
- "state": 0
- },
- {
- "group": 0,
- "letter": "7",
- "scan": 16,
- "state": 0
- },
- {
- "group": 0,
- "letter": "7",
- "scan": 16,
- "state": 0
- },
- {
- "group": 0,
- "letter": "8",
- "scan": 17,
- "state": 0
- },
- {
- "group": 0,
- "letter": "8",
- "scan": 17,
- "state": 0
- },
- {
- "group": 0,
- "letter": "9",
- "scan": 18,
- "state": 0
- },
- {
- "group": 0,
- "letter": "9",
- "scan": 18,
- "state": 0
- },
- {
- "group": 0,
- "letter": "0",
- "scan": 19,
- "state": 0
- },
- {
- "group": 0,
- "letter": "0",
- "scan": 19,
- "state": 0
- },
- {
- "group": 0,
- "letter": "-",
- "scan": 20,
- "state": 0
- },
- {
- "group": 0,
- "letter": "-",
- "scan": 20,
- "state": 0
- },
- {
- "group": 0,
- "letter": "=",
- "scan": 21,
- "state": 0
- },
- {
- "group": 0,
- "letter": "=",
- "scan": 21,
- "state": 0
- },
- {
- "group": 0,
- "letter": "~",
- "scan": 49,
- "state": 1
- },
- {
- "group": 0,
- "letter": "~",
- "scan": 49,
- "state": 1
- },
- {
- "group": 0,
- "letter": "!",
- "scan": 10,
- "state": 1
- },
- {
- "group": 0,
- "letter": "!",
- "scan": 10,
- "state": 1
- },
- {
- "group": 0,
- "letter": "@",
- "scan": 11,
- "state": 1
- },
- {
- "group": 0,
- "letter": "@",
- "scan": 11,
- "state": 1
- },
- {
- "group": 0,
- "letter": "#",
- "scan": 12,
- "state": 1
- },
- {
- "group": 0,
- "letter": "#",
- "scan": 12,
- "state": 1
- },
- {
- "group": 0,
- "letter": "$",
- "scan": 13,
- "state": 1
- },
- {
- "group": 0,
- "letter": "$",
- "scan": 13,
- "state": 1
- },
- {
- "group": 0,
- "letter": "%",
- "scan": 14,
- "state": 1
- },
- {
- "group": 0,
- "letter": "%",
- "scan": 14,
- "state": 1
- },
- {
- "group": 0,
- "letter": "^",
- "scan": 15,
- "state": 1
- },
- {
- "group": 0,
- "letter": "^",
- "scan": 15,
- "state": 1
- },
- {
- "group": 0,
- "letter": "&",
- "scan": 16,
- "state": 1
- },
- {
- "group": 0,
- "letter": "&",
- "scan": 16,
- "state": 1
- },
- {
- "group": 0,
- "letter": "*",
- "scan": 17,
- "state": 1
- },
- {
- "group": 0,
- "letter": "*",
- "scan": 17,
- "state": 1
- },
- {
- "group": 0,
- "letter": "(",
- "scan": 18,
- "state": 1
- },
- {
- "group": 0,
- "letter": "(",
- "scan": 18,
- "state": 1
- },
- {
- "group": 0,
- "letter": ")",
- "scan": 19,
- "state": 1
- },
- {
- "group": 0,
- "letter": ")",
- "scan": 19,
- "state": 1
- },
- {
- "group": 0,
- "letter": "_",
- "scan": 20,
- "state": 1
- },
- {
- "group": 0,
- "letter": "_",
- "scan": 20,
- "state": 1
- },
- {
- "group": 0,
- "letter": "+",
- "scan": 21,
- "state": 1
- },
- {
- "group": 0,
- "letter": "+",
- "scan": 21,
- "state": 1
- },
- {
- "group": 0,
- "letter": "Q",
- "scan": 24,
- "state": 1
- },
- {
- "group": 0,
- "letter": "Q",
- "scan": 24,
- "state": 1
- },
- {
- "group": 0,
- "letter": "W",
- "scan": 25,
- "state": 1
- },
- {
- "group": 0,
- "letter": "W",
- "scan": 25,
- "state": 1
- },
- {
- "group": 0,
- "letter": "E",
- "scan": 26,
- "state": 1
- },
- {
- "group": 0,
- "letter": "E",
- "scan": 26,
- "state": 1
- },
- {
- "group": 0,
- "letter": "R",
- "scan": 27,
- "state": 1
- },
- {
- "group": 0,
- "letter": "R",
- "scan": 27,
- "state": 1
- },
- {
- "group": 0,
- "letter": "T",
- "scan": 28,
- "state": 1
- },
- {
- "group": 0,
- "letter": "T",
- "scan": 28,
- "state": 1
- },
- {
- "group": 0,
- "letter": "Y",
- "scan": 29,
- "state": 1
- },
- {
- "group": 0,
- "letter": "Y",
- "scan": 29,
- "state": 1
- },
- {
- "group": 0,
- "letter": "U",
- "scan": 30,
- "state": 1
- },
- {
- "group": 0,
- "letter": "U",
- "scan": 30,
- "state": 1
- },
- {
- "group": 0,
- "letter": "I",
- "scan": 31,
- "state": 1
- },
- {
- "group": 0,
- "letter": "I",
- "scan": 31,
- "state": 1
- },
- {
- "group": 0,
- "letter": "O",
- "scan": 32,
- "state": 1
- },
- {
- "group": 0,
- "letter": "O",
- "scan": 32,
- "state": 1
- },
- {
- "group": 0,
- "letter": "P",
- "scan": 33,
- "state": 1
- },
- {
- "group": 0,
- "letter": "P",
- "scan": 33,
- "state": 1
- },
- {
- "group": 0,
- "letter": "{",
- "scan": 34,
- "state": 1
- },
- {
- "group": 0,
- "letter": "{",
- "scan": 34,
- "state": 1
- },
- {
- "group": 0,
- "letter": "}",
- "scan": 35,
- "state": 1
- },
- {
- "group": 0,
- "letter": "}",
- "scan": 35,
- "state": 1
- },
- {
- "group": 0,
- "letter": "A",
- "scan": 38,
- "state": 1
- },
- {
- "group": 0,
- "letter": "A",
- "scan": 38,
- "state": 1
- },
- {
- "group": 0,
- "letter": "S",
- "scan": 39,
- "state": 1
- },
- {
- "group": 0,
- "letter": "S",
- "scan": 39,
- "state": 1
- },
- {
- "group": 0,
- "letter": "D",
- "scan": 40,
- "state": 1
- },
- {
- "group": 0,
- "letter": "D",
- "scan": 40,
- "state": 1
- },
- {
- "group": 0,
- "letter": "F",
- "scan": 41,
- "state": 1
- },
- {
- "group": 0,
- "letter": "F",
- "scan": 41,
- "state": 1
- },
- {
- "group": 0,
- "letter": "G",
- "scan": 42,
- "state": 1
- },
- {
- "group": 0,
- "letter": "G",
- "scan": 42,
- "state": 1
- },
- {
- "group": 0,
- "letter": "H",
- "scan": 43,
- "state": 1
- },
- {
- "group": 0,
- "letter": "H",
- "scan": 43,
- "state": 1
- },
- {
- "group": 0,
- "letter": "J",
- "scan": 44,
- "state": 1
- },
- {
- "group": 0,
- "letter": "J",
- "scan": 44,
- "state": 1
- },
- {
- "group": 0,
- "letter": "K",
- "scan": 45,
- "state": 1
- },
- {
- "group": 0,
- "letter": "K",
- "scan": 45,
- "state": 1
- },
- {
- "group": 0,
- "letter": "L",
- "scan": 46,
- "state": 1
- },
- {
- "group": 0,
- "letter": "L",
- "scan": 46,
- "state": 1
- },
- {
- "group": 0,
- "letter": ":",
- "scan": 47,
- "state": 1
- },
- {
- "group": 0,
- "letter": ":",
- "scan": 47,
- "state": 1
- },
- {
- "group": 0,
- "letter": "\"",
- "scan": 48,
- "state": 1
- },
- {
- "group": 0,
- "letter": "\"",
- "scan": 48,
- "state": 1
- },
- {
- "group": 0,
- "letter": "|",
- "scan": 51,
- "state": 1
- },
- {
- "group": 0,
- "letter": "|",
- "scan": 51,
- "state": 1
- },
- {
- "group": 0,
- "letter": "Z",
- "scan": 52,
- "state": 1
- },
- {
- "group": 0,
- "letter": "Z",
- "scan": 52,
- "state": 1
- },
- {
- "group": 0,
- "letter": "X",
- "scan": 53,
- "state": 1
- },
- {
- "group": 0,
- "letter": "X",
- "scan": 53,
- "state": 1
- },
- {
- "group": 0,
- "letter": "C",
- "scan": 54,
- "state": 1
- },
- {
- "group": 0,
- "letter": "C",
- "scan": 54,
- "state": 1
- },
- {
- "group": 0,
- "letter": "V",
- "scan": 55,
- "state": 1
- },
- {
- "group": 0,
- "letter": "V",
- "scan": 55,
- "state": 1
- },
- {
- "group": 0,
- "letter": "B",
- "scan": 56,
- "state": 1
- },
- {
- "group": 0,
- "letter": "B",
- "scan": 56,
- "state": 1
- },
- {
- "group": 0,
- "letter": "N",
- "scan": 57,
- "state": 1
- },
- {
- "group": 0,
- "letter": "N",
- "scan": 57,
- "state": 1
- },
- {
- "group": 0,
- "letter": "M",
- "scan": 58,
- "state": 1
- },
- {
- "group": 0,
- "letter": "M",
- "scan": 58,
- "state": 1
- },
- {
- "group": 0,
- "letter": "<",
- "scan": 59,
- "state": 1
- },
- {
- "group": 0,
- "letter": "<",
- "scan": 59,
- "state": 1
- },
- {
- "group": 0,
- "letter": ">",
- "scan": 60,
- "state": 1
- },
- {
- "group": 0,
- "letter": ">",
- "scan": 60,
- "state": 1
- },
- {
- "group": 0,
- "letter": "?",
- "scan": 61,
- "state": 1
- },
- {
- "group": 0,
- "letter": "?",
- "scan": 61,
- "state": 1
- },
- {
- "group": 0,
- "letter": "\u00a1",
- "scan": 10,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00a1",
- "scan": 10,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00ac",
- "scan": 11,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00ac",
- "scan": 11,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0300",
- "scan": 12,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0300",
- "scan": 12,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0301",
- "scan": 13,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0301",
- "scan": 13,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0306",
- "scan": 14,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0306",
- "scan": 14,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u030a",
- "scan": 15,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u030a",
- "scan": 15,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0302",
- "scan": 16,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0302",
- "scan": 16,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u030c",
- "scan": 17,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u030c",
- "scan": 17,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0307",
- "scan": 18,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0307",
- "scan": 18,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0308",
- "scan": 19,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0308",
- "scan": 19,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0304",
- "scan": 20,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0304",
- "scan": 20,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0303",
- "scan": 21,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0303",
- "scan": 21,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u03c9",
- "scan": 24,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u03c9",
- "scan": 24,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00f8",
- "scan": 25,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00f8",
- "scan": 25,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0153",
- "scan": 26,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0153",
- "scan": 26,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0327",
- "scan": 27,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0327",
- "scan": 27,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u032e",
- "scan": 28,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u032e",
- "scan": 28,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0325",
- "scan": 29,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0325",
- "scan": 29,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u032d",
- "scan": 30,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u032d",
- "scan": 30,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u032c",
- "scan": 31,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u032c",
- "scan": 31,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0323",
- "scan": 32,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0323",
- "scan": 32,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0324",
- "scan": 33,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0324",
- "scan": 33,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0331",
- "scan": 34,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0331",
- "scan": 34,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0330",
- "scan": 35,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u0330",
- "scan": 35,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00e6",
- "scan": 38,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00e6",
- "scan": 38,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00df",
- "scan": 39,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00df",
- "scan": 39,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00f0",
- "scan": 40,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00f0",
- "scan": 40,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00fe",
- "scan": 41,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00fe",
- "scan": 41,
- "state": 128
- },
- {
- "group": 0,
- "letter": "g",
- "scan": 42,
- "state": 128
- },
- {
- "group": 0,
- "letter": "g",
- "scan": 42,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00a3",
- "scan": 43,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00a3",
- "scan": 43,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u20ac",
- "scan": 44,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u20ac",
- "scan": 44,
- "state": 128
- },
- {
- "group": 0,
- "letter": "k",
- "scan": 45,
- "state": 128
- },
- {
- "group": 0,
- "letter": "k",
- "scan": 45,
- "state": 128
- },
- {
- "group": 0,
- "letter": "l",
- "scan": 46,
- "state": 128
- },
- {
- "group": 0,
- "letter": "l",
- "scan": 46,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00ba",
- "scan": 47,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00ba",
- "scan": 47,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00a4",
- "scan": 48,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00a4",
- "scan": 48,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00a7",
- "scan": 51,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00a7",
- "scan": 51,
- "state": 128
- },
- {
- "group": 0,
- "letter": "z",
- "scan": 52,
- "state": 128
- },
- {
- "group": 0,
- "letter": "z",
- "scan": 52,
- "state": 128
- },
- {
- "group": 0,
- "letter": "x",
- "scan": 53,
- "state": 128
- },
- {
- "group": 0,
- "letter": "x",
- "scan": 53,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00e7",
- "scan": 54,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00e7",
- "scan": 54,
- "state": 128
- },
- {
- "group": 0,
- "letter": "v",
- "scan": 55,
- "state": 128
- },
- {
- "group": 0,
- "letter": "v",
- "scan": 55,
- "state": 128
- },
- {
- "group": 0,
- "letter": "b",
- "scan": 56,
- "state": 128
- },
- {
- "group": 0,
- "letter": "b",
- "scan": 56,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00f1",
- "scan": 57,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00f1",
- "scan": 57,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00b5",
- "scan": 58,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00b5",
- "scan": 58,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00ab",
- "scan": 59,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00ab",
- "scan": 59,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00bb",
- "scan": 60,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00bb",
- "scan": 60,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00bf",
- "scan": 61,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00bf",
- "scan": 61,
- "state": 128
- },
- {
- "group": 0,
- "letter": "\u00a1",
- "scan": 10,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00a1",
- "scan": 10,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00ac",
- "scan": 11,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00ac",
- "scan": 11,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0300",
- "scan": 12,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0300",
- "scan": 12,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0301",
- "scan": 13,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0301",
- "scan": 13,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0306",
- "scan": 14,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0306",
- "scan": 14,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u030a",
- "scan": 15,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u030a",
- "scan": 15,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0302",
- "scan": 16,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0302",
- "scan": 16,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u030c",
- "scan": 17,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u030c",
- "scan": 17,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0307",
- "scan": 18,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0307",
- "scan": 18,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0308",
- "scan": 19,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0308",
- "scan": 19,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0304",
- "scan": 20,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0304",
- "scan": 20,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0303",
- "scan": 21,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0303",
- "scan": 21,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u03a9",
- "scan": 24,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u03a9",
- "scan": 24,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00d8",
- "scan": 25,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00d8",
- "scan": 25,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0152",
- "scan": 26,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0152",
- "scan": 26,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0327",
- "scan": 27,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0327",
- "scan": 27,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u032e",
- "scan": 28,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u032e",
- "scan": 28,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0325",
- "scan": 29,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0325",
- "scan": 29,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u032d",
- "scan": 30,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u032d",
- "scan": 30,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u032c",
- "scan": 31,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u032c",
- "scan": 31,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0323",
- "scan": 32,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0323",
- "scan": 32,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0324",
- "scan": 33,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0324",
- "scan": 33,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0331",
- "scan": 34,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0331",
- "scan": 34,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0330",
- "scan": 35,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u0330",
- "scan": 35,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00c6",
- "scan": 38,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00c6",
- "scan": 38,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u1e9c",
- "scan": 39,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u1e9c",
- "scan": 39,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00d0",
- "scan": 40,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00d0",
- "scan": 40,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00de",
- "scan": 41,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00de",
- "scan": 41,
- "state": 129
- },
- {
- "group": 0,
- "letter": "G",
- "scan": 42,
- "state": 129
- },
- {
- "group": 0,
- "letter": "G",
- "scan": 42,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00a3",
- "scan": 43,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00a3",
- "scan": 43,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u20ac",
- "scan": 44,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u20ac",
- "scan": 44,
- "state": 129
- },
- {
- "group": 0,
- "letter": "K",
- "scan": 45,
- "state": 129
- },
- {
- "group": 0,
- "letter": "K",
- "scan": 45,
- "state": 129
- },
- {
- "group": 0,
- "letter": "L",
- "scan": 46,
- "state": 129
- },
- {
- "group": 0,
- "letter": "L",
- "scan": 46,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00aa",
- "scan": 47,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00aa",
- "scan": 47,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00a4",
- "scan": 48,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00a4",
- "scan": 48,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00a7",
- "scan": 51,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00a7",
- "scan": 51,
- "state": 129
- },
- {
- "group": 0,
- "letter": "Z",
- "scan": 52,
- "state": 129
- },
- {
- "group": 0,
- "letter": "Z",
- "scan": 52,
- "state": 129
- },
- {
- "group": 0,
- "letter": "X",
- "scan": 53,
- "state": 129
- },
- {
- "group": 0,
- "letter": "X",
- "scan": 53,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00c7",
- "scan": 54,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00c7",
- "scan": 54,
- "state": 129
- },
- {
- "group": 0,
- "letter": "V",
- "scan": 55,
- "state": 129
- },
- {
- "group": 0,
- "letter": "V",
- "scan": 55,
- "state": 129
- },
- {
- "group": 0,
- "letter": "B",
- "scan": 56,
- "state": 129
- },
- {
- "group": 0,
- "letter": "B",
- "scan": 56,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00d1",
- "scan": 57,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00d1",
- "scan": 57,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00b5",
- "scan": 58,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00b5",
- "scan": 58,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00ab",
- "scan": 59,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00ab",
- "scan": 59,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00bb",
- "scan": 60,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00bb",
- "scan": 60,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00bf",
- "scan": 61,
- "state": 129
- },
- {
- "group": 0,
- "letter": "\u00bf",
- "scan": 61,
- "state": 129
- }
-] \ No newline at end of file
+{
+ "scan10": "1",
+ "scan10 altgr": "¡",
+ "scan10 shift": "!",
+ "scan10 shift altgr": "¡",
+ "scan11": "2",
+ "scan11 altgr": "¬",
+ "scan11 shift": "@",
+ "scan11 shift altgr": "¬",
+ "scan12": "3",
+ "scan12 altgr": "̀",
+ "scan12 shift": "#",
+ "scan12 shift altgr": "̀",
+ "scan13": "4",
+ "scan13 altgr": "́",
+ "scan13 shift": "$",
+ "scan13 shift altgr": "́",
+ "scan14": "5",
+ "scan14 altgr": "̆",
+ "scan14 shift": "%",
+ "scan14 shift altgr": "̆",
+ "scan15": "6",
+ "scan15 altgr": "̊",
+ "scan15 shift": "^",
+ "scan15 shift altgr": "̊",
+ "scan16": "7",
+ "scan16 altgr": "̂",
+ "scan16 shift": "&",
+ "scan16 shift altgr": "̂",
+ "scan17": "8",
+ "scan17 altgr": "̌",
+ "scan17 shift": "*",
+ "scan17 shift altgr": "̌",
+ "scan18": "9",
+ "scan18 altgr": "̇",
+ "scan18 shift": "(",
+ "scan18 shift altgr": "̇",
+ "scan19": "0",
+ "scan19 altgr": "̈",
+ "scan19 shift": ")",
+ "scan19 shift altgr": "̈",
+ "scan20": "-",
+ "scan20 altgr": "̄",
+ "scan20 shift": "_",
+ "scan20 shift altgr": "̄",
+ "scan21": "=",
+ "scan21 altgr": "̃",
+ "scan21 shift": "+",
+ "scan21 shift altgr": "̃",
+ "scan24": "q",
+ "scan24 altgr": "ω",
+ "scan24 shift": "Q",
+ "scan24 shift altgr": "Ω",
+ "scan25": "w",
+ "scan25 altgr": "ø",
+ "scan25 shift": "W",
+ "scan25 shift altgr": "Ø",
+ "scan26": "e",
+ "scan26 altgr": "œ",
+ "scan26 shift": "E",
+ "scan26 shift altgr": "Œ",
+ "scan27": "r",
+ "scan27 altgr": "̧",
+ "scan27 shift": "R",
+ "scan27 shift altgr": "̧",
+ "scan28": "t",
+ "scan28 altgr": "̮",
+ "scan28 shift": "T",
+ "scan28 shift altgr": "̮",
+ "scan29": "y",
+ "scan29 altgr": "̥",
+ "scan29 shift": "Y",
+ "scan29 shift altgr": "̥",
+ "scan30": "u",
+ "scan30 altgr": "̭",
+ "scan30 shift": "U",
+ "scan30 shift altgr": "̭",
+ "scan31": "i",
+ "scan31 altgr": "̬",
+ "scan31 shift": "I",
+ "scan31 shift altgr": "̬",
+ "scan32": "o",
+ "scan32 altgr": "̣",
+ "scan32 shift altgr": "̣",
+ "scan33": "p",
+ "scan33 altgr": "̤",
+ "scan33 shift": "P",
+ "scan33 shift altgr": "̤",
+ "scan34": "[",
+ "scan34 altgr": "̱",
+ "scan34 shift": "{",
+ "scan34 shift altgr": "̱",
+ "scan35": "]",
+ "scan35 altgr": "̰",
+ "scan35 shift": "}",
+ "scan35 shift altgr": "̰",
+ "scan36 altgr": "\r",
+ "scan38": "a",
+ "scan38 altgr": "æ",
+ "scan38 shift": "A",
+ "scan38 shift altgr": "Æ",
+ "scan39": "s",
+ "scan39 altgr": "ß",
+ "scan39 shift": "S",
+ "scan39 shift altgr": "ẜ",
+ "scan40": "d",
+ "scan40 altgr": "ð",
+ "scan40 shift": "D",
+ "scan40 shift altgr": "Ð",
+ "scan41": "f",
+ "scan41 altgr": "þ",
+ "scan41 shift": "F",
+ "scan41 shift altgr": "Þ",
+ "scan42": "g",
+ "scan42 altgr": "g",
+ "scan42 shift": "G",
+ "scan42 shift altgr": "G",
+ "scan43": "h",
+ "scan43 altgr": "£",
+ "scan43 shift": "H",
+ "scan43 shift altgr": "£",
+ "scan44": "j",
+ "scan44 altgr": "€",
+ "scan44 shift": "J",
+ "scan44 shift altgr": "€",
+ "scan45": "k",
+ "scan45 altgr": "k",
+ "scan45 shift": "K",
+ "scan45 shift altgr": "K",
+ "scan46": "l",
+ "scan46 altgr": "l",
+ "scan46 shift": "L",
+ "scan46 shift altgr": "L",
+ "scan47": ";",
+ "scan47 altgr": "º",
+ "scan47 shift": ":",
+ "scan47 shift altgr": "ª",
+ "scan48": "'",
+ "scan48 altgr": "¤",
+ "scan48 shift": "\"",
+ "scan48 shift altgr": "¤",
+ "scan49": "`",
+ "scan49 shift": "~",
+ "scan51": "\\",
+ "scan51 altgr": "§",
+ "scan51 shift": "|",
+ "scan51 shift altgr": "§",
+ "scan52": "z",
+ "scan52 altgr": "z",
+ "scan52 shift": "Z",
+ "scan52 shift altgr": "Z",
+ "scan53": "x",
+ "scan53 altgr": "x",
+ "scan53 shift": "X",
+ "scan53 shift altgr": "X",
+ "scan54": "c",
+ "scan54 altgr": "ç",
+ "scan54 shift": "C",
+ "scan54 shift altgr": "Ç",
+ "scan55": "v",
+ "scan55 altgr": "v",
+ "scan55 shift": "V",
+ "scan55 shift altgr": "V",
+ "scan56": "b",
+ "scan56 altgr": "b",
+ "scan56 shift": "B",
+ "scan56 shift altgr": "B",
+ "scan57": "n",
+ "scan57 altgr": "ñ",
+ "scan57 shift": "N",
+ "scan57 shift altgr": "Ñ",
+ "scan58": "m",
+ "scan58 altgr": "µ",
+ "scan58 shift": "M",
+ "scan58 shift altgr": "µ",
+ "scan59": ",",
+ "scan59 altgr": "«",
+ "scan59 shift": "<",
+ "scan59 shift altgr": "«",
+ "scan60": ".",
+ "scan60 altgr": "»",
+ "scan60 shift": ">",
+ "scan60 shift altgr": "»",
+ "scan61": "/",
+ "scan61 altgr": "¿",
+ "scan61 shift": "?",
+ "scan61 shift altgr": "¿"
+} \ No newline at end of file
diff --git a/lessons/ne_NP/ne_NP.key b/lessons/ne_NP/ne_NP.key
index 4dc84da..e87c51b 100644
--- a/lessons/ne_NP/ne_NP.key
+++ b/lessons/ne_NP/ne_NP.key
@@ -1,2282 +1,190 @@
-[
- {
- "group": 0,
- "letter": "`",
- "scan": 49,
- "state": 0
- },
- {
- "group": 0,
- "letter": "`",
- "scan": 49,
- "state": 0
- },
- {
- "group": 0,
- "letter": "1",
- "scan": 10,
- "state": 0
- },
- {
- "group": 0,
- "letter": "1",
- "scan": 10,
- "state": 0
- },
- {
- "group": 0,
- "letter": "2",
- "scan": 11,
- "state": 0
- },
- {
- "group": 0,
- "letter": "2",
- "scan": 11,
- "state": 0
- },
- {
- "group": 0,
- "letter": "3",
- "scan": 12,
- "state": 0
- },
- {
- "group": 0,
- "letter": "3",
- "scan": 12,
- "state": 0
- },
- {
- "group": 0,
- "letter": "4",
- "scan": 13,
- "state": 0
- },
- {
- "group": 0,
- "letter": "4",
- "scan": 13,
- "state": 0
- },
- {
- "group": 0,
- "letter": "5",
- "scan": 14,
- "state": 0
- },
- {
- "group": 0,
- "letter": "5",
- "scan": 14,
- "state": 0
- },
- {
- "group": 0,
- "letter": "6",
- "scan": 15,
- "state": 0
- },
- {
- "group": 0,
- "letter": "6",
- "scan": 15,
- "state": 0
- },
- {
- "group": 0,
- "letter": "7",
- "scan": 16,
- "state": 0
- },
- {
- "group": 0,
- "letter": "7",
- "scan": 16,
- "state": 0
- },
- {
- "group": 0,
- "letter": "8",
- "scan": 17,
- "state": 0
- },
- {
- "group": 0,
- "letter": "8",
- "scan": 17,
- "state": 0
- },
- {
- "group": 0,
- "letter": "9",
- "scan": 18,
- "state": 0
- },
- {
- "group": 0,
- "letter": "9",
- "scan": 18,
- "state": 0
- },
- {
- "group": 0,
- "letter": "0",
- "scan": 19,
- "state": 0
- },
- {
- "group": 0,
- "letter": "0",
- "scan": 19,
- "state": 0
- },
- {
- "group": 0,
- "letter": "-",
- "scan": 20,
- "state": 0
- },
- {
- "group": 0,
- "letter": "-",
- "scan": 20,
- "state": 0
- },
- {
- "group": 0,
- "letter": "=",
- "scan": 21,
- "state": 0
- },
- {
- "group": 0,
- "letter": "=",
- "scan": 21,
- "state": 0
- },
- {
- "group": 0,
- "letter": "q",
- "scan": 24,
- "state": 0
- },
- {
- "group": 0,
- "letter": "q",
- "scan": 24,
- "state": 0
- },
- {
- "group": 0,
- "letter": "w",
- "scan": 25,
- "state": 0
- },
- {
- "group": 0,
- "letter": "w",
- "scan": 25,
- "state": 0
- },
- {
- "group": 0,
- "letter": "e",
- "scan": 26,
- "state": 0
- },
- {
- "group": 0,
- "letter": "e",
- "scan": 26,
- "state": 0
- },
- {
- "group": 0,
- "letter": "r",
- "scan": 27,
- "state": 0
- },
- {
- "group": 0,
- "letter": "r",
- "scan": 27,
- "state": 0
- },
- {
- "group": 0,
- "letter": "t",
- "scan": 28,
- "state": 0
- },
- {
- "group": 0,
- "letter": "t",
- "scan": 28,
- "state": 0
- },
- {
- "group": 0,
- "letter": "y",
- "scan": 29,
- "state": 0
- },
- {
- "group": 0,
- "letter": "y",
- "scan": 29,
- "state": 0
- },
- {
- "group": 0,
- "letter": "u",
- "scan": 30,
- "state": 0
- },
- {
- "group": 0,
- "letter": "u",
- "scan": 30,
- "state": 0
- },
- {
- "group": 0,
- "letter": "i",
- "scan": 31,
- "state": 0
- },
- {
- "group": 0,
- "letter": "i",
- "scan": 31,
- "state": 0
- },
- {
- "group": 0,
- "letter": "o",
- "scan": 32,
- "state": 0
- },
- {
- "group": 0,
- "letter": "o",
- "scan": 32,
- "state": 0
- },
- {
- "group": 0,
- "letter": "p",
- "scan": 33,
- "state": 0
- },
- {
- "group": 0,
- "letter": "p",
- "scan": 33,
- "state": 0
- },
- {
- "group": 0,
- "letter": "[",
- "scan": 34,
- "state": 0
- },
- {
- "group": 0,
- "letter": "[",
- "scan": 34,
- "state": 0
- },
- {
- "group": 0,
- "letter": "]",
- "scan": 35,
- "state": 0
- },
- {
- "group": 0,
- "letter": "]",
- "scan": 35,
- "state": 0
- },
- {
- "group": 0,
- "letter": "a",
- "scan": 38,
- "state": 0
- },
- {
- "group": 0,
- "letter": "a",
- "scan": 38,
- "state": 0
- },
- {
- "group": 0,
- "letter": "s",
- "scan": 39,
- "state": 0
- },
- {
- "group": 0,
- "letter": "s",
- "scan": 39,
- "state": 0
- },
- {
- "group": 0,
- "letter": "d",
- "scan": 40,
- "state": 0
- },
- {
- "group": 0,
- "letter": "d",
- "scan": 40,
- "state": 0
- },
- {
- "group": 0,
- "letter": "f",
- "scan": 41,
- "state": 0
- },
- {
- "group": 0,
- "letter": "f",
- "scan": 41,
- "state": 0
- },
- {
- "group": 0,
- "letter": "g",
- "scan": 42,
- "state": 0
- },
- {
- "group": 0,
- "letter": "g",
- "scan": 42,
- "state": 0
- },
- {
- "group": 0,
- "letter": "h",
- "scan": 43,
- "state": 0
- },
- {
- "group": 0,
- "letter": "h",
- "scan": 43,
- "state": 0
- },
- {
- "group": 0,
- "letter": "j",
- "scan": 44,
- "state": 0
- },
- {
- "group": 0,
- "letter": "j",
- "scan": 44,
- "state": 0
- },
- {
- "group": 0,
- "letter": "k",
- "scan": 45,
- "state": 0
- },
- {
- "group": 0,
- "letter": "k",
- "scan": 45,
- "state": 0
- },
- {
- "group": 0,
- "letter": "l",
- "scan": 46,
- "state": 0
- },
- {
- "group": 0,
- "letter": "l",
- "scan": 46,
- "state": 0
- },
- {
- "group": 0,
- "letter": ";",
- "scan": 47,
- "state": 0
- },
- {
- "group": 0,
- "letter": ";",
- "scan": 47,
- "state": 0
- },
- {
- "group": 0,
- "letter": "'",
- "scan": 48,
- "state": 0
- },
- {
- "group": 0,
- "letter": "'",
- "scan": 48,
- "state": 0
- },
- {
- "group": 0,
- "letter": "\\",
- "scan": 51,
- "state": 0
- },
- {
- "group": 0,
- "letter": "\\",
- "scan": 51,
- "state": 0
- },
- {
- "group": 0,
- "letter": "z",
- "scan": 52,
- "state": 0
- },
- {
- "group": 0,
- "letter": "z",
- "scan": 52,
- "state": 0
- },
- {
- "group": 0,
- "letter": "x",
- "scan": 53,
- "state": 0
- },
- {
- "group": 0,
- "letter": "x",
- "scan": 53,
- "state": 0
- },
- {
- "group": 0,
- "letter": "c",
- "scan": 54,
- "state": 0
- },
- {
- "group": 0,
- "letter": "c",
- "scan": 54,
- "state": 0
- },
- {
- "group": 0,
- "letter": "v",
- "scan": 55,
- "state": 0
- },
- {
- "group": 0,
- "letter": "v",
- "scan": 55,
- "state": 0
- },
- {
- "group": 0,
- "letter": "b",
- "scan": 56,
- "state": 0
- },
- {
- "group": 0,
- "letter": "b",
- "scan": 56,
- "state": 0
- },
- {
- "group": 0,
- "letter": "n",
- "scan": 57,
- "state": 0
- },
- {
- "group": 0,
- "letter": "n",
- "scan": 57,
- "state": 0
- },
- {
- "group": 0,
- "letter": "m",
- "scan": 58,
- "state": 0
- },
- {
- "group": 0,
- "letter": "m",
- "scan": 58,
- "state": 0
- },
- {
- "group": 0,
- "letter": ",",
- "scan": 59,
- "state": 0
- },
- {
- "group": 0,
- "letter": ",",
- "scan": 59,
- "state": 0
- },
- {
- "group": 0,
- "letter": ".",
- "scan": 60,
- "state": 0
- },
- {
- "group": 0,
- "letter": ".",
- "scan": 60,
- "state": 0
- },
- {
- "group": 0,
- "letter": "/",
- "scan": 61,
- "state": 0
- },
- {
- "group": 0,
- "letter": "/",
- "scan": 61,
- "state": 0
- },
- {
- "group": 0,
- "letter": "~",
- "scan": 49,
- "state": 1
- },
- {
- "group": 0,
- "letter": "~",
- "scan": 49,
- "state": 1
- },
- {
- "group": 0,
- "letter": "!",
- "scan": 10,
- "state": 1
- },
- {
- "group": 0,
- "letter": "!",
- "scan": 10,
- "state": 1
- },
- {
- "group": 0,
- "letter": "@",
- "scan": 11,
- "state": 1
- },
- {
- "group": 0,
- "letter": "@",
- "scan": 11,
- "state": 1
- },
- {
- "group": 0,
- "letter": "#",
- "scan": 12,
- "state": 1
- },
- {
- "group": 0,
- "letter": "#",
- "scan": 12,
- "state": 1
- },
- {
- "group": 0,
- "letter": "$",
- "scan": 13,
- "state": 1
- },
- {
- "group": 0,
- "letter": "$",
- "scan": 13,
- "state": 1
- },
- {
- "group": 0,
- "letter": "%",
- "scan": 14,
- "state": 1
- },
- {
- "group": 0,
- "letter": "%",
- "scan": 14,
- "state": 1
- },
- {
- "group": 0,
- "letter": "^",
- "scan": 15,
- "state": 1
- },
- {
- "group": 0,
- "letter": "^",
- "scan": 15,
- "state": 1
- },
- {
- "group": 0,
- "letter": "&",
- "scan": 16,
- "state": 1
- },
- {
- "group": 0,
- "letter": "&",
- "scan": 16,
- "state": 1
- },
- {
- "group": 0,
- "letter": "*",
- "scan": 17,
- "state": 1
- },
- {
- "group": 0,
- "letter": "*",
- "scan": 17,
- "state": 1
- },
- {
- "group": 0,
- "letter": ")",
- "scan": 19,
- "state": 1
- },
- {
- "group": 0,
- "letter": ")",
- "scan": 19,
- "state": 1
- },
- {
- "group": 0,
- "letter": "*",
- "scan": 17,
- "state": 1
- },
- {
- "group": 0,
- "letter": "*",
- "scan": 17,
- "state": 1
- },
- {
- "group": 0,
- "letter": "(",
- "scan": 18,
- "state": 1
- },
- {
- "group": 0,
- "letter": "(",
- "scan": 18,
- "state": 1
- },
- {
- "group": 0,
- "letter": "_",
- "scan": 20,
- "state": 1
- },
- {
- "group": 0,
- "letter": "_",
- "scan": 20,
- "state": 1
- },
- {
- "group": 0,
- "letter": "+",
- "scan": 21,
- "state": 1
- },
- {
- "group": 0,
- "letter": "+",
- "scan": 21,
- "state": 1
- },
- {
- "group": 0,
- "letter": "Q",
- "scan": 24,
- "state": 1
- },
- {
- "group": 0,
- "letter": "Q",
- "scan": 24,
- "state": 1
- },
- {
- "group": 0,
- "letter": "W",
- "scan": 25,
- "state": 1
- },
- {
- "group": 0,
- "letter": "W",
- "scan": 25,
- "state": 1
- },
- {
- "group": 0,
- "letter": "E",
- "scan": 26,
- "state": 1
- },
- {
- "group": 0,
- "letter": "E",
- "scan": 26,
- "state": 1
- },
- {
- "group": 0,
- "letter": "R",
- "scan": 27,
- "state": 1
- },
- {
- "group": 0,
- "letter": "R",
- "scan": 27,
- "state": 1
- },
- {
- "group": 0,
- "letter": "T",
- "scan": 28,
- "state": 1
- },
- {
- "group": 0,
- "letter": "T",
- "scan": 28,
- "state": 1
- },
- {
- "group": 0,
- "letter": "Y",
- "scan": 29,
- "state": 1
- },
- {
- "group": 0,
- "letter": "Y",
- "scan": 29,
- "state": 1
- },
- {
- "group": 0,
- "letter": "U",
- "scan": 30,
- "state": 1
- },
- {
- "group": 0,
- "letter": "U",
- "scan": 30,
- "state": 1
- },
- {
- "group": 0,
- "letter": "I",
- "scan": 31,
- "state": 1
- },
- {
- "group": 0,
- "letter": "I",
- "scan": 31,
- "state": 1
- },
- {
- "group": 0,
- "letter": "O",
- "scan": 32,
- "state": 1
- },
- {
- "group": 0,
- "letter": "O",
- "scan": 32,
- "state": 1
- },
- {
- "group": 0,
- "letter": "P",
- "scan": 33,
- "state": 1
- },
- {
- "group": 0,
- "letter": "P",
- "scan": 33,
- "state": 1
- },
- {
- "group": 0,
- "letter": "{",
- "scan": 34,
- "state": 1
- },
- {
- "group": 0,
- "letter": "{",
- "scan": 34,
- "state": 1
- },
- {
- "group": 0,
- "letter": "}",
- "scan": 35,
- "state": 1
- },
- {
- "group": 0,
- "letter": "}",
- "scan": 35,
- "state": 1
- },
- {
- "group": 0,
- "letter": "A",
- "scan": 38,
- "state": 1
- },
- {
- "group": 0,
- "letter": "A",
- "scan": 38,
- "state": 1
- },
- {
- "group": 0,
- "letter": "S",
- "scan": 39,
- "state": 1
- },
- {
- "group": 0,
- "letter": "S",
- "scan": 39,
- "state": 1
- },
- {
- "group": 0,
- "letter": "D",
- "scan": 40,
- "state": 1
- },
- {
- "group": 0,
- "letter": "D",
- "scan": 40,
- "state": 1
- },
- {
- "group": 0,
- "letter": "F",
- "scan": 41,
- "state": 1
- },
- {
- "group": 0,
- "letter": "F",
- "scan": 41,
- "state": 1
- },
- {
- "group": 0,
- "letter": "G",
- "scan": 42,
- "state": 1
- },
- {
- "group": 0,
- "letter": "G",
- "scan": 42,
- "state": 1
- },
- {
- "group": 0,
- "letter": "H",
- "scan": 43,
- "state": 1
- },
- {
- "group": 0,
- "letter": "H",
- "scan": 43,
- "state": 1
- },
- {
- "group": 0,
- "letter": "J",
- "scan": 44,
- "state": 1
- },
- {
- "group": 0,
- "letter": "J",
- "scan": 44,
- "state": 1
- },
- {
- "group": 0,
- "letter": "K",
- "scan": 45,
- "state": 1
- },
- {
- "group": 0,
- "letter": "K",
- "scan": 45,
- "state": 1
- },
- {
- "group": 0,
- "letter": "L",
- "scan": 46,
- "state": 1
- },
- {
- "group": 0,
- "letter": "L",
- "scan": 46,
- "state": 1
- },
- {
- "group": 0,
- "letter": ":",
- "scan": 47,
- "state": 1
- },
- {
- "group": 0,
- "letter": ":",
- "scan": 47,
- "state": 1
- },
- {
- "group": 0,
- "letter": "\"",
- "scan": 48,
- "state": 1
- },
- {
- "group": 0,
- "letter": "\"",
- "scan": 48,
- "state": 1
- },
- {
- "group": 0,
- "letter": "|",
- "scan": 51,
- "state": 1
- },
- {
- "group": 0,
- "letter": "|",
- "scan": 51,
- "state": 1
- },
- {
- "group": 0,
- "letter": "Z",
- "scan": 52,
- "state": 1
- },
- {
- "group": 0,
- "letter": "Z",
- "scan": 52,
- "state": 1
- },
- {
- "group": 0,
- "letter": "X",
- "scan": 53,
- "state": 1
- },
- {
- "group": 0,
- "letter": "X",
- "scan": 53,
- "state": 1
- },
- {
- "group": 0,
- "letter": "C",
- "scan": 54,
- "state": 1
- },
- {
- "group": 0,
- "letter": "C",
- "scan": 54,
- "state": 1
- },
- {
- "group": 0,
- "letter": "V",
- "scan": 55,
- "state": 1
- },
- {
- "group": 0,
- "letter": "V",
- "scan": 55,
- "state": 1
- },
- {
- "group": 0,
- "letter": "B",
- "scan": 56,
- "state": 1
- },
- {
- "group": 0,
- "letter": "B",
- "scan": 56,
- "state": 1
- },
- {
- "group": 0,
- "letter": "N",
- "scan": 57,
- "state": 1
- },
- {
- "group": 0,
- "letter": "N",
- "scan": 57,
- "state": 1
- },
- {
- "group": 0,
- "letter": "M",
- "scan": 58,
- "state": 1
- },
- {
- "group": 0,
- "letter": "M",
- "scan": 58,
- "state": 1
- },
- {
- "group": 0,
- "letter": "<",
- "scan": 59,
- "state": 1
- },
- {
- "group": 0,
- "letter": "<",
- "scan": 59,
- "state": 1
- },
- {
- "group": 0,
- "letter": ">",
- "scan": 60,
- "state": 1
- },
- {
- "group": 0,
- "letter": ">",
- "scan": 60,
- "state": 1
- },
- {
- "group": 0,
- "letter": "?",
- "scan": 61,
- "state": 1
- },
- {
- "group": 0,
- "letter": "?",
- "scan": 61,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u091e",
- "scan": 49,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u091e",
- "scan": 49,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0967",
- "scan": 10,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0967",
- "scan": 10,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0968",
- "scan": 11,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0968",
- "scan": 11,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0969",
- "scan": 12,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0969",
- "scan": 12,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u096a",
- "scan": 13,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u096a",
- "scan": 13,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u096b",
- "scan": 14,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u096b",
- "scan": 14,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u096c",
- "scan": 15,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u096c",
- "scan": 15,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u096d",
- "scan": 16,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u096d",
- "scan": 16,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u096e",
- "scan": 17,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u096e",
- "scan": 17,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u096f",
- "scan": 18,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u096f",
- "scan": 18,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0966",
- "scan": 19,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0966",
- "scan": 19,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0913",
- "scan": 20,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0913",
- "scan": 20,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u200c",
- "scan": 21,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u200c",
- "scan": 21,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\udbbf\udffb",
- "scan": 24,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\udbbf\udffb",
- "scan": 24,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0927",
- "scan": 25,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0927",
- "scan": 25,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u092d",
- "scan": 26,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u092d",
- "scan": 26,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u091a",
- "scan": 27,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u091a",
- "scan": 27,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0924",
- "scan": 28,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0924",
- "scan": 28,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0925",
- "scan": 29,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0925",
- "scan": 29,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0917",
- "scan": 30,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0917",
- "scan": 30,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0937",
- "scan": 31,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0937",
- "scan": 31,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u092f",
- "scan": 32,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u092f",
- "scan": 32,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0909",
- "scan": 33,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0909",
- "scan": 33,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\udbbf\udff4",
- "scan": 34,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\udbbf\udff4",
- "scan": 34,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0947",
- "scan": 35,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0947",
- "scan": 35,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u092c",
- "scan": 38,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u092c",
- "scan": 38,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0915",
- "scan": 39,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0915",
- "scan": 39,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u092e",
- "scan": 40,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u092e",
- "scan": 40,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0901",
- "scan": 41,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0901",
- "scan": 41,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0928",
- "scan": 42,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0928",
- "scan": 42,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u091c",
- "scan": 43,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u091c",
- "scan": 43,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0935",
- "scan": 44,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0935",
- "scan": 44,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u092a",
- "scan": 45,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u092a",
- "scan": 45,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u093f",
- "scan": 46,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u093f",
- "scan": 46,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0938",
- "scan": 47,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0938",
- "scan": 47,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0941",
- "scan": 48,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0941",
- "scan": 48,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u094d",
- "scan": 51,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u094d",
- "scan": 51,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0936",
- "scan": 52,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0936",
- "scan": 52,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0939",
- "scan": 53,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0939",
- "scan": 53,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0905",
- "scan": 54,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0905",
- "scan": 54,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0916",
- "scan": 55,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0916",
- "scan": 55,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0926",
- "scan": 56,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0926",
- "scan": 56,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0932",
- "scan": 57,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0932",
- "scan": 57,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0903",
- "scan": 58,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0903",
- "scan": 58,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u093d",
- "scan": 59,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u093d",
- "scan": 59,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0964",
- "scan": 60,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0964",
- "scan": 60,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0930",
- "scan": 61,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0930",
- "scan": 61,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u0965",
- "scan": 49,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0965",
- "scan": 49,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udffd",
- "scan": 10,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udffd",
- "scan": 10,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0908",
- "scan": 11,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0908",
- "scan": 11,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0918",
- "scan": 12,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0918",
- "scan": 12,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udffc",
- "scan": 13,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udffc",
- "scan": 13,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u091b",
- "scan": 14,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u091b",
- "scan": 14,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u091f",
- "scan": 15,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u091f",
- "scan": 15,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0920",
- "scan": 16,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0920",
- "scan": 16,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0921",
- "scan": 17,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0921",
- "scan": 17,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0922",
- "scan": 18,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0922",
- "scan": 18,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0923",
- "scan": 19,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0923",
- "scan": 19,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0914",
- "scan": 20,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0914",
- "scan": 20,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0902",
- "scan": 21,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0902",
- "scan": 21,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udffa",
- "scan": 24,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udffa",
- "scan": 24,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udff9",
- "scan": 25,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udff9",
- "scan": 25,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0910",
- "scan": 26,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0910",
- "scan": 26,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udff8",
- "scan": 27,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udff8",
- "scan": 27,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udff7",
- "scan": 28,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udff7",
- "scan": 28,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udff6",
- "scan": 29,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udff6",
- "scan": 29,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u090a",
- "scan": 30,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u090a",
- "scan": 30,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udff5",
- "scan": 31,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udff5",
- "scan": 31,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0907",
- "scan": 32,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0907",
- "scan": 32,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u090f",
- "scan": 33,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u090f",
- "scan": 33,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0943",
- "scan": 34,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0943",
- "scan": 34,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0948",
- "scan": 35,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0948",
- "scan": 35,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0906",
- "scan": 38,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0906",
- "scan": 38,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udff3",
- "scan": 39,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udff3",
- "scan": 39,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udff2",
- "scan": 40,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udff2",
- "scan": 40,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u093e",
- "scan": 41,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u093e",
- "scan": 41,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udff1",
- "scan": 42,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udff1",
- "scan": 42,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u091d",
- "scan": 43,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u091d",
- "scan": 43,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u094b",
- "scan": 44,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u094b",
- "scan": 44,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u092b",
- "scan": 45,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u092b",
- "scan": 45,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0940",
- "scan": 46,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0940",
- "scan": 46,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udff0",
- "scan": 47,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udff0",
- "scan": 47,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0942",
- "scan": 48,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0942",
- "scan": 48,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u200d",
- "scan": 51,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u200d",
- "scan": 51,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udfef",
- "scan": 52,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udfef",
- "scan": 52,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udfee",
- "scan": 53,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udfee",
- "scan": 53,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u090b",
- "scan": 54,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u090b",
- "scan": 54,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0950",
- "scan": 55,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0950",
- "scan": 55,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u094c",
- "scan": 56,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u094c",
- "scan": 56,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udfed",
- "scan": 57,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udfed",
- "scan": 57,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udfec",
- "scan": 58,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udfec",
- "scan": 58,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0919",
- "scan": 59,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u0919",
- "scan": 59,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udfeb",
- "scan": 60,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udfeb",
- "scan": 60,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udfea",
- "scan": 61,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\udbbf\udfea",
- "scan": 61,
- "state": 1
- },
- {
- "group": 1,
- "letter": "\u200c",
- "scan": 21,
- "state": 0
- },
- {
- "group": 1,
- "letter": "\u200c",
- "scan": 21,
- "state": 0
- }
-] \ No newline at end of file
+{
+ "scan10": "1",
+ "scan10 group1": "१",
+ "scan10 shift": "!",
+ "scan10 shift group1": "󿿽",
+ "scan11": "2",
+ "scan11 group1": "२",
+ "scan11 shift": "@",
+ "scan11 shift group1": "ई",
+ "scan12": "3",
+ "scan12 group1": "३",
+ "scan12 shift": "#",
+ "scan12 shift group1": "घ",
+ "scan13": "4",
+ "scan13 group1": "४",
+ "scan13 shift": "$",
+ "scan13 shift group1": "󿿼",
+ "scan14": "5",
+ "scan14 group1": "५",
+ "scan14 shift": "%",
+ "scan14 shift group1": "छ",
+ "scan15": "6",
+ "scan15 group1": "६",
+ "scan15 shift": "^",
+ "scan15 shift group1": "ट",
+ "scan16": "7",
+ "scan16 group1": "७",
+ "scan16 shift": "&",
+ "scan16 shift group1": "ठ",
+ "scan17": "8",
+ "scan17 group1": "८",
+ "scan17 shift": "*",
+ "scan17 shift group1": "ड",
+ "scan18": "9",
+ "scan18 group1": "९",
+ "scan18 shift": "(",
+ "scan18 shift group1": "ढ",
+ "scan19": "0",
+ "scan19 group1": "०",
+ "scan19 shift": ")",
+ "scan19 shift group1": "ण",
+ "scan20": "-",
+ "scan20 group1": "ओ",
+ "scan20 shift": "_",
+ "scan20 shift group1": "औ",
+ "scan21": "=",
+ "scan21 group1": "‌",
+ "scan21 shift": "+",
+ "scan21 shift group1": "ं",
+ "scan24": "q",
+ "scan24 group1": "󿿻",
+ "scan24 shift": "Q",
+ "scan24 shift group1": "󿿺",
+ "scan25": "w",
+ "scan25 group1": "ध",
+ "scan25 shift": "W",
+ "scan25 shift group1": "󿿹",
+ "scan26": "e",
+ "scan26 group1": "भ",
+ "scan26 shift": "E",
+ "scan26 shift group1": "ऐ",
+ "scan27": "r",
+ "scan27 group1": "च",
+ "scan27 shift": "R",
+ "scan27 shift group1": "󿿸",
+ "scan28": "t",
+ "scan28 group1": "त",
+ "scan28 shift": "T",
+ "scan28 shift group1": "󿿷",
+ "scan29": "y",
+ "scan29 group1": "थ",
+ "scan29 shift": "Y",
+ "scan29 shift group1": "󿿶",
+ "scan30": "u",
+ "scan30 group1": "ग",
+ "scan30 shift": "U",
+ "scan30 shift group1": "ऊ",
+ "scan31": "i",
+ "scan31 group1": "ष",
+ "scan31 shift": "I",
+ "scan31 shift group1": "󿿵",
+ "scan32": "o",
+ "scan32 group1": "य",
+ "scan32 shift": "O",
+ "scan32 shift group1": "इ",
+ "scan33": "p",
+ "scan33 group1": "उ",
+ "scan33 shift": "P",
+ "scan33 shift group1": "ए",
+ "scan34": "[",
+ "scan34 group1": "󿿴",
+ "scan34 shift": "{",
+ "scan34 shift group1": "ृ",
+ "scan35": "]",
+ "scan35 group1": "े",
+ "scan35 shift": "}",
+ "scan35 shift group1": "ै",
+ "scan38": "a",
+ "scan38 group1": "ब",
+ "scan38 shift": "A",
+ "scan38 shift group1": "आ",
+ "scan39": "s",
+ "scan39 group1": "क",
+ "scan39 shift": "S",
+ "scan39 shift group1": "󿿳",
+ "scan40": "d",
+ "scan40 group1": "म",
+ "scan40 shift": "D",
+ "scan40 shift group1": "󿿲",
+ "scan41": "f",
+ "scan41 group1": "ँ",
+ "scan41 shift": "F",
+ "scan41 shift group1": "ा",
+ "scan42": "g",
+ "scan42 group1": "न",
+ "scan42 shift": "G",
+ "scan42 shift group1": "󿿱",
+ "scan43": "h",
+ "scan43 group1": "ज",
+ "scan43 shift": "H",
+ "scan43 shift group1": "झ",
+ "scan44": "j",
+ "scan44 group1": "व",
+ "scan44 shift": "J",
+ "scan44 shift group1": "ो",
+ "scan45": "k",
+ "scan45 group1": "प",
+ "scan45 shift": "K",
+ "scan45 shift group1": "फ",
+ "scan46": "l",
+ "scan46 group1": "ि",
+ "scan46 shift": "L",
+ "scan46 shift group1": "ी",
+ "scan47": ";",
+ "scan47 group1": "स",
+ "scan47 shift": ":",
+ "scan47 shift group1": "󿿰",
+ "scan48": "'",
+ "scan48 group1": "ु",
+ "scan48 shift": "\"",
+ "scan48 shift group1": "ू",
+ "scan49": "`",
+ "scan49 group1": "ञ",
+ "scan49 shift": "~",
+ "scan49 shift group1": "॥",
+ "scan51": "\\",
+ "scan51 group1": "्",
+ "scan51 shift": "|",
+ "scan51 shift group1": "‍",
+ "scan52": "z",
+ "scan52 group1": "श",
+ "scan52 shift": "Z",
+ "scan52 shift group1": "󿿯",
+ "scan53": "x",
+ "scan53 group1": "ह",
+ "scan53 shift": "X",
+ "scan53 shift group1": "󿿮",
+ "scan54": "c",
+ "scan54 group1": "अ",
+ "scan54 shift": "C",
+ "scan54 shift group1": "ऋ",
+ "scan55": "v",
+ "scan55 group1": "ख",
+ "scan55 shift": "V",
+ "scan55 shift group1": "ॐ",
+ "scan56": "b",
+ "scan56 group1": "द",
+ "scan56 shift": "B",
+ "scan56 shift group1": "ौ",
+ "scan57": "n",
+ "scan57 group1": "ल",
+ "scan57 shift": "N",
+ "scan57 shift group1": "󿿭",
+ "scan58": "m",
+ "scan58 group1": "ः",
+ "scan58 shift": "M",
+ "scan58 shift group1": "󿿬",
+ "scan59": ",",
+ "scan59 group1": "ऽ",
+ "scan59 shift": "<",
+ "scan59 shift group1": "ङ",
+ "scan60": ".",
+ "scan60 group1": "।",
+ "scan60 shift": ">",
+ "scan60 shift group1": "󿿫",
+ "scan61": "/",
+ "scan61 group1": "र",
+ "scan61 shift": "?",
+ "scan61 shift group1": "󿿪"
+} \ No newline at end of file
diff --git a/lessonscreen.py b/lessonscreen.py
index 4e52579..7e16e87 100644
--- a/lessonscreen.py
+++ b/lessonscreen.py
@@ -125,10 +125,15 @@ class LessonScreen(gtk.VBox):
frame.add(self.lessonscroll)
self.keyboard = keyboard.KeyboardWidget(self.keyboard_images, self.activity)
- self.keyboard.set_layout(keyboard.OLPC_LAYOUT)
+ # Attempt to load a letter map for the current locale.
code = locale.getdefaultlocale()[0]
- self.keyboard.load_key_map('lessons/%s/%s.key' % (code, code))
+ try:
+ self.keyboard.load_letter_map('lessons/%s/%s.key' % (code, code))
+ except:
+ self.keyboard.load_letter_map('lessons/en_US/en_US.key' % (code, code))
+
+ self.keyboard.set_layout(keyboard.OLPC_LAYOUT)
self.pack_start(hbox, False, False, 10)
self.pack_start(frame, True, True)