From 0c77bd45f2f8867b92e8d34c20f9acd573f8ba41 Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Thu, 27 Jan 2011 19:06:59 +0900 Subject: [PATCH] Don't embed native keycode/keysym values in XML layout data. --- eek/Makefile.am | 32 +- eek/eek-keysym.c | 90 +- eek/eek-keysym.h | 4 + eek/eek-xml-layout.c | 30 +- eek/eek-xml.c | 25 +- ...keysym-labels.py => gen-keysym-entries.py} | 2 +- ...-labels.txt => keyname-keysym-entries.txt} | 0 ...-labels.txt => special-keysym-entries.txt} | 0 ...-labels.txt => unicode-keysym-entries.txt} | 0 tests/eek-xml-test.c | 2 +- tests/test-keyboard.xml | 1037 +++++++++++++++++ 11 files changed, 1158 insertions(+), 64 deletions(-) rename eek/{gen-keysym-labels.py => gen-keysym-entries.py} (95%) rename eek/{keyname-keysym-labels.txt => keyname-keysym-entries.txt} (100%) rename eek/{special-keysym-labels.txt => special-keysym-entries.txt} (100%) rename eek/{unicode-keysym-labels.txt => unicode-keysym-entries.txt} (100%) create mode 100644 tests/test-keyboard.xml diff --git a/eek/Makefile.am b/eek/Makefile.am index c78ae8e9..6bfa328e 100644 --- a/eek/Makefile.am +++ b/eek/Makefile.am @@ -41,9 +41,9 @@ libeek_public_headers = \ libeek_private_headers = \ $(srcdir)/eek-renderer.h \ $(srcdir)/eek-xml-layout.h \ - $(srcdir)/eek-special-keysym-labels.h \ - $(srcdir)/eek-unicode-keysym-labels.h \ - $(srcdir)/eek-keyname-keysym-labels.h \ + $(srcdir)/eek-special-keysym-entries.h \ + $(srcdir)/eek-unicode-keysym-entries.h \ + $(srcdir)/eek-keyname-keysym-entries.h \ $(srcdir)/eek-marshallers.h libeek_sources = \ @@ -61,9 +61,9 @@ libeek_sources = \ $(srcdir)/eek-keyboard-drawing.c libeek_keysym_sources = \ - $(srcdir)/eek-special-keysym-labels.h \ - $(srcdir)/eek-unicode-keysym-labels.h \ - $(srcdir)/eek-keyname-keysym-labels.h + $(srcdir)/eek-special-keysym-entries.h \ + $(srcdir)/eek-unicode-keysym-entries.h \ + $(srcdir)/eek-keyname-keysym-entries.h libeek_enumtypes_sources = \ $(srcdir)/eek-enumtypes.c \ @@ -152,12 +152,12 @@ noinst_HEADERS = \ $(libeek_xkb_private_headers) \ $(libeek_xkl_private_headers) -eek-special-keysym-labels.h: special-keysym-labels.txt - $(PYTHON) ./gen-keysym-labels.py special_keysym_labels < $< > $@ -eek-unicode-keysym-labels.h: unicode-keysym-labels.txt - $(PYTHON) ./gen-keysym-labels.py unicode_keysym_labels < $< > $@ -eek-keyname-keysym-labels.h: keyname-keysym-labels.txt - $(PYTHON) ./gen-keysym-labels.py keyname_keysym_labels < $< > $@ +eek-special-keysym-entries.h: special-keysym-entries.txt + $(PYTHON) ./gen-keysym-entries.py special_keysym_entries < $< > $@ +eek-unicode-keysym-entries.h: unicode-keysym-entries.txt + $(PYTHON) ./gen-keysym-entries.py unicode_keysym_entries < $< > $@ +eek-keyname-keysym-entries.h: keyname-keysym-entries.txt + $(PYTHON) ./gen-keysym-entries.py keyname_keysym_entries < $< > $@ # gen marshal eek-marshallers.h: eek-marshallers.list @@ -187,10 +187,10 @@ DISTCLEANFILES = \ $(pkgconfig_DATA) EXTRA_DIST = \ - gen-keysym-labels.py \ - special-keysym-labels.txt \ - unicode-keysym-labels.txt \ - keyname-keysym-labels.txt \ + gen-keysym-entries.py \ + special-keysym-entries.txt \ + unicode-keysym-entries.txt \ + keyname-keysym-entries.txt \ eek-marshallers.list -include $(INTROSPECTION_MAKEFILE) diff --git a/eek/eek-keysym.c b/eek/eek-keysym.c index f098f9fb..e3ef4909 100644 --- a/eek/eek-keysym.c +++ b/eek/eek-keysym.c @@ -31,15 +31,16 @@ #endif /* HAVE_CONFIG_H */ #include "eek-keysym.h" -struct eek_keysym_label { +struct _EekKeysymEntry { guint keysym; const gchar *label; EekKeysymCategory category; }; +typedef struct _EekKeysymEntry EekKeysymEntry; -#include "eek-special-keysym-labels.h" -#include "eek-unicode-keysym-labels.h" -#include "eek-keyname-keysym-labels.h" +#include "eek-special-keysym-entries.h" +#include "eek-unicode-keysym-entries.h" +#include "eek-keyname-keysym-entries.h" static gchar * unichar_to_utf8 (gunichar uc) @@ -57,9 +58,9 @@ unichar_to_utf8 (gunichar uc) } static int -keysym_label_compare (const void *key0, const void *key1) +keysym_entry_compare_keysym (const void *key0, const void *key1) { - const struct eek_keysym_label *entry0 = key0, *entry1 = key1; + const EekKeysymEntry *entry0 = key0, *entry1 = key1; return (gint)entry0->keysym - (gint)entry1->keysym; } @@ -68,15 +69,15 @@ find_keysym (guint keysym, gchar **label, EekKeysymCategory *category) { - struct eek_keysym_label bsearch_key, *bsearch_val; + EekKeysymEntry bsearch_key, *bsearch_val; /* First, search special keysyms. */ bsearch_key.keysym = keysym; bsearch_val = bsearch (&bsearch_key, - special_keysym_labels, - G_N_ELEMENTS(special_keysym_labels), - sizeof (struct eek_keysym_label), - keysym_label_compare); + special_keysym_entries, + G_N_ELEMENTS(special_keysym_entries), + sizeof (EekKeysymEntry), + keysym_entry_compare_keysym); if (bsearch_val) { if (label) *label = g_strdup (bsearch_val->label); @@ -108,10 +109,10 @@ find_keysym (guint keysym, /* Search known unicode keysyms. */ bsearch_key.keysym = keysym; bsearch_val = bsearch (&bsearch_key, - unicode_keysym_labels, - G_N_ELEMENTS(unicode_keysym_labels), - sizeof (struct eek_keysym_label), - keysym_label_compare); + unicode_keysym_entries, + G_N_ELEMENTS(unicode_keysym_entries), + sizeof (EekKeysymEntry), + keysym_entry_compare_keysym); if (bsearch_val) { if (label) *label = g_strdup (bsearch_val->label); @@ -123,10 +124,10 @@ find_keysym (guint keysym, /* Finally, search keynames. */ bsearch_key.keysym = keysym; bsearch_val = bsearch (&bsearch_key, - keyname_keysym_labels, - G_N_ELEMENTS(keyname_keysym_labels), - sizeof (struct eek_keysym_label), - keysym_label_compare); + keyname_keysym_entries, + G_N_ELEMENTS(keyname_keysym_entries), + sizeof (EekKeysymEntry), + keysym_entry_compare_keysym); if (bsearch_val) { if (label) *label = g_strdup (bsearch_val->label); @@ -154,6 +155,57 @@ eek_keysym_to_string (guint keysym) return g_strdup (""); } +gchar * +eek_xkeysym_to_string (guint xkeysym) +{ + EekKeysymEntry bsearch_key, *bsearch_val; + + bsearch_key.keysym = xkeysym; + bsearch_val = bsearch (&bsearch_key, + keyname_keysym_entries, + G_N_ELEMENTS(keyname_keysym_entries), + sizeof (EekKeysymEntry), + keysym_entry_compare_keysym); + if (bsearch_val) + return g_strdup (bsearch_val->label); + return NULL; +} + +static GHashTable *xkeysym_hash = NULL; + +static void +xkeysym_free (gpointer xkeysym) +{ + g_slice_free (guint, xkeysym); +} + +guint +eek_xkeysym_from_string (gchar *string) +{ + guint *xkeysym; + + if (!xkeysym_hash) { + gint i; + + xkeysym_hash = g_hash_table_new_full (g_str_hash, + g_str_equal, + g_free, + xkeysym_free); + for (i = 0; i < G_N_ELEMENTS(keyname_keysym_entries); i++) { + xkeysym = g_slice_new (guint); + *xkeysym = keyname_keysym_entries[i].keysym; + g_hash_table_insert (xkeysym_hash, + g_strdup (keyname_keysym_entries[i].label), + xkeysym); + } + } + + xkeysym = g_hash_table_lookup (xkeysym_hash, string); + if (xkeysym) + return *xkeysym; + return EEK_INVALID_KEYSYM; +} + /** * eek_keysym_get_category: * @keysym: keysym ID diff --git a/eek/eek-keysym.h b/eek/eek-keysym.h index 68868ddf..5bdf0d10 100644 --- a/eek/eek-keysym.h +++ b/eek/eek-keysym.h @@ -56,6 +56,10 @@ typedef enum { } EekKeysymCategory; gchar *eek_keysym_to_string (guint keysym); + +gchar *eek_xkeysym_to_string (guint xkeysym); +guint eek_xkeysym_from_string (gchar *string); + EekKeysymCategory eek_keysym_get_category (guint keysym); typedef enum diff --git a/eek/eek-xml-layout.c b/eek/eek-xml-layout.c index 3809e9ac..fd8f072a 100644 --- a/eek/eek-xml-layout.c +++ b/eek/eek-xml-layout.c @@ -86,12 +86,12 @@ static const gchar *valid_path_list[] = { "key/section/keyboard", "bounds/key/section/keyboard", "outline-ref/key/section/keyboard", - "keysyms/key/section/keyboard", - "keycode/key/section/keyboard", + "symbols/key/section/keyboard", + "groups/symbols/key/section/keyboard", + "levels/symbols/key/section/keyboard", + "xkeysym/symbols/key/section/keyboard", + "invalid/symbols/key/section/keyboard", "index/key/section/keyboard", - "groups/keysyms/key/section/keyboard", - "levels/keysyms/key/section/keyboard", - "keysym/keysyms/key/section/keyboard", "point/outline/keyboard" }; @@ -204,7 +204,7 @@ start_element_callback (GMarkupParseContext *pcontext, goto out; } - if (g_strcmp0 (element_name, "keysyms") == 0) { + if (g_strcmp0 (element_name, "symbols") == 0) { data->groups = groups; data->levels = levels; data->keysyms = NULL; @@ -252,15 +252,15 @@ end_element_callback (GMarkupParseContext *pcontext, goto out; } - if (g_strcmp0 (element_name, "keysyms") == 0) { + if (g_strcmp0 (element_name, "symbols") == 0) { gint num_keysyms = data->groups * data->levels; guint *keysyms = g_slice_alloc0 (sizeof(guint) * num_keysyms); head = data->keysyms = g_slist_reverse (data->keysyms); for (i = 0; i < num_keysyms; i++) { - if (head) { - keysyms[i] = *(guint *)head->data; - g_slice_free (guint, head->data); + if (head && head->data) { + keysyms[i] = eek_xkeysym_from_string (head->data); + g_free (head->data); head = g_slist_next (head); } else keysyms[i] = EEK_INVALID_KEYSYM; @@ -376,11 +376,13 @@ end_element_callback (GMarkupParseContext *pcontext, goto out; } - if (g_strcmp0 (element_name, "keysym") == 0) { - guint *keysym = g_slice_new(guint); + if (g_strcmp0 (element_name, "xkeysym") == 0) { + data->keysyms = g_slist_prepend (data->keysyms, g_strdup (text)); + goto out; + } - *keysym = strtoul (text, NULL, 10); - data->keysyms = g_slist_prepend (data->keysyms, keysym); + if (g_strcmp0 (element_name, "invalid") == 0) { + data->keysyms = g_slist_prepend (data->keysyms, NULL); goto out; } diff --git a/eek/eek-xml.c b/eek/eek-xml.c index ed20d323..811d3952 100644 --- a/eek/eek-xml.c +++ b/eek/eek-xml.c @@ -108,10 +108,6 @@ output_key_callback (EekElement *element, gpointer user_data) i); } - g_string_append_indent (data->output, data->indent + 1); - g_string_markup_printf (data->output, "%u\n", - eek_key_get_keycode (EEK_KEY(element))); - eek_key_get_keysyms (EEK_KEY(element), NULL, &num_groups, &num_levels); num_keysyms = num_groups * num_levels; if (num_keysyms > 0) { @@ -119,25 +115,28 @@ output_key_callback (EekElement *element, gpointer user_data) eek_key_get_keysyms (EEK_KEY(element), &keysyms, NULL, NULL); g_string_append_indent (data->output, data->indent + 1); g_string_markup_printf (data->output, - "\n", + "\n", num_groups, num_levels); for (i = 0; i < num_groups * num_levels; i++) { g_string_append_indent (data->output, data->indent + 2); if (keysyms[i] != EEK_INVALID_KEYSYM) { - gchar *name = eek_keysym_to_string (keysyms[i]); + gchar *name = eek_xkeysym_to_string (keysyms[i]); - g_string_markup_printf (data->output, - "%u\n", - name, keysyms[i]); - g_free (name); + if (name) { + g_string_markup_printf (data->output, + "%s\n", + name); + g_free (name); + } else + g_string_markup_printf (data->output, + "\n"); } else g_string_markup_printf (data->output, - "%u\n", - keysyms[i]); + "\n"); } g_string_append_indent (data->output, data->indent + 1); - g_string_markup_printf (data->output, "\n"); + g_string_markup_printf (data->output, "\n"); g_slice_free1 (num_keysyms * sizeof(guint), keysyms); } diff --git a/eek/gen-keysym-labels.py b/eek/gen-keysym-entries.py similarity index 95% rename from eek/gen-keysym-labels.py rename to eek/gen-keysym-entries.py index 0bb0ec97..889ca7ed 100755 --- a/eek/gen-keysym-labels.py +++ b/eek/gen-keysym-entries.py @@ -32,7 +32,7 @@ for line in sys.stdin: if match: table[int(match.group(1), 16)] = (match.group(2), match.group(3)) -sys.stdout.write("static const struct eek_keysym_label %s[] = {\n" % +sys.stdout.write("static const EekKeysymEntry %s[] = {\n" % sys.argv[1]) for index, (keysym, (l, c)) in enumerate([(keysym, table[keysym]) diff --git a/eek/keyname-keysym-labels.txt b/eek/keyname-keysym-entries.txt similarity index 100% rename from eek/keyname-keysym-labels.txt rename to eek/keyname-keysym-entries.txt diff --git a/eek/special-keysym-labels.txt b/eek/special-keysym-entries.txt similarity index 100% rename from eek/special-keysym-labels.txt rename to eek/special-keysym-entries.txt diff --git a/eek/unicode-keysym-labels.txt b/eek/unicode-keysym-entries.txt similarity index 100% rename from eek/unicode-keysym-labels.txt rename to eek/unicode-keysym-entries.txt diff --git a/tests/eek-xml-test.c b/tests/eek-xml-test.c index 52694d44..5ddef8ca 100644 --- a/tests/eek-xml-test.c +++ b/tests/eek-xml-test.c @@ -41,7 +41,7 @@ test_output_parse (void) eek_keyboard_output (keyboard, output, 0); g_object_unref (keyboard); -#if 0 +#if 1 fwrite (output->str, sizeof(gchar), output->len, stdout); #endif diff --git a/tests/test-keyboard.xml b/tests/test-keyboard.xml new file mode 100644 index 00000000..a30553f9 --- /dev/null +++ b/tests/test-keyboard.xml @@ -0,0 +1,1037 @@ + + + 0.000000,0.000000,640.000000,245.000000 +
+ 512.000000,83.000000,104.000000,129.000000 + 0 + + 4 + 1 + + + 4 + 1 + + + 3 + 1 + + + 4 + 1 + + + 2 + 1 + + + 54.000000,104.000000,24.000000,24.000000 + outline0 + + KP_Delete + KP_Decimal + + + + 2.000000,104.000000,50.000000,24.000000 + outline1 + + KP_Insert + KP_0 + + + + 80.000000,78.000000,24.000000,50.000000 + outline2 + + KP_Enter + + + + 54.000000,78.000000,24.000000,24.000000 + outline0 + + KP_Next + KP_3 + + + + 28.000000,78.000000,24.000000,24.000000 + outline0 + + KP_Down + KP_2 + + + + 2.000000,78.000000,24.000000,24.000000 + outline0 + + KP_End + KP_1 + + + + 54.000000,53.000000,24.000000,24.000000 + outline0 + + KP_Right + KP_6 + + + + 28.000000,53.000000,24.000000,24.000000 + outline0 + + KP_Begin + KP_5 + + + + 2.000000,53.000000,24.000000,24.000000 + outline0 + + KP_Left + KP_4 + + + + 80.000000,27.000000,24.000000,50.000000 + outline2 + + KP_Add + + + + + 54.000000,27.000000,24.000000,24.000000 + outline0 + + KP_Prior + KP_9 + + + + 28.000000,27.000000,24.000000,24.000000 + outline0 + + KP_Up + KP_8 + + + + 2.000000,27.000000,24.000000,24.000000 + outline0 + + KP_Home + KP_7 + + + + 80.000000,1.000000,24.000000,24.000000 + outline0 + + KP_Subtract + + + + + 54.000000,1.000000,24.000000,24.000000 + outline0 + + KP_Multiply + + + + + 28.000000,1.000000,24.000000,24.000000 + outline0 + + KP_Divide + + + + + 2.000000,1.000000,24.000000,24.000000 + outline0 + + Num_Lock + Pointer_EnableKeys + + +
+
+ 424.000000,83.000000,78.000000,129.000000 + 0 + + 3 + 1 + + + 3 + 1 + + + 1 + 1 + + + 3 + 1 + + + 54.000000,104.000000,24.000000,24.000000 + outline0 + + Right + + + + 28.000000,104.000000,24.000000,24.000000 + outline0 + + Down + + + + 2.000000,104.000000,24.000000,24.000000 + outline0 + + Left + + + + 28.000000,78.000000,24.000000,24.000000 + outline0 + + Up + + + + 54.000000,27.000000,24.000000,24.000000 + outline0 + + Next + + + + 28.000000,27.000000,24.000000,24.000000 + outline0 + + End + + + + 2.000000,27.000000,24.000000,24.000000 + outline0 + + Delete + + + + 54.000000,1.000000,24.000000,24.000000 + outline0 + + Prior + + + + 28.000000,1.000000,24.000000,24.000000 + outline0 + + Home + + + + 2.000000,1.000000,24.000000,24.000000 + outline0 + + Insert + + +
+
+ 25.000000,83.000000,390.000000,129.000000 + 0 + + 14 + 1 + + + 14 + 1 + + + 13 + 1 + + + 12 + 1 + + + 8 + 1 + + + 359.000000,104.000000,31.000000,24.000000 + outline3 + + Control_R + + + + 326.000000,104.000000,31.000000,24.000000 + outline3 + + Menu + + + + 294.000000,104.000000,31.000000,24.000000 + outline3 + + Super_R + + + + 261.000000,104.000000,31.000000,24.000000 + outline3 + + Alt_R + Meta_R + Alt_R + Meta_R + ISO_Level3_Shift + + + + + 106.000000,104.000000,153.000000,24.000000 + outline4 + + space + + + + 73.000000,104.000000,31.000000,24.000000 + outline3 + + Alt_L + Meta_L + + + + 40.000000,104.000000,31.000000,24.000000 + outline3 + + Super_L + + + + 2.000000,104.000000,36.000000,24.000000 + outline5 + + Control_L + + + + 320.000000,78.000000,70.000000,24.000000 + outline6 + + Shift_R + + + + 294.000000,78.000000,24.000000,24.000000 + outline0 + + slash + question + + + + 268.000000,78.000000,24.000000,24.000000 + outline0 + + period + greater + + + + 242.000000,78.000000,24.000000,24.000000 + outline0 + + comma + less + + + + 216.000000,78.000000,24.000000,24.000000 + outline0 + + m + M + + + + 190.000000,78.000000,24.000000,24.000000 + outline0 + + n + N + + + + 164.000000,78.000000,24.000000,24.000000 + outline0 + + b + B + + + + 138.000000,78.000000,24.000000,24.000000 + outline0 + + v + V + + + + 113.000000,78.000000,24.000000,24.000000 + outline0 + + c + C + + + + 87.000000,78.000000,24.000000,24.000000 + outline0 + + x + X + + + + 61.000000,78.000000,24.000000,24.000000 + outline0 + + z + Z + + + + 2.000000,78.000000,57.000000,24.000000 + outline7 + + Shift_L + + + + 333.000000,53.000000,57.000000,24.000000 + outline8 + + Return + + + + 307.000000,53.000000,24.000000,24.000000 + outline0 + + colon + asterisk + quoteright + quotedbl + quoteright + quotedbl + + + + 281.000000,53.000000,24.000000,24.000000 + outline0 + + semicolon + plus + semicolon + colon + semicolon + colon + + + + 256.000000,53.000000,24.000000,24.000000 + outline0 + + l + L + + + + 230.000000,53.000000,24.000000,24.000000 + outline0 + + k + K + + + + 204.000000,53.000000,24.000000,24.000000 + outline0 + + j + J + + + + 178.000000,53.000000,24.000000,24.000000 + outline0 + + h + H + + + + 152.000000,53.000000,24.000000,24.000000 + outline0 + + g + G + + + + 126.000000,53.000000,24.000000,24.000000 + outline0 + + f + F + + + + 100.000000,53.000000,24.000000,24.000000 + outline0 + + d + D + + + + 74.000000,53.000000,24.000000,24.000000 + outline0 + + s + S + + + + 49.000000,53.000000,24.000000,24.000000 + outline0 + + a + A + + + + 2.000000,53.000000,44.000000,24.000000 + outline9 + + Control_L + Control_L + + + + 352.000000,27.000000,38.000000,24.000000 + outline10 + + bracketright + braceright + backslash + bar + backslash + bar + + + + 326.000000,27.000000,24.000000,24.000000 + outline0 + + bracketleft + braceleft + bracketright + braceright + bracketright + braceright + + + + 300.000000,27.000000,24.000000,24.000000 + outline0 + + at + quoteleft + bracketleft + braceleft + bracketleft + braceleft + + + + 275.000000,27.000000,24.000000,24.000000 + outline0 + + p + P + + + + 249.000000,27.000000,24.000000,24.000000 + outline0 + + o + O + + + + 223.000000,27.000000,24.000000,24.000000 + outline0 + + i + I + + + + 197.000000,27.000000,24.000000,24.000000 + outline0 + + u + U + + + + 171.000000,27.000000,24.000000,24.000000 + outline0 + + y + Y + + + + 145.000000,27.000000,24.000000,24.000000 + outline0 + + t + T + + + + 119.000000,27.000000,24.000000,24.000000 + outline0 + + r + R + + + + 93.000000,27.000000,24.000000,24.000000 + outline0 + + e + E + + + + 68.000000,27.000000,24.000000,24.000000 + outline0 + + w + W + + + + 42.000000,27.000000,24.000000,24.000000 + outline0 + + q + Q + + + + 2.000000,27.000000,38.000000,24.000000 + outline11 + + Tab + ISO_Left_Tab + + + + 339.000000,1.000000,51.000000,24.000000 + outline12 + + BackSpace + + + + 313.000000,1.000000,24.000000,24.000000 + outline0 + + asciicircum + asciitilde + equal + plus + equal + plus + + + + 287.000000,1.000000,24.000000,24.000000 + outline0 + + minus + equal + minus + underscore + minus + underscore + + + + 261.000000,1.000000,24.000000,24.000000 + outline0 + + 0 + asciitilde + 0 + parenright + 0 + parenright + + + + 235.000000,1.000000,24.000000,24.000000 + outline0 + + 9 + parenright + 9 + parenleft + 9 + parenleft + + + + 209.000000,1.000000,24.000000,24.000000 + outline0 + + 8 + parenleft + 8 + asterisk + 8 + asterisk + + + + 183.000000,1.000000,24.000000,24.000000 + outline0 + + 7 + quoteright + 7 + ampersand + 7 + ampersand + + + + 157.000000,1.000000,24.000000,24.000000 + outline0 + + 6 + ampersand + 6 + asciicircum + 6 + asciicircum + + + + 132.000000,1.000000,24.000000,24.000000 + outline0 + + 5 + percent + + + 5 + percent + + + 5 + percent + EuroSign + + + + + 106.000000,1.000000,24.000000,24.000000 + outline0 + + 4 + dollar + + + + 80.000000,1.000000,24.000000,24.000000 + outline0 + + 3 + numbersign + + + + 54.000000,1.000000,24.000000,24.000000 + outline0 + + 2 + quotedbl + 2 + at + 2 + at + + + + 28.000000,1.000000,24.000000,24.000000 + outline0 + + 1 + exclam + + + + 2.000000,1.000000,24.000000,24.000000 + outline0 + + Zenkaku_Hankaku + Kanji + quoteleft + asciitilde + quoteleft + asciitilde + + +
+
+ 25.000000,29.000000,477.000000,25.000000 + 0 + + 16 + 1 + + + 453.000000,1.000000,24.000000,24.000000 + outline0 + + Pause + Break + + + + 427.000000,1.000000,24.000000,24.000000 + outline0 + + Scroll_Lock + + + + 401.000000,1.000000,24.000000,24.000000 + outline0 + + Print + Execute + + + + 366.000000,1.000000,24.000000,24.000000 + outline0 + + F12 + + + + + 340.000000,1.000000,24.000000,24.000000 + outline0 + + F11 + + + + + 314.000000,1.000000,24.000000,24.000000 + outline0 + + F10 + + + + + 288.000000,1.000000,24.000000,24.000000 + outline0 + + F9 + + + + + 249.000000,1.000000,24.000000,24.000000 + outline0 + + F8 + + + + + 223.000000,1.000000,24.000000,24.000000 + outline0 + + F7 + + + + + 197.000000,1.000000,24.000000,24.000000 + outline0 + + F6 + + + + + 171.000000,1.000000,24.000000,24.000000 + outline0 + + F5 + + + + + 132.000000,1.000000,24.000000,24.000000 + outline0 + + F4 + + + + + 106.000000,1.000000,24.000000,24.000000 + outline0 + + F3 + + + + + 80.000000,1.000000,24.000000,24.000000 + outline0 + + F2 + + + + + 54.000000,1.000000,24.000000,24.000000 + outline0 + + F1 + + + + + 2.000000,1.000000,24.000000,24.000000 + outline0 + + Escape + + +
+ + 0.000000,0.000000 + 24.000000,0.000000 + 24.000000,24.000000 + 0.000000,24.000000 + + + 0.000000,0.000000 + 50.000000,0.000000 + 50.000000,24.000000 + 0.000000,24.000000 + + + 0.000000,0.000000 + 24.000000,0.000000 + 24.000000,50.000000 + 0.000000,50.000000 + + + 0.000000,0.000000 + 31.000000,0.000000 + 31.000000,24.000000 + 0.000000,24.000000 + + + 0.000000,0.000000 + 153.000000,0.000000 + 153.000000,24.000000 + 0.000000,24.000000 + + + 0.000000,0.000000 + 36.000000,0.000000 + 36.000000,24.000000 + 0.000000,24.000000 + + + 0.000000,0.000000 + 70.000000,0.000000 + 70.000000,24.000000 + 0.000000,24.000000 + + + 0.000000,0.000000 + 57.000000,0.000000 + 57.000000,24.000000 + 0.000000,24.000000 + + + 0.000000,0.000000 + 57.000000,0.000000 + 57.000000,24.000000 + 0.000000,24.000000 + + + 0.000000,0.000000 + 44.000000,0.000000 + 44.000000,24.000000 + 0.000000,24.000000 + + + 0.000000,0.000000 + 38.000000,0.000000 + 38.000000,24.000000 + 0.000000,24.000000 + + + 0.000000,0.000000 + 38.000000,0.000000 + 38.000000,24.000000 + 0.000000,24.000000 + + + 0.000000,0.000000 + 51.000000,0.000000 + 51.000000,24.000000 + 0.000000,24.000000 + +