Replace tab with spaces in python source code.
authorHuang Peng <shawn.p.huang@gmail.com>
Tue, 15 Jul 2008 08:57:18 +0000 (16:57 +0800)
committerHuang Peng <shawn.p.huang@gmail.com>
Tue, 15 Jul 2008 08:57:18 +0000 (16:57 +0800)
45 files changed:
daemon/bus.py
daemon/config.py
daemon/connection.py
daemon/contextmanager.py
daemon/engine.py
daemon/enginefactory.py
daemon/factorymanager.py
daemon/ibusdaemon.py
daemon/inputcontext.py
daemon/lookuptable.py
daemon/panel.py
daemon/register.py
gconf/config.py
gconf/main.py
ibus/__init__.py
ibus/application.py
ibus/attribute.py
ibus/common.py
ibus/connection.py
ibus/exception.py
ibus/gtk.py
ibus/interface/__init__.py
ibus/interface/iconfig.py
ibus/interface/iengine.py
ibus/interface/ienginefactory.py
ibus/interface/iibus.py
ibus/interface/ipanel.py
ibus/keysyms.py
ibus/lang.py
ibus/lookuptable.py
ibus/modifier.py
ibus/object.py
ibus/panel.py
ibus/property.py
panel/candidatepanel.py
panel/handle.py
panel/image.py
panel/languagebar.py
panel/main.py
panel/menu.py
panel/panel.py
panel/propitem.py
panel/toolitem.py
setup/main.py
x11/test.py

index c694b3d..900ee42 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -31,437 +31,437 @@ from config import Config, DummyConfig
 from register import Register
 
 class IBus(ibus.Object):
-       def __init__(self):
-               super(IBus, self).__init__()
-               self._context_manager = ContextManager()
-               self._factory_manager = FactoryManager()
-               self._panel = DummyPanel()
-               self._config = DummyConfig()
-               self._register = Register()
-               self._config_watch = dict()
-
-               self._focused_context = None
-               self._last_focused_context = None
-               self._context_handlers = list()
-
-               self._last_key = None
-
-       ##########################################################
-       # methods for im context
-       ##########################################################
-       def create_input_context(self, name, conn):
-               context = self._context_manager.create_input_context(name, conn)
-               factory = self._factory_manager.get_default_factory()
-               if factory:
-                       engine = factory.create_engine()
-                       context.set_engine(engine)
-               return context.get_id()
-
-       def release_input_context(self, ic, conn):
-               self._context_manager.release_input_context(ic, conn)
-
-       def focus_in(self, ic, conn):
-               context = self._lookup_context(ic, conn)
-
-               if self._focused_context != context and self._focused_context != None:
-                       self._remove_focused_context_handlers()
-                       self._focused_context.focus_out()
-
-               self._focused_context = context
-               self._install_focused_context_handlers()
-
-               self._panel.focus_in(context.get_id())
-               self._last_focused_context = context
-               context.focus_in()
-
-       def focus_out(self, ic, conn):
-               context = self._lookup_context(ic, conn)
-
-               if context == self._focused_context:
-                       self._remove_focused_context_handlers()
-                       self._focused_context = None
-
-               context.focus_out()
-               self._panel.focus_out(context.get_id())
-
-       def reset(self, ic, conn):
-               context = self._lookup_context(ic, conn)
-               context.reset()
-
-       def is_enabled(self, ic, conn):
-               context = self._lookup_context(ic, conn)
-               return context.is_enabled()
-
-       def process_key_event(self, ic, keyval, is_press, state,
-                                                               conn, reply_cb, error_cb):
-               context = self._lookup_context(ic, conn)
-
-               if self._filter_hotkeys(context, keyval, is_press, state):
-                       reply_cb(True)
-                       return
-               else:
-                       context.process_key_event(keyval, is_press, state, reply_cb, error_cb)
-
-       def set_cursor_location(self, ic, x, y, w, h, conn):
-               context = self._lookup_context(ic, conn)
-               context.set_cursor_location(x, y, w, h)
-               self._panel.set_cursor_location(x, y, w, h)
-
-       def _filter_hotkeys(self, context, keyval, is_press, state):
-               if is_press and keyval == keysyms.space \
-                       and (state & ~modifier.MOD2_MASK) == modifier.CONTROL_MASK:
-                       enable = not context.is_enabled()
-                       if context.get_engine() == None and enable:
-                               factory = self._factory_manager.get_default_factory()
-                               if factory:
-                                       engine = factory.create_engine()
-                                       engine.focus_in()
-                                       context.set_engine(engine)
-                       context.set_enable(enable)
-                       self._panel.states_changed()
-                       return True
-               return False
-
-       def _lookup_context(self, ic, conn):
-               return self._context_manager.lookup_context(ic, conn)
-
-       def _install_focused_context_handlers(self):
-               # Install all callback functions
-               if self._focused_context == None:
-                       return
-               signals = (
-                       ("update-preedit", self._update_preedit_cb),
-                       ("update-aux-string", self._update_aux_string_cb),
-                       ("update-lookup-table", self._update_lookup_table_cb),
-                       ("register-properties", self._register_properties_cb),
-                       ("update-property", self._update_property_cb),
-                       ("engine-lost", self._engine_lost_cb),
-                       ("destroy", self._context_destroy_cb)
-               )
-               for name, handler in signals:
-                       id = self._focused_context.connect(name, handler)
-                       self._context_handlers.append(id)
-
-       def _remove_focused_context_handlers(self):
-               if self._focused_context == None:
-                       return
-               map(self._focused_context.disconnect, self._context_handlers)
-               self._context_handlers = []
-
-       def _update_preedit_cb(self, context, text, attrs, cursor_pos, visible):
-               assert self._focused_context == context
-
-               self._panel.update_preedit_string(text, attrs, cursor_pos, visible)
-
-       def _update_aux_string_cb(self, context, text, attrs, visible):
-               assert self._focused_context == context
-
-               self._panel.update_aux_string(text, attrs, visible)
-
-       def _update_lookup_table_cb(self, context, lookup_table, visible):
-               assert self._focused_context == context
-
-               self._panel.update_lookup_table(lookup_table, visible)
-
-       def _register_properties_cb(self, context, props):
-               assert self._focused_context == context
-
-               self._panel.register_properties(props)
-
-
-       def _update_property_cb(self, context, prop):
-               assert self._focused_context == context
-
-               self._panel.update_property(prop)
-
-       def _engine_lost_cb(self, context):
-               assert self._focused_context == context
-
-               self._panel.reset()
-
-       def _context_destroy_cb(self, context):
-               assert context == self._focused_context
-               self._remove_focused_context_handlers()
-               self._focused_context = None
-               self._panel.reset()
-
-       ##########################################################
-       # methods for im engines
-       ##########################################################
-       def register_factories(self, object_paths, conn):
-               self._factory_manager.register_factories(object_paths, conn)
-
-       def _lookup_engine(self, dbusconn, path):
-               return self._factory_manager.lookup_engine(conn, path)
-
-
-       ##########################################################
-       # methods for panel
-       ##########################################################
-       def register_panel(self, object_path, replace, conn):
-               if not isinstance(self._panel, DummyPanel) and replace == False:
-                       raise ibus.Exception("has have a panel!")
-               if not isinstance(self._panel, DummyPanel):
-                       self._panel.destroy()
-               self._panel = Panel(conn, object_path)
-               self._panel.connect("page-up", self._panel_page_up_cb)
-               self._panel.connect("page-down", self._panel_page_down_cb)
-               self._panel.connect("cursor-up", self._panel_cursor_up_cb)
-               self._panel.connect("cursor-down", self._panel_cursor_down_cb)
-               self._panel.connect("property-activate", self._panel_property_active_cb)
-               self._panel.connect("property-show", self._panel_property_show_cb)
-               self._panel.connect("property-hide", self._panel_property_hide_cb)
-               self._panel.connect("destroy", self._panel_destroy_cb)
-
-       def _panel_page_up_cb(self, panel):
-               assert panel == self._panel
-               if self._focused_context:
-                       self._focused_context.page_up()
-
-       def _panel_page_down_cb(self, panel):
-               assert panel == self._panel
-               if self._focused_context:
-                       self._focused_context.page_down()
-
-       def _panel_cursor_up_cb(self, panel):
-               assert panel == self._panel
-               if self._focused_context:
-                       self._focused_context.cursor_up()
-
-       def _panel_cursor_down_cb(self, panel):
-               assert panel == self._panel
-               if self._focused_context:
-                       self._focused_context.cursor_down()
-
-       def _panel_property_active_cb(self, panel, prop_name, prop_state):
-               assert panel == self._panel
-               if self._focused_context:
-                       self._focused_context.property_activate(prop_name, prop_state)
-
-       def _panel_property_show_cb(self, panel, prop_name):
-               assert panel == self._panel
-               if self._focused_context:
-                       self._focused_context.property_show(prop_name)
-
-       def _panel_property_hide_cb(self, panel, prop_name):
-               assert panel == self._panel
-               if self._focused_context:
-                       self._focused_context.property_hide(prop_name)
-
-       def _panel_destroy_cb(self, panel):
-               if panel == self._panel:
-                       self._panel = DummyPanel()
-
-       ##########################################################
-       # methods for panel
-       ##########################################################
-       def register_config(self, object_path, replace, conn):
-               if not isinstance(self._config, DummyConfig) and replace == False:
-                       raise ibus.Exception("has have a config!")
-               if not isinstance(self._config, DummyConfig):
-                       self._config.destroy()
-               self._config = Config(conn, object_path)
-               self._config.connect("value-changed", self._config_value_changed_cb)
-               self._config.connect("destroy", self._config_destroy_cb)
-
-       def config_set_string(self, key, value, dbusconn, **kargs):
-               self._config.set_string(key, value, **kargs)
-
-       def config_set_int(self, key, value, dbusconn, **kargs):
-               self._config.set_int(key, value, **kargs)
-
-       def config_set_bool(self, key, value, dbusconn, **kargs):
-               self._config.set_bool(key, value, **kargs)
-
-       def config_get_string(self, key, dbusconn, **kargs):
-               self._config.get_string(key, value, **kargs)
-
-       def config_get_int(self, key, dbusconn, **kargs):
-               self._config.get_int(key, value, **kargs)
-
-       def config_get_bool(self, key, dbusconn, **kargs):
-               self._config.get_bool(key, value, **kargs)
-
-       def config_add_watch_dir(self, dir, conn, **kargs):
-               if not dir.endswith("/"):
-                       dir += "/"
-
-               if conn.add_watch_dir(dir):
-                       if dir not in self._config_watch:
-                               self._config_watch[dir] = set()
-                       self._config_watch[dir].add(conn)
-
-       def config_remove_watch_dir(self, dir, conn, **kargs):
-               if not dir.endswith("/"):
-                       dir += "/"
-
-               if conn.remove_watch_dir(dir):
-                       if dir in self._config_watch:
-                               self._config_watch[dir].remove(conn)
-
-       def _config_value_changed_cb(self, config, key, value):
-               for dir in self._config_watch.keys():
-                       if dir.startswith(key):
-                               for conn in self._config[dir]:
-                                       conn.emit_dbus_signal("ConfigValueChanged", key, value)
-
-       def _config_destroy_cb(self, config, key, value):
-               if config == self._config:
-                       self._config = DummyConfig()
-
-       ##########################################################
-       # engine register methods
-       ##########################################################
-       def register_list_engines(self, conn):
-               return self._register.list_engines()
-
-       def register_start_engine(self, lang, name, conn):
-               return self._register.start_engine(lang, name)
-
-       def register_restart_engine(self, lang, name, conn):
-               return self._register.restart_engine(lang, name)
-
-       def register_stop_engine(self, lang, name, conn):
-               return self._register.stop_engine(lang, name)
-
-       ##########################################################
-       # general methods
-       ##########################################################
-       def get_factories(self):
-               return self._factory_manager.get_factories()
-
-       def get_factory_info(self, factory_path):
-               return self._factory_manager.get_factory_info(factory_path)
-
-       def set_factory(self, factory_path):
-               if self._focused_context == None:
-                       return
-               self._panel.reset()
-               factory = self._factory_manager.get_factory(factory_path)
-               engine = factory.create_engine()
-               self._focused_context.set_engine(engine)
-               self._focused_context.set_enable(True)
-               engine.focus_in()
-               self._panel.states_changed()
-
-       def get_input_context_states(self, ic, conn):
-               factory_path = ""
-               context = self._lookup_context(ic, conn)
-               if context.get_factory() != None:
-                       factory_path = context.get_factory().get_object_path()
-               return factory_path, context.is_enabled()
+    def __init__(self):
+        super(IBus, self).__init__()
+        self._context_manager = ContextManager()
+        self._factory_manager = FactoryManager()
+        self._panel = DummyPanel()
+        self._config = DummyConfig()
+        self._register = Register()
+        self._config_watch = dict()
+
+        self._focused_context = None
+        self._last_focused_context = None
+        self._context_handlers = list()
+
+        self._last_key = None
+
+    ##########################################################
+    # methods for im context
+    ##########################################################
+    def create_input_context(self, name, conn):
+        context = self._context_manager.create_input_context(name, conn)
+        factory = self._factory_manager.get_default_factory()
+        if factory:
+            engine = factory.create_engine()
+            context.set_engine(engine)
+        return context.get_id()
+
+    def release_input_context(self, ic, conn):
+        self._context_manager.release_input_context(ic, conn)
+
+    def focus_in(self, ic, conn):
+        context = self._lookup_context(ic, conn)
+
+        if self._focused_context != context and self._focused_context != None:
+            self._remove_focused_context_handlers()
+            self._focused_context.focus_out()
+
+        self._focused_context = context
+        self._install_focused_context_handlers()
+
+        self._panel.focus_in(context.get_id())
+        self._last_focused_context = context
+        context.focus_in()
+
+    def focus_out(self, ic, conn):
+        context = self._lookup_context(ic, conn)
+
+        if context == self._focused_context:
+            self._remove_focused_context_handlers()
+            self._focused_context = None
+
+        context.focus_out()
+        self._panel.focus_out(context.get_id())
+
+    def reset(self, ic, conn):
+        context = self._lookup_context(ic, conn)
+        context.reset()
+
+    def is_enabled(self, ic, conn):
+        context = self._lookup_context(ic, conn)
+        return context.is_enabled()
+
+    def process_key_event(self, ic, keyval, is_press, state,
+                                conn, reply_cb, error_cb):
+        context = self._lookup_context(ic, conn)
+
+        if self._filter_hotkeys(context, keyval, is_press, state):
+            reply_cb(True)
+            return
+        else:
+            context.process_key_event(keyval, is_press, state, reply_cb, error_cb)
+
+    def set_cursor_location(self, ic, x, y, w, h, conn):
+        context = self._lookup_context(ic, conn)
+        context.set_cursor_location(x, y, w, h)
+        self._panel.set_cursor_location(x, y, w, h)
+
+    def _filter_hotkeys(self, context, keyval, is_press, state):
+        if is_press and keyval == keysyms.space \
+            and (state & ~modifier.MOD2_MASK) == modifier.CONTROL_MASK:
+            enable = not context.is_enabled()
+            if context.get_engine() == None and enable:
+                factory = self._factory_manager.get_default_factory()
+                if factory:
+                    engine = factory.create_engine()
+                    engine.focus_in()
+                    context.set_engine(engine)
+            context.set_enable(enable)
+            self._panel.states_changed()
+            return True
+        return False
+
+    def _lookup_context(self, ic, conn):
+        return self._context_manager.lookup_context(ic, conn)
+
+    def _install_focused_context_handlers(self):
+        # Install all callback functions
+        if self._focused_context == None:
+            return
+        signals = (
+            ("update-preedit", self._update_preedit_cb),
+            ("update-aux-string", self._update_aux_string_cb),
+            ("update-lookup-table", self._update_lookup_table_cb),
+            ("register-properties", self._register_properties_cb),
+            ("update-property", self._update_property_cb),
+            ("engine-lost", self._engine_lost_cb),
+            ("destroy", self._context_destroy_cb)
+        )
+        for name, handler in signals:
+            id = self._focused_context.connect(name, handler)
+            self._context_handlers.append(id)
+
+    def _remove_focused_context_handlers(self):
+        if self._focused_context == None:
+            return
+        map(self._focused_context.disconnect, self._context_handlers)
+        self._context_handlers = []
+
+    def _update_preedit_cb(self, context, text, attrs, cursor_pos, visible):
+        assert self._focused_context == context
+
+        self._panel.update_preedit_string(text, attrs, cursor_pos, visible)
+
+    def _update_aux_string_cb(self, context, text, attrs, visible):
+        assert self._focused_context == context
+
+        self._panel.update_aux_string(text, attrs, visible)
+
+    def _update_lookup_table_cb(self, context, lookup_table, visible):
+        assert self._focused_context == context
+
+        self._panel.update_lookup_table(lookup_table, visible)
+
+    def _register_properties_cb(self, context, props):
+        assert self._focused_context == context
+
+        self._panel.register_properties(props)
+
+
+    def _update_property_cb(self, context, prop):
+        assert self._focused_context == context
+
+        self._panel.update_property(prop)
+
+    def _engine_lost_cb(self, context):
+        assert self._focused_context == context
+
+        self._panel.reset()
+
+    def _context_destroy_cb(self, context):
+        assert context == self._focused_context
+        self._remove_focused_context_handlers()
+        self._focused_context = None
+        self._panel.reset()
+
+    ##########################################################
+    # methods for im engines
+    ##########################################################
+    def register_factories(self, object_paths, conn):
+        self._factory_manager.register_factories(object_paths, conn)
+
+    def _lookup_engine(self, dbusconn, path):
+        return self._factory_manager.lookup_engine(conn, path)
+
+
+    ##########################################################
+    # methods for panel
+    ##########################################################
+    def register_panel(self, object_path, replace, conn):
+        if not isinstance(self._panel, DummyPanel) and replace == False:
+            raise ibus.Exception("has have a panel!")
+        if not isinstance(self._panel, DummyPanel):
+            self._panel.destroy()
+        self._panel = Panel(conn, object_path)
+        self._panel.connect("page-up", self._panel_page_up_cb)
+        self._panel.connect("page-down", self._panel_page_down_cb)
+        self._panel.connect("cursor-up", self._panel_cursor_up_cb)
+        self._panel.connect("cursor-down", self._panel_cursor_down_cb)
+        self._panel.connect("property-activate", self._panel_property_active_cb)
+        self._panel.connect("property-show", self._panel_property_show_cb)
+        self._panel.connect("property-hide", self._panel_property_hide_cb)
+        self._panel.connect("destroy", self._panel_destroy_cb)
+
+    def _panel_page_up_cb(self, panel):
+        assert panel == self._panel
+        if self._focused_context:
+            self._focused_context.page_up()
+
+    def _panel_page_down_cb(self, panel):
+        assert panel == self._panel
+        if self._focused_context:
+            self._focused_context.page_down()
+
+    def _panel_cursor_up_cb(self, panel):
+        assert panel == self._panel
+        if self._focused_context:
+            self._focused_context.cursor_up()
+
+    def _panel_cursor_down_cb(self, panel):
+        assert panel == self._panel
+        if self._focused_context:
+            self._focused_context.cursor_down()
+
+    def _panel_property_active_cb(self, panel, prop_name, prop_state):
+        assert panel == self._panel
+        if self._focused_context:
+            self._focused_context.property_activate(prop_name, prop_state)
+
+    def _panel_property_show_cb(self, panel, prop_name):
+        assert panel == self._panel
+        if self._focused_context:
+            self._focused_context.property_show(prop_name)
+
+    def _panel_property_hide_cb(self, panel, prop_name):
+        assert panel == self._panel
+        if self._focused_context:
+            self._focused_context.property_hide(prop_name)
+
+    def _panel_destroy_cb(self, panel):
+        if panel == self._panel:
+            self._panel = DummyPanel()
+
+    ##########################################################
+    # methods for panel
+    ##########################################################
+    def register_config(self, object_path, replace, conn):
+        if not isinstance(self._config, DummyConfig) and replace == False:
+            raise ibus.Exception("has have a config!")
+        if not isinstance(self._config, DummyConfig):
+            self._config.destroy()
+        self._config = Config(conn, object_path)
+        self._config.connect("value-changed", self._config_value_changed_cb)
+        self._config.connect("destroy", self._config_destroy_cb)
+
+    def config_set_string(self, key, value, dbusconn, **kargs):
+        self._config.set_string(key, value, **kargs)
+
+    def config_set_int(self, key, value, dbusconn, **kargs):
+        self._config.set_int(key, value, **kargs)
+
+    def config_set_bool(self, key, value, dbusconn, **kargs):
+        self._config.set_bool(key, value, **kargs)
+
+    def config_get_string(self, key, dbusconn, **kargs):
+        self._config.get_string(key, value, **kargs)
+
+    def config_get_int(self, key, dbusconn, **kargs):
+        self._config.get_int(key, value, **kargs)
+
+    def config_get_bool(self, key, dbusconn, **kargs):
+        self._config.get_bool(key, value, **kargs)
+
+    def config_add_watch_dir(self, dir, conn, **kargs):
+        if not dir.endswith("/"):
+            dir += "/"
+
+        if conn.add_watch_dir(dir):
+            if dir not in self._config_watch:
+                self._config_watch[dir] = set()
+            self._config_watch[dir].add(conn)
+
+    def config_remove_watch_dir(self, dir, conn, **kargs):
+        if not dir.endswith("/"):
+            dir += "/"
+
+        if conn.remove_watch_dir(dir):
+            if dir in self._config_watch:
+                self._config_watch[dir].remove(conn)
+
+    def _config_value_changed_cb(self, config, key, value):
+        for dir in self._config_watch.keys():
+            if dir.startswith(key):
+                for conn in self._config[dir]:
+                    conn.emit_dbus_signal("ConfigValueChanged", key, value)
+
+    def _config_destroy_cb(self, config, key, value):
+        if config == self._config:
+            self._config = DummyConfig()
+
+    ##########################################################
+    # engine register methods
+    ##########################################################
+    def register_list_engines(self, conn):
+        return self._register.list_engines()
+
+    def register_start_engine(self, lang, name, conn):
+        return self._register.start_engine(lang, name)
+
+    def register_restart_engine(self, lang, name, conn):
+        return self._register.restart_engine(lang, name)
+
+    def register_stop_engine(self, lang, name, conn):
+        return self._register.stop_engine(lang, name)
+
+    ##########################################################
+    # general methods
+    ##########################################################
+    def get_factories(self):
+        return self._factory_manager.get_factories()
+
+    def get_factory_info(self, factory_path):
+        return self._factory_manager.get_factory_info(factory_path)
+
+    def set_factory(self, factory_path):
+        if self._focused_context == None:
+            return
+        self._panel.reset()
+        factory = self._factory_manager.get_factory(factory_path)
+        engine = factory.create_engine()
+        self._focused_context.set_engine(engine)
+        self._focused_context.set_enable(True)
+        engine.focus_in()
+        self._panel.states_changed()
+
+    def get_input_context_states(self, ic, conn):
+        factory_path = ""
+        context = self._lookup_context(ic, conn)
+        if context.get_factory() != None:
+            factory_path = context.get_factory().get_object_path()
+        return factory_path, context.is_enabled()
 
 
 class IBusProxy(ibus.IIBus):
-       def __init__(self, bus, dbusconn):
-               super(IBusProxy, self).__init__(dbusconn, ibus.IBUS_PATH)
-               self._ibus = bus
-               self._conn = Connection(dbusconn)
+    def __init__(self, bus, dbusconn):
+        super(IBusProxy, self).__init__(dbusconn, ibus.IBUS_PATH)
+        self._ibus = bus
+        self._conn = Connection(dbusconn)
 
-       def new_connection(self, dbusconn):
-               self._ibus.new_connection(dbusconn)
+    def new_connection(self, dbusconn):
+        self._ibus.new_connection(dbusconn)
 
-       def remove_connection(self, dbusconn):
-               self._ibus.remove_connection(dbusconn)
+    def remove_connection(self, dbusconn):
+        self._ibus.remove_connection(dbusconn)
 
-       def dispatch_dbus_signal(self, dbusconn, message):
-               return self._conn.dispatch_dbus_signal(dbusconn, message)
+    def dispatch_dbus_signal(self, dbusconn, message):
+        return self._conn.dispatch_dbus_signal(dbusconn, message)
 
-       def GetIBusAddress(self, dbusconn):
-               return self._ibus_addr
+    def GetIBusAddress(self, dbusconn):
+        return self._ibus_addr
 
-       def CreateInputContext(self, context_name, dbusconn):
-               return self._ibus.create_input_context(context_name, self._conn)
+    def CreateInputContext(self, context_name, dbusconn):
+        return self._ibus.create_input_context(context_name, self._conn)
 
-       def ReleaseInputContext(self, ic, dbusconn):
-               self._ibus.release_input_context(ic, self._conn)
+    def ReleaseInputContext(self, ic, dbusconn):
+        self._ibus.release_input_context(ic, self._conn)
 
-       def RegisterFactories(self, object_paths, dbusconn):
-               self._ibus.register_factories(object_paths, self._conn)
+    def RegisterFactories(self, object_paths, dbusconn):
+        self._ibus.register_factories(object_paths, self._conn)
 
-       def UnregisterEngines(self, object_paths, dbusconn):
-               self._ibus.unregister_engines(object_paths, self._conn)
+    def UnregisterEngines(self, object_paths, dbusconn):
+        self._ibus.unregister_engines(object_paths, self._conn)
 
-       def RegisterPanel(self, object_path, replace, dbusconn):
-               self._ibus.register_panel(object_path, replace, self._conn)
+    def RegisterPanel(self, object_path, replace, dbusconn):
+        self._ibus.register_panel(object_path, replace, self._conn)
 
-       def RegisterConfig(self, object_path, replace, dbusconn):
-               self._ibus.register_config(object_path, replace, self._conn)
+    def RegisterConfig(self, object_path, replace, dbusconn):
+        self._ibus.register_config(object_path, replace, self._conn)
 
-       def ProcessKeyEvent(self, ic, keyval, is_press, state, \
-                                                       dbusconn, reply_cb, error_cb):
-               try:
-                       self._ibus.process_key_event(ic, keyval, is_press, state,
-                                                       self._conn, reply_cb, error_cb)
-               except Exception, e:
-                       error_cb(e)
+    def ProcessKeyEvent(self, ic, keyval, is_press, state, \
+                            dbusconn, reply_cb, error_cb):
+        try:
+            self._ibus.process_key_event(ic, keyval, is_press, state,
+                            self._conn, reply_cb, error_cb)
+        except Exception, e:
+            error_cb(e)
 
-       def SetCursorLocation(self, ic, x, y, w, h, dbusconn):
-               self._ibus.set_cursor_location(ic, x, y, w, h, self._conn)
+    def SetCursorLocation(self, ic, x, y, w, h, dbusconn):
+        self._ibus.set_cursor_location(ic, x, y, w, h, self._conn)
 
-       def FocusIn(self, ic, dbusconn):
-               self._ibus.focus_in(ic, self._conn)
+    def FocusIn(self, ic, dbusconn):
+        self._ibus.focus_in(ic, self._conn)
 
-       def FocusOut(self, ic, dbusconn):
-               self._ibus.focus_out(ic, self._conn)
+    def FocusOut(self, ic, dbusconn):
+        self._ibus.focus_out(ic, self._conn)
 
-       def Reset(self, ic, dbusconn):
-               self._ibus.reset(ic, self._conn)
+    def Reset(self, ic, dbusconn):
+        self._ibus.reset(ic, self._conn)
 
-       def IsEnabled(self, ic, dbusconn):
-               return self._ibus.is_enabled(ic, self._conn)
+    def IsEnabled(self, ic, dbusconn):
+        return self._ibus.is_enabled(ic, self._conn)
 
-       def GetFactories(self, dbusconn):
-               return self._ibus.get_factories()
+    def GetFactories(self, dbusconn):
+        return self._ibus.get_factories()
 
-       def GetFactoryInfo(self, factory_path, dbusconn):
-               return self._ibus.get_factory_info(factory_path)
+    def GetFactoryInfo(self, factory_path, dbusconn):
+        return self._ibus.get_factory_info(factory_path)
 
-       def SetFactory(self, factory_path, dbusconn):
-               return self._ibus.set_factory(factory_path)
+    def SetFactory(self, factory_path, dbusconn):
+        return self._ibus.set_factory(factory_path)
 
-       def GetInputContextStates(self, ic, dbusconn):
-               return self._ibus.get_input_context_states(ic, self._conn)
+    def GetInputContextStates(self, ic, dbusconn):
+        return self._ibus.get_input_context_states(ic, self._conn)
 
-       def ConfigSetString(self, key, value, dbusconn, reply_cb, error_cb):
-               self._ibus.config_set_string(key, value, self._conn,
-                               reply_handler = reply_cb,
-                               error_handler = error_cb)
+    def ConfigSetString(self, key, value, dbusconn, reply_cb, error_cb):
+        self._ibus.config_set_string(key, value, self._conn,
+                reply_handler = reply_cb,
+                error_handler = error_cb)
 
-       def ConfigSetInt(self, key, value, dbusconn, reply_cb, error_cb):
-               self._ibus.config_set_int(key, value, self._conn,
-                               reply_handler = reply_cb,
-                               error_handler = error_cb)
+    def ConfigSetInt(self, key, value, dbusconn, reply_cb, error_cb):
+        self._ibus.config_set_int(key, value, self._conn,
+                reply_handler = reply_cb,
+                error_handler = error_cb)
 
-       def ConfigSetBool(self, key, value, dbusconn, reply_cb, error_cb):
-               self._ibus.config_set_bool(key, value, self._conn,
-                               reply_handler = reply_cb,
-                               error_handler = error_cb)
+    def ConfigSetBool(self, key, value, dbusconn, reply_cb, error_cb):
+        self._ibus.config_set_bool(key, value, self._conn,
+                reply_handler = reply_cb,
+                error_handler = error_cb)
 
-       def ConfigGetString(self, key, dbusconn, reply_cb, error_cb):
-               self._ibus.config_get_string(key, self._conn,
-                               reply_handler = reply_cb,
-                               error_handler = error_cb)
+    def ConfigGetString(self, key, dbusconn, reply_cb, error_cb):
+        self._ibus.config_get_string(key, self._conn,
+                reply_handler = reply_cb,
+                error_handler = error_cb)
 
-       def ConfigGetInt(self, key, dbusconn, reply_cb, error_cb):
-               self._ibus.config_get_int(key, self._conn,
-                               reply_handler = reply_cb,
-                               error_handler = error_cb)
+    def ConfigGetInt(self, key, dbusconn, reply_cb, error_cb):
+        self._ibus.config_get_int(key, self._conn,
+                reply_handler = reply_cb,
+                error_handler = error_cb)
 
-       def ConfigGetBool(self, key, dbusconn, reply_cb, error_cb):
-               self._ibus.config_get_bool(key, self._conn,
-                               reply_handler = reply_cb,
-                               error_handler = error_cb)
+    def ConfigGetBool(self, key, dbusconn, reply_cb, error_cb):
+        self._ibus.config_get_bool(key, self._conn,
+                reply_handler = reply_cb,
+                error_handler = error_cb)
 
-       def RegisterListEngines(self, dbusconn):
-               return self._ibus.register_list_engines(self._conn)
+    def RegisterListEngines(self, dbusconn):
+        return self._ibus.register_list_engines(self._conn)
 
-       def RegisterStartEngine(self, lang, name, dbusconn):
-               return self._ibus.register_start_engine(lang, name, self._conn)
+    def RegisterStartEngine(self, lang, name, dbusconn):
+        return self._ibus.register_start_engine(lang, name, self._conn)
 
-       def RegisterRestartEngine(self, lang, name, dbusconn):
-               return self._ibus.register_restart_engine(lang, name, self._conn)
+    def RegisterRestartEngine(self, lang, name, dbusconn):
+        return self._ibus.register_restart_engine(lang, name, self._conn)
 
-       def RegisterStopEngine(self, lang, name, dbusconn):
-               return self._ibus.register_stop_engine(lang, name, self._conn)
+    def RegisterStopEngine(self, lang, name, dbusconn):
+        return self._ibus.register_stop_engine(lang, name, self._conn)
 
index 7e54b2b..521e511 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -24,88 +24,88 @@ import gobject
 import ibus
 
 class Config(ibus.Object):
-       __gsignals__ = {
-               "value-changed" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_STRING, gobject.TYPE_PYOBJECT)),
-       }
-
-       def __init__(self, ibusconn, object_path):
-               super(Config, self).__init__()
-               self._ibusconn = ibusconn
-               self._object_path = object_path
-               self._config = self._ibusconn.get_object(self._object_path)
-
-               self._ibusconn.connect("destroy", self._ibusconn_destroy_cb)
-               self._ibusconn.connect("dbus-signal", self._dbus_signal_cb)
-
-       def get_string(self, key, **kargs):
-               self._config.GetString(key, **kargs)
-       
-       def get_int(self, key, **kargs):
-               self._config.GetInt(key, **kargs)
-       
-       def get_bool(self, key, **kargs):
-               self._config.GetBool(key, **kargs)
-       
-       def set_string(self, key, value, **kargs):
-               self._config.SetString(key, value, **kargs)
-       
-       def set_int(self, key, value, **kargs):
-               self._config.SetInt(key, value, **kargs)
-       
-       def set_bool(self, key, value, **kargs):
-               self._config.SetBool(key, value, **kargs)
-
-       def destroy(self):
-               if self._ibusconn != None:
-                       self._config.Destroy(**ibus.DEFAULT_ASYNC_HANDLERS)
-
-               self._ibusconn = None
-               self._config = None
-               ibus.Object.destroy(self)
-
-       # signal callbacks
-       def _ibusconn_destroy_cb(self, ibusconn):
-               self._ibusconn = None
-               self.destroy()
-
-       def _dbus_signal_cb(self, ibusconn, message):
-               if message.is_signal(ibus.IBUS_CONFIG_IFACE, "ValueChanged"):
-                       args = message.get_args_list()
-                       self.emit("value-changed", args[0], args[1])
-               else:
-                       return False
-               return True
+    __gsignals__ = {
+        "value-changed" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            (gobject.TYPE_STRING, gobject.TYPE_PYOBJECT)),
+    }
+
+    def __init__(self, ibusconn, object_path):
+        super(Config, self).__init__()
+        self._ibusconn = ibusconn
+        self._object_path = object_path
+        self._config = self._ibusconn.get_object(self._object_path)
+
+        self._ibusconn.connect("destroy", self._ibusconn_destroy_cb)
+        self._ibusconn.connect("dbus-signal", self._dbus_signal_cb)
+
+    def get_string(self, key, **kargs):
+        self._config.GetString(key, **kargs)
+
+    def get_int(self, key, **kargs):
+        self._config.GetInt(key, **kargs)
+
+    def get_bool(self, key, **kargs):
+        self._config.GetBool(key, **kargs)
+
+    def set_string(self, key, value, **kargs):
+        self._config.SetString(key, value, **kargs)
+
+    def set_int(self, key, value, **kargs):
+        self._config.SetInt(key, value, **kargs)
+
+    def set_bool(self, key, value, **kargs):
+        self._config.SetBool(key, value, **kargs)
+
+    def destroy(self):
+        if self._ibusconn != None:
+            self._config.Destroy(**ibus.DEFAULT_ASYNC_HANDLERS)
+
+        self._ibusconn = None
+        self._config = None
+        ibus.Object.destroy(self)
+
+    # signal callbacks
+    def _ibusconn_destroy_cb(self, ibusconn):
+        self._ibusconn = None
+        self.destroy()
+
+    def _dbus_signal_cb(self, ibusconn, message):
+        if message.is_signal(ibus.IBUS_CONFIG_IFACE, "ValueChanged"):
+            args = message.get_args_list()
+            self.emit("value-changed", args[0], args[1])
+        else:
+            return False
+        return True
 
 gobject.type_register(Config)
 
 class DummyConfig(ibus.Object):
-       __gsignals__ = {
-               "value-changed" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_STRING, gobject.TYPE_PYOBJECT)),
-       }
-       
-       def get_string(self, key, **kargs):
-               kargs["reply_handler"]("")
-       
-       def get_int(self, key, **kargs):
-               kargs["reply_handler"](0)
-       
-       def get_bool(self, key, **kargs):
-               kargs["reply_handler"](True)
-       
-       def set_string(self, key, value, **kargs):
-               kargs["reply_handler"]()
-       
-       def set_int(self, key, value, **kargs):
-               kargs["reply_handler"]()
-       
-       def set_bool(self, key, value, **kargs):
-               kargs["reply_handler"]()
+    __gsignals__ = {
+        "value-changed" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            (gobject.TYPE_STRING, gobject.TYPE_PYOBJECT)),
+    }
+
+    def get_string(self, key, **kargs):
+        kargs["reply_handler"]("")
+
+    def get_int(self, key, **kargs):
+        kargs["reply_handler"](0)
+
+    def get_bool(self, key, **kargs):
+        kargs["reply_handler"](True)
+
+    def set_string(self, key, value, **kargs):
+        kargs["reply_handler"]()
+
+    def set_int(self, key, value, **kargs):
+        kargs["reply_handler"]()
+
+    def set_bool(self, key, value, **kargs):
+        kargs["reply_handler"]()
 
 
 gobject.type_register(DummyConfig)
index 27b8e1f..91be5c0 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -24,58 +24,58 @@ import ibus
 import gobject
 
 class Connection(ibus.Object):
-       __gsignals__ = {
-               "dbus-signal" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_PYOBJECT, )
-               )
-       }
-       def __init__(self, dbusconn):
-               super(Connection, self).__init__()
-               self._dbusconn = dbusconn
-               self._watch_dirs = set()
-               dbusconn.add_message_filter(self.message_filter_cb)
+    __gsignals__ = {
+        "dbus-signal" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            (gobject.TYPE_PYOBJECT, )
+        )
+    }
+    def __init__(self, dbusconn):
+        super(Connection, self).__init__()
+        self._dbusconn = dbusconn
+        self._watch_dirs = set()
+        dbusconn.add_message_filter(self.message_filter_cb)
 
-       def message_filter_cb(self, dbusconn, message):
-               if message.is_signal(dbus.LOCAL_IFACE, "Disconnected"):
-                       self.destroy()
-                       return dbus.lowlevel.HANDLER_RESULT_HANDLED
+    def message_filter_cb(self, dbusconn, message):
+        if message.is_signal(dbus.LOCAL_IFACE, "Disconnected"):
+            self.destroy()
+            return dbus.lowlevel.HANDLER_RESULT_HANDLED
 
-               if message.get_type() == 4: # is signal
-                       if self.dispatch_dbus_signal(message):
-                               return dbus.lowlevel.HANDLER_RESULT_HANDLED
+        if message.get_type() == 4: # is signal
+            if self.dispatch_dbus_signal(message):
+                return dbus.lowlevel.HANDLER_RESULT_HANDLED
 
-               return dbus.lowlevel.HANDLER_RESULT_NOT_YET_HANDLED
+        return dbus.lowlevel.HANDLER_RESULT_NOT_YET_HANDLED
 
-       def get_object(self, path):
-               return self._dbusconn.get_object("no.name", path)
+    def get_object(self, path):
+        return self._dbusconn.get_object("no.name", path)
 
-       def emit_dbus_signal(self, name, *args):
-               message = dbus.lowlevel.SignalMessage(ibus.IBUS_PATH, ibus.IBUS_IFACE, name)
-               message.append(*args)
-               self._dbusconn.send_message(message)
-               self._dbusconn.flush()
+    def emit_dbus_signal(self, name, *args):
+        message = dbus.lowlevel.SignalMessage(ibus.IBUS_PATH, ibus.IBUS_IFACE, name)
+        message.append(*args)
+        self._dbusconn.send_message(message)
+        self._dbusconn.flush()
 
-       def do_destroy(self):
-               self._dbusconn = None
+    def do_destroy(self):
+        self._dbusconn = None
 
-       def dispatch_dbus_signal(self, message):
-               self.emit("dbus-signal", message)
+    def dispatch_dbus_signal(self, message):
+        self.emit("dbus-signal", message)
 
-       def add_watch_dir(self, dir):
-               if dir in self._watch_dirs:
-                       return False
-               self._watch_dirs.add(dir)
-               return True
+    def add_watch_dir(self, dir):
+        if dir in self._watch_dirs:
+            return False
+        self._watch_dirs.add(dir)
+        return True
 
-       def remove_watch_dir(self, dir):
-               if dir not in self._watch_dirs:
-                       return False
-               self._watch_dirs.remove(dir)
-               return True
+    def remove_watch_dir(self, dir):
+        if dir not in self._watch_dirs:
+            return False
+        self._watch_dirs.remove(dir)
+        return True
 
-       def get_dbusconn(self):
-               return self._dbusconn
+    def get_dbusconn(self):
+        return self._dbusconn
 
 gobject.type_register(Connection)
index aadbe96..44b4bdb 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -23,23 +23,23 @@ import ibus
 from inputcontext import InputContext
 
 class ContextManager(ibus.Object):
-       def __init__(self):
-               super(ContextManager, self).__init__()
-               self._contexts = {}
+    def __init__(self):
+        super(ContextManager, self).__init__()
+        self._contexts = {}
 
-       def create_input_context(self, name, ibusconn):
-               context = InputContext(name, ibusconn)
-               self._contexts[context.get_id()] = context
-               context.connect("destroy", self._context_destroy_cb)
-               return context
+    def create_input_context(self, name, ibusconn):
+        context = InputContext(name, ibusconn)
+        self._contexts[context.get_id()] = context
+        context.connect("destroy", self._context_destroy_cb)
+        return context
 
-       def release_input_context(self, ic, ibusconn):
-               context = self._contexts[ic]
-               context.destroy()
+    def release_input_context(self, ic, ibusconn):
+        context = self._contexts[ic]
+        context.destroy()
 
-       def lookup_context(self, ic, ibusconn):
-               return self._contexts[ic]
+    def lookup_context(self, ic, ibusconn):
+        return self._contexts[ic]
 
-       def _context_destroy_cb(self, context):
-               del self._contexts[context.get_id()]
+    def _context_destroy_cb(self, context):
+        del self._contexts[context.get_id()]
 
index 38a726a..2468178 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -24,138 +24,138 @@ import gobject
 import ibus
 
 class Engine(ibus.Object):
-       __gsignals__ = {
-               "commit-string" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_PYOBJECT, )),
-               "forward-key-event" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_UINT, gobject.TYPE_BOOLEAN, gobject.TYPE_UINT )),
-               "update-preedit" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT, gobject.TYPE_INT, gobject.TYPE_BOOLEAN)),
-               "update-aux-string" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT, gobject.TYPE_BOOLEAN)),
-               "update-lookup-table" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_PYOBJECT, gobject.TYPE_BOOLEAN)),
-               "register-properties" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_PYOBJECT, )),
-               "update-property" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_PYOBJECT, )),
-       }
-
-       def __init__(self, factory, ibusconn, object_path):
-               super(Engine, self).__init__()
-               self._factory = factory
-               self._ibusconn = ibusconn
-               self._object_path = object_path
-               self._engine = ibusconn.get_object(self._object_path)
-               self._lookup_table = ibus.LookupTable()
-               self._ibusconn.connect("destroy", self._ibusconn_destroy_cb)
-
-       def get_factory(self):
-               return self._factory
-
-       def get_object_path(self):
-               return self._object_path
-
-       def handle_dbus_signal(self, message):
-               if message.is_signal(ibus.IBUS_ENGINE_IFACE, "CommitString"):
-                       args = message.get_args_list()
-                       self.emit("commit-string", args[0])
-               elif message.is_signal(ibus.IBUS_ENGINE_IFACE, "ForwardKeyEvent"):
-                       args = message.get_args_list()
-                       self.emit("forward-key-event", args[0], bool(arg[1]), arg[2])
-               elif message.is_signal(ibus.IBUS_ENGINE_IFACE, "UpdatePreedit"):
-                       args = message.get_args_list()
-                       self.emit("update-preedit", args[0], args[1], args[2], args[3])
-               elif message.is_signal(ibus.IBUS_ENGINE_IFACE, "UpdateAuxString"):
-                       args = message.get_args_list()
-                       self.emit("update-aux-string", args[0], args[1], args[2])
-               elif message.is_signal(ibus.IBUS_ENGINE_IFACE, "UpdateLookupTable"):
-                       args = message.get_args_list()
-                       self.emit("update-lookup-table", args[0], args[1])
-               elif message.is_signal(ibus.IBUS_ENGINE_IFACE, "RegisterProperties"):
-                       args = message.get_args_list()
-                       self.emit("register-properties", args[0])
-               elif message.is_signal(ibus.IBUS_ENGINE_IFACE, "UpdateProperty"):
-                       args = message.get_args_list()
-                       self.emit("update-property", args[0])
-               else:
-                       return False
-
-               return True
-
-       def focus_in(self):
-               self._engine.FocusIn(**ibus.DEFAULT_ASYNC_HANDLERS)
-
-       def focus_out(self):
-               self._engine.FocusOut(**ibus.DEFAULT_ASYNC_HANDLERS)
-
-       def reset(self):
-               self._engine.Reset(**ibus.DEFAULT_ASYNC_HANDLERS)
-
-       def process_key_event(self, keyval, is_press, state, reply_cb, error_cb):
-               self._engine.ProcessKeyEvent(keyval, is_press, state, 
-                                                                       reply_handler = reply_cb,
-                                                                       error_handler = error_cb)
-
-       def set_cursor_location(self, x, y, w, h):
-               self._engine.SetCursorLocation(x, y, w, h,
-                               **ibus.DEFAULT_ASYNC_HANDLERS)
-
-
-       def set_enable(self, enable):
-               self._engine.SetEnable(enable,
-                               **ibus.DEFAULT_ASYNC_HANDLERS)
-
-       # cursor for lookup table
-
-       def page_up(self):
-               self._engine.PageUp(**ibus.DEFAULT_ASYNC_HANDLERS)
-
-       def page_down(self):
-               self._engine.PageDown(**ibus.DEFAULT_ASYNC_HANDLERS)
-
-       def cursor_up(self):
-               self._engine.CursorUp(**ibus.DEFAULT_ASYNC_HANDLERS)
-
-       def cursor_down(self):
-               self._engine.CursorDown(**ibus.DEFAULT_ASYNC_HANDLERS)
-
-       def property_activate(self, prop_name, prop_state):
-               self._engine.PropertyActivate(prop_name, prop_state,
-                               **ibus.DEFAULT_ASYNC_HANDLERS)
-
-       def property_show(self, prop_name):
-               self._engine.PropertyShow(prop_name,
-                               **ibus.DEFAULT_ASYNC_HANDLERS)
-
-       def property_hide(self, prop_name):
-               self._engine.PropertyHide(prop_name,
-                               **ibus.DEFAULT_ASYNC_HANDLERS)
-
-       def destroy(self):
-               ibus.Object.destroy(self)
-               if self._engine:
-                       self._engine.Destroy(**ibus.DEFAULT_ASYNC_HANDLERS)
-                       self._engine = None
-               self._ibusconn = None
-
-       def _ibusconn_destroy_cb(self, ibusconn):
-               self._engine = None
-               self.destroy()
+    __gsignals__ = {
+        "commit-string" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            (gobject.TYPE_PYOBJECT, )),
+        "forward-key-event" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            (gobject.TYPE_UINT, gobject.TYPE_BOOLEAN, gobject.TYPE_UINT )),
+        "update-preedit" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            (gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT, gobject.TYPE_INT, gobject.TYPE_BOOLEAN)),
+        "update-aux-string" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            (gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT, gobject.TYPE_BOOLEAN)),
+        "update-lookup-table" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            (gobject.TYPE_PYOBJECT, gobject.TYPE_BOOLEAN)),
+        "register-properties" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            (gobject.TYPE_PYOBJECT, )),
+        "update-property" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            (gobject.TYPE_PYOBJECT, )),
+    }
+
+    def __init__(self, factory, ibusconn, object_path):
+        super(Engine, self).__init__()
+        self._factory = factory
+        self._ibusconn = ibusconn
+        self._object_path = object_path
+        self._engine = ibusconn.get_object(self._object_path)
+        self._lookup_table = ibus.LookupTable()
+        self._ibusconn.connect("destroy", self._ibusconn_destroy_cb)
+
+    def get_factory(self):
+        return self._factory
+
+    def get_object_path(self):
+        return self._object_path
+
+    def handle_dbus_signal(self, message):
+        if message.is_signal(ibus.IBUS_ENGINE_IFACE, "CommitString"):
+            args = message.get_args_list()
+            self.emit("commit-string", args[0])
+        elif message.is_signal(ibus.IBUS_ENGINE_IFACE, "ForwardKeyEvent"):
+            args = message.get_args_list()
+            self.emit("forward-key-event", args[0], bool(arg[1]), arg[2])
+        elif message.is_signal(ibus.IBUS_ENGINE_IFACE, "UpdatePreedit"):
+            args = message.get_args_list()
+            self.emit("update-preedit", args[0], args[1], args[2], args[3])
+        elif message.is_signal(ibus.IBUS_ENGINE_IFACE, "UpdateAuxString"):
+            args = message.get_args_list()
+            self.emit("update-aux-string", args[0], args[1], args[2])
+        elif message.is_signal(ibus.IBUS_ENGINE_IFACE, "UpdateLookupTable"):
+            args = message.get_args_list()
+            self.emit("update-lookup-table", args[0], args[1])
+        elif message.is_signal(ibus.IBUS_ENGINE_IFACE, "RegisterProperties"):
+            args = message.get_args_list()
+            self.emit("register-properties", args[0])
+        elif message.is_signal(ibus.IBUS_ENGINE_IFACE, "UpdateProperty"):
+            args = message.get_args_list()
+            self.emit("update-property", args[0])
+        else:
+            return False
+
+        return True
+
+    def focus_in(self):
+        self._engine.FocusIn(**ibus.DEFAULT_ASYNC_HANDLERS)
+
+    def focus_out(self):
+        self._engine.FocusOut(**ibus.DEFAULT_ASYNC_HANDLERS)
+
+    def reset(self):
+        self._engine.Reset(**ibus.DEFAULT_ASYNC_HANDLERS)
+
+    def process_key_event(self, keyval, is_press, state, reply_cb, error_cb):
+        self._engine.ProcessKeyEvent(keyval, is_press, state,
+                                    reply_handler = reply_cb,
+                                    error_handler = error_cb)
+
+    def set_cursor_location(self, x, y, w, h):
+        self._engine.SetCursorLocation(x, y, w, h,
+                **ibus.DEFAULT_ASYNC_HANDLERS)
+
+
+    def set_enable(self, enable):
+        self._engine.SetEnable(enable,
+                **ibus.DEFAULT_ASYNC_HANDLERS)
+
+    # cursor for lookup table
+
+    def page_up(self):
+        self._engine.PageUp(**ibus.DEFAULT_ASYNC_HANDLERS)
+
+    def page_down(self):
+        self._engine.PageDown(**ibus.DEFAULT_ASYNC_HANDLERS)
+
+    def cursor_up(self):
+        self._engine.CursorUp(**ibus.DEFAULT_ASYNC_HANDLERS)
+
+    def cursor_down(self):
+        self._engine.CursorDown(**ibus.DEFAULT_ASYNC_HANDLERS)
+
+    def property_activate(self, prop_name, prop_state):
+        self._engine.PropertyActivate(prop_name, prop_state,
+                **ibus.DEFAULT_ASYNC_HANDLERS)
+
+    def property_show(self, prop_name):
+        self._engine.PropertyShow(prop_name,
+                **ibus.DEFAULT_ASYNC_HANDLERS)
+
+    def property_hide(self, prop_name):
+        self._engine.PropertyHide(prop_name,
+                **ibus.DEFAULT_ASYNC_HANDLERS)
+
+    def destroy(self):
+        ibus.Object.destroy(self)
+        if self._engine:
+            self._engine.Destroy(**ibus.DEFAULT_ASYNC_HANDLERS)
+            self._engine = None
+        self._ibusconn = None
+
+    def _ibusconn_destroy_cb(self, ibusconn):
+        self._engine = None
+        self.destroy()
 
 gobject.type_register(Engine)
 
index 6f507aa..2234495 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -25,56 +25,56 @@ import ibus
 from engine import Engine
 
 class EngineFactory(ibus.Object):
-       def __init__(self, ibusconn, object_path):
-               super(EngineFactory, self).__init__()
-               self._ibusconn = ibusconn
-               self._object_path = object_path
-               self._factory = self._ibusconn.get_object(self._object_path)
+    def __init__(self, ibusconn, object_path):
+        super(EngineFactory, self).__init__()
+        self._ibusconn = ibusconn
+        self._object_path = object_path
+        self._factory = self._ibusconn.get_object(self._object_path)
 
-               self._ibusconn.connect("destroy", self._ibusconn_destroy_cb)
+        self._ibusconn.connect("destroy", self._ibusconn_destroy_cb)
 
-               self._ibusconn.connect("dbus-signal", self._dbus_signal_cb)
-               self._engines = weakref.WeakValueDictionary()
+        self._ibusconn.connect("dbus-signal", self._dbus_signal_cb)
+        self._engines = weakref.WeakValueDictionary()
 
-               self._info = None
+        self._info = None
 
-       def get_object_path(self):
-               return self._object_path
+    def get_object_path(self):
+        return self._object_path
 
-       def get_info(self):
-               if self._info == None:
-                       self._info = self._factory.GetInfo()
-               return self._info
+    def get_info(self):
+        if self._info == None:
+            self._info = self._factory.GetInfo()
+        return self._info
 
-       def create_engine(self):
-               object_path = self._factory.CreateEngine()
-               engine = Engine(self, self._ibusconn, object_path)
-               self._engines[object_path] = engine
-               return engine
+    def create_engine(self):
+        object_path = self._factory.CreateEngine()
+        engine = Engine(self, self._ibusconn, object_path)
+        self._engines[object_path] = engine
+        return engine
 
-       def destroy(self):
-               ibus.Object.destroy(self)
-               self._ibusconn = None
-               self._factory = None
+    def destroy(self):
+        ibus.Object.destroy(self)
+        self._ibusconn = None
+        self._factory = None
 
-       def _ibusconn_destroy_cb(self, ibusconn):
-               self.destroy()
+    def _ibusconn_destroy_cb(self, ibusconn):
+        self.destroy()
 
-       def _dbus_signal_cb(self, ibusconn, message):
-               object_path = message.get_path()
-               if object_path in self._engines:
-                       self._engines[object_path].handle_dbus_signal(message)
+    def _dbus_signal_cb(self, ibusconn, message):
+        object_path = message.get_path()
+        if object_path in self._engines:
+            self._engines[object_path].handle_dbus_signal(message)
 
-       # methods for cmp
-       def __lt__(self, other):
-               x = self.get_info()
-               y = other.get_info()
-               if x[1] < y[1]: return True
-               if x[1] == y[1]: return x[0] < y[0]
+    # methods for cmp
+    def __lt__(self, other):
+        x = self.get_info()
+        y = other.get_info()
+        if x[1] < y[1]: return True
+        if x[1] == y[1]: return x[0] < y[0]
 
-       def __gt__(self, other):
-               x = self.get_info()
-               y = other.get_info()
-               if x[1] > y[1]: return True
-               if x[1] == y[1]: return x[0] > y[0]
+    def __gt__(self, other):
+        x = self.get_info()
+        y = other.get_info()
+        if x[1] > y[1]: return True
+        if x[1] == y[1]: return x[0] > y[0]
 
index 9a1d1f2..3ff6fd0 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -25,86 +25,86 @@ import ibus
 from enginefactory import EngineFactory
 
 class FactoryManager(ibus.Object):
-       __gsignals__ = {
-               'new-factories-added' : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_PYOBJECT, )
-               )
-       }
-
-       def __init__(self):
-               super(FactoryManager, self).__init__()
-               self._factories = {}
-               self._ibusconn_factory_dict = {}
-               self._default_factory = None
-               self._sorted_factories = None
-
-       def register_factories(self, object_paths, ibusconn):
-               if ibusconn in self._factories:
-                       raise ibus.IBusException("this conn has registered factories!")
-
-               self._ibusconn_factory_dict[ibusconn] = []
-
-               for object_path in object_paths:
-                       if object_path in self._factories:
-                               raise ibus.IBusException(
-                                               "Factory [%s] has been registered!" % object_path)
-
-                       factory = EngineFactory(ibusconn, object_path)
-                       self._factories[object_path] = factory
-                       self._ibusconn_factory_dict[ibusconn].append(object_path)
-
-               ibusconn.connect("destroy", self._ibusconn_destroy_cb)
-
-               self.emit("new-factories-added",
-                                       self._ibusconn_factory_dict[ibusconn][:])
-
-       def get_default_factory(self):
-               if self._default_factory == None:
-                       factories = self._get_sorted_factories()
-                       if factories:
-                               self._default_factory = factories[0]
-
-               return self._default_factory
-
-       def get_next_factory(self, factory):
-               factories = self._get_sorted_factories()
-               i = factories.index(factory) + 1
-               if i >= len(factories):
-                       i = 0
-
-               return factories[i]
-
-       def get_factories(self):
-               return self._factories.keys()
-
-       def get_factory_info(self, factory_path):
-               factory = self._factories[factory_path]
-               return factory.get_info()
-
-       def get_factory(self, factory_path):
-               factory = self._factories[factory_path]
-               return factory
-
-       def _get_sorted_factories(self, resort = False):
-               if not self._sorted_factories or resort:
-                       factories = self._factories.values()
-                       factories.sort()
-                       self._sorted_factories = factories
-               return self._sorted_factories
-
-       def _ibusconn_destroy_cb(self, ibusconn):
-               assert ibusconn in self._ibusconn_factory_dict
-
-               for object_path in self._ibusconn_factory_dict[ibusconn]:
-                       factory = self._factories[object_path]
-                       if factory == self._default_factory:
-                               self._default_factory = None
-                       del self._factories[object_path]
-
-               del self._ibusconn_factory_dict[ibusconn]
-               self._sorted_factories = None
+    __gsignals__ = {
+        'new-factories-added' : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            (gobject.TYPE_PYOBJECT, )
+        )
+    }
+
+    def __init__(self):
+        super(FactoryManager, self).__init__()
+        self._factories = {}
+        self._ibusconn_factory_dict = {}
+        self._default_factory = None
+        self._sorted_factories = None
+
+    def register_factories(self, object_paths, ibusconn):
+        if ibusconn in self._factories:
+            raise ibus.IBusException("this conn has registered factories!")
+
+        self._ibusconn_factory_dict[ibusconn] = []
+
+        for object_path in object_paths:
+            if object_path in self._factories:
+                raise ibus.IBusException(
+                        "Factory [%s] has been registered!" % object_path)
+
+            factory = EngineFactory(ibusconn, object_path)
+            self._factories[object_path] = factory
+            self._ibusconn_factory_dict[ibusconn].append(object_path)
+
+        ibusconn.connect("destroy", self._ibusconn_destroy_cb)
+
+        self.emit("new-factories-added",
+                    self._ibusconn_factory_dict[ibusconn][:])
+
+    def get_default_factory(self):
+        if self._default_factory == None:
+            factories = self._get_sorted_factories()
+            if factories:
+                self._default_factory = factories[0]
+
+        return self._default_factory
+
+    def get_next_factory(self, factory):
+        factories = self._get_sorted_factories()
+        i = factories.index(factory) + 1
+        if i >= len(factories):
+            i = 0
+
+        return factories[i]
+
+    def get_factories(self):
+        return self._factories.keys()
+
+    def get_factory_info(self, factory_path):
+        factory = self._factories[factory_path]
+        return factory.get_info()
+
+    def get_factory(self, factory_path):
+        factory = self._factories[factory_path]
+        return factory
+
+    def _get_sorted_factories(self, resort = False):
+        if not self._sorted_factories or resort:
+            factories = self._factories.values()
+            factories.sort()
+            self._sorted_factories = factories
+        return self._sorted_factories
+
+    def _ibusconn_destroy_cb(self, ibusconn):
+        assert ibusconn in self._ibusconn_factory_dict
+
+        for object_path in self._ibusconn_factory_dict[ibusconn]:
+            factory = self._factories[object_path]
+            if factory == self._default_factory:
+                self._default_factory = None
+            del self._factories[object_path]
+
+        del self._ibusconn_factory_dict[ibusconn]
+        self._sorted_factories = None
 
 gobject.type_register(FactoryManager)
 
index 349ac8c..4d00ea2 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -34,89 +34,89 @@ from bus import IBus, IBusProxy
 
 class DBus(dbus.service.Object):
 
-       method = lambda **args: \
-               dbus.service.method(dbus_interface = dbus.BUS_DAEMON_IFACE, \
-               **args)
+    method = lambda **args: \
+        dbus.service.method(dbus_interface = dbus.BUS_DAEMON_IFACE, \
+        **args)
 
-       signal = lambda **args: \
-               dbus.service.signal(dbus_interface = dbus.BUS_DAEMON_IFACE, \
-               **args)
+    signal = lambda **args: \
+        dbus.service.signal(dbus_interface = dbus.BUS_DAEMON_IFACE, \
+        **args)
 
-       def __init__(self, *args, **kargs):
-               super(DBus, self).__init__(*args, **kargs)
+    def __init__(self, *args, **kargs):
+        super(DBus, self).__init__(*args, **kargs)
 
-       @method(in_signature = "s", out_signature = "s")
-       def GetNameOwner(self, name):
-               if name == dbus.BUS_DAEMON_NAME:
-                       return dbus.BUS_DAEMON_NAME
-               elif name == ibus.IBUS_NAME:
-                       return ibus.IBUS_NAME
+    @method(in_signature = "s", out_signature = "s")
+    def GetNameOwner(self, name):
+        if name == dbus.BUS_DAEMON_NAME:
+            return dbus.BUS_DAEMON_NAME
+        elif name == ibus.IBUS_NAME:
+            return ibus.IBUS_NAME
 
-               raise dbus.DBusException(
-                               "org.freedesktop.DBus.Error.NameHasNoOwner: Could not get owner of name '%s': no such name" % name)
+        raise dbus.DBusException(
+                "org.freedesktop.DBus.Error.NameHasNoOwner: Could not get owner of name '%s': no such name" % name)
 
-       @method(in_signature = "s")
-       def AddMatch(self, rule):
-               pass
+    @method(in_signature = "s")
+    def AddMatch(self, rule):
+        pass
 
-       @signal(signature = "sss")
-       def NameOwnerChanged(self, name, old_owner, new_owner):
-               pass
+    @signal(signature = "sss")
+    def NameOwnerChanged(self, name, old_owner, new_owner):
+        pass
 
 class IBusServer(dbus.server.Server):
-       def __init__(self, *args, **kargs):
-               super(IBusServer, self).__init__()
+    def __init__(self, *args, **kargs):
+        super(IBusServer, self).__init__()
 
-               self._ibus = IBus()
+        self._ibus = IBus()
 
-       def _on_new_connection(self, dbusconn):
-               IBusProxy(self._ibus, dbusconn)
-               DBus(dbusconn, dbus.BUS_DAEMON_PATH)
+    def _on_new_connection(self, dbusconn):
+        IBusProxy(self._ibus, dbusconn)
+        DBus(dbusconn, dbus.BUS_DAEMON_PATH)
 
 def launch_ibus():
-       dbus.mainloop.glib.DBusGMainLoop(set_as_default = True)
-       loop = gobject.MainLoop()
-       try:
-               os.mkdir("/tmp/ibus-%s" % getpass.getuser())
-       except:
-               pass
-       bus = IBusServer(ibus.IBUS_ADDR)
-       try:
-               loop.run()
-       except KeyboardInterrupt, e:
-               print "daemon exits"
-               sys.exit()
+    dbus.mainloop.glib.DBusGMainLoop(set_as_default = True)
+    loop = gobject.MainLoop()
+    try:
+        os.mkdir("/tmp/ibus-%s" % getpass.getuser())
+    except:
+        pass
+    bus = IBusServer(ibus.IBUS_ADDR)
+    try:
+        loop.run()
+    except KeyboardInterrupt, e:
+        print "daemon exits"
+        sys.exit()
 
 
 def print_help(out, v = 0):
-       print >> out, "-h, --help             show this message."
-       print >> out, "-d, --daemonize        daemonize ibus"
-       sys.exit(v)
+    print >> out, "-h, --help             show this message."
+    print >> out, "-d, --daemonize        daemonize ibus"
+    sys.exit(v)
 
 def main():
-       daemonize = False
-       shortopt = "hd"
-       longopt = ["help", "daemonize"]
-       try:
-               opts, args = getopt.getopt(sys.argv[1:], shortopt, longopt)
-       except getopt.GetoptError, err:
-               print_help(sys.stderr, 1)
-
-       for o, a in opts:
-               if o in ("-h", "--help"):
-                       print_help(sys.stdout)
-               elif o in ("-d", "--daemonize"):
-                       daemonize = True
-               else:
-                       print >> sys.stderr, "Unknown argument: %s" % o
-                       print_help(sys.stderr, 1)
-
-       if daemonize:
-               if os.fork():
-                       sys.exit()
-
-       launch_ibus()
+    daemonize = False
+    shortopt = "hd"
+    longopt = ["help", "daemonize"]
+    try:
+        opts, args = getopt.getopt(sys.argv[1:], shortopt, longopt)
+    except getopt.GetoptError, err:
+        print_help(sys.stderr, 1)
+
+    for o, a in opts:
+        if o in ("-h", "--help"):
+            print_help(sys.stdout)
+        elif o in ("-d", "--daemonize"):
+            daemonize = True
+        else:
+            print >> sys.stderr, "Unknown argument: %s" % o
+            print_help(sys.stderr, 1)
+
+    if daemonize:
+        if os.fork():
+            sys.exit()
+
+    launch_ibus()
 
 
 if __name__ == "__main__":
-       main()
+    main()
index 3056687..3067741 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -23,227 +23,227 @@ import gobject
 import ibus
 
 class InputContext(ibus.Object):
-       id = 1
-       __gsignals__ = {
-               "update-preedit" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT, gobject.TYPE_INT, gobject.TYPE_BOOLEAN)),
-               "update-aux-string" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT, gobject.TYPE_BOOLEAN)),
-               "update-lookup-table" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_PYOBJECT, gobject.TYPE_BOOLEAN)),
-               "register-properties" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_PYOBJECT, )),
-               "update-property" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_PYOBJECT, )),
-               "engine-lost" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       ()),
-       }
-
-       def __init__(self, name, ibusconn):
-               super(InputContext, self).__init__()
-               self._id = "%d" % InputContext.id
-               InputContext.id += 1
-               self._ibusconn = ibusconn
-               self._ibusconn.connect("destroy", self._ibusconn_destroy_cb)
-
-               # init default values
-               self._enable = False
-               self._engine = None
-               self._engine_handlers = []
-
-               # client state
-               self._aux_string = None
-               self._aux_attrs = None
-
-               self._use_preedit = True
-               self._preedit_string = None
-               self._preedit_attrs = None
-               self._cursor_pos = 0
-
-               self._lookup_table = None
-               self._show_lookup_table = False
-
-       def get_id(self):
-               return self._id;
-
-       def get_preedit_string(self):
-               return self._preedit_string, self._preedit_attrs, self._cursor_pos
-
-       def get_use_preedit(self):
-               return self._use_preedit
-
-       def get_aux_string(self):
-               return self._aux_string, self._aux_attrs
-
-       def process_key_event(self, keyval, is_press, state,
-                                                               reply_cb, error_cb):
-               if self._engine != None and self._enable:
-                       self._engine.process_key_event(keyval, is_press, state,
-                                                               reply_cb, error_cb)
-               else:
-                       reply_cb(False)
-
-       def set_cursor_location(self, x, y, w, h):
-               if self._engine:
-                       self._engine.set_cursor_location(x, y, w, h)
-
-       def focus_in(self):
-               if self._engine:
-                       self._engine.focus_in()
-
-       def focus_out(self):
-               if self._engine:
-                       self._engine.focus_out()
-
-       def reset(self):
-               if self._engine:
-                       self._engine.reset()
-
-       def page_up(self):
-               if self._engine:
-                       self._engine.page_up()
-
-       def page_down(self):
-               if self._engine:
-                       self._engine.page_down()
-
-       def cursor_up(self):
-               if self._engine:
-                       self._engine.cursor_up()
-
-       def cursor_down(self):
-               if self._engine:
-                       self._engine.cursor_down()
-
-       def property_activate(self, prop_name, prop_state):
-               if self._engine:
-                       self._engine.property_activate(prop_name, prop_state)
-
-       def property_show(self, prop_name):
-               if self._engine:
-                       self._engine.property_show(prop_name)
-
-       def property_hide(self, prop_name):
-               if self._engine:
-                       self._engine.property_hide(prop_name)
-
-       def is_enabled(self):
-               return self._enable
-
-       def set_enable(self, enable):
-               if self._enable != enable:
-                       self._enable = enable
-                       if self._enable:
-                               self._ibusconn.emit_dbus_signal("Enabled", self._id)
-                       else:
-                               self._ibusconn.emit_dbus_signal("Disabled", self._id)
-                       if self._engine:
-                               self._engine.set_enable(self._enable)
-
-       def commit_string(self, text):
-               self._ibusconn.emit_dbus_signal("CommitString", self._id, text)
-
-       def update_preedit(self, text, attrs, cursor_pos, visible):
-               if self._use_preedit:
-                       self._ibusconn.emit_dbus_signal("UpdatePreedit", self._id, text, attrs, cursor_pos, visible)
-               else:
-                       # show preedit on panel
-                       self.emit("update-preedit", text, attrs, cursor_pos, visible)
-
-       def set_engine(self, engine):
-               if self._engine == engine:
-                       return
-
-               if self._engine != None:
-                       self._remove_engine_handlers()
-                       self._engine.destroy()
-                       self._engine = None
-
-               self._engine = engine
-               self._install_engine_handlers()
-
-       def get_engine(self):
-               return self._engine
-
-       def get_factory(self):
-               if self._engine:
-                       return self._engine.get_factory()
-               return None
-
-       def _engine_destroy_cb(self, engine):
-               if self._engine == engine:
-                       self._remove_engine_handlers()
-               self._engine = None
-               self._enable = False
-               if self._use_preedit:
-                       self._ibusconn.emit_dbus_signal("UpdatePreedit",
-                                                               self._id,
-                                                               u"",
-                                                               ibus.AttrList().to_dbus_value(),
-                                                               0,
-                                                               False)
-               self._ibusconn.emit_dbus_signal("Disabled", self._id)
-               self.emit("engine-lost")
-
-       def _ibusconn_destroy_cb(self, ibusconn):
-               if self._engine != None:
-                       self._remove_engine_handlers()
-                       self._engine.destroy()
-                       self._engine = None
-               self.destroy()
-
-       def _commit_string_cb(self, engine, text):
-               self.commit_string(text)
-
-       def _update_preedit_cb(self, engine, text, attrs, cursor_pos, visible):
-               self.update_preedit(text, attrs, cursor_pos, visible)
-
-       def _update_aux_string_cb(self, engine, text, attrs, visible):
-               self._aux_string = text
-               self._aux_attrs = attrs
-               self.emit("update-aux-string", text, attrs, visible)
-
-       def _update_lookup_table_cb(self, engine, lookup_table, visible):
-               self._lookup_table = lookup_table
-               self.emit("update-lookup-table", lookup_table, visible)
-
-       def _register_properties_cb(self, engine, props):
-               self.emit("register-properties", props)
-
-       def _update_property_cb(self, engine, prop):
-               self.emit("update-property", prop)
-
-       def _remove_engine_handlers(self):
-               assert self._engine != None
-
-               map(self._engine.disconnect, self._engine_handlers)
-               del self._engine_handlers[:]
-
-       def _install_engine_handlers(self):
-               signals = (
-                       ("destroy", self._engine_destroy_cb),
-                       ("commit-string", self._commit_string_cb),
-                       ("update-preedit", self._update_preedit_cb),
-                       ("update-aux-string", self._update_aux_string_cb),
-                       ("update-lookup-table", self._update_lookup_table_cb),
-                       ("register-properties", self._register_properties_cb),
-                       ("update-property", self._update_property_cb)
-               )
-
-               for signal, handler in signals:
-                       id = self._engine.connect(signal, handler)
-                       self._engine_handlers.append(id)
+    id = 1
+    __gsignals__ = {
+        "update-preedit" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            (gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT, gobject.TYPE_INT, gobject.TYPE_BOOLEAN)),
+        "update-aux-string" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            (gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT, gobject.TYPE_BOOLEAN)),
+        "update-lookup-table" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            (gobject.TYPE_PYOBJECT, gobject.TYPE_BOOLEAN)),
+        "register-properties" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            (gobject.TYPE_PYOBJECT, )),
+        "update-property" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            (gobject.TYPE_PYOBJECT, )),
+        "engine-lost" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            ()),
+    }
+
+    def __init__(self, name, ibusconn):
+        super(InputContext, self).__init__()
+        self._id = "%d" % InputContext.id
+        InputContext.id += 1
+        self._ibusconn = ibusconn
+        self._ibusconn.connect("destroy", self._ibusconn_destroy_cb)
+
+        # init default values
+        self._enable = False
+        self._engine = None
+        self._engine_handlers = []
+
+        # client state
+        self._aux_string = None
+        self._aux_attrs = None
+
+        self._use_preedit = True
+        self._preedit_string = None
+        self._preedit_attrs = None
+        self._cursor_pos = 0
+
+        self._lookup_table = None
+        self._show_lookup_table = False
+
+    def get_id(self):
+        return self._id;
+
+    def get_preedit_string(self):
+        return self._preedit_string, self._preedit_attrs, self._cursor_pos
+
+    def get_use_preedit(self):
+        return self._use_preedit
+
+    def get_aux_string(self):
+        return self._aux_string, self._aux_attrs
+
+    def process_key_event(self, keyval, is_press, state,
+                                reply_cb, error_cb):
+        if self._engine != None and self._enable:
+            self._engine.process_key_event(keyval, is_press, state,
+                                reply_cb, error_cb)
+        else:
+            reply_cb(False)
+
+    def set_cursor_location(self, x, y, w, h):
+        if self._engine:
+            self._engine.set_cursor_location(x, y, w, h)
+
+    def focus_in(self):
+        if self._engine:
+            self._engine.focus_in()
+
+    def focus_out(self):
+        if self._engine:
+            self._engine.focus_out()
+
+    def reset(self):
+        if self._engine:
+            self._engine.reset()
+
+    def page_up(self):
+        if self._engine:
+            self._engine.page_up()
+
+    def page_down(self):
+        if self._engine:
+            self._engine.page_down()
+
+    def cursor_up(self):
+        if self._engine:
+            self._engine.cursor_up()
+
+    def cursor_down(self):
+        if self._engine:
+            self._engine.cursor_down()
+
+    def property_activate(self, prop_name, prop_state):
+        if self._engine:
+            self._engine.property_activate(prop_name, prop_state)
+
+    def property_show(self, prop_name):
+        if self._engine:
+            self._engine.property_show(prop_name)
+
+    def property_hide(self, prop_name):
+        if self._engine:
+            self._engine.property_hide(prop_name)
+
+    def is_enabled(self):
+        return self._enable
+
+    def set_enable(self, enable):
+        if self._enable != enable:
+            self._enable = enable
+            if self._enable:
+                self._ibusconn.emit_dbus_signal("Enabled", self._id)
+            else:
+                self._ibusconn.emit_dbus_signal("Disabled", self._id)
+            if self._engine:
+                self._engine.set_enable(self._enable)
+
+    def commit_string(self, text):
+        self._ibusconn.emit_dbus_signal("CommitString", self._id, text)
+
+    def update_preedit(self, text, attrs, cursor_pos, visible):
+        if self._use_preedit:
+            self._ibusconn.emit_dbus_signal("UpdatePreedit", self._id, text, attrs, cursor_pos, visible)
+        else:
+            # show preedit on panel
+            self.emit("update-preedit", text, attrs, cursor_pos, visible)
+
+    def set_engine(self, engine):
+        if self._engine == engine:
+            return
+
+        if self._engine != None:
+            self._remove_engine_handlers()
+            self._engine.destroy()
+            self._engine = None
+
+        self._engine = engine
+        self._install_engine_handlers()
+
+    def get_engine(self):
+        return self._engine
+
+    def get_factory(self):
+        if self._engine:
+            return self._engine.get_factory()
+        return None
+
+    def _engine_destroy_cb(self, engine):
+        if self._engine == engine:
+            self._remove_engine_handlers()
+        self._engine = None
+        self._enable = False
+        if self._use_preedit:
+            self._ibusconn.emit_dbus_signal("UpdatePreedit",
+                                self._id,
+                                u"",
+                                ibus.AttrList().to_dbus_value(),
+                                0,
+                                False)
+        self._ibusconn.emit_dbus_signal("Disabled", self._id)
+        self.emit("engine-lost")
+
+    def _ibusconn_destroy_cb(self, ibusconn):
+        if self._engine != None:
+            self._remove_engine_handlers()
+            self._engine.destroy()
+            self._engine = None
+        self.destroy()
+
+    def _commit_string_cb(self, engine, text):
+        self.commit_string(text)
+
+    def _update_preedit_cb(self, engine, text, attrs, cursor_pos, visible):
+        self.update_preedit(text, attrs, cursor_pos, visible)
+
+    def _update_aux_string_cb(self, engine, text, attrs, visible):
+        self._aux_string = text
+        self._aux_attrs = attrs
+        self.emit("update-aux-string", text, attrs, visible)
+
+    def _update_lookup_table_cb(self, engine, lookup_table, visible):
+        self._lookup_table = lookup_table
+        self.emit("update-lookup-table", lookup_table, visible)
+
+    def _register_properties_cb(self, engine, props):
+        self.emit("register-properties", props)
+
+    def _update_property_cb(self, engine, prop):
+        self.emit("update-property", prop)
+
+    def _remove_engine_handlers(self):
+        assert self._engine != None
+
+        map(self._engine.disconnect, self._engine_handlers)
+        del self._engine_handlers[:]
+
+    def _install_engine_handlers(self):
+        signals = (
+            ("destroy", self._engine_destroy_cb),
+            ("commit-string", self._commit_string_cb),
+            ("update-preedit", self._update_preedit_cb),
+            ("update-aux-string", self._update_aux_string_cb),
+            ("update-lookup-table", self._update_lookup_table_cb),
+            ("register-properties", self._register_properties_cb),
+            ("update-property", self._update_property_cb)
+        )
+
+        for signal, handler in signals:
+            id = self._engine.connect(signal, handler)
+            self._engine_handlers.append(id)
 
 gobject.type_register(InputContext)
index 44a697e..02d2cbc 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
 import dbus
 
 class Candidates(list):
-       SIGNATURE = "a(saau)"
-       def to_dbus_value(self):
-               value = dbus.Array(signature = "(saau)")
-               for text, attrs in self:
-                       value.append((text, attrs.to_dbus_value()), "(s%s)" % attrs.SIGNATURE)
+    SIGNATURE = "a(saau)"
+    def to_dbus_value(self):
+        value = dbus.Array(signature = "(saau)")
+        for text, attrs in self:
+            value.append((text, attrs.to_dbus_value()), "(s%s)" % attrs.SIGNATURE)
 
-       def from_dbus_value(self):
-               pass
+    def from_dbus_value(self):
+        pass
 
 class LookupTable(object):
-       SIGNATURE = "(ibia(saau))"
+    SIGNATURE = "(ibia(saau))"
 
-       def __init__(self, page_size = 5):
-               self._page_size = page_size
-               self._cursor_visible = False
-               self._cursor_pos = 0
-               self._candidates = []
+    def __init__(self, page_size = 5):
+        self._page_size = page_size
+        self._cursor_visible = False
+        self._cursor_pos = 0
+        self._candidates = []
 
-       def set_page_size(self, page_size):
-               self._page_size = page_size
+    def set_page_size(self, page_size):
+        self._page_size = page_size
 
-       def get_page_size(self):
-               return self._page_size
+    def get_page_size(self):
+        return self._page_size
 
-       def show_cursor(self):
-               self._cursor_visible = True
+    def show_cursor(self):
+        self._cursor_visible = True
 
-       def hide_cursor(self):
-               self._cursor_visible = False
+    def hide_cursor(self):
+        self._cursor_visible = False
 
-       def is_cursor_visible(self):
-               return self._cursor_visible
+    def is_cursor_visible(self):
+        return self._cursor_visible
 
-       def get_current_page_start(self):
-               return(self._cursor_pos / self._page_size) * self._page_size
+    def get_current_page_start(self):
+        return(self._cursor_pos / self._page_size) * self._page_size
 
-       def set_cursor_pos(self, pos):
-               self._current_pos = pos
+    def set_cursor_pos(self, pos):
+        self._current_pos = pos
 
-       def get_cursor_pos(self):
-               return self._current_pos
+    def get_cursor_pos(self):
+        return self._current_pos
 
-       def get_cursor_pos_in_current_page(self):
-               return self._current_pos % self._page_size
+    def get_cursor_pos_in_current_page(self):
+        return self._current_pos % self._page_size
 
-       def page_up(self):
-               pass
+    def page_up(self):
+        pass
 
-       def page_down(self):
-               pass
+    def page_down(self):
+        pass
 
-       def cursor_up(self):
-               pass
+    def cursor_up(self):
+        pass
 
-       def cursor_down(self):
-               pass
+    def cursor_down(self):
+        pass
 
-       def clear(self):
-               self._candidates = []
+    def clear(self):
+        self._candidates = []
 
-       def append_candidate(self, candidate, attrs = None):
-               self._candidates.append((candidates, attrs))
+    def append_candidate(self, candidate, attrs = None):
+        self._candidates.append((candidates, attrs))
 
-       def get_candidate(self, index):
-               return self._candidates[index]
+    def get_candidate(self, index):
+        return self._candidates[index]
 
-       def to_dbus_struct(self):
-               pass
+    def to_dbus_struct(self):
+        pass
 
-       def from_dbus_struct(self, value):
-               pass
+    def from_dbus_struct(self, value):
+        pass
index bb7f52f..3fbd3b8 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -24,196 +24,196 @@ import gobject
 import ibus
 
 class Panel(ibus.Object):
-       __gsignals__ = {
-               "page-up" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       ()),
-               "page-down" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       ()),
-               "cursor-up" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       ()),
-               "cursor-down" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       ()),
-               "property-activate" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_STRING, gobject.TYPE_INT)),
-               "property-show" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_STRING, )),
-               "property-hide" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_STRING, )),
-       }
-
-       def __init__(self, ibusconn, object_path):
-               super(Panel, self).__init__()
-               self._ibusconn = ibusconn
-               self._object_path = object_path
-               self._panel = self._ibusconn.get_object(self._object_path)
-
-               self._ibusconn.connect("destroy", self._ibusconn_destroy_cb)
-               self._ibusconn.connect("dbus-signal", self._dbus_signal_cb)
-
-       def set_cursor_location(self, x, y, w, h):
-               self._panel.SetCursorLocation(x, y, w, h,
-                               **ibus.DEFAULT_ASYNC_HANDLERS)
-
-       def update_preedit(self, text, attrs, cursor_pos, visible):
-               self._panel.UpdatePreedit(text, attrs, cursor_pos, visible,
-                               **ibus.DEFAULT_ASYNC_HANDLERS)
-
-       def update_aux_string(self, text, attrs, visible):
-               self._panel.UpdateAuxString(text, attrs, visible,
-                               **ibus.DEFAULT_ASYNC_HANDLERS)
-
-       def update_lookup_table(self, lookup_table, visible):
-               self._panel.UpdateLookupTable(lookup_table, visible,
-                               **ibus.DEFAULT_ASYNC_HANDLERS)
-
-       def register_properties(self, props):
-               self._panel.RegisterProperties(props,
-                               **ibus.DEFAULT_ASYNC_HANDLERS)
-
-       def update_property(self, prop):
-               self._panel.UpdateProperty(prop,
-                               **ibus.DEFAULT_ASYNC_HANDLERS)
-
-       def show_language_bar(self):
-               self._panel.ShowLanguageBar(**ibus.DEFAULT_ASYNC_HANDLERS)
-
-       def hide_language_bar(self):
-               self._panel.HideLanguageBar(**ibus.DEFAULT_ASYNC_HANDLERS)
-
-       def focus_in(self, ic):
-               self._panel.FocusIn(ic, **ibus.DEFAULT_ASYNC_HANDLERS)
-
-       def focus_out(self, ic):
-               self._panel.FocusOut(ic, **ibus.DEFAULT_ASYNC_HANDLERS)
-
-       def states_changed(self):
-               self._panel.StatesChanged(**ibus.DEFAULT_ASYNC_HANDLERS)
-
-       def reset(self):
-               self._panel.Reset(**ibus.DEFAULT_ASYNC_HANDLERS)
-
-       def destroy(self):
-               if self._ibusconn != None:
-                       self._panel.Destroy(**ibus.DEFAULT_ASYNC_HANDLERS)
-
-               self._ibusconn = None
-               self._panel = None
-               ibus.Object.destroy(self)
-
-       # signal callbacks
-       def _ibusconn_destroy_cb(self, ibusconn):
-               self._ibusconn = None
-               self.destroy()
-
-       def _dbus_signal_cb(self, ibusconn, message):
-               if message.is_signal(ibus.IBUS_PANEL_IFACE, "PageUp"):
-                       self.emit("page-up")
-               elif message.is_signal(ibus.IBUS_PANEL_IFACE, "PageDown"):
-                       self.emit("page-down")
-               elif message.is_signal(ibus.IBUS_PANEL_IFACE, "CursorUp"):
-                       self.emit("cursor-up")
-               elif message.is_signal(ibus.IBUS_PANEL_IFACE, "CursorDown"):
-                       self.emit("cursor-down")
-               elif message.is_signal(ibus.IBUS_PANEL_IFACE, "PropertyActivate"):
-                       args = message.get_args_list()
-                       self.emit("property-activate", args[0], args[1])
-               elif message.is_signal(ibus.IBUS_PANEL_IFACE, "PropertyShow"):
-                       args = message.get_args_list()
-                       self.emit("property-show", args[0])
-               elif message.is_signal(ibus.IBUS_PANEL_IFACE, "PropertyHide"):
-                       args = message.get_args_list()
-                       self.emit("property-hide", args[0])
-               else:
-                       return False
-               return True
-
-       # methods for cmp
-       # def __lt__(self, other):
-       #               x = self.get_info()
-       #               y = other.get_info()
-       #               if x[1] < y[1]: return True
-       #               if x[1] == y[1]: return x[0] < y[0]
-       #
-       #       def __gt__(self, other):
-       #               x = self.get_info()
-       #               y = other.get_info()
-       #               if x[1] > y[1]: return True
-       #               if x[1] == y[1]: return x[0] > y[0]
+    __gsignals__ = {
+        "page-up" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            ()),
+        "page-down" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            ()),
+        "cursor-up" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            ()),
+        "cursor-down" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            ()),
+        "property-activate" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            (gobject.TYPE_STRING, gobject.TYPE_INT)),
+        "property-show" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            (gobject.TYPE_STRING, )),
+        "property-hide" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            (gobject.TYPE_STRING, )),
+    }
+
+    def __init__(self, ibusconn, object_path):
+        super(Panel, self).__init__()
+        self._ibusconn = ibusconn
+        self._object_path = object_path
+        self._panel = self._ibusconn.get_object(self._object_path)
+
+        self._ibusconn.connect("destroy", self._ibusconn_destroy_cb)
+        self._ibusconn.connect("dbus-signal", self._dbus_signal_cb)
+
+    def set_cursor_location(self, x, y, w, h):
+        self._panel.SetCursorLocation(x, y, w, h,
+                **ibus.DEFAULT_ASYNC_HANDLERS)
+
+    def update_preedit(self, text, attrs, cursor_pos, visible):
+        self._panel.UpdatePreedit(text, attrs, cursor_pos, visible,
+                **ibus.DEFAULT_ASYNC_HANDLERS)
+
+    def update_aux_string(self, text, attrs, visible):
+        self._panel.UpdateAuxString(text, attrs, visible,
+                **ibus.DEFAULT_ASYNC_HANDLERS)
+
+    def update_lookup_table(self, lookup_table, visible):
+        self._panel.UpdateLookupTable(lookup_table, visible,
+                **ibus.DEFAULT_ASYNC_HANDLERS)
+
+    def register_properties(self, props):
+        self._panel.RegisterProperties(props,
+                **ibus.DEFAULT_ASYNC_HANDLERS)
+
+    def update_property(self, prop):
+        self._panel.UpdateProperty(prop,
+                **ibus.DEFAULT_ASYNC_HANDLERS)
+
+    def show_language_bar(self):
+        self._panel.ShowLanguageBar(**ibus.DEFAULT_ASYNC_HANDLERS)
+
+    def hide_language_bar(self):
+        self._panel.HideLanguageBar(**ibus.DEFAULT_ASYNC_HANDLERS)
+
+    def focus_in(self, ic):
+        self._panel.FocusIn(ic, **ibus.DEFAULT_ASYNC_HANDLERS)
+
+    def focus_out(self, ic):
+        self._panel.FocusOut(ic, **ibus.DEFAULT_ASYNC_HANDLERS)
+
+    def states_changed(self):
+        self._panel.StatesChanged(**ibus.DEFAULT_ASYNC_HANDLERS)
+
+    def reset(self):
+        self._panel.Reset(**ibus.DEFAULT_ASYNC_HANDLERS)
+
+    def destroy(self):
+        if self._ibusconn != None:
+            self._panel.Destroy(**ibus.DEFAULT_ASYNC_HANDLERS)
+
+        self._ibusconn = None
+        self._panel = None
+        ibus.Object.destroy(self)
+
+    # signal callbacks
+    def _ibusconn_destroy_cb(self, ibusconn):
+        self._ibusconn = None
+        self.destroy()
+
+    def _dbus_signal_cb(self, ibusconn, message):
+        if message.is_signal(ibus.IBUS_PANEL_IFACE, "PageUp"):
+            self.emit("page-up")
+        elif message.is_signal(ibus.IBUS_PANEL_IFACE, "PageDown"):
+            self.emit("page-down")
+        elif message.is_signal(ibus.IBUS_PANEL_IFACE, "CursorUp"):
+            self.emit("cursor-up")
+        elif message.is_signal(ibus.IBUS_PANEL_IFACE, "CursorDown"):
+            self.emit("cursor-down")
+        elif message.is_signal(ibus.IBUS_PANEL_IFACE, "PropertyActivate"):
+            args = message.get_args_list()
+            self.emit("property-activate", args[0], args[1])
+        elif message.is_signal(ibus.IBUS_PANEL_IFACE, "PropertyShow"):
+            args = message.get_args_list()
+            self.emit("property-show", args[0])
+        elif message.is_signal(ibus.IBUS_PANEL_IFACE, "PropertyHide"):
+            args = message.get_args_list()
+            self.emit("property-hide", args[0])
+        else:
+            return False
+        return True
+
+    # methods for cmp
+    # def __lt__(self, other):
+    #        x = self.get_info()
+    #        y = other.get_info()
+    #        if x[1] < y[1]: return True
+    #        if x[1] == y[1]: return x[0] < y[0]
+    #
+    #    def __gt__(self, other):
+    #        x = self.get_info()
+    #        y = other.get_info()
+    #        if x[1] > y[1]: return True
+    #        if x[1] == y[1]: return x[0] > y[0]
 
 gobject.type_register(Panel)
 
 class DummyPanel(ibus.Object):
-       __gsignals__ = {
-               "page-up" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       ()),
-               "page-down" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       ()),
-               "cursor-up" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       ()),
-               "cursor-down" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       ()),
-               "property-activate" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_STRING, )),
-       }
-
-       def set_cursor_location(self, x, y, w, h):
-               pass
-
-       def update_preedit(self, text, attrs, cursor_pos, visible):
-               pass
-
-       def update_aux_string(self, text, attrs, visible):
-               pass
-
-       def update_lookup_table(self, lookup_table, visible):
-               pass
-
-       def register_properties(self, props):
-               pass
-
-       def update_property(self, prop):
-               pass
-
-       def show_language_bar(self):
-               pass
-
-       def hide_language_bar(self):
-               pass
-
-       def focus_in(self, ic):
-               pass
-
-       def focus_out(self, ic):
-               pass
-
-       def states_changed(self):
-               pass
-
-       def reset(self):
-               pass
+    __gsignals__ = {
+        "page-up" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            ()),
+        "page-down" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            ()),
+        "cursor-up" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            ()),
+        "cursor-down" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            ()),
+        "property-activate" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            (gobject.TYPE_STRING, )),
+    }
+
+    def set_cursor_location(self, x, y, w, h):
+        pass
+
+    def update_preedit(self, text, attrs, cursor_pos, visible):
+        pass
+
+    def update_aux_string(self, text, attrs, visible):
+        pass
+
+    def update_lookup_table(self, lookup_table, visible):
+        pass
+
+    def register_properties(self, props):
+        pass
+
+    def update_property(self, prop):
+        pass
+
+    def show_language_bar(self):
+        pass
+
+    def hide_language_bar(self):
+        pass
+
+    def focus_in(self, ic):
+        pass
+
+    def focus_out(self, ic):
+        pass
+
+    def states_changed(self):
+        pass
+
+    def reset(self):
+        pass
 
 gobject.type_register(DummyPanel)
index 6ad33b4..4676cc7 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -26,162 +26,162 @@ import glob
 import ibus
 
 class Engine(ibus.Object):
-       def __init__(self, name, lang = "other", icon = "", author = "", credits = "", _exec = "", pid = 0):
-               super(Engine, self).__init__()
-               self._name = name
-               self._lang = lang
-               self._icon = icon
-               self._author = author
-               self._credits = credits
-               self._exec = _exec
-               self._pid = pid
-
-       def start(self):
-               if self._pid != 0:
-                       return
-               pid = os.fork()
-               if pid > 0: # parent
-                       self._pid = pid
-               elif pid == 0: # child
-                       os.setpgrp()
-                       args = self._exec.split()
-                       os.execv(args[0], args)
-                       sys.exit(1)
-
-       def stop(self, force = False):
-               if self._pid == 0:
-                       return
-               try:
-                       if force:
-                               os.kill(-self._pid, signal.SIGKILL)
-                       else:
-                               os.kill(-self._pid, signal.SIGTERM)
-               except:
-                       pass
-
-       def engine_exit(self, pid):
-               if self._pid == pid:
-                       self._pid = 0
-                       return True
-               return False
-
-       def __eq__(self, o):
-               # We don't test icon author & credits
-               return self._name == o._name and \
-                       self._lang == o._lang and \
-                       self._exec == o._exec
-
-       def __str__(self):
-               return "Engine('%s', '%s', '%s', '%s', '%s', '%s', %d" % (self._name, self._lang, \
-                       self._icon, self._author, \
-                       self._credits, self._exec, \
-                       self._pid)
+    def __init__(self, name, lang = "other", icon = "", author = "", credits = "", _exec = "", pid = 0):
+        super(Engine, self).__init__()
+        self._name = name
+        self._lang = lang
+        self._icon = icon
+        self._author = author
+        self._credits = credits
+        self._exec = _exec
+        self._pid = pid
+
+    def start(self):
+        if self._pid != 0:
+            return
+        pid = os.fork()
+        if pid > 0: # parent
+            self._pid = pid
+        elif pid == 0: # child
+            os.setpgrp()
+            args = self._exec.split()
+            os.execv(args[0], args)
+            sys.exit(1)
+
+    def stop(self, force = False):
+        if self._pid == 0:
+            return
+        try:
+            if force:
+                os.kill(-self._pid, signal.SIGKILL)
+            else:
+                os.kill(-self._pid, signal.SIGTERM)
+        except:
+            pass
+
+    def engine_exit(self, pid):
+        if self._pid == pid:
+            self._pid = 0
+            return True
+        return False
+
+    def __eq__(self, o):
+        # We don't test icon author & credits
+        return self._name == o._name and \
+            self._lang == o._lang and \
+            self._exec == o._exec
+
+    def __str__(self):
+        return "Engine('%s', '%s', '%s', '%s', '%s', '%s', %d" % (self._name, self._lang, \
+            self._icon, self._author, \
+            self._credits, self._exec, \
+            self._pid)
 
 class Register(ibus.Object):
-       def __init__(self):
-               super(Register, self).__init__()
-               self._engines = dict()
-               self._load()
-               signal.signal(signal.SIGCHLD, self._sigchld_cb)
-
-       def start_engine(self, lang, name):
-               key = (lang, name)
-               if key not in self._engines:
-                       raise ibus.IBusException("Can not find engine(%s, %s)" % (lang, name))
-
-               engine = self._engines[(lang, name)]
-               engine.start()
-
-       def stop_engine(self, lang, name):
-               key = (lang, name)
-               if key not in self._engines:
-                       raise ibus.IBusException("Can not find engine(%s, %s)" % (lang, name))
-
-               engine = self._engines[(lang, name)]
-               engine.stop()
-
-       def restart_engine(self, lang, name):
-               key = (lang, name)
-               if key not in self._engines:
-                       raise ibus.IBusException("Can not find engine (%s, %s)" % (lang, name))
-
-               engine = self._engines[(lang, name)]
-               engine.stop()
-               engine.start()
-
-       def list_engines(self):
-               engines = []
-               for key, e in self._engines.items():
-                       engines.append((e._name, e._lang, e._icon, e._author, e._credits, e._exec, e._pid != 0))
-               return engines
-
-       def _sigchld_cb(self, sig, f):
-               pid, state = os.wait()
-               for key, engine in self._engines.items():
-                       if engine.engine_exit(pid):
-                               break
-
-       def _load(self):
-               _file = path.abspath(__file__)
-               _dir = path.dirname(_file) + "./../engine"
-               _dir = path.abspath(_dir)
-               _dir = "/usr/share/ibus/engine"
-               for _file in glob.glob(_dir + "/*.engine"):
-                       engine = self._load_engine(_file)
-                       if (engine._lang, engine._name) in self._engines:
-                               old_engine = self._engines[(engine._lang, engine._name)]
-                               if old_engine == engine:
-                                       engine._pid = old_engine._pid
-                                       self._engines[(engine._lang, engine._name)] = engine
-                               else:
-                                       self._engines[(engine._lang, engine._name + " (old)")] = old_engine
-                                       self._engines[(engine._lang, engine._name)] = engine
-                       else:
-                               self._engines[(engine._lang, engine._name)] = engine
-
-
-
-       def _load_engine(self, _file):
-               f = file(_file)
-               name = None
-               lang = "other"
-               icon = ""
-               author = ""
-               credits = ""
-               _exec = None
-               line = 0
-               for l in f:
-                       line += 1
-                       l = l.strip()
-                       if l.startswith("#"):
-                               continue
-                       n, v = l.split("=")
-                       if n == "Name":
-                               name = v
-                       elif n == "Lang":
-                               lang = v
-                       elif n == "Icon":
-                               icon = v
-                       elif n == "Author":
-                               author = v
-                       elif n == "Credits":
-                               credits = v
-                       elif n == "Exec":
-                               _exec = v
-                       else:
-                               raise Exception("%s:%d\nUnknown value name = %s" % (_file, line, n))
-
-               if name == None:
-                       raise Exception("%s: no name" % _file)
-               if _exec == None:
-                       raise Exception("%s: no exec" % _file)
-
-               return Engine(name, lang, icon, author, credits, _exec)
+    def __init__(self):
+        super(Register, self).__init__()
+        self._engines = dict()
+        self._load()
+        signal.signal(signal.SIGCHLD, self._sigchld_cb)
+
+    def start_engine(self, lang, name):
+        key = (lang, name)
+        if key not in self._engines:
+            raise ibus.IBusException("Can not find engine(%s, %s)" % (lang, name))
+
+        engine = self._engines[(lang, name)]
+        engine.start()
+
+    def stop_engine(self, lang, name):
+        key = (lang, name)
+        if key not in self._engines:
+            raise ibus.IBusException("Can not find engine(%s, %s)" % (lang, name))
+
+        engine = self._engines[(lang, name)]
+        engine.stop()
+
+    def restart_engine(self, lang, name):
+        key = (lang, name)
+        if key not in self._engines:
+            raise ibus.IBusException("Can not find engine (%s, %s)" % (lang, name))
+
+        engine = self._engines[(lang, name)]
+        engine.stop()
+        engine.start()
+
+    def list_engines(self):
+        engines = []
+        for key, e in self._engines.items():
+            engines.append((e._name, e._lang, e._icon, e._author, e._credits, e._exec, e._pid != 0))
+        return engines
+
+    def _sigchld_cb(self, sig, f):
+        pid, state = os.wait()
+        for key, engine in self._engines.items():
+            if engine.engine_exit(pid):
+                break
+
+    def _load(self):
+        _file = path.abspath(__file__)
+        _dir = path.dirname(_file) + "./../engine"
+        _dir = path.abspath(_dir)
+        _dir = "/usr/share/ibus/engine"
+        for _file in glob.glob(_dir + "/*.engine"):
+            engine = self._load_engine(_file)
+            if (engine._lang, engine._name) in self._engines:
+                old_engine = self._engines[(engine._lang, engine._name)]
+                if old_engine == engine:
+                    engine._pid = old_engine._pid
+                    self._engines[(engine._lang, engine._name)] = engine
+                else:
+                    self._engines[(engine._lang, engine._name + " (old)")] = old_engine
+                    self._engines[(engine._lang, engine._name)] = engine
+            else:
+                self._engines[(engine._lang, engine._name)] = engine
+
+
+
+    def _load_engine(self, _file):
+        f = file(_file)
+        name = None
+        lang = "other"
+        icon = ""
+        author = ""
+        credits = ""
+        _exec = None
+        line = 0
+        for l in f:
+            line += 1
+            l = l.strip()
+            if l.startswith("#"):
+                continue
+            n, v = l.split("=")
+            if n == "Name":
+                name = v
+            elif n == "Lang":
+                lang = v
+            elif n == "Icon":
+                icon = v
+            elif n == "Author":
+                author = v
+            elif n == "Credits":
+                credits = v
+            elif n == "Exec":
+                _exec = v
+            else:
+                raise Exception("%s:%d\nUnknown value name = %s" % (_file, line, n))
+
+        if name == None:
+            raise Exception("%s: no name" % _file)
+        if _exec == None:
+            raise Exception("%s: no exec" % _file)
+
+        return Engine(name, lang, icon, author, credits, _exec)
 
 if __name__ == "__main__":
-       import time
-       reg = Register()
-       reg.start_engine("zh", "py")
-       time.sleep(3)
-       reg.stop_engine("zh", "py")
+    import time
+    reg = Register()
+    reg.start_engine("zh", "py")
+    time.sleep(3)
+    reg.stop_engine("zh", "py")
 
index 43e021e..9753fa1 100644 (file)
@@ -3,48 +3,48 @@ import ibus
 from ibus import interface
 
 class Config (ibus.Object):
-       def __init__ (self, proxy):
-               ibus.Object.__init__ (self)
-               self._proxy = proxy
-               self._client = gconf.Client ()
-               self._client.connect ("value-changed", self._value_changed_cb)
-               self._client.add_dir ("/", gconf.CLIENT_PRELOAD_NONE)
+    def __init__ (self, proxy):
+        ibus.Object.__init__ (self)
+        self._proxy = proxy
+        self._client = gconf.Client ()
+        self._client.connect ("value-changed", self._value_changed_cb)
+        self._client.add_dir ("/", gconf.CLIENT_PRELOAD_NONE)
 
-       def get_string (self, key):
-               pass
-       def get_int (self, key):
-               pass
-       def get_bool (self, key):
-               pass
-       
-       def set_string (self, key, value):
-               pass
-       def set_int (self, key, value):
-               pass
-       def set_bool (self, key, value):
-               pass
+    def get_string (self, key):
+        pass
+    def get_int (self, key):
+        pass
+    def get_bool (self, key):
+        pass
+    
+    def set_string (self, key, value):
+        pass
+    def set_int (self, key, value):
+        pass
+    def set_bool (self, key, value):
+        pass
 
-       def _value_changed_cb (self, gconf, key, value):
-               value = self._client.get_value (key)
-               print key, type (value), value
-               self._proxy.ValueChanged (key, value)
+    def _value_changed_cb (self, gconf, key, value):
+        value = self._client.get_value (key)
+        print key, type (value), value
+        self._proxy.ValueChanged (key, value)
 
 class ConfigProxy (interface.IConfig):
-       def __init__ (self, dbusconn, object_path, _ibus):
-               interface.IConfig.__init__ (self, dbusconn, object_path)
-               self._dbusconn = dbusconn
-               self._config = Config (self)
+    def __init__ (self, dbusconn, object_path, _ibus):
+        interface.IConfig.__init__ (self, dbusconn, object_path)
+        self._dbusconn = dbusconn
+        self._config = Config (self)
 
-       def GetString (self, key):
-               return self._config.get_string (key)
-       def GetInt (self, key):
-               return self._config.get_int (key)
-       def GetBool (self, key):
-               return self._config.get_bool (key)
+    def GetString (self, key):
+        return self._config.get_string (key)
+    def GetInt (self, key):
+        return self._config.get_int (key)
+    def GetBool (self, key):
+        return self._config.get_bool (key)
 
-       def SetString (self, key, value):
-               self._config.set_string (key, value)
-       def SetInt (self, key, value):
-               self._config.set_int (key, value)
-       def SetBool (self, key, value):
-               self._config.set_bool (key, value)
+    def SetString (self, key, value):
+        self._config.set_string (key, value)
+    def SetInt (self, key, value):
+        self._config.set_int (key, value)
+    def SetBool (self, key, value):
+        self._config.set_bool (key, value)
index 9ddfd0f..69f301c 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -29,60 +29,60 @@ import config
 import gtk
 
 class GconfApplication:
-       def __init__ (self):
-               self._dbusconn = dbus.connection.Connection (ibus.IBUS_ADDR)
-               self._dbusconn.add_signal_receiver (self._disconnected_cb,
-                                                       "Disconnected",
-                                                       dbus_interface = dbus.LOCAL_IFACE)
+    def __init__ (self):
+        self._dbusconn = dbus.connection.Connection (ibus.IBUS_ADDR)
+        self._dbusconn.add_signal_receiver (self._disconnected_cb,
+                            "Disconnected",
+                            dbus_interface = dbus.LOCAL_IFACE)
 
-               self._ibus = self._dbusconn.get_object (ibus.IBUS_NAME, ibus.IBUS_PATH)
-               self._config = config.ConfigProxy (self._dbusconn, "/org/freedesktop/IBus/Config", self._ibus)
+        self._ibus = self._dbusconn.get_object (ibus.IBUS_NAME, ibus.IBUS_PATH)
+        self._config = config.ConfigProxy (self._dbusconn, "/org/freedesktop/IBus/Config", self._ibus)
 
-               self._ibus.RegisterConfig (self._config, True)
+        self._ibus.RegisterConfig (self._config, True)
 
-       def run (self):
-               gtk.main ()
+    def run (self):
+        gtk.main ()
 
-       def _disconnected_cb (self):
-               print "disconnected"
-               gtk.main_quit ()
+    def _disconnected_cb (self):
+        print "disconnected"
+        gtk.main_quit ()
 
 
 
 def launch_gconf ():
-       dbus.mainloop.glib.DBusGMainLoop (set_as_default=True)
-       # gtk.settings_get_default ().props.gtk_theme_name = "/home/phuang/.themes/aud-Default/gtk-2.0/gtkrc"
-       # gtk.rc_parse ("./themes/default/gtkrc")
-       GconfApplication ().run ()
+    dbus.mainloop.glib.DBusGMainLoop (set_as_default=True)
+    # gtk.settings_get_default ().props.gtk_theme_name = "/home/phuang/.themes/aud-Default/gtk-2.0/gtkrc"
+    # gtk.rc_parse ("./themes/default/gtkrc")
+    GconfApplication ().run ()
 
 def print_help (out, v = 0):
-       print >> out, "-h, --help             show this message."
-       print >> out, "-d, --daemonize        daemonize ibus"
-       sys.exit (v)
+    print >> out, "-h, --help             show this message."
+    print >> out, "-d, --daemonize        daemonize ibus"
+    sys.exit (v)
 
 def main ():
-       daemonize = False
-       shortopt = "hd"
-       longopt = ["help", "daemonize"]
-       try:
-               opts, args = getopt.getopt (sys.argv[1:], shortopt, longopt)
-       except getopt.GetoptError, err:
-               print_help (sys.stderr, 1)
+    daemonize = False
+    shortopt = "hd"
+    longopt = ["help", "daemonize"]
+    try:
+        opts, args = getopt.getopt (sys.argv[1:], shortopt, longopt)
+    except getopt.GetoptError, err:
+        print_help (sys.stderr, 1)
 
-       for o, a in opts:
-               if o in ("-h", "--help"):
-                       print_help (sys.stdout)
-               elif o in ("-d", "--daemonize"):
-                       daemonize = True
-               else:
-                       print >> sys.stderr, "Unknown argument: %s" % o
-                       print_help (sys.stderr, 1)
+    for o, a in opts:
+        if o in ("-h", "--help"):
+            print_help (sys.stdout)
+        elif o in ("-d", "--daemonize"):
+            daemonize = True
+        else:
+            print >> sys.stderr, "Unknown argument: %s" % o
+            print_help (sys.stderr, 1)
 
-       if daemonize:
-               if os.fork ():
-                       sys.exit ()
+    if daemonize:
+        if os.fork ():
+            sys.exit ()
 
-       launch_gconf ()
+    launch_gconf ()
 
 if __name__ == "__main__":
-       main ()
+    main ()
index 204f436..cf3c362 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
index d5ef8a2..b9d9b3a 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -23,18 +23,18 @@ import ibus
 import dbus
 
 class Application:
-       def __init__ (self):
-               self._dbusconn = dbus.connection.Connection (ibus.IBUS_ADDR)
-               self._dbusconn.add_signal_receiver (self._disconnected_cb,
-                                                       "Disconnected",
-                                                       dbus_interface = dbus.LOCAL_IFACE)
+    def __init__ (self):
+        self._dbusconn = dbus.connection.Connection (ibus.IBUS_ADDR)
+        self._dbusconn.add_signal_receiver (self._disconnected_cb,
+                            "Disconnected",
+                            dbus_interface = dbus.LOCAL_IFACE)
 
-       def _disconnected_cb (self):
-               self.on_disconnected ()
+    def _disconnected_cb (self):
+        self.on_disconnected ()
 
-       def on_disconnected (self):
-               pass
+    def on_disconnected (self):
+        pass
 
-       def run (self):
-               pass
+    def run (self):
+        pass
 
index fad9abe..3925d1d 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
 # Boston, MA  02111-1307  USA
 
 __all__ = (
-               "ATTR_TYPE_UNDERLINE",
-               "ATTR_TYPE_FOREGROUND",
-               "ATTR_TYPE_BACKGROUND",
-               "Attribute",
-               "AttributeUnderline",
-               "AttributeForeground",
-               "AttributeBackground",
-               "AttrList",
-               "attribute_from_dbus_value",
-               "attr_list_from_dbus_value",
-               "ARGB", "RGB"
-       )
+        "ATTR_TYPE_UNDERLINE",
+        "ATTR_TYPE_FOREGROUND",
+        "ATTR_TYPE_BACKGROUND",
+        "Attribute",
+        "AttributeUnderline",
+        "AttributeForeground",
+        "AttributeBackground",
+        "AttrList",
+        "attribute_from_dbus_value",
+        "attr_list_from_dbus_value",
+        "ARGB", "RGB"
+    )
 
 import dbus
 
@@ -40,85 +40,85 @@ ATTR_TYPE_FOREGROUND = 2
 ATTR_TYPE_BACKGROUND = 3
 
 class Attribute:
-       def __init__ (self, type, value, start_index, end_index):
-               self._type = type
-               self._value = value
-               self._start_index = start_index
-               self._end_index = end_index
-
-       def to_dbus_value (self):
-               values = [dbus.UInt32 (self._type),
-                               dbus.UInt32 (self._value),
-                               dbus.UInt32 (self._start_index),
-                               dbus.UInt32 (self._end_index)]
-               return dbus.Array (values, signature="u")
-
-       def from_dbus_value (self, value):
-               if not isinstance (value, dbus.Array):
-                       raise dbus.Exception ("Attribute must be dbus.Array (uuuu)")
-
-               if len (value) != 4 or not all (map (lambda x: isinstance (x, dbus.UInt32), value)):
-                       raise dbus.Exception ("Attribute must be dbus.Array (uuuu)")
-
-               self._type = value[0]
-               self._value = value[1]
-               self._start_index = value[2]
-               self._end_index = value[3]
+    def __init__ (self, type, value, start_index, end_index):
+        self._type = type
+        self._value = value
+        self._start_index = start_index
+        self._end_index = end_index
+
+    def to_dbus_value (self):
+        values = [dbus.UInt32 (self._type),
+                dbus.UInt32 (self._value),
+                dbus.UInt32 (self._start_index),
+                dbus.UInt32 (self._end_index)]
+        return dbus.Array (values, signature="u")
+
+    def from_dbus_value (self, value):
+        if not isinstance (value, dbus.Array):
+            raise dbus.Exception ("Attribute must be dbus.Array (uuuu)")
+
+        if len (value) != 4 or not all (map (lambda x: isinstance (x, dbus.UInt32), value)):
+            raise dbus.Exception ("Attribute must be dbus.Array (uuuu)")
+
+        self._type = value[0]
+        self._value = value[1]
+        self._start_index = value[2]
+        self._end_index = value[3]
 
 def attribute_from_dbus_value (value):
-       attribute = Attribute (0, 0, 0, 0)
-       attribute.from_dbus_value (value)
-       return attribute
-               
+    attribute = Attribute (0, 0, 0, 0)
+    attribute.from_dbus_value (value)
+    return attribute
+        
 class AttributeUnderline (Attribute):
-       def __init__(self, value, start_index, end_index):
-               Attribute.__init__ (self, ATTR_TYPE_UNDERLINE, value, start_index, end_index)
+    def __init__(self, value, start_index, end_index):
+        Attribute.__init__ (self, ATTR_TYPE_UNDERLINE, value, start_index, end_index)
 
 class AttributeForeground (Attribute):
-       def __init__(self, value, start_index, end_index):
-               Attribute.__init__ (self, ATTR_TYPE_FOREGROUND, value, start_index, end_index)
+    def __init__(self, value, start_index, end_index):
+        Attribute.__init__ (self, ATTR_TYPE_FOREGROUND, value, start_index, end_index)
 
 class AttributeBackground (Attribute):
-       def __init__(self, value, start_index, end_index):
-               Attribute.__init__ (self, ATTR_TYPE_BACKGROUND, value, start_index, end_index)
+    def __init__(self, value, start_index, end_index):
+        Attribute.__init__ (self, ATTR_TYPE_BACKGROUND, value, start_index, end_index)
 
 def ARGB (a, r, g, b):
-       return ((a & 0xff)<<24) + ((r & 0xff) << 16) + ((g & 0xff) << 8) + (b & 0xff)
+    return ((a & 0xff)<<24) + ((r & 0xff) << 16) + ((g & 0xff) << 8) + (b & 0xff)
 
 def RGB (r, g, b):
-       return ARGB (255, r, g, b)
+    return ARGB (255, r, g, b)
 
 class AttrList:
-       def __init__ (self, attrs = []):
-               self._attrs = []
-               for attr in attrs:
-                       self.append (attr)
+    def __init__ (self, attrs = []):
+        self._attrs = []
+        for attr in attrs:
+            self.append (attr)
 
-       def append (self, attr):
-               assert isinstance (attr, Attribute)
-               self._attrs.append (attr)
+    def append (self, attr):
+        assert isinstance (attr, Attribute)
+        self._attrs.append (attr)
 
-       def to_dbus_value (self):
-               array = dbus.Array (signature = "v")
-               for attr in self._attrs:
-                       array.append (attr.to_dbus_value ())
-               return array
+    def to_dbus_value (self):
+        array = dbus.Array (signature = "v")
+        for attr in self._attrs:
+            array.append (attr.to_dbus_value ())
+        return array
 
-       def from_dbus_value (self, value):
-               attrs = []
-               if not isinstance (value, dbus.Array):
-                       raise IBusException ("AttrList must from dbus.Array (uuuu)")
+    def from_dbus_value (self, value):
+        attrs = []
+        if not isinstance (value, dbus.Array):
+            raise IBusException ("AttrList must from dbus.Array (uuuu)")
 
-               for v in value:
-                       attr = attribute_from_dbus_value (v)
-                       attrs.append (attr)
+        for v in value:
+            attr = attribute_from_dbus_value (v)
+            attrs.append (attr)
 
-               self._attrs = attrs
+        self._attrs = attrs
 
-       def __iter__ (self):
-               return self._attrs.__iter__ ()
+    def __iter__ (self):
+        return self._attrs.__iter__ ()
 
 def attr_list_from_dbus_value (value):
-       attrs = AttrList ()
-       attrs.from_dbus_value (value)
-       return attrs
+    attrs = AttrList ()
+    attrs.from_dbus_value (value)
+    return attrs
index 3c7f910..ba05d48 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
 # Boston, MA  02111-1307  USA
 
 __all__ = (
-               "IBUS_ADDR",
-               "IBUS_IFACE",
-               "IBUS_NAME",
-               "IBUS_PATH",
-               "IBUS_CONFIG_IFACE",
-               "IBUS_ENGINE_FACTORY_IFACE",
-               "IBUS_ENGINE_IFACE",
-               "IBUS_PANEL_IFACE",
-               "default_reply_handler",
-               "default_error_handler",
-               "DEFAULT_ASYNC_HANDLERS"
-       )
+        "IBUS_ADDR",
+        "IBUS_IFACE",
+        "IBUS_NAME",
+        "IBUS_PATH",
+        "IBUS_CONFIG_IFACE",
+        "IBUS_ENGINE_FACTORY_IFACE",
+        "IBUS_ENGINE_IFACE",
+        "IBUS_PANEL_IFACE",
+        "default_reply_handler",
+        "default_error_handler",
+        "DEFAULT_ASYNC_HANDLERS"
+    )
 
 import os
 import sys
@@ -39,7 +39,7 @@ import getpass
 
 display = os.environ["DISPLAY"]
 if "." not in display:
-       display += ".0" 
+    display += ".0" 
 
 IBUS_ADDR = "unix:path=/tmp/ibus-%s/ibus-%s" % (getpass.getuser(), display.replace(":", "-"))
 # IBUS_ADDR  = "tcp:host=localhost,port=7799"
@@ -54,12 +54,12 @@ IBUS_ENGINE_IFACE = "org.freedesktop.IBus.Engine"
 IBUS_PANEL_IFACE = "org.freedesktop.IBus.Panel"
 
 def default_reply_handler( *args):
-       pass
+    pass
 
 def default_error_handler(e):
-       print >> sys.stderr, e
+    print >> sys.stderr, e
 
 DEFAULT_ASYNC_HANDLERS = {
-       "reply_handler" : default_reply_handler,
-       "error_handler" : default_error_handler
+    "reply_handler" : default_reply_handler,
+    "error_handler" : default_error_handler
 }
index cf5ea36..38f775a 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
 # Boston, MA  02111-1307  USA
 
 __all__ = (
-               "Connection",
-       )
+        "Connection",
+    )
 import dbus.connection
 import ibus
 
 class Connection(dbus.connection.Connection):
-       def __new__(cls):
-               return super(Connection, cls).__new__(cls, ibus.IBUS_ADDR)
+    def __new__(cls):
+        return super(Connection, cls).__new__(cls, ibus.IBUS_ADDR)
 
-       def get_ibus(self):
-               return self.get_object(ibus.IBUS_NAME, ibus.IBUS_PATH)
+    def get_ibus(self):
+        return self.get_object(ibus.IBUS_NAME, ibus.IBUS_PATH)
 
index 0631a10..9e82317 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -22,4 +22,4 @@
 __all__ = ("IBusException", )
 
 class IBusException(Exception):
-       pass
+    pass
index 3a85fe8..b70eb35 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
 # Boston, MA  02111-1307  USA
 
 __all__ = (
-               "PangoAttrList",
-       )
+        "PangoAttrList",
+    )
 
 import pango
 import ibus
 
 class PangoAttrList(pango.AttrList):
-       def __init__(self, attrs, unistr):
-               super(PangoAttrList, self).__init__()
-               if attrs == None:
-                       return
-               offsets = []
-               offset = 0
-               for c in unistr:
-                       offsets.append(offset)
-                       offset += len(c.encode("utf8"))
-               offsets.append(offset)
-               for attr in attrs:
-                       pango_attr = None
-                       start_index = attr._start_index if attr._start_index >= 0 else 0
-                       end_index = attr._end_index if attr._end_index >= 0 else 0
-                       start_index = offsets[start_index] if start_index < len(offsets) else offsets[-1]
-                       end_index = offsets[end_index] if end_index < len(offsets) else offsets[-1]
-                       if attr._type == ibus.ATTR_TYPE_FOREGROUND:
-                               r = (attr._value & 0x00ff0000) >> 8
-                               g = (attr._value & 0x0000ff00)
-                               b = (attr._value & 0x000000ff) << 8
-                               pango_attr = pango.AttrForeground(r, g, b, 
-                                       start_index, end_index)
-                       elif attr._type == ibus.ATTR_TYPE_BACKGROUND:
-                               r = (attr._value & 0x00ff0000) >> 8
-                               g = (attr._value & 0x0000ff00)
-                               b = (attr._value & 0x000000ff) << 8
-                               pango_attr = pango.AttrBackground(r, g, b, 
-                                       start_index, end_index)
-                       elif attr._type == ibus.ATTR_TYPE_UNDERLINE:
-                               pango_attr = pango.AttrUnderline(int(attr._value),
-                                       start_index, end_index)
-                       if pango_attr != None:
-                               self.insert(pango_attr)
+    def __init__(self, attrs, unistr):
+        super(PangoAttrList, self).__init__()
+        if attrs == None:
+            return
+        offsets = []
+        offset = 0
+        for c in unistr:
+            offsets.append(offset)
+            offset += len(c.encode("utf8"))
+        offsets.append(offset)
+        for attr in attrs:
+            pango_attr = None
+            start_index = attr._start_index if attr._start_index >= 0 else 0
+            end_index = attr._end_index if attr._end_index >= 0 else 0
+            start_index = offsets[start_index] if start_index < len(offsets) else offsets[-1]
+            end_index = offsets[end_index] if end_index < len(offsets) else offsets[-1]
+            if attr._type == ibus.ATTR_TYPE_FOREGROUND:
+                r = (attr._value & 0x00ff0000) >> 8
+                g = (attr._value & 0x0000ff00)
+                b = (attr._value & 0x000000ff) << 8
+                pango_attr = pango.AttrForeground(r, g, b, 
+                    start_index, end_index)
+            elif attr._type == ibus.ATTR_TYPE_BACKGROUND:
+                r = (attr._value & 0x00ff0000) >> 8
+                g = (attr._value & 0x0000ff00)
+                b = (attr._value & 0x000000ff) << 8
+                pango_attr = pango.AttrBackground(r, g, b, 
+                    start_index, end_index)
+            elif attr._type == ibus.ATTR_TYPE_UNDERLINE:
+                pango_attr = pango.AttrUnderline(int(attr._value),
+                    start_index, end_index)
+            if pango_attr != None:
+                self.insert(pango_attr)
 
index 618e96b..5545e15 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
index be4334d..60400b5 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -23,50 +23,50 @@ __all__ = ("IConfig", )
 
 import dbus.service
 from ibus.common import \
-       IBUS_CONFIG_IFACE
+    IBUS_CONFIG_IFACE
 
 class IConfig (dbus.service.Object):
-       # define method decorator.
-       method = lambda **args: \
-               dbus.service.method (dbus_interface = IBUS_CONFIG_IFACE, \
-                       **args)
+    # define method decorator.
+    method = lambda **args: \
+        dbus.service.method (dbus_interface = IBUS_CONFIG_IFACE, \
+            **args)
 
-       # define signal decorator.
-       signal = lambda **args: \
-               dbus.service.signal (dbus_interface = IBUS_CONFIG_IFACE, \
-                       **args)
+    # define signal decorator.
+    signal = lambda **args: \
+        dbus.service.signal (dbus_interface = IBUS_CONFIG_IFACE, \
+            **args)
 
-       # define async method decorator.
-       async_method = lambda **args: \
-               dbus.service.method (dbus_interface = IBUS_CONFIG_IFACE, \
-                       async_callbacks = ("reply_cb", "error_cb"), \
-                       **args)
+    # define async method decorator.
+    async_method = lambda **args: \
+        dbus.service.method (dbus_interface = IBUS_CONFIG_IFACE, \
+            async_callbacks = ("reply_cb", "error_cb"), \
+            **args)
 
-       @method (in_signature = "ss", out_signature = "s")
-       def GetString (self, key, default_value):
-               pass
+    @method (in_signature = "ss", out_signature = "s")
+    def GetString (self, key, default_value):
+        pass
 
-       @method (in_signature = "si", out_signature = "i")
-       def GetInt (self, key, default_value):
-               pass
+    @method (in_signature = "si", out_signature = "i")
+    def GetInt (self, key, default_value):
+        pass
 
-       @method (in_signature = "sb", out_signature = "b")
-       def GetBool (self, key, default_value):
-               pass
+    @method (in_signature = "sb", out_signature = "b")
+    def GetBool (self, key, default_value):
+        pass
 
-       @method (in_signature = "ss")
-       def SetString (self, key, value):
-               pass
+    @method (in_signature = "ss")
+    def SetString (self, key, value):
+        pass
 
-       @method (in_signature = "si")
-       def SetInt (self, key, value):
-               pass
+    @method (in_signature = "si")
+    def SetInt (self, key, value):
+        pass
 
-       @method (in_signature = "sb")
-       def SetBool (self, key, value):
-               pass
+    @method (in_signature = "sb")
+    def SetBool (self, key, value):
+        pass
 
-       @signal (signature = "sv")
-       def ValueChanged (self, key, value):
-               pass
+    @signal (signature = "sv")
+    def ValueChanged (self, key, value):
+        pass
 
index 6ba754d..d370bcf 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -23,87 +23,87 @@ __all__ = ("IEngine", )
 
 import dbus.service
 from ibus.common import \
-       IBUS_ENGINE_IFACE
+    IBUS_ENGINE_IFACE
 
 class IEngine (dbus.service.Object):
-       # define method decorator.
-       method = lambda **args: \
-               dbus.service.method (dbus_interface = IBUS_ENGINE_IFACE, \
-                                                       **args)
+    # define method decorator.
+    method = lambda **args: \
+        dbus.service.method (dbus_interface = IBUS_ENGINE_IFACE, \
+                            **args)
 
-       # define signal decorator.
-       signal = lambda **args: \
-               dbus.service.signal (dbus_interface = IBUS_ENGINE_IFACE, \
-                                                       **args)
+    # define signal decorator.
+    signal = lambda **args: \
+        dbus.service.signal (dbus_interface = IBUS_ENGINE_IFACE, \
+                            **args)
 
-       # define async method decorator.
-       async_method = lambda **args: \
-               dbus.service.method (dbus_interface = IBUS_ENGINE_IFACE, \
-                                                       async_callbacks = ("reply_cb", "error_cb"), \
-                                                       **args)
+    # define async method decorator.
+    async_method = lambda **args: \
+        dbus.service.method (dbus_interface = IBUS_ENGINE_IFACE, \
+                            async_callbacks = ("reply_cb", "error_cb"), \
+                            **args)
 
-       @method (in_signature = "ubu", out_signature = "b")
-       def ProcessKeyEvent (self, keyval, is_press, state):
-               pass
+    @method (in_signature = "ubu", out_signature = "b")
+    def ProcessKeyEvent (self, keyval, is_press, state):
+        pass
 
-       @method (in_signature = "iiii")
-       def SetCursorLocation (self, x, y, w, h): pass
+    @method (in_signature = "iiii")
+    def SetCursorLocation (self, x, y, w, h): pass
 
-       @method ()
-       def FocusIn (self): pass
+    @method ()
+    def FocusIn (self): pass
 
-       @method ()
-       def FocusOut (self): pass
+    @method ()
+    def FocusOut (self): pass
 
-       @method ()
-       def Reset (self): pass
+    @method ()
+    def Reset (self): pass
 
-       # signals for lookup table
-       @method ()
-       def PageUp (self): pass
+    # signals for lookup table
+    @method ()
+    def PageUp (self): pass
 
-       @method ()
-       def PageDown (self): pass
+    @method ()
+    def PageDown (self): pass
 
-       @method ()
-       def CursorUp (self): pass
+    @method ()
+    def CursorUp (self): pass
 
-       @method ()
-       def CursorDown (self): pass
+    @method ()
+    def CursorDown (self): pass
 
-       @method (in_signature = "b")
-       def SetEnable (self, enable): pass
+    @method (in_signature = "b")
+    def SetEnable (self, enable): pass
 
-       @method (in_signature = "si")
-       def PropertyActivate (self, prop_name, prop_state): pass
+    @method (in_signature = "si")
+    def PropertyActivate (self, prop_name, prop_state): pass
 
-       @method (in_signature = "s")
-       def PropertyShow (self, prop_name): pass
+    @method (in_signature = "s")
+    def PropertyShow (self, prop_name): pass
 
-       @method (in_signature = "s")
-       def PropertyHide (self, prop_name): pass
+    @method (in_signature = "s")
+    def PropertyHide (self, prop_name): pass
 
-       @method ()
-       def Destroy (self): pass
+    @method ()
+    def Destroy (self): pass
 
-       @signal (signature="s")
-       def CommitString (self, text): pass
+    @signal (signature="s")
+    def CommitString (self, text): pass
 
-       @signal (signature="ubu")
-       def ForwardKeyEvent (self, keyval, is_press, state): pass
+    @signal (signature="ubu")
+    def ForwardKeyEvent (self, keyval, is_press, state): pass
 
-       @signal (signature="saauib")
-       def UpdatePreedit (self, text, attrs, cursor_pos, visible): pass
+    @signal (signature="saauib")
+    def UpdatePreedit (self, text, attrs, cursor_pos, visible): pass
 
-       @signal (signature="svb")
-       def UpdateAuxString (self, text, attrs, visible): pass
+    @signal (signature="svb")
+    def UpdateAuxString (self, text, attrs, visible): pass
 
-       @signal (signature="vb")
-       def UpdateLookupTable (self, lookup_table, visible): pass
+    @signal (signature="vb")
+    def UpdateLookupTable (self, lookup_table, visible): pass
 
-       @signal (signature="v")
-       def RegisterProperties (self, props): pass
+    @signal (signature="v")
+    def RegisterProperties (self, props): pass
 
-       @signal (signature="v")
-       def UpdateProperty (self, prop): pass
+    @signal (signature="v")
+    def UpdateProperty (self, prop): pass
 
index 98da317..e9542c0 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -23,38 +23,38 @@ __all__ = ("IEngineFactory", )
 
 import dbus.service
 from ibus.common import \
-       IBUS_ENGINE_FACTORY_IFACE
+    IBUS_ENGINE_FACTORY_IFACE
 
 class IEngineFactory (dbus.service.Object):
-       # define method decorator.
-       method = lambda **args: \
-               dbus.service.method (dbus_interface = IBUS_ENGINE_FACTORY_IFACE, \
-                                                       **args)
-
-       # define async method decorator.
-       async_method = lambda **args: \
-               dbus.service.method (dbus_interface = IBUS_ENGINE_FACTORY_IFACE, \
-                                                       async_callbacks = ("reply_cb", "error_cb"), \
-                                                       **args)
-       # Return a array. [name, default_language, icon_path, authors, credits]
-       @method (out_signature = "as")
-       def GetInfo (self): pass
-
-       # Factory should allocate all resources in this method
-       @method ()
-       def Initialize (self): pass
-
-       # Factory should free all allocated resources in this method
-       @method ()
-       def Uninitialize (self): pass
-
-       # Create an input context and return the id of the context.
-       # If failed, it will return "" or None.
-       @method (out_signature = "o")
-       def CreateEngine (self): pass
-
-       # Destroy the engine
-       @method ()
-       def Destroy (self): pass
+    # define method decorator.
+    method = lambda **args: \
+        dbus.service.method (dbus_interface = IBUS_ENGINE_FACTORY_IFACE, \
+                            **args)
+
+    # define async method decorator.
+    async_method = lambda **args: \
+        dbus.service.method (dbus_interface = IBUS_ENGINE_FACTORY_IFACE, \
+                            async_callbacks = ("reply_cb", "error_cb"), \
+                            **args)
+    # Return a array. [name, default_language, icon_path, authors, credits]
+    @method (out_signature = "as")
+    def GetInfo (self): pass
+
+    # Factory should allocate all resources in this method
+    @method ()
+    def Initialize (self): pass
+
+    # Factory should free all allocated resources in this method
+    @method ()
+    def Uninitialize (self): pass
+
+    # Create an input context and return the id of the context.
+    # If failed, it will return "" or None.
+    @method (out_signature = "o")
+    def CreateEngine (self): pass
+
+    # Destroy the engine
+    @method ()
+    def Destroy (self): pass
 
 
index ed01a7c..38becc0 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -23,115 +23,115 @@ __all__ = ("IIBus", )
 
 import dbus.service
 from ibus.common import \
-       IBUS_IFACE
+    IBUS_IFACE
 
 class IIBus (dbus.service.Object):
-       # define method decorator.
-       method = lambda **args: \
-               dbus.service.method (dbus_interface = IBUS_IFACE, \
-                                                       connection_keyword = "dbusconn", \
-                                                       **args)
+    # define method decorator.
+    method = lambda **args: \
+        dbus.service.method (dbus_interface = IBUS_IFACE, \
+                            connection_keyword = "dbusconn", \
+                            **args)
 
-       # define async method decorator.
-       async_method = lambda **args: \
-               dbus.service.method (dbus_interface = IBUS_IFACE, \
-                                                       connection_keyword = "dbusconn", \
-                                                       async_callbacks = ("reply_cb", "error_cb"), \
-                                                       **args)
+    # define async method decorator.
+    async_method = lambda **args: \
+        dbus.service.method (dbus_interface = IBUS_IFACE, \
+                            connection_keyword = "dbusconn", \
+                            async_callbacks = ("reply_cb", "error_cb"), \
+                            **args)
 
-       @method (out_signature = "s")
-       def GetIBusAddress (self, dbusconn): pass
+    @method (out_signature = "s")
+    def GetIBusAddress (self, dbusconn): pass
 
-       # methods for ibus clients
-       @method (in_signature = "s", out_signature = "s")
-       def CreateInputContext (self, client_name, dbusconn): pass
+    # methods for ibus clients
+    @method (in_signature = "s", out_signature = "s")
+    def CreateInputContext (self, client_name, dbusconn): pass
 
-       @method (in_signature = "s")
-       def ReleaseInputContext (self, ic, dbusconn): pass
+    @method (in_signature = "s")
+    def ReleaseInputContext (self, ic, dbusconn): pass
 
-       @async_method (in_signature = "subu", out_signature = "b")
-       def ProcessKeyEvent (self, ic, keyval, is_press, state, dbusconn, reply_cb, error_cb): pass
+    @async_method (in_signature = "subu", out_signature = "b")
+    def ProcessKeyEvent (self, ic, keyval, is_press, state, dbusconn, reply_cb, error_cb): pass
 
-       @method (in_signature = "siiii")
-       def SetCursorLocation (self, ic, x, y, w, h, dbusconn): pass
+    @method (in_signature = "siiii")
+    def SetCursorLocation (self, ic, x, y, w, h, dbusconn): pass
 
-       @method (in_signature = "s")
-       def FocusIn (self, ic, dbusconn): pass
+    @method (in_signature = "s")
+    def FocusIn (self, ic, dbusconn): pass
 
-       @method (in_signature = "s")
-       def FocusOut (self, ic, dbusconn): pass
+    @method (in_signature = "s")
+    def FocusOut (self, ic, dbusconn): pass
 
-       @method (in_signature = "s")
-       def Reset (self, ic, dbusconn): pass
+    @method (in_signature = "s")
+    def Reset (self, ic, dbusconn): pass
 
-       @method (in_signature = "s", out_signature = "b")
-       def IsEnabled (self, ic, dbusconn): pass
+    @method (in_signature = "s", out_signature = "b")
+    def IsEnabled (self, ic, dbusconn): pass
 
-       # methods for ibus engine provide
-       @method (in_signature = "ao")
-       def RegisterFactories (self, object_paths, dbusconn): pass
+    # methods for ibus engine provide
+    @method (in_signature = "ao")
+    def RegisterFactories (self, object_paths, dbusconn): pass
 
-       @method (in_signature = "ao")
-       def UnregisterFactories (self, object_paths, dbusconn): pass
+    @method (in_signature = "ao")
+    def UnregisterFactories (self, object_paths, dbusconn): pass
 
-       # methods for ibus panel
-       @method (in_signature = "ob")
-       def RegisterPanel (self, object_path, replace, dbusconn): pass
+    # methods for ibus panel
+    @method (in_signature = "ob")
+    def RegisterPanel (self, object_path, replace, dbusconn): pass
 
-       # methods for ibus config
-       @method (in_signature = "ob")
-       def RegisterConfig (self, object_path, replace, dbusconn): pass
+    # methods for ibus config
+    @method (in_signature = "ob")
+    def RegisterConfig (self, object_path, replace, dbusconn): pass
 
-       # general methods
-       @method (out_signature = "av")
-       def GetFactories (self, dbusconn): pass
+    # general methods
+    @method (out_signature = "av")
+    def GetFactories (self, dbusconn): pass
 
-       @method (in_signature = "o", out_signature = "av")
-       def GetFactoryInfo (self, factory_path, dbusconn): pass
+    @method (in_signature = "o", out_signature = "av")
+    def GetFactoryInfo (self, factory_path, dbusconn): pass
 
-       @method (in_signature = "o")
-       def SetFactory (self, factory_path, dbusconn): pass
+    @method (in_signature = "o")
+    def SetFactory (self, factory_path, dbusconn): pass
 
-       @method (in_signature = "s", out_signature = "sb")
-       def GetInputContextStates (self, ic, dbusconn): pass
+    @method (in_signature = "s", out_signature = "sb")
+    def GetInputContextStates (self, ic, dbusconn): pass
 
-       @async_method (in_signature = "ss")
-       def ConfigSetString (self, key, value, dbusconn, reply_cb, error_cb): pass
+    @async_method (in_signature = "ss")
+    def ConfigSetString (self, key, value, dbusconn, reply_cb, error_cb): pass
 
-       @async_method (in_signature = "si")
-       def ConfigSetInt (self, key, value, dbusconn, reply_cb, error_cb): pass
+    @async_method (in_signature = "si")
+    def ConfigSetInt (self, key, value, dbusconn, reply_cb, error_cb): pass
 
-       @async_method (in_signature = "sb")
-       def ConfigSetBool (self, key, value, dbusconn, reply_cb, error_cb): pass
+    @async_method (in_signature = "sb")
+    def ConfigSetBool (self, key, value, dbusconn, reply_cb, error_cb): pass
 
-       @async_method (in_signature = "s", out_signature = "s")
-       def ConfigGetString (self, key, dbusconn, reply_cb, error_cb): pass
+    @async_method (in_signature = "s", out_signature = "s")
+    def ConfigGetString (self, key, dbusconn, reply_cb, error_cb): pass
 
-       @async_method (in_signature = "s", out_signature = "i")
-       def ConfigGetInt (self, key, dbusconn, reply_cb, error_cb): pass
+    @async_method (in_signature = "s", out_signature = "i")
+    def ConfigGetInt (self, key, dbusconn, reply_cb, error_cb): pass
 
-       @async_method (in_signature = "s", out_signature = "b")
-       def ConfigGetBool (self, key, dbusconn, reply_cb, error_cb): pass
+    @async_method (in_signature = "s", out_signature = "b")
+    def ConfigGetBool (self, key, dbusconn, reply_cb, error_cb): pass
 
-       @method (out_signature = "a(ssssssb)")
-       def RegisterListEngines (self, dbusconn): pass
+    @method (out_signature = "a(ssssssb)")
+    def RegisterListEngines (self, dbusconn): pass
 
-       @method (in_signature = "ss")
-       def RegisterStartEngine (self, lang, name, dbusconn): pass
+    @method (in_signature = "ss")
+    def RegisterStartEngine (self, lang, name, dbusconn): pass
 
-       @method (in_signature = "ss")
-       def RegisterRestartEngine (self, lang, name, dbusconn): pass
+    @method (in_signature = "ss")
+    def RegisterRestartEngine (self, lang, name, dbusconn): pass
 
-       @method (in_signature = "ss")
-       def RegisterStopEngine (self, lang, name, dbusconn): pass
+    @method (in_signature = "ss")
+    def RegisterStopEngine (self, lang, name, dbusconn): pass
 
-       #sigals
-       def CommitString (self, ic, text): pass
+    #sigals
+    def CommitString (self, ic, text): pass
 
-       def UpdatePreedit (self, ic, text, attrs, cursor_pos, show): pass
+    def UpdatePreedit (self, ic, text, attrs, cursor_pos, show): pass
 
-       def Enabled (self, ic): pass
+    def Enabled (self, ic): pass
 
-       def Disabled (self, ic): pass
+    def Disabled (self, ic): pass
 
-       def ConfigValueChanged (self, key, value): pass
+    def ConfigValueChanged (self, key, value): pass
index 1953bf0..249322f 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -23,82 +23,82 @@ __all__ = ("IPanel", )
 
 import dbus.service
 from ibus.common import \
-       IBUS_PANEL_IFACE
+    IBUS_PANEL_IFACE
 
 class IPanel (dbus.service.Object):
-       # define method decorator.
-       method = lambda **args: \
-               dbus.service.method (dbus_interface = IBUS_PANEL_IFACE, \
-                                                       **args)
+    # define method decorator.
+    method = lambda **args: \
+        dbus.service.method (dbus_interface = IBUS_PANEL_IFACE, \
+                            **args)
 
-       # define signal decorator.
-       signal = lambda **args: \
-               dbus.service.signal (dbus_interface = IBUS_PANEL_IFACE, \
-                                                       **args)
+    # define signal decorator.
+    signal = lambda **args: \
+        dbus.service.signal (dbus_interface = IBUS_PANEL_IFACE, \
+                            **args)
 
-       # define async method decorator.
-       async_method = lambda **args: \
-               dbus.service.method (dbus_interface = IBUS_PANE_IFACE, \
-                                                       async_callbacks = ("reply_cb", "error_cb"), \
-                                                       **args)
-       @method (in_signature = "iiii")
-       def SetCursorLocation (self, x, y, w, h): pass
+    # define async method decorator.
+    async_method = lambda **args: \
+        dbus.service.method (dbus_interface = IBUS_PANE_IFACE, \
+                            async_callbacks = ("reply_cb", "error_cb"), \
+                            **args)
+    @method (in_signature = "iiii")
+    def SetCursorLocation (self, x, y, w, h): pass
 
-       @method (in_signature = "svub")
-       def UpdatePreedit (self, text, attrs, cursor_pos, visible): pass
+    @method (in_signature = "svub")
+    def UpdatePreedit (self, text, attrs, cursor_pos, visible): pass
 
-       @method (in_signature = "svb")
-       def UpdateAuxString (self, text, attrs, visible): pass
+    @method (in_signature = "svb")
+    def UpdateAuxString (self, text, attrs, visible): pass
 
-       @method (in_signature = "vb")
-       def UpdateLookupTable (self, lookup_table, visible): pass
+    @method (in_signature = "vb")
+    def UpdateLookupTable (self, lookup_table, visible): pass
 
-       @method (in_signature = "v")
-       def RegisterProperties (self, props): pass
+    @method (in_signature = "v")
+    def RegisterProperties (self, props): pass
 
-       @method (in_signature = "v")
-       def UpdateProperty (self, prop): pass
+    @method (in_signature = "v")
+    def UpdateProperty (self, prop): pass
 
-       @method ()
-       def ShowLanguageBar (self): pass
+    @method ()
+    def ShowLanguageBar (self): pass
 
-       @method ()
-       def HideLanguageBar (self): pass
+    @method ()
+    def HideLanguageBar (self): pass
 
-       @method (in_signature = "s")
-       def FocusIn (self, ic): pass
+    @method (in_signature = "s")
+    def FocusIn (self, ic): pass
 
-       @method (in_signature = "s")
-       def FocusOut (self, ic): pass
+    @method (in_signature = "s")
+    def FocusOut (self, ic): pass
 
-       @method ()
-       def StatesChanged (self): pass
+    @method ()
+    def StatesChanged (self): pass
 
-       @method ()
-       def Reset (self): pass
+    @method ()
+    def Reset (self): pass
 
-       @method ()
-       def Destroy (self): pass
+    @method ()
+    def Destroy (self): pass
 
-       #signals
-       @signal ()
-       def PageUp (self): pass
+    #signals
+    @signal ()
+    def PageUp (self): pass
 
-       @signal ()
-       def PageDown (self): pass
+    @signal ()
+    def PageDown (self): pass
 
-       @signal ()
-       def CursorUp (self): pass
+    @signal ()
+    def CursorUp (self): pass
 
-       @signal ()
-       def CursorDown (self): pass
+    @signal ()
+    def CursorDown (self): pass
 
-       @signal ()
-       def PropertyActivate (self, prop_name, prop_state): pass
+    @signal ()
+    def PropertyActivate (self, prop_name, prop_state): pass
 
-       @signal ()
-       def PropertyShow (self, prop_name): pass
+    @signal ()
+    def PropertyShow (self, prop_name): pass
 
-       @signal ()
-       def PropertyHide (self, prop_name): pass
+    @signal ()
+    def PropertyHide (self, prop_name): pass
 
index 5b6c463..a16be16 100644 (file)
@@ -1499,3986 +1499,3986 @@ DongSign = 0x20ab
 EuroSign = 0x20ac
 
 __name_to_keycode = {
-       "VoidSymbol" : 0xffffff,
-       "BackSpace" : 0xff08,
-       "Tab" : 0xff09,
-       "Linefeed" : 0xff0a,
-       "Clear" : 0xff0b,
-       "Return" : 0xff0d,
-       "Pause" : 0xff13,
-       "Scroll_Lock" : 0xff14,
-       "Sys_Req" : 0xff15,
-       "Escape" : 0xff1b,
-       "Delete" : 0xffff,
-       "Multi_key" : 0xff20,
-       "Codeinput" : 0xff37,
-       "SingleCandidate" : 0xff3c,
-       "MultipleCandidate" : 0xff3d,
-       "PreviousCandidate" : 0xff3e,
-       "Kanji" : 0xff21,
-       "Muhenkan" : 0xff22,
-       "Henkan_Mode" : 0xff23,
-       "Henkan" : 0xff23,
-       "Romaji" : 0xff24,
-       "Hiragana" : 0xff25,
-       "Katakana" : 0xff26,
-       "Hiragana_Katakana" : 0xff27,
-       "Zenkaku" : 0xff28,
-       "Hankaku" : 0xff29,
-       "Zenkaku_Hankaku" : 0xff2a,
-       "Touroku" : 0xff2b,
-       "Massyo" : 0xff2c,
-       "Kana_Lock" : 0xff2d,
-       "Kana_Shift" : 0xff2e,
-       "Eisu_Shift" : 0xff2f,
-       "Eisu_toggle" : 0xff30,
-       "Kanji_Bangou" : 0xff37,
-       "Zen_Koho" : 0xff3d,
-       "Mae_Koho" : 0xff3e,
-       "Home" : 0xff50,
-       "Left" : 0xff51,
-       "Up" : 0xff52,
-       "Right" : 0xff53,
-       "Down" : 0xff54,
-       "Prior" : 0xff55,
-       "Page_Up" : 0xff55,
-       "Next" : 0xff56,
-       "Page_Down" : 0xff56,
-       "End" : 0xff57,
-       "Begin" : 0xff58,
-       "Select" : 0xff60,
-       "Print" : 0xff61,
-       "Execute" : 0xff62,
-       "Insert" : 0xff63,
-       "Undo" : 0xff65,
-       "Redo" : 0xff66,
-       "Menu" : 0xff67,
-       "Find" : 0xff68,
-       "Cancel" : 0xff69,
-       "Help" : 0xff6a,
-       "Break" : 0xff6b,
-       "Mode_switch" : 0xff7e,
-       "script_switch" : 0xff7e,
-       "Num_Lock" : 0xff7f,
-       "KP_Space" : 0xff80,
-       "KP_Tab" : 0xff89,
-       "KP_Enter" : 0xff8d,
-       "KP_F1" : 0xff91,
-       "KP_F2" : 0xff92,
-       "KP_F3" : 0xff93,
-       "KP_F4" : 0xff94,
-       "KP_Home" : 0xff95,
-       "KP_Left" : 0xff96,
-       "KP_Up" : 0xff97,
-       "KP_Right" : 0xff98,
-       "KP_Down" : 0xff99,
-       "KP_Prior" : 0xff9a,
-       "KP_Page_Up" : 0xff9a,
-       "KP_Next" : 0xff9b,
-       "KP_Page_Down" : 0xff9b,
-       "KP_End" : 0xff9c,
-       "KP_Begin" : 0xff9d,
-       "KP_Insert" : 0xff9e,
-       "KP_Delete" : 0xff9f,
-       "KP_Equal" : 0xffbd,
-       "KP_Multiply" : 0xffaa,
-       "KP_Add" : 0xffab,
-       "KP_Separator" : 0xffac,
-       "KP_Subtract" : 0xffad,
-       "KP_Decimal" : 0xffae,
-       "KP_Divide" : 0xffaf,
-       "KP_0" : 0xffb0,
-       "KP_1" : 0xffb1,
-       "KP_2" : 0xffb2,
-       "KP_3" : 0xffb3,
-       "KP_4" : 0xffb4,
-       "KP_5" : 0xffb5,
-       "KP_6" : 0xffb6,
-       "KP_7" : 0xffb7,
-       "KP_8" : 0xffb8,
-       "KP_9" : 0xffb9,
-       "F1" : 0xffbe,
-       "F2" : 0xffbf,
-       "F3" : 0xffc0,
-       "F4" : 0xffc1,
-       "F5" : 0xffc2,
-       "F6" : 0xffc3,
-       "F7" : 0xffc4,
-       "F8" : 0xffc5,
-       "F9" : 0xffc6,
-       "F10" : 0xffc7,
-       "F11" : 0xffc8,
-       "L1" : 0xffc8,
-       "F12" : 0xffc9,
-       "L2" : 0xffc9,
-       "F13" : 0xffca,
-       "L3" : 0xffca,
-       "F14" : 0xffcb,
-       "L4" : 0xffcb,
-       "F15" : 0xffcc,
-       "L5" : 0xffcc,
-       "F16" : 0xffcd,
-       "L6" : 0xffcd,
-       "F17" : 0xffce,
-       "L7" : 0xffce,
-       "F18" : 0xffcf,
-       "L8" : 0xffcf,
-       "F19" : 0xffd0,
-       "L9" : 0xffd0,
-       "F20" : 0xffd1,
-       "L10" : 0xffd1,
-       "F21" : 0xffd2,
-       "R1" : 0xffd2,
-       "F22" : 0xffd3,
-       "R2" : 0xffd3,
-       "F23" : 0xffd4,
-       "R3" : 0xffd4,
-       "F24" : 0xffd5,
-       "R4" : 0xffd5,
-       "F25" : 0xffd6,
-       "R5" : 0xffd6,
-       "F26" : 0xffd7,
-       "R6" : 0xffd7,
-       "F27" : 0xffd8,
-       "R7" : 0xffd8,
-       "F28" : 0xffd9,
-       "R8" : 0xffd9,
-       "F29" : 0xffda,
-       "R9" : 0xffda,
-       "F30" : 0xffdb,
-       "R10" : 0xffdb,
-       "F31" : 0xffdc,
-       "R11" : 0xffdc,
-       "F32" : 0xffdd,
-       "R12" : 0xffdd,
-       "F33" : 0xffde,
-       "R13" : 0xffde,
-       "F34" : 0xffdf,
-       "R14" : 0xffdf,
-       "F35" : 0xffe0,
-       "R15" : 0xffe0,
-       "Shift_L" : 0xffe1,
-       "Shift_R" : 0xffe2,
-       "Control_L" : 0xffe3,
-       "Control_R" : 0xffe4,
-       "Caps_Lock" : 0xffe5,
-       "Shift_Lock" : 0xffe6,
-       "Meta_L" : 0xffe7,
-       "Meta_R" : 0xffe8,
-       "Alt_L" : 0xffe9,
-       "Alt_R" : 0xffea,
-       "Super_L" : 0xffeb,
-       "Super_R" : 0xffec,
-       "Hyper_L" : 0xffed,
-       "Hyper_R" : 0xffee,
-       "ISO_Lock" : 0xfe01,
-       "ISO_Level2_Latch" : 0xfe02,
-       "ISO_Level3_Shift" : 0xfe03,
-       "ISO_Level3_Latch" : 0xfe04,
-       "ISO_Level3_Lock" : 0xfe05,
-       "ISO_Level5_Shift" : 0xfe11,
-       "ISO_Level5_Latch" : 0xfe12,
-       "ISO_Level5_Lock" : 0xfe13,
-       "ISO_Group_Shift" : 0xff7e,
-       "ISO_Group_Latch" : 0xfe06,
-       "ISO_Group_Lock" : 0xfe07,
-       "ISO_Next_Group" : 0xfe08,
-       "ISO_Next_Group_Lock" : 0xfe09,
-       "ISO_Prev_Group" : 0xfe0a,
-       "ISO_Prev_Group_Lock" : 0xfe0b,
-       "ISO_First_Group" : 0xfe0c,
-       "ISO_First_Group_Lock" : 0xfe0d,
-       "ISO_Last_Group" : 0xfe0e,
-       "ISO_Last_Group_Lock" : 0xfe0f,
-       "ISO_Left_Tab" : 0xfe20,
-       "ISO_Move_Line_Up" : 0xfe21,
-       "ISO_Move_Line_Down" : 0xfe22,
-       "ISO_Partial_Line_Up" : 0xfe23,
-       "ISO_Partial_Line_Down" : 0xfe24,
-       "ISO_Partial_Space_Left" : 0xfe25,
-       "ISO_Partial_Space_Right" : 0xfe26,
-       "ISO_Set_Margin_Left" : 0xfe27,
-       "ISO_Set_Margin_Right" : 0xfe28,
-       "ISO_Release_Margin_Left" : 0xfe29,
-       "ISO_Release_Margin_Right" : 0xfe2a,
-       "ISO_Release_Both_Margins" : 0xfe2b,
-       "ISO_Fast_Cursor_Left" : 0xfe2c,
-       "ISO_Fast_Cursor_Right" : 0xfe2d,
-       "ISO_Fast_Cursor_Up" : 0xfe2e,
-       "ISO_Fast_Cursor_Down" : 0xfe2f,
-       "ISO_Continuous_Underline" : 0xfe30,
-       "ISO_Discontinuous_Underline" : 0xfe31,
-       "ISO_Emphasize" : 0xfe32,
-       "ISO_Center_Object" : 0xfe33,
-       "ISO_Enter" : 0xfe34,
-       "dead_grave" : 0xfe50,
-       "dead_acute" : 0xfe51,
-       "dead_circumflex" : 0xfe52,
-       "dead_tilde" : 0xfe53,
-       "dead_macron" : 0xfe54,
-       "dead_breve" : 0xfe55,
-       "dead_abovedot" : 0xfe56,
-       "dead_diaeresis" : 0xfe57,
-       "dead_abovering" : 0xfe58,
-       "dead_doubleacute" : 0xfe59,
-       "dead_caron" : 0xfe5a,
-       "dead_cedilla" : 0xfe5b,
-       "dead_ogonek" : 0xfe5c,
-       "dead_iota" : 0xfe5d,
-       "dead_voiced_sound" : 0xfe5e,
-       "dead_semivoiced_sound" : 0xfe5f,
-       "dead_belowdot" : 0xfe60,
-       "dead_hook" : 0xfe61,
-       "dead_horn" : 0xfe62,
-       "dead_stroke" : 0xfe63,
-       "dead_abovecomma" : 0xfe64,
-       "dead_psili" : 0xfe64,
-       "dead_abovereversedcomma" : 0xfe65,
-       "dead_dasia" : 0xfe66,
-       "First_Virtual_Screen" : 0xfed0,
-       "Prev_Virtual_Screen" : 0xfed1,
-       "Next_Virtual_Screen" : 0xfed2,
-       "Last_Virtual_Screen" : 0xfed4,
-       "Terminate_Server" : 0xfed5,
-       "AccessX_Enable" : 0xfe70,
-       "AccessX_Feedback_Enable" : 0xfe71,
-       "RepeatKeys_Enable" : 0xfe72,
-       "SlowKeys_Enable" : 0xfe73,
-       "BounceKeys_Enable" : 0xfe74,
-       "StickyKeys_Enable" : 0xfe75,
-       "MouseKeys_Enable" : 0xfe76,
-       "MouseKeys_Accel_Enable" : 0xfe77,
-       "Overlay1_Enable" : 0xfe78,
-       "Overlay2_Enable" : 0xfe79,
-       "AudibleBell_Enable" : 0xfe7a,
-       "Pointer_Left" : 0xfee0,
-       "Pointer_Right" : 0xfee1,
-       "Pointer_Up" : 0xfee2,
-       "Pointer_Down" : 0xfee3,
-       "Pointer_UpLeft" : 0xfee4,
-       "Pointer_UpRight" : 0xfee5,
-       "Pointer_DownLeft" : 0xfee6,
-       "Pointer_DownRight" : 0xfee7,
-       "Pointer_Button_Dflt" : 0xfee8,
-       "Pointer_Button1" : 0xfee9,
-       "Pointer_Button2" : 0xfeea,
-       "Pointer_Button3" : 0xfeeb,
-       "Pointer_Button4" : 0xfeec,
-       "Pointer_Button5" : 0xfeed,
-       "Pointer_DblClick_Dflt" : 0xfeee,
-       "Pointer_DblClick1" : 0xfeef,
-       "Pointer_DblClick2" : 0xfef0,
-       "Pointer_DblClick3" : 0xfef1,
-       "Pointer_DblClick4" : 0xfef2,
-       "Pointer_DblClick5" : 0xfef3,
-       "Pointer_Drag_Dflt" : 0xfef4,
-       "Pointer_Drag1" : 0xfef5,
-       "Pointer_Drag2" : 0xfef6,
-       "Pointer_Drag3" : 0xfef7,
-       "Pointer_Drag4" : 0xfef8,
-       "Pointer_Drag5" : 0xfefd,
-       "Pointer_EnableKeys" : 0xfef9,
-       "Pointer_Accelerate" : 0xfefa,
-       "Pointer_DfltBtnNext" : 0xfefb,
-       "Pointer_DfltBtnPrev" : 0xfefc,
-       "3270_Duplicate" : 0xfd01,
-       "3270_FieldMark" : 0xfd02,
-       "3270_Right2" : 0xfd03,
-       "3270_Left2" : 0xfd04,
-       "3270_BackTab" : 0xfd05,
-       "3270_EraseEOF" : 0xfd06,
-       "3270_EraseInput" : 0xfd07,
-       "3270_Reset" : 0xfd08,
-       "3270_Quit" : 0xfd09,
-       "3270_PA1" : 0xfd0a,
-       "3270_PA2" : 0xfd0b,
-       "3270_PA3" : 0xfd0c,
-       "3270_Test" : 0xfd0d,
-       "3270_Attn" : 0xfd0e,
-       "3270_CursorBlink" : 0xfd0f,
-       "3270_AltCursor" : 0xfd10,
-       "3270_KeyClick" : 0xfd11,
-       "3270_Jump" : 0xfd12,
-       "3270_Ident" : 0xfd13,
-       "3270_Rule" : 0xfd14,
-       "3270_Copy" : 0xfd15,
-       "3270_Play" : 0xfd16,
-       "3270_Setup" : 0xfd17,
-       "3270_Record" : 0xfd18,
-       "3270_ChangeScreen" : 0xfd19,
-       "3270_DeleteWord" : 0xfd1a,
-       "3270_ExSelect" : 0xfd1b,
-       "3270_CursorSelect" : 0xfd1c,
-       "3270_PrintScreen" : 0xfd1d,
-       "3270_Enter" : 0xfd1e,
-       "space" : 0x0020,
-       "exclam" : 0x0021,
-       "quotedbl" : 0x0022,
-       "numbersign" : 0x0023,
-       "dollar" : 0x0024,
-       "percent" : 0x0025,
-       "ampersand" : 0x0026,
-       "apostrophe" : 0x0027,
-       "quoteright" : 0x0027,
-       "parenleft" : 0x0028,
-       "parenright" : 0x0029,
-       "asterisk" : 0x002a,
-       "plus" : 0x002b,
-       "comma" : 0x002c,
-       "minus" : 0x002d,
-       "period" : 0x002e,
-       "slash" : 0x002f,
-       "0" : 0x0030,
-       "1" : 0x0031,
-       "2" : 0x0032,
-       "3" : 0x0033,
-       "4" : 0x0034,
-       "5" : 0x0035,
-       "6" : 0x0036,
-       "7" : 0x0037,
-       "8" : 0x0038,
-       "9" : 0x0039,
-       "colon" : 0x003a,
-       "semicolon" : 0x003b,
-       "less" : 0x003c,
-       "equal" : 0x003d,
-       "greater" : 0x003e,
-       "question" : 0x003f,
-       "at" : 0x0040,
-       "A" : 0x0041,
-       "B" : 0x0042,
-       "C" : 0x0043,
-       "D" : 0x0044,
-       "E" : 0x0045,
-       "F" : 0x0046,
-       "G" : 0x0047,
-       "H" : 0x0048,
-       "I" : 0x0049,
-       "J" : 0x004a,
-       "K" : 0x004b,
-       "L" : 0x004c,
-       "M" : 0x004d,
-       "N" : 0x004e,
-       "O" : 0x004f,
-       "P" : 0x0050,
-       "Q" : 0x0051,
-       "R" : 0x0052,
-       "S" : 0x0053,
-       "T" : 0x0054,
-       "U" : 0x0055,
-       "V" : 0x0056,
-       "W" : 0x0057,
-       "X" : 0x0058,
-       "Y" : 0x0059,
-       "Z" : 0x005a,
-       "bracketleft" : 0x005b,
-       "backslash" : 0x005c,
-       "bracketright" : 0x005d,
-       "asciicircum" : 0x005e,
-       "underscore" : 0x005f,
-       "grave" : 0x0060,
-       "quoteleft" : 0x0060,
-       "a" : 0x0061,
-       "b" : 0x0062,
-       "c" : 0x0063,
-       "d" : 0x0064,
-       "e" : 0x0065,
-       "f" : 0x0066,
-       "g" : 0x0067,
-       "h" : 0x0068,
-       "i" : 0x0069,
-       "j" : 0x006a,
-       "k" : 0x006b,
-       "l" : 0x006c,
-       "m" : 0x006d,
-       "n" : 0x006e,
-       "o" : 0x006f,
-       "p" : 0x0070,
-       "q" : 0x0071,
-       "r" : 0x0072,
-       "s" : 0x0073,
-       "t" : 0x0074,
-       "u" : 0x0075,
-       "v" : 0x0076,
-       "w" : 0x0077,
-       "x" : 0x0078,
-       "y" : 0x0079,
-       "z" : 0x007a,
-       "braceleft" : 0x007b,
-       "bar" : 0x007c,
-       "braceright" : 0x007d,
-       "asciitilde" : 0x007e,
-       "nobreakspace" : 0x00a0,
-       "exclamdown" : 0x00a1,
-       "cent" : 0x00a2,
-       "sterling" : 0x00a3,
-       "currency" : 0x00a4,
-       "yen" : 0x00a5,
-       "brokenbar" : 0x00a6,
-       "section" : 0x00a7,
-       "diaeresis" : 0x00a8,
-       "copyright" : 0x00a9,
-       "ordfeminine" : 0x00aa,
-       "guillemotleft" : 0x00ab,
-       "notsign" : 0x00ac,
-       "hyphen" : 0x00ad,
-       "registered" : 0x00ae,
-       "macron" : 0x00af,
-       "degree" : 0x00b0,
-       "plusminus" : 0x00b1,
-       "twosuperior" : 0x00b2,
-       "threesuperior" : 0x00b3,
-       "acute" : 0x00b4,
-       "mu" : 0x00b5,
-       "paragraph" : 0x00b6,
-       "periodcentered" : 0x00b7,
-       "cedilla" : 0x00b8,
-       "onesuperior" : 0x00b9,
-       "masculine" : 0x00ba,
-       "guillemotright" : 0x00bb,
-       "onequarter" : 0x00bc,
-       "onehalf" : 0x00bd,
-       "threequarters" : 0x00be,
-       "questiondown" : 0x00bf,
-       "Agrave" : 0x00c0,
-       "Aacute" : 0x00c1,
-       "Acircumflex" : 0x00c2,
-       "Atilde" : 0x00c3,
-       "Adiaeresis" : 0x00c4,
-       "Aring" : 0x00c5,
-       "AE" : 0x00c6,
-       "Ccedilla" : 0x00c7,
-       "Egrave" : 0x00c8,
-       "Eacute" : 0x00c9,
-       "Ecircumflex" : 0x00ca,
-       "Ediaeresis" : 0x00cb,
-       "Igrave" : 0x00cc,
-       "Iacute" : 0x00cd,
-       "Icircumflex" : 0x00ce,
-       "Idiaeresis" : 0x00cf,
-       "ETH" : 0x00d0,
-       "Eth" : 0x00d0,
-       "Ntilde" : 0x00d1,
-       "Ograve" : 0x00d2,
-       "Oacute" : 0x00d3,
-       "Ocircumflex" : 0x00d4,
-       "Otilde" : 0x00d5,
-       "Odiaeresis" : 0x00d6,
-       "multiply" : 0x00d7,
-       "Oslash" : 0x00d8,
-       "Ooblique" : 0x00d8,
-       "Ugrave" : 0x00d9,
-       "Uacute" : 0x00da,
-       "Ucircumflex" : 0x00db,
-       "Udiaeresis" : 0x00dc,
-       "Yacute" : 0x00dd,
-       "THORN" : 0x00de,
-       "Thorn" : 0x00de,
-       "ssharp" : 0x00df,
-       "agrave" : 0x00e0,
-       "aacute" : 0x00e1,
-       "acircumflex" : 0x00e2,
-       "atilde" : 0x00e3,
-       "adiaeresis" : 0x00e4,
-       "aring" : 0x00e5,
-       "ae" : 0x00e6,
-       "ccedilla" : 0x00e7,
-       "egrave" : 0x00e8,
-       "eacute" : 0x00e9,
-       "ecircumflex" : 0x00ea,
-       "ediaeresis" : 0x00eb,
-       "igrave" : 0x00ec,
-       "iacute" : 0x00ed,
-       "icircumflex" : 0x00ee,
-       "idiaeresis" : 0x00ef,
-       "eth" : 0x00f0,
-       "ntilde" : 0x00f1,
-       "ograve" : 0x00f2,
-       "oacute" : 0x00f3,
-       "ocircumflex" : 0x00f4,
-       "otilde" : 0x00f5,
-       "odiaeresis" : 0x00f6,
-       "division" : 0x00f7,
-       "oslash" : 0x00f8,
-       "ooblique" : 0x00f8,
-       "ugrave" : 0x00f9,
-       "uacute" : 0x00fa,
-       "ucircumflex" : 0x00fb,
-       "udiaeresis" : 0x00fc,
-       "yacute" : 0x00fd,
-       "thorn" : 0x00fe,
-       "ydiaeresis" : 0x00ff,
-       "Aogonek" : 0x01a1,
-       "breve" : 0x01a2,
-       "Lstroke" : 0x01a3,
-       "Lcaron" : 0x01a5,
-       "Sacute" : 0x01a6,
-       "Scaron" : 0x01a9,
-       "Scedilla" : 0x01aa,
-       "Tcaron" : 0x01ab,
-       "Zacute" : 0x01ac,
-       "Zcaron" : 0x01ae,
-       "Zabovedot" : 0x01af,
-       "aogonek" : 0x01b1,
-       "ogonek" : 0x01b2,
-       "lstroke" : 0x01b3,
-       "lcaron" : 0x01b5,
-       "sacute" : 0x01b6,
-       "caron" : 0x01b7,
-       "scaron" : 0x01b9,
-       "scedilla" : 0x01ba,
-       "tcaron" : 0x01bb,
-       "zacute" : 0x01bc,
-       "doubleacute" : 0x01bd,
-       "zcaron" : 0x01be,
-       "zabovedot" : 0x01bf,
-       "Racute" : 0x01c0,
-       "Abreve" : 0x01c3,
-       "Lacute" : 0x01c5,
-       "Cacute" : 0x01c6,
-       "Ccaron" : 0x01c8,
-       "Eogonek" : 0x01ca,
-       "Ecaron" : 0x01cc,
-       "Dcaron" : 0x01cf,
-       "Dstroke" : 0x01d0,
-       "Nacute" : 0x01d1,
-       "Ncaron" : 0x01d2,
-       "Odoubleacute" : 0x01d5,
-       "Rcaron" : 0x01d8,
-       "Uring" : 0x01d9,
-       "Udoubleacute" : 0x01db,
-       "Tcedilla" : 0x01de,
-       "racute" : 0x01e0,
-       "abreve" : 0x01e3,
-       "lacute" : 0x01e5,
-       "cacute" : 0x01e6,
-       "ccaron" : 0x01e8,
-       "eogonek" : 0x01ea,
-       "ecaron" : 0x01ec,
-       "dcaron" : 0x01ef,
-       "dstroke" : 0x01f0,
-       "nacute" : 0x01f1,
-       "ncaron" : 0x01f2,
-       "odoubleacute" : 0x01f5,
-       "udoubleacute" : 0x01fb,
-       "rcaron" : 0x01f8,
-       "uring" : 0x01f9,
-       "tcedilla" : 0x01fe,
-       "abovedot" : 0x01ff,
-       "Hstroke" : 0x02a1,
-       "Hcircumflex" : 0x02a6,
-       "Iabovedot" : 0x02a9,
-       "Gbreve" : 0x02ab,
-       "Jcircumflex" : 0x02ac,
-       "hstroke" : 0x02b1,
-       "hcircumflex" : 0x02b6,
-       "idotless" : 0x02b9,
-       "gbreve" : 0x02bb,
-       "jcircumflex" : 0x02bc,
-       "Cabovedot" : 0x02c5,
-       "Ccircumflex" : 0x02c6,
-       "Gabovedot" : 0x02d5,
-       "Gcircumflex" : 0x02d8,
-       "Ubreve" : 0x02dd,
-       "Scircumflex" : 0x02de,
-       "cabovedot" : 0x02e5,
-       "ccircumflex" : 0x02e6,
-       "gabovedot" : 0x02f5,
-       "gcircumflex" : 0x02f8,
-       "ubreve" : 0x02fd,
-       "scircumflex" : 0x02fe,
-       "kra" : 0x03a2,
-       "kappa" : 0x03a2,
-       "Rcedilla" : 0x03a3,
-       "Itilde" : 0x03a5,
-       "Lcedilla" : 0x03a6,
-       "Emacron" : 0x03aa,
-       "Gcedilla" : 0x03ab,
-       "Tslash" : 0x03ac,
-       "rcedilla" : 0x03b3,
-       "itilde" : 0x03b5,
-       "lcedilla" : 0x03b6,
-       "emacron" : 0x03ba,
-       "gcedilla" : 0x03bb,
-       "tslash" : 0x03bc,
-       "ENG" : 0x03bd,
-       "eng" : 0x03bf,
-       "Amacron" : 0x03c0,
-       "Iogonek" : 0x03c7,
-       "Eabovedot" : 0x03cc,
-       "Imacron" : 0x03cf,
-       "Ncedilla" : 0x03d1,
-       "Omacron" : 0x03d2,
-       "Kcedilla" : 0x03d3,
-       "Uogonek" : 0x03d9,
-       "Utilde" : 0x03dd,
-       "Umacron" : 0x03de,
-       "amacron" : 0x03e0,
-       "iogonek" : 0x03e7,
-       "eabovedot" : 0x03ec,
-       "imacron" : 0x03ef,
-       "ncedilla" : 0x03f1,
-       "omacron" : 0x03f2,
-       "kcedilla" : 0x03f3,
-       "uogonek" : 0x03f9,
-       "utilde" : 0x03fd,
-       "umacron" : 0x03fe,
-       "Babovedot" : 0x1001e02,
-       "babovedot" : 0x1001e03,
-       "Dabovedot" : 0x1001e0a,
-       "Wgrave" : 0x1001e80,
-       "Wacute" : 0x1001e82,
-       "dabovedot" : 0x1001e0b,
-       "Ygrave" : 0x1001ef2,
-       "Fabovedot" : 0x1001e1e,
-       "fabovedot" : 0x1001e1f,
-       "Mabovedot" : 0x1001e40,
-       "mabovedot" : 0x1001e41,
-       "Pabovedot" : 0x1001e56,
-       "wgrave" : 0x1001e81,
-       "pabovedot" : 0x1001e57,
-       "wacute" : 0x1001e83,
-       "Sabovedot" : 0x1001e60,
-       "ygrave" : 0x1001ef3,
-       "Wdiaeresis" : 0x1001e84,
-       "wdiaeresis" : 0x1001e85,
-       "sabovedot" : 0x1001e61,
-       "Wcircumflex" : 0x1000174,
-       "Tabovedot" : 0x1001e6a,
-       "Ycircumflex" : 0x1000176,
-       "wcircumflex" : 0x1000175,
-       "tabovedot" : 0x1001e6b,
-       "ycircumflex" : 0x1000177,
-       "OE" : 0x13bc,
-       "oe" : 0x13bd,
-       "Ydiaeresis" : 0x13be,
-       "overline" : 0x047e,
-       "kana_fullstop" : 0x04a1,
-       "kana_openingbracket" : 0x04a2,
-       "kana_closingbracket" : 0x04a3,
-       "kana_comma" : 0x04a4,
-       "kana_conjunctive" : 0x04a5,
-       "kana_middledot" : 0x04a5,
-       "kana_WO" : 0x04a6,
-       "kana_a" : 0x04a7,
-       "kana_i" : 0x04a8,
-       "kana_u" : 0x04a9,
-       "kana_e" : 0x04aa,
-       "kana_o" : 0x04ab,
-       "kana_ya" : 0x04ac,
-       "kana_yu" : 0x04ad,
-       "kana_yo" : 0x04ae,
-       "kana_tsu" : 0x04af,
-       "kana_tu" : 0x04af,
-       "prolongedsound" : 0x04b0,
-       "kana_A" : 0x04b1,
-       "kana_I" : 0x04b2,
-       "kana_U" : 0x04b3,
-       "kana_E" : 0x04b4,
-       "kana_O" : 0x04b5,
-       "kana_KA" : 0x04b6,
-       "kana_KI" : 0x04b7,
-       "kana_KU" : 0x04b8,
-       "kana_KE" : 0x04b9,
-       "kana_KO" : 0x04ba,
-       "kana_SA" : 0x04bb,
-       "kana_SHI" : 0x04bc,
-       "kana_SU" : 0x04bd,
-       "kana_SE" : 0x04be,
-       "kana_SO" : 0x04bf,
-       "kana_TA" : 0x04c0,
-       "kana_CHI" : 0x04c1,
-       "kana_TI" : 0x04c1,
-       "kana_TSU" : 0x04c2,
-       "kana_TU" : 0x04c2,
-       "kana_TE" : 0x04c3,
-       "kana_TO" : 0x04c4,
-       "kana_NA" : 0x04c5,
-       "kana_NI" : 0x04c6,
-       "kana_NU" : 0x04c7,
-       "kana_NE" : 0x04c8,
-       "kana_NO" : 0x04c9,
-       "kana_HA" : 0x04ca,
-       "kana_HI" : 0x04cb,
-       "kana_FU" : 0x04cc,
-       "kana_HU" : 0x04cc,
-       "kana_HE" : 0x04cd,
-       "kana_HO" : 0x04ce,
-       "kana_MA" : 0x04cf,
-       "kana_MI" : 0x04d0,
-       "kana_MU" : 0x04d1,
-       "kana_ME" : 0x04d2,
-       "kana_MO" : 0x04d3,
-       "kana_YA" : 0x04d4,
-       "kana_YU" : 0x04d5,
-       "kana_YO" : 0x04d6,
-       "kana_RA" : 0x04d7,
-       "kana_RI" : 0x04d8,
-       "kana_RU" : 0x04d9,
-       "kana_RE" : 0x04da,
-       "kana_RO" : 0x04db,
-       "kana_WA" : 0x04dc,
-       "kana_N" : 0x04dd,
-       "voicedsound" : 0x04de,
-       "semivoicedsound" : 0x04df,
-       "kana_switch" : 0xff7e,
-       "Farsi_0" : 0x10006f0,
-       "Farsi_1" : 0x10006f1,
-       "Farsi_2" : 0x10006f2,
-       "Farsi_3" : 0x10006f3,
-       "Farsi_4" : 0x10006f4,
-       "Farsi_5" : 0x10006f5,
-       "Farsi_6" : 0x10006f6,
-       "Farsi_7" : 0x10006f7,
-       "Farsi_8" : 0x10006f8,
-       "Farsi_9" : 0x10006f9,
-       "Arabic_percent" : 0x100066a,
-       "Arabic_superscript_alef" : 0x1000670,
-       "Arabic_tteh" : 0x1000679,
-       "Arabic_peh" : 0x100067e,
-       "Arabic_tcheh" : 0x1000686,
-       "Arabic_ddal" : 0x1000688,
-       "Arabic_rreh" : 0x1000691,
-       "Arabic_comma" : 0x05ac,
-       "Arabic_fullstop" : 0x10006d4,
-       "Arabic_0" : 0x1000660,
-       "Arabic_1" : 0x1000661,
-       "Arabic_2" : 0x1000662,
-       "Arabic_3" : 0x1000663,
-       "Arabic_4" : 0x1000664,
-       "Arabic_5" : 0x1000665,
-       "Arabic_6" : 0x1000666,
-       "Arabic_7" : 0x1000667,
-       "Arabic_8" : 0x1000668,
-       "Arabic_9" : 0x1000669,
-       "Arabic_semicolon" : 0x05bb,
-       "Arabic_question_mark" : 0x05bf,
-       "Arabic_hamza" : 0x05c1,
-       "Arabic_maddaonalef" : 0x05c2,
-       "Arabic_hamzaonalef" : 0x05c3,
-       "Arabic_hamzaonwaw" : 0x05c4,
-       "Arabic_hamzaunderalef" : 0x05c5,
-       "Arabic_hamzaonyeh" : 0x05c6,
-       "Arabic_alef" : 0x05c7,
-       "Arabic_beh" : 0x05c8,
-       "Arabic_tehmarbuta" : 0x05c9,
-       "Arabic_teh" : 0x05ca,
-       "Arabic_theh" : 0x05cb,
-       "Arabic_jeem" : 0x05cc,
-       "Arabic_hah" : 0x05cd,
-       "Arabic_khah" : 0x05ce,
-       "Arabic_dal" : 0x05cf,
-       "Arabic_thal" : 0x05d0,
-       "Arabic_ra" : 0x05d1,
-       "Arabic_zain" : 0x05d2,
-       "Arabic_seen" : 0x05d3,
-       "Arabic_sheen" : 0x05d4,
-       "Arabic_sad" : 0x05d5,
-       "Arabic_dad" : 0x05d6,
-       "Arabic_tah" : 0x05d7,
-       "Arabic_zah" : 0x05d8,
-       "Arabic_ain" : 0x05d9,
-       "Arabic_ghain" : 0x05da,
-       "Arabic_tatweel" : 0x05e0,
-       "Arabic_feh" : 0x05e1,
-       "Arabic_qaf" : 0x05e2,
-       "Arabic_kaf" : 0x05e3,
-       "Arabic_lam" : 0x05e4,
-       "Arabic_meem" : 0x05e5,
-       "Arabic_noon" : 0x05e6,
-       "Arabic_ha" : 0x05e7,
-       "Arabic_heh" : 0x05e7,
-       "Arabic_waw" : 0x05e8,
-       "Arabic_alefmaksura" : 0x05e9,
-       "Arabic_yeh" : 0x05ea,
-       "Arabic_fathatan" : 0x05eb,
-       "Arabic_dammatan" : 0x05ec,
-       "Arabic_kasratan" : 0x05ed,
-       "Arabic_fatha" : 0x05ee,
-       "Arabic_damma" : 0x05ef,
-       "Arabic_kasra" : 0x05f0,
-       "Arabic_shadda" : 0x05f1,
-       "Arabic_sukun" : 0x05f2,
-       "Arabic_madda_above" : 0x1000653,
-       "Arabic_hamza_above" : 0x1000654,
-       "Arabic_hamza_below" : 0x1000655,
-       "Arabic_jeh" : 0x1000698,
-       "Arabic_veh" : 0x10006a4,
-       "Arabic_keheh" : 0x10006a9,
-       "Arabic_gaf" : 0x10006af,
-       "Arabic_noon_ghunna" : 0x10006ba,
-       "Arabic_heh_doachashmee" : 0x10006be,
-       "Farsi_yeh" : 0x10006cc,
-       "Arabic_farsi_yeh" : 0x10006cc,
-       "Arabic_yeh_baree" : 0x10006d2,
-       "Arabic_heh_goal" : 0x10006c1,
-       "Arabic_switch" : 0xff7e,
-       "Cyrillic_GHE_bar" : 0x1000492,
-       "Cyrillic_ghe_bar" : 0x1000493,
-       "Cyrillic_ZHE_descender" : 0x1000496,
-       "Cyrillic_zhe_descender" : 0x1000497,
-       "Cyrillic_KA_descender" : 0x100049a,
-       "Cyrillic_ka_descender" : 0x100049b,
-       "Cyrillic_KA_vertstroke" : 0x100049c,
-       "Cyrillic_ka_vertstroke" : 0x100049d,
-       "Cyrillic_EN_descender" : 0x10004a2,
-       "Cyrillic_en_descender" : 0x10004a3,
-       "Cyrillic_U_straight" : 0x10004ae,
-       "Cyrillic_u_straight" : 0x10004af,
-       "Cyrillic_U_straight_bar" : 0x10004b0,
-       "Cyrillic_u_straight_bar" : 0x10004b1,
-       "Cyrillic_HA_descender" : 0x10004b2,
-       "Cyrillic_ha_descender" : 0x10004b3,
-       "Cyrillic_CHE_descender" : 0x10004b6,
-       "Cyrillic_che_descender" : 0x10004b7,
-       "Cyrillic_CHE_vertstroke" : 0x10004b8,
-       "Cyrillic_che_vertstroke" : 0x10004b9,
-       "Cyrillic_SHHA" : 0x10004ba,
-       "Cyrillic_shha" : 0x10004bb,
-       "Cyrillic_SCHWA" : 0x10004d8,
-       "Cyrillic_schwa" : 0x10004d9,
-       "Cyrillic_I_macron" : 0x10004e2,
-       "Cyrillic_i_macron" : 0x10004e3,
-       "Cyrillic_O_bar" : 0x10004e8,
-       "Cyrillic_o_bar" : 0x10004e9,
-       "Cyrillic_U_macron" : 0x10004ee,
-       "Cyrillic_u_macron" : 0x10004ef,
-       "Serbian_dje" : 0x06a1,
-       "Macedonia_gje" : 0x06a2,
-       "Cyrillic_io" : 0x06a3,
-       "Ukrainian_ie" : 0x06a4,
-       "Ukranian_je" : 0x06a4,
-       "Macedonia_dse" : 0x06a5,
-       "Ukrainian_i" : 0x06a6,
-       "Ukranian_i" : 0x06a6,
-       "Ukrainian_yi" : 0x06a7,
-       "Ukranian_yi" : 0x06a7,
-       "Cyrillic_je" : 0x06a8,
-       "Serbian_je" : 0x06a8,
-       "Cyrillic_lje" : 0x06a9,
-       "Serbian_lje" : 0x06a9,
-       "Cyrillic_nje" : 0x06aa,
-       "Serbian_nje" : 0x06aa,
-       "Serbian_tshe" : 0x06ab,
-       "Macedonia_kje" : 0x06ac,
-       "Ukrainian_ghe_with_upturn" : 0x06ad,
-       "Byelorussian_shortu" : 0x06ae,
-       "Cyrillic_dzhe" : 0x06af,
-       "Serbian_dze" : 0x06af,
-       "numerosign" : 0x06b0,
-       "Serbian_DJE" : 0x06b1,
-       "Macedonia_GJE" : 0x06b2,
-       "Cyrillic_IO" : 0x06b3,
-       "Ukrainian_IE" : 0x06b4,
-       "Ukranian_JE" : 0x06b4,
-       "Macedonia_DSE" : 0x06b5,
-       "Ukrainian_I" : 0x06b6,
-       "Ukranian_I" : 0x06b6,
-       "Ukrainian_YI" : 0x06b7,
-       "Ukranian_YI" : 0x06b7,
-       "Cyrillic_JE" : 0x06b8,
-       "Serbian_JE" : 0x06b8,
-       "Cyrillic_LJE" : 0x06b9,
-       "Serbian_LJE" : 0x06b9,
-       "Cyrillic_NJE" : 0x06ba,
-       "Serbian_NJE" : 0x06ba,
-       "Serbian_TSHE" : 0x06bb,
-       "Macedonia_KJE" : 0x06bc,
-       "Ukrainian_GHE_WITH_UPTURN" : 0x06bd,
-       "Byelorussian_SHORTU" : 0x06be,
-       "Cyrillic_DZHE" : 0x06bf,
-       "Serbian_DZE" : 0x06bf,
-       "Cyrillic_yu" : 0x06c0,
-       "Cyrillic_a" : 0x06c1,
-       "Cyrillic_be" : 0x06c2,
-       "Cyrillic_tse" : 0x06c3,
-       "Cyrillic_de" : 0x06c4,
-       "Cyrillic_ie" : 0x06c5,
-       "Cyrillic_ef" : 0x06c6,
-       "Cyrillic_ghe" : 0x06c7,
-       "Cyrillic_ha" : 0x06c8,
-       "Cyrillic_i" : 0x06c9,
-       "Cyrillic_shorti" : 0x06ca,
-       "Cyrillic_ka" : 0x06cb,
-       "Cyrillic_el" : 0x06cc,
-       "Cyrillic_em" : 0x06cd,
-       "Cyrillic_en" : 0x06ce,
-       "Cyrillic_o" : 0x06cf,
-       "Cyrillic_pe" : 0x06d0,
-       "Cyrillic_ya" : 0x06d1,
-       "Cyrillic_er" : 0x06d2,
-       "Cyrillic_es" : 0x06d3,
-       "Cyrillic_te" : 0x06d4,
-       "Cyrillic_u" : 0x06d5,
-       "Cyrillic_zhe" : 0x06d6,
-       "Cyrillic_ve" : 0x06d7,
-       "Cyrillic_softsign" : 0x06d8,
-       "Cyrillic_yeru" : 0x06d9,
-       "Cyrillic_ze" : 0x06da,
-       "Cyrillic_sha" : 0x06db,
-       "Cyrillic_e" : 0x06dc,
-       "Cyrillic_shcha" : 0x06dd,
-       "Cyrillic_che" : 0x06de,
-       "Cyrillic_hardsign" : 0x06df,
-       "Cyrillic_YU" : 0x06e0,
-       "Cyrillic_A" : 0x06e1,
-       "Cyrillic_BE" : 0x06e2,
-       "Cyrillic_TSE" : 0x06e3,
-       "Cyrillic_DE" : 0x06e4,
-       "Cyrillic_IE" : 0x06e5,
-       "Cyrillic_EF" : 0x06e6,
-       "Cyrillic_GHE" : 0x06e7,
-       "Cyrillic_HA" : 0x06e8,
-       "Cyrillic_I" : 0x06e9,
-       "Cyrillic_SHORTI" : 0x06ea,
-       "Cyrillic_KA" : 0x06eb,
-       "Cyrillic_EL" : 0x06ec,
-       "Cyrillic_EM" : 0x06ed,
-       "Cyrillic_EN" : 0x06ee,
-       "Cyrillic_O" : 0x06ef,
-       "Cyrillic_PE" : 0x06f0,
-       "Cyrillic_YA" : 0x06f1,
-       "Cyrillic_ER" : 0x06f2,
-       "Cyrillic_ES" : 0x06f3,
-       "Cyrillic_TE" : 0x06f4,
-       "Cyrillic_U" : 0x06f5,
-       "Cyrillic_ZHE" : 0x06f6,
-       "Cyrillic_VE" : 0x06f7,
-       "Cyrillic_SOFTSIGN" : 0x06f8,
-       "Cyrillic_YERU" : 0x06f9,
-       "Cyrillic_ZE" : 0x06fa,
-       "Cyrillic_SHA" : 0x06fb,
-       "Cyrillic_E" : 0x06fc,
-       "Cyrillic_SHCHA" : 0x06fd,
-       "Cyrillic_CHE" : 0x06fe,
-       "Cyrillic_HARDSIGN" : 0x06ff,
-       "Greek_ALPHAaccent" : 0x07a1,
-       "Greek_EPSILONaccent" : 0x07a2,
-       "Greek_ETAaccent" : 0x07a3,
-       "Greek_IOTAaccent" : 0x07a4,
-       "Greek_IOTAdieresis" : 0x07a5,
-       "Greek_IOTAdiaeresis" : 0x07a5,
-       "Greek_OMICRONaccent" : 0x07a7,
-       "Greek_UPSILONaccent" : 0x07a8,
-       "Greek_UPSILONdieresis" : 0x07a9,
-       "Greek_OMEGAaccent" : 0x07ab,
-       "Greek_accentdieresis" : 0x07ae,
-       "Greek_horizbar" : 0x07af,
-       "Greek_alphaaccent" : 0x07b1,
-       "Greek_epsilonaccent" : 0x07b2,
-       "Greek_etaaccent" : 0x07b3,
-       "Greek_iotaaccent" : 0x07b4,
-       "Greek_iotadieresis" : 0x07b5,
-       "Greek_iotaaccentdieresis" : 0x07b6,
-       "Greek_omicronaccent" : 0x07b7,
-       "Greek_upsilonaccent" : 0x07b8,
-       "Greek_upsilondieresis" : 0x07b9,
-       "Greek_upsilonaccentdieresis" : 0x07ba,
-       "Greek_omegaaccent" : 0x07bb,
-       "Greek_ALPHA" : 0x07c1,
-       "Greek_BETA" : 0x07c2,
-       "Greek_GAMMA" : 0x07c3,
-       "Greek_DELTA" : 0x07c4,
-       "Greek_EPSILON" : 0x07c5,
-       "Greek_ZETA" : 0x07c6,
-       "Greek_ETA" : 0x07c7,
-       "Greek_THETA" : 0x07c8,
-       "Greek_IOTA" : 0x07c9,
-       "Greek_KAPPA" : 0x07ca,
-       "Greek_LAMDA" : 0x07cb,
-       "Greek_LAMBDA" : 0x07cb,
-       "Greek_MU" : 0x07cc,
-       "Greek_NU" : 0x07cd,
-       "Greek_XI" : 0x07ce,
-       "Greek_OMICRON" : 0x07cf,
-       "Greek_PI" : 0x07d0,
-       "Greek_RHO" : 0x07d1,
-       "Greek_SIGMA" : 0x07d2,
-       "Greek_TAU" : 0x07d4,
-       "Greek_UPSILON" : 0x07d5,
-       "Greek_PHI" : 0x07d6,
-       "Greek_CHI" : 0x07d7,
-       "Greek_PSI" : 0x07d8,
-       "Greek_OMEGA" : 0x07d9,
-       "Greek_alpha" : 0x07e1,
-       "Greek_beta" : 0x07e2,
-       "Greek_gamma" : 0x07e3,
-       "Greek_delta" : 0x07e4,
-       "Greek_epsilon" : 0x07e5,
-       "Greek_zeta" : 0x07e6,
-       "Greek_eta" : 0x07e7,
-       "Greek_theta" : 0x07e8,
-       "Greek_iota" : 0x07e9,
-       "Greek_kappa" : 0x07ea,
-       "Greek_lamda" : 0x07eb,
-       "Greek_lambda" : 0x07eb,
-       "Greek_mu" : 0x07ec,
-       "Greek_nu" : 0x07ed,
-       "Greek_xi" : 0x07ee,
-       "Greek_omicron" : 0x07ef,
-       "Greek_pi" : 0x07f0,
-       "Greek_rho" : 0x07f1,
-       "Greek_sigma" : 0x07f2,
-       "Greek_finalsmallsigma" : 0x07f3,
-       "Greek_tau" : 0x07f4,
-       "Greek_upsilon" : 0x07f5,
-       "Greek_phi" : 0x07f6,
-       "Greek_chi" : 0x07f7,
-       "Greek_psi" : 0x07f8,
-       "Greek_omega" : 0x07f9,
-       "Greek_switch" : 0xff7e,
-       "leftradical" : 0x08a1,
-       "topleftradical" : 0x08a2,
-       "horizconnector" : 0x08a3,
-       "topintegral" : 0x08a4,
-       "botintegral" : 0x08a5,
-       "vertconnector" : 0x08a6,
-       "topleftsqbracket" : 0x08a7,
-       "botleftsqbracket" : 0x08a8,
-       "toprightsqbracket" : 0x08a9,
-       "botrightsqbracket" : 0x08aa,
-       "topleftparens" : 0x08ab,
-       "botleftparens" : 0x08ac,
-       "toprightparens" : 0x08ad,
-       "botrightparens" : 0x08ae,
-       "leftmiddlecurlybrace" : 0x08af,
-       "rightmiddlecurlybrace" : 0x08b0,
-       "topleftsummation" : 0x08b1,
-       "botleftsummation" : 0x08b2,
-       "topvertsummationconnector" : 0x08b3,
-       "botvertsummationconnector" : 0x08b4,
-       "toprightsummation" : 0x08b5,
-       "botrightsummation" : 0x08b6,
-       "rightmiddlesummation" : 0x08b7,
-       "lessthanequal" : 0x08bc,
-       "notequal" : 0x08bd,
-       "greaterthanequal" : 0x08be,
-       "integral" : 0x08bf,
-       "therefore" : 0x08c0,
-       "variation" : 0x08c1,
-       "infinity" : 0x08c2,
-       "nabla" : 0x08c5,
-       "approximate" : 0x08c8,
-       "similarequal" : 0x08c9,
-       "ifonlyif" : 0x08cd,
-       "implies" : 0x08ce,
-       "identical" : 0x08cf,
-       "radical" : 0x08d6,
-       "includedin" : 0x08da,
-       "includes" : 0x08db,
-       "intersection" : 0x08dc,
-       "union" : 0x08dd,
-       "logicaland" : 0x08de,
-       "logicalor" : 0x08df,
-       "partialderivative" : 0x08ef,
-       "function" : 0x08f6,
-       "leftarrow" : 0x08fb,
-       "uparrow" : 0x08fc,
-       "rightarrow" : 0x08fd,
-       "downarrow" : 0x08fe,
-       "blank" : 0x09df,
-       "soliddiamond" : 0x09e0,
-       "checkerboard" : 0x09e1,
-       "ht" : 0x09e2,
-       "ff" : 0x09e3,
-       "cr" : 0x09e4,
-       "lf" : 0x09e5,
-       "nl" : 0x09e8,
-       "vt" : 0x09e9,
-       "lowrightcorner" : 0x09ea,
-       "uprightcorner" : 0x09eb,
-       "upleftcorner" : 0x09ec,
-       "lowleftcorner" : 0x09ed,
-       "crossinglines" : 0x09ee,
-       "horizlinescan1" : 0x09ef,
-       "horizlinescan3" : 0x09f0,
-       "horizlinescan5" : 0x09f1,
-       "horizlinescan7" : 0x09f2,
-       "horizlinescan9" : 0x09f3,
-       "leftt" : 0x09f4,
-       "rightt" : 0x09f5,
-       "bott" : 0x09f6,
-       "topt" : 0x09f7,
-       "vertbar" : 0x09f8,
-       "emspace" : 0x0aa1,
-       "enspace" : 0x0aa2,
-       "em3space" : 0x0aa3,
-       "em4space" : 0x0aa4,
-       "digitspace" : 0x0aa5,
-       "punctspace" : 0x0aa6,
-       "thinspace" : 0x0aa7,
-       "hairspace" : 0x0aa8,
-       "emdash" : 0x0aa9,
-       "endash" : 0x0aaa,
-       "signifblank" : 0x0aac,
-       "ellipsis" : 0x0aae,
-       "doubbaselinedot" : 0x0aaf,
-       "onethird" : 0x0ab0,
-       "twothirds" : 0x0ab1,
-       "onefifth" : 0x0ab2,
-       "twofifths" : 0x0ab3,
-       "threefifths" : 0x0ab4,
-       "fourfifths" : 0x0ab5,
-       "onesixth" : 0x0ab6,
-       "fivesixths" : 0x0ab7,
-       "careof" : 0x0ab8,
-       "figdash" : 0x0abb,
-       "leftanglebracket" : 0x0abc,
-       "decimalpoint" : 0x0abd,
-       "rightanglebracket" : 0x0abe,
-       "marker" : 0x0abf,
-       "oneeighth" : 0x0ac3,
-       "threeeighths" : 0x0ac4,
-       "fiveeighths" : 0x0ac5,
-       "seveneighths" : 0x0ac6,
-       "trademark" : 0x0ac9,
-       "signaturemark" : 0x0aca,
-       "trademarkincircle" : 0x0acb,
-       "leftopentriangle" : 0x0acc,
-       "rightopentriangle" : 0x0acd,
-       "emopencircle" : 0x0ace,
-       "emopenrectangle" : 0x0acf,
-       "leftsinglequotemark" : 0x0ad0,
-       "rightsinglequotemark" : 0x0ad1,
-       "leftdoublequotemark" : 0x0ad2,
-       "rightdoublequotemark" : 0x0ad3,
-       "prescription" : 0x0ad4,
-       "minutes" : 0x0ad6,
-       "seconds" : 0x0ad7,
-       "latincross" : 0x0ad9,
-       "hexagram" : 0x0ada,
-       "filledrectbullet" : 0x0adb,
-       "filledlefttribullet" : 0x0adc,
-       "filledrighttribullet" : 0x0add,
-       "emfilledcircle" : 0x0ade,
-       "emfilledrect" : 0x0adf,
-       "enopencircbullet" : 0x0ae0,
-       "enopensquarebullet" : 0x0ae1,
-       "openrectbullet" : 0x0ae2,
-       "opentribulletup" : 0x0ae3,
-       "opentribulletdown" : 0x0ae4,
-       "openstar" : 0x0ae5,
-       "enfilledcircbullet" : 0x0ae6,
-       "enfilledsqbullet" : 0x0ae7,
-       "filledtribulletup" : 0x0ae8,
-       "filledtribulletdown" : 0x0ae9,
-       "leftpointer" : 0x0aea,
-       "rightpointer" : 0x0aeb,
-       "club" : 0x0aec,
-       "diamond" : 0x0aed,
-       "heart" : 0x0aee,
-       "maltesecross" : 0x0af0,
-       "dagger" : 0x0af1,
-       "doubledagger" : 0x0af2,
-       "checkmark" : 0x0af3,
-       "ballotcross" : 0x0af4,
-       "musicalsharp" : 0x0af5,
-       "musicalflat" : 0x0af6,
-       "malesymbol" : 0x0af7,
-       "femalesymbol" : 0x0af8,
-       "telephone" : 0x0af9,
-       "telephonerecorder" : 0x0afa,
-       "phonographcopyright" : 0x0afb,
-       "caret" : 0x0afc,
-       "singlelowquotemark" : 0x0afd,
-       "doublelowquotemark" : 0x0afe,
-       "cursor" : 0x0aff,
-       "leftcaret" : 0x0ba3,
-       "rightcaret" : 0x0ba6,
-       "downcaret" : 0x0ba8,
-       "upcaret" : 0x0ba9,
-       "overbar" : 0x0bc0,
-       "downtack" : 0x0bc2,
-       "upshoe" : 0x0bc3,
-       "downstile" : 0x0bc4,
-       "underbar" : 0x0bc6,
-       "jot" : 0x0bca,
-       "quad" : 0x0bcc,
-       "uptack" : 0x0bce,
-       "circle" : 0x0bcf,
-       "upstile" : 0x0bd3,
-       "downshoe" : 0x0bd6,
-       "rightshoe" : 0x0bd8,
-       "leftshoe" : 0x0bda,
-       "lefttack" : 0x0bdc,
-       "righttack" : 0x0bfc,
-       "hebrew_doublelowline" : 0x0cdf,
-       "hebrew_aleph" : 0x0ce0,
-       "hebrew_bet" : 0x0ce1,
-       "hebrew_beth" : 0x0ce1,
-       "hebrew_gimel" : 0x0ce2,
-       "hebrew_gimmel" : 0x0ce2,
-       "hebrew_dalet" : 0x0ce3,
-       "hebrew_daleth" : 0x0ce3,
-       "hebrew_he" : 0x0ce4,
-       "hebrew_waw" : 0x0ce5,
-       "hebrew_zain" : 0x0ce6,
-       "hebrew_zayin" : 0x0ce6,
-       "hebrew_chet" : 0x0ce7,
-       "hebrew_het" : 0x0ce7,
-       "hebrew_tet" : 0x0ce8,
-       "hebrew_teth" : 0x0ce8,
-       "hebrew_yod" : 0x0ce9,
-       "hebrew_finalkaph" : 0x0cea,
-       "hebrew_kaph" : 0x0ceb,
-       "hebrew_lamed" : 0x0cec,
-       "hebrew_finalmem" : 0x0ced,
-       "hebrew_mem" : 0x0cee,
-       "hebrew_finalnun" : 0x0cef,
-       "hebrew_nun" : 0x0cf0,
-       "hebrew_samech" : 0x0cf1,
-       "hebrew_samekh" : 0x0cf1,
-       "hebrew_ayin" : 0x0cf2,
-       "hebrew_finalpe" : 0x0cf3,
-       "hebrew_pe" : 0x0cf4,
-       "hebrew_finalzade" : 0x0cf5,
-       "hebrew_finalzadi" : 0x0cf5,
-       "hebrew_zade" : 0x0cf6,
-       "hebrew_zadi" : 0x0cf6,
-       "hebrew_qoph" : 0x0cf7,
-       "hebrew_kuf" : 0x0cf7,
-       "hebrew_resh" : 0x0cf8,
-       "hebrew_shin" : 0x0cf9,
-       "hebrew_taw" : 0x0cfa,
-       "hebrew_taf" : 0x0cfa,
-       "Hebrew_switch" : 0xff7e,
-       "Thai_kokai" : 0x0da1,
-       "Thai_khokhai" : 0x0da2,
-       "Thai_khokhuat" : 0x0da3,
-       "Thai_khokhwai" : 0x0da4,
-       "Thai_khokhon" : 0x0da5,
-       "Thai_khorakhang" : 0x0da6,
-       "Thai_ngongu" : 0x0da7,
-       "Thai_chochan" : 0x0da8,
-       "Thai_choching" : 0x0da9,
-       "Thai_chochang" : 0x0daa,
-       "Thai_soso" : 0x0dab,
-       "Thai_chochoe" : 0x0dac,
-       "Thai_yoying" : 0x0dad,
-       "Thai_dochada" : 0x0dae,
-       "Thai_topatak" : 0x0daf,
-       "Thai_thothan" : 0x0db0,
-       "Thai_thonangmontho" : 0x0db1,
-       "Thai_thophuthao" : 0x0db2,
-       "Thai_nonen" : 0x0db3,
-       "Thai_dodek" : 0x0db4,
-       "Thai_totao" : 0x0db5,
-       "Thai_thothung" : 0x0db6,
-       "Thai_thothahan" : 0x0db7,
-       "Thai_thothong" : 0x0db8,
-       "Thai_nonu" : 0x0db9,
-       "Thai_bobaimai" : 0x0dba,
-       "Thai_popla" : 0x0dbb,
-       "Thai_phophung" : 0x0dbc,
-       "Thai_fofa" : 0x0dbd,
-       "Thai_phophan" : 0x0dbe,
-       "Thai_fofan" : 0x0dbf,
-       "Thai_phosamphao" : 0x0dc0,
-       "Thai_moma" : 0x0dc1,
-       "Thai_yoyak" : 0x0dc2,
-       "Thai_rorua" : 0x0dc3,
-       "Thai_ru" : 0x0dc4,
-       "Thai_loling" : 0x0dc5,
-       "Thai_lu" : 0x0dc6,
-       "Thai_wowaen" : 0x0dc7,
-       "Thai_sosala" : 0x0dc8,
-       "Thai_sorusi" : 0x0dc9,
-       "Thai_sosua" : 0x0dca,
-       "Thai_hohip" : 0x0dcb,
-       "Thai_lochula" : 0x0dcc,
-       "Thai_oang" : 0x0dcd,
-       "Thai_honokhuk" : 0x0dce,
-       "Thai_paiyannoi" : 0x0dcf,
-       "Thai_saraa" : 0x0dd0,
-       "Thai_maihanakat" : 0x0dd1,
-       "Thai_saraaa" : 0x0dd2,
-       "Thai_saraam" : 0x0dd3,
-       "Thai_sarai" : 0x0dd4,
-       "Thai_saraii" : 0x0dd5,
-       "Thai_saraue" : 0x0dd6,
-       "Thai_sarauee" : 0x0dd7,
-       "Thai_sarau" : 0x0dd8,
-       "Thai_sarauu" : 0x0dd9,
-       "Thai_phinthu" : 0x0dda,
-       "Thai_maihanakat_maitho" : 0x0dde,
-       "Thai_baht" : 0x0ddf,
-       "Thai_sarae" : 0x0de0,
-       "Thai_saraae" : 0x0de1,
-       "Thai_sarao" : 0x0de2,
-       "Thai_saraaimaimuan" : 0x0de3,
-       "Thai_saraaimaimalai" : 0x0de4,
-       "Thai_lakkhangyao" : 0x0de5,
-       "Thai_maiyamok" : 0x0de6,
-       "Thai_maitaikhu" : 0x0de7,
-       "Thai_maiek" : 0x0de8,
-       "Thai_maitho" : 0x0de9,
-       "Thai_maitri" : 0x0dea,
-       "Thai_maichattawa" : 0x0deb,
-       "Thai_thanthakhat" : 0x0dec,
-       "Thai_nikhahit" : 0x0ded,
-       "Thai_leksun" : 0x0df0,
-       "Thai_leknung" : 0x0df1,
-       "Thai_leksong" : 0x0df2,
-       "Thai_leksam" : 0x0df3,
-       "Thai_leksi" : 0x0df4,
-       "Thai_lekha" : 0x0df5,
-       "Thai_lekhok" : 0x0df6,
-       "Thai_lekchet" : 0x0df7,
-       "Thai_lekpaet" : 0x0df8,
-       "Thai_lekkao" : 0x0df9,
-       "Hangul" : 0xff31,
-       "Hangul_Start" : 0xff32,
-       "Hangul_End" : 0xff33,
-       "Hangul_Hanja" : 0xff34,
-       "Hangul_Jamo" : 0xff35,
-       "Hangul_Romaja" : 0xff36,
-       "Hangul_Codeinput" : 0xff37,
-       "Hangul_Jeonja" : 0xff38,
-       "Hangul_Banja" : 0xff39,
-       "Hangul_PreHanja" : 0xff3a,
-       "Hangul_PostHanja" : 0xff3b,
-       "Hangul_SingleCandidate" : 0xff3c,
-       "Hangul_MultipleCandidate" : 0xff3d,
-       "Hangul_PreviousCandidate" : 0xff3e,
-       "Hangul_Special" : 0xff3f,
-       "Hangul_switch" : 0xff7e,
-       "Hangul_Kiyeog" : 0x0ea1,
-       "Hangul_SsangKiyeog" : 0x0ea2,
-       "Hangul_KiyeogSios" : 0x0ea3,
-       "Hangul_Nieun" : 0x0ea4,
-       "Hangul_NieunJieuj" : 0x0ea5,
-       "Hangul_NieunHieuh" : 0x0ea6,
-       "Hangul_Dikeud" : 0x0ea7,
-       "Hangul_SsangDikeud" : 0x0ea8,
-       "Hangul_Rieul" : 0x0ea9,
-       "Hangul_RieulKiyeog" : 0x0eaa,
-       "Hangul_RieulMieum" : 0x0eab,
-       "Hangul_RieulPieub" : 0x0eac,
-       "Hangul_RieulSios" : 0x0ead,
-       "Hangul_RieulTieut" : 0x0eae,
-       "Hangul_RieulPhieuf" : 0x0eaf,
-       "Hangul_RieulHieuh" : 0x0eb0,
-       "Hangul_Mieum" : 0x0eb1,
-       "Hangul_Pieub" : 0x0eb2,
-       "Hangul_SsangPieub" : 0x0eb3,
-       "Hangul_PieubSios" : 0x0eb4,
-       "Hangul_Sios" : 0x0eb5,
-       "Hangul_SsangSios" : 0x0eb6,
-       "Hangul_Ieung" : 0x0eb7,
-       "Hangul_Jieuj" : 0x0eb8,
-       "Hangul_SsangJieuj" : 0x0eb9,
-       "Hangul_Cieuc" : 0x0eba,
-       "Hangul_Khieuq" : 0x0ebb,
-       "Hangul_Tieut" : 0x0ebc,
-       "Hangul_Phieuf" : 0x0ebd,
-       "Hangul_Hieuh" : 0x0ebe,
-       "Hangul_A" : 0x0ebf,
-       "Hangul_AE" : 0x0ec0,
-       "Hangul_YA" : 0x0ec1,
-       "Hangul_YAE" : 0x0ec2,
-       "Hangul_EO" : 0x0ec3,
-       "Hangul_E" : 0x0ec4,
-       "Hangul_YEO" : 0x0ec5,
-       "Hangul_YE" : 0x0ec6,
-       "Hangul_O" : 0x0ec7,
-       "Hangul_WA" : 0x0ec8,
-       "Hangul_WAE" : 0x0ec9,
-       "Hangul_OE" : 0x0eca,
-       "Hangul_YO" : 0x0ecb,
-       "Hangul_U" : 0x0ecc,
-       "Hangul_WEO" : 0x0ecd,
-       "Hangul_WE" : 0x0ece,
-       "Hangul_WI" : 0x0ecf,
-       "Hangul_YU" : 0x0ed0,
-       "Hangul_EU" : 0x0ed1,
-       "Hangul_YI" : 0x0ed2,
-       "Hangul_I" : 0x0ed3,
-       "Hangul_J_Kiyeog" : 0x0ed4,
-       "Hangul_J_SsangKiyeog" : 0x0ed5,
-       "Hangul_J_KiyeogSios" : 0x0ed6,
-       "Hangul_J_Nieun" : 0x0ed7,
-       "Hangul_J_NieunJieuj" : 0x0ed8,
-       "Hangul_J_NieunHieuh" : 0x0ed9,
-       "Hangul_J_Dikeud" : 0x0eda,
-       "Hangul_J_Rieul" : 0x0edb,
-       "Hangul_J_RieulKiyeog" : 0x0edc,
-       "Hangul_J_RieulMieum" : 0x0edd,
-       "Hangul_J_RieulPieub" : 0x0ede,
-       "Hangul_J_RieulSios" : 0x0edf,
-       "Hangul_J_RieulTieut" : 0x0ee0,
-       "Hangul_J_RieulPhieuf" : 0x0ee1,
-       "Hangul_J_RieulHieuh" : 0x0ee2,
-       "Hangul_J_Mieum" : 0x0ee3,
-       "Hangul_J_Pieub" : 0x0ee4,
-       "Hangul_J_PieubSios" : 0x0ee5,
-       "Hangul_J_Sios" : 0x0ee6,
-       "Hangul_J_SsangSios" : 0x0ee7,
-       "Hangul_J_Ieung" : 0x0ee8,
-       "Hangul_J_Jieuj" : 0x0ee9,
-       "Hangul_J_Cieuc" : 0x0eea,
-       "Hangul_J_Khieuq" : 0x0eeb,
-       "Hangul_J_Tieut" : 0x0eec,
-       "Hangul_J_Phieuf" : 0x0eed,
-       "Hangul_J_Hieuh" : 0x0eee,
-       "Hangul_RieulYeorinHieuh" : 0x0eef,
-       "Hangul_SunkyeongeumMieum" : 0x0ef0,
-       "Hangul_SunkyeongeumPieub" : 0x0ef1,
-       "Hangul_PanSios" : 0x0ef2,
-       "Hangul_KkogjiDalrinIeung" : 0x0ef3,
-       "Hangul_SunkyeongeumPhieuf" : 0x0ef4,
-       "Hangul_YeorinHieuh" : 0x0ef5,
-       "Hangul_AraeA" : 0x0ef6,
-       "Hangul_AraeAE" : 0x0ef7,
-       "Hangul_J_PanSios" : 0x0ef8,
-       "Hangul_J_KkogjiDalrinIeung" : 0x0ef9,
-       "Hangul_J_YeorinHieuh" : 0x0efa,
-       "Korean_Won" : 0x0eff,
-       "Armenian_ligature_ew" : 0x1000587,
-       "Armenian_full_stop" : 0x1000589,
-       "Armenian_verjaket" : 0x1000589,
-       "Armenian_separation_mark" : 0x100055d,
-       "Armenian_but" : 0x100055d,
-       "Armenian_hyphen" : 0x100058a,
-       "Armenian_yentamna" : 0x100058a,
-       "Armenian_exclam" : 0x100055c,
-       "Armenian_amanak" : 0x100055c,
-       "Armenian_accent" : 0x100055b,
-       "Armenian_shesht" : 0x100055b,
-       "Armenian_question" : 0x100055e,
-       "Armenian_paruyk" : 0x100055e,
-       "Armenian_AYB" : 0x1000531,
-       "Armenian_ayb" : 0x1000561,
-       "Armenian_BEN" : 0x1000532,
-       "Armenian_ben" : 0x1000562,
-       "Armenian_GIM" : 0x1000533,
-       "Armenian_gim" : 0x1000563,
-       "Armenian_DA" : 0x1000534,
-       "Armenian_da" : 0x1000564,
-       "Armenian_YECH" : 0x1000535,
-       "Armenian_yech" : 0x1000565,
-       "Armenian_ZA" : 0x1000536,
-       "Armenian_za" : 0x1000566,
-       "Armenian_E" : 0x1000537,
-       "Armenian_e" : 0x1000567,
-       "Armenian_AT" : 0x1000538,
-       "Armenian_at" : 0x1000568,
-       "Armenian_TO" : 0x1000539,
-       "Armenian_to" : 0x1000569,
-       "Armenian_ZHE" : 0x100053a,
-       "Armenian_zhe" : 0x100056a,
-       "Armenian_INI" : 0x100053b,
-       "Armenian_ini" : 0x100056b,
-       "Armenian_LYUN" : 0x100053c,
-       "Armenian_lyun" : 0x100056c,
-       "Armenian_KHE" : 0x100053d,
-       "Armenian_khe" : 0x100056d,
-       "Armenian_TSA" : 0x100053e,
-       "Armenian_tsa" : 0x100056e,
-       "Armenian_KEN" : 0x100053f,
-       "Armenian_ken" : 0x100056f,
-       "Armenian_HO" : 0x1000540,
-       "Armenian_ho" : 0x1000570,
-       "Armenian_DZA" : 0x1000541,
-       "Armenian_dza" : 0x1000571,
-       "Armenian_GHAT" : 0x1000542,
-       "Armenian_ghat" : 0x1000572,
-       "Armenian_TCHE" : 0x1000543,
-       "Armenian_tche" : 0x1000573,
-       "Armenian_MEN" : 0x1000544,
-       "Armenian_men" : 0x1000574,
-       "Armenian_HI" : 0x1000545,
-       "Armenian_hi" : 0x1000575,
-       "Armenian_NU" : 0x1000546,
-       "Armenian_nu" : 0x1000576,
-       "Armenian_SHA" : 0x1000547,
-       "Armenian_sha" : 0x1000577,
-       "Armenian_VO" : 0x1000548,
-       "Armenian_vo" : 0x1000578,
-       "Armenian_CHA" : 0x1000549,
-       "Armenian_cha" : 0x1000579,
-       "Armenian_PE" : 0x100054a,
-       "Armenian_pe" : 0x100057a,
-       "Armenian_JE" : 0x100054b,
-       "Armenian_je" : 0x100057b,
-       "Armenian_RA" : 0x100054c,
-       "Armenian_ra" : 0x100057c,
-       "Armenian_SE" : 0x100054d,
-       "Armenian_se" : 0x100057d,
-       "Armenian_VEV" : 0x100054e,
-       "Armenian_vev" : 0x100057e,
-       "Armenian_TYUN" : 0x100054f,
-       "Armenian_tyun" : 0x100057f,
-       "Armenian_RE" : 0x1000550,
-       "Armenian_re" : 0x1000580,
-       "Armenian_TSO" : 0x1000551,
-       "Armenian_tso" : 0x1000581,
-       "Armenian_VYUN" : 0x1000552,
-       "Armenian_vyun" : 0x1000582,
-       "Armenian_PYUR" : 0x1000553,
-       "Armenian_pyur" : 0x1000583,
-       "Armenian_KE" : 0x1000554,
-       "Armenian_ke" : 0x1000584,
-       "Armenian_O" : 0x1000555,
-       "Armenian_o" : 0x1000585,
-       "Armenian_FE" : 0x1000556,
-       "Armenian_fe" : 0x1000586,
-       "Armenian_apostrophe" : 0x100055a,
-       "Georgian_an" : 0x10010d0,
-       "Georgian_ban" : 0x10010d1,
-       "Georgian_gan" : 0x10010d2,
-       "Georgian_don" : 0x10010d3,
-       "Georgian_en" : 0x10010d4,
-       "Georgian_vin" : 0x10010d5,
-       "Georgian_zen" : 0x10010d6,
-       "Georgian_tan" : 0x10010d7,
-       "Georgian_in" : 0x10010d8,
-       "Georgian_kan" : 0x10010d9,
-       "Georgian_las" : 0x10010da,
-       "Georgian_man" : 0x10010db,
-       "Georgian_nar" : 0x10010dc,
-       "Georgian_on" : 0x10010dd,
-       "Georgian_par" : 0x10010de,
-       "Georgian_zhar" : 0x10010df,
-       "Georgian_rae" : 0x10010e0,
-       "Georgian_san" : 0x10010e1,
-       "Georgian_tar" : 0x10010e2,
-       "Georgian_un" : 0x10010e3,
-       "Georgian_phar" : 0x10010e4,
-       "Georgian_khar" : 0x10010e5,
-       "Georgian_ghan" : 0x10010e6,
-       "Georgian_qar" : 0x10010e7,
-       "Georgian_shin" : 0x10010e8,
-       "Georgian_chin" : 0x10010e9,
-       "Georgian_can" : 0x10010ea,
-       "Georgian_jil" : 0x10010eb,
-       "Georgian_cil" : 0x10010ec,
-       "Georgian_char" : 0x10010ed,
-       "Georgian_xan" : 0x10010ee,
-       "Georgian_jhan" : 0x10010ef,
-       "Georgian_hae" : 0x10010f0,
-       "Georgian_he" : 0x10010f1,
-       "Georgian_hie" : 0x10010f2,
-       "Georgian_we" : 0x10010f3,
-       "Georgian_har" : 0x10010f4,
-       "Georgian_hoe" : 0x10010f5,
-       "Georgian_fi" : 0x10010f6,
-       "Xabovedot" : 0x1001e8a,
-       "Ibreve" : 0x100012c,
-       "Zstroke" : 0x10001b5,
-       "Gcaron" : 0x10001e6,
-       "Ocaron" : 0x10001d1,
-       "Obarred" : 0x100019f,
-       "xabovedot" : 0x1001e8b,
-       "ibreve" : 0x100012d,
-       "zstroke" : 0x10001b6,
-       "gcaron" : 0x10001e7,
-       "ocaron" : 0x10001d2,
-       "obarred" : 0x1000275,
-       "SCHWA" : 0x100018f,
-       "schwa" : 0x1000259,
-       "Lbelowdot" : 0x1001e36,
-       "lbelowdot" : 0x1001e37,
-       "Abelowdot" : 0x1001ea0,
-       "abelowdot" : 0x1001ea1,
-       "Ahook" : 0x1001ea2,
-       "ahook" : 0x1001ea3,
-       "Acircumflexacute" : 0x1001ea4,
-       "acircumflexacute" : 0x1001ea5,
-       "Acircumflexgrave" : 0x1001ea6,
-       "acircumflexgrave" : 0x1001ea7,
-       "Acircumflexhook" : 0x1001ea8,
-       "acircumflexhook" : 0x1001ea9,
-       "Acircumflextilde" : 0x1001eaa,
-       "acircumflextilde" : 0x1001eab,
-       "Acircumflexbelowdot" : 0x1001eac,
-       "acircumflexbelowdot" : 0x1001ead,
-       "Abreveacute" : 0x1001eae,
-       "abreveacute" : 0x1001eaf,
-       "Abrevegrave" : 0x1001eb0,
-       "abrevegrave" : 0x1001eb1,
-       "Abrevehook" : 0x1001eb2,
-       "abrevehook" : 0x1001eb3,
-       "Abrevetilde" : 0x1001eb4,
-       "abrevetilde" : 0x1001eb5,
-       "Abrevebelowdot" : 0x1001eb6,
-       "abrevebelowdot" : 0x1001eb7,
-       "Ebelowdot" : 0x1001eb8,
-       "ebelowdot" : 0x1001eb9,
-       "Ehook" : 0x1001eba,
-       "ehook" : 0x1001ebb,
-       "Etilde" : 0x1001ebc,
-       "etilde" : 0x1001ebd,
-       "Ecircumflexacute" : 0x1001ebe,
-       "ecircumflexacute" : 0x1001ebf,
-       "Ecircumflexgrave" : 0x1001ec0,
-       "ecircumflexgrave" : 0x1001ec1,
-       "Ecircumflexhook" : 0x1001ec2,
-       "ecircumflexhook" : 0x1001ec3,
-       "Ecircumflextilde" : 0x1001ec4,
-       "ecircumflextilde" : 0x1001ec5,
-       "Ecircumflexbelowdot" : 0x1001ec6,
-       "ecircumflexbelowdot" : 0x1001ec7,
-       "Ihook" : 0x1001ec8,
-       "ihook" : 0x1001ec9,
-       "Ibelowdot" : 0x1001eca,
-       "ibelowdot" : 0x1001ecb,
-       "Obelowdot" : 0x1001ecc,
-       "obelowdot" : 0x1001ecd,
-       "Ohook" : 0x1001ece,
-       "ohook" : 0x1001ecf,
-       "Ocircumflexacute" : 0x1001ed0,
-       "ocircumflexacute" : 0x1001ed1,
-       "Ocircumflexgrave" : 0x1001ed2,
-       "ocircumflexgrave" : 0x1001ed3,
-       "Ocircumflexhook" : 0x1001ed4,
-       "ocircumflexhook" : 0x1001ed5,
-       "Ocircumflextilde" : 0x1001ed6,
-       "ocircumflextilde" : 0x1001ed7,
-       "Ocircumflexbelowdot" : 0x1001ed8,
-       "ocircumflexbelowdot" : 0x1001ed9,
-       "Ohornacute" : 0x1001eda,
-       "ohornacute" : 0x1001edb,
-       "Ohorngrave" : 0x1001edc,
-       "ohorngrave" : 0x1001edd,
-       "Ohornhook" : 0x1001ede,
-       "ohornhook" : 0x1001edf,
-       "Ohorntilde" : 0x1001ee0,
-       "ohorntilde" : 0x1001ee1,
-       "Ohornbelowdot" : 0x1001ee2,
-       "ohornbelowdot" : 0x1001ee3,
-       "Ubelowdot" : 0x1001ee4,
-       "ubelowdot" : 0x1001ee5,
-       "Uhook" : 0x1001ee6,
-       "uhook" : 0x1001ee7,
-       "Uhornacute" : 0x1001ee8,
-       "uhornacute" : 0x1001ee9,
-       "Uhorngrave" : 0x1001eea,
-       "uhorngrave" : 0x1001eeb,
-       "Uhornhook" : 0x1001eec,
-       "uhornhook" : 0x1001eed,
-       "Uhorntilde" : 0x1001eee,
-       "uhorntilde" : 0x1001eef,
-       "Uhornbelowdot" : 0x1001ef0,
-       "uhornbelowdot" : 0x1001ef1,
-       "Ybelowdot" : 0x1001ef4,
-       "ybelowdot" : 0x1001ef5,
-       "Yhook" : 0x1001ef6,
-       "yhook" : 0x1001ef7,
-       "Ytilde" : 0x1001ef8,
-       "ytilde" : 0x1001ef9,
-       "Ohorn" : 0x10001a0,
-       "ohorn" : 0x10001a1,
-       "Uhorn" : 0x10001af,
-       "uhorn" : 0x10001b0,
-       "EcuSign" : 0x10020a0,
-       "ColonSign" : 0x10020a1,
-       "CruzeiroSign" : 0x10020a2,
-       "FFrancSign" : 0x10020a3,
-       "LiraSign" : 0x10020a4,
-       "MillSign" : 0x10020a5,
-       "NairaSign" : 0x10020a6,
-       "PesetaSign" : 0x10020a7,
-       "RupeeSign" : 0x10020a8,
-       "WonSign" : 0x10020a9,
-       "NewSheqelSign" : 0x10020aa,
-       "DongSign" : 0x10020ab,
-       "EuroSign" : 0x20ac,
-       "zerosuperior" : 0x1002070,
-       "foursuperior" : 0x1002074,
-       "fivesuperior" : 0x1002075,
-       "sixsuperior" : 0x1002076,
-       "sevensuperior" : 0x1002077,
-       "eightsuperior" : 0x1002078,
-       "ninesuperior" : 0x1002079,
-       "zerosubscript" : 0x1002080,
-       "onesubscript" : 0x1002081,
-       "twosubscript" : 0x1002082,
-       "threesubscript" : 0x1002083,
-       "foursubscript" : 0x1002084,
-       "fivesubscript" : 0x1002085,
-       "sixsubscript" : 0x1002086,
-       "sevensubscript" : 0x1002087,
-       "eightsubscript" : 0x1002088,
-       "ninesubscript" : 0x1002089,
-       "partdifferential" : 0x1002202,
-       "emptyset" : 0x1002205,
-       "elementof" : 0x1002208,
-       "notelementof" : 0x1002209,
-       "containsas" : 0x100220B,
-       "squareroot" : 0x100221A,
-       "cuberoot" : 0x100221B,
-       "fourthroot" : 0x100221C,
-       "dintegral" : 0x100222C,
-       "tintegral" : 0x100222D,
-       "because" : 0x1002235,
-       "approxeq" : 0x1002248,
-       "notapproxeq" : 0x1002247,
-       "notidentical" : 0x1002262,
-       "stricteq" : 0x1002263,
-       "braille_dot_1" : 0xfff1,
-       "braille_dot_2" : 0xfff2,
-       "braille_dot_3" : 0xfff3,
-       "braille_dot_4" : 0xfff4,
-       "braille_dot_5" : 0xfff5,
-       "braille_dot_6" : 0xfff6,
-       "braille_dot_7" : 0xfff7,
-       "braille_dot_8" : 0xfff8,
-       "braille_dot_9" : 0xfff9,
-       "braille_dot_10" : 0xfffa,
-       "braille_blank" : 0x1002800,
-       "braille_dots_1" : 0x1002801,
-       "braille_dots_2" : 0x1002802,
-       "braille_dots_12" : 0x1002803,
-       "braille_dots_3" : 0x1002804,
-       "braille_dots_13" : 0x1002805,
-       "braille_dots_23" : 0x1002806,
-       "braille_dots_123" : 0x1002807,
-       "braille_dots_4" : 0x1002808,
-       "braille_dots_14" : 0x1002809,
-       "braille_dots_24" : 0x100280a,
-       "braille_dots_124" : 0x100280b,
-       "braille_dots_34" : 0x100280c,
-       "braille_dots_134" : 0x100280d,
-       "braille_dots_234" : 0x100280e,
-       "braille_dots_1234" : 0x100280f,
-       "braille_dots_5" : 0x1002810,
-       "braille_dots_15" : 0x1002811,
-       "braille_dots_25" : 0x1002812,
-       "braille_dots_125" : 0x1002813,
-       "braille_dots_35" : 0x1002814,
-       "braille_dots_135" : 0x1002815,
-       "braille_dots_235" : 0x1002816,
-       "braille_dots_1235" : 0x1002817,
-       "braille_dots_45" : 0x1002818,
-       "braille_dots_145" : 0x1002819,
-       "braille_dots_245" : 0x100281a,
-       "braille_dots_1245" : 0x100281b,
-       "braille_dots_345" : 0x100281c,
-       "braille_dots_1345" : 0x100281d,
-       "braille_dots_2345" : 0x100281e,
-       "braille_dots_12345" : 0x100281f,
-       "braille_dots_6" : 0x1002820,
-       "braille_dots_16" : 0x1002821,
-       "braille_dots_26" : 0x1002822,
-       "braille_dots_126" : 0x1002823,
-       "braille_dots_36" : 0x1002824,
-       "braille_dots_136" : 0x1002825,
-       "braille_dots_236" : 0x1002826,
-       "braille_dots_1236" : 0x1002827,
-       "braille_dots_46" : 0x1002828,
-       "braille_dots_146" : 0x1002829,
-       "braille_dots_246" : 0x100282a,
-       "braille_dots_1246" : 0x100282b,
-       "braille_dots_346" : 0x100282c,
-       "braille_dots_1346" : 0x100282d,
-       "braille_dots_2346" : 0x100282e,
-       "braille_dots_12346" : 0x100282f,
-       "braille_dots_56" : 0x1002830,
-       "braille_dots_156" : 0x1002831,
-       "braille_dots_256" : 0x1002832,
-       "braille_dots_1256" : 0x1002833,
-       "braille_dots_356" : 0x1002834,
-       "braille_dots_1356" : 0x1002835,
-       "braille_dots_2356" : 0x1002836,
-       "braille_dots_12356" : 0x1002837,
-       "braille_dots_456" : 0x1002838,
-       "braille_dots_1456" : 0x1002839,
-       "braille_dots_2456" : 0x100283a,
-       "braille_dots_12456" : 0x100283b,
-       "braille_dots_3456" : 0x100283c,
-       "braille_dots_13456" : 0x100283d,
-       "braille_dots_23456" : 0x100283e,
-       "braille_dots_123456" : 0x100283f,
-       "braille_dots_7" : 0x1002840,
-       "braille_dots_17" : 0x1002841,
-       "braille_dots_27" : 0x1002842,
-       "braille_dots_127" : 0x1002843,
-       "braille_dots_37" : 0x1002844,
-       "braille_dots_137" : 0x1002845,
-       "braille_dots_237" : 0x1002846,
-       "braille_dots_1237" : 0x1002847,
-       "braille_dots_47" : 0x1002848,
-       "braille_dots_147" : 0x1002849,
-       "braille_dots_247" : 0x100284a,
-       "braille_dots_1247" : 0x100284b,
-       "braille_dots_347" : 0x100284c,
-       "braille_dots_1347" : 0x100284d,
-       "braille_dots_2347" : 0x100284e,
-       "braille_dots_12347" : 0x100284f,
-       "braille_dots_57" : 0x1002850,
-       "braille_dots_157" : 0x1002851,
-       "braille_dots_257" : 0x1002852,
-       "braille_dots_1257" : 0x1002853,
-       "braille_dots_357" : 0x1002854,
-       "braille_dots_1357" : 0x1002855,
-       "braille_dots_2357" : 0x1002856,
-       "braille_dots_12357" : 0x1002857,
-       "braille_dots_457" : 0x1002858,
-       "braille_dots_1457" : 0x1002859,
-       "braille_dots_2457" : 0x100285a,
-       "braille_dots_12457" : 0x100285b,
-       "braille_dots_3457" : 0x100285c,
-       "braille_dots_13457" : 0x100285d,
-       "braille_dots_23457" : 0x100285e,
-       "braille_dots_123457" : 0x100285f,
-       "braille_dots_67" : 0x1002860,
-       "braille_dots_167" : 0x1002861,
-       "braille_dots_267" : 0x1002862,
-       "braille_dots_1267" : 0x1002863,
-       "braille_dots_367" : 0x1002864,
-       "braille_dots_1367" : 0x1002865,
-       "braille_dots_2367" : 0x1002866,
-       "braille_dots_12367" : 0x1002867,
-       "braille_dots_467" : 0x1002868,
-       "braille_dots_1467" : 0x1002869,
-       "braille_dots_2467" : 0x100286a,
-       "braille_dots_12467" : 0x100286b,
-       "braille_dots_3467" : 0x100286c,
-       "braille_dots_13467" : 0x100286d,
-       "braille_dots_23467" : 0x100286e,
-       "braille_dots_123467" : 0x100286f,
-       "braille_dots_567" : 0x1002870,
-       "braille_dots_1567" : 0x1002871,
-       "braille_dots_2567" : 0x1002872,
-       "braille_dots_12567" : 0x1002873,
-       "braille_dots_3567" : 0x1002874,
-       "braille_dots_13567" : 0x1002875,
-       "braille_dots_23567" : 0x1002876,
-       "braille_dots_123567" : 0x1002877,
-       "braille_dots_4567" : 0x1002878,
-       "braille_dots_14567" : 0x1002879,
-       "braille_dots_24567" : 0x100287a,
-       "braille_dots_124567" : 0x100287b,
-       "braille_dots_34567" : 0x100287c,
-       "braille_dots_134567" : 0x100287d,
-       "braille_dots_234567" : 0x100287e,
-       "braille_dots_1234567" : 0x100287f,
-       "braille_dots_8" : 0x1002880,
-       "braille_dots_18" : 0x1002881,
-       "braille_dots_28" : 0x1002882,
-       "braille_dots_128" : 0x1002883,
-       "braille_dots_38" : 0x1002884,
-       "braille_dots_138" : 0x1002885,
-       "braille_dots_238" : 0x1002886,
-       "braille_dots_1238" : 0x1002887,
-       "braille_dots_48" : 0x1002888,
-       "braille_dots_148" : 0x1002889,
-       "braille_dots_248" : 0x100288a,
-       "braille_dots_1248" : 0x100288b,
-       "braille_dots_348" : 0x100288c,
-       "braille_dots_1348" : 0x100288d,
-       "braille_dots_2348" : 0x100288e,
-       "braille_dots_12348" : 0x100288f,
-       "braille_dots_58" : 0x1002890,
-       "braille_dots_158" : 0x1002891,
-       "braille_dots_258" : 0x1002892,
-       "braille_dots_1258" : 0x1002893,
-       "braille_dots_358" : 0x1002894,
-       "braille_dots_1358" : 0x1002895,
-       "braille_dots_2358" : 0x1002896,
-       "braille_dots_12358" : 0x1002897,
-       "braille_dots_458" : 0x1002898,
-       "braille_dots_1458" : 0x1002899,
-       "braille_dots_2458" : 0x100289a,
-       "braille_dots_12458" : 0x100289b,
-       "braille_dots_3458" : 0x100289c,
-       "braille_dots_13458" : 0x100289d,
-       "braille_dots_23458" : 0x100289e,
-       "braille_dots_123458" : 0x100289f,
-       "braille_dots_68" : 0x10028a0,
-       "braille_dots_168" : 0x10028a1,
-       "braille_dots_268" : 0x10028a2,
-       "braille_dots_1268" : 0x10028a3,
-       "braille_dots_368" : 0x10028a4,
-       "braille_dots_1368" : 0x10028a5,
-       "braille_dots_2368" : 0x10028a6,
-       "braille_dots_12368" : 0x10028a7,
-       "braille_dots_468" : 0x10028a8,
-       "braille_dots_1468" : 0x10028a9,
-       "braille_dots_2468" : 0x10028aa,
-       "braille_dots_12468" : 0x10028ab,
-       "braille_dots_3468" : 0x10028ac,
-       "braille_dots_13468" : 0x10028ad,
-       "braille_dots_23468" : 0x10028ae,
-       "braille_dots_123468" : 0x10028af,
-       "braille_dots_568" : 0x10028b0,
-       "braille_dots_1568" : 0x10028b1,
-       "braille_dots_2568" : 0x10028b2,
-       "braille_dots_12568" : 0x10028b3,
-       "braille_dots_3568" : 0x10028b4,
-       "braille_dots_13568" : 0x10028b5,
-       "braille_dots_23568" : 0x10028b6,
-       "braille_dots_123568" : 0x10028b7,
-       "braille_dots_4568" : 0x10028b8,
-       "braille_dots_14568" : 0x10028b9,
-       "braille_dots_24568" : 0x10028ba,
-       "braille_dots_124568" : 0x10028bb,
-       "braille_dots_34568" : 0x10028bc,
-       "braille_dots_134568" : 0x10028bd,
-       "braille_dots_234568" : 0x10028be,
-       "braille_dots_1234568" : 0x10028bf,
-       "braille_dots_78" : 0x10028c0,
-       "braille_dots_178" : 0x10028c1,
-       "braille_dots_278" : 0x10028c2,
-       "braille_dots_1278" : 0x10028c3,
-       "braille_dots_378" : 0x10028c4,
-       "braille_dots_1378" : 0x10028c5,
-       "braille_dots_2378" : 0x10028c6,
-       "braille_dots_12378" : 0x10028c7,
-       "braille_dots_478" : 0x10028c8,
-       "braille_dots_1478" : 0x10028c9,
-       "braille_dots_2478" : 0x10028ca,
-       "braille_dots_12478" : 0x10028cb,
-       "braille_dots_3478" : 0x10028cc,
-       "braille_dots_13478" : 0x10028cd,
-       "braille_dots_23478" : 0x10028ce,
-       "braille_dots_123478" : 0x10028cf,
-       "braille_dots_578" : 0x10028d0,
-       "braille_dots_1578" : 0x10028d1,
-       "braille_dots_2578" : 0x10028d2,
-       "braille_dots_12578" : 0x10028d3,
-       "braille_dots_3578" : 0x10028d4,
-       "braille_dots_13578" : 0x10028d5,
-       "braille_dots_23578" : 0x10028d6,
-       "braille_dots_123578" : 0x10028d7,
-       "braille_dots_4578" : 0x10028d8,
-       "braille_dots_14578" : 0x10028d9,
-       "braille_dots_24578" : 0x10028da,
-       "braille_dots_124578" : 0x10028db,
-       "braille_dots_34578" : 0x10028dc,
-       "braille_dots_134578" : 0x10028dd,
-       "braille_dots_234578" : 0x10028de,
-       "braille_dots_1234578" : 0x10028df,
-       "braille_dots_678" : 0x10028e0,
-       "braille_dots_1678" : 0x10028e1,
-       "braille_dots_2678" : 0x10028e2,
-       "braille_dots_12678" : 0x10028e3,
-       "braille_dots_3678" : 0x10028e4,
-       "braille_dots_13678" : 0x10028e5,
-       "braille_dots_23678" : 0x10028e6,
-       "braille_dots_123678" : 0x10028e7,
-       "braille_dots_4678" : 0x10028e8,
-       "braille_dots_14678" : 0x10028e9,
-       "braille_dots_24678" : 0x10028ea,
-       "braille_dots_124678" : 0x10028eb,
-       "braille_dots_34678" : 0x10028ec,
-       "braille_dots_134678" : 0x10028ed,
-       "braille_dots_234678" : 0x10028ee,
-       "braille_dots_1234678" : 0x10028ef,
-       "braille_dots_5678" : 0x10028f0,
-       "braille_dots_15678" : 0x10028f1,
-       "braille_dots_25678" : 0x10028f2,
-       "braille_dots_125678" : 0x10028f3,
-       "braille_dots_35678" : 0x10028f4,
-       "braille_dots_135678" : 0x10028f5,
-       "braille_dots_235678" : 0x10028f6,
-       "braille_dots_1235678" : 0x10028f7,
-       "braille_dots_45678" : 0x10028f8,
-       "braille_dots_145678" : 0x10028f9,
-       "braille_dots_245678" : 0x10028fa,
-       "braille_dots_1245678" : 0x10028fb,
-       "braille_dots_345678" : 0x10028fc,
-       "braille_dots_1345678" : 0x10028fd,
-       "braille_dots_2345678" : 0x10028fe,
-       "braille_dots_12345678" : 0x10028ff
+    "VoidSymbol" : 0xffffff,
+    "BackSpace" : 0xff08,
+    "Tab" : 0xff09,
+    "Linefeed" : 0xff0a,
+    "Clear" : 0xff0b,
+    "Return" : 0xff0d,
+    "Pause" : 0xff13,
+    "Scroll_Lock" : 0xff14,
+    "Sys_Req" : 0xff15,
+    "Escape" : 0xff1b,
+    "Delete" : 0xffff,
+    "Multi_key" : 0xff20,
+    "Codeinput" : 0xff37,
+    "SingleCandidate" : 0xff3c,
+    "MultipleCandidate" : 0xff3d,
+    "PreviousCandidate" : 0xff3e,
+    "Kanji" : 0xff21,
+    "Muhenkan" : 0xff22,
+    "Henkan_Mode" : 0xff23,
+    "Henkan" : 0xff23,
+    "Romaji" : 0xff24,
+    "Hiragana" : 0xff25,
+    "Katakana" : 0xff26,
+    "Hiragana_Katakana" : 0xff27,
+    "Zenkaku" : 0xff28,
+    "Hankaku" : 0xff29,
+    "Zenkaku_Hankaku" : 0xff2a,
+    "Touroku" : 0xff2b,
+    "Massyo" : 0xff2c,
+    "Kana_Lock" : 0xff2d,
+    "Kana_Shift" : 0xff2e,
+    "Eisu_Shift" : 0xff2f,
+    "Eisu_toggle" : 0xff30,
+    "Kanji_Bangou" : 0xff37,
+    "Zen_Koho" : 0xff3d,
+    "Mae_Koho" : 0xff3e,
+    "Home" : 0xff50,
+    "Left" : 0xff51,
+    "Up" : 0xff52,
+    "Right" : 0xff53,
+    "Down" : 0xff54,
+    "Prior" : 0xff55,
+    "Page_Up" : 0xff55,
+    "Next" : 0xff56,
+    "Page_Down" : 0xff56,
+    "End" : 0xff57,
+    "Begin" : 0xff58,
+    "Select" : 0xff60,
+    "Print" : 0xff61,
+    "Execute" : 0xff62,
+    "Insert" : 0xff63,
+    "Undo" : 0xff65,
+    "Redo" : 0xff66,
+    "Menu" : 0xff67,
+    "Find" : 0xff68,
+    "Cancel" : 0xff69,
+    "Help" : 0xff6a,
+    "Break" : 0xff6b,
+    "Mode_switch" : 0xff7e,
+    "script_switch" : 0xff7e,
+    "Num_Lock" : 0xff7f,
+    "KP_Space" : 0xff80,
+    "KP_Tab" : 0xff89,
+    "KP_Enter" : 0xff8d,
+    "KP_F1" : 0xff91,
+    "KP_F2" : 0xff92,
+    "KP_F3" : 0xff93,
+    "KP_F4" : 0xff94,
+    "KP_Home" : 0xff95,
+    "KP_Left" : 0xff96,
+    "KP_Up" : 0xff97,
+    "KP_Right" : 0xff98,
+    "KP_Down" : 0xff99,
+    "KP_Prior" : 0xff9a,
+    "KP_Page_Up" : 0xff9a,
+    "KP_Next" : 0xff9b,
+    "KP_Page_Down" : 0xff9b,
+    "KP_End" : 0xff9c,
+    "KP_Begin" : 0xff9d,
+    "KP_Insert" : 0xff9e,
+    "KP_Delete" : 0xff9f,
+    "KP_Equal" : 0xffbd,
+    "KP_Multiply" : 0xffaa,
+    "KP_Add" : 0xffab,
+    "KP_Separator" : 0xffac,
+    "KP_Subtract" : 0xffad,
+    "KP_Decimal" : 0xffae,
+    "KP_Divide" : 0xffaf,
+    "KP_0" : 0xffb0,
+    "KP_1" : 0xffb1,
+    "KP_2" : 0xffb2,
+    "KP_3" : 0xffb3,
+    "KP_4" : 0xffb4,
+    "KP_5" : 0xffb5,
+    "KP_6" : 0xffb6,
+    "KP_7" : 0xffb7,
+    "KP_8" : 0xffb8,
+    "KP_9" : 0xffb9,
+    "F1" : 0xffbe,
+    "F2" : 0xffbf,
+    "F3" : 0xffc0,
+    "F4" : 0xffc1,
+    "F5" : 0xffc2,
+    "F6" : 0xffc3,
+    "F7" : 0xffc4,
+    "F8" : 0xffc5,
+    "F9" : 0xffc6,
+    "F10" : 0xffc7,
+    "F11" : 0xffc8,
+    "L1" : 0xffc8,
+    "F12" : 0xffc9,
+    "L2" : 0xffc9,
+    "F13" : 0xffca,
+    "L3" : 0xffca,
+    "F14" : 0xffcb,
+    "L4" : 0xffcb,
+    "F15" : 0xffcc,
+    "L5" : 0xffcc,
+    "F16" : 0xffcd,
+    "L6" : 0xffcd,
+    "F17" : 0xffce,
+    "L7" : 0xffce,
+    "F18" : 0xffcf,
+    "L8" : 0xffcf,
+    "F19" : 0xffd0,
+    "L9" : 0xffd0,
+    "F20" : 0xffd1,
+    "L10" : 0xffd1,
+    "F21" : 0xffd2,
+    "R1" : 0xffd2,
+    "F22" : 0xffd3,
+    "R2" : 0xffd3,
+    "F23" : 0xffd4,
+    "R3" : 0xffd4,
+    "F24" : 0xffd5,
+    "R4" : 0xffd5,
+    "F25" : 0xffd6,
+    "R5" : 0xffd6,
+    "F26" : 0xffd7,
+    "R6" : 0xffd7,
+    "F27" : 0xffd8,
+    "R7" : 0xffd8,
+    "F28" : 0xffd9,
+    "R8" : 0xffd9,
+    "F29" : 0xffda,
+    "R9" : 0xffda,
+    "F30" : 0xffdb,
+    "R10" : 0xffdb,
+    "F31" : 0xffdc,
+    "R11" : 0xffdc,
+    "F32" : 0xffdd,
+    "R12" : 0xffdd,
+    "F33" : 0xffde,
+    "R13" : 0xffde,
+    "F34" : 0xffdf,
+    "R14" : 0xffdf,
+    "F35" : 0xffe0,
+    "R15" : 0xffe0,
+    "Shift_L" : 0xffe1,
+    "Shift_R" : 0xffe2,
+    "Control_L" : 0xffe3,
+    "Control_R" : 0xffe4,
+    "Caps_Lock" : 0xffe5,
+    "Shift_Lock" : 0xffe6,
+    "Meta_L" : 0xffe7,
+    "Meta_R" : 0xffe8,
+    "Alt_L" : 0xffe9,
+    "Alt_R" : 0xffea,
+    "Super_L" : 0xffeb,
+    "Super_R" : 0xffec,
+    "Hyper_L" : 0xffed,
+    "Hyper_R" : 0xffee,
+    "ISO_Lock" : 0xfe01,
+    "ISO_Level2_Latch" : 0xfe02,
+    "ISO_Level3_Shift" : 0xfe03,
+    "ISO_Level3_Latch" : 0xfe04,
+    "ISO_Level3_Lock" : 0xfe05,
+    "ISO_Level5_Shift" : 0xfe11,
+    "ISO_Level5_Latch" : 0xfe12,
+    "ISO_Level5_Lock" : 0xfe13,
+    "ISO_Group_Shift" : 0xff7e,
+    "ISO_Group_Latch" : 0xfe06,
+    "ISO_Group_Lock" : 0xfe07,
+    "ISO_Next_Group" : 0xfe08,
+    "ISO_Next_Group_Lock" : 0xfe09,
+    "ISO_Prev_Group" : 0xfe0a,
+    "ISO_Prev_Group_Lock" : 0xfe0b,
+    "ISO_First_Group" : 0xfe0c,
+    "ISO_First_Group_Lock" : 0xfe0d,
+    "ISO_Last_Group" : 0xfe0e,
+    "ISO_Last_Group_Lock" : 0xfe0f,
+    "ISO_Left_Tab" : 0xfe20,
+    "ISO_Move_Line_Up" : 0xfe21,
+    "ISO_Move_Line_Down" : 0xfe22,
+    "ISO_Partial_Line_Up" : 0xfe23,
+    "ISO_Partial_Line_Down" : 0xfe24,
+    "ISO_Partial_Space_Left" : 0xfe25,
+    "ISO_Partial_Space_Right" : 0xfe26,
+    "ISO_Set_Margin_Left" : 0xfe27,
+    "ISO_Set_Margin_Right" : 0xfe28,
+    "ISO_Release_Margin_Left" : 0xfe29,
+    "ISO_Release_Margin_Right" : 0xfe2a,
+    "ISO_Release_Both_Margins" : 0xfe2b,
+    "ISO_Fast_Cursor_Left" : 0xfe2c,
+    "ISO_Fast_Cursor_Right" : 0xfe2d,
+    "ISO_Fast_Cursor_Up" : 0xfe2e,
+    "ISO_Fast_Cursor_Down" : 0xfe2f,
+    "ISO_Continuous_Underline" : 0xfe30,
+    "ISO_Discontinuous_Underline" : 0xfe31,
+    "ISO_Emphasize" : 0xfe32,
+    "ISO_Center_Object" : 0xfe33,
+    "ISO_Enter" : 0xfe34,
+    "dead_grave" : 0xfe50,
+    "dead_acute" : 0xfe51,
+    "dead_circumflex" : 0xfe52,
+    "dead_tilde" : 0xfe53,
+    "dead_macron" : 0xfe54,
+    "dead_breve" : 0xfe55,
+    "dead_abovedot" : 0xfe56,
+    "dead_diaeresis" : 0xfe57,
+    "dead_abovering" : 0xfe58,
+    "dead_doubleacute" : 0xfe59,
+    "dead_caron" : 0xfe5a,
+    "dead_cedilla" : 0xfe5b,
+    "dead_ogonek" : 0xfe5c,
+    "dead_iota" : 0xfe5d,
+    "dead_voiced_sound" : 0xfe5e,
+    "dead_semivoiced_sound" : 0xfe5f,
+    "dead_belowdot" : 0xfe60,
+    "dead_hook" : 0xfe61,
+    "dead_horn" : 0xfe62,
+    "dead_stroke" : 0xfe63,
+    "dead_abovecomma" : 0xfe64,
+    "dead_psili" : 0xfe64,
+    "dead_abovereversedcomma" : 0xfe65,
+    "dead_dasia" : 0xfe66,
+    "First_Virtual_Screen" : 0xfed0,
+    "Prev_Virtual_Screen" : 0xfed1,
+    "Next_Virtual_Screen" : 0xfed2,
+    "Last_Virtual_Screen" : 0xfed4,
+    "Terminate_Server" : 0xfed5,
+    "AccessX_Enable" : 0xfe70,
+    "AccessX_Feedback_Enable" : 0xfe71,
+    "RepeatKeys_Enable" : 0xfe72,
+    "SlowKeys_Enable" : 0xfe73,
+    "BounceKeys_Enable" : 0xfe74,
+    "StickyKeys_Enable" : 0xfe75,
+    "MouseKeys_Enable" : 0xfe76,
+    "MouseKeys_Accel_Enable" : 0xfe77,
+    "Overlay1_Enable" : 0xfe78,
+    "Overlay2_Enable" : 0xfe79,
+    "AudibleBell_Enable" : 0xfe7a,
+    "Pointer_Left" : 0xfee0,
+    "Pointer_Right" : 0xfee1,
+    "Pointer_Up" : 0xfee2,
+    "Pointer_Down" : 0xfee3,
+    "Pointer_UpLeft" : 0xfee4,
+    "Pointer_UpRight" : 0xfee5,
+    "Pointer_DownLeft" : 0xfee6,
+    "Pointer_DownRight" : 0xfee7,
+    "Pointer_Button_Dflt" : 0xfee8,
+    "Pointer_Button1" : 0xfee9,
+    "Pointer_Button2" : 0xfeea,
+    "Pointer_Button3" : 0xfeeb,
+    "Pointer_Button4" : 0xfeec,
+    "Pointer_Button5" : 0xfeed,
+    "Pointer_DblClick_Dflt" : 0xfeee,
+    "Pointer_DblClick1" : 0xfeef,
+    "Pointer_DblClick2" : 0xfef0,
+    "Pointer_DblClick3" : 0xfef1,
+    "Pointer_DblClick4" : 0xfef2,
+    "Pointer_DblClick5" : 0xfef3,
+    "Pointer_Drag_Dflt" : 0xfef4,
+    "Pointer_Drag1" : 0xfef5,
+    "Pointer_Drag2" : 0xfef6,
+    "Pointer_Drag3" : 0xfef7,
+    "Pointer_Drag4" : 0xfef8,
+    "Pointer_Drag5" : 0xfefd,
+    "Pointer_EnableKeys" : 0xfef9,
+    "Pointer_Accelerate" : 0xfefa,
+    "Pointer_DfltBtnNext" : 0xfefb,
+    "Pointer_DfltBtnPrev" : 0xfefc,
+    "3270_Duplicate" : 0xfd01,
+    "3270_FieldMark" : 0xfd02,
+    "3270_Right2" : 0xfd03,
+    "3270_Left2" : 0xfd04,
+    "3270_BackTab" : 0xfd05,
+    "3270_EraseEOF" : 0xfd06,
+    "3270_EraseInput" : 0xfd07,
+    "3270_Reset" : 0xfd08,
+    "3270_Quit" : 0xfd09,
+    "3270_PA1" : 0xfd0a,
+    "3270_PA2" : 0xfd0b,
+    "3270_PA3" : 0xfd0c,
+    "3270_Test" : 0xfd0d,
+    "3270_Attn" : 0xfd0e,
+    "3270_CursorBlink" : 0xfd0f,
+    "3270_AltCursor" : 0xfd10,
+    "3270_KeyClick" : 0xfd11,
+    "3270_Jump" : 0xfd12,
+    "3270_Ident" : 0xfd13,
+    "3270_Rule" : 0xfd14,
+    "3270_Copy" : 0xfd15,
+    "3270_Play" : 0xfd16,
+    "3270_Setup" : 0xfd17,
+    "3270_Record" : 0xfd18,
+    "3270_ChangeScreen" : 0xfd19,
+    "3270_DeleteWord" : 0xfd1a,
+    "3270_ExSelect" : 0xfd1b,
+    "3270_CursorSelect" : 0xfd1c,
+    "3270_PrintScreen" : 0xfd1d,
+    "3270_Enter" : 0xfd1e,
+    "space" : 0x0020,
+    "exclam" : 0x0021,
+    "quotedbl" : 0x0022,
+    "numbersign" : 0x0023,
+    "dollar" : 0x0024,
+    "percent" : 0x0025,
+    "ampersand" : 0x0026,
+    "apostrophe" : 0x0027,
+    "quoteright" : 0x0027,
+    "parenleft" : 0x0028,
+    "parenright" : 0x0029,
+    "asterisk" : 0x002a,
+    "plus" : 0x002b,
+    "comma" : 0x002c,
+    "minus" : 0x002d,
+    "period" : 0x002e,
+    "slash" : 0x002f,
+    "0" : 0x0030,
+    "1" : 0x0031,
+    "2" : 0x0032,
+    "3" : 0x0033,
+    "4" : 0x0034,
+    "5" : 0x0035,
+    "6" : 0x0036,
+    "7" : 0x0037,
+    "8" : 0x0038,
+    "9" : 0x0039,
+    "colon" : 0x003a,
+    "semicolon" : 0x003b,
+    "less" : 0x003c,
+    "equal" : 0x003d,
+    "greater" : 0x003e,
+    "question" : 0x003f,
+    "at" : 0x0040,
+    "A" : 0x0041,
+    "B" : 0x0042,
+    "C" : 0x0043,
+    "D" : 0x0044,
+    "E" : 0x0045,
+    "F" : 0x0046,
+    "G" : 0x0047,
+    "H" : 0x0048,
+    "I" : 0x0049,
+    "J" : 0x004a,
+    "K" : 0x004b,
+    "L" : 0x004c,
+    "M" : 0x004d,
+    "N" : 0x004e,
+    "O" : 0x004f,
+    "P" : 0x0050,
+    "Q" : 0x0051,
+    "R" : 0x0052,
+    "S" : 0x0053,
+    "T" : 0x0054,
+    "U" : 0x0055,
+    "V" : 0x0056,
+    "W" : 0x0057,
+    "X" : 0x0058,
+    "Y" : 0x0059,
+    "Z" : 0x005a,
+    "bracketleft" : 0x005b,
+    "backslash" : 0x005c,
+    "bracketright" : 0x005d,
+    "asciicircum" : 0x005e,
+    "underscore" : 0x005f,
+    "grave" : 0x0060,
+    "quoteleft" : 0x0060,
+    "a" : 0x0061,
+    "b" : 0x0062,
+    "c" : 0x0063,
+    "d" : 0x0064,
+    "e" : 0x0065,
+    "f" : 0x0066,
+    "g" : 0x0067,
+    "h" : 0x0068,
+    "i" : 0x0069,
+    "j" : 0x006a,
+    "k" : 0x006b,
+    "l" : 0x006c,
+    "m" : 0x006d,
+    "n" : 0x006e,
+    "o" : 0x006f,
+    "p" : 0x0070,
+    "q" : 0x0071,
+    "r" : 0x0072,
+    "s" : 0x0073,
+    "t" : 0x0074,
+    "u" : 0x0075,
+    "v" : 0x0076,
+    "w" : 0x0077,
+    "x" : 0x0078,
+    "y" : 0x0079,
+    "z" : 0x007a,
+    "braceleft" : 0x007b,
+    "bar" : 0x007c,
+    "braceright" : 0x007d,
+    "asciitilde" : 0x007e,
+    "nobreakspace" : 0x00a0,
+    "exclamdown" : 0x00a1,
+    "cent" : 0x00a2,
+    "sterling" : 0x00a3,
+    "currency" : 0x00a4,
+    "yen" : 0x00a5,
+    "brokenbar" : 0x00a6,
+    "section" : 0x00a7,
+    "diaeresis" : 0x00a8,
+    "copyright" : 0x00a9,
+    "ordfeminine" : 0x00aa,
+    "guillemotleft" : 0x00ab,
+    "notsign" : 0x00ac,
+    "hyphen" : 0x00ad,
+    "registered" : 0x00ae,
+    "macron" : 0x00af,
+    "degree" : 0x00b0,
+    "plusminus" : 0x00b1,
+    "twosuperior" : 0x00b2,
+    "threesuperior" : 0x00b3,
+    "acute" : 0x00b4,
+    "mu" : 0x00b5,
+    "paragraph" : 0x00b6,
+    "periodcentered" : 0x00b7,
+    "cedilla" : 0x00b8,
+    "onesuperior" : 0x00b9,
+    "masculine" : 0x00ba,
+    "guillemotright" : 0x00bb,
+    "onequarter" : 0x00bc,
+    "onehalf" : 0x00bd,
+    "threequarters" : 0x00be,
+    "questiondown" : 0x00bf,
+    "Agrave" : 0x00c0,
+    "Aacute" : 0x00c1,
+    "Acircumflex" : 0x00c2,
+    "Atilde" : 0x00c3,
+    "Adiaeresis" : 0x00c4,
+    "Aring" : 0x00c5,
+    "AE" : 0x00c6,
+    "Ccedilla" : 0x00c7,
+    "Egrave" : 0x00c8,
+    "Eacute" : 0x00c9,
+    "Ecircumflex" : 0x00ca,
+    "Ediaeresis" : 0x00cb,
+    "Igrave" : 0x00cc,
+    "Iacute" : 0x00cd,
+    "Icircumflex" : 0x00ce,
+    "Idiaeresis" : 0x00cf,
+    "ETH" : 0x00d0,
+    "Eth" : 0x00d0,
+    "Ntilde" : 0x00d1,
+    "Ograve" : 0x00d2,
+    "Oacute" : 0x00d3,
+    "Ocircumflex" : 0x00d4,
+    "Otilde" : 0x00d5,
+    "Odiaeresis" : 0x00d6,
+    "multiply" : 0x00d7,
+    "Oslash" : 0x00d8,
+    "Ooblique" : 0x00d8,
+    "Ugrave" : 0x00d9,
+    "Uacute" : 0x00da,
+    "Ucircumflex" : 0x00db,
+    "Udiaeresis" : 0x00dc,
+    "Yacute" : 0x00dd,
+    "THORN" : 0x00de,
+    "Thorn" : 0x00de,
+    "ssharp" : 0x00df,
+    "agrave" : 0x00e0,
+    "aacute" : 0x00e1,
+    "acircumflex" : 0x00e2,
+    "atilde" : 0x00e3,
+    "adiaeresis" : 0x00e4,
+    "aring" : 0x00e5,
+    "ae" : 0x00e6,
+    "ccedilla" : 0x00e7,
+    "egrave" : 0x00e8,
+    "eacute" : 0x00e9,
+    "ecircumflex" : 0x00ea,
+    "ediaeresis" : 0x00eb,
+    "igrave" : 0x00ec,
+    "iacute" : 0x00ed,
+    "icircumflex" : 0x00ee,
+    "idiaeresis" : 0x00ef,
+    "eth" : 0x00f0,
+    "ntilde" : 0x00f1,
+    "ograve" : 0x00f2,
+    "oacute" : 0x00f3,
+    "ocircumflex" : 0x00f4,
+    "otilde" : 0x00f5,
+    "odiaeresis" : 0x00f6,
+    "division" : 0x00f7,
+    "oslash" : 0x00f8,
+    "ooblique" : 0x00f8,
+    "ugrave" : 0x00f9,
+    "uacute" : 0x00fa,
+    "ucircumflex" : 0x00fb,
+    "udiaeresis" : 0x00fc,
+    "yacute" : 0x00fd,
+    "thorn" : 0x00fe,
+    "ydiaeresis" : 0x00ff,
+    "Aogonek" : 0x01a1,
+    "breve" : 0x01a2,
+    "Lstroke" : 0x01a3,
+    "Lcaron" : 0x01a5,
+    "Sacute" : 0x01a6,
+    "Scaron" : 0x01a9,
+    "Scedilla" : 0x01aa,
+    "Tcaron" : 0x01ab,
+    "Zacute" : 0x01ac,
+    "Zcaron" : 0x01ae,
+    "Zabovedot" : 0x01af,
+    "aogonek" : 0x01b1,
+    "ogonek" : 0x01b2,
+    "lstroke" : 0x01b3,
+    "lcaron" : 0x01b5,
+    "sacute" : 0x01b6,
+    "caron" : 0x01b7,
+    "scaron" : 0x01b9,
+    "scedilla" : 0x01ba,
+    "tcaron" : 0x01bb,
+    "zacute" : 0x01bc,
+    "doubleacute" : 0x01bd,
+    "zcaron" : 0x01be,
+    "zabovedot" : 0x01bf,
+    "Racute" : 0x01c0,
+    "Abreve" : 0x01c3,
+    "Lacute" : 0x01c5,
+    "Cacute" : 0x01c6,
+    "Ccaron" : 0x01c8,
+    "Eogonek" : 0x01ca,
+    "Ecaron" : 0x01cc,
+    "Dcaron" : 0x01cf,
+    "Dstroke" : 0x01d0,
+    "Nacute" : 0x01d1,
+    "Ncaron" : 0x01d2,
+    "Odoubleacute" : 0x01d5,
+    "Rcaron" : 0x01d8,
+    "Uring" : 0x01d9,
+    "Udoubleacute" : 0x01db,
+    "Tcedilla" : 0x01de,
+    "racute" : 0x01e0,
+    "abreve" : 0x01e3,
+    "lacute" : 0x01e5,
+    "cacute" : 0x01e6,
+    "ccaron" : 0x01e8,
+    "eogonek" : 0x01ea,
+    "ecaron" : 0x01ec,
+    "dcaron" : 0x01ef,
+    "dstroke" : 0x01f0,
+    "nacute" : 0x01f1,
+    "ncaron" : 0x01f2,
+    "odoubleacute" : 0x01f5,
+    "udoubleacute" : 0x01fb,
+    "rcaron" : 0x01f8,
+    "uring" : 0x01f9,
+    "tcedilla" : 0x01fe,
+    "abovedot" : 0x01ff,
+    "Hstroke" : 0x02a1,
+    "Hcircumflex" : 0x02a6,
+    "Iabovedot" : 0x02a9,
+    "Gbreve" : 0x02ab,
+    "Jcircumflex" : 0x02ac,
+    "hstroke" : 0x02b1,
+    "hcircumflex" : 0x02b6,
+    "idotless" : 0x02b9,
+    "gbreve" : 0x02bb,
+    "jcircumflex" : 0x02bc,
+    "Cabovedot" : 0x02c5,
+    "Ccircumflex" : 0x02c6,
+    "Gabovedot" : 0x02d5,
+    "Gcircumflex" : 0x02d8,
+    "Ubreve" : 0x02dd,
+    "Scircumflex" : 0x02de,
+    "cabovedot" : 0x02e5,
+    "ccircumflex" : 0x02e6,
+    "gabovedot" : 0x02f5,
+    "gcircumflex" : 0x02f8,
+    "ubreve" : 0x02fd,
+    "scircumflex" : 0x02fe,
+    "kra" : 0x03a2,
+    "kappa" : 0x03a2,
+    "Rcedilla" : 0x03a3,
+    "Itilde" : 0x03a5,
+    "Lcedilla" : 0x03a6,
+    "Emacron" : 0x03aa,
+    "Gcedilla" : 0x03ab,
+    "Tslash" : 0x03ac,
+    "rcedilla" : 0x03b3,
+    "itilde" : 0x03b5,
+    "lcedilla" : 0x03b6,
+    "emacron" : 0x03ba,
+    "gcedilla" : 0x03bb,
+    "tslash" : 0x03bc,
+    "ENG" : 0x03bd,
+    "eng" : 0x03bf,
+    "Amacron" : 0x03c0,
+    "Iogonek" : 0x03c7,
+    "Eabovedot" : 0x03cc,
+    "Imacron" : 0x03cf,
+    "Ncedilla" : 0x03d1,
+    "Omacron" : 0x03d2,
+    "Kcedilla" : 0x03d3,
+    "Uogonek" : 0x03d9,
+    "Utilde" : 0x03dd,
+    "Umacron" : 0x03de,
+    "amacron" : 0x03e0,
+    "iogonek" : 0x03e7,
+    "eabovedot" : 0x03ec,
+    "imacron" : 0x03ef,
+    "ncedilla" : 0x03f1,
+    "omacron" : 0x03f2,
+    "kcedilla" : 0x03f3,
+    "uogonek" : 0x03f9,
+    "utilde" : 0x03fd,
+    "umacron" : 0x03fe,
+    "Babovedot" : 0x1001e02,
+    "babovedot" : 0x1001e03,
+    "Dabovedot" : 0x1001e0a,
+    "Wgrave" : 0x1001e80,
+    "Wacute" : 0x1001e82,
+    "dabovedot" : 0x1001e0b,
+    "Ygrave" : 0x1001ef2,
+    "Fabovedot" : 0x1001e1e,
+    "fabovedot" : 0x1001e1f,
+    "Mabovedot" : 0x1001e40,
+    "mabovedot" : 0x1001e41,
+    "Pabovedot" : 0x1001e56,
+    "wgrave" : 0x1001e81,
+    "pabovedot" : 0x1001e57,
+    "wacute" : 0x1001e83,
+    "Sabovedot" : 0x1001e60,
+    "ygrave" : 0x1001ef3,
+    "Wdiaeresis" : 0x1001e84,
+    "wdiaeresis" : 0x1001e85,
+    "sabovedot" : 0x1001e61,
+    "Wcircumflex" : 0x1000174,
+    "Tabovedot" : 0x1001e6a,
+    "Ycircumflex" : 0x1000176,
+    "wcircumflex" : 0x1000175,
+    "tabovedot" : 0x1001e6b,
+    "ycircumflex" : 0x1000177,
+    "OE" : 0x13bc,
+    "oe" : 0x13bd,
+    "Ydiaeresis" : 0x13be,
+    "overline" : 0x047e,
+    "kana_fullstop" : 0x04a1,
+    "kana_openingbracket" : 0x04a2,
+    "kana_closingbracket" : 0x04a3,
+    "kana_comma" : 0x04a4,
+    "kana_conjunctive" : 0x04a5,
+    "kana_middledot" : 0x04a5,
+    "kana_WO" : 0x04a6,
+    "kana_a" : 0x04a7,
+    "kana_i" : 0x04a8,
+    "kana_u" : 0x04a9,
+    "kana_e" : 0x04aa,
+    "kana_o" : 0x04ab,
+    "kana_ya" : 0x04ac,
+    "kana_yu" : 0x04ad,
+    "kana_yo" : 0x04ae,
+    "kana_tsu" : 0x04af,
+    "kana_tu" : 0x04af,
+    "prolongedsound" : 0x04b0,
+    "kana_A" : 0x04b1,
+    "kana_I" : 0x04b2,
+    "kana_U" : 0x04b3,
+    "kana_E" : 0x04b4,
+    "kana_O" : 0x04b5,
+    "kana_KA" : 0x04b6,
+    "kana_KI" : 0x04b7,
+    "kana_KU" : 0x04b8,
+    "kana_KE" : 0x04b9,
+    "kana_KO" : 0x04ba,
+    "kana_SA" : 0x04bb,
+    "kana_SHI" : 0x04bc,
+    "kana_SU" : 0x04bd,
+    "kana_SE" : 0x04be,
+    "kana_SO" : 0x04bf,
+    "kana_TA" : 0x04c0,
+    "kana_CHI" : 0x04c1,
+    "kana_TI" : 0x04c1,
+    "kana_TSU" : 0x04c2,
+    "kana_TU" : 0x04c2,
+    "kana_TE" : 0x04c3,
+    "kana_TO" : 0x04c4,
+    "kana_NA" : 0x04c5,
+    "kana_NI" : 0x04c6,
+    "kana_NU" : 0x04c7,
+    "kana_NE" : 0x04c8,
+    "kana_NO" : 0x04c9,
+    "kana_HA" : 0x04ca,
+    "kana_HI" : 0x04cb,
+    "kana_FU" : 0x04cc,
+    "kana_HU" : 0x04cc,
+    "kana_HE" : 0x04cd,
+    "kana_HO" : 0x04ce,
+    "kana_MA" : 0x04cf,
+    "kana_MI" : 0x04d0,
+    "kana_MU" : 0x04d1,
+    "kana_ME" : 0x04d2,
+    "kana_MO" : 0x04d3,
+    "kana_YA" : 0x04d4,
+    "kana_YU" : 0x04d5,
+    "kana_YO" : 0x04d6,
+    "kana_RA" : 0x04d7,
+    "kana_RI" : 0x04d8,
+    "kana_RU" : 0x04d9,
+    "kana_RE" : 0x04da,
+    "kana_RO" : 0x04db,
+    "kana_WA" : 0x04dc,
+    "kana_N" : 0x04dd,
+    "voicedsound" : 0x04de,
+    "semivoicedsound" : 0x04df,
+    "kana_switch" : 0xff7e,
+    "Farsi_0" : 0x10006f0,
+    "Farsi_1" : 0x10006f1,
+    "Farsi_2" : 0x10006f2,
+    "Farsi_3" : 0x10006f3,
+    "Farsi_4" : 0x10006f4,
+    "Farsi_5" : 0x10006f5,
+    "Farsi_6" : 0x10006f6,
+    "Farsi_7" : 0x10006f7,
+    "Farsi_8" : 0x10006f8,
+    "Farsi_9" : 0x10006f9,
+    "Arabic_percent" : 0x100066a,
+    "Arabic_superscript_alef" : 0x1000670,
+    "Arabic_tteh" : 0x1000679,
+    "Arabic_peh" : 0x100067e,
+    "Arabic_tcheh" : 0x1000686,
+    "Arabic_ddal" : 0x1000688,
+    "Arabic_rreh" : 0x1000691,
+    "Arabic_comma" : 0x05ac,
+    "Arabic_fullstop" : 0x10006d4,
+    "Arabic_0" : 0x1000660,
+    "Arabic_1" : 0x1000661,
+    "Arabic_2" : 0x1000662,
+    "Arabic_3" : 0x1000663,
+    "Arabic_4" : 0x1000664,
+    "Arabic_5" : 0x1000665,
+    "Arabic_6" : 0x1000666,
+    "Arabic_7" : 0x1000667,
+    "Arabic_8" : 0x1000668,
+    "Arabic_9" : 0x1000669,
+    "Arabic_semicolon" : 0x05bb,
+    "Arabic_question_mark" : 0x05bf,
+    "Arabic_hamza" : 0x05c1,
+    "Arabic_maddaonalef" : 0x05c2,
+    "Arabic_hamzaonalef" : 0x05c3,
+    "Arabic_hamzaonwaw" : 0x05c4,
+    "Arabic_hamzaunderalef" : 0x05c5,
+    "Arabic_hamzaonyeh" : 0x05c6,
+    "Arabic_alef" : 0x05c7,
+    "Arabic_beh" : 0x05c8,
+    "Arabic_tehmarbuta" : 0x05c9,
+    "Arabic_teh" : 0x05ca,
+    "Arabic_theh" : 0x05cb,
+    "Arabic_jeem" : 0x05cc,
+    "Arabic_hah" : 0x05cd,
+    "Arabic_khah" : 0x05ce,
+    "Arabic_dal" : 0x05cf,
+    "Arabic_thal" : 0x05d0,
+    "Arabic_ra" : 0x05d1,
+    "Arabic_zain" : 0x05d2,
+    "Arabic_seen" : 0x05d3,
+    "Arabic_sheen" : 0x05d4,
+    "Arabic_sad" : 0x05d5,
+    "Arabic_dad" : 0x05d6,
+    "Arabic_tah" : 0x05d7,
+    "Arabic_zah" : 0x05d8,
+    "Arabic_ain" : 0x05d9,
+    "Arabic_ghain" : 0x05da,
+    "Arabic_tatweel" : 0x05e0,
+    "Arabic_feh" : 0x05e1,
+    "Arabic_qaf" : 0x05e2,
+    "Arabic_kaf" : 0x05e3,
+    "Arabic_lam" : 0x05e4,
+    "Arabic_meem" : 0x05e5,
+    "Arabic_noon" : 0x05e6,
+    "Arabic_ha" : 0x05e7,
+    "Arabic_heh" : 0x05e7,
+    "Arabic_waw" : 0x05e8,
+    "Arabic_alefmaksura" : 0x05e9,
+    "Arabic_yeh" : 0x05ea,
+    "Arabic_fathatan" : 0x05eb,
+    "Arabic_dammatan" : 0x05ec,
+    "Arabic_kasratan" : 0x05ed,
+    "Arabic_fatha" : 0x05ee,
+    "Arabic_damma" : 0x05ef,
+    "Arabic_kasra" : 0x05f0,
+    "Arabic_shadda" : 0x05f1,
+    "Arabic_sukun" : 0x05f2,
+    "Arabic_madda_above" : 0x1000653,
+    "Arabic_hamza_above" : 0x1000654,
+    "Arabic_hamza_below" : 0x1000655,
+    "Arabic_jeh" : 0x1000698,
+    "Arabic_veh" : 0x10006a4,
+    "Arabic_keheh" : 0x10006a9,
+    "Arabic_gaf" : 0x10006af,
+    "Arabic_noon_ghunna" : 0x10006ba,
+    "Arabic_heh_doachashmee" : 0x10006be,
+    "Farsi_yeh" : 0x10006cc,
+    "Arabic_farsi_yeh" : 0x10006cc,
+    "Arabic_yeh_baree" : 0x10006d2,
+    "Arabic_heh_goal" : 0x10006c1,
+    "Arabic_switch" : 0xff7e,
+    "Cyrillic_GHE_bar" : 0x1000492,
+    "Cyrillic_ghe_bar" : 0x1000493,
+    "Cyrillic_ZHE_descender" : 0x1000496,
+    "Cyrillic_zhe_descender" : 0x1000497,
+    "Cyrillic_KA_descender" : 0x100049a,
+    "Cyrillic_ka_descender" : 0x100049b,
+    "Cyrillic_KA_vertstroke" : 0x100049c,
+    "Cyrillic_ka_vertstroke" : 0x100049d,
+    "Cyrillic_EN_descender" : 0x10004a2,
+    "Cyrillic_en_descender" : 0x10004a3,
+    "Cyrillic_U_straight" : 0x10004ae,
+    "Cyrillic_u_straight" : 0x10004af,
+    "Cyrillic_U_straight_bar" : 0x10004b0,
+    "Cyrillic_u_straight_bar" : 0x10004b1,
+    "Cyrillic_HA_descender" : 0x10004b2,
+    "Cyrillic_ha_descender" : 0x10004b3,
+    "Cyrillic_CHE_descender" : 0x10004b6,
+    "Cyrillic_che_descender" : 0x10004b7,
+    "Cyrillic_CHE_vertstroke" : 0x10004b8,
+    "Cyrillic_che_vertstroke" : 0x10004b9,
+    "Cyrillic_SHHA" : 0x10004ba,
+    "Cyrillic_shha" : 0x10004bb,
+    "Cyrillic_SCHWA" : 0x10004d8,
+    "Cyrillic_schwa" : 0x10004d9,
+    "Cyrillic_I_macron" : 0x10004e2,
+    "Cyrillic_i_macron" : 0x10004e3,
+    "Cyrillic_O_bar" : 0x10004e8,
+    "Cyrillic_o_bar" : 0x10004e9,
+    "Cyrillic_U_macron" : 0x10004ee,
+    "Cyrillic_u_macron" : 0x10004ef,
+    "Serbian_dje" : 0x06a1,
+    "Macedonia_gje" : 0x06a2,
+    "Cyrillic_io" : 0x06a3,
+    "Ukrainian_ie" : 0x06a4,
+    "Ukranian_je" : 0x06a4,
+    "Macedonia_dse" : 0x06a5,
+    "Ukrainian_i" : 0x06a6,
+    "Ukranian_i" : 0x06a6,
+    "Ukrainian_yi" : 0x06a7,
+    "Ukranian_yi" : 0x06a7,
+    "Cyrillic_je" : 0x06a8,
+    "Serbian_je" : 0x06a8,
+    "Cyrillic_lje" : 0x06a9,
+    "Serbian_lje" : 0x06a9,
+    "Cyrillic_nje" : 0x06aa,
+    "Serbian_nje" : 0x06aa,
+    "Serbian_tshe" : 0x06ab,
+    "Macedonia_kje" : 0x06ac,
+    "Ukrainian_ghe_with_upturn" : 0x06ad,
+    "Byelorussian_shortu" : 0x06ae,
+    "Cyrillic_dzhe" : 0x06af,
+    "Serbian_dze" : 0x06af,
+    "numerosign" : 0x06b0,
+    "Serbian_DJE" : 0x06b1,
+    "Macedonia_GJE" : 0x06b2,
+    "Cyrillic_IO" : 0x06b3,
+    "Ukrainian_IE" : 0x06b4,
+    "Ukranian_JE" : 0x06b4,
+    "Macedonia_DSE" : 0x06b5,
+    "Ukrainian_I" : 0x06b6,
+    "Ukranian_I" : 0x06b6,
+    "Ukrainian_YI" : 0x06b7,
+    "Ukranian_YI" : 0x06b7,
+    "Cyrillic_JE" : 0x06b8,
+    "Serbian_JE" : 0x06b8,
+    "Cyrillic_LJE" : 0x06b9,
+    "Serbian_LJE" : 0x06b9,
+    "Cyrillic_NJE" : 0x06ba,
+    "Serbian_NJE" : 0x06ba,
+    "Serbian_TSHE" : 0x06bb,
+    "Macedonia_KJE" : 0x06bc,
+    "Ukrainian_GHE_WITH_UPTURN" : 0x06bd,
+    "Byelorussian_SHORTU" : 0x06be,
+    "Cyrillic_DZHE" : 0x06bf,
+    "Serbian_DZE" : 0x06bf,
+    "Cyrillic_yu" : 0x06c0,
+    "Cyrillic_a" : 0x06c1,
+    "Cyrillic_be" : 0x06c2,
+    "Cyrillic_tse" : 0x06c3,
+    "Cyrillic_de" : 0x06c4,
+    "Cyrillic_ie" : 0x06c5,
+    "Cyrillic_ef" : 0x06c6,
+    "Cyrillic_ghe" : 0x06c7,
+    "Cyrillic_ha" : 0x06c8,
+    "Cyrillic_i" : 0x06c9,
+    "Cyrillic_shorti" : 0x06ca,
+    "Cyrillic_ka" : 0x06cb,
+    "Cyrillic_el" : 0x06cc,
+    "Cyrillic_em" : 0x06cd,
+    "Cyrillic_en" : 0x06ce,
+    "Cyrillic_o" : 0x06cf,
+    "Cyrillic_pe" : 0x06d0,
+    "Cyrillic_ya" : 0x06d1,
+    "Cyrillic_er" : 0x06d2,
+    "Cyrillic_es" : 0x06d3,
+    "Cyrillic_te" : 0x06d4,
+    "Cyrillic_u" : 0x06d5,
+    "Cyrillic_zhe" : 0x06d6,
+    "Cyrillic_ve" : 0x06d7,
+    "Cyrillic_softsign" : 0x06d8,
+    "Cyrillic_yeru" : 0x06d9,
+    "Cyrillic_ze" : 0x06da,
+    "Cyrillic_sha" : 0x06db,
+    "Cyrillic_e" : 0x06dc,
+    "Cyrillic_shcha" : 0x06dd,
+    "Cyrillic_che" : 0x06de,
+    "Cyrillic_hardsign" : 0x06df,
+    "Cyrillic_YU" : 0x06e0,
+    "Cyrillic_A" : 0x06e1,
+    "Cyrillic_BE" : 0x06e2,
+    "Cyrillic_TSE" : 0x06e3,
+    "Cyrillic_DE" : 0x06e4,
+    "Cyrillic_IE" : 0x06e5,
+    "Cyrillic_EF" : 0x06e6,
+    "Cyrillic_GHE" : 0x06e7,
+    "Cyrillic_HA" : 0x06e8,
+    "Cyrillic_I" : 0x06e9,
+    "Cyrillic_SHORTI" : 0x06ea,
+    "Cyrillic_KA" : 0x06eb,
+    "Cyrillic_EL" : 0x06ec,
+    "Cyrillic_EM" : 0x06ed,
+    "Cyrillic_EN" : 0x06ee,
+    "Cyrillic_O" : 0x06ef,
+    "Cyrillic_PE" : 0x06f0,
+    "Cyrillic_YA" : 0x06f1,
+    "Cyrillic_ER" : 0x06f2,
+    "Cyrillic_ES" : 0x06f3,
+    "Cyrillic_TE" : 0x06f4,
+    "Cyrillic_U" : 0x06f5,
+    "Cyrillic_ZHE" : 0x06f6,
+    "Cyrillic_VE" : 0x06f7,
+    "Cyrillic_SOFTSIGN" : 0x06f8,
+    "Cyrillic_YERU" : 0x06f9,
+    "Cyrillic_ZE" : 0x06fa,
+    "Cyrillic_SHA" : 0x06fb,
+    "Cyrillic_E" : 0x06fc,
+    "Cyrillic_SHCHA" : 0x06fd,
+    "Cyrillic_CHE" : 0x06fe,
+    "Cyrillic_HARDSIGN" : 0x06ff,
+    "Greek_ALPHAaccent" : 0x07a1,
+    "Greek_EPSILONaccent" : 0x07a2,
+    "Greek_ETAaccent" : 0x07a3,
+    "Greek_IOTAaccent" : 0x07a4,
+    "Greek_IOTAdieresis" : 0x07a5,
+    "Greek_IOTAdiaeresis" : 0x07a5,
+    "Greek_OMICRONaccent" : 0x07a7,
+    "Greek_UPSILONaccent" : 0x07a8,
+    "Greek_UPSILONdieresis" : 0x07a9,
+    "Greek_OMEGAaccent" : 0x07ab,
+    "Greek_accentdieresis" : 0x07ae,
+    "Greek_horizbar" : 0x07af,
+    "Greek_alphaaccent" : 0x07b1,
+    "Greek_epsilonaccent" : 0x07b2,
+    "Greek_etaaccent" : 0x07b3,
+    "Greek_iotaaccent" : 0x07b4,
+    "Greek_iotadieresis" : 0x07b5,
+    "Greek_iotaaccentdieresis" : 0x07b6,
+    "Greek_omicronaccent" : 0x07b7,
+    "Greek_upsilonaccent" : 0x07b8,
+    "Greek_upsilondieresis" : 0x07b9,
+    "Greek_upsilonaccentdieresis" : 0x07ba,
+    "Greek_omegaaccent" : 0x07bb,
+    "Greek_ALPHA" : 0x07c1,
+    "Greek_BETA" : 0x07c2,
+    "Greek_GAMMA" : 0x07c3,
+    "Greek_DELTA" : 0x07c4,
+    "Greek_EPSILON" : 0x07c5,
+    "Greek_ZETA" : 0x07c6,
+    "Greek_ETA" : 0x07c7,
+    "Greek_THETA" : 0x07c8,
+    "Greek_IOTA" : 0x07c9,
+    "Greek_KAPPA" : 0x07ca,
+    "Greek_LAMDA" : 0x07cb,
+    "Greek_LAMBDA" : 0x07cb,
+    "Greek_MU" : 0x07cc,
+    "Greek_NU" : 0x07cd,
+    "Greek_XI" : 0x07ce,
+    "Greek_OMICRON" : 0x07cf,
+    "Greek_PI" : 0x07d0,
+    "Greek_RHO" : 0x07d1,
+    "Greek_SIGMA" : 0x07d2,
+    "Greek_TAU" : 0x07d4,
+    "Greek_UPSILON" : 0x07d5,
+    "Greek_PHI" : 0x07d6,
+    "Greek_CHI" : 0x07d7,
+    "Greek_PSI" : 0x07d8,
+    "Greek_OMEGA" : 0x07d9,
+    "Greek_alpha" : 0x07e1,
+    "Greek_beta" : 0x07e2,
+    "Greek_gamma" : 0x07e3,
+    "Greek_delta" : 0x07e4,
+    "Greek_epsilon" : 0x07e5,
+    "Greek_zeta" : 0x07e6,
+    "Greek_eta" : 0x07e7,
+    "Greek_theta" : 0x07e8,
+    "Greek_iota" : 0x07e9,
+    "Greek_kappa" : 0x07ea,
+    "Greek_lamda" : 0x07eb,
+    "Greek_lambda" : 0x07eb,
+    "Greek_mu" : 0x07ec,
+    "Greek_nu" : 0x07ed,
+    "Greek_xi" : 0x07ee,
+    "Greek_omicron" : 0x07ef,
+    "Greek_pi" : 0x07f0,
+    "Greek_rho" : 0x07f1,
+    "Greek_sigma" : 0x07f2,
+    "Greek_finalsmallsigma" : 0x07f3,
+    "Greek_tau" : 0x07f4,
+    "Greek_upsilon" : 0x07f5,
+    "Greek_phi" : 0x07f6,
+    "Greek_chi" : 0x07f7,
+    "Greek_psi" : 0x07f8,
+    "Greek_omega" : 0x07f9,
+    "Greek_switch" : 0xff7e,
+    "leftradical" : 0x08a1,
+    "topleftradical" : 0x08a2,
+    "horizconnector" : 0x08a3,
+    "topintegral" : 0x08a4,
+    "botintegral" : 0x08a5,
+    "vertconnector" : 0x08a6,
+    "topleftsqbracket" : 0x08a7,
+    "botleftsqbracket" : 0x08a8,
+    "toprightsqbracket" : 0x08a9,
+    "botrightsqbracket" : 0x08aa,
+    "topleftparens" : 0x08ab,
+    "botleftparens" : 0x08ac,
+    "toprightparens" : 0x08ad,
+    "botrightparens" : 0x08ae,
+    "leftmiddlecurlybrace" : 0x08af,
+    "rightmiddlecurlybrace" : 0x08b0,
+    "topleftsummation" : 0x08b1,
+    "botleftsummation" : 0x08b2,
+    "topvertsummationconnector" : 0x08b3,
+    "botvertsummationconnector" : 0x08b4,
+    "toprightsummation" : 0x08b5,
+    "botrightsummation" : 0x08b6,
+    "rightmiddlesummation" : 0x08b7,
+    "lessthanequal" : 0x08bc,
+    "notequal" : 0x08bd,
+    "greaterthanequal" : 0x08be,
+    "integral" : 0x08bf,
+    "therefore" : 0x08c0,
+    "variation" : 0x08c1,
+    "infinity" : 0x08c2,
+    "nabla" : 0x08c5,
+    "approximate" : 0x08c8,
+    "similarequal" : 0x08c9,
+    "ifonlyif" : 0x08cd,
+    "implies" : 0x08ce,
+    "identical" : 0x08cf,
+    "radical" : 0x08d6,
+    "includedin" : 0x08da,
+    "includes" : 0x08db,
+    "intersection" : 0x08dc,
+    "union" : 0x08dd,
+    "logicaland" : 0x08de,
+    "logicalor" : 0x08df,
+    "partialderivative" : 0x08ef,
+    "function" : 0x08f6,
+    "leftarrow" : 0x08fb,
+    "uparrow" : 0x08fc,
+    "rightarrow" : 0x08fd,
+    "downarrow" : 0x08fe,
+    "blank" : 0x09df,
+    "soliddiamond" : 0x09e0,
+    "checkerboard" : 0x09e1,
+    "ht" : 0x09e2,
+    "ff" : 0x09e3,
+    "cr" : 0x09e4,
+    "lf" : 0x09e5,
+    "nl" : 0x09e8,
+    "vt" : 0x09e9,
+    "lowrightcorner" : 0x09ea,
+    "uprightcorner" : 0x09eb,
+    "upleftcorner" : 0x09ec,
+    "lowleftcorner" : 0x09ed,
+    "crossinglines" : 0x09ee,
+    "horizlinescan1" : 0x09ef,
+    "horizlinescan3" : 0x09f0,
+    "horizlinescan5" : 0x09f1,
+    "horizlinescan7" : 0x09f2,
+    "horizlinescan9" : 0x09f3,
+    "leftt" : 0x09f4,
+    "rightt" : 0x09f5,
+    "bott" : 0x09f6,
+    "topt" : 0x09f7,
+    "vertbar" : 0x09f8,
+    "emspace" : 0x0aa1,
+    "enspace" : 0x0aa2,
+    "em3space" : 0x0aa3,
+    "em4space" : 0x0aa4,
+    "digitspace" : 0x0aa5,
+    "punctspace" : 0x0aa6,
+    "thinspace" : 0x0aa7,
+    "hairspace" : 0x0aa8,
+    "emdash" : 0x0aa9,
+    "endash" : 0x0aaa,
+    "signifblank" : 0x0aac,
+    "ellipsis" : 0x0aae,
+    "doubbaselinedot" : 0x0aaf,
+    "onethird" : 0x0ab0,
+    "twothirds" : 0x0ab1,
+    "onefifth" : 0x0ab2,
+    "twofifths" : 0x0ab3,
+    "threefifths" : 0x0ab4,
+    "fourfifths" : 0x0ab5,
+    "onesixth" : 0x0ab6,
+    "fivesixths" : 0x0ab7,
+    "careof" : 0x0ab8,
+    "figdash" : 0x0abb,
+    "leftanglebracket" : 0x0abc,
+    "decimalpoint" : 0x0abd,
+    "rightanglebracket" : 0x0abe,
+    "marker" : 0x0abf,
+    "oneeighth" : 0x0ac3,
+    "threeeighths" : 0x0ac4,
+    "fiveeighths" : 0x0ac5,
+    "seveneighths" : 0x0ac6,
+    "trademark" : 0x0ac9,
+    "signaturemark" : 0x0aca,
+    "trademarkincircle" : 0x0acb,
+    "leftopentriangle" : 0x0acc,
+    "rightopentriangle" : 0x0acd,
+    "emopencircle" : 0x0ace,
+    "emopenrectangle" : 0x0acf,
+    "leftsinglequotemark" : 0x0ad0,
+    "rightsinglequotemark" : 0x0ad1,
+    "leftdoublequotemark" : 0x0ad2,
+    "rightdoublequotemark" : 0x0ad3,
+    "prescription" : 0x0ad4,
+    "minutes" : 0x0ad6,
+    "seconds" : 0x0ad7,
+    "latincross" : 0x0ad9,
+    "hexagram" : 0x0ada,
+    "filledrectbullet" : 0x0adb,
+    "filledlefttribullet" : 0x0adc,
+    "filledrighttribullet" : 0x0add,
+    "emfilledcircle" : 0x0ade,
+    "emfilledrect" : 0x0adf,
+    "enopencircbullet" : 0x0ae0,
+    "enopensquarebullet" : 0x0ae1,
+    "openrectbullet" : 0x0ae2,
+    "opentribulletup" : 0x0ae3,
+    "opentribulletdown" : 0x0ae4,
+    "openstar" : 0x0ae5,
+    "enfilledcircbullet" : 0x0ae6,
+    "enfilledsqbullet" : 0x0ae7,
+    "filledtribulletup" : 0x0ae8,
+    "filledtribulletdown" : 0x0ae9,
+    "leftpointer" : 0x0aea,
+    "rightpointer" : 0x0aeb,
+    "club" : 0x0aec,
+    "diamond" : 0x0aed,
+    "heart" : 0x0aee,
+    "maltesecross" : 0x0af0,
+    "dagger" : 0x0af1,
+    "doubledagger" : 0x0af2,
+    "checkmark" : 0x0af3,
+    "ballotcross" : 0x0af4,
+    "musicalsharp" : 0x0af5,
+    "musicalflat" : 0x0af6,
+    "malesymbol" : 0x0af7,
+    "femalesymbol" : 0x0af8,
+    "telephone" : 0x0af9,
+    "telephonerecorder" : 0x0afa,
+    "phonographcopyright" : 0x0afb,
+    "caret" : 0x0afc,
+    "singlelowquotemark" : 0x0afd,
+    "doublelowquotemark" : 0x0afe,
+    "cursor" : 0x0aff,
+    "leftcaret" : 0x0ba3,
+    "rightcaret" : 0x0ba6,
+    "downcaret" : 0x0ba8,
+    "upcaret" : 0x0ba9,
+    "overbar" : 0x0bc0,
+    "downtack" : 0x0bc2,
+    "upshoe" : 0x0bc3,
+    "downstile" : 0x0bc4,
+    "underbar" : 0x0bc6,
+    "jot" : 0x0bca,
+    "quad" : 0x0bcc,
+    "uptack" : 0x0bce,
+    "circle" : 0x0bcf,
+    "upstile" : 0x0bd3,
+    "downshoe" : 0x0bd6,
+    "rightshoe" : 0x0bd8,
+    "leftshoe" : 0x0bda,
+    "lefttack" : 0x0bdc,
+    "righttack" : 0x0bfc,
+    "hebrew_doublelowline" : 0x0cdf,
+    "hebrew_aleph" : 0x0ce0,
+    "hebrew_bet" : 0x0ce1,
+    "hebrew_beth" : 0x0ce1,
+    "hebrew_gimel" : 0x0ce2,
+    "hebrew_gimmel" : 0x0ce2,
+    "hebrew_dalet" : 0x0ce3,
+    "hebrew_daleth" : 0x0ce3,
+    "hebrew_he" : 0x0ce4,
+    "hebrew_waw" : 0x0ce5,
+    "hebrew_zain" : 0x0ce6,
+    "hebrew_zayin" : 0x0ce6,
+    "hebrew_chet" : 0x0ce7,
+    "hebrew_het" : 0x0ce7,
+    "hebrew_tet" : 0x0ce8,
+    "hebrew_teth" : 0x0ce8,
+    "hebrew_yod" : 0x0ce9,
+    "hebrew_finalkaph" : 0x0cea,
+    "hebrew_kaph" : 0x0ceb,
+    "hebrew_lamed" : 0x0cec,
+    "hebrew_finalmem" : 0x0ced,
+    "hebrew_mem" : 0x0cee,
+    "hebrew_finalnun" : 0x0cef,
+    "hebrew_nun" : 0x0cf0,
+    "hebrew_samech" : 0x0cf1,
+    "hebrew_samekh" : 0x0cf1,
+    "hebrew_ayin" : 0x0cf2,
+    "hebrew_finalpe" : 0x0cf3,
+    "hebrew_pe" : 0x0cf4,
+    "hebrew_finalzade" : 0x0cf5,
+    "hebrew_finalzadi" : 0x0cf5,
+    "hebrew_zade" : 0x0cf6,
+    "hebrew_zadi" : 0x0cf6,
+    "hebrew_qoph" : 0x0cf7,
+    "hebrew_kuf" : 0x0cf7,
+    "hebrew_resh" : 0x0cf8,
+    "hebrew_shin" : 0x0cf9,
+    "hebrew_taw" : 0x0cfa,
+    "hebrew_taf" : 0x0cfa,
+    "Hebrew_switch" : 0xff7e,
+    "Thai_kokai" : 0x0da1,
+    "Thai_khokhai" : 0x0da2,
+    "Thai_khokhuat" : 0x0da3,
+    "Thai_khokhwai" : 0x0da4,
+    "Thai_khokhon" : 0x0da5,
+    "Thai_khorakhang" : 0x0da6,
+    "Thai_ngongu" : 0x0da7,
+    "Thai_chochan" : 0x0da8,
+    "Thai_choching" : 0x0da9,
+    "Thai_chochang" : 0x0daa,
+    "Thai_soso" : 0x0dab,
+    "Thai_chochoe" : 0x0dac,
+    "Thai_yoying" : 0x0dad,
+    "Thai_dochada" : 0x0dae,
+    "Thai_topatak" : 0x0daf,
+    "Thai_thothan" : 0x0db0,
+    "Thai_thonangmontho" : 0x0db1,
+    "Thai_thophuthao" : 0x0db2,
+    "Thai_nonen" : 0x0db3,
+    "Thai_dodek" : 0x0db4,
+    "Thai_totao" : 0x0db5,
+    "Thai_thothung" : 0x0db6,
+    "Thai_thothahan" : 0x0db7,
+    "Thai_thothong" : 0x0db8,
+    "Thai_nonu" : 0x0db9,
+    "Thai_bobaimai" : 0x0dba,
+    "Thai_popla" : 0x0dbb,
+    "Thai_phophung" : 0x0dbc,
+    "Thai_fofa" : 0x0dbd,
+    "Thai_phophan" : 0x0dbe,
+    "Thai_fofan" : 0x0dbf,
+    "Thai_phosamphao" : 0x0dc0,
+    "Thai_moma" : 0x0dc1,
+    "Thai_yoyak" : 0x0dc2,
+    "Thai_rorua" : 0x0dc3,
+    "Thai_ru" : 0x0dc4,
+    "Thai_loling" : 0x0dc5,
+    "Thai_lu" : 0x0dc6,
+    "Thai_wowaen" : 0x0dc7,
+    "Thai_sosala" : 0x0dc8,
+    "Thai_sorusi" : 0x0dc9,
+    "Thai_sosua" : 0x0dca,
+    "Thai_hohip" : 0x0dcb,
+    "Thai_lochula" : 0x0dcc,
+    "Thai_oang" : 0x0dcd,
+    "Thai_honokhuk" : 0x0dce,
+    "Thai_paiyannoi" : 0x0dcf,
+    "Thai_saraa" : 0x0dd0,
+    "Thai_maihanakat" : 0x0dd1,
+    "Thai_saraaa" : 0x0dd2,
+    "Thai_saraam" : 0x0dd3,
+    "Thai_sarai" : 0x0dd4,
+    "Thai_saraii" : 0x0dd5,
+    "Thai_saraue" : 0x0dd6,
+    "Thai_sarauee" : 0x0dd7,
+    "Thai_sarau" : 0x0dd8,
+    "Thai_sarauu" : 0x0dd9,
+    "Thai_phinthu" : 0x0dda,
+    "Thai_maihanakat_maitho" : 0x0dde,
+    "Thai_baht" : 0x0ddf,
+    "Thai_sarae" : 0x0de0,
+    "Thai_saraae" : 0x0de1,
+    "Thai_sarao" : 0x0de2,
+    "Thai_saraaimaimuan" : 0x0de3,
+    "Thai_saraaimaimalai" : 0x0de4,
+    "Thai_lakkhangyao" : 0x0de5,
+    "Thai_maiyamok" : 0x0de6,
+    "Thai_maitaikhu" : 0x0de7,
+    "Thai_maiek" : 0x0de8,
+    "Thai_maitho" : 0x0de9,
+    "Thai_maitri" : 0x0dea,
+    "Thai_maichattawa" : 0x0deb,
+    "Thai_thanthakhat" : 0x0dec,
+    "Thai_nikhahit" : 0x0ded,
+    "Thai_leksun" : 0x0df0,
+    "Thai_leknung" : 0x0df1,
+    "Thai_leksong" : 0x0df2,
+    "Thai_leksam" : 0x0df3,
+    "Thai_leksi" : 0x0df4,
+    "Thai_lekha" : 0x0df5,
+    "Thai_lekhok" : 0x0df6,
+    "Thai_lekchet" : 0x0df7,
+    "Thai_lekpaet" : 0x0df8,
+    "Thai_lekkao" : 0x0df9,
+    "Hangul" : 0xff31,
+    "Hangul_Start" : 0xff32,
+    "Hangul_End" : 0xff33,
+    "Hangul_Hanja" : 0xff34,
+    "Hangul_Jamo" : 0xff35,
+    "Hangul_Romaja" : 0xff36,
+    "Hangul_Codeinput" : 0xff37,
+    "Hangul_Jeonja" : 0xff38,
+    "Hangul_Banja" : 0xff39,
+    "Hangul_PreHanja" : 0xff3a,
+    "Hangul_PostHanja" : 0xff3b,
+    "Hangul_SingleCandidate" : 0xff3c,
+    "Hangul_MultipleCandidate" : 0xff3d,
+    "Hangul_PreviousCandidate" : 0xff3e,
+    "Hangul_Special" : 0xff3f,
+    "Hangul_switch" : 0xff7e,
+    "Hangul_Kiyeog" : 0x0ea1,
+    "Hangul_SsangKiyeog" : 0x0ea2,
+    "Hangul_KiyeogSios" : 0x0ea3,
+    "Hangul_Nieun" : 0x0ea4,
+    "Hangul_NieunJieuj" : 0x0ea5,
+    "Hangul_NieunHieuh" : 0x0ea6,
+    "Hangul_Dikeud" : 0x0ea7,
+    "Hangul_SsangDikeud" : 0x0ea8,
+    "Hangul_Rieul" : 0x0ea9,
+    "Hangul_RieulKiyeog" : 0x0eaa,
+    "Hangul_RieulMieum" : 0x0eab,
+    "Hangul_RieulPieub" : 0x0eac,
+    "Hangul_RieulSios" : 0x0ead,
+    "Hangul_RieulTieut" : 0x0eae,
+    "Hangul_RieulPhieuf" : 0x0eaf,
+    "Hangul_RieulHieuh" : 0x0eb0,
+    "Hangul_Mieum" : 0x0eb1,
+    "Hangul_Pieub" : 0x0eb2,
+    "Hangul_SsangPieub" : 0x0eb3,
+    "Hangul_PieubSios" : 0x0eb4,
+    "Hangul_Sios" : 0x0eb5,
+    "Hangul_SsangSios" : 0x0eb6,
+    "Hangul_Ieung" : 0x0eb7,
+    "Hangul_Jieuj" : 0x0eb8,
+    "Hangul_SsangJieuj" : 0x0eb9,
+    "Hangul_Cieuc" : 0x0eba,
+    "Hangul_Khieuq" : 0x0ebb,
+    "Hangul_Tieut" : 0x0ebc,
+    "Hangul_Phieuf" : 0x0ebd,
+    "Hangul_Hieuh" : 0x0ebe,
+    "Hangul_A" : 0x0ebf,
+    "Hangul_AE" : 0x0ec0,
+    "Hangul_YA" : 0x0ec1,
+    "Hangul_YAE" : 0x0ec2,
+    "Hangul_EO" : 0x0ec3,
+    "Hangul_E" : 0x0ec4,
+    "Hangul_YEO" : 0x0ec5,
+    "Hangul_YE" : 0x0ec6,
+    "Hangul_O" : 0x0ec7,
+    "Hangul_WA" : 0x0ec8,
+    "Hangul_WAE" : 0x0ec9,
+    "Hangul_OE" : 0x0eca,
+    "Hangul_YO" : 0x0ecb,
+    "Hangul_U" : 0x0ecc,
+    "Hangul_WEO" : 0x0ecd,
+    "Hangul_WE" : 0x0ece,
+    "Hangul_WI" : 0x0ecf,
+    "Hangul_YU" : 0x0ed0,
+    "Hangul_EU" : 0x0ed1,
+    "Hangul_YI" : 0x0ed2,
+    "Hangul_I" : 0x0ed3,
+    "Hangul_J_Kiyeog" : 0x0ed4,
+    "Hangul_J_SsangKiyeog" : 0x0ed5,
+    "Hangul_J_KiyeogSios" : 0x0ed6,
+    "Hangul_J_Nieun" : 0x0ed7,
+    "Hangul_J_NieunJieuj" : 0x0ed8,
+    "Hangul_J_NieunHieuh" : 0x0ed9,
+    "Hangul_J_Dikeud" : 0x0eda,
+    "Hangul_J_Rieul" : 0x0edb,
+    "Hangul_J_RieulKiyeog" : 0x0edc,
+    "Hangul_J_RieulMieum" : 0x0edd,
+    "Hangul_J_RieulPieub" : 0x0ede,
+    "Hangul_J_RieulSios" : 0x0edf,
+    "Hangul_J_RieulTieut" : 0x0ee0,
+    "Hangul_J_RieulPhieuf" : 0x0ee1,
+    "Hangul_J_RieulHieuh" : 0x0ee2,
+    "Hangul_J_Mieum" : 0x0ee3,
+    "Hangul_J_Pieub" : 0x0ee4,
+    "Hangul_J_PieubSios" : 0x0ee5,
+    "Hangul_J_Sios" : 0x0ee6,
+    "Hangul_J_SsangSios" : 0x0ee7,
+    "Hangul_J_Ieung" : 0x0ee8,
+    "Hangul_J_Jieuj" : 0x0ee9,
+    "Hangul_J_Cieuc" : 0x0eea,
+    "Hangul_J_Khieuq" : 0x0eeb,
+    "Hangul_J_Tieut" : 0x0eec,
+    "Hangul_J_Phieuf" : 0x0eed,
+    "Hangul_J_Hieuh" : 0x0eee,
+    "Hangul_RieulYeorinHieuh" : 0x0eef,
+    "Hangul_SunkyeongeumMieum" : 0x0ef0,
+    "Hangul_SunkyeongeumPieub" : 0x0ef1,
+    "Hangul_PanSios" : 0x0ef2,
+    "Hangul_KkogjiDalrinIeung" : 0x0ef3,
+    "Hangul_SunkyeongeumPhieuf" : 0x0ef4,
+    "Hangul_YeorinHieuh" : 0x0ef5,
+    "Hangul_AraeA" : 0x0ef6,
+    "Hangul_AraeAE" : 0x0ef7,
+    "Hangul_J_PanSios" : 0x0ef8,
+    "Hangul_J_KkogjiDalrinIeung" : 0x0ef9,
+    "Hangul_J_YeorinHieuh" : 0x0efa,
+    "Korean_Won" : 0x0eff,
+    "Armenian_ligature_ew" : 0x1000587,
+    "Armenian_full_stop" : 0x1000589,
+    "Armenian_verjaket" : 0x1000589,
+    "Armenian_separation_mark" : 0x100055d,
+    "Armenian_but" : 0x100055d,
+    "Armenian_hyphen" : 0x100058a,
+    "Armenian_yentamna" : 0x100058a,
+    "Armenian_exclam" : 0x100055c,
+    "Armenian_amanak" : 0x100055c,
+    "Armenian_accent" : 0x100055b,
+    "Armenian_shesht" : 0x100055b,
+    "Armenian_question" : 0x100055e,
+    "Armenian_paruyk" : 0x100055e,
+    "Armenian_AYB" : 0x1000531,
+    "Armenian_ayb" : 0x1000561,
+    "Armenian_BEN" : 0x1000532,
+    "Armenian_ben" : 0x1000562,
+    "Armenian_GIM" : 0x1000533,
+    "Armenian_gim" : 0x1000563,
+    "Armenian_DA" : 0x1000534,
+    "Armenian_da" : 0x1000564,
+    "Armenian_YECH" : 0x1000535,
+    "Armenian_yech" : 0x1000565,
+    "Armenian_ZA" : 0x1000536,
+    "Armenian_za" : 0x1000566,
+    "Armenian_E" : 0x1000537,
+    "Armenian_e" : 0x1000567,
+    "Armenian_AT" : 0x1000538,
+    "Armenian_at" : 0x1000568,
+    "Armenian_TO" : 0x1000539,
+    "Armenian_to" : 0x1000569,
+    "Armenian_ZHE" : 0x100053a,
+    "Armenian_zhe" : 0x100056a,
+    "Armenian_INI" : 0x100053b,
+    "Armenian_ini" : 0x100056b,
+    "Armenian_LYUN" : 0x100053c,
+    "Armenian_lyun" : 0x100056c,
+    "Armenian_KHE" : 0x100053d,
+    "Armenian_khe" : 0x100056d,
+    "Armenian_TSA" : 0x100053e,
+    "Armenian_tsa" : 0x100056e,
+    "Armenian_KEN" : 0x100053f,
+    "Armenian_ken" : 0x100056f,
+    "Armenian_HO" : 0x1000540,
+    "Armenian_ho" : 0x1000570,
+    "Armenian_DZA" : 0x1000541,
+    "Armenian_dza" : 0x1000571,
+    "Armenian_GHAT" : 0x1000542,
+    "Armenian_ghat" : 0x1000572,
+    "Armenian_TCHE" : 0x1000543,
+    "Armenian_tche" : 0x1000573,
+    "Armenian_MEN" : 0x1000544,
+    "Armenian_men" : 0x1000574,
+    "Armenian_HI" : 0x1000545,
+    "Armenian_hi" : 0x1000575,
+    "Armenian_NU" : 0x1000546,
+    "Armenian_nu" : 0x1000576,
+    "Armenian_SHA" : 0x1000547,
+    "Armenian_sha" : 0x1000577,
+    "Armenian_VO" : 0x1000548,
+    "Armenian_vo" : 0x1000578,
+    "Armenian_CHA" : 0x1000549,
+    "Armenian_cha" : 0x1000579,
+    "Armenian_PE" : 0x100054a,
+    "Armenian_pe" : 0x100057a,
+    "Armenian_JE" : 0x100054b,
+    "Armenian_je" : 0x100057b,
+    "Armenian_RA" : 0x100054c,
+    "Armenian_ra" : 0x100057c,
+    "Armenian_SE" : 0x100054d,
+    "Armenian_se" : 0x100057d,
+    "Armenian_VEV" : 0x100054e,
+    "Armenian_vev" : 0x100057e,
+    "Armenian_TYUN" : 0x100054f,
+    "Armenian_tyun" : 0x100057f,
+    "Armenian_RE" : 0x1000550,
+    "Armenian_re" : 0x1000580,
+    "Armenian_TSO" : 0x1000551,
+    "Armenian_tso" : 0x1000581,
+    "Armenian_VYUN" : 0x1000552,
+    "Armenian_vyun" : 0x1000582,
+    "Armenian_PYUR" : 0x1000553,
+    "Armenian_pyur" : 0x1000583,
+    "Armenian_KE" : 0x1000554,
+    "Armenian_ke" : 0x1000584,
+    "Armenian_O" : 0x1000555,
+    "Armenian_o" : 0x1000585,
+    "Armenian_FE" : 0x1000556,
+    "Armenian_fe" : 0x1000586,
+    "Armenian_apostrophe" : 0x100055a,
+    "Georgian_an" : 0x10010d0,
+    "Georgian_ban" : 0x10010d1,
+    "Georgian_gan" : 0x10010d2,
+    "Georgian_don" : 0x10010d3,
+    "Georgian_en" : 0x10010d4,
+    "Georgian_vin" : 0x10010d5,
+    "Georgian_zen" : 0x10010d6,
+    "Georgian_tan" : 0x10010d7,
+    "Georgian_in" : 0x10010d8,
+    "Georgian_kan" : 0x10010d9,
+    "Georgian_las" : 0x10010da,
+    "Georgian_man" : 0x10010db,
+    "Georgian_nar" : 0x10010dc,
+    "Georgian_on" : 0x10010dd,
+    "Georgian_par" : 0x10010de,
+    "Georgian_zhar" : 0x10010df,
+    "Georgian_rae" : 0x10010e0,
+    "Georgian_san" : 0x10010e1,
+    "Georgian_tar" : 0x10010e2,
+    "Georgian_un" : 0x10010e3,
+    "Georgian_phar" : 0x10010e4,
+    "Georgian_khar" : 0x10010e5,
+    "Georgian_ghan" : 0x10010e6,
+    "Georgian_qar" : 0x10010e7,
+    "Georgian_shin" : 0x10010e8,
+    "Georgian_chin" : 0x10010e9,
+    "Georgian_can" : 0x10010ea,
+    "Georgian_jil" : 0x10010eb,
+    "Georgian_cil" : 0x10010ec,
+    "Georgian_char" : 0x10010ed,
+    "Georgian_xan" : 0x10010ee,
+    "Georgian_jhan" : 0x10010ef,
+    "Georgian_hae" : 0x10010f0,
+    "Georgian_he" : 0x10010f1,
+    "Georgian_hie" : 0x10010f2,
+    "Georgian_we" : 0x10010f3,
+    "Georgian_har" : 0x10010f4,
+    "Georgian_hoe" : 0x10010f5,
+    "Georgian_fi" : 0x10010f6,
+    "Xabovedot" : 0x1001e8a,
+    "Ibreve" : 0x100012c,
+    "Zstroke" : 0x10001b5,
+    "Gcaron" : 0x10001e6,
+    "Ocaron" : 0x10001d1,
+    "Obarred" : 0x100019f,
+    "xabovedot" : 0x1001e8b,
+    "ibreve" : 0x100012d,
+    "zstroke" : 0x10001b6,
+    "gcaron" : 0x10001e7,
+    "ocaron" : 0x10001d2,
+    "obarred" : 0x1000275,
+    "SCHWA" : 0x100018f,
+    "schwa" : 0x1000259,
+    "Lbelowdot" : 0x1001e36,
+    "lbelowdot" : 0x1001e37,
+    "Abelowdot" : 0x1001ea0,
+    "abelowdot" : 0x1001ea1,
+    "Ahook" : 0x1001ea2,
+    "ahook" : 0x1001ea3,
+    "Acircumflexacute" : 0x1001ea4,
+    "acircumflexacute" : 0x1001ea5,
+    "Acircumflexgrave" : 0x1001ea6,
+    "acircumflexgrave" : 0x1001ea7,
+    "Acircumflexhook" : 0x1001ea8,
+    "acircumflexhook" : 0x1001ea9,
+    "Acircumflextilde" : 0x1001eaa,
+    "acircumflextilde" : 0x1001eab,
+    "Acircumflexbelowdot" : 0x1001eac,
+    "acircumflexbelowdot" : 0x1001ead,
+    "Abreveacute" : 0x1001eae,
+    "abreveacute" : 0x1001eaf,
+    "Abrevegrave" : 0x1001eb0,
+    "abrevegrave" : 0x1001eb1,
+    "Abrevehook" : 0x1001eb2,
+    "abrevehook" : 0x1001eb3,
+    "Abrevetilde" : 0x1001eb4,
+    "abrevetilde" : 0x1001eb5,
+    "Abrevebelowdot" : 0x1001eb6,
+    "abrevebelowdot" : 0x1001eb7,
+    "Ebelowdot" : 0x1001eb8,
+    "ebelowdot" : 0x1001eb9,
+    "Ehook" : 0x1001eba,
+    "ehook" : 0x1001ebb,
+    "Etilde" : 0x1001ebc,
+    "etilde" : 0x1001ebd,
+    "Ecircumflexacute" : 0x1001ebe,
+    "ecircumflexacute" : 0x1001ebf,
+    "Ecircumflexgrave" : 0x1001ec0,
+    "ecircumflexgrave" : 0x1001ec1,
+    "Ecircumflexhook" : 0x1001ec2,
+    "ecircumflexhook" : 0x1001ec3,
+    "Ecircumflextilde" : 0x1001ec4,
+    "ecircumflextilde" : 0x1001ec5,
+    "Ecircumflexbelowdot" : 0x1001ec6,
+    "ecircumflexbelowdot" : 0x1001ec7,
+    "Ihook" : 0x1001ec8,
+    "ihook" : 0x1001ec9,
+    "Ibelowdot" : 0x1001eca,
+    "ibelowdot" : 0x1001ecb,
+    "Obelowdot" : 0x1001ecc,
+    "obelowdot" : 0x1001ecd,
+    "Ohook" : 0x1001ece,
+    "ohook" : 0x1001ecf,
+    "Ocircumflexacute" : 0x1001ed0,
+    "ocircumflexacute" : 0x1001ed1,
+    "Ocircumflexgrave" : 0x1001ed2,
+    "ocircumflexgrave" : 0x1001ed3,
+    "Ocircumflexhook" : 0x1001ed4,
+    "ocircumflexhook" : 0x1001ed5,
+    "Ocircumflextilde" : 0x1001ed6,
+    "ocircumflextilde" : 0x1001ed7,
+    "Ocircumflexbelowdot" : 0x1001ed8,
+    "ocircumflexbelowdot" : 0x1001ed9,
+    "Ohornacute" : 0x1001eda,
+    "ohornacute" : 0x1001edb,
+    "Ohorngrave" : 0x1001edc,
+    "ohorngrave" : 0x1001edd,
+    "Ohornhook" : 0x1001ede,
+    "ohornhook" : 0x1001edf,
+    "Ohorntilde" : 0x1001ee0,
+    "ohorntilde" : 0x1001ee1,
+    "Ohornbelowdot" : 0x1001ee2,
+    "ohornbelowdot" : 0x1001ee3,
+    "Ubelowdot" : 0x1001ee4,
+    "ubelowdot" : 0x1001ee5,
+    "Uhook" : 0x1001ee6,
+    "uhook" : 0x1001ee7,
+    "Uhornacute" : 0x1001ee8,
+    "uhornacute" : 0x1001ee9,
+    "Uhorngrave" : 0x1001eea,
+    "uhorngrave" : 0x1001eeb,
+    "Uhornhook" : 0x1001eec,
+    "uhornhook" : 0x1001eed,
+    "Uhorntilde" : 0x1001eee,
+    "uhorntilde" : 0x1001eef,
+    "Uhornbelowdot" : 0x1001ef0,
+    "uhornbelowdot" : 0x1001ef1,
+    "Ybelowdot" : 0x1001ef4,
+    "ybelowdot" : 0x1001ef5,
+    "Yhook" : 0x1001ef6,
+    "yhook" : 0x1001ef7,
+    "Ytilde" : 0x1001ef8,
+    "ytilde" : 0x1001ef9,
+    "Ohorn" : 0x10001a0,
+    "ohorn" : 0x10001a1,
+    "Uhorn" : 0x10001af,
+    "uhorn" : 0x10001b0,
+    "EcuSign" : 0x10020a0,
+    "ColonSign" : 0x10020a1,
+    "CruzeiroSign" : 0x10020a2,
+    "FFrancSign" : 0x10020a3,
+    "LiraSign" : 0x10020a4,
+    "MillSign" : 0x10020a5,
+    "NairaSign" : 0x10020a6,
+    "PesetaSign" : 0x10020a7,
+    "RupeeSign" : 0x10020a8,
+    "WonSign" : 0x10020a9,
+    "NewSheqelSign" : 0x10020aa,
+    "DongSign" : 0x10020ab,
+    "EuroSign" : 0x20ac,
+    "zerosuperior" : 0x1002070,
+    "foursuperior" : 0x1002074,
+    "fivesuperior" : 0x1002075,
+    "sixsuperior" : 0x1002076,
+    "sevensuperior" : 0x1002077,
+    "eightsuperior" : 0x1002078,
+    "ninesuperior" : 0x1002079,
+    "zerosubscript" : 0x1002080,
+    "onesubscript" : 0x1002081,
+    "twosubscript" : 0x1002082,
+    "threesubscript" : 0x1002083,
+    "foursubscript" : 0x1002084,
+    "fivesubscript" : 0x1002085,
+    "sixsubscript" : 0x1002086,
+    "sevensubscript" : 0x1002087,
+    "eightsubscript" : 0x1002088,
+    "ninesubscript" : 0x1002089,
+    "partdifferential" : 0x1002202,
+    "emptyset" : 0x1002205,
+    "elementof" : 0x1002208,
+    "notelementof" : 0x1002209,
+    "containsas" : 0x100220B,
+    "squareroot" : 0x100221A,
+    "cuberoot" : 0x100221B,
+    "fourthroot" : 0x100221C,
+    "dintegral" : 0x100222C,
+    "tintegral" : 0x100222D,
+    "because" : 0x1002235,
+    "approxeq" : 0x1002248,
+    "notapproxeq" : 0x1002247,
+    "notidentical" : 0x1002262,
+    "stricteq" : 0x1002263,
+    "braille_dot_1" : 0xfff1,
+    "braille_dot_2" : 0xfff2,
+    "braille_dot_3" : 0xfff3,
+    "braille_dot_4" : 0xfff4,
+    "braille_dot_5" : 0xfff5,
+    "braille_dot_6" : 0xfff6,
+    "braille_dot_7" : 0xfff7,
+    "braille_dot_8" : 0xfff8,
+    "braille_dot_9" : 0xfff9,
+    "braille_dot_10" : 0xfffa,
+    "braille_blank" : 0x1002800,
+    "braille_dots_1" : 0x1002801,
+    "braille_dots_2" : 0x1002802,
+    "braille_dots_12" : 0x1002803,
+    "braille_dots_3" : 0x1002804,
+    "braille_dots_13" : 0x1002805,
+    "braille_dots_23" : 0x1002806,
+    "braille_dots_123" : 0x1002807,
+    "braille_dots_4" : 0x1002808,
+    "braille_dots_14" : 0x1002809,
+    "braille_dots_24" : 0x100280a,
+    "braille_dots_124" : 0x100280b,
+    "braille_dots_34" : 0x100280c,
+    "braille_dots_134" : 0x100280d,
+    "braille_dots_234" : 0x100280e,
+    "braille_dots_1234" : 0x100280f,
+    "braille_dots_5" : 0x1002810,
+    "braille_dots_15" : 0x1002811,
+    "braille_dots_25" : 0x1002812,
+    "braille_dots_125" : 0x1002813,
+    "braille_dots_35" : 0x1002814,
+    "braille_dots_135" : 0x1002815,
+    "braille_dots_235" : 0x1002816,
+    "braille_dots_1235" : 0x1002817,
+    "braille_dots_45" : 0x1002818,
+    "braille_dots_145" : 0x1002819,
+    "braille_dots_245" : 0x100281a,
+    "braille_dots_1245" : 0x100281b,
+    "braille_dots_345" : 0x100281c,
+    "braille_dots_1345" : 0x100281d,
+    "braille_dots_2345" : 0x100281e,
+    "braille_dots_12345" : 0x100281f,
+    "braille_dots_6" : 0x1002820,
+    "braille_dots_16" : 0x1002821,
+    "braille_dots_26" : 0x1002822,
+    "braille_dots_126" : 0x1002823,
+    "braille_dots_36" : 0x1002824,
+    "braille_dots_136" : 0x1002825,
+    "braille_dots_236" : 0x1002826,
+    "braille_dots_1236" : 0x1002827,
+    "braille_dots_46" : 0x1002828,
+    "braille_dots_146" : 0x1002829,
+    "braille_dots_246" : 0x100282a,
+    "braille_dots_1246" : 0x100282b,
+    "braille_dots_346" : 0x100282c,
+    "braille_dots_1346" : 0x100282d,
+    "braille_dots_2346" : 0x100282e,
+    "braille_dots_12346" : 0x100282f,
+    "braille_dots_56" : 0x1002830,
+    "braille_dots_156" : 0x1002831,
+    "braille_dots_256" : 0x1002832,
+    "braille_dots_1256" : 0x1002833,
+    "braille_dots_356" : 0x1002834,
+    "braille_dots_1356" : 0x1002835,
+    "braille_dots_2356" : 0x1002836,
+    "braille_dots_12356" : 0x1002837,
+    "braille_dots_456" : 0x1002838,
+    "braille_dots_1456" : 0x1002839,
+    "braille_dots_2456" : 0x100283a,
+    "braille_dots_12456" : 0x100283b,
+    "braille_dots_3456" : 0x100283c,
+    "braille_dots_13456" : 0x100283d,
+    "braille_dots_23456" : 0x100283e,
+    "braille_dots_123456" : 0x100283f,
+    "braille_dots_7" : 0x1002840,
+    "braille_dots_17" : 0x1002841,
+    "braille_dots_27" : 0x1002842,
+    "braille_dots_127" : 0x1002843,
+    "braille_dots_37" : 0x1002844,
+    "braille_dots_137" : 0x1002845,
+    "braille_dots_237" : 0x1002846,
+    "braille_dots_1237" : 0x1002847,
+    "braille_dots_47" : 0x1002848,
+    "braille_dots_147" : 0x1002849,
+    "braille_dots_247" : 0x100284a,
+    "braille_dots_1247" : 0x100284b,
+    "braille_dots_347" : 0x100284c,
+    "braille_dots_1347" : 0x100284d,
+    "braille_dots_2347" : 0x100284e,
+    "braille_dots_12347" : 0x100284f,
+    "braille_dots_57" : 0x1002850,
+    "braille_dots_157" : 0x1002851,
+    "braille_dots_257" : 0x1002852,
+    "braille_dots_1257" : 0x1002853,
+    "braille_dots_357" : 0x1002854,
+    "braille_dots_1357" : 0x1002855,
+    "braille_dots_2357" : 0x1002856,
+    "braille_dots_12357" : 0x1002857,
+    "braille_dots_457" : 0x1002858,
+    "braille_dots_1457" : 0x1002859,
+    "braille_dots_2457" : 0x100285a,
+    "braille_dots_12457" : 0x100285b,
+    "braille_dots_3457" : 0x100285c,
+    "braille_dots_13457" : 0x100285d,
+    "braille_dots_23457" : 0x100285e,
+    "braille_dots_123457" : 0x100285f,
+    "braille_dots_67" : 0x1002860,
+    "braille_dots_167" : 0x1002861,
+    "braille_dots_267" : 0x1002862,
+    "braille_dots_1267" : 0x1002863,
+    "braille_dots_367" : 0x1002864,
+    "braille_dots_1367" : 0x1002865,
+    "braille_dots_2367" : 0x1002866,
+    "braille_dots_12367" : 0x1002867,
+    "braille_dots_467" : 0x1002868,
+    "braille_dots_1467" : 0x1002869,
+    "braille_dots_2467" : 0x100286a,
+    "braille_dots_12467" : 0x100286b,
+    "braille_dots_3467" : 0x100286c,
+    "braille_dots_13467" : 0x100286d,
+    "braille_dots_23467" : 0x100286e,
+    "braille_dots_123467" : 0x100286f,
+    "braille_dots_567" : 0x1002870,
+    "braille_dots_1567" : 0x1002871,
+    "braille_dots_2567" : 0x1002872,
+    "braille_dots_12567" : 0x1002873,
+    "braille_dots_3567" : 0x1002874,
+    "braille_dots_13567" : 0x1002875,
+    "braille_dots_23567" : 0x1002876,
+    "braille_dots_123567" : 0x1002877,
+    "braille_dots_4567" : 0x1002878,
+    "braille_dots_14567" : 0x1002879,
+    "braille_dots_24567" : 0x100287a,
+    "braille_dots_124567" : 0x100287b,
+    "braille_dots_34567" : 0x100287c,
+    "braille_dots_134567" : 0x100287d,
+    "braille_dots_234567" : 0x100287e,
+    "braille_dots_1234567" : 0x100287f,
+    "braille_dots_8" : 0x1002880,
+    "braille_dots_18" : 0x1002881,
+    "braille_dots_28" : 0x1002882,
+    "braille_dots_128" : 0x1002883,
+    "braille_dots_38" : 0x1002884,
+    "braille_dots_138" : 0x1002885,
+    "braille_dots_238" : 0x1002886,
+    "braille_dots_1238" : 0x1002887,
+    "braille_dots_48" : 0x1002888,
+    "braille_dots_148" : 0x1002889,
+    "braille_dots_248" : 0x100288a,
+    "braille_dots_1248" : 0x100288b,
+    "braille_dots_348" : 0x100288c,
+    "braille_dots_1348" : 0x100288d,
+    "braille_dots_2348" : 0x100288e,
+    "braille_dots_12348" : 0x100288f,
+    "braille_dots_58" : 0x1002890,
+    "braille_dots_158" : 0x1002891,
+    "braille_dots_258" : 0x1002892,
+    "braille_dots_1258" : 0x1002893,
+    "braille_dots_358" : 0x1002894,
+    "braille_dots_1358" : 0x1002895,
+    "braille_dots_2358" : 0x1002896,
+    "braille_dots_12358" : 0x1002897,
+    "braille_dots_458" : 0x1002898,
+    "braille_dots_1458" : 0x1002899,
+    "braille_dots_2458" : 0x100289a,
+    "braille_dots_12458" : 0x100289b,
+    "braille_dots_3458" : 0x100289c,
+    "braille_dots_13458" : 0x100289d,
+    "braille_dots_23458" : 0x100289e,
+    "braille_dots_123458" : 0x100289f,
+    "braille_dots_68" : 0x10028a0,
+    "braille_dots_168" : 0x10028a1,
+    "braille_dots_268" : 0x10028a2,
+    "braille_dots_1268" : 0x10028a3,
+    "braille_dots_368" : 0x10028a4,
+    "braille_dots_1368" : 0x10028a5,
+    "braille_dots_2368" : 0x10028a6,
+    "braille_dots_12368" : 0x10028a7,
+    "braille_dots_468" : 0x10028a8,
+    "braille_dots_1468" : 0x10028a9,
+    "braille_dots_2468" : 0x10028aa,
+    "braille_dots_12468" : 0x10028ab,
+    "braille_dots_3468" : 0x10028ac,
+    "braille_dots_13468" : 0x10028ad,
+    "braille_dots_23468" : 0x10028ae,
+    "braille_dots_123468" : 0x10028af,
+    "braille_dots_568" : 0x10028b0,
+    "braille_dots_1568" : 0x10028b1,
+    "braille_dots_2568" : 0x10028b2,
+    "braille_dots_12568" : 0x10028b3,
+    "braille_dots_3568" : 0x10028b4,
+    "braille_dots_13568" : 0x10028b5,
+    "braille_dots_23568" : 0x10028b6,
+    "braille_dots_123568" : 0x10028b7,
+    "braille_dots_4568" : 0x10028b8,
+    "braille_dots_14568" : 0x10028b9,
+    "braille_dots_24568" : 0x10028ba,
+    "braille_dots_124568" : 0x10028bb,
+    "braille_dots_34568" : 0x10028bc,
+    "braille_dots_134568" : 0x10028bd,
+    "braille_dots_234568" : 0x10028be,
+    "braille_dots_1234568" : 0x10028bf,
+    "braille_dots_78" : 0x10028c0,
+    "braille_dots_178" : 0x10028c1,
+    "braille_dots_278" : 0x10028c2,
+    "braille_dots_1278" : 0x10028c3,
+    "braille_dots_378" : 0x10028c4,
+    "braille_dots_1378" : 0x10028c5,
+    "braille_dots_2378" : 0x10028c6,
+    "braille_dots_12378" : 0x10028c7,
+    "braille_dots_478" : 0x10028c8,
+    "braille_dots_1478" : 0x10028c9,
+    "braille_dots_2478" : 0x10028ca,
+    "braille_dots_12478" : 0x10028cb,
+    "braille_dots_3478" : 0x10028cc,
+    "braille_dots_13478" : 0x10028cd,
+    "braille_dots_23478" : 0x10028ce,
+    "braille_dots_123478" : 0x10028cf,
+    "braille_dots_578" : 0x10028d0,
+    "braille_dots_1578" : 0x10028d1,
+    "braille_dots_2578" : 0x10028d2,
+    "braille_dots_12578" : 0x10028d3,
+    "braille_dots_3578" : 0x10028d4,
+    "braille_dots_13578" : 0x10028d5,
+    "braille_dots_23578" : 0x10028d6,
+    "braille_dots_123578" : 0x10028d7,
+    "braille_dots_4578" : 0x10028d8,
+    "braille_dots_14578" : 0x10028d9,
+    "braille_dots_24578" : 0x10028da,
+    "braille_dots_124578" : 0x10028db,
+    "braille_dots_34578" : 0x10028dc,
+    "braille_dots_134578" : 0x10028dd,
+    "braille_dots_234578" : 0x10028de,
+    "braille_dots_1234578" : 0x10028df,
+    "braille_dots_678" : 0x10028e0,
+    "braille_dots_1678" : 0x10028e1,
+    "braille_dots_2678" : 0x10028e2,
+    "braille_dots_12678" : 0x10028e3,
+    "braille_dots_3678" : 0x10028e4,
+    "braille_dots_13678" : 0x10028e5,
+    "braille_dots_23678" : 0x10028e6,
+    "braille_dots_123678" : 0x10028e7,
+    "braille_dots_4678" : 0x10028e8,
+    "braille_dots_14678" : 0x10028e9,
+    "braille_dots_24678" : 0x10028ea,
+    "braille_dots_124678" : 0x10028eb,
+    "braille_dots_34678" : 0x10028ec,
+    "braille_dots_134678" : 0x10028ed,
+    "braille_dots_234678" : 0x10028ee,
+    "braille_dots_1234678" : 0x10028ef,
+    "braille_dots_5678" : 0x10028f0,
+    "braille_dots_15678" : 0x10028f1,
+    "braille_dots_25678" : 0x10028f2,
+    "braille_dots_125678" : 0x10028f3,
+    "braille_dots_35678" : 0x10028f4,
+    "braille_dots_135678" : 0x10028f5,
+    "braille_dots_235678" : 0x10028f6,
+    "braille_dots_1235678" : 0x10028f7,
+    "braille_dots_45678" : 0x10028f8,
+    "braille_dots_145678" : 0x10028f9,
+    "braille_dots_245678" : 0x10028fa,
+    "braille_dots_1245678" : 0x10028fb,
+    "braille_dots_345678" : 0x10028fc,
+    "braille_dots_1345678" : 0x10028fd,
+    "braille_dots_2345678" : 0x10028fe,
+    "braille_dots_12345678" : 0x10028ff
 }
 
 __keycode_to_name = {
-       0xffffff : "VoidSymbol",
-       0xff08 : "BackSpace",
-       0xff09 : "Tab",
-       0xff0a : "Linefeed",
-       0xff0b : "Clear",
-       0xff0d : "Return",
-       0xff13 : "Pause",
-       0xff14 : "Scroll_Lock",
-       0xff15 : "Sys_Req",
-       0xff1b : "Escape",
-       0xffff : "Delete",
-       0xff20 : "Multi_key",
-       0xff37 : "Codeinput",
-       0xff3c : "SingleCandidate",
-       0xff3d : "MultipleCandidate",
-       0xff3e : "PreviousCandidate",
-       0xff21 : "Kanji",
-       0xff22 : "Muhenkan",
-       0xff23 : "Henkan_Mode",
-       0xff23 : "Henkan",
-       0xff24 : "Romaji",
-       0xff25 : "Hiragana",
-       0xff26 : "Katakana",
-       0xff27 : "Hiragana_Katakana",
-       0xff28 : "Zenkaku",
-       0xff29 : "Hankaku",
-       0xff2a : "Zenkaku_Hankaku",
-       0xff2b : "Touroku",
-       0xff2c : "Massyo",
-       0xff2d : "Kana_Lock",
-       0xff2e : "Kana_Shift",
-       0xff2f : "Eisu_Shift",
-       0xff30 : "Eisu_toggle",
-       0xff37 : "Kanji_Bangou",
-       0xff3d : "Zen_Koho",
-       0xff3e : "Mae_Koho",
-       0xff50 : "Home",
-       0xff51 : "Left",
-       0xff52 : "Up",
-       0xff53 : "Right",
-       0xff54 : "Down",
-       0xff55 : "Prior",
-       0xff55 : "Page_Up",
-       0xff56 : "Next",
-       0xff56 : "Page_Down",
-       0xff57 : "End",
-       0xff58 : "Begin",
-       0xff60 : "Select",
-       0xff61 : "Print",
-       0xff62 : "Execute",
-       0xff63 : "Insert",
-       0xff65 : "Undo",
-       0xff66 : "Redo",
-       0xff67 : "Menu",
-       0xff68 : "Find",
-       0xff69 : "Cancel",
-       0xff6a : "Help",
-       0xff6b : "Break",
-       0xff7e : "Mode_switch",
-       0xff7e : "script_switch",
-       0xff7f : "Num_Lock",
-       0xff80 : "KP_Space",
-       0xff89 : "KP_Tab",
-       0xff8d : "KP_Enter",
-       0xff91 : "KP_F1",
-       0xff92 : "KP_F2",
-       0xff93 : "KP_F3",
-       0xff94 : "KP_F4",
-       0xff95 : "KP_Home",
-       0xff96 : "KP_Left",
-       0xff97 : "KP_Up",
-       0xff98 : "KP_Right",
-       0xff99 : "KP_Down",
-       0xff9a : "KP_Prior",
-       0xff9a : "KP_Page_Up",
-       0xff9b : "KP_Next",
-       0xff9b : "KP_Page_Down",
-       0xff9c : "KP_End",
-       0xff9d : "KP_Begin",
-       0xff9e : "KP_Insert",
-       0xff9f : "KP_Delete",
-       0xffbd : "KP_Equal",
-       0xffaa : "KP_Multiply",
-       0xffab : "KP_Add",
-       0xffac : "KP_Separator",
-       0xffad : "KP_Subtract",
-       0xffae : "KP_Decimal",
-       0xffaf : "KP_Divide",
-       0xffb0 : "KP_0",
-       0xffb1 : "KP_1",
-       0xffb2 : "KP_2",
-       0xffb3 : "KP_3",
-       0xffb4 : "KP_4",
-       0xffb5 : "KP_5",
-       0xffb6 : "KP_6",
-       0xffb7 : "KP_7",
-       0xffb8 : "KP_8",
-       0xffb9 : "KP_9",
-       0xffbe : "F1",
-       0xffbf : "F2",
-       0xffc0 : "F3",
-       0xffc1 : "F4",
-       0xffc2 : "F5",
-       0xffc3 : "F6",
-       0xffc4 : "F7",
-       0xffc5 : "F8",
-       0xffc6 : "F9",
-       0xffc7 : "F10",
-       0xffc8 : "F11",
-       0xffc8 : "L1",
-       0xffc9 : "F12",
-       0xffc9 : "L2",
-       0xffca : "F13",
-       0xffca : "L3",
-       0xffcb : "F14",
-       0xffcb : "L4",
-       0xffcc : "F15",
-       0xffcc : "L5",
-       0xffcd : "F16",
-       0xffcd : "L6",
-       0xffce : "F17",
-       0xffce : "L7",
-       0xffcf : "F18",
-       0xffcf : "L8",
-       0xffd0 : "F19",
-       0xffd0 : "L9",
-       0xffd1 : "F20",
-       0xffd1 : "L10",
-       0xffd2 : "F21",
-       0xffd2 : "R1",
-       0xffd3 : "F22",
-       0xffd3 : "R2",
-       0xffd4 : "F23",
-       0xffd4 : "R3",
-       0xffd5 : "F24",
-       0xffd5 : "R4",
-       0xffd6 : "F25",
-       0xffd6 : "R5",
-       0xffd7 : "F26",
-       0xffd7 : "R6",
-       0xffd8 : "F27",
-       0xffd8 : "R7",
-       0xffd9 : "F28",
-       0xffd9 : "R8",
-       0xffda : "F29",
-       0xffda : "R9",
-       0xffdb : "F30",
-       0xffdb : "R10",
-       0xffdc : "F31",
-       0xffdc : "R11",
-       0xffdd : "F32",
-       0xffdd : "R12",
-       0xffde : "F33",
-       0xffde : "R13",
-       0xffdf : "F34",
-       0xffdf : "R14",
-       0xffe0 : "F35",
-       0xffe0 : "R15",
-       0xffe1 : "Shift_L",
-       0xffe2 : "Shift_R",
-       0xffe3 : "Control_L",
-       0xffe4 : "Control_R",
-       0xffe5 : "Caps_Lock",
-       0xffe6 : "Shift_Lock",
-       0xffe7 : "Meta_L",
-       0xffe8 : "Meta_R",
-       0xffe9 : "Alt_L",
-       0xffea : "Alt_R",
-       0xffeb : "Super_L",
-       0xffec : "Super_R",
-       0xffed : "Hyper_L",
-       0xffee : "Hyper_R",
-       0xfe01 : "ISO_Lock",
-       0xfe02 : "ISO_Level2_Latch",
-       0xfe03 : "ISO_Level3_Shift",
-       0xfe04 : "ISO_Level3_Latch",
-       0xfe05 : "ISO_Level3_Lock",
-       0xfe11 : "ISO_Level5_Shift",
-       0xfe12 : "ISO_Level5_Latch",
-       0xfe13 : "ISO_Level5_Lock",
-       0xff7e : "ISO_Group_Shift",
-       0xfe06 : "ISO_Group_Latch",
-       0xfe07 : "ISO_Group_Lock",
-       0xfe08 : "ISO_Next_Group",
-       0xfe09 : "ISO_Next_Group_Lock",
-       0xfe0a : "ISO_Prev_Group",
-       0xfe0b : "ISO_Prev_Group_Lock",
-       0xfe0c : "ISO_First_Group",
-       0xfe0d : "ISO_First_Group_Lock",
-       0xfe0e : "ISO_Last_Group",
-       0xfe0f : "ISO_Last_Group_Lock",
-       0xfe20 : "ISO_Left_Tab",
-       0xfe21 : "ISO_Move_Line_Up",
-       0xfe22 : "ISO_Move_Line_Down",
-       0xfe23 : "ISO_Partial_Line_Up",
-       0xfe24 : "ISO_Partial_Line_Down",
-       0xfe25 : "ISO_Partial_Space_Left",
-       0xfe26 : "ISO_Partial_Space_Right",
-       0xfe27 : "ISO_Set_Margin_Left",
-       0xfe28 : "ISO_Set_Margin_Right",
-       0xfe29 : "ISO_Release_Margin_Left",
-       0xfe2a : "ISO_Release_Margin_Right",
-       0xfe2b : "ISO_Release_Both_Margins",
-       0xfe2c : "ISO_Fast_Cursor_Left",
-       0xfe2d : "ISO_Fast_Cursor_Right",
-       0xfe2e : "ISO_Fast_Cursor_Up",
-       0xfe2f : "ISO_Fast_Cursor_Down",
-       0xfe30 : "ISO_Continuous_Underline",
-       0xfe31 : "ISO_Discontinuous_Underline",
-       0xfe32 : "ISO_Emphasize",
-       0xfe33 : "ISO_Center_Object",
-       0xfe34 : "ISO_Enter",
-       0xfe50 : "dead_grave",
-       0xfe51 : "dead_acute",
-       0xfe52 : "dead_circumflex",
-       0xfe53 : "dead_tilde",
-       0xfe54 : "dead_macron",
-       0xfe55 : "dead_breve",
-       0xfe56 : "dead_abovedot",
-       0xfe57 : "dead_diaeresis",
-       0xfe58 : "dead_abovering",
-       0xfe59 : "dead_doubleacute",
-       0xfe5a : "dead_caron",
-       0xfe5b : "dead_cedilla",
-       0xfe5c : "dead_ogonek",
-       0xfe5d : "dead_iota",
-       0xfe5e : "dead_voiced_sound",
-       0xfe5f : "dead_semivoiced_sound",
-       0xfe60 : "dead_belowdot",
-       0xfe61 : "dead_hook",
-       0xfe62 : "dead_horn",
-       0xfe63 : "dead_stroke",
-       0xfe64 : "dead_abovecomma",
-       0xfe64 : "dead_psili",
-       0xfe65 : "dead_abovereversedcomma",
-       0xfe66 : "dead_dasia",
-       0xfed0 : "First_Virtual_Screen",
-       0xfed1 : "Prev_Virtual_Screen",
-       0xfed2 : "Next_Virtual_Screen",
-       0xfed4 : "Last_Virtual_Screen",
-       0xfed5 : "Terminate_Server",
-       0xfe70 : "AccessX_Enable",
-       0xfe71 : "AccessX_Feedback_Enable",
-       0xfe72 : "RepeatKeys_Enable",
-       0xfe73 : "SlowKeys_Enable",
-       0xfe74 : "BounceKeys_Enable",
-       0xfe75 : "StickyKeys_Enable",
-       0xfe76 : "MouseKeys_Enable",
-       0xfe77 : "MouseKeys_Accel_Enable",
-       0xfe78 : "Overlay1_Enable",
-       0xfe79 : "Overlay2_Enable",
-       0xfe7a : "AudibleBell_Enable",
-       0xfee0 : "Pointer_Left",
-       0xfee1 : "Pointer_Right",
-       0xfee2 : "Pointer_Up",
-       0xfee3 : "Pointer_Down",
-       0xfee4 : "Pointer_UpLeft",
-       0xfee5 : "Pointer_UpRight",
-       0xfee6 : "Pointer_DownLeft",
-       0xfee7 : "Pointer_DownRight",
-       0xfee8 : "Pointer_Button_Dflt",
-       0xfee9 : "Pointer_Button1",
-       0xfeea : "Pointer_Button2",
-       0xfeeb : "Pointer_Button3",
-       0xfeec : "Pointer_Button4",
-       0xfeed : "Pointer_Button5",
-       0xfeee : "Pointer_DblClick_Dflt",
-       0xfeef : "Pointer_DblClick1",
-       0xfef0 : "Pointer_DblClick2",
-       0xfef1 : "Pointer_DblClick3",
-       0xfef2 : "Pointer_DblClick4",
-       0xfef3 : "Pointer_DblClick5",
-       0xfef4 : "Pointer_Drag_Dflt",
-       0xfef5 : "Pointer_Drag1",
-       0xfef6 : "Pointer_Drag2",
-       0xfef7 : "Pointer_Drag3",
-       0xfef8 : "Pointer_Drag4",
-       0xfefd : "Pointer_Drag5",
-       0xfef9 : "Pointer_EnableKeys",
-       0xfefa : "Pointer_Accelerate",
-       0xfefb : "Pointer_DfltBtnNext",
-       0xfefc : "Pointer_DfltBtnPrev",
-       0xfd01 : "3270_Duplicate",
-       0xfd02 : "3270_FieldMark",
-       0xfd03 : "3270_Right2",
-       0xfd04 : "3270_Left2",
-       0xfd05 : "3270_BackTab",
-       0xfd06 : "3270_EraseEOF",
-       0xfd07 : "3270_EraseInput",
-       0xfd08 : "3270_Reset",
-       0xfd09 : "3270_Quit",
-       0xfd0a : "3270_PA1",
-       0xfd0b : "3270_PA2",
-       0xfd0c : "3270_PA3",
-       0xfd0d : "3270_Test",
-       0xfd0e : "3270_Attn",
-       0xfd0f : "3270_CursorBlink",
-       0xfd10 : "3270_AltCursor",
-       0xfd11 : "3270_KeyClick",
-       0xfd12 : "3270_Jump",
-       0xfd13 : "3270_Ident",
-       0xfd14 : "3270_Rule",
-       0xfd15 : "3270_Copy",
-       0xfd16 : "3270_Play",
-       0xfd17 : "3270_Setup",
-       0xfd18 : "3270_Record",
-       0xfd19 : "3270_ChangeScreen",
-       0xfd1a : "3270_DeleteWord",
-       0xfd1b : "3270_ExSelect",
-       0xfd1c : "3270_CursorSelect",
-       0xfd1d : "3270_PrintScreen",
-       0xfd1e : "3270_Enter",
-       0x0020 : "space",
-       0x0021 : "exclam",
-       0x0022 : "quotedbl",
-       0x0023 : "numbersign",
-       0x0024 : "dollar",
-       0x0025 : "percent",
-       0x0026 : "ampersand",
-       0x0027 : "apostrophe",
-       0x0027 : "quoteright",
-       0x0028 : "parenleft",
-       0x0029 : "parenright",
-       0x002a : "asterisk",
-       0x002b : "plus",
-       0x002c : "comma",
-       0x002d : "minus",
-       0x002e : "period",
-       0x002f : "slash",
-       0x0030 : "0",
-       0x0031 : "1",
-       0x0032 : "2",
-       0x0033 : "3",
-       0x0034 : "4",
-       0x0035 : "5",
-       0x0036 : "6",
-       0x0037 : "7",
-       0x0038 : "8",
-       0x0039 : "9",
-       0x003a : "colon",
-       0x003b : "semicolon",
-       0x003c : "less",
-       0x003d : "equal",
-       0x003e : "greater",
-       0x003f : "question",
-       0x0040 : "at",
-       0x0041 : "A",
-       0x0042 : "B",
-       0x0043 : "C",
-       0x0044 : "D",
-       0x0045 : "E",
-       0x0046 : "F",
-       0x0047 : "G",
-       0x0048 : "H",
-       0x0049 : "I",
-       0x004a : "J",
-       0x004b : "K",
-       0x004c : "L",
-       0x004d : "M",
-       0x004e : "N",
-       0x004f : "O",
-       0x0050 : "P",
-       0x0051 : "Q",
-       0x0052 : "R",
-       0x0053 : "S",
-       0x0054 : "T",
-       0x0055 : "U",
-       0x0056 : "V",
-       0x0057 : "W",
-       0x0058 : "X",
-       0x0059 : "Y",
-       0x005a : "Z",
-       0x005b : "bracketleft",
-       0x005c : "backslash",
-       0x005d : "bracketright",
-       0x005e : "asciicircum",
-       0x005f : "underscore",
-       0x0060 : "grave",
-       0x0060 : "quoteleft",
-       0x0061 : "a",
-       0x0062 : "b",
-       0x0063 : "c",
-       0x0064 : "d",
-       0x0065 : "e",
-       0x0066 : "f",
-       0x0067 : "g",
-       0x0068 : "h",
-       0x0069 : "i",
-       0x006a : "j",
-       0x006b : "k",
-       0x006c : "l",
-       0x006d : "m",
-       0x006e : "n",
-       0x006f : "o",
-       0x0070 : "p",
-       0x0071 : "q",
-       0x0072 : "r",
-       0x0073 : "s",
-       0x0074 : "t",
-       0x0075 : "u",
-       0x0076 : "v",
-       0x0077 : "w",
-       0x0078 : "x",
-       0x0079 : "y",
-       0x007a : "z",
-       0x007b : "braceleft",
-       0x007c : "bar",
-       0x007d : "braceright",
-       0x007e : "asciitilde",
-       0x00a0 : "nobreakspace",
-       0x00a1 : "exclamdown",
-       0x00a2 : "cent",
-       0x00a3 : "sterling",
-       0x00a4 : "currency",
-       0x00a5 : "yen",
-       0x00a6 : "brokenbar",
-       0x00a7 : "section",
-       0x00a8 : "diaeresis",
-       0x00a9 : "copyright",
-       0x00aa : "ordfeminine",
-       0x00ab : "guillemotleft",
-       0x00ac : "notsign",
-       0x00ad : "hyphen",
-       0x00ae : "registered",
-       0x00af : "macron",
-       0x00b0 : "degree",
-       0x00b1 : "plusminus",
-       0x00b2 : "twosuperior",
-       0x00b3 : "threesuperior",
-       0x00b4 : "acute",
-       0x00b5 : "mu",
-       0x00b6 : "paragraph",
-       0x00b7 : "periodcentered",
-       0x00b8 : "cedilla",
-       0x00b9 : "onesuperior",
-       0x00ba : "masculine",
-       0x00bb : "guillemotright",
-       0x00bc : "onequarter",
-       0x00bd : "onehalf",
-       0x00be : "threequarters",
-       0x00bf : "questiondown",
-       0x00c0 : "Agrave",
-       0x00c1 : "Aacute",
-       0x00c2 : "Acircumflex",
-       0x00c3 : "Atilde",
-       0x00c4 : "Adiaeresis",
-       0x00c5 : "Aring",
-       0x00c6 : "AE",
-       0x00c7 : "Ccedilla",
-       0x00c8 : "Egrave",
-       0x00c9 : "Eacute",
-       0x00ca : "Ecircumflex",
-       0x00cb : "Ediaeresis",
-       0x00cc : "Igrave",
-       0x00cd : "Iacute",
-       0x00ce : "Icircumflex",
-       0x00cf : "Idiaeresis",
-       0x00d0 : "ETH",
-       0x00d0 : "Eth",
-       0x00d1 : "Ntilde",
-       0x00d2 : "Ograve",
-       0x00d3 : "Oacute",
-       0x00d4 : "Ocircumflex",
-       0x00d5 : "Otilde",
-       0x00d6 : "Odiaeresis",
-       0x00d7 : "multiply",
-       0x00d8 : "Oslash",
-       0x00d8 : "Ooblique",
-       0x00d9 : "Ugrave",
-       0x00da : "Uacute",
-       0x00db : "Ucircumflex",
-       0x00dc : "Udiaeresis",
-       0x00dd : "Yacute",
-       0x00de : "THORN",
-       0x00de : "Thorn",
-       0x00df : "ssharp",
-       0x00e0 : "agrave",
-       0x00e1 : "aacute",
-       0x00e2 : "acircumflex",
-       0x00e3 : "atilde",
-       0x00e4 : "adiaeresis",
-       0x00e5 : "aring",
-       0x00e6 : "ae",
-       0x00e7 : "ccedilla",
-       0x00e8 : "egrave",
-       0x00e9 : "eacute",
-       0x00ea : "ecircumflex",
-       0x00eb : "ediaeresis",
-       0x00ec : "igrave",
-       0x00ed : "iacute",
-       0x00ee : "icircumflex",
-       0x00ef : "idiaeresis",
-       0x00f0 : "eth",
-       0x00f1 : "ntilde",
-       0x00f2 : "ograve",
-       0x00f3 : "oacute",
-       0x00f4 : "ocircumflex",
-       0x00f5 : "otilde",
-       0x00f6 : "odiaeresis",
-       0x00f7 : "division",
-       0x00f8 : "oslash",
-       0x00f8 : "ooblique",
-       0x00f9 : "ugrave",
-       0x00fa : "uacute",
-       0x00fb : "ucircumflex",
-       0x00fc : "udiaeresis",
-       0x00fd : "yacute",
-       0x00fe : "thorn",
-       0x00ff : "ydiaeresis",
-       0x01a1 : "Aogonek",
-       0x01a2 : "breve",
-       0x01a3 : "Lstroke",
-       0x01a5 : "Lcaron",
-       0x01a6 : "Sacute",
-       0x01a9 : "Scaron",
-       0x01aa : "Scedilla",
-       0x01ab : "Tcaron",
-       0x01ac : "Zacute",
-       0x01ae : "Zcaron",
-       0x01af : "Zabovedot",
-       0x01b1 : "aogonek",
-       0x01b2 : "ogonek",
-       0x01b3 : "lstroke",
-       0x01b5 : "lcaron",
-       0x01b6 : "sacute",
-       0x01b7 : "caron",
-       0x01b9 : "scaron",
-       0x01ba : "scedilla",
-       0x01bb : "tcaron",
-       0x01bc : "zacute",
-       0x01bd : "doubleacute",
-       0x01be : "zcaron",
-       0x01bf : "zabovedot",
-       0x01c0 : "Racute",
-       0x01c3 : "Abreve",
-       0x01c5 : "Lacute",
-       0x01c6 : "Cacute",
-       0x01c8 : "Ccaron",
-       0x01ca : "Eogonek",
-       0x01cc : "Ecaron",
-       0x01cf : "Dcaron",
-       0x01d0 : "Dstroke",
-       0x01d1 : "Nacute",
-       0x01d2 : "Ncaron",
-       0x01d5 : "Odoubleacute",
-       0x01d8 : "Rcaron",
-       0x01d9 : "Uring",
-       0x01db : "Udoubleacute",
-       0x01de : "Tcedilla",
-       0x01e0 : "racute",
-       0x01e3 : "abreve",
-       0x01e5 : "lacute",
-       0x01e6 : "cacute",
-       0x01e8 : "ccaron",
-       0x01ea : "eogonek",
-       0x01ec : "ecaron",
-       0x01ef : "dcaron",
-       0x01f0 : "dstroke",
-       0x01f1 : "nacute",
-       0x01f2 : "ncaron",
-       0x01f5 : "odoubleacute",
-       0x01fb : "udoubleacute",
-       0x01f8 : "rcaron",
-       0x01f9 : "uring",
-       0x01fe : "tcedilla",
-       0x01ff : "abovedot",
-       0x02a1 : "Hstroke",
-       0x02a6 : "Hcircumflex",
-       0x02a9 : "Iabovedot",
-       0x02ab : "Gbreve",
-       0x02ac : "Jcircumflex",
-       0x02b1 : "hstroke",
-       0x02b6 : "hcircumflex",
-       0x02b9 : "idotless",
-       0x02bb : "gbreve",
-       0x02bc : "jcircumflex",
-       0x02c5 : "Cabovedot",
-       0x02c6 : "Ccircumflex",
-       0x02d5 : "Gabovedot",
-       0x02d8 : "Gcircumflex",
-       0x02dd : "Ubreve",
-       0x02de : "Scircumflex",
-       0x02e5 : "cabovedot",
-       0x02e6 : "ccircumflex",
-       0x02f5 : "gabovedot",
-       0x02f8 : "gcircumflex",
-       0x02fd : "ubreve",
-       0x02fe : "scircumflex",
-       0x03a2 : "kra",
-       0x03a2 : "kappa",
-       0x03a3 : "Rcedilla",
-       0x03a5 : "Itilde",
-       0x03a6 : "Lcedilla",
-       0x03aa : "Emacron",
-       0x03ab : "Gcedilla",
-       0x03ac : "Tslash",
-       0x03b3 : "rcedilla",
-       0x03b5 : "itilde",
-       0x03b6 : "lcedilla",
-       0x03ba : "emacron",
-       0x03bb : "gcedilla",
-       0x03bc : "tslash",
-       0x03bd : "ENG",
-       0x03bf : "eng",
-       0x03c0 : "Amacron",
-       0x03c7 : "Iogonek",
-       0x03cc : "Eabovedot",
-       0x03cf : "Imacron",
-       0x03d1 : "Ncedilla",
-       0x03d2 : "Omacron",
-       0x03d3 : "Kcedilla",
-       0x03d9 : "Uogonek",
-       0x03dd : "Utilde",
-       0x03de : "Umacron",
-       0x03e0 : "amacron",
-       0x03e7 : "iogonek",
-       0x03ec : "eabovedot",
-       0x03ef : "imacron",
-       0x03f1 : "ncedilla",
-       0x03f2 : "omacron",
-       0x03f3 : "kcedilla",
-       0x03f9 : "uogonek",
-       0x03fd : "utilde",
-       0x03fe : "umacron",
-       0x1001e02 : "Babovedot",
-       0x1001e03 : "babovedot",
-       0x1001e0a : "Dabovedot",
-       0x1001e80 : "Wgrave",
-       0x1001e82 : "Wacute",
-       0x1001e0b : "dabovedot",
-       0x1001ef2 : "Ygrave",
-       0x1001e1e : "Fabovedot",
-       0x1001e1f : "fabovedot",
-       0x1001e40 : "Mabovedot",
-       0x1001e41 : "mabovedot",
-       0x1001e56 : "Pabovedot",
-       0x1001e81 : "wgrave",
-       0x1001e57 : "pabovedot",
-       0x1001e83 : "wacute",
-       0x1001e60 : "Sabovedot",
-       0x1001ef3 : "ygrave",
-       0x1001e84 : "Wdiaeresis",
-       0x1001e85 : "wdiaeresis",
-       0x1001e61 : "sabovedot",
-       0x1000174 : "Wcircumflex",
-       0x1001e6a : "Tabovedot",
-       0x1000176 : "Ycircumflex",
-       0x1000175 : "wcircumflex",
-       0x1001e6b : "tabovedot",
-       0x1000177 : "ycircumflex",
-       0x13bc : "OE",
-       0x13bd : "oe",
-       0x13be : "Ydiaeresis",
-       0x047e : "overline",
-       0x04a1 : "kana_fullstop",
-       0x04a2 : "kana_openingbracket",
-       0x04a3 : "kana_closingbracket",
-       0x04a4 : "kana_comma",
-       0x04a5 : "kana_conjunctive",
-       0x04a5 : "kana_middledot",
-       0x04a6 : "kana_WO",
-       0x04a7 : "kana_a",
-       0x04a8 : "kana_i",
-       0x04a9 : "kana_u",
-       0x04aa : "kana_e",
-       0x04ab : "kana_o",
-       0x04ac : "kana_ya",
-       0x04ad : "kana_yu",
-       0x04ae : "kana_yo",
-       0x04af : "kana_tsu",
-       0x04af : "kana_tu",
-       0x04b0 : "prolongedsound",
-       0x04b1 : "kana_A",
-       0x04b2 : "kana_I",
-       0x04b3 : "kana_U",
-       0x04b4 : "kana_E",
-       0x04b5 : "kana_O",
-       0x04b6 : "kana_KA",
-       0x04b7 : "kana_KI",
-       0x04b8 : "kana_KU",
-       0x04b9 : "kana_KE",
-       0x04ba : "kana_KO",
-       0x04bb : "kana_SA",
-       0x04bc : "kana_SHI",
-       0x04bd : "kana_SU",
-       0x04be : "kana_SE",
-       0x04bf : "kana_SO",
-       0x04c0 : "kana_TA",
-       0x04c1 : "kana_CHI",
-       0x04c1 : "kana_TI",
-       0x04c2 : "kana_TSU",
-       0x04c2 : "kana_TU",
-       0x04c3 : "kana_TE",
-       0x04c4 : "kana_TO",
-       0x04c5 : "kana_NA",
-       0x04c6 : "kana_NI",
-       0x04c7 : "kana_NU",
-       0x04c8 : "kana_NE",
-       0x04c9 : "kana_NO",
-       0x04ca : "kana_HA",
-       0x04cb : "kana_HI",
-       0x04cc : "kana_FU",
-       0x04cc : "kana_HU",
-       0x04cd : "kana_HE",
-       0x04ce : "kana_HO",
-       0x04cf : "kana_MA",
-       0x04d0 : "kana_MI",
-       0x04d1 : "kana_MU",
-       0x04d2 : "kana_ME",
-       0x04d3 : "kana_MO",
-       0x04d4 : "kana_YA",
-       0x04d5 : "kana_YU",
-       0x04d6 : "kana_YO",
-       0x04d7 : "kana_RA",
-       0x04d8 : "kana_RI",
-       0x04d9 : "kana_RU",
-       0x04da : "kana_RE",
-       0x04db : "kana_RO",
-       0x04dc : "kana_WA",
-       0x04dd : "kana_N",
-       0x04de : "voicedsound",
-       0x04df : "semivoicedsound",
-       0xff7e : "kana_switch",
-       0x10006f0 : "Farsi_0",
-       0x10006f1 : "Farsi_1",
-       0x10006f2 : "Farsi_2",
-       0x10006f3 : "Farsi_3",
-       0x10006f4 : "Farsi_4",
-       0x10006f5 : "Farsi_5",
-       0x10006f6 : "Farsi_6",
-       0x10006f7 : "Farsi_7",
-       0x10006f8 : "Farsi_8",
-       0x10006f9 : "Farsi_9",
-       0x100066a : "Arabic_percent",
-       0x1000670 : "Arabic_superscript_alef",
-       0x1000679 : "Arabic_tteh",
-       0x100067e : "Arabic_peh",
-       0x1000686 : "Arabic_tcheh",
-       0x1000688 : "Arabic_ddal",
-       0x1000691 : "Arabic_rreh",
-       0x05ac : "Arabic_comma",
-       0x10006d4 : "Arabic_fullstop",
-       0x1000660 : "Arabic_0",
-       0x1000661 : "Arabic_1",
-       0x1000662 : "Arabic_2",
-       0x1000663 : "Arabic_3",
-       0x1000664 : "Arabic_4",
-       0x1000665 : "Arabic_5",
-       0x1000666 : "Arabic_6",
-       0x1000667 : "Arabic_7",
-       0x1000668 : "Arabic_8",
-       0x1000669 : "Arabic_9",
-       0x05bb : "Arabic_semicolon",
-       0x05bf : "Arabic_question_mark",
-       0x05c1 : "Arabic_hamza",
-       0x05c2 : "Arabic_maddaonalef",
-       0x05c3 : "Arabic_hamzaonalef",
-       0x05c4 : "Arabic_hamzaonwaw",
-       0x05c5 : "Arabic_hamzaunderalef",
-       0x05c6 : "Arabic_hamzaonyeh",
-       0x05c7 : "Arabic_alef",
-       0x05c8 : "Arabic_beh",
-       0x05c9 : "Arabic_tehmarbuta",
-       0x05ca : "Arabic_teh",
-       0x05cb : "Arabic_theh",
-       0x05cc : "Arabic_jeem",
-       0x05cd : "Arabic_hah",
-       0x05ce : "Arabic_khah",
-       0x05cf : "Arabic_dal",
-       0x05d0 : "Arabic_thal",
-       0x05d1 : "Arabic_ra",
-       0x05d2 : "Arabic_zain",
-       0x05d3 : "Arabic_seen",
-       0x05d4 : "Arabic_sheen",
-       0x05d5 : "Arabic_sad",
-       0x05d6 : "Arabic_dad",
-       0x05d7 : "Arabic_tah",
-       0x05d8 : "Arabic_zah",
-       0x05d9 : "Arabic_ain",
-       0x05da : "Arabic_ghain",
-       0x05e0 : "Arabic_tatweel",
-       0x05e1 : "Arabic_feh",
-       0x05e2 : "Arabic_qaf",
-       0x05e3 : "Arabic_kaf",
-       0x05e4 : "Arabic_lam",
-       0x05e5 : "Arabic_meem",
-       0x05e6 : "Arabic_noon",
-       0x05e7 : "Arabic_ha",
-       0x05e7 : "Arabic_heh",
-       0x05e8 : "Arabic_waw",
-       0x05e9 : "Arabic_alefmaksura",
-       0x05ea : "Arabic_yeh",
-       0x05eb : "Arabic_fathatan",
-       0x05ec : "Arabic_dammatan",
-       0x05ed : "Arabic_kasratan",
-       0x05ee : "Arabic_fatha",
-       0x05ef : "Arabic_damma",
-       0x05f0 : "Arabic_kasra",
-       0x05f1 : "Arabic_shadda",
-       0x05f2 : "Arabic_sukun",
-       0x1000653 : "Arabic_madda_above",
-       0x1000654 : "Arabic_hamza_above",
-       0x1000655 : "Arabic_hamza_below",
-       0x1000698 : "Arabic_jeh",
-       0x10006a4 : "Arabic_veh",
-       0x10006a9 : "Arabic_keheh",
-       0x10006af : "Arabic_gaf",
-       0x10006ba : "Arabic_noon_ghunna",
-       0x10006be : "Arabic_heh_doachashmee",
-       0x10006cc : "Farsi_yeh",
-       0x10006cc : "Arabic_farsi_yeh",
-       0x10006d2 : "Arabic_yeh_baree",
-       0x10006c1 : "Arabic_heh_goal",
-       0xff7e : "Arabic_switch",
-       0x1000492 : "Cyrillic_GHE_bar",
-       0x1000493 : "Cyrillic_ghe_bar",
-       0x1000496 : "Cyrillic_ZHE_descender",
-       0x1000497 : "Cyrillic_zhe_descender",
-       0x100049a : "Cyrillic_KA_descender",
-       0x100049b : "Cyrillic_ka_descender",
-       0x100049c : "Cyrillic_KA_vertstroke",
-       0x100049d : "Cyrillic_ka_vertstroke",
-       0x10004a2 : "Cyrillic_EN_descender",
-       0x10004a3 : "Cyrillic_en_descender",
-       0x10004ae : "Cyrillic_U_straight",
-       0x10004af : "Cyrillic_u_straight",
-       0x10004b0 : "Cyrillic_U_straight_bar",
-       0x10004b1 : "Cyrillic_u_straight_bar",
-       0x10004b2 : "Cyrillic_HA_descender",
-       0x10004b3 : "Cyrillic_ha_descender",
-       0x10004b6 : "Cyrillic_CHE_descender",
-       0x10004b7 : "Cyrillic_che_descender",
-       0x10004b8 : "Cyrillic_CHE_vertstroke",
-       0x10004b9 : "Cyrillic_che_vertstroke",
-       0x10004ba : "Cyrillic_SHHA",
-       0x10004bb : "Cyrillic_shha",
-       0x10004d8 : "Cyrillic_SCHWA",
-       0x10004d9 : "Cyrillic_schwa",
-       0x10004e2 : "Cyrillic_I_macron",
-       0x10004e3 : "Cyrillic_i_macron",
-       0x10004e8 : "Cyrillic_O_bar",
-       0x10004e9 : "Cyrillic_o_bar",
-       0x10004ee : "Cyrillic_U_macron",
-       0x10004ef : "Cyrillic_u_macron",
-       0x06a1 : "Serbian_dje",
-       0x06a2 : "Macedonia_gje",
-       0x06a3 : "Cyrillic_io",
-       0x06a4 : "Ukrainian_ie",
-       0x06a4 : "Ukranian_je",
-       0x06a5 : "Macedonia_dse",
-       0x06a6 : "Ukrainian_i",
-       0x06a6 : "Ukranian_i",
-       0x06a7 : "Ukrainian_yi",
-       0x06a7 : "Ukranian_yi",
-       0x06a8 : "Cyrillic_je",
-       0x06a8 : "Serbian_je",
-       0x06a9 : "Cyrillic_lje",
-       0x06a9 : "Serbian_lje",
-       0x06aa : "Cyrillic_nje",
-       0x06aa : "Serbian_nje",
-       0x06ab : "Serbian_tshe",
-       0x06ac : "Macedonia_kje",
-       0x06ad : "Ukrainian_ghe_with_upturn",
-       0x06ae : "Byelorussian_shortu",
-       0x06af : "Cyrillic_dzhe",
-       0x06af : "Serbian_dze",
-       0x06b0 : "numerosign",
-       0x06b1 : "Serbian_DJE",
-       0x06b2 : "Macedonia_GJE",
-       0x06b3 : "Cyrillic_IO",
-       0x06b4 : "Ukrainian_IE",
-       0x06b4 : "Ukranian_JE",
-       0x06b5 : "Macedonia_DSE",
-       0x06b6 : "Ukrainian_I",
-       0x06b6 : "Ukranian_I",
-       0x06b7 : "Ukrainian_YI",
-       0x06b7 : "Ukranian_YI",
-       0x06b8 : "Cyrillic_JE",
-       0x06b8 : "Serbian_JE",
-       0x06b9 : "Cyrillic_LJE",
-       0x06b9 : "Serbian_LJE",
-       0x06ba : "Cyrillic_NJE",
-       0x06ba : "Serbian_NJE",
-       0x06bb : "Serbian_TSHE",
-       0x06bc : "Macedonia_KJE",
-       0x06bd : "Ukrainian_GHE_WITH_UPTURN",
-       0x06be : "Byelorussian_SHORTU",
-       0x06bf : "Cyrillic_DZHE",
-       0x06bf : "Serbian_DZE",
-       0x06c0 : "Cyrillic_yu",
-       0x06c1 : "Cyrillic_a",
-       0x06c2 : "Cyrillic_be",
-       0x06c3 : "Cyrillic_tse",
-       0x06c4 : "Cyrillic_de",
-       0x06c5 : "Cyrillic_ie",
-       0x06c6 : "Cyrillic_ef",
-       0x06c7 : "Cyrillic_ghe",
-       0x06c8 : "Cyrillic_ha",
-       0x06c9 : "Cyrillic_i",
-       0x06ca : "Cyrillic_shorti",
-       0x06cb : "Cyrillic_ka",
-       0x06cc : "Cyrillic_el",
-       0x06cd : "Cyrillic_em",
-       0x06ce : "Cyrillic_en",
-       0x06cf : "Cyrillic_o",
-       0x06d0 : "Cyrillic_pe",
-       0x06d1 : "Cyrillic_ya",
-       0x06d2 : "Cyrillic_er",
-       0x06d3 : "Cyrillic_es",
-       0x06d4 : "Cyrillic_te",
-       0x06d5 : "Cyrillic_u",
-       0x06d6 : "Cyrillic_zhe",
-       0x06d7 : "Cyrillic_ve",
-       0x06d8 : "Cyrillic_softsign",
-       0x06d9 : "Cyrillic_yeru",
-       0x06da : "Cyrillic_ze",
-       0x06db : "Cyrillic_sha",
-       0x06dc : "Cyrillic_e",
-       0x06dd : "Cyrillic_shcha",
-       0x06de : "Cyrillic_che",
-       0x06df : "Cyrillic_hardsign",
-       0x06e0 : "Cyrillic_YU",
-       0x06e1 : "Cyrillic_A",
-       0x06e2 : "Cyrillic_BE",
-       0x06e3 : "Cyrillic_TSE",
-       0x06e4 : "Cyrillic_DE",
-       0x06e5 : "Cyrillic_IE",
-       0x06e6 : "Cyrillic_EF",
-       0x06e7 : "Cyrillic_GHE",
-       0x06e8 : "Cyrillic_HA",
-       0x06e9 : "Cyrillic_I",
-       0x06ea : "Cyrillic_SHORTI",
-       0x06eb : "Cyrillic_KA",
-       0x06ec : "Cyrillic_EL",
-       0x06ed : "Cyrillic_EM",
-       0x06ee : "Cyrillic_EN",
-       0x06ef : "Cyrillic_O",
-       0x06f0 : "Cyrillic_PE",
-       0x06f1 : "Cyrillic_YA",
-       0x06f2 : "Cyrillic_ER",
-       0x06f3 : "Cyrillic_ES",
-       0x06f4 : "Cyrillic_TE",
-       0x06f5 : "Cyrillic_U",
-       0x06f6 : "Cyrillic_ZHE",
-       0x06f7 : "Cyrillic_VE",
-       0x06f8 : "Cyrillic_SOFTSIGN",
-       0x06f9 : "Cyrillic_YERU",
-       0x06fa : "Cyrillic_ZE",
-       0x06fb : "Cyrillic_SHA",
-       0x06fc : "Cyrillic_E",
-       0x06fd : "Cyrillic_SHCHA",
-       0x06fe : "Cyrillic_CHE",
-       0x06ff : "Cyrillic_HARDSIGN",
-       0x07a1 : "Greek_ALPHAaccent",
-       0x07a2 : "Greek_EPSILONaccent",
-       0x07a3 : "Greek_ETAaccent",
-       0x07a4 : "Greek_IOTAaccent",
-       0x07a5 : "Greek_IOTAdieresis",
-       0x07a5 : "Greek_IOTAdiaeresis",
-       0x07a7 : "Greek_OMICRONaccent",
-       0x07a8 : "Greek_UPSILONaccent",
-       0x07a9 : "Greek_UPSILONdieresis",
-       0x07ab : "Greek_OMEGAaccent",
-       0x07ae : "Greek_accentdieresis",
-       0x07af : "Greek_horizbar",
-       0x07b1 : "Greek_alphaaccent",
-       0x07b2 : "Greek_epsilonaccent",
-       0x07b3 : "Greek_etaaccent",
-       0x07b4 : "Greek_iotaaccent",
-       0x07b5 : "Greek_iotadieresis",
-       0x07b6 : "Greek_iotaaccentdieresis",
-       0x07b7 : "Greek_omicronaccent",
-       0x07b8 : "Greek_upsilonaccent",
-       0x07b9 : "Greek_upsilondieresis",
-       0x07ba : "Greek_upsilonaccentdieresis",
-       0x07bb : "Greek_omegaaccent",
-       0x07c1 : "Greek_ALPHA",
-       0x07c2 : "Greek_BETA",
-       0x07c3 : "Greek_GAMMA",
-       0x07c4 : "Greek_DELTA",
-       0x07c5 : "Greek_EPSILON",
-       0x07c6 : "Greek_ZETA",
-       0x07c7 : "Greek_ETA",
-       0x07c8 : "Greek_THETA",
-       0x07c9 : "Greek_IOTA",
-       0x07ca : "Greek_KAPPA",
-       0x07cb : "Greek_LAMDA",
-       0x07cb : "Greek_LAMBDA",
-       0x07cc : "Greek_MU",
-       0x07cd : "Greek_NU",
-       0x07ce : "Greek_XI",
-       0x07cf : "Greek_OMICRON",
-       0x07d0 : "Greek_PI",
-       0x07d1 : "Greek_RHO",
-       0x07d2 : "Greek_SIGMA",
-       0x07d4 : "Greek_TAU",
-       0x07d5 : "Greek_UPSILON",
-       0x07d6 : "Greek_PHI",
-       0x07d7 : "Greek_CHI",
-       0x07d8 : "Greek_PSI",
-       0x07d9 : "Greek_OMEGA",
-       0x07e1 : "Greek_alpha",
-       0x07e2 : "Greek_beta",
-       0x07e3 : "Greek_gamma",
-       0x07e4 : "Greek_delta",
-       0x07e5 : "Greek_epsilon",
-       0x07e6 : "Greek_zeta",
-       0x07e7 : "Greek_eta",
-       0x07e8 : "Greek_theta",
-       0x07e9 : "Greek_iota",
-       0x07ea : "Greek_kappa",
-       0x07eb : "Greek_lamda",
-       0x07eb : "Greek_lambda",
-       0x07ec : "Greek_mu",
-       0x07ed : "Greek_nu",
-       0x07ee : "Greek_xi",
-       0x07ef : "Greek_omicron",
-       0x07f0 : "Greek_pi",
-       0x07f1 : "Greek_rho",
-       0x07f2 : "Greek_sigma",
-       0x07f3 : "Greek_finalsmallsigma",
-       0x07f4 : "Greek_tau",
-       0x07f5 : "Greek_upsilon",
-       0x07f6 : "Greek_phi",
-       0x07f7 : "Greek_chi",
-       0x07f8 : "Greek_psi",
-       0x07f9 : "Greek_omega",
-       0xff7e : "Greek_switch",
-       0x08a1 : "leftradical",
-       0x08a2 : "topleftradical",
-       0x08a3 : "horizconnector",
-       0x08a4 : "topintegral",
-       0x08a5 : "botintegral",
-       0x08a6 : "vertconnector",
-       0x08a7 : "topleftsqbracket",
-       0x08a8 : "botleftsqbracket",
-       0x08a9 : "toprightsqbracket",
-       0x08aa : "botrightsqbracket",
-       0x08ab : "topleftparens",
-       0x08ac : "botleftparens",
-       0x08ad : "toprightparens",
-       0x08ae : "botrightparens",
-       0x08af : "leftmiddlecurlybrace",
-       0x08b0 : "rightmiddlecurlybrace",
-       0x08b1 : "topleftsummation",
-       0x08b2 : "botleftsummation",
-       0x08b3 : "topvertsummationconnector",
-       0x08b4 : "botvertsummationconnector",
-       0x08b5 : "toprightsummation",
-       0x08b6 : "botrightsummation",
-       0x08b7 : "rightmiddlesummation",
-       0x08bc : "lessthanequal",
-       0x08bd : "notequal",
-       0x08be : "greaterthanequal",
-       0x08bf : "integral",
-       0x08c0 : "therefore",
-       0x08c1 : "variation",
-       0x08c2 : "infinity",
-       0x08c5 : "nabla",
-       0x08c8 : "approximate",
-       0x08c9 : "similarequal",
-       0x08cd : "ifonlyif",
-       0x08ce : "implies",
-       0x08cf : "identical",
-       0x08d6 : "radical",
-       0x08da : "includedin",
-       0x08db : "includes",
-       0x08dc : "intersection",
-       0x08dd : "union",
-       0x08de : "logicaland",
-       0x08df : "logicalor",
-       0x08ef : "partialderivative",
-       0x08f6 : "function",
-       0x08fb : "leftarrow",
-       0x08fc : "uparrow",
-       0x08fd : "rightarrow",
-       0x08fe : "downarrow",
-       0x09df : "blank",
-       0x09e0 : "soliddiamond",
-       0x09e1 : "checkerboard",
-       0x09e2 : "ht",
-       0x09e3 : "ff",
-       0x09e4 : "cr",
-       0x09e5 : "lf",
-       0x09e8 : "nl",
-       0x09e9 : "vt",
-       0x09ea : "lowrightcorner",
-       0x09eb : "uprightcorner",
-       0x09ec : "upleftcorner",
-       0x09ed : "lowleftcorner",
-       0x09ee : "crossinglines",
-       0x09ef : "horizlinescan1",
-       0x09f0 : "horizlinescan3",
-       0x09f1 : "horizlinescan5",
-       0x09f2 : "horizlinescan7",
-       0x09f3 : "horizlinescan9",
-       0x09f4 : "leftt",
-       0x09f5 : "rightt",
-       0x09f6 : "bott",
-       0x09f7 : "topt",
-       0x09f8 : "vertbar",
-       0x0aa1 : "emspace",
-       0x0aa2 : "enspace",
-       0x0aa3 : "em3space",
-       0x0aa4 : "em4space",
-       0x0aa5 : "digitspace",
-       0x0aa6 : "punctspace",
-       0x0aa7 : "thinspace",
-       0x0aa8 : "hairspace",
-       0x0aa9 : "emdash",
-       0x0aaa : "endash",
-       0x0aac : "signifblank",
-       0x0aae : "ellipsis",
-       0x0aaf : "doubbaselinedot",
-       0x0ab0 : "onethird",
-       0x0ab1 : "twothirds",
-       0x0ab2 : "onefifth",
-       0x0ab3 : "twofifths",
-       0x0ab4 : "threefifths",
-       0x0ab5 : "fourfifths",
-       0x0ab6 : "onesixth",
-       0x0ab7 : "fivesixths",
-       0x0ab8 : "careof",
-       0x0abb : "figdash",
-       0x0abc : "leftanglebracket",
-       0x0abd : "decimalpoint",
-       0x0abe : "rightanglebracket",
-       0x0abf : "marker",
-       0x0ac3 : "oneeighth",
-       0x0ac4 : "threeeighths",
-       0x0ac5 : "fiveeighths",
-       0x0ac6 : "seveneighths",
-       0x0ac9 : "trademark",
-       0x0aca : "signaturemark",
-       0x0acb : "trademarkincircle",
-       0x0acc : "leftopentriangle",
-       0x0acd : "rightopentriangle",
-       0x0ace : "emopencircle",
-       0x0acf : "emopenrectangle",
-       0x0ad0 : "leftsinglequotemark",
-       0x0ad1 : "rightsinglequotemark",
-       0x0ad2 : "leftdoublequotemark",
-       0x0ad3 : "rightdoublequotemark",
-       0x0ad4 : "prescription",
-       0x0ad6 : "minutes",
-       0x0ad7 : "seconds",
-       0x0ad9 : "latincross",
-       0x0ada : "hexagram",
-       0x0adb : "filledrectbullet",
-       0x0adc : "filledlefttribullet",
-       0x0add : "filledrighttribullet",
-       0x0ade : "emfilledcircle",
-       0x0adf : "emfilledrect",
-       0x0ae0 : "enopencircbullet",
-       0x0ae1 : "enopensquarebullet",
-       0x0ae2 : "openrectbullet",
-       0x0ae3 : "opentribulletup",
-       0x0ae4 : "opentribulletdown",
-       0x0ae5 : "openstar",
-       0x0ae6 : "enfilledcircbullet",
-       0x0ae7 : "enfilledsqbullet",
-       0x0ae8 : "filledtribulletup",
-       0x0ae9 : "filledtribulletdown",
-       0x0aea : "leftpointer",
-       0x0aeb : "rightpointer",
-       0x0aec : "club",
-       0x0aed : "diamond",
-       0x0aee : "heart",
-       0x0af0 : "maltesecross",
-       0x0af1 : "dagger",
-       0x0af2 : "doubledagger",
-       0x0af3 : "checkmark",
-       0x0af4 : "ballotcross",
-       0x0af5 : "musicalsharp",
-       0x0af6 : "musicalflat",
-       0x0af7 : "malesymbol",
-       0x0af8 : "femalesymbol",
-       0x0af9 : "telephone",
-       0x0afa : "telephonerecorder",
-       0x0afb : "phonographcopyright",
-       0x0afc : "caret",
-       0x0afd : "singlelowquotemark",
-       0x0afe : "doublelowquotemark",
-       0x0aff : "cursor",
-       0x0ba3 : "leftcaret",
-       0x0ba6 : "rightcaret",
-       0x0ba8 : "downcaret",
-       0x0ba9 : "upcaret",
-       0x0bc0 : "overbar",
-       0x0bc2 : "downtack",
-       0x0bc3 : "upshoe",
-       0x0bc4 : "downstile",
-       0x0bc6 : "underbar",
-       0x0bca : "jot",
-       0x0bcc : "quad",
-       0x0bce : "uptack",
-       0x0bcf : "circle",
-       0x0bd3 : "upstile",
-       0x0bd6 : "downshoe",
-       0x0bd8 : "rightshoe",
-       0x0bda : "leftshoe",
-       0x0bdc : "lefttack",
-       0x0bfc : "righttack",
-       0x0cdf : "hebrew_doublelowline",
-       0x0ce0 : "hebrew_aleph",
-       0x0ce1 : "hebrew_bet",
-       0x0ce1 : "hebrew_beth",
-       0x0ce2 : "hebrew_gimel",
-       0x0ce2 : "hebrew_gimmel",
-       0x0ce3 : "hebrew_dalet",
-       0x0ce3 : "hebrew_daleth",
-       0x0ce4 : "hebrew_he",
-       0x0ce5 : "hebrew_waw",
-       0x0ce6 : "hebrew_zain",
-       0x0ce6 : "hebrew_zayin",
-       0x0ce7 : "hebrew_chet",
-       0x0ce7 : "hebrew_het",
-       0x0ce8 : "hebrew_tet",
-       0x0ce8 : "hebrew_teth",
-       0x0ce9 : "hebrew_yod",
-       0x0cea : "hebrew_finalkaph",
-       0x0ceb : "hebrew_kaph",
-       0x0cec : "hebrew_lamed",
-       0x0ced : "hebrew_finalmem",
-       0x0cee : "hebrew_mem",
-       0x0cef : "hebrew_finalnun",
-       0x0cf0 : "hebrew_nun",
-       0x0cf1 : "hebrew_samech",
-       0x0cf1 : "hebrew_samekh",
-       0x0cf2 : "hebrew_ayin",
-       0x0cf3 : "hebrew_finalpe",
-       0x0cf4 : "hebrew_pe",
-       0x0cf5 : "hebrew_finalzade",
-       0x0cf5 : "hebrew_finalzadi",
-       0x0cf6 : "hebrew_zade",
-       0x0cf6 : "hebrew_zadi",
-       0x0cf7 : "hebrew_qoph",
-       0x0cf7 : "hebrew_kuf",
-       0x0cf8 : "hebrew_resh",
-       0x0cf9 : "hebrew_shin",
-       0x0cfa : "hebrew_taw",
-       0x0cfa : "hebrew_taf",
-       0xff7e : "Hebrew_switch",
-       0x0da1 : "Thai_kokai",
-       0x0da2 : "Thai_khokhai",
-       0x0da3 : "Thai_khokhuat",
-       0x0da4 : "Thai_khokhwai",
-       0x0da5 : "Thai_khokhon",
-       0x0da6 : "Thai_khorakhang",
-       0x0da7 : "Thai_ngongu",
-       0x0da8 : "Thai_chochan",
-       0x0da9 : "Thai_choching",
-       0x0daa : "Thai_chochang",
-       0x0dab : "Thai_soso",
-       0x0dac : "Thai_chochoe",
-       0x0dad : "Thai_yoying",
-       0x0dae : "Thai_dochada",
-       0x0daf : "Thai_topatak",
-       0x0db0 : "Thai_thothan",
-       0x0db1 : "Thai_thonangmontho",
-       0x0db2 : "Thai_thophuthao",
-       0x0db3 : "Thai_nonen",
-       0x0db4 : "Thai_dodek",
-       0x0db5 : "Thai_totao",
-       0x0db6 : "Thai_thothung",
-       0x0db7 : "Thai_thothahan",
-       0x0db8 : "Thai_thothong",
-       0x0db9 : "Thai_nonu",
-       0x0dba : "Thai_bobaimai",
-       0x0dbb : "Thai_popla",
-       0x0dbc : "Thai_phophung",
-       0x0dbd : "Thai_fofa",
-       0x0dbe : "Thai_phophan",
-       0x0dbf : "Thai_fofan",
-       0x0dc0 : "Thai_phosamphao",
-       0x0dc1 : "Thai_moma",
-       0x0dc2 : "Thai_yoyak",
-       0x0dc3 : "Thai_rorua",
-       0x0dc4 : "Thai_ru",
-       0x0dc5 : "Thai_loling",
-       0x0dc6 : "Thai_lu",
-       0x0dc7 : "Thai_wowaen",
-       0x0dc8 : "Thai_sosala",
-       0x0dc9 : "Thai_sorusi",
-       0x0dca : "Thai_sosua",
-       0x0dcb : "Thai_hohip",
-       0x0dcc : "Thai_lochula",
-       0x0dcd : "Thai_oang",
-       0x0dce : "Thai_honokhuk",
-       0x0dcf : "Thai_paiyannoi",
-       0x0dd0 : "Thai_saraa",
-       0x0dd1 : "Thai_maihanakat",
-       0x0dd2 : "Thai_saraaa",
-       0x0dd3 : "Thai_saraam",
-       0x0dd4 : "Thai_sarai",
-       0x0dd5 : "Thai_saraii",
-       0x0dd6 : "Thai_saraue",
-       0x0dd7 : "Thai_sarauee",
-       0x0dd8 : "Thai_sarau",
-       0x0dd9 : "Thai_sarauu",
-       0x0dda : "Thai_phinthu",
-       0x0dde : "Thai_maihanakat_maitho",
-       0x0ddf : "Thai_baht",
-       0x0de0 : "Thai_sarae",
-       0x0de1 : "Thai_saraae",
-       0x0de2 : "Thai_sarao",
-       0x0de3 : "Thai_saraaimaimuan",
-       0x0de4 : "Thai_saraaimaimalai",
-       0x0de5 : "Thai_lakkhangyao",
-       0x0de6 : "Thai_maiyamok",
-       0x0de7 : "Thai_maitaikhu",
-       0x0de8 : "Thai_maiek",
-       0x0de9 : "Thai_maitho",
-       0x0dea : "Thai_maitri",
-       0x0deb : "Thai_maichattawa",
-       0x0dec : "Thai_thanthakhat",
-       0x0ded : "Thai_nikhahit",
-       0x0df0 : "Thai_leksun",
-       0x0df1 : "Thai_leknung",
-       0x0df2 : "Thai_leksong",
-       0x0df3 : "Thai_leksam",
-       0x0df4 : "Thai_leksi",
-       0x0df5 : "Thai_lekha",
-       0x0df6 : "Thai_lekhok",
-       0x0df7 : "Thai_lekchet",
-       0x0df8 : "Thai_lekpaet",
-       0x0df9 : "Thai_lekkao",
-       0xff31 : "Hangul",
-       0xff32 : "Hangul_Start",
-       0xff33 : "Hangul_End",
-       0xff34 : "Hangul_Hanja",
-       0xff35 : "Hangul_Jamo",
-       0xff36 : "Hangul_Romaja",
-       0xff37 : "Hangul_Codeinput",
-       0xff38 : "Hangul_Jeonja",
-       0xff39 : "Hangul_Banja",
-       0xff3a : "Hangul_PreHanja",
-       0xff3b : "Hangul_PostHanja",
-       0xff3c : "Hangul_SingleCandidate",
-       0xff3d : "Hangul_MultipleCandidate",
-       0xff3e : "Hangul_PreviousCandidate",
-       0xff3f : "Hangul_Special",
-       0xff7e : "Hangul_switch",
-       0x0ea1 : "Hangul_Kiyeog",
-       0x0ea2 : "Hangul_SsangKiyeog",
-       0x0ea3 : "Hangul_KiyeogSios",
-       0x0ea4 : "Hangul_Nieun",
-       0x0ea5 : "Hangul_NieunJieuj",
-       0x0ea6 : "Hangul_NieunHieuh",
-       0x0ea7 : "Hangul_Dikeud",
-       0x0ea8 : "Hangul_SsangDikeud",
-       0x0ea9 : "Hangul_Rieul",
-       0x0eaa : "Hangul_RieulKiyeog",
-       0x0eab : "Hangul_RieulMieum",
-       0x0eac : "Hangul_RieulPieub",
-       0x0ead : "Hangul_RieulSios",
-       0x0eae : "Hangul_RieulTieut",
-       0x0eaf : "Hangul_RieulPhieuf",
-       0x0eb0 : "Hangul_RieulHieuh",
-       0x0eb1 : "Hangul_Mieum",
-       0x0eb2 : "Hangul_Pieub",
-       0x0eb3 : "Hangul_SsangPieub",
-       0x0eb4 : "Hangul_PieubSios",
-       0x0eb5 : "Hangul_Sios",
-       0x0eb6 : "Hangul_SsangSios",
-       0x0eb7 : "Hangul_Ieung",
-       0x0eb8 : "Hangul_Jieuj",
-       0x0eb9 : "Hangul_SsangJieuj",
-       0x0eba : "Hangul_Cieuc",
-       0x0ebb : "Hangul_Khieuq",
-       0x0ebc : "Hangul_Tieut",
-       0x0ebd : "Hangul_Phieuf",
-       0x0ebe : "Hangul_Hieuh",
-       0x0ebf : "Hangul_A",
-       0x0ec0 : "Hangul_AE",
-       0x0ec1 : "Hangul_YA",
-       0x0ec2 : "Hangul_YAE",
-       0x0ec3 : "Hangul_EO",
-       0x0ec4 : "Hangul_E",
-       0x0ec5 : "Hangul_YEO",
-       0x0ec6 : "Hangul_YE",
-       0x0ec7 : "Hangul_O",
-       0x0ec8 : "Hangul_WA",
-       0x0ec9 : "Hangul_WAE",
-       0x0eca : "Hangul_OE",
-       0x0ecb : "Hangul_YO",
-       0x0ecc : "Hangul_U",
-       0x0ecd : "Hangul_WEO",
-       0x0ece : "Hangul_WE",
-       0x0ecf : "Hangul_WI",
-       0x0ed0 : "Hangul_YU",
-       0x0ed1 : "Hangul_EU",
-       0x0ed2 : "Hangul_YI",
-       0x0ed3 : "Hangul_I",
-       0x0ed4 : "Hangul_J_Kiyeog",
-       0x0ed5 : "Hangul_J_SsangKiyeog",
-       0x0ed6 : "Hangul_J_KiyeogSios",
-       0x0ed7 : "Hangul_J_Nieun",
-       0x0ed8 : "Hangul_J_NieunJieuj",
-       0x0ed9 : "Hangul_J_NieunHieuh",
-       0x0eda : "Hangul_J_Dikeud",
-       0x0edb : "Hangul_J_Rieul",
-       0x0edc : "Hangul_J_RieulKiyeog",
-       0x0edd : "Hangul_J_RieulMieum",
-       0x0ede : "Hangul_J_RieulPieub",
-       0x0edf : "Hangul_J_RieulSios",
-       0x0ee0 : "Hangul_J_RieulTieut",
-       0x0ee1 : "Hangul_J_RieulPhieuf",
-       0x0ee2 : "Hangul_J_RieulHieuh",
-       0x0ee3 : "Hangul_J_Mieum",
-       0x0ee4 : "Hangul_J_Pieub",
-       0x0ee5 : "Hangul_J_PieubSios",
-       0x0ee6 : "Hangul_J_Sios",
-       0x0ee7 : "Hangul_J_SsangSios",
-       0x0ee8 : "Hangul_J_Ieung",
-       0x0ee9 : "Hangul_J_Jieuj",
-       0x0eea : "Hangul_J_Cieuc",
-       0x0eeb : "Hangul_J_Khieuq",
-       0x0eec : "Hangul_J_Tieut",
-       0x0eed : "Hangul_J_Phieuf",
-       0x0eee : "Hangul_J_Hieuh",
-       0x0eef : "Hangul_RieulYeorinHieuh",
-       0x0ef0 : "Hangul_SunkyeongeumMieum",
-       0x0ef1 : "Hangul_SunkyeongeumPieub",
-       0x0ef2 : "Hangul_PanSios",
-       0x0ef3 : "Hangul_KkogjiDalrinIeung",
-       0x0ef4 : "Hangul_SunkyeongeumPhieuf",
-       0x0ef5 : "Hangul_YeorinHieuh",
-       0x0ef6 : "Hangul_AraeA",
-       0x0ef7 : "Hangul_AraeAE",
-       0x0ef8 : "Hangul_J_PanSios",
-       0x0ef9 : "Hangul_J_KkogjiDalrinIeung",
-       0x0efa : "Hangul_J_YeorinHieuh",
-       0x0eff : "Korean_Won",
-       0x1000587 : "Armenian_ligature_ew",
-       0x1000589 : "Armenian_full_stop",
-       0x1000589 : "Armenian_verjaket",
-       0x100055d : "Armenian_separation_mark",
-       0x100055d : "Armenian_but",
-       0x100058a : "Armenian_hyphen",
-       0x100058a : "Armenian_yentamna",
-       0x100055c : "Armenian_exclam",
-       0x100055c : "Armenian_amanak",
-       0x100055b : "Armenian_accent",
-       0x100055b : "Armenian_shesht",
-       0x100055e : "Armenian_question",
-       0x100055e : "Armenian_paruyk",
-       0x1000531 : "Armenian_AYB",
-       0x1000561 : "Armenian_ayb",
-       0x1000532 : "Armenian_BEN",
-       0x1000562 : "Armenian_ben",
-       0x1000533 : "Armenian_GIM",
-       0x1000563 : "Armenian_gim",
-       0x1000534 : "Armenian_DA",
-       0x1000564 : "Armenian_da",
-       0x1000535 : "Armenian_YECH",
-       0x1000565 : "Armenian_yech",
-       0x1000536 : "Armenian_ZA",
-       0x1000566 : "Armenian_za",
-       0x1000537 : "Armenian_E",
-       0x1000567 : "Armenian_e",
-       0x1000538 : "Armenian_AT",
-       0x1000568 : "Armenian_at",
-       0x1000539 : "Armenian_TO",
-       0x1000569 : "Armenian_to",
-       0x100053a : "Armenian_ZHE",
-       0x100056a : "Armenian_zhe",
-       0x100053b : "Armenian_INI",
-       0x100056b : "Armenian_ini",
-       0x100053c : "Armenian_LYUN",
-       0x100056c : "Armenian_lyun",
-       0x100053d : "Armenian_KHE",
-       0x100056d : "Armenian_khe",
-       0x100053e : "Armenian_TSA",
-       0x100056e : "Armenian_tsa",
-       0x100053f : "Armenian_KEN",
-       0x100056f : "Armenian_ken",
-       0x1000540 : "Armenian_HO",
-       0x1000570 : "Armenian_ho",
-       0x1000541 : "Armenian_DZA",
-       0x1000571 : "Armenian_dza",
-       0x1000542 : "Armenian_GHAT",
-       0x1000572 : "Armenian_ghat",
-       0x1000543 : "Armenian_TCHE",
-       0x1000573 : "Armenian_tche",
-       0x1000544 : "Armenian_MEN",
-       0x1000574 : "Armenian_men",
-       0x1000545 : "Armenian_HI",
-       0x1000575 : "Armenian_hi",
-       0x1000546 : "Armenian_NU",
-       0x1000576 : "Armenian_nu",
-       0x1000547 : "Armenian_SHA",
-       0x1000577 : "Armenian_sha",
-       0x1000548 : "Armenian_VO",
-       0x1000578 : "Armenian_vo",
-       0x1000549 : "Armenian_CHA",
-       0x1000579 : "Armenian_cha",
-       0x100054a : "Armenian_PE",
-       0x100057a : "Armenian_pe",
-       0x100054b : "Armenian_JE",
-       0x100057b : "Armenian_je",
-       0x100054c : "Armenian_RA",
-       0x100057c : "Armenian_ra",
-       0x100054d : "Armenian_SE",
-       0x100057d : "Armenian_se",
-       0x100054e : "Armenian_VEV",
-       0x100057e : "Armenian_vev",
-       0x100054f : "Armenian_TYUN",
-       0x100057f : "Armenian_tyun",
-       0x1000550 : "Armenian_RE",
-       0x1000580 : "Armenian_re",
-       0x1000551 : "Armenian_TSO",
-       0x1000581 : "Armenian_tso",
-       0x1000552 : "Armenian_VYUN",
-       0x1000582 : "Armenian_vyun",
-       0x1000553 : "Armenian_PYUR",
-       0x1000583 : "Armenian_pyur",
-       0x1000554 : "Armenian_KE",
-       0x1000584 : "Armenian_ke",
-       0x1000555 : "Armenian_O",
-       0x1000585 : "Armenian_o",
-       0x1000556 : "Armenian_FE",
-       0x1000586 : "Armenian_fe",
-       0x100055a : "Armenian_apostrophe",
-       0x10010d0 : "Georgian_an",
-       0x10010d1 : "Georgian_ban",
-       0x10010d2 : "Georgian_gan",
-       0x10010d3 : "Georgian_don",
-       0x10010d4 : "Georgian_en",
-       0x10010d5 : "Georgian_vin",
-       0x10010d6 : "Georgian_zen",
-       0x10010d7 : "Georgian_tan",
-       0x10010d8 : "Georgian_in",
-       0x10010d9 : "Georgian_kan",
-       0x10010da : "Georgian_las",
-       0x10010db : "Georgian_man",
-       0x10010dc : "Georgian_nar",
-       0x10010dd : "Georgian_on",
-       0x10010de : "Georgian_par",
-       0x10010df : "Georgian_zhar",
-       0x10010e0 : "Georgian_rae",
-       0x10010e1 : "Georgian_san",
-       0x10010e2 : "Georgian_tar",
-       0x10010e3 : "Georgian_un",
-       0x10010e4 : "Georgian_phar",
-       0x10010e5 : "Georgian_khar",
-       0x10010e6 : "Georgian_ghan",
-       0x10010e7 : "Georgian_qar",
-       0x10010e8 : "Georgian_shin",
-       0x10010e9 : "Georgian_chin",
-       0x10010ea : "Georgian_can",
-       0x10010eb : "Georgian_jil",
-       0x10010ec : "Georgian_cil",
-       0x10010ed : "Georgian_char",
-       0x10010ee : "Georgian_xan",
-       0x10010ef : "Georgian_jhan",
-       0x10010f0 : "Georgian_hae",
-       0x10010f1 : "Georgian_he",
-       0x10010f2 : "Georgian_hie",
-       0x10010f3 : "Georgian_we",
-       0x10010f4 : "Georgian_har",
-       0x10010f5 : "Georgian_hoe",
-       0x10010f6 : "Georgian_fi",
-       0x1001e8a : "Xabovedot",
-       0x100012c : "Ibreve",
-       0x10001b5 : "Zstroke",
-       0x10001e6 : "Gcaron",
-       0x10001d1 : "Ocaron",
-       0x100019f : "Obarred",
-       0x1001e8b : "xabovedot",
-       0x100012d : "ibreve",
-       0x10001b6 : "zstroke",
-       0x10001e7 : "gcaron",
-       0x10001d2 : "ocaron",
-       0x1000275 : "obarred",
-       0x100018f : "SCHWA",
-       0x1000259 : "schwa",
-       0x1001e36 : "Lbelowdot",
-       0x1001e37 : "lbelowdot",
-       0x1001ea0 : "Abelowdot",
-       0x1001ea1 : "abelowdot",
-       0x1001ea2 : "Ahook",
-       0x1001ea3 : "ahook",
-       0x1001ea4 : "Acircumflexacute",
-       0x1001ea5 : "acircumflexacute",
-       0x1001ea6 : "Acircumflexgrave",
-       0x1001ea7 : "acircumflexgrave",
-       0x1001ea8 : "Acircumflexhook",
-       0x1001ea9 : "acircumflexhook",
-       0x1001eaa : "Acircumflextilde",
-       0x1001eab : "acircumflextilde",
-       0x1001eac : "Acircumflexbelowdot",
-       0x1001ead : "acircumflexbelowdot",
-       0x1001eae : "Abreveacute",
-       0x1001eaf : "abreveacute",
-       0x1001eb0 : "Abrevegrave",
-       0x1001eb1 : "abrevegrave",
-       0x1001eb2 : "Abrevehook",
-       0x1001eb3 : "abrevehook",
-       0x1001eb4 : "Abrevetilde",
-       0x1001eb5 : "abrevetilde",
-       0x1001eb6 : "Abrevebelowdot",
-       0x1001eb7 : "abrevebelowdot",
-       0x1001eb8 : "Ebelowdot",
-       0x1001eb9 : "ebelowdot",
-       0x1001eba : "Ehook",
-       0x1001ebb : "ehook",
-       0x1001ebc : "Etilde",
-       0x1001ebd : "etilde",
-       0x1001ebe : "Ecircumflexacute",
-       0x1001ebf : "ecircumflexacute",
-       0x1001ec0 : "Ecircumflexgrave",
-       0x1001ec1 : "ecircumflexgrave",
-       0x1001ec2 : "Ecircumflexhook",
-       0x1001ec3 : "ecircumflexhook",
-       0x1001ec4 : "Ecircumflextilde",
-       0x1001ec5 : "ecircumflextilde",
-       0x1001ec6 : "Ecircumflexbelowdot",
-       0x1001ec7 : "ecircumflexbelowdot",
-       0x1001ec8 : "Ihook",
-       0x1001ec9 : "ihook",
-       0x1001eca : "Ibelowdot",
-       0x1001ecb : "ibelowdot",
-       0x1001ecc : "Obelowdot",
-       0x1001ecd : "obelowdot",
-       0x1001ece : "Ohook",
-       0x1001ecf : "ohook",
-       0x1001ed0 : "Ocircumflexacute",
-       0x1001ed1 : "ocircumflexacute",
-       0x1001ed2 : "Ocircumflexgrave",
-       0x1001ed3 : "ocircumflexgrave",
-       0x1001ed4 : "Ocircumflexhook",
-       0x1001ed5 : "ocircumflexhook",
-       0x1001ed6 : "Ocircumflextilde",
-       0x1001ed7 : "ocircumflextilde",
-       0x1001ed8 : "Ocircumflexbelowdot",
-       0x1001ed9 : "ocircumflexbelowdot",
-       0x1001eda : "Ohornacute",
-       0x1001edb : "ohornacute",
-       0x1001edc : "Ohorngrave",
-       0x1001edd : "ohorngrave",
-       0x1001ede : "Ohornhook",
-       0x1001edf : "ohornhook",
-       0x1001ee0 : "Ohorntilde",
-       0x1001ee1 : "ohorntilde",
-       0x1001ee2 : "Ohornbelowdot",
-       0x1001ee3 : "ohornbelowdot",
-       0x1001ee4 : "Ubelowdot",
-       0x1001ee5 : "ubelowdot",
-       0x1001ee6 : "Uhook",
-       0x1001ee7 : "uhook",
-       0x1001ee8 : "Uhornacute",
-       0x1001ee9 : "uhornacute",
-       0x1001eea : "Uhorngrave",
-       0x1001eeb : "uhorngrave",
-       0x1001eec : "Uhornhook",
-       0x1001eed : "uhornhook",
-       0x1001eee : "Uhorntilde",
-       0x1001eef : "uhorntilde",
-       0x1001ef0 : "Uhornbelowdot",
-       0x1001ef1 : "uhornbelowdot",
-       0x1001ef4 : "Ybelowdot",
-       0x1001ef5 : "ybelowdot",
-       0x1001ef6 : "Yhook",
-       0x1001ef7 : "yhook",
-       0x1001ef8 : "Ytilde",
-       0x1001ef9 : "ytilde",
-       0x10001a0 : "Ohorn",
-       0x10001a1 : "ohorn",
-       0x10001af : "Uhorn",
-       0x10001b0 : "uhorn",
-       0x10020a0 : "EcuSign",
-       0x10020a1 : "ColonSign",
-       0x10020a2 : "CruzeiroSign",
-       0x10020a3 : "FFrancSign",
-       0x10020a4 : "LiraSign",
-       0x10020a5 : "MillSign",
-       0x10020a6 : "NairaSign",
-       0x10020a7 : "PesetaSign",
-       0x10020a8 : "RupeeSign",
-       0x10020a9 : "WonSign",
-       0x10020aa : "NewSheqelSign",
-       0x10020ab : "DongSign",
-       0x20ac : "EuroSign",
-       0x1002070 : "zerosuperior",
-       0x1002074 : "foursuperior",
-       0x1002075 : "fivesuperior",
-       0x1002076 : "sixsuperior",
-       0x1002077 : "sevensuperior",
-       0x1002078 : "eightsuperior",
-       0x1002079 : "ninesuperior",
-       0x1002080 : "zerosubscript",
-       0x1002081 : "onesubscript",
-       0x1002082 : "twosubscript",
-       0x1002083 : "threesubscript",
-       0x1002084 : "foursubscript",
-       0x1002085 : "fivesubscript",
-       0x1002086 : "sixsubscript",
-       0x1002087 : "sevensubscript",
-       0x1002088 : "eightsubscript",
-       0x1002089 : "ninesubscript",
-       0x1002202 : "partdifferential",
-       0x1002205 : "emptyset",
-       0x1002208 : "elementof",
-       0x1002209 : "notelementof",
-       0x100220B : "containsas",
-       0x100221A : "squareroot",
-       0x100221B : "cuberoot",
-       0x100221C : "fourthroot",
-       0x100222C : "dintegral",
-       0x100222D : "tintegral",
-       0x1002235 : "because",
-       0x1002248 : "approxeq",
-       0x1002247 : "notapproxeq",
-       0x1002262 : "notidentical",
-       0x1002263 : "stricteq",
-       0xfff1 : "braille_dot_1",
-       0xfff2 : "braille_dot_2",
-       0xfff3 : "braille_dot_3",
-       0xfff4 : "braille_dot_4",
-       0xfff5 : "braille_dot_5",
-       0xfff6 : "braille_dot_6",
-       0xfff7 : "braille_dot_7",
-       0xfff8 : "braille_dot_8",
-       0xfff9 : "braille_dot_9",
-       0xfffa : "braille_dot_10",
-       0x1002800 : "braille_blank",
-       0x1002801 : "braille_dots_1",
-       0x1002802 : "braille_dots_2",
-       0x1002803 : "braille_dots_12",
-       0x1002804 : "braille_dots_3",
-       0x1002805 : "braille_dots_13",
-       0x1002806 : "braille_dots_23",
-       0x1002807 : "braille_dots_123",
-       0x1002808 : "braille_dots_4",
-       0x1002809 : "braille_dots_14",
-       0x100280a : "braille_dots_24",
-       0x100280b : "braille_dots_124",
-       0x100280c : "braille_dots_34",
-       0x100280d : "braille_dots_134",
-       0x100280e : "braille_dots_234",
-       0x100280f : "braille_dots_1234",
-       0x1002810 : "braille_dots_5",
-       0x1002811 : "braille_dots_15",
-       0x1002812 : "braille_dots_25",
-       0x1002813 : "braille_dots_125",
-       0x1002814 : "braille_dots_35",
-       0x1002815 : "braille_dots_135",
-       0x1002816 : "braille_dots_235",
-       0x1002817 : "braille_dots_1235",
-       0x1002818 : "braille_dots_45",
-       0x1002819 : "braille_dots_145",
-       0x100281a : "braille_dots_245",
-       0x100281b : "braille_dots_1245",
-       0x100281c : "braille_dots_345",
-       0x100281d : "braille_dots_1345",
-       0x100281e : "braille_dots_2345",
-       0x100281f : "braille_dots_12345",
-       0x1002820 : "braille_dots_6",
-       0x1002821 : "braille_dots_16",
-       0x1002822 : "braille_dots_26",
-       0x1002823 : "braille_dots_126",
-       0x1002824 : "braille_dots_36",
-       0x1002825 : "braille_dots_136",
-       0x1002826 : "braille_dots_236",
-       0x1002827 : "braille_dots_1236",
-       0x1002828 : "braille_dots_46",
-       0x1002829 : "braille_dots_146",
-       0x100282a : "braille_dots_246",
-       0x100282b : "braille_dots_1246",
-       0x100282c : "braille_dots_346",
-       0x100282d : "braille_dots_1346",
-       0x100282e : "braille_dots_2346",
-       0x100282f : "braille_dots_12346",
-       0x1002830 : "braille_dots_56",
-       0x1002831 : "braille_dots_156",
-       0x1002832 : "braille_dots_256",
-       0x1002833 : "braille_dots_1256",
-       0x1002834 : "braille_dots_356",
-       0x1002835 : "braille_dots_1356",
-       0x1002836 : "braille_dots_2356",
-       0x1002837 : "braille_dots_12356",
-       0x1002838 : "braille_dots_456",
-       0x1002839 : "braille_dots_1456",
-       0x100283a : "braille_dots_2456",
-       0x100283b : "braille_dots_12456",
-       0x100283c : "braille_dots_3456",
-       0x100283d : "braille_dots_13456",
-       0x100283e : "braille_dots_23456",
-       0x100283f : "braille_dots_123456",
-       0x1002840 : "braille_dots_7",
-       0x1002841 : "braille_dots_17",
-       0x1002842 : "braille_dots_27",
-       0x1002843 : "braille_dots_127",
-       0x1002844 : "braille_dots_37",
-       0x1002845 : "braille_dots_137",
-       0x1002846 : "braille_dots_237",
-       0x1002847 : "braille_dots_1237",
-       0x1002848 : "braille_dots_47",
-       0x1002849 : "braille_dots_147",
-       0x100284a : "braille_dots_247",
-       0x100284b : "braille_dots_1247",
-       0x100284c : "braille_dots_347",
-       0x100284d : "braille_dots_1347",
-       0x100284e : "braille_dots_2347",
-       0x100284f : "braille_dots_12347",
-       0x1002850 : "braille_dots_57",
-       0x1002851 : "braille_dots_157",
-       0x1002852 : "braille_dots_257",
-       0x1002853 : "braille_dots_1257",
-       0x1002854 : "braille_dots_357",
-       0x1002855 : "braille_dots_1357",
-       0x1002856 : "braille_dots_2357",
-       0x1002857 : "braille_dots_12357",
-       0x1002858 : "braille_dots_457",
-       0x1002859 : "braille_dots_1457",
-       0x100285a : "braille_dots_2457",
-       0x100285b : "braille_dots_12457",
-       0x100285c : "braille_dots_3457",
-       0x100285d : "braille_dots_13457",
-       0x100285e : "braille_dots_23457",
-       0x100285f : "braille_dots_123457",
-       0x1002860 : "braille_dots_67",
-       0x1002861 : "braille_dots_167",
-       0x1002862 : "braille_dots_267",
-       0x1002863 : "braille_dots_1267",
-       0x1002864 : "braille_dots_367",
-       0x1002865 : "braille_dots_1367",
-       0x1002866 : "braille_dots_2367",
-       0x1002867 : "braille_dots_12367",
-       0x1002868 : "braille_dots_467",
-       0x1002869 : "braille_dots_1467",
-       0x100286a : "braille_dots_2467",
-       0x100286b : "braille_dots_12467",
-       0x100286c : "braille_dots_3467",
-       0x100286d : "braille_dots_13467",
-       0x100286e : "braille_dots_23467",
-       0x100286f : "braille_dots_123467",
-       0x1002870 : "braille_dots_567",
-       0x1002871 : "braille_dots_1567",
-       0x1002872 : "braille_dots_2567",
-       0x1002873 : "braille_dots_12567",
-       0x1002874 : "braille_dots_3567",
-       0x1002875 : "braille_dots_13567",
-       0x1002876 : "braille_dots_23567",
-       0x1002877 : "braille_dots_123567",
-       0x1002878 : "braille_dots_4567",
-       0x1002879 : "braille_dots_14567",
-       0x100287a : "braille_dots_24567",
-       0x100287b : "braille_dots_124567",
-       0x100287c : "braille_dots_34567",
-       0x100287d : "braille_dots_134567",
-       0x100287e : "braille_dots_234567",
-       0x100287f : "braille_dots_1234567",
-       0x1002880 : "braille_dots_8",
-       0x1002881 : "braille_dots_18",
-       0x1002882 : "braille_dots_28",
-       0x1002883 : "braille_dots_128",
-       0x1002884 : "braille_dots_38",
-       0x1002885 : "braille_dots_138",
-       0x1002886 : "braille_dots_238",
-       0x1002887 : "braille_dots_1238",
-       0x1002888 : "braille_dots_48",
-       0x1002889 : "braille_dots_148",
-       0x100288a : "braille_dots_248",
-       0x100288b : "braille_dots_1248",
-       0x100288c : "braille_dots_348",
-       0x100288d : "braille_dots_1348",
-       0x100288e : "braille_dots_2348",
-       0x100288f : "braille_dots_12348",
-       0x1002890 : "braille_dots_58",
-       0x1002891 : "braille_dots_158",
-       0x1002892 : "braille_dots_258",
-       0x1002893 : "braille_dots_1258",
-       0x1002894 : "braille_dots_358",
-       0x1002895 : "braille_dots_1358",
-       0x1002896 : "braille_dots_2358",
-       0x1002897 : "braille_dots_12358",
-       0x1002898 : "braille_dots_458",
-       0x1002899 : "braille_dots_1458",
-       0x100289a : "braille_dots_2458",
-       0x100289b : "braille_dots_12458",
-       0x100289c : "braille_dots_3458",
-       0x100289d : "braille_dots_13458",
-       0x100289e : "braille_dots_23458",
-       0x100289f : "braille_dots_123458",
-       0x10028a0 : "braille_dots_68",
-       0x10028a1 : "braille_dots_168",
-       0x10028a2 : "braille_dots_268",
-       0x10028a3 : "braille_dots_1268",
-       0x10028a4 : "braille_dots_368",
-       0x10028a5 : "braille_dots_1368",
-       0x10028a6 : "braille_dots_2368",
-       0x10028a7 : "braille_dots_12368",
-       0x10028a8 : "braille_dots_468",
-       0x10028a9 : "braille_dots_1468",
-       0x10028aa : "braille_dots_2468",
-       0x10028ab : "braille_dots_12468",
-       0x10028ac : "braille_dots_3468",
-       0x10028ad : "braille_dots_13468",
-       0x10028ae : "braille_dots_23468",
-       0x10028af : "braille_dots_123468",
-       0x10028b0 : "braille_dots_568",
-       0x10028b1 : "braille_dots_1568",
-       0x10028b2 : "braille_dots_2568",
-       0x10028b3 : "braille_dots_12568",
-       0x10028b4 : "braille_dots_3568",
-       0x10028b5 : "braille_dots_13568",
-       0x10028b6 : "braille_dots_23568",
-       0x10028b7 : "braille_dots_123568",
-       0x10028b8 : "braille_dots_4568",
-       0x10028b9 : "braille_dots_14568",
-       0x10028ba : "braille_dots_24568",
-       0x10028bb : "braille_dots_124568",
-       0x10028bc : "braille_dots_34568",
-       0x10028bd : "braille_dots_134568",
-       0x10028be : "braille_dots_234568",
-       0x10028bf : "braille_dots_1234568",
-       0x10028c0 : "braille_dots_78",
-       0x10028c1 : "braille_dots_178",
-       0x10028c2 : "braille_dots_278",
-       0x10028c3 : "braille_dots_1278",
-       0x10028c4 : "braille_dots_378",
-       0x10028c5 : "braille_dots_1378",
-       0x10028c6 : "braille_dots_2378",
-       0x10028c7 : "braille_dots_12378",
-       0x10028c8 : "braille_dots_478",
-       0x10028c9 : "braille_dots_1478",
-       0x10028ca : "braille_dots_2478",
-       0x10028cb : "braille_dots_12478",
-       0x10028cc : "braille_dots_3478",
-       0x10028cd : "braille_dots_13478",
-       0x10028ce : "braille_dots_23478",
-       0x10028cf : "braille_dots_123478",
-       0x10028d0 : "braille_dots_578",
-       0x10028d1 : "braille_dots_1578",
-       0x10028d2 : "braille_dots_2578",
-       0x10028d3 : "braille_dots_12578",
-       0x10028d4 : "braille_dots_3578",
-       0x10028d5 : "braille_dots_13578",
-       0x10028d6 : "braille_dots_23578",
-       0x10028d7 : "braille_dots_123578",
-       0x10028d8 : "braille_dots_4578",
-       0x10028d9 : "braille_dots_14578",
-       0x10028da : "braille_dots_24578",
-       0x10028db : "braille_dots_124578",
-       0x10028dc : "braille_dots_34578",
-       0x10028dd : "braille_dots_134578",
-       0x10028de : "braille_dots_234578",
-       0x10028df : "braille_dots_1234578",
-       0x10028e0 : "braille_dots_678",
-       0x10028e1 : "braille_dots_1678",
-       0x10028e2 : "braille_dots_2678",
-       0x10028e3 : "braille_dots_12678",
-       0x10028e4 : "braille_dots_3678",
-       0x10028e5 : "braille_dots_13678",
-       0x10028e6 : "braille_dots_23678",
-       0x10028e7 : "braille_dots_123678",
-       0x10028e8 : "braille_dots_4678",
-       0x10028e9 : "braille_dots_14678",
-       0x10028ea : "braille_dots_24678",
-       0x10028eb : "braille_dots_124678",
-       0x10028ec : "braille_dots_34678",
-       0x10028ed : "braille_dots_134678",
-       0x10028ee : "braille_dots_234678",
-       0x10028ef : "braille_dots_1234678",
-       0x10028f0 : "braille_dots_5678",
-       0x10028f1 : "braille_dots_15678",
-       0x10028f2 : "braille_dots_25678",
-       0x10028f3 : "braille_dots_125678",
-       0x10028f4 : "braille_dots_35678",
-       0x10028f5 : "braille_dots_135678",
-       0x10028f6 : "braille_dots_235678",
-       0x10028f7 : "braille_dots_1235678",
-       0x10028f8 : "braille_dots_45678",
-       0x10028f9 : "braille_dots_145678",
-       0x10028fa : "braille_dots_245678",
-       0x10028fb : "braille_dots_1245678",
-       0x10028fc : "braille_dots_345678",
-       0x10028fd : "braille_dots_1345678",
-       0x10028fe : "braille_dots_2345678",
-       0x10028ff : "braille_dots_12345678"
+    0xffffff : "VoidSymbol",
+    0xff08 : "BackSpace",
+    0xff09 : "Tab",
+    0xff0a : "Linefeed",
+    0xff0b : "Clear",
+    0xff0d : "Return",
+    0xff13 : "Pause",
+    0xff14 : "Scroll_Lock",
+    0xff15 : "Sys_Req",
+    0xff1b : "Escape",
+    0xffff : "Delete",
+    0xff20 : "Multi_key",
+    0xff37 : "Codeinput",
+    0xff3c : "SingleCandidate",
+    0xff3d : "MultipleCandidate",
+    0xff3e : "PreviousCandidate",
+    0xff21 : "Kanji",
+    0xff22 : "Muhenkan",
+    0xff23 : "Henkan_Mode",
+    0xff23 : "Henkan",
+    0xff24 : "Romaji",
+    0xff25 : "Hiragana",
+    0xff26 : "Katakana",
+    0xff27 : "Hiragana_Katakana",
+    0xff28 : "Zenkaku",
+    0xff29 : "Hankaku",
+    0xff2a : "Zenkaku_Hankaku",
+    0xff2b : "Touroku",
+    0xff2c : "Massyo",
+    0xff2d : "Kana_Lock",
+    0xff2e : "Kana_Shift",
+    0xff2f : "Eisu_Shift",
+    0xff30 : "Eisu_toggle",
+    0xff37 : "Kanji_Bangou",
+    0xff3d : "Zen_Koho",
+    0xff3e : "Mae_Koho",
+    0xff50 : "Home",
+    0xff51 : "Left",
+    0xff52 : "Up",
+    0xff53 : "Right",
+    0xff54 : "Down",
+    0xff55 : "Prior",
+    0xff55 : "Page_Up",
+    0xff56 : "Next",
+    0xff56 : "Page_Down",
+    0xff57 : "End",
+    0xff58 : "Begin",
+    0xff60 : "Select",
+    0xff61 : "Print",
+    0xff62 : "Execute",
+    0xff63 : "Insert",
+    0xff65 : "Undo",
+    0xff66 : "Redo",
+    0xff67 : "Menu",
+    0xff68 : "Find",
+    0xff69 : "Cancel",
+    0xff6a : "Help",
+    0xff6b : "Break",
+    0xff7e : "Mode_switch",
+    0xff7e : "script_switch",
+    0xff7f : "Num_Lock",
+    0xff80 : "KP_Space",
+    0xff89 : "KP_Tab",
+    0xff8d : "KP_Enter",
+    0xff91 : "KP_F1",
+    0xff92 : "KP_F2",
+    0xff93 : "KP_F3",
+    0xff94 : "KP_F4",
+    0xff95 : "KP_Home",
+    0xff96 : "KP_Left",
+    0xff97 : "KP_Up",
+    0xff98 : "KP_Right",
+    0xff99 : "KP_Down",
+    0xff9a : "KP_Prior",
+    0xff9a : "KP_Page_Up",
+    0xff9b : "KP_Next",
+    0xff9b : "KP_Page_Down",
+    0xff9c : "KP_End",
+    0xff9d : "KP_Begin",
+    0xff9e : "KP_Insert",
+    0xff9f : "KP_Delete",
+    0xffbd : "KP_Equal",
+    0xffaa : "KP_Multiply",
+    0xffab : "KP_Add",
+    0xffac : "KP_Separator",
+    0xffad : "KP_Subtract",
+    0xffae : "KP_Decimal",
+    0xffaf : "KP_Divide",
+    0xffb0 : "KP_0",
+    0xffb1 : "KP_1",
+    0xffb2 : "KP_2",
+    0xffb3 : "KP_3",
+    0xffb4 : "KP_4",
+    0xffb5 : "KP_5",
+    0xffb6 : "KP_6",
+    0xffb7 : "KP_7",
+    0xffb8 : "KP_8",
+    0xffb9 : "KP_9",
+    0xffbe : "F1",
+    0xffbf : "F2",
+    0xffc0 : "F3",
+    0xffc1 : "F4",
+    0xffc2 : "F5",
+    0xffc3 : "F6",
+    0xffc4 : "F7",
+    0xffc5 : "F8",
+    0xffc6 : "F9",
+    0xffc7 : "F10",
+    0xffc8 : "F11",
+    0xffc8 : "L1",
+    0xffc9 : "F12",
+    0xffc9 : "L2",
+    0xffca : "F13",
+    0xffca : "L3",
+    0xffcb : "F14",
+    0xffcb : "L4",
+    0xffcc : "F15",
+    0xffcc : "L5",
+    0xffcd : "F16",
+    0xffcd : "L6",
+    0xffce : "F17",
+    0xffce : "L7",
+    0xffcf : "F18",
+    0xffcf : "L8",
+    0xffd0 : "F19",
+    0xffd0 : "L9",
+    0xffd1 : "F20",
+    0xffd1 : "L10",
+    0xffd2 : "F21",
+    0xffd2 : "R1",
+    0xffd3 : "F22",
+    0xffd3 : "R2",
+    0xffd4 : "F23",
+    0xffd4 : "R3",
+    0xffd5 : "F24",
+    0xffd5 : "R4",
+    0xffd6 : "F25",
+    0xffd6 : "R5",
+    0xffd7 : "F26",
+    0xffd7 : "R6",
+    0xffd8 : "F27",
+    0xffd8 : "R7",
+    0xffd9 : "F28",
+    0xffd9 : "R8",
+    0xffda : "F29",
+    0xffda : "R9",
+    0xffdb : "F30",
+    0xffdb : "R10",
+    0xffdc : "F31",
+    0xffdc : "R11",
+    0xffdd : "F32",
+    0xffdd : "R12",
+    0xffde : "F33",
+    0xffde : "R13",
+    0xffdf : "F34",
+    0xffdf : "R14",
+    0xffe0 : "F35",
+    0xffe0 : "R15",
+    0xffe1 : "Shift_L",
+    0xffe2 : "Shift_R",
+    0xffe3 : "Control_L",
+    0xffe4 : "Control_R",
+    0xffe5 : "Caps_Lock",
+    0xffe6 : "Shift_Lock",
+    0xffe7 : "Meta_L",
+    0xffe8 : "Meta_R",
+    0xffe9 : "Alt_L",
+    0xffea : "Alt_R",
+    0xffeb : "Super_L",
+    0xffec : "Super_R",
+    0xffed : "Hyper_L",
+    0xffee : "Hyper_R",
+    0xfe01 : "ISO_Lock",
+    0xfe02 : "ISO_Level2_Latch",
+    0xfe03 : "ISO_Level3_Shift",
+    0xfe04 : "ISO_Level3_Latch",
+    0xfe05 : "ISO_Level3_Lock",
+    0xfe11 : "ISO_Level5_Shift",
+    0xfe12 : "ISO_Level5_Latch",
+    0xfe13 : "ISO_Level5_Lock",
+    0xff7e : "ISO_Group_Shift",
+    0xfe06 : "ISO_Group_Latch",
+    0xfe07 : "ISO_Group_Lock",
+    0xfe08 : "ISO_Next_Group",
+    0xfe09 : "ISO_Next_Group_Lock",
+    0xfe0a : "ISO_Prev_Group",
+    0xfe0b : "ISO_Prev_Group_Lock",
+    0xfe0c : "ISO_First_Group",
+    0xfe0d : "ISO_First_Group_Lock",
+    0xfe0e : "ISO_Last_Group",
+    0xfe0f : "ISO_Last_Group_Lock",
+    0xfe20 : "ISO_Left_Tab",
+    0xfe21 : "ISO_Move_Line_Up",
+    0xfe22 : "ISO_Move_Line_Down",
+    0xfe23 : "ISO_Partial_Line_Up",
+    0xfe24 : "ISO_Partial_Line_Down",
+    0xfe25 : "ISO_Partial_Space_Left",
+    0xfe26 : "ISO_Partial_Space_Right",
+    0xfe27 : "ISO_Set_Margin_Left",
+    0xfe28 : "ISO_Set_Margin_Right",
+    0xfe29 : "ISO_Release_Margin_Left",
+    0xfe2a : "ISO_Release_Margin_Right",
+    0xfe2b : "ISO_Release_Both_Margins",
+    0xfe2c : "ISO_Fast_Cursor_Left",
+    0xfe2d : "ISO_Fast_Cursor_Right",
+    0xfe2e : "ISO_Fast_Cursor_Up",
+    0xfe2f : "ISO_Fast_Cursor_Down",
+    0xfe30 : "ISO_Continuous_Underline",
+    0xfe31 : "ISO_Discontinuous_Underline",
+    0xfe32 : "ISO_Emphasize",
+    0xfe33 : "ISO_Center_Object",
+    0xfe34 : "ISO_Enter",
+    0xfe50 : "dead_grave",
+    0xfe51 : "dead_acute",
+    0xfe52 : "dead_circumflex",
+    0xfe53 : "dead_tilde",
+    0xfe54 : "dead_macron",
+    0xfe55 : "dead_breve",
+    0xfe56 : "dead_abovedot",
+    0xfe57 : "dead_diaeresis",
+    0xfe58 : "dead_abovering",
+    0xfe59 : "dead_doubleacute",
+    0xfe5a : "dead_caron",
+    0xfe5b : "dead_cedilla",
+    0xfe5c : "dead_ogonek",
+    0xfe5d : "dead_iota",
+    0xfe5e : "dead_voiced_sound",
+    0xfe5f : "dead_semivoiced_sound",
+    0xfe60 : "dead_belowdot",
+    0xfe61 : "dead_hook",
+    0xfe62 : "dead_horn",
+    0xfe63 : "dead_stroke",
+    0xfe64 : "dead_abovecomma",
+    0xfe64 : "dead_psili",
+    0xfe65 : "dead_abovereversedcomma",
+    0xfe66 : "dead_dasia",
+    0xfed0 : "First_Virtual_Screen",
+    0xfed1 : "Prev_Virtual_Screen",
+    0xfed2 : "Next_Virtual_Screen",
+    0xfed4 : "Last_Virtual_Screen",
+    0xfed5 : "Terminate_Server",
+    0xfe70 : "AccessX_Enable",
+    0xfe71 : "AccessX_Feedback_Enable",
+    0xfe72 : "RepeatKeys_Enable",
+    0xfe73 : "SlowKeys_Enable",
+    0xfe74 : "BounceKeys_Enable",
+    0xfe75 : "StickyKeys_Enable",
+    0xfe76 : "MouseKeys_Enable",
+    0xfe77 : "MouseKeys_Accel_Enable",
+    0xfe78 : "Overlay1_Enable",
+    0xfe79 : "Overlay2_Enable",
+    0xfe7a : "AudibleBell_Enable",
+    0xfee0 : "Pointer_Left",
+    0xfee1 : "Pointer_Right",
+    0xfee2 : "Pointer_Up",
+    0xfee3 : "Pointer_Down",
+    0xfee4 : "Pointer_UpLeft",
+    0xfee5 : "Pointer_UpRight",
+    0xfee6 : "Pointer_DownLeft",
+    0xfee7 : "Pointer_DownRight",
+    0xfee8 : "Pointer_Button_Dflt",
+    0xfee9 : "Pointer_Button1",
+    0xfeea : "Pointer_Button2",
+    0xfeeb : "Pointer_Button3",
+    0xfeec : "Pointer_Button4",
+    0xfeed : "Pointer_Button5",
+    0xfeee : "Pointer_DblClick_Dflt",
+    0xfeef : "Pointer_DblClick1",
+    0xfef0 : "Pointer_DblClick2",
+    0xfef1 : "Pointer_DblClick3",
+    0xfef2 : "Pointer_DblClick4",
+    0xfef3 : "Pointer_DblClick5",
+    0xfef4 : "Pointer_Drag_Dflt",
+    0xfef5 : "Pointer_Drag1",
+    0xfef6 : "Pointer_Drag2",
+    0xfef7 : "Pointer_Drag3",
+    0xfef8 : "Pointer_Drag4",
+    0xfefd : "Pointer_Drag5",
+    0xfef9 : "Pointer_EnableKeys",
+    0xfefa : "Pointer_Accelerate",
+    0xfefb : "Pointer_DfltBtnNext",
+    0xfefc : "Pointer_DfltBtnPrev",
+    0xfd01 : "3270_Duplicate",
+    0xfd02 : "3270_FieldMark",
+    0xfd03 : "3270_Right2",
+    0xfd04 : "3270_Left2",
+    0xfd05 : "3270_BackTab",
+    0xfd06 : "3270_EraseEOF",
+    0xfd07 : "3270_EraseInput",
+    0xfd08 : "3270_Reset",
+    0xfd09 : "3270_Quit",
+    0xfd0a : "3270_PA1",
+    0xfd0b : "3270_PA2",
+    0xfd0c : "3270_PA3",
+    0xfd0d : "3270_Test",
+    0xfd0e : "3270_Attn",
+    0xfd0f : "3270_CursorBlink",
+    0xfd10 : "3270_AltCursor",
+    0xfd11 : "3270_KeyClick",
+    0xfd12 : "3270_Jump",
+    0xfd13 : "3270_Ident",
+    0xfd14 : "3270_Rule",
+    0xfd15 : "3270_Copy",
+    0xfd16 : "3270_Play",
+    0xfd17 : "3270_Setup",
+    0xfd18 : "3270_Record",
+    0xfd19 : "3270_ChangeScreen",
+    0xfd1a : "3270_DeleteWord",
+    0xfd1b : "3270_ExSelect",
+    0xfd1c : "3270_CursorSelect",
+    0xfd1d : "3270_PrintScreen",
+    0xfd1e : "3270_Enter",
+    0x0020 : "space",
+    0x0021 : "exclam",
+    0x0022 : "quotedbl",
+    0x0023 : "numbersign",
+    0x0024 : "dollar",
+    0x0025 : "percent",
+    0x0026 : "ampersand",
+    0x0027 : "apostrophe",
+    0x0027 : "quoteright",
+    0x0028 : "parenleft",
+    0x0029 : "parenright",
+    0x002a : "asterisk",
+    0x002b : "plus",
+    0x002c : "comma",
+    0x002d : "minus",
+    0x002e : "period",
+    0x002f : "slash",
+    0x0030 : "0",
+    0x0031 : "1",
+    0x0032 : "2",
+    0x0033 : "3",
+    0x0034 : "4",
+    0x0035 : "5",
+    0x0036 : "6",
+    0x0037 : "7",
+    0x0038 : "8",
+    0x0039 : "9",
+    0x003a : "colon",
+    0x003b : "semicolon",
+    0x003c : "less",
+    0x003d : "equal",
+    0x003e : "greater",
+    0x003f : "question",
+    0x0040 : "at",
+    0x0041 : "A",
+    0x0042 : "B",
+    0x0043 : "C",
+    0x0044 : "D",
+    0x0045 : "E",
+    0x0046 : "F",
+    0x0047 : "G",
+    0x0048 : "H",
+    0x0049 : "I",
+    0x004a : "J",
+    0x004b : "K",
+    0x004c : "L",
+    0x004d : "M",
+    0x004e : "N",
+    0x004f : "O",
+    0x0050 : "P",
+    0x0051 : "Q",
+    0x0052 : "R",
+    0x0053 : "S",
+    0x0054 : "T",
+    0x0055 : "U",
+    0x0056 : "V",
+    0x0057 : "W",
+    0x0058 : "X",
+    0x0059 : "Y",
+    0x005a : "Z",
+    0x005b : "bracketleft",
+    0x005c : "backslash",
+    0x005d : "bracketright",
+    0x005e : "asciicircum",
+    0x005f : "underscore",
+    0x0060 : "grave",
+    0x0060 : "quoteleft",
+    0x0061 : "a",
+    0x0062 : "b",
+    0x0063 : "c",
+    0x0064 : "d",
+    0x0065 : "e",
+    0x0066 : "f",
+    0x0067 : "g",
+    0x0068 : "h",
+    0x0069 : "i",
+    0x006a : "j",
+    0x006b : "k",
+    0x006c : "l",
+    0x006d : "m",
+    0x006e : "n",
+    0x006f : "o",
+    0x0070 : "p",
+    0x0071 : "q",
+    0x0072 : "r",
+    0x0073 : "s",
+    0x0074 : "t",
+    0x0075 : "u",
+    0x0076 : "v",
+    0x0077 : "w",
+    0x0078 : "x",
+    0x0079 : "y",
+    0x007a : "z",
+    0x007b : "braceleft",
+    0x007c : "bar",
+    0x007d : "braceright",
+    0x007e : "asciitilde",
+    0x00a0 : "nobreakspace",
+    0x00a1 : "exclamdown",
+    0x00a2 : "cent",
+    0x00a3 : "sterling",
+    0x00a4 : "currency",
+    0x00a5 : "yen",
+    0x00a6 : "brokenbar",
+    0x00a7 : "section",
+    0x00a8 : "diaeresis",
+    0x00a9 : "copyright",
+    0x00aa : "ordfeminine",
+    0x00ab : "guillemotleft",
+    0x00ac : "notsign",
+    0x00ad : "hyphen",
+    0x00ae : "registered",
+    0x00af : "macron",
+    0x00b0 : "degree",
+    0x00b1 : "plusminus",
+    0x00b2 : "twosuperior",
+    0x00b3 : "threesuperior",
+    0x00b4 : "acute",
+    0x00b5 : "mu",
+    0x00b6 : "paragraph",
+    0x00b7 : "periodcentered",
+    0x00b8 : "cedilla",
+    0x00b9 : "onesuperior",
+    0x00ba : "masculine",
+    0x00bb : "guillemotright",
+    0x00bc : "onequarter",
+    0x00bd : "onehalf",
+    0x00be : "threequarters",
+    0x00bf : "questiondown",
+    0x00c0 : "Agrave",
+    0x00c1 : "Aacute",
+    0x00c2 : "Acircumflex",
+    0x00c3 : "Atilde",
+    0x00c4 : "Adiaeresis",
+    0x00c5 : "Aring",
+    0x00c6 : "AE",
+    0x00c7 : "Ccedilla",
+    0x00c8 : "Egrave",
+    0x00c9 : "Eacute",
+    0x00ca : "Ecircumflex",
+    0x00cb : "Ediaeresis",
+    0x00cc : "Igrave",
+    0x00cd : "Iacute",
+    0x00ce : "Icircumflex",
+    0x00cf : "Idiaeresis",
+    0x00d0 : "ETH",
+    0x00d0 : "Eth",
+    0x00d1 : "Ntilde",
+    0x00d2 : "Ograve",
+    0x00d3 : "Oacute",
+    0x00d4 : "Ocircumflex",
+    0x00d5 : "Otilde",
+    0x00d6 : "Odiaeresis",
+    0x00d7 : "multiply",
+    0x00d8 : "Oslash",
+    0x00d8 : "Ooblique",
+    0x00d9 : "Ugrave",
+    0x00da : "Uacute",
+    0x00db : "Ucircumflex",
+    0x00dc : "Udiaeresis",
+    0x00dd : "Yacute",
+    0x00de : "THORN",
+    0x00de : "Thorn",
+    0x00df : "ssharp",
+    0x00e0 : "agrave",
+    0x00e1 : "aacute",
+    0x00e2 : "acircumflex",
+    0x00e3 : "atilde",
+    0x00e4 : "adiaeresis",
+    0x00e5 : "aring",
+    0x00e6 : "ae",
+    0x00e7 : "ccedilla",
+    0x00e8 : "egrave",
+    0x00e9 : "eacute",
+    0x00ea : "ecircumflex",
+    0x00eb : "ediaeresis",
+    0x00ec : "igrave",
+    0x00ed : "iacute",
+    0x00ee : "icircumflex",
+    0x00ef : "idiaeresis",
+    0x00f0 : "eth",
+    0x00f1 : "ntilde",
+    0x00f2 : "ograve",
+    0x00f3 : "oacute",
+    0x00f4 : "ocircumflex",
+    0x00f5 : "otilde",
+    0x00f6 : "odiaeresis",
+    0x00f7 : "division",
+    0x00f8 : "oslash",
+    0x00f8 : "ooblique",
+    0x00f9 : "ugrave",
+    0x00fa : "uacute",
+    0x00fb : "ucircumflex",
+    0x00fc : "udiaeresis",
+    0x00fd : "yacute",
+    0x00fe : "thorn",
+    0x00ff : "ydiaeresis",
+    0x01a1 : "Aogonek",
+    0x01a2 : "breve",
+    0x01a3 : "Lstroke",
+    0x01a5 : "Lcaron",
+    0x01a6 : "Sacute",
+    0x01a9 : "Scaron",
+    0x01aa : "Scedilla",
+    0x01ab : "Tcaron",
+    0x01ac : "Zacute",
+    0x01ae : "Zcaron",
+    0x01af : "Zabovedot",
+    0x01b1 : "aogonek",
+    0x01b2 : "ogonek",
+    0x01b3 : "lstroke",
+    0x01b5 : "lcaron",
+    0x01b6 : "sacute",
+    0x01b7 : "caron",
+    0x01b9 : "scaron",
+    0x01ba : "scedilla",
+    0x01bb : "tcaron",
+    0x01bc : "zacute",
+    0x01bd : "doubleacute",
+    0x01be : "zcaron",
+    0x01bf : "zabovedot",
+    0x01c0 : "Racute",
+    0x01c3 : "Abreve",
+    0x01c5 : "Lacute",
+    0x01c6 : "Cacute",
+    0x01c8 : "Ccaron",
+    0x01ca : "Eogonek",
+    0x01cc : "Ecaron",
+    0x01cf : "Dcaron",
+    0x01d0 : "Dstroke",
+    0x01d1 : "Nacute",
+    0x01d2 : "Ncaron",
+    0x01d5 : "Odoubleacute",
+    0x01d8 : "Rcaron",
+    0x01d9 : "Uring",
+    0x01db : "Udoubleacute",
+    0x01de : "Tcedilla",
+    0x01e0 : "racute",
+    0x01e3 : "abreve",
+    0x01e5 : "lacute",
+    0x01e6 : "cacute",
+    0x01e8 : "ccaron",
+    0x01ea : "eogonek",
+    0x01ec : "ecaron",
+    0x01ef : "dcaron",
+    0x01f0 : "dstroke",
+    0x01f1 : "nacute",
+    0x01f2 : "ncaron",
+    0x01f5 : "odoubleacute",
+    0x01fb : "udoubleacute",
+    0x01f8 : "rcaron",
+    0x01f9 : "uring",
+    0x01fe : "tcedilla",
+    0x01ff : "abovedot",
+    0x02a1 : "Hstroke",
+    0x02a6 : "Hcircumflex",
+    0x02a9 : "Iabovedot",
+    0x02ab : "Gbreve",
+    0x02ac : "Jcircumflex",
+    0x02b1 : "hstroke",
+    0x02b6 : "hcircumflex",
+    0x02b9 : "idotless",
+    0x02bb : "gbreve",
+    0x02bc : "jcircumflex",
+    0x02c5 : "Cabovedot",
+    0x02c6 : "Ccircumflex",
+    0x02d5 : "Gabovedot",
+    0x02d8 : "Gcircumflex",
+    0x02dd : "Ubreve",
+    0x02de : "Scircumflex",
+    0x02e5 : "cabovedot",
+    0x02e6 : "ccircumflex",
+    0x02f5 : "gabovedot",
+    0x02f8 : "gcircumflex",
+    0x02fd : "ubreve",
+    0x02fe : "scircumflex",
+    0x03a2 : "kra",
+    0x03a2 : "kappa",
+    0x03a3 : "Rcedilla",
+    0x03a5 : "Itilde",
+    0x03a6 : "Lcedilla",
+    0x03aa : "Emacron",
+    0x03ab : "Gcedilla",
+    0x03ac : "Tslash",
+    0x03b3 : "rcedilla",
+    0x03b5 : "itilde",
+    0x03b6 : "lcedilla",
+    0x03ba : "emacron",
+    0x03bb : "gcedilla",
+    0x03bc : "tslash",
+    0x03bd : "ENG",
+    0x03bf : "eng",
+    0x03c0 : "Amacron",
+    0x03c7 : "Iogonek",
+    0x03cc : "Eabovedot",
+    0x03cf : "Imacron",
+    0x03d1 : "Ncedilla",
+    0x03d2 : "Omacron",
+    0x03d3 : "Kcedilla",
+    0x03d9 : "Uogonek",
+    0x03dd : "Utilde",
+    0x03de : "Umacron",
+    0x03e0 : "amacron",
+    0x03e7 : "iogonek",
+    0x03ec : "eabovedot",
+    0x03ef : "imacron",
+    0x03f1 : "ncedilla",
+    0x03f2 : "omacron",
+    0x03f3 : "kcedilla",
+    0x03f9 : "uogonek",
+    0x03fd : "utilde",
+    0x03fe : "umacron",
+    0x1001e02 : "Babovedot",
+    0x1001e03 : "babovedot",
+    0x1001e0a : "Dabovedot",
+    0x1001e80 : "Wgrave",
+    0x1001e82 : "Wacute",
+    0x1001e0b : "dabovedot",
+    0x1001ef2 : "Ygrave",
+    0x1001e1e : "Fabovedot",
+    0x1001e1f : "fabovedot",
+    0x1001e40 : "Mabovedot",
+    0x1001e41 : "mabovedot",
+    0x1001e56 : "Pabovedot",
+    0x1001e81 : "wgrave",
+    0x1001e57 : "pabovedot",
+    0x1001e83 : "wacute",
+    0x1001e60 : "Sabovedot",
+    0x1001ef3 : "ygrave",
+    0x1001e84 : "Wdiaeresis",
+    0x1001e85 : "wdiaeresis",
+    0x1001e61 : "sabovedot",
+    0x1000174 : "Wcircumflex",
+    0x1001e6a : "Tabovedot",
+    0x1000176 : "Ycircumflex",
+    0x1000175 : "wcircumflex",
+    0x1001e6b : "tabovedot",
+    0x1000177 : "ycircumflex",
+    0x13bc : "OE",
+    0x13bd : "oe",
+    0x13be : "Ydiaeresis",
+    0x047e : "overline",
+    0x04a1 : "kana_fullstop",
+    0x04a2 : "kana_openingbracket",
+    0x04a3 : "kana_closingbracket",
+    0x04a4 : "kana_comma",
+    0x04a5 : "kana_conjunctive",
+    0x04a5 : "kana_middledot",
+    0x04a6 : "kana_WO",
+    0x04a7 : "kana_a",
+    0x04a8 : "kana_i",
+    0x04a9 : "kana_u",
+    0x04aa : "kana_e",
+    0x04ab : "kana_o",
+    0x04ac : "kana_ya",
+    0x04ad : "kana_yu",
+    0x04ae : "kana_yo",
+    0x04af : "kana_tsu",
+    0x04af : "kana_tu",
+    0x04b0 : "prolongedsound",
+    0x04b1 : "kana_A",
+    0x04b2 : "kana_I",
+    0x04b3 : "kana_U",
+    0x04b4 : "kana_E",
+    0x04b5 : "kana_O",
+    0x04b6 : "kana_KA",
+    0x04b7 : "kana_KI",
+    0x04b8 : "kana_KU",
+    0x04b9 : "kana_KE",
+    0x04ba : "kana_KO",
+    0x04bb : "kana_SA",
+    0x04bc : "kana_SHI",
+    0x04bd : "kana_SU",
+    0x04be : "kana_SE",
+    0x04bf : "kana_SO",
+    0x04c0 : "kana_TA",
+    0x04c1 : "kana_CHI",
+    0x04c1 : "kana_TI",
+    0x04c2 : "kana_TSU",
+    0x04c2 : "kana_TU",
+    0x04c3 : "kana_TE",
+    0x04c4 : "kana_TO",
+    0x04c5 : "kana_NA",
+    0x04c6 : "kana_NI",
+    0x04c7 : "kana_NU",
+    0x04c8 : "kana_NE",
+    0x04c9 : "kana_NO",
+    0x04ca : "kana_HA",
+    0x04cb : "kana_HI",
+    0x04cc : "kana_FU",
+    0x04cc : "kana_HU",
+    0x04cd : "kana_HE",
+    0x04ce : "kana_HO",
+    0x04cf : "kana_MA",
+    0x04d0 : "kana_MI",
+    0x04d1 : "kana_MU",
+    0x04d2 : "kana_ME",
+    0x04d3 : "kana_MO",
+    0x04d4 : "kana_YA",
+    0x04d5 : "kana_YU",
+    0x04d6 : "kana_YO",
+    0x04d7 : "kana_RA",
+    0x04d8 : "kana_RI",
+    0x04d9 : "kana_RU",
+    0x04da : "kana_RE",
+    0x04db : "kana_RO",
+    0x04dc : "kana_WA",
+    0x04dd : "kana_N",
+    0x04de : "voicedsound",
+    0x04df : "semivoicedsound",
+    0xff7e : "kana_switch",
+    0x10006f0 : "Farsi_0",
+    0x10006f1 : "Farsi_1",
+    0x10006f2 : "Farsi_2",
+    0x10006f3 : "Farsi_3",
+    0x10006f4 : "Farsi_4",
+    0x10006f5 : "Farsi_5",
+    0x10006f6 : "Farsi_6",
+    0x10006f7 : "Farsi_7",
+    0x10006f8 : "Farsi_8",
+    0x10006f9 : "Farsi_9",
+    0x100066a : "Arabic_percent",
+    0x1000670 : "Arabic_superscript_alef",
+    0x1000679 : "Arabic_tteh",
+    0x100067e : "Arabic_peh",
+    0x1000686 : "Arabic_tcheh",
+    0x1000688 : "Arabic_ddal",
+    0x1000691 : "Arabic_rreh",
+    0x05ac : "Arabic_comma",
+    0x10006d4 : "Arabic_fullstop",
+    0x1000660 : "Arabic_0",
+    0x1000661 : "Arabic_1",
+    0x1000662 : "Arabic_2",
+    0x1000663 : "Arabic_3",
+    0x1000664 : "Arabic_4",
+    0x1000665 : "Arabic_5",
+    0x1000666 : "Arabic_6",
+    0x1000667 : "Arabic_7",
+    0x1000668 : "Arabic_8",
+    0x1000669 : "Arabic_9",
+    0x05bb : "Arabic_semicolon",
+    0x05bf : "Arabic_question_mark",
+    0x05c1 : "Arabic_hamza",
+    0x05c2 : "Arabic_maddaonalef",
+    0x05c3 : "Arabic_hamzaonalef",
+    0x05c4 : "Arabic_hamzaonwaw",
+    0x05c5 : "Arabic_hamzaunderalef",
+    0x05c6 : "Arabic_hamzaonyeh",
+    0x05c7 : "Arabic_alef",
+    0x05c8 : "Arabic_beh",
+    0x05c9 : "Arabic_tehmarbuta",
+    0x05ca : "Arabic_teh",
+    0x05cb : "Arabic_theh",
+    0x05cc : "Arabic_jeem",
+    0x05cd : "Arabic_hah",
+    0x05ce : "Arabic_khah",
+    0x05cf : "Arabic_dal",
+    0x05d0 : "Arabic_thal",
+    0x05d1 : "Arabic_ra",
+    0x05d2 : "Arabic_zain",
+    0x05d3 : "Arabic_seen",
+    0x05d4 : "Arabic_sheen",
+    0x05d5 : "Arabic_sad",
+    0x05d6 : "Arabic_dad",
+    0x05d7 : "Arabic_tah",
+    0x05d8 : "Arabic_zah",
+    0x05d9 : "Arabic_ain",
+    0x05da : "Arabic_ghain",
+    0x05e0 : "Arabic_tatweel",
+    0x05e1 : "Arabic_feh",
+    0x05e2 : "Arabic_qaf",
+    0x05e3 : "Arabic_kaf",
+    0x05e4 : "Arabic_lam",
+    0x05e5 : "Arabic_meem",
+    0x05e6 : "Arabic_noon",
+    0x05e7 : "Arabic_ha",
+    0x05e7 : "Arabic_heh",
+    0x05e8 : "Arabic_waw",
+    0x05e9 : "Arabic_alefmaksura",
+    0x05ea : "Arabic_yeh",
+    0x05eb : "Arabic_fathatan",
+    0x05ec : "Arabic_dammatan",
+    0x05ed : "Arabic_kasratan",
+    0x05ee : "Arabic_fatha",
+    0x05ef : "Arabic_damma",
+    0x05f0 : "Arabic_kasra",
+    0x05f1 : "Arabic_shadda",
+    0x05f2 : "Arabic_sukun",
+    0x1000653 : "Arabic_madda_above",
+    0x1000654 : "Arabic_hamza_above",
+    0x1000655 : "Arabic_hamza_below",
+    0x1000698 : "Arabic_jeh",
+    0x10006a4 : "Arabic_veh",
+    0x10006a9 : "Arabic_keheh",
+    0x10006af : "Arabic_gaf",
+    0x10006ba : "Arabic_noon_ghunna",
+    0x10006be : "Arabic_heh_doachashmee",
+    0x10006cc : "Farsi_yeh",
+    0x10006cc : "Arabic_farsi_yeh",
+    0x10006d2 : "Arabic_yeh_baree",
+    0x10006c1 : "Arabic_heh_goal",
+    0xff7e : "Arabic_switch",
+    0x1000492 : "Cyrillic_GHE_bar",
+    0x1000493 : "Cyrillic_ghe_bar",
+    0x1000496 : "Cyrillic_ZHE_descender",
+    0x1000497 : "Cyrillic_zhe_descender",
+    0x100049a : "Cyrillic_KA_descender",
+    0x100049b : "Cyrillic_ka_descender",
+    0x100049c : "Cyrillic_KA_vertstroke",
+    0x100049d : "Cyrillic_ka_vertstroke",
+    0x10004a2 : "Cyrillic_EN_descender",
+    0x10004a3 : "Cyrillic_en_descender",
+    0x10004ae : "Cyrillic_U_straight",
+    0x10004af : "Cyrillic_u_straight",
+    0x10004b0 : "Cyrillic_U_straight_bar",
+    0x10004b1 : "Cyrillic_u_straight_bar",
+    0x10004b2 : "Cyrillic_HA_descender",
+    0x10004b3 : "Cyrillic_ha_descender",
+    0x10004b6 : "Cyrillic_CHE_descender",
+    0x10004b7 : "Cyrillic_che_descender",
+    0x10004b8 : "Cyrillic_CHE_vertstroke",
+    0x10004b9 : "Cyrillic_che_vertstroke",
+    0x10004ba : "Cyrillic_SHHA",
+    0x10004bb : "Cyrillic_shha",
+    0x10004d8 : "Cyrillic_SCHWA",
+    0x10004d9 : "Cyrillic_schwa",
+    0x10004e2 : "Cyrillic_I_macron",
+    0x10004e3 : "Cyrillic_i_macron",
+    0x10004e8 : "Cyrillic_O_bar",
+    0x10004e9 : "Cyrillic_o_bar",
+    0x10004ee : "Cyrillic_U_macron",
+    0x10004ef : "Cyrillic_u_macron",
+    0x06a1 : "Serbian_dje",
+    0x06a2 : "Macedonia_gje",
+    0x06a3 : "Cyrillic_io",
+    0x06a4 : "Ukrainian_ie",
+    0x06a4 : "Ukranian_je",
+    0x06a5 : "Macedonia_dse",
+    0x06a6 : "Ukrainian_i",
+    0x06a6 : "Ukranian_i",
+    0x06a7 : "Ukrainian_yi",
+    0x06a7 : "Ukranian_yi",
+    0x06a8 : "Cyrillic_je",
+    0x06a8 : "Serbian_je",
+    0x06a9 : "Cyrillic_lje",
+    0x06a9 : "Serbian_lje",
+    0x06aa : "Cyrillic_nje",
+    0x06aa : "Serbian_nje",
+    0x06ab : "Serbian_tshe",
+    0x06ac : "Macedonia_kje",
+    0x06ad : "Ukrainian_ghe_with_upturn",
+    0x06ae : "Byelorussian_shortu",
+    0x06af : "Cyrillic_dzhe",
+    0x06af : "Serbian_dze",
+    0x06b0 : "numerosign",
+    0x06b1 : "Serbian_DJE",
+    0x06b2 : "Macedonia_GJE",
+    0x06b3 : "Cyrillic_IO",
+    0x06b4 : "Ukrainian_IE",
+    0x06b4 : "Ukranian_JE",
+    0x06b5 : "Macedonia_DSE",
+    0x06b6 : "Ukrainian_I",
+    0x06b6 : "Ukranian_I",
+    0x06b7 : "Ukrainian_YI",
+    0x06b7 : "Ukranian_YI",
+    0x06b8 : "Cyrillic_JE",
+    0x06b8 : "Serbian_JE",
+    0x06b9 : "Cyrillic_LJE",
+    0x06b9 : "Serbian_LJE",
+    0x06ba : "Cyrillic_NJE",
+    0x06ba : "Serbian_NJE",
+    0x06bb : "Serbian_TSHE",
+    0x06bc : "Macedonia_KJE",
+    0x06bd : "Ukrainian_GHE_WITH_UPTURN",
+    0x06be : "Byelorussian_SHORTU",
+    0x06bf : "Cyrillic_DZHE",
+    0x06bf : "Serbian_DZE",
+    0x06c0 : "Cyrillic_yu",
+    0x06c1 : "Cyrillic_a",
+    0x06c2 : "Cyrillic_be",
+    0x06c3 : "Cyrillic_tse",
+    0x06c4 : "Cyrillic_de",
+    0x06c5 : "Cyrillic_ie",
+    0x06c6 : "Cyrillic_ef",
+    0x06c7 : "Cyrillic_ghe",
+    0x06c8 : "Cyrillic_ha",
+    0x06c9 : "Cyrillic_i",
+    0x06ca : "Cyrillic_shorti",
+    0x06cb : "Cyrillic_ka",
+    0x06cc : "Cyrillic_el",
+    0x06cd : "Cyrillic_em",
+    0x06ce : "Cyrillic_en",
+    0x06cf : "Cyrillic_o",
+    0x06d0 : "Cyrillic_pe",
+    0x06d1 : "Cyrillic_ya",
+    0x06d2 : "Cyrillic_er",
+    0x06d3 : "Cyrillic_es",
+    0x06d4 : "Cyrillic_te",
+    0x06d5 : "Cyrillic_u",
+    0x06d6 : "Cyrillic_zhe",
+    0x06d7 : "Cyrillic_ve",
+    0x06d8 : "Cyrillic_softsign",
+    0x06d9 : "Cyrillic_yeru",
+    0x06da : "Cyrillic_ze",
+    0x06db : "Cyrillic_sha",
+    0x06dc : "Cyrillic_e",
+    0x06dd : "Cyrillic_shcha",
+    0x06de : "Cyrillic_che",
+    0x06df : "Cyrillic_hardsign",
+    0x06e0 : "Cyrillic_YU",
+    0x06e1 : "Cyrillic_A",
+    0x06e2 : "Cyrillic_BE",
+    0x06e3 : "Cyrillic_TSE",
+    0x06e4 : "Cyrillic_DE",
+    0x06e5 : "Cyrillic_IE",
+    0x06e6 : "Cyrillic_EF",
+    0x06e7 : "Cyrillic_GHE",
+    0x06e8 : "Cyrillic_HA",
+    0x06e9 : "Cyrillic_I",
+    0x06ea : "Cyrillic_SHORTI",
+    0x06eb : "Cyrillic_KA",
+    0x06ec : "Cyrillic_EL",
+    0x06ed : "Cyrillic_EM",
+    0x06ee : "Cyrillic_EN",
+    0x06ef : "Cyrillic_O",
+    0x06f0 : "Cyrillic_PE",
+    0x06f1 : "Cyrillic_YA",
+    0x06f2 : "Cyrillic_ER",
+    0x06f3 : "Cyrillic_ES",
+    0x06f4 : "Cyrillic_TE",
+    0x06f5 : "Cyrillic_U",
+    0x06f6 : "Cyrillic_ZHE",
+    0x06f7 : "Cyrillic_VE",
+    0x06f8 : "Cyrillic_SOFTSIGN",
+    0x06f9 : "Cyrillic_YERU",
+    0x06fa : "Cyrillic_ZE",
+    0x06fb : "Cyrillic_SHA",
+    0x06fc : "Cyrillic_E",
+    0x06fd : "Cyrillic_SHCHA",
+    0x06fe : "Cyrillic_CHE",
+    0x06ff : "Cyrillic_HARDSIGN",
+    0x07a1 : "Greek_ALPHAaccent",
+    0x07a2 : "Greek_EPSILONaccent",
+    0x07a3 : "Greek_ETAaccent",
+    0x07a4 : "Greek_IOTAaccent",
+    0x07a5 : "Greek_IOTAdieresis",
+    0x07a5 : "Greek_IOTAdiaeresis",
+    0x07a7 : "Greek_OMICRONaccent",
+    0x07a8 : "Greek_UPSILONaccent",
+    0x07a9 : "Greek_UPSILONdieresis",
+    0x07ab : "Greek_OMEGAaccent",
+    0x07ae : "Greek_accentdieresis",
+    0x07af : "Greek_horizbar",
+    0x07b1 : "Greek_alphaaccent",
+    0x07b2 : "Greek_epsilonaccent",
+    0x07b3 : "Greek_etaaccent",
+    0x07b4 : "Greek_iotaaccent",
+    0x07b5 : "Greek_iotadieresis",
+    0x07b6 : "Greek_iotaaccentdieresis",
+    0x07b7 : "Greek_omicronaccent",
+    0x07b8 : "Greek_upsilonaccent",
+    0x07b9 : "Greek_upsilondieresis",
+    0x07ba : "Greek_upsilonaccentdieresis",
+    0x07bb : "Greek_omegaaccent",
+    0x07c1 : "Greek_ALPHA",
+    0x07c2 : "Greek_BETA",
+    0x07c3 : "Greek_GAMMA",
+    0x07c4 : "Greek_DELTA",
+    0x07c5 : "Greek_EPSILON",
+    0x07c6 : "Greek_ZETA",
+    0x07c7 : "Greek_ETA",
+    0x07c8 : "Greek_THETA",
+    0x07c9 : "Greek_IOTA",
+    0x07ca : "Greek_KAPPA",
+    0x07cb : "Greek_LAMDA",
+    0x07cb : "Greek_LAMBDA",
+    0x07cc : "Greek_MU",
+    0x07cd : "Greek_NU",
+    0x07ce : "Greek_XI",
+    0x07cf : "Greek_OMICRON",
+    0x07d0 : "Greek_PI",
+    0x07d1 : "Greek_RHO",
+    0x07d2 : "Greek_SIGMA",
+    0x07d4 : "Greek_TAU",
+    0x07d5 : "Greek_UPSILON",
+    0x07d6 : "Greek_PHI",
+    0x07d7 : "Greek_CHI",
+    0x07d8 : "Greek_PSI",
+    0x07d9 : "Greek_OMEGA",
+    0x07e1 : "Greek_alpha",
+    0x07e2 : "Greek_beta",
+    0x07e3 : "Greek_gamma",
+    0x07e4 : "Greek_delta",
+    0x07e5 : "Greek_epsilon",
+    0x07e6 : "Greek_zeta",
+    0x07e7 : "Greek_eta",
+    0x07e8 : "Greek_theta",
+    0x07e9 : "Greek_iota",
+    0x07ea : "Greek_kappa",
+    0x07eb : "Greek_lamda",
+    0x07eb : "Greek_lambda",
+    0x07ec : "Greek_mu",
+    0x07ed : "Greek_nu",
+    0x07ee : "Greek_xi",
+    0x07ef : "Greek_omicron",
+    0x07f0 : "Greek_pi",
+    0x07f1 : "Greek_rho",
+    0x07f2 : "Greek_sigma",
+    0x07f3 : "Greek_finalsmallsigma",
+    0x07f4 : "Greek_tau",
+    0x07f5 : "Greek_upsilon",
+    0x07f6 : "Greek_phi",
+    0x07f7 : "Greek_chi",
+    0x07f8 : "Greek_psi",
+    0x07f9 : "Greek_omega",
+    0xff7e : "Greek_switch",
+    0x08a1 : "leftradical",
+    0x08a2 : "topleftradical",
+    0x08a3 : "horizconnector",
+    0x08a4 : "topintegral",
+    0x08a5 : "botintegral",
+    0x08a6 : "vertconnector",
+    0x08a7 : "topleftsqbracket",
+    0x08a8 : "botleftsqbracket",
+    0x08a9 : "toprightsqbracket",
+    0x08aa : "botrightsqbracket",
+    0x08ab : "topleftparens",
+    0x08ac : "botleftparens",
+    0x08ad : "toprightparens",
+    0x08ae : "botrightparens",
+    0x08af : "leftmiddlecurlybrace",
+    0x08b0 : "rightmiddlecurlybrace",
+    0x08b1 : "topleftsummation",
+    0x08b2 : "botleftsummation",
+    0x08b3 : "topvertsummationconnector",
+    0x08b4 : "botvertsummationconnector",
+    0x08b5 : "toprightsummation",
+    0x08b6 : "botrightsummation",
+    0x08b7 : "rightmiddlesummation",
+    0x08bc : "lessthanequal",
+    0x08bd : "notequal",
+    0x08be : "greaterthanequal",
+    0x08bf : "integral",
+    0x08c0 : "therefore",
+    0x08c1 : "variation",
+    0x08c2 : "infinity",
+    0x08c5 : "nabla",
+    0x08c8 : "approximate",
+    0x08c9 : "similarequal",
+    0x08cd : "ifonlyif",
+    0x08ce : "implies",
+    0x08cf : "identical",
+    0x08d6 : "radical",
+    0x08da : "includedin",
+    0x08db : "includes",
+    0x08dc : "intersection",
+    0x08dd : "union",
+    0x08de : "logicaland",
+    0x08df : "logicalor",
+    0x08ef : "partialderivative",
+    0x08f6 : "function",
+    0x08fb : "leftarrow",
+    0x08fc : "uparrow",
+    0x08fd : "rightarrow",
+    0x08fe : "downarrow",
+    0x09df : "blank",
+    0x09e0 : "soliddiamond",
+    0x09e1 : "checkerboard",
+    0x09e2 : "ht",
+    0x09e3 : "ff",
+    0x09e4 : "cr",
+    0x09e5 : "lf",
+    0x09e8 : "nl",
+    0x09e9 : "vt",
+    0x09ea : "lowrightcorner",
+    0x09eb : "uprightcorner",
+    0x09ec : "upleftcorner",
+    0x09ed : "lowleftcorner",
+    0x09ee : "crossinglines",
+    0x09ef : "horizlinescan1",
+    0x09f0 : "horizlinescan3",
+    0x09f1 : "horizlinescan5",
+    0x09f2 : "horizlinescan7",
+    0x09f3 : "horizlinescan9",
+    0x09f4 : "leftt",
+    0x09f5 : "rightt",
+    0x09f6 : "bott",
+    0x09f7 : "topt",
+    0x09f8 : "vertbar",
+    0x0aa1 : "emspace",
+    0x0aa2 : "enspace",
+    0x0aa3 : "em3space",
+    0x0aa4 : "em4space",
+    0x0aa5 : "digitspace",
+    0x0aa6 : "punctspace",
+    0x0aa7 : "thinspace",
+    0x0aa8 : "hairspace",
+    0x0aa9 : "emdash",
+    0x0aaa : "endash",
+    0x0aac : "signifblank",
+    0x0aae : "ellipsis",
+    0x0aaf : "doubbaselinedot",
+    0x0ab0 : "onethird",
+    0x0ab1 : "twothirds",
+    0x0ab2 : "onefifth",
+    0x0ab3 : "twofifths",
+    0x0ab4 : "threefifths",
+    0x0ab5 : "fourfifths",
+    0x0ab6 : "onesixth",
+    0x0ab7 : "fivesixths",
+    0x0ab8 : "careof",
+    0x0abb : "figdash",
+    0x0abc : "leftanglebracket",
+    0x0abd : "decimalpoint",
+    0x0abe : "rightanglebracket",
+    0x0abf : "marker",
+    0x0ac3 : "oneeighth",
+    0x0ac4 : "threeeighths",
+    0x0ac5 : "fiveeighths",
+    0x0ac6 : "seveneighths",
+    0x0ac9 : "trademark",
+    0x0aca : "signaturemark",
+    0x0acb : "trademarkincircle",
+    0x0acc : "leftopentriangle",
+    0x0acd : "rightopentriangle",
+    0x0ace : "emopencircle",
+    0x0acf : "emopenrectangle",
+    0x0ad0 : "leftsinglequotemark",
+    0x0ad1 : "rightsinglequotemark",
+    0x0ad2 : "leftdoublequotemark",
+    0x0ad3 : "rightdoublequotemark",
+    0x0ad4 : "prescription",
+    0x0ad6 : "minutes",
+    0x0ad7 : "seconds",
+    0x0ad9 : "latincross",
+    0x0ada : "hexagram",
+    0x0adb : "filledrectbullet",
+    0x0adc : "filledlefttribullet",
+    0x0add : "filledrighttribullet",
+    0x0ade : "emfilledcircle",
+    0x0adf : "emfilledrect",
+    0x0ae0 : "enopencircbullet",
+    0x0ae1 : "enopensquarebullet",
+    0x0ae2 : "openrectbullet",
+    0x0ae3 : "opentribulletup",
+    0x0ae4 : "opentribulletdown",
+    0x0ae5 : "openstar",
+    0x0ae6 : "enfilledcircbullet",
+    0x0ae7 : "enfilledsqbullet",
+    0x0ae8 : "filledtribulletup",
+    0x0ae9 : "filledtribulletdown",
+    0x0aea : "leftpointer",
+    0x0aeb : "rightpointer",
+    0x0aec : "club",
+    0x0aed : "diamond",
+    0x0aee : "heart",
+    0x0af0 : "maltesecross",
+    0x0af1 : "dagger",
+    0x0af2 : "doubledagger",
+    0x0af3 : "checkmark",
+    0x0af4 : "ballotcross",
+    0x0af5 : "musicalsharp",
+    0x0af6 : "musicalflat",
+    0x0af7 : "malesymbol",
+    0x0af8 : "femalesymbol",
+    0x0af9 : "telephone",
+    0x0afa : "telephonerecorder",
+    0x0afb : "phonographcopyright",
+    0x0afc : "caret",
+    0x0afd : "singlelowquotemark",
+    0x0afe : "doublelowquotemark",
+    0x0aff : "cursor",
+    0x0ba3 : "leftcaret",
+    0x0ba6 : "rightcaret",
+    0x0ba8 : "downcaret",
+    0x0ba9 : "upcaret",
+    0x0bc0 : "overbar",
+    0x0bc2 : "downtack",
+    0x0bc3 : "upshoe",
+    0x0bc4 : "downstile",
+    0x0bc6 : "underbar",
+    0x0bca : "jot",
+    0x0bcc : "quad",
+    0x0bce : "uptack",
+    0x0bcf : "circle",
+    0x0bd3 : "upstile",
+    0x0bd6 : "downshoe",
+    0x0bd8 : "rightshoe",
+    0x0bda : "leftshoe",
+    0x0bdc : "lefttack",
+    0x0bfc : "righttack",
+    0x0cdf : "hebrew_doublelowline",
+    0x0ce0 : "hebrew_aleph",
+    0x0ce1 : "hebrew_bet",
+    0x0ce1 : "hebrew_beth",
+    0x0ce2 : "hebrew_gimel",
+    0x0ce2 : "hebrew_gimmel",
+    0x0ce3 : "hebrew_dalet",
+    0x0ce3 : "hebrew_daleth",
+    0x0ce4 : "hebrew_he",
+    0x0ce5 : "hebrew_waw",
+    0x0ce6 : "hebrew_zain",
+    0x0ce6 : "hebrew_zayin",
+    0x0ce7 : "hebrew_chet",
+    0x0ce7 : "hebrew_het",
+    0x0ce8 : "hebrew_tet",
+    0x0ce8 : "hebrew_teth",
+    0x0ce9 : "hebrew_yod",
+    0x0cea : "hebrew_finalkaph",
+    0x0ceb : "hebrew_kaph",
+    0x0cec : "hebrew_lamed",
+    0x0ced : "hebrew_finalmem",
+    0x0cee : "hebrew_mem",
+    0x0cef : "hebrew_finalnun",
+    0x0cf0 : "hebrew_nun",
+    0x0cf1 : "hebrew_samech",
+    0x0cf1 : "hebrew_samekh",
+    0x0cf2 : "hebrew_ayin",
+    0x0cf3 : "hebrew_finalpe",
+    0x0cf4 : "hebrew_pe",
+    0x0cf5 : "hebrew_finalzade",
+    0x0cf5 : "hebrew_finalzadi",
+    0x0cf6 : "hebrew_zade",
+    0x0cf6 : "hebrew_zadi",
+    0x0cf7 : "hebrew_qoph",
+    0x0cf7 : "hebrew_kuf",
+    0x0cf8 : "hebrew_resh",
+    0x0cf9 : "hebrew_shin",
+    0x0cfa : "hebrew_taw",
+    0x0cfa : "hebrew_taf",
+    0xff7e : "Hebrew_switch",
+    0x0da1 : "Thai_kokai",
+    0x0da2 : "Thai_khokhai",
+    0x0da3 : "Thai_khokhuat",
+    0x0da4 : "Thai_khokhwai",
+    0x0da5 : "Thai_khokhon",
+    0x0da6 : "Thai_khorakhang",
+    0x0da7 : "Thai_ngongu",
+    0x0da8 : "Thai_chochan",
+    0x0da9 : "Thai_choching",
+    0x0daa : "Thai_chochang",
+    0x0dab : "Thai_soso",
+    0x0dac : "Thai_chochoe",
+    0x0dad : "Thai_yoying",
+    0x0dae : "Thai_dochada",
+    0x0daf : "Thai_topatak",
+    0x0db0 : "Thai_thothan",
+    0x0db1 : "Thai_thonangmontho",
+    0x0db2 : "Thai_thophuthao",
+    0x0db3 : "Thai_nonen",
+    0x0db4 : "Thai_dodek",
+    0x0db5 : "Thai_totao",
+    0x0db6 : "Thai_thothung",
+    0x0db7 : "Thai_thothahan",
+    0x0db8 : "Thai_thothong",
+    0x0db9 : "Thai_nonu",
+    0x0dba : "Thai_bobaimai",
+    0x0dbb : "Thai_popla",
+    0x0dbc : "Thai_phophung",
+    0x0dbd : "Thai_fofa",
+    0x0dbe : "Thai_phophan",
+    0x0dbf : "Thai_fofan",
+    0x0dc0 : "Thai_phosamphao",
+    0x0dc1 : "Thai_moma",
+    0x0dc2 : "Thai_yoyak",
+    0x0dc3 : "Thai_rorua",
+    0x0dc4 : "Thai_ru",
+    0x0dc5 : "Thai_loling",
+    0x0dc6 : "Thai_lu",
+    0x0dc7 : "Thai_wowaen",
+    0x0dc8 : "Thai_sosala",
+    0x0dc9 : "Thai_sorusi",
+    0x0dca : "Thai_sosua",
+    0x0dcb : "Thai_hohip",
+    0x0dcc : "Thai_lochula",
+    0x0dcd : "Thai_oang",
+    0x0dce : "Thai_honokhuk",
+    0x0dcf : "Thai_paiyannoi",
+    0x0dd0 : "Thai_saraa",
+    0x0dd1 : "Thai_maihanakat",
+    0x0dd2 : "Thai_saraaa",
+    0x0dd3 : "Thai_saraam",
+    0x0dd4 : "Thai_sarai",
+    0x0dd5 : "Thai_saraii",
+    0x0dd6 : "Thai_saraue",
+    0x0dd7 : "Thai_sarauee",
+    0x0dd8 : "Thai_sarau",
+    0x0dd9 : "Thai_sarauu",
+    0x0dda : "Thai_phinthu",
+    0x0dde : "Thai_maihanakat_maitho",
+    0x0ddf : "Thai_baht",
+    0x0de0 : "Thai_sarae",
+    0x0de1 : "Thai_saraae",
+    0x0de2 : "Thai_sarao",
+    0x0de3 : "Thai_saraaimaimuan",
+    0x0de4 : "Thai_saraaimaimalai",
+    0x0de5 : "Thai_lakkhangyao",
+    0x0de6 : "Thai_maiyamok",
+    0x0de7 : "Thai_maitaikhu",
+    0x0de8 : "Thai_maiek",
+    0x0de9 : "Thai_maitho",
+    0x0dea : "Thai_maitri",
+    0x0deb : "Thai_maichattawa",
+    0x0dec : "Thai_thanthakhat",
+    0x0ded : "Thai_nikhahit",
+    0x0df0 : "Thai_leksun",
+    0x0df1 : "Thai_leknung",
+    0x0df2 : "Thai_leksong",
+    0x0df3 : "Thai_leksam",
+    0x0df4 : "Thai_leksi",
+    0x0df5 : "Thai_lekha",
+    0x0df6 : "Thai_lekhok",
+    0x0df7 : "Thai_lekchet",
+    0x0df8 : "Thai_lekpaet",
+    0x0df9 : "Thai_lekkao",
+    0xff31 : "Hangul",
+    0xff32 : "Hangul_Start",
+    0xff33 : "Hangul_End",
+    0xff34 : "Hangul_Hanja",
+    0xff35 : "Hangul_Jamo",
+    0xff36 : "Hangul_Romaja",
+    0xff37 : "Hangul_Codeinput",
+    0xff38 : "Hangul_Jeonja",
+    0xff39 : "Hangul_Banja",
+    0xff3a : "Hangul_PreHanja",
+    0xff3b : "Hangul_PostHanja",
+    0xff3c : "Hangul_SingleCandidate",
+    0xff3d : "Hangul_MultipleCandidate",
+    0xff3e : "Hangul_PreviousCandidate",
+    0xff3f : "Hangul_Special",
+    0xff7e : "Hangul_switch",
+    0x0ea1 : "Hangul_Kiyeog",
+    0x0ea2 : "Hangul_SsangKiyeog",
+    0x0ea3 : "Hangul_KiyeogSios",
+    0x0ea4 : "Hangul_Nieun",
+    0x0ea5 : "Hangul_NieunJieuj",
+    0x0ea6 : "Hangul_NieunHieuh",
+    0x0ea7 : "Hangul_Dikeud",
+    0x0ea8 : "Hangul_SsangDikeud",
+    0x0ea9 : "Hangul_Rieul",
+    0x0eaa : "Hangul_RieulKiyeog",
+    0x0eab : "Hangul_RieulMieum",
+    0x0eac : "Hangul_RieulPieub",
+    0x0ead : "Hangul_RieulSios",
+    0x0eae : "Hangul_RieulTieut",
+    0x0eaf : "Hangul_RieulPhieuf",
+    0x0eb0 : "Hangul_RieulHieuh",
+    0x0eb1 : "Hangul_Mieum",
+    0x0eb2 : "Hangul_Pieub",
+    0x0eb3 : "Hangul_SsangPieub",
+    0x0eb4 : "Hangul_PieubSios",
+    0x0eb5 : "Hangul_Sios",
+    0x0eb6 : "Hangul_SsangSios",
+    0x0eb7 : "Hangul_Ieung",
+    0x0eb8 : "Hangul_Jieuj",
+    0x0eb9 : "Hangul_SsangJieuj",
+    0x0eba : "Hangul_Cieuc",
+    0x0ebb : "Hangul_Khieuq",
+    0x0ebc : "Hangul_Tieut",
+    0x0ebd : "Hangul_Phieuf",
+    0x0ebe : "Hangul_Hieuh",
+    0x0ebf : "Hangul_A",
+    0x0ec0 : "Hangul_AE",
+    0x0ec1 : "Hangul_YA",
+    0x0ec2 : "Hangul_YAE",
+    0x0ec3 : "Hangul_EO",
+    0x0ec4 : "Hangul_E",
+    0x0ec5 : "Hangul_YEO",
+    0x0ec6 : "Hangul_YE",
+    0x0ec7 : "Hangul_O",
+    0x0ec8 : "Hangul_WA",
+    0x0ec9 : "Hangul_WAE",
+    0x0eca : "Hangul_OE",
+    0x0ecb : "Hangul_YO",
+    0x0ecc : "Hangul_U",
+    0x0ecd : "Hangul_WEO",
+    0x0ece : "Hangul_WE",
+    0x0ecf : "Hangul_WI",
+    0x0ed0 : "Hangul_YU",
+    0x0ed1 : "Hangul_EU",
+    0x0ed2 : "Hangul_YI",
+    0x0ed3 : "Hangul_I",
+    0x0ed4 : "Hangul_J_Kiyeog",
+    0x0ed5 : "Hangul_J_SsangKiyeog",
+    0x0ed6 : "Hangul_J_KiyeogSios",
+    0x0ed7 : "Hangul_J_Nieun",
+    0x0ed8 : "Hangul_J_NieunJieuj",
+    0x0ed9 : "Hangul_J_NieunHieuh",
+    0x0eda : "Hangul_J_Dikeud",
+    0x0edb : "Hangul_J_Rieul",
+    0x0edc : "Hangul_J_RieulKiyeog",
+    0x0edd : "Hangul_J_RieulMieum",
+    0x0ede : "Hangul_J_RieulPieub",
+    0x0edf : "Hangul_J_RieulSios",
+    0x0ee0 : "Hangul_J_RieulTieut",
+    0x0ee1 : "Hangul_J_RieulPhieuf",
+    0x0ee2 : "Hangul_J_RieulHieuh",
+    0x0ee3 : "Hangul_J_Mieum",
+    0x0ee4 : "Hangul_J_Pieub",
+    0x0ee5 : "Hangul_J_PieubSios",
+    0x0ee6 : "Hangul_J_Sios",
+    0x0ee7 : "Hangul_J_SsangSios",
+    0x0ee8 : "Hangul_J_Ieung",
+    0x0ee9 : "Hangul_J_Jieuj",
+    0x0eea : "Hangul_J_Cieuc",
+    0x0eeb : "Hangul_J_Khieuq",
+    0x0eec : "Hangul_J_Tieut",
+    0x0eed : "Hangul_J_Phieuf",
+    0x0eee : "Hangul_J_Hieuh",
+    0x0eef : "Hangul_RieulYeorinHieuh",
+    0x0ef0 : "Hangul_SunkyeongeumMieum",
+    0x0ef1 : "Hangul_SunkyeongeumPieub",
+    0x0ef2 : "Hangul_PanSios",
+    0x0ef3 : "Hangul_KkogjiDalrinIeung",
+    0x0ef4 : "Hangul_SunkyeongeumPhieuf",
+    0x0ef5 : "Hangul_YeorinHieuh",
+    0x0ef6 : "Hangul_AraeA",
+    0x0ef7 : "Hangul_AraeAE",
+    0x0ef8 : "Hangul_J_PanSios",
+    0x0ef9 : "Hangul_J_KkogjiDalrinIeung",
+    0x0efa : "Hangul_J_YeorinHieuh",
+    0x0eff : "Korean_Won",
+    0x1000587 : "Armenian_ligature_ew",
+    0x1000589 : "Armenian_full_stop",
+    0x1000589 : "Armenian_verjaket",
+    0x100055d : "Armenian_separation_mark",
+    0x100055d : "Armenian_but",
+    0x100058a : "Armenian_hyphen",
+    0x100058a : "Armenian_yentamna",
+    0x100055c : "Armenian_exclam",
+    0x100055c : "Armenian_amanak",
+    0x100055b : "Armenian_accent",
+    0x100055b : "Armenian_shesht",
+    0x100055e : "Armenian_question",
+    0x100055e : "Armenian_paruyk",
+    0x1000531 : "Armenian_AYB",
+    0x1000561 : "Armenian_ayb",
+    0x1000532 : "Armenian_BEN",
+    0x1000562 : "Armenian_ben",
+    0x1000533 : "Armenian_GIM",
+    0x1000563 : "Armenian_gim",
+    0x1000534 : "Armenian_DA",
+    0x1000564 : "Armenian_da",
+    0x1000535 : "Armenian_YECH",
+    0x1000565 : "Armenian_yech",
+    0x1000536 : "Armenian_ZA",
+    0x1000566 : "Armenian_za",
+    0x1000537 : "Armenian_E",
+    0x1000567 : "Armenian_e",
+    0x1000538 : "Armenian_AT",
+    0x1000568 : "Armenian_at",
+    0x1000539 : "Armenian_TO",
+    0x1000569 : "Armenian_to",
+    0x100053a : "Armenian_ZHE",
+    0x100056a : "Armenian_zhe",
+    0x100053b : "Armenian_INI",
+    0x100056b : "Armenian_ini",
+    0x100053c : "Armenian_LYUN",
+    0x100056c : "Armenian_lyun",
+    0x100053d : "Armenian_KHE",
+    0x100056d : "Armenian_khe",
+    0x100053e : "Armenian_TSA",
+    0x100056e : "Armenian_tsa",
+    0x100053f : "Armenian_KEN",
+    0x100056f : "Armenian_ken",
+    0x1000540 : "Armenian_HO",
+    0x1000570 : "Armenian_ho",
+    0x1000541 : "Armenian_DZA",
+    0x1000571 : "Armenian_dza",
+    0x1000542 : "Armenian_GHAT",
+    0x1000572 : "Armenian_ghat",
+    0x1000543 : "Armenian_TCHE",
+    0x1000573 : "Armenian_tche",
+    0x1000544 : "Armenian_MEN",
+    0x1000574 : "Armenian_men",
+    0x1000545 : "Armenian_HI",
+    0x1000575 : "Armenian_hi",
+    0x1000546 : "Armenian_NU",
+    0x1000576 : "Armenian_nu",
+    0x1000547 : "Armenian_SHA",
+    0x1000577 : "Armenian_sha",
+    0x1000548 : "Armenian_VO",
+    0x1000578 : "Armenian_vo",
+    0x1000549 : "Armenian_CHA",
+    0x1000579 : "Armenian_cha",
+    0x100054a : "Armenian_PE",
+    0x100057a : "Armenian_pe",
+    0x100054b : "Armenian_JE",
+    0x100057b : "Armenian_je",
+    0x100054c : "Armenian_RA",
+    0x100057c : "Armenian_ra",
+    0x100054d : "Armenian_SE",
+    0x100057d : "Armenian_se",
+    0x100054e : "Armenian_VEV",
+    0x100057e : "Armenian_vev",
+    0x100054f : "Armenian_TYUN",
+    0x100057f : "Armenian_tyun",
+    0x1000550 : "Armenian_RE",
+    0x1000580 : "Armenian_re",
+    0x1000551 : "Armenian_TSO",
+    0x1000581 : "Armenian_tso",
+    0x1000552 : "Armenian_VYUN",
+    0x1000582 : "Armenian_vyun",
+    0x1000553 : "Armenian_PYUR",
+    0x1000583 : "Armenian_pyur",
+    0x1000554 : "Armenian_KE",
+    0x1000584 : "Armenian_ke",
+    0x1000555 : "Armenian_O",
+    0x1000585 : "Armenian_o",
+    0x1000556 : "Armenian_FE",
+    0x1000586 : "Armenian_fe",
+    0x100055a : "Armenian_apostrophe",
+    0x10010d0 : "Georgian_an",
+    0x10010d1 : "Georgian_ban",
+    0x10010d2 : "Georgian_gan",
+    0x10010d3 : "Georgian_don",
+    0x10010d4 : "Georgian_en",
+    0x10010d5 : "Georgian_vin",
+    0x10010d6 : "Georgian_zen",
+    0x10010d7 : "Georgian_tan",
+    0x10010d8 : "Georgian_in",
+    0x10010d9 : "Georgian_kan",
+    0x10010da : "Georgian_las",
+    0x10010db : "Georgian_man",
+    0x10010dc : "Georgian_nar",
+    0x10010dd : "Georgian_on",
+    0x10010de : "Georgian_par",
+    0x10010df : "Georgian_zhar",
+    0x10010e0 : "Georgian_rae",
+    0x10010e1 : "Georgian_san",
+    0x10010e2 : "Georgian_tar",
+    0x10010e3 : "Georgian_un",
+    0x10010e4 : "Georgian_phar",
+    0x10010e5 : "Georgian_khar",
+    0x10010e6 : "Georgian_ghan",
+    0x10010e7 : "Georgian_qar",
+    0x10010e8 : "Georgian_shin",
+    0x10010e9 : "Georgian_chin",
+    0x10010ea : "Georgian_can",
+    0x10010eb : "Georgian_jil",
+    0x10010ec : "Georgian_cil",
+    0x10010ed : "Georgian_char",
+    0x10010ee : "Georgian_xan",
+    0x10010ef : "Georgian_jhan",
+    0x10010f0 : "Georgian_hae",
+    0x10010f1 : "Georgian_he",
+    0x10010f2 : "Georgian_hie",
+    0x10010f3 : "Georgian_we",
+    0x10010f4 : "Georgian_har",
+    0x10010f5 : "Georgian_hoe",
+    0x10010f6 : "Georgian_fi",
+    0x1001e8a : "Xabovedot",
+    0x100012c : "Ibreve",
+    0x10001b5 : "Zstroke",
+    0x10001e6 : "Gcaron",
+    0x10001d1 : "Ocaron",
+    0x100019f : "Obarred",
+    0x1001e8b : "xabovedot",
+    0x100012d : "ibreve",
+    0x10001b6 : "zstroke",
+    0x10001e7 : "gcaron",
+    0x10001d2 : "ocaron",
+    0x1000275 : "obarred",
+    0x100018f : "SCHWA",
+    0x1000259 : "schwa",
+    0x1001e36 : "Lbelowdot",
+    0x1001e37 : "lbelowdot",
+    0x1001ea0 : "Abelowdot",
+    0x1001ea1 : "abelowdot",
+    0x1001ea2 : "Ahook",
+    0x1001ea3 : "ahook",
+    0x1001ea4 : "Acircumflexacute",
+    0x1001ea5 : "acircumflexacute",
+    0x1001ea6 : "Acircumflexgrave",
+    0x1001ea7 : "acircumflexgrave",
+    0x1001ea8 : "Acircumflexhook",
+    0x1001ea9 : "acircumflexhook",
+    0x1001eaa : "Acircumflextilde",
+    0x1001eab : "acircumflextilde",
+    0x1001eac : "Acircumflexbelowdot",
+    0x1001ead : "acircumflexbelowdot",
+    0x1001eae : "Abreveacute",
+    0x1001eaf : "abreveacute",
+    0x1001eb0 : "Abrevegrave",
+    0x1001eb1 : "abrevegrave",
+    0x1001eb2 : "Abrevehook",
+    0x1001eb3 : "abrevehook",
+    0x1001eb4 : "Abrevetilde",
+    0x1001eb5 : "abrevetilde",
+    0x1001eb6 : "Abrevebelowdot",
+    0x1001eb7 : "abrevebelowdot",
+    0x1001eb8 : "Ebelowdot",
+    0x1001eb9 : "ebelowdot",
+    0x1001eba : "Ehook",
+    0x1001ebb : "ehook",
+    0x1001ebc : "Etilde",
+    0x1001ebd : "etilde",
+    0x1001ebe : "Ecircumflexacute",
+    0x1001ebf : "ecircumflexacute",
+    0x1001ec0 : "Ecircumflexgrave",
+    0x1001ec1 : "ecircumflexgrave",
+    0x1001ec2 : "Ecircumflexhook",
+    0x1001ec3 : "ecircumflexhook",
+    0x1001ec4 : "Ecircumflextilde",
+    0x1001ec5 : "ecircumflextilde",
+    0x1001ec6 : "Ecircumflexbelowdot",
+    0x1001ec7 : "ecircumflexbelowdot",
+    0x1001ec8 : "Ihook",
+    0x1001ec9 : "ihook",
+    0x1001eca : "Ibelowdot",
+    0x1001ecb : "ibelowdot",
+    0x1001ecc : "Obelowdot",
+    0x1001ecd : "obelowdot",
+    0x1001ece : "Ohook",
+    0x1001ecf : "ohook",
+    0x1001ed0 : "Ocircumflexacute",
+    0x1001ed1 : "ocircumflexacute",
+    0x1001ed2 : "Ocircumflexgrave",
+    0x1001ed3 : "ocircumflexgrave",
+    0x1001ed4 : "Ocircumflexhook",
+    0x1001ed5 : "ocircumflexhook",
+    0x1001ed6 : "Ocircumflextilde",
+    0x1001ed7 : "ocircumflextilde",
+    0x1001ed8 : "Ocircumflexbelowdot",
+    0x1001ed9 : "ocircumflexbelowdot",
+    0x1001eda : "Ohornacute",
+    0x1001edb : "ohornacute",
+    0x1001edc : "Ohorngrave",
+    0x1001edd : "ohorngrave",
+    0x1001ede : "Ohornhook",
+    0x1001edf : "ohornhook",
+    0x1001ee0 : "Ohorntilde",
+    0x1001ee1 : "ohorntilde",
+    0x1001ee2 : "Ohornbelowdot",
+    0x1001ee3 : "ohornbelowdot",
+    0x1001ee4 : "Ubelowdot",
+    0x1001ee5 : "ubelowdot",
+    0x1001ee6 : "Uhook",
+    0x1001ee7 : "uhook",
+    0x1001ee8 : "Uhornacute",
+    0x1001ee9 : "uhornacute",
+    0x1001eea : "Uhorngrave",
+    0x1001eeb : "uhorngrave",
+    0x1001eec : "Uhornhook",
+    0x1001eed : "uhornhook",
+    0x1001eee : "Uhorntilde",
+    0x1001eef : "uhorntilde",
+    0x1001ef0 : "Uhornbelowdot",
+    0x1001ef1 : "uhornbelowdot",
+    0x1001ef4 : "Ybelowdot",
+    0x1001ef5 : "ybelowdot",
+    0x1001ef6 : "Yhook",
+    0x1001ef7 : "yhook",
+    0x1001ef8 : "Ytilde",
+    0x1001ef9 : "ytilde",
+    0x10001a0 : "Ohorn",
+    0x10001a1 : "ohorn",
+    0x10001af : "Uhorn",
+    0x10001b0 : "uhorn",
+    0x10020a0 : "EcuSign",
+    0x10020a1 : "ColonSign",
+    0x10020a2 : "CruzeiroSign",
+    0x10020a3 : "FFrancSign",
+    0x10020a4 : "LiraSign",
+    0x10020a5 : "MillSign",
+    0x10020a6 : "NairaSign",
+    0x10020a7 : "PesetaSign",
+    0x10020a8 : "RupeeSign",
+    0x10020a9 : "WonSign",
+    0x10020aa : "NewSheqelSign",
+    0x10020ab : "DongSign",
+    0x20ac : "EuroSign",
+    0x1002070 : "zerosuperior",
+    0x1002074 : "foursuperior",
+    0x1002075 : "fivesuperior",
+    0x1002076 : "sixsuperior",
+    0x1002077 : "sevensuperior",
+    0x1002078 : "eightsuperior",
+    0x1002079 : "ninesuperior",
+    0x1002080 : "zerosubscript",
+    0x1002081 : "onesubscript",
+    0x1002082 : "twosubscript",
+    0x1002083 : "threesubscript",
+    0x1002084 : "foursubscript",
+    0x1002085 : "fivesubscript",
+    0x1002086 : "sixsubscript",
+    0x1002087 : "sevensubscript",
+    0x1002088 : "eightsubscript",
+    0x1002089 : "ninesubscript",
+    0x1002202 : "partdifferential",
+    0x1002205 : "emptyset",
+    0x1002208 : "elementof",
+    0x1002209 : "notelementof",
+    0x100220B : "containsas",
+    0x100221A : "squareroot",
+    0x100221B : "cuberoot",
+    0x100221C : "fourthroot",
+    0x100222C : "dintegral",
+    0x100222D : "tintegral",
+    0x1002235 : "because",
+    0x1002248 : "approxeq",
+    0x1002247 : "notapproxeq",
+    0x1002262 : "notidentical",
+    0x1002263 : "stricteq",
+    0xfff1 : "braille_dot_1",
+    0xfff2 : "braille_dot_2",
+    0xfff3 : "braille_dot_3",
+    0xfff4 : "braille_dot_4",
+    0xfff5 : "braille_dot_5",
+    0xfff6 : "braille_dot_6",
+    0xfff7 : "braille_dot_7",
+    0xfff8 : "braille_dot_8",
+    0xfff9 : "braille_dot_9",
+    0xfffa : "braille_dot_10",
+    0x1002800 : "braille_blank",
+    0x1002801 : "braille_dots_1",
+    0x1002802 : "braille_dots_2",
+    0x1002803 : "braille_dots_12",
+    0x1002804 : "braille_dots_3",
+    0x1002805 : "braille_dots_13",
+    0x1002806 : "braille_dots_23",
+    0x1002807 : "braille_dots_123",
+    0x1002808 : "braille_dots_4",
+    0x1002809 : "braille_dots_14",
+    0x100280a : "braille_dots_24",
+    0x100280b : "braille_dots_124",
+    0x100280c : "braille_dots_34",
+    0x100280d : "braille_dots_134",
+    0x100280e : "braille_dots_234",
+    0x100280f : "braille_dots_1234",
+    0x1002810 : "braille_dots_5",
+    0x1002811 : "braille_dots_15",
+    0x1002812 : "braille_dots_25",
+    0x1002813 : "braille_dots_125",
+    0x1002814 : "braille_dots_35",
+    0x1002815 : "braille_dots_135",
+    0x1002816 : "braille_dots_235",
+    0x1002817 : "braille_dots_1235",
+    0x1002818 : "braille_dots_45",
+    0x1002819 : "braille_dots_145",
+    0x100281a : "braille_dots_245",
+    0x100281b : "braille_dots_1245",
+    0x100281c : "braille_dots_345",
+    0x100281d : "braille_dots_1345",
+    0x100281e : "braille_dots_2345",
+    0x100281f : "braille_dots_12345",
+    0x1002820 : "braille_dots_6",
+    0x1002821 : "braille_dots_16",
+    0x1002822 : "braille_dots_26",
+    0x1002823 : "braille_dots_126",
+    0x1002824 : "braille_dots_36",
+    0x1002825 : "braille_dots_136",
+    0x1002826 : "braille_dots_236",
+    0x1002827 : "braille_dots_1236",
+    0x1002828 : "braille_dots_46",
+    0x1002829 : "braille_dots_146",
+    0x100282a : "braille_dots_246",
+    0x100282b : "braille_dots_1246",
+    0x100282c : "braille_dots_346",
+    0x100282d : "braille_dots_1346",
+    0x100282e : "braille_dots_2346",
+    0x100282f : "braille_dots_12346",
+    0x1002830 : "braille_dots_56",
+    0x1002831 : "braille_dots_156",
+    0x1002832 : "braille_dots_256",
+    0x1002833 : "braille_dots_1256",
+    0x1002834 : "braille_dots_356",
+    0x1002835 : "braille_dots_1356",
+    0x1002836 : "braille_dots_2356",
+    0x1002837 : "braille_dots_12356",
+    0x1002838 : "braille_dots_456",
+    0x1002839 : "braille_dots_1456",
+    0x100283a : "braille_dots_2456",
+    0x100283b : "braille_dots_12456",
+    0x100283c : "braille_dots_3456",
+    0x100283d : "braille_dots_13456",
+    0x100283e : "braille_dots_23456",
+    0x100283f : "braille_dots_123456",
+    0x1002840 : "braille_dots_7",
+    0x1002841 : "braille_dots_17",
+    0x1002842 : "braille_dots_27",
+    0x1002843 : "braille_dots_127",
+    0x1002844 : "braille_dots_37",
+    0x1002845 : "braille_dots_137",
+    0x1002846 : "braille_dots_237",
+    0x1002847 : "braille_dots_1237",
+    0x1002848 : "braille_dots_47",
+    0x1002849 : "braille_dots_147",
+    0x100284a : "braille_dots_247",
+    0x100284b : "braille_dots_1247",
+    0x100284c : "braille_dots_347",
+    0x100284d : "braille_dots_1347",
+    0x100284e : "braille_dots_2347",
+    0x100284f : "braille_dots_12347",
+    0x1002850 : "braille_dots_57",
+    0x1002851 : "braille_dots_157",
+    0x1002852 : "braille_dots_257",
+    0x1002853 : "braille_dots_1257",
+    0x1002854 : "braille_dots_357",
+    0x1002855 : "braille_dots_1357",
+    0x1002856 : "braille_dots_2357",
+    0x1002857 : "braille_dots_12357",
+    0x1002858 : "braille_dots_457",
+    0x1002859 : "braille_dots_1457",
+    0x100285a : "braille_dots_2457",
+    0x100285b : "braille_dots_12457",
+    0x100285c : "braille_dots_3457",
+    0x100285d : "braille_dots_13457",
+    0x100285e : "braille_dots_23457",
+    0x100285f : "braille_dots_123457",
+    0x1002860 : "braille_dots_67",
+    0x1002861 : "braille_dots_167",
+    0x1002862 : "braille_dots_267",
+    0x1002863 : "braille_dots_1267",
+    0x1002864 : "braille_dots_367",
+    0x1002865 : "braille_dots_1367",
+    0x1002866 : "braille_dots_2367",
+    0x1002867 : "braille_dots_12367",
+    0x1002868 : "braille_dots_467",
+    0x1002869 : "braille_dots_1467",
+    0x100286a : "braille_dots_2467",
+    0x100286b : "braille_dots_12467",
+    0x100286c : "braille_dots_3467",
+    0x100286d : "braille_dots_13467",
+    0x100286e : "braille_dots_23467",
+    0x100286f : "braille_dots_123467",
+    0x1002870 : "braille_dots_567",
+    0x1002871 : "braille_dots_1567",
+    0x1002872 : "braille_dots_2567",
+    0x1002873 : "braille_dots_12567",
+    0x1002874 : "braille_dots_3567",
+    0x1002875 : "braille_dots_13567",
+    0x1002876 : "braille_dots_23567",
+    0x1002877 : "braille_dots_123567",
+    0x1002878 : "braille_dots_4567",
+    0x1002879 : "braille_dots_14567",
+    0x100287a : "braille_dots_24567",
+    0x100287b : "braille_dots_124567",
+    0x100287c : "braille_dots_34567",
+    0x100287d : "braille_dots_134567",
+    0x100287e : "braille_dots_234567",
+    0x100287f : "braille_dots_1234567",
+    0x1002880 : "braille_dots_8",
+    0x1002881 : "braille_dots_18",
+    0x1002882 : "braille_dots_28",
+    0x1002883 : "braille_dots_128",
+    0x1002884 : "braille_dots_38",
+    0x1002885 : "braille_dots_138",
+    0x1002886 : "braille_dots_238",
+    0x1002887 : "braille_dots_1238",
+    0x1002888 : "braille_dots_48",
+    0x1002889 : "braille_dots_148",
+    0x100288a : "braille_dots_248",
+    0x100288b : "braille_dots_1248",
+    0x100288c : "braille_dots_348",
+    0x100288d : "braille_dots_1348",
+    0x100288e : "braille_dots_2348",
+    0x100288f : "braille_dots_12348",
+    0x1002890 : "braille_dots_58",
+    0x1002891 : "braille_dots_158",
+    0x1002892 : "braille_dots_258",
+    0x1002893 : "braille_dots_1258",
+    0x1002894 : "braille_dots_358",
+    0x1002895 : "braille_dots_1358",
+    0x1002896 : "braille_dots_2358",
+    0x1002897 : "braille_dots_12358",
+    0x1002898 : "braille_dots_458",
+    0x1002899 : "braille_dots_1458",
+    0x100289a : "braille_dots_2458",
+    0x100289b : "braille_dots_12458",
+    0x100289c : "braille_dots_3458",
+    0x100289d : "braille_dots_13458",
+    0x100289e : "braille_dots_23458",
+    0x100289f : "braille_dots_123458",
+    0x10028a0 : "braille_dots_68",
+    0x10028a1 : "braille_dots_168",
+    0x10028a2 : "braille_dots_268",
+    0x10028a3 : "braille_dots_1268",
+    0x10028a4 : "braille_dots_368",
+    0x10028a5 : "braille_dots_1368",
+    0x10028a6 : "braille_dots_2368",
+    0x10028a7 : "braille_dots_12368",
+    0x10028a8 : "braille_dots_468",
+    0x10028a9 : "braille_dots_1468",
+    0x10028aa : "braille_dots_2468",
+    0x10028ab : "braille_dots_12468",
+    0x10028ac : "braille_dots_3468",
+    0x10028ad : "braille_dots_13468",
+    0x10028ae : "braille_dots_23468",
+    0x10028af : "braille_dots_123468",
+    0x10028b0 : "braille_dots_568",
+    0x10028b1 : "braille_dots_1568",
+    0x10028b2 : "braille_dots_2568",
+    0x10028b3 : "braille_dots_12568",
+    0x10028b4 : "braille_dots_3568",
+    0x10028b5 : "braille_dots_13568",
+    0x10028b6 : "braille_dots_23568",
+    0x10028b7 : "braille_dots_123568",
+    0x10028b8 : "braille_dots_4568",
+    0x10028b9 : "braille_dots_14568",
+    0x10028ba : "braille_dots_24568",
+    0x10028bb : "braille_dots_124568",
+    0x10028bc : "braille_dots_34568",
+    0x10028bd : "braille_dots_134568",
+    0x10028be : "braille_dots_234568",
+    0x10028bf : "braille_dots_1234568",
+    0x10028c0 : "braille_dots_78",
+    0x10028c1 : "braille_dots_178",
+    0x10028c2 : "braille_dots_278",
+    0x10028c3 : "braille_dots_1278",
+    0x10028c4 : "braille_dots_378",
+    0x10028c5 : "braille_dots_1378",
+    0x10028c6 : "braille_dots_2378",
+    0x10028c7 : "braille_dots_12378",
+    0x10028c8 : "braille_dots_478",
+    0x10028c9 : "braille_dots_1478",
+    0x10028ca : "braille_dots_2478",
+    0x10028cb : "braille_dots_12478",
+    0x10028cc : "braille_dots_3478",
+    0x10028cd : "braille_dots_13478",
+    0x10028ce : "braille_dots_23478",
+    0x10028cf : "braille_dots_123478",
+    0x10028d0 : "braille_dots_578",
+    0x10028d1 : "braille_dots_1578",
+    0x10028d2 : "braille_dots_2578",
+    0x10028d3 : "braille_dots_12578",
+    0x10028d4 : "braille_dots_3578",
+    0x10028d5 : "braille_dots_13578",
+    0x10028d6 : "braille_dots_23578",
+    0x10028d7 : "braille_dots_123578",
+    0x10028d8 : "braille_dots_4578",
+    0x10028d9 : "braille_dots_14578",
+    0x10028da : "braille_dots_24578",
+    0x10028db : "braille_dots_124578",
+    0x10028dc : "braille_dots_34578",
+    0x10028dd : "braille_dots_134578",
+    0x10028de : "braille_dots_234578",
+    0x10028df : "braille_dots_1234578",
+    0x10028e0 : "braille_dots_678",
+    0x10028e1 : "braille_dots_1678",
+    0x10028e2 : "braille_dots_2678",
+    0x10028e3 : "braille_dots_12678",
+    0x10028e4 : "braille_dots_3678",
+    0x10028e5 : "braille_dots_13678",
+    0x10028e6 : "braille_dots_23678",
+    0x10028e7 : "braille_dots_123678",
+    0x10028e8 : "braille_dots_4678",
+    0x10028e9 : "braille_dots_14678",
+    0x10028ea : "braille_dots_24678",
+    0x10028eb : "braille_dots_124678",
+    0x10028ec : "braille_dots_34678",
+    0x10028ed : "braille_dots_134678",
+    0x10028ee : "braille_dots_234678",
+    0x10028ef : "braille_dots_1234678",
+    0x10028f0 : "braille_dots_5678",
+    0x10028f1 : "braille_dots_15678",
+    0x10028f2 : "braille_dots_25678",
+    0x10028f3 : "braille_dots_125678",
+    0x10028f4 : "braille_dots_35678",
+    0x10028f5 : "braille_dots_135678",
+    0x10028f6 : "braille_dots_235678",
+    0x10028f7 : "braille_dots_1235678",
+    0x10028f8 : "braille_dots_45678",
+    0x10028f9 : "braille_dots_145678",
+    0x10028fa : "braille_dots_245678",
+    0x10028fb : "braille_dots_1245678",
+    0x10028fc : "braille_dots_345678",
+    0x10028fd : "braille_dots_1345678",
+    0x10028fe : "braille_dots_2345678",
+    0x10028ff : "braille_dots_12345678"
 }
 
 def name_to_keycode (name):
-       if __name_to_keycode.has_key (name):
-               return __name_to_keycode[name]
-       return None
+    if __name_to_keycode.has_key (name):
+        return __name_to_keycode[name]
+    return None
 
 def keycode_to_name (code):
-       if __keycode_to_name.has_key (code):
-               return __keycode_to_name[code]
-       if code <  0xffff:
-               return "0x%04x" % code
-       else:
-               return "0x%06x" % code
-               
-       
+    if __keycode_to_name.has_key (code):
+        return __keycode_to_name[code]
+    if code <  0xffff:
+        return "0x%04x" % code
+    else:
+        return "0x%06x" % code
+        
+    
index bdbef85..d181522 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
 # Boston, MA  02111-1307  USA
 
 __all__ = (
-               "LANGUAGES",
-       )
+        "LANGUAGES",
+    )
 
 N_ = lambda a: a
 
 LANGUAGES = {
-       "C"  : N_("English/Keyboard"),
+    "C"  : N_("English/Keyboard"),
     "am_ET"  : N_("Amharic"),
     "ar"  : N_("Arabic"),
     "ar_EG"  : N_("Arabic (Egypt)"),
@@ -130,9 +130,9 @@ LANGUAGES = {
 }
 
 for k in LANGUAGES.keys():
-       try:
-               lang, local = k.split("_")
-               if lang not in LANGUAGES:
-                       LANGUAGES[lang] = LANGUAGES[k]
-       except:
-               pass
+    try:
+        lang, local = k.split("_")
+        if lang not in LANGUAGES:
+            LANGUAGES[lang] = LANGUAGES[k]
+    except:
+        pass
index 8705e98..0f73224 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
 # Boston, MA  02111-1307  USA
 
 __all__ = (
-               "LookupTable",
-               "lookup_table_from_dbus_value"
-       )
+        "LookupTable",
+        "lookup_table_from_dbus_value"
+    )
 
 import dbus
 from attribute import *
 from exception import *
 
 class StringList(list):
-       def clean(self):
-               del self[:]
-
-       def to_dbus_value(self):
-               value = dbus.Array([], signature="v")
-               for text, attrs in self:
-                       value.append(dbus.Struct((dbus.String(text), attrs.to_dbus_value())))
-               return value
-
-       def from_dbus_value(self, value):
-               candidates = []
-               if not isinstance(value, dbus.Array):
-                       raise dbus.Exception("Candidates must from dbus.Array(a(sa(...))")
-               for candidate in value:
-                       if not isinstance(candidate, dbus.Struct):
-                               raise IBusException("Candidates must from dbus.Array(a(sa(...)))")
-                       if len(candidate) != 2 or \
-                               not isinstance(candidate[0], dbus.String):
-                               raise IBusException("Candidates must from dbus.Array(a(sa(...)))")
-                       text = candidate[0]
-                       attrs = attr_list_from_dbus_value(candidate[1])
-                       candidates.append((text, attrs))
-
-               self.clean()
-               self[:] = candidates
+    def clean(self):
+        del self[:]
+
+    def to_dbus_value(self):
+        value = dbus.Array([], signature="v")
+        for text, attrs in self:
+            value.append(dbus.Struct((dbus.String(text), attrs.to_dbus_value())))
+        return value
+
+    def from_dbus_value(self, value):
+        candidates = []
+        if not isinstance(value, dbus.Array):
+            raise dbus.Exception("Candidates must from dbus.Array(a(sa(...))")
+        for candidate in value:
+            if not isinstance(candidate, dbus.Struct):
+                raise IBusException("Candidates must from dbus.Array(a(sa(...)))")
+            if len(candidate) != 2 or \
+                not isinstance(candidate[0], dbus.String):
+                raise IBusException("Candidates must from dbus.Array(a(sa(...)))")
+            text = candidate[0]
+            attrs = attr_list_from_dbus_value(candidate[1])
+            candidates.append((text, attrs))
+
+        self.clean()
+        self[:] = candidates
 
 class LookupTable(object):
-       def __init__(self, page_size = 5, labels = None):
-               super(LookupTable, self).__init__()
-               self._cursor_visible = False
-               self._cursor_pos = 0
-               self._candidates = StringList()
-               self.set_page_size(page_size)
+    def __init__(self, page_size = 5, labels = None):
+        super(LookupTable, self).__init__()
+        self._cursor_visible = False
+        self._cursor_pos = 0
+        self._candidates = StringList()
+        self.set_page_size(page_size)
 
-       def set_page_size(self, page_size):
-               self._page_size = page_size
+    def set_page_size(self, page_size):
+        self._page_size = page_size
 
-       def get_page_size(self):
-               return self._page_size
+    def get_page_size(self):
+        return self._page_size
 
-       def get_current_page_size(self):
-               nr_candidate = len(self._candidates)
-               nr_page, last_page_size = divmod(nr_candidate, self._page_size)
-               if self._cursor_pos / self._page_size == nr_page:
-                       return last_page_size
-               else:
-                       return self._page_size
+    def get_current_page_size(self):
+        nr_candidate = len(self._candidates)
+        nr_page, last_page_size = divmod(nr_candidate, self._page_size)
+        if self._cursor_pos / self._page_size == nr_page:
+            return last_page_size
+        else:
+            return self._page_size
 
-       def set_labels(self, labels):
-               self._labels == labels
-
-       def show_cursor(self, show = True):
-               self._cursor_visible = show
+    def set_labels(self, labels):
+        self._labels == labels
+
+    def show_cursor(self, show = True):
+        self._cursor_visible = show
 
-       def is_cursor_visible(self):
-               return self._cursor_visible
+    def is_cursor_visible(self):
+        return self._cursor_visible
 
-       def get_current_page_start(self):
-               return (self._cursor_pos / self._page_size) * self._page_size
-
-       def set_cursor_pos(self, pos):
-               if pos >= len(self._candidates) or pos < 0:
-                       return False
-               self._cursor_pos = pos
-               return True
-
-       def get_cursor_pos(self):
-               return self._cursor_pos
-
-       def get_cursor_pos_in_current_page(self):
-               page, pos_in_page = divmod(self._cursor_pos, self._page_size)
-               return pos_in_page
-
-       def set_cursor_pos_in_current_page(self, pos):
-               if pos < 0 or pos >= self._page_size:
-                       return False
-               pos += self.get_current_page_start()
-               if pos >= len(self._candidates):
-                       return False
-               self._cursor_pos = pos
-               return True
-
-
-       def page_up(self):
-               if self._cursor_pos < self._page_size:
-                       return False
-
-               self._cursor_pos -= self._page_size
-               return True
-
-       def page_down(self):
-               current_page = self._cursor_pos / self._page_size
-               nr_candidates = len(self._candidates)
-               max_page = nr_candidates / self._page_size
-
-               if current_page >= max_page:
-                       return False
-
-               pos = self._cursor_pos + self._page_size
-               if pos >= nr_candidates:
-                       return False
-               self._cursor_pos = pos
-
-               return True
-
-       def cursor_up(self):
-               if self._cursor_pos == 0:
-                       return False
-
-               self._cursor_pos -= 1
-               return True
-
-       def cursor_down(self):
-               if self._cursor_pos == len(self._candidates) - 1:
-                       return False
-
-               self._cursor_pos += 1
-               return True
-
-       def clean(self):
-               self._candidates.clean()
-               self._cursor_pos = 0
-
-       def append_candidate(self, candidate, attrs = None):
-               if attrs == None:
-                       attrs = AttrList()
-               self._candidates.append((candidate, attrs))
-
-       def get_candidate(self, index):
-               return self._candidates[index]
+    def get_current_page_start(self):
+        return (self._cursor_pos / self._page_size) * self._page_size
+
+    def set_cursor_pos(self, pos):
+        if pos >= len(self._candidates) or pos < 0:
+            return False
+        self._cursor_pos = pos
+        return True
+
+    def get_cursor_pos(self):
+        return self._cursor_pos
+
+    def get_cursor_pos_in_current_page(self):
+        page, pos_in_page = divmod(self._cursor_pos, self._page_size)
+        return pos_in_page
+
+    def set_cursor_pos_in_current_page(self, pos):
+        if pos < 0 or pos >= self._page_size:
+            return False
+        pos += self.get_current_page_start()
+        if pos >= len(self._candidates):
+            return False
+        self._cursor_pos = pos
+        return True
+
+
+    def page_up(self):
+        if self._cursor_pos < self._page_size:
+            return False
+
+        self._cursor_pos -= self._page_size
+        return True
+
+    def page_down(self):
+        current_page = self._cursor_pos / self._page_size
+        nr_candidates = len(self._candidates)
+        max_page = nr_candidates / self._page_size
+
+        if current_page >= max_page:
+            return False
+
+        pos = self._cursor_pos + self._page_size
+        if pos >= nr_candidates:
+            return False
+        self._cursor_pos = pos
+
+        return True
+
+    def cursor_up(self):
+        if self._cursor_pos == 0:
+            return False
+
+        self._cursor_pos -= 1
+        return True
+
+    def cursor_down(self):
+        if self._cursor_pos == len(self._candidates) - 1:
+            return False
+
+        self._cursor_pos += 1
+        return True
+
+    def clean(self):
+        self._candidates.clean()
+        self._cursor_pos = 0
+
+    def append_candidate(self, candidate, attrs = None):
+        if attrs == None:
+            attrs = AttrList()
+        self._candidates.append((candidate, attrs))
+
+    def get_candidate(self, index):
+        return self._candidates[index]
 
-       def get_canidates_in_current_page(self):
-               page = self._cursor_pos / self._page_size
-               start_index = page * self._page_size
-               end_index = min((page + 1) * self._page_size, len(self._candidates))
-               return self._candidates[start_index:end_index]
+    def get_canidates_in_current_page(self):
+        page = self._cursor_pos / self._page_size
+        start_index = page * self._page_size
+        end_index = min((page + 1) * self._page_size, len(self._candidates))
+        return self._candidates[start_index:end_index]
 
-       def get_current_candidate(self):
-               return self._candidates [self._cursor_pos]
+    def get_current_candidate(self):
+        return self._candidates [self._cursor_pos]
 
-       def get_number_of_candidates(self):
-               return len(self._candidates)
+    def get_number_of_candidates(self):
+        return len(self._candidates)
 
-       def __len__(self):
-               return self.get_number_of_candidates()
+    def __len__(self):
+        return self.get_number_of_candidates()
 
-       def to_dbus_value(self):
-               value = (dbus.Int32(self._page_size),
-                                dbus.Int32(self._cursor_pos),
-                                dbus.Boolean(self._cursor_visible),
-                                self._candidates.to_dbus_value())
-               return dbus.Struct(value)
+    def to_dbus_value(self):
+        value = (dbus.Int32(self._page_size),
+                 dbus.Int32(self._cursor_pos),
+                 dbus.Boolean(self._cursor_visible),
+                 self._candidates.to_dbus_value())
+        return dbus.Struct(value)
 
-       def from_dbus_value(self, value):
-               if not isinstance(value, dbus.Struct):
-                       raise dbus.Exception("LookupTable must from dbus.Struct(uuba(...))")
+    def from_dbus_value(self, value):
+        if not isinstance(value, dbus.Struct):
+            raise dbus.Exception("LookupTable must from dbus.Struct(uuba(...))")
 
-               if len(value) != 4 or \
-                       not isinstance(value[0], dbus.Int32) or \
-                       not isinstance(value[1], dbus.Int32) or \
-                       not isinstance(value[2], dbus.Boolean):
-                       raise dbus.Exception("LookupTable must from dbus.Struct(uuba(...))")
+        if len(value) != 4 or \
+            not isinstance(value[0], dbus.Int32) or \
+            not isinstance(value[1], dbus.Int32) or \
+            not isinstance(value[2], dbus.Boolean):
+            raise dbus.Exception("LookupTable must from dbus.Struct(uuba(...))")
 
-               self._candidates.from_dbus_value(value[3])
-               self._page_size = value[0]
-               self._cursor_pos = value[1]
-               self._cursor_visible = value[2]
+        self._candidates.from_dbus_value(value[3])
+        self._page_size = value[0]
+        self._cursor_pos = value[1]
+        self._cursor_visible = value[2]
 
 def lookup_table_from_dbus_value(value):
-       lookup_table = LookupTable()
-       lookup_table.from_dbus_value(value)
-       return lookup_table
+    lookup_table = LookupTable()
+    lookup_table.from_dbus_value(value)
+    return lookup_table
 
 def unit_test():
-       t = LookupTable()
-       # attrs = AttrList()
-       # attrs.append(AttributeBackground(RGB(233, 0,1), 0, 3))
-       # attrs.append(AttributeUnderline(1, 3, 5))
-       t.append_candidate("Hello")
-       value = t.to_dbus_value()
-       print value
-       t = lookup_table_from_dbus_value(value)
+    t = LookupTable()
+    # attrs = AttrList()
+    # attrs.append(AttributeBackground(RGB(233, 0,1), 0, 3))
+    # attrs.append(AttributeUnderline(1, 3, 5))
+    t.append_candidate("Hello")
+    value = t.to_dbus_value()
+    print value
+    t = lookup_table_from_dbus_value(value)
 
 if __name__ == "__main__":
-       unit_test()
+    unit_test()
index 15ae440..b652bd9 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
index 0a73863..29e850b 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
 # Boston, MA  02111-1307  USA
 
 __all__ = (
-               "Object",
-       )
+        "Object",
+    )
 
 import gobject
 
 class Object(gobject.GObject):
-       __gsignals__ = {
-               'destroy' : (
-                       gobject.SIGNAL_RUN_FIRST, 
-                       gobject.TYPE_NONE,
-                       ())
-       }
+    __gsignals__ = {
+        'destroy' : (
+            gobject.SIGNAL_RUN_FIRST, 
+            gobject.TYPE_NONE,
+            ())
+    }
 
-       def __init__(self):
-               super(Object, self).__init__()
-               self._destroyed = False
+    def __init__(self):
+        super(Object, self).__init__()
+        self._destroyed = False
 
-       def destroy(self):
-               if not self._destroyed:
-                       self.emit("destroy")
-                       self._destroyed = True
+    def destroy(self):
+        if not self._destroyed:
+            self.emit("destroy")
+            self._destroyed = True
 
 gobject.type_register(Object)
index 9386073..18cdaff 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
 # Boston, MA  02111-1307  USA
 
 __all__ = (
-               "PanelItem",
-               "PanelButton",
-               "PanelToggleButton",
-               "PanelMenu",
-       )
+        "PanelItem",
+        "PanelButton",
+        "PanelToggleButton",
+        "PanelMenu",
+    )
 
 class PanelItem:
-       pass
+    pass
 
 class PanelButton(PanelItem):
-       pass
+    pass
 
 class PanelToggleButton(PanelButton):
-       pass
+    pass
 
 class PanelMenu(PanelItem):
-       pass
+    pass
 
index 477a093..7b43c07 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
 # Boston, MA  02111-1307  USA
 
 __all__ = (
-               "PROP_TYPE_NORMAL",
-               "PROP_TYPE_TOGGLE",
-               "PROP_TYPE_RADIO",
-               "PROP_TYPE_SEPARATOR",
-               "PROP_TYPE_MENU",
-               "PROP_STATE_UNCHECKED",
-               "PROP_STATE_CHECKED",
-               "PROP_STATE_INCONSISTENT",
-               "Property",
-               "PropList",
-               "property_from_dbus_value",
-               "prop_list_from_dbus_value",
-       )
+        "PROP_TYPE_NORMAL",
+        "PROP_TYPE_TOGGLE",
+        "PROP_TYPE_RADIO",
+        "PROP_TYPE_SEPARATOR",
+        "PROP_TYPE_MENU",
+        "PROP_STATE_UNCHECKED",
+        "PROP_STATE_CHECKED",
+        "PROP_STATE_INCONSISTENT",
+        "Property",
+        "PropList",
+        "property_from_dbus_value",
+        "prop_list_from_dbus_value",
+    )
 
 import dbus
 
@@ -47,175 +47,175 @@ PROP_STATE_CHECKED = 1
 PROP_STATE_INCONSISTENT = 2
 
 class Property(object):
-       def __init__(self, name,
-                                               type = PROP_TYPE_NORMAL,
-                                               label = "",
-                                               icon = "",
-                                               tooltip = "",
-                                               sensitive = True,
-                                               visible = True,
-                                               state = PROP_STATE_UNCHECKED):
-               super(Property, self).__init__()
-               self._name = name
-               self._type = type
-               self._label = label
-               self._icon = icon
-               self._tooltip = tooltip
-               self._sensitive = sensitive
-               self._visible = visible
-               self._state = state
-               self._sub_props = PropList()
-
-       def set_sub_props(self, props):
-               self._sub_props = props
-
-       def get_sub_props(self):
-               return self._sub_props
-
-       def get_name(self):
-               return self._name
-
-       def get_type(self):
-               return self._type
-
-       def set_label(self, label):
-               self._label = label
-
-       def get_label(self):
-               return self._label
-
-       def set_tooltip(self, tooltip):
-               self._tooltip = tooltip
-
-       def get_tooltip(self):
-               return self._tooltip
-
-       def set_state(self, state):
-               self._state = state
-
-       def get_state(self):
-               return self._state
-
-       def set_sensitive(self, sensitive):
-               self._sensitive = sensitive
-
-       def get_sensitive(self):
-               return self._sensitive
-
-       def set_visible(self, visible):
-               self._visible = visible
-
-       def get_visible(self):
-               return self._visible
-
-       def is_same(self, prop, test_all = True):
-               if self._name != prop._name or self._type != prop._type:
-                       return False
-               if not test_all:
-                       return True
-               if self._label != prop._label or \
-                       self._icon != prop._icon or \
-                       self._tooltip != prop._tooltip or \
-                       self._sensitive != prop._sensitive or \
-                       self._visible != prop._visible or \
-                       self._state != prop._state:
-                       return False
-               return self._sub_props.is_same(prop._sub_props, test_all)
-
-
-       def to_dbus_value(self):
-               sub_props = self._sub_props.to_dbus_value()
-               values = (dbus.String(self._name),
-                               dbus.Int32(self._type),
-                               dbus.String(self._label),
-                               dbus.String(self._icon),
-                               dbus.String(self._tooltip),
-                               dbus.Boolean(self._sensitive),
-                               dbus.Boolean(self._visible),
-                               dbus.Int32(self._state),
-                               sub_props)
-               return dbus.Struct(values)
-
-       def from_dbus_value(self, value):
-               self._name, \
-               self._type, \
-               self._label, \
-               self._icon, \
-               self._tooltip, \
-               self._sensitive, \
-               self._visible, \
-               self._state, \
-               props = value
-
-               self._sub_props = prop_list_from_dbus_value(props)
+    def __init__(self, name,
+                        type = PROP_TYPE_NORMAL,
+                        label = "",
+                        icon = "",
+                        tooltip = "",
+                        sensitive = True,
+                        visible = True,
+                        state = PROP_STATE_UNCHECKED):
+        super(Property, self).__init__()
+        self._name = name
+        self._type = type
+        self._label = label
+        self._icon = icon
+        self._tooltip = tooltip
+        self._sensitive = sensitive
+        self._visible = visible
+        self._state = state
+        self._sub_props = PropList()
+
+    def set_sub_props(self, props):
+        self._sub_props = props
+
+    def get_sub_props(self):
+        return self._sub_props
+
+    def get_name(self):
+        return self._name
+
+    def get_type(self):
+        return self._type
+
+    def set_label(self, label):
+        self._label = label
+
+    def get_label(self):
+        return self._label
+
+    def set_tooltip(self, tooltip):
+        self._tooltip = tooltip
+
+    def get_tooltip(self):
+        return self._tooltip
+
+    def set_state(self, state):
+        self._state = state
+
+    def get_state(self):
+        return self._state
+
+    def set_sensitive(self, sensitive):
+        self._sensitive = sensitive
+
+    def get_sensitive(self):
+        return self._sensitive
+
+    def set_visible(self, visible):
+        self._visible = visible
+
+    def get_visible(self):
+        return self._visible
+
+    def is_same(self, prop, test_all = True):
+        if self._name != prop._name or self._type != prop._type:
+            return False
+        if not test_all:
+            return True
+        if self._label != prop._label or \
+            self._icon != prop._icon or \
+            self._tooltip != prop._tooltip or \
+            self._sensitive != prop._sensitive or \
+            self._visible != prop._visible or \
+            self._state != prop._state:
+            return False
+        return self._sub_props.is_same(prop._sub_props, test_all)
+
+
+    def to_dbus_value(self):
+        sub_props = self._sub_props.to_dbus_value()
+        values = (dbus.String(self._name),
+                dbus.Int32(self._type),
+                dbus.String(self._label),
+                dbus.String(self._icon),
+                dbus.String(self._tooltip),
+                dbus.Boolean(self._sensitive),
+                dbus.Boolean(self._visible),
+                dbus.Int32(self._state),
+                sub_props)
+        return dbus.Struct(values)
+
+    def from_dbus_value(self, value):
+        self._name, \
+        self._type, \
+        self._label, \
+        self._icon, \
+        self._tooltip, \
+        self._sensitive, \
+        self._visible, \
+        self._state, \
+        props = value
+
+        self._sub_props = prop_list_from_dbus_value(props)
 
 def property_from_dbus_value(value):
-       p = Property("")
-       p.from_dbus_value(value)
-       return p
+    p = Property("")
+    p.from_dbus_value(value)
+    return p
 
 class PropList(object):
-       def __init__(self):
-               super(PropList, self).__init__()
-               self._props = []
+    def __init__(self):
+        super(PropList, self).__init__()
+        self._props = []
 
-       def append(self, prop):
-               self._props.append(prop)
+    def append(self, prop):
+        self._props.append(prop)
 
-       def prepand(self, prop):
-               self._props.insert(0, prop)
+    def prepand(self, prop):
+        self._props.insert(0, prop)
 
-       def insert(self, index, prop):
-               self._props.insert(index, prop)
+    def insert(self, index, prop):
+        self._props.insert(index, prop)
 
-       def get_properties(self):
-               return self._props[:]
+    def get_properties(self):
+        return self._props[:]
 
-       def is_same(self, props, test_all = True):
-               if len(props.get_properties()) != len(self.get_properties()):
-                       return False
+    def is_same(self, props, test_all = True):
+        if len(props.get_properties()) != len(self.get_properties()):
+            return False
 
-               for a, b in zip(self.get_properties(), props.get_properties()):
-                       if not a.is_same(b, test_all):
-                               return False
-               return False
+        for a, b in zip(self.get_properties(), props.get_properties()):
+            if not a.is_same(b, test_all):
+                return False
+        return False
 
-       def to_dbus_value(self):
-               props = map(lambda p: p.to_dbus_value(), self._props)
-               return dbus.Array(props, signature = "v")
+    def to_dbus_value(self):
+        props = map(lambda p: p.to_dbus_value(), self._props)
+        return dbus.Array(props, signature = "v")
 
-       def from_dbus_value(self, value):
-               props = []
-               for p in value:
-                       props.append(property_from_dbus_value(p))
-               self._props = props
+    def from_dbus_value(self, value):
+        props = []
+        for p in value:
+            props.append(property_from_dbus_value(p))
+        self._props = props
 
-       def __iter__(self):
-               return self._props.__iter__()
+    def __iter__(self):
+        return self._props.__iter__()
 
-       def __getitem__(self, i):
-               return self._props.__getitem__(i)
+    def __getitem__(self, i):
+        return self._props.__getitem__(i)
 
 def prop_list_from_dbus_value(value):
-       props = PropList()
-       props.from_dbus_value(value)
-       return props
+    props = PropList()
+    props.from_dbus_value(value)
+    return props
 
 def test():
-       props = PropList()
-       props.append(Property("a"))
-       props.append(Property("b"))
-       props.append(Property("c"))
-       props.append(Property("d"))
-       value = props.to_dbus_value()
-       print prop_list_from_dbus_value(value)
-
-       p = Property("z")
-       p.set_sub_props(props)
-       props = PropList()
-       props.append(p)
-       value = props.to_dbus_value()
-       print prop_list_from_dbus_value(value)
+    props = PropList()
+    props.append(Property("a"))
+    props.append(Property("b"))
+    props.append(Property("c"))
+    props.append(Property("d"))
+    value = props.to_dbus_value()
+    print prop_list_from_dbus_value(value)
+
+    p = Property("z")
+    p.set_sub_props(props)
+    props = PropList()
+    props.append(p)
+    value = props.to_dbus_value()
+    print prop_list_from_dbus_value(value)
 
 if __name__ == "__main__":
-       test()
+    test()
index 1807884..44b4137 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -27,401 +27,401 @@ import ibus
 from ibus.gtk import PangoAttrList
 
 class HSeparator (gtk.HBox):
-       def __init__ (self):
-               gtk.HBox.__init__ (self)
-               self.pack_start (gtk.HSeparator (), True, True, 4)
+    def __init__ (self):
+        gtk.HBox.__init__ (self)
+        self.pack_start (gtk.HSeparator (), True, True, 4)
 
 class VSeparator (gtk.VBox):
-       def __init__ (self):
-               gtk.VBox.__init__ (self)
-               self.pack_start (gtk.VSeparator (), True, True, 4)
+    def __init__ (self):
+        gtk.VBox.__init__ (self)
+        self.pack_start (gtk.VSeparator (), True, True, 4)
 
 class CandidateArea (gtk.HBox):
-       def __init__ (self, orientation):
-               gtk.HBox.__init__ (self)
-               self._orientation = orientation
-               self._labels = []
-               self._create_ui ()
-
-       def _create_ui (self):
-               if self._orientation == gtk.ORIENTATION_VERTICAL:
-                       self._vbox1 = gtk.VBox ()
-                       self._vbox1.set_homogeneous (True)
-                       self._vbox2 = gtk.VBox ()
-                       self._vbox2.set_homogeneous (True)
-                       self.pack_start (self._vbox1, False, False, 4)
-                       self.pack_start (VSeparator(), False, False, 0)
-                       self.pack_start (self._vbox2, True, True, 4)
-
-               for i in xrange (1, 11):
-                       label1 = gtk.Label ("%d." % (i % 10))
-                       label1.set_alignment (0.0, 0.5)
-                       label1.set_no_show_all (True)
-
-                       label2 = gtk.Label ()
-                       label2.set_alignment (0.0, 0.5)
-                       label2.set_no_show_all (True)
-
-                       if self._orientation == gtk.ORIENTATION_VERTICAL:
-                               label1.set_property ("xpad", 8)
-                               label2.set_property ("xpad", 8)
-                               self._vbox1.pack_start (label1, False, False, 2)
-                               self._vbox2.pack_start (label2, False, False, 2)
-                       else:
-                               hbox = gtk.HBox ()
-                               hbox.pack_start (label1, False, False, 1)
-                               hbox.pack_start (label2, False, False, 1)
-                               self.pack_start (hbox, False, False, 4)
-
-                       self._labels.append ((label1, label2))
-
-               self._labels[0][0].show ()
-               self._labels[0][1].show ()
-
-       def set_candidates (self, candidates, focus_candidate = 0):
-               assert len (candidates) <= len (self._labels)
-               i = 0
-               for text, attrs in candidates:
-                       self._labels[i][1].set_text (text)
-                       self._labels[i][1].set_attributes (attrs)
-                       self._labels[i][0].show ()
-                       self._labels[i][1].show ()
-                       if i == focus_candidate:
-                               self._labels[i][0].set_state (gtk.STATE_SELECTED)
-                               self._labels[i][1].set_state (gtk.STATE_SELECTED)
-                       else:
-                               self._labels[i][0].set_state (gtk.STATE_NORMAL)
-                               self._labels[i][1].set_state (gtk.STATE_NORMAL)
-
-                       i += 1
-
-               for label1, label2 in self._labels[max (1, len(candidates)):]:
-                       label1.hide ()
-                       label2.hide ()
-
-               if len (candidates) == 0:
-                       self._labels[0][0].set_text ("")
-                       self._labels[0][1].set_text ("")
-               else:
-                       self._labels[0][0].set_text ("1.")
+    def __init__ (self, orientation):
+        gtk.HBox.__init__ (self)
+        self._orientation = orientation
+        self._labels = []
+        self._create_ui ()
+
+    def _create_ui (self):
+        if self._orientation == gtk.ORIENTATION_VERTICAL:
+            self._vbox1 = gtk.VBox ()
+            self._vbox1.set_homogeneous (True)
+            self._vbox2 = gtk.VBox ()
+            self._vbox2.set_homogeneous (True)
+            self.pack_start (self._vbox1, False, False, 4)
+            self.pack_start (VSeparator(), False, False, 0)
+            self.pack_start (self._vbox2, True, True, 4)
+
+        for i in xrange (1, 11):
+            label1 = gtk.Label ("%d." % (i % 10))
+            label1.set_alignment (0.0, 0.5)
+            label1.set_no_show_all (True)
+
+            label2 = gtk.Label ()
+            label2.set_alignment (0.0, 0.5)
+            label2.set_no_show_all (True)
+
+            if self._orientation == gtk.ORIENTATION_VERTICAL:
+                label1.set_property ("xpad", 8)
+                label2.set_property ("xpad", 8)
+                self._vbox1.pack_start (label1, False, False, 2)
+                self._vbox2.pack_start (label2, False, False, 2)
+            else:
+                hbox = gtk.HBox ()
+                hbox.pack_start (label1, False, False, 1)
+                hbox.pack_start (label2, False, False, 1)
+                self.pack_start (hbox, False, False, 4)
+
+            self._labels.append ((label1, label2))
+
+        self._labels[0][0].show ()
+        self._labels[0][1].show ()
+
+    def set_candidates (self, candidates, focus_candidate = 0):
+        assert len (candidates) <= len (self._labels)
+        i = 0
+        for text, attrs in candidates:
+            self._labels[i][1].set_text (text)
+            self._labels[i][1].set_attributes (attrs)
+            self._labels[i][0].show ()
+            self._labels[i][1].show ()
+            if i == focus_candidate:
+                self._labels[i][0].set_state (gtk.STATE_SELECTED)
+                self._labels[i][1].set_state (gtk.STATE_SELECTED)
+            else:
+                self._labels[i][0].set_state (gtk.STATE_NORMAL)
+                self._labels[i][1].set_state (gtk.STATE_NORMAL)
+
+            i += 1
+
+        for label1, label2 in self._labels[max (1, len(candidates)):]:
+            label1.hide ()
+            label2.hide ()
+
+        if len (candidates) == 0:
+            self._labels[0][0].set_text ("")
+            self._labels[0][1].set_text ("")
+        else:
+            self._labels[0][0].set_text ("1.")
 
 class CandidatePanel (gtk.VBox):
-       __gproperties__ = {
-               'orientation' : (gtk.Orientation,               # type
-               'orientation of candidates',                    # nick name
-               'the orientation of candidates list',   # description
-               0,
-               gobject.PARAM_READWRITE)                                # flags
-               }
-
-       __gsignals__ = {
-               "cursor-up" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       ()),
-               "cursor-down" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       ()),
-       }
-
-       def __init__ (self):
-               gtk.VBox.__init__ (self)
-               self._tooltips = gtk.Tooltips ()
-
-               self._toplevel = gtk.Window (gtk.WINDOW_POPUP)
-               self._toplevel.add (self)
-               self._toplevel.add_events (
-                       gdk.BUTTON_PRESS_MASK | \
-                       gdk.BUTTON_RELEASE_MASK | \
-                       gdk.BUTTON1_MOTION_MASK)
-               self._begin_move = False
-               self._toplevel.connect ("button-press-event", self._button_press_event_cb)
-               self._toplevel.connect ("button-release-event", self._button_release_event_cb)
-               self._toplevel.connect ("motion-notify-event", self._motion_notify_event_cb)
-
-               self._orientation = gtk.ORIENTATION_HORIZONTAL
-               self._orientation = gtk.ORIENTATION_VERTICAL
-               self._show_preedit_string = False
-               self._show_aux_string = False
-               self._show_lookup_table = False
-               self._preedit_string = ""
-               self._preedit_attrs = pango.AttrList ()
-               self._aux_string = ""
-               self._aux_attrs = pango.AttrList ()
-               self._lookup_table = None
-
-               self._recreate_ui ()
-
-       def _recreate_ui (self):
-               for w in self:
-                       self.remove (w)
-                       w.destroy ()
-               # create preedit label
-               self._preedit_label = gtk.Label (self._preedit_string)
-               self._preedit_label.set_attributes (self._preedit_attrs)
-               self._preedit_label.set_alignment (0.0, 0.5)
-               self._preedit_label.set_padding (8, 0)
-               self._preedit_label.set_no_show_all (True)
-               if self._show_preedit_string:
-                       self._preedit_label.show ()
-
-               # create aux label
-               self._aux_label = gtk.Label (self._aux_string)
-               self._aux_label.set_attributes (self._aux_attrs)
-               self._aux_label.set_alignment (0.0, 0.5)
-               self._aux_label.set_padding (8, 0)
-               self._tooltips.set_tip (self._aux_label, "Aux string")
-               self._aux_label.set_no_show_all (True)
-               if self._show_aux_string:
-                       self._aux_label.show ()
-
-               # create candidates area
-               self._candidate_area = CandidateArea (self._orientation)
-               self._candidate_area.set_no_show_all (True)
-               self.update_lookup_table (self._lookup_table, self._show_lookup_table)
-
-               # create state label
-               self._state_label = gtk.Label ()
-               self._state_label.set_size_request (20, -1)
-
-               # create buttons
-               self._prev_button = gtk.Button ()
-               self._prev_button.connect ("clicked", lambda x: self.emit ("cursor-up"))
-               self._prev_button.set_relief (gtk.RELIEF_NONE)
-               self._tooltips.set_tip (self._prev_button, "Previous candidate")
-
-               self._next_button = gtk.Button ()
-               self._next_button.connect ("clicked", lambda x: self.emit ("cursor-down"))
-               self._next_button.set_relief (gtk.RELIEF_NONE)
-               self._tooltips.set_tip (self._next_button, "Next candidate")
-
-               self._pack_all_widgets ()
-
-       def _pack_all_widgets (self):
-               if self._orientation == gtk.ORIENTATION_VERTICAL:
-                       # package all widgets in vertical mode
-                       image = gtk.Image ()
-                       image.set_from_stock (gtk.STOCK_GO_UP, gtk.ICON_SIZE_MENU)
-                       self._prev_button.set_image (image)
-
-                       image = gtk.Image ()
-                       image.set_from_stock (gtk.STOCK_GO_DOWN, gtk.ICON_SIZE_MENU)
-                       self._next_button.set_image (image)
-                       vbox = gtk.VBox ()
-                       vbox.pack_start (self._preedit_label, False, False, 0)
-                       vbox.pack_start (self._aux_label, False, False, 0)
-                       self.pack_start (vbox, False, False, 5)
-                       self.pack_start (HSeparator (), False, False)
-                       self.pack_start (self._candidate_area, False, False, 2)
-                       self.pack_start (HSeparator (), False, False)
-                       hbox= gtk.HBox ()
-                       hbox.pack_start (self._state_label, True, True)
-                       hbox.pack_start (VSeparator (), False, False)
-                       hbox.pack_start (self._prev_button, False, False, 2)
-                       hbox.pack_start (self._next_button, False, False, 2)
-                       self.pack_start (hbox, False, False)
-               else:
-                       # package all widgets in HORIZONTAL mode
-                       image = gtk.Image ()
-                       image.set_from_stock (gtk.STOCK_GO_BACK, gtk.ICON_SIZE_MENU)
-                       self._prev_button.set_image (image)
-
-                       image = gtk.Image ()
-                       image.set_from_stock (gtk.STOCK_GO_FORWARD, gtk.ICON_SIZE_MENU)
-                       self._next_button.set_image (image)
-
-                       vbox = gtk.VBox ()
-                       vbox.pack_start (self._preedit_label, False, False, 0)
-                       vbox.pack_start (self._aux_label, False, False, 0)
-                       self.pack_start (vbox, False, False, 5)
-                       self.pack_start (HSeparator (), False, False)
-                       hbox= gtk.HBox ()
-                       hbox.pack_start (self._candidate_area, True, True, 2)
-                       hbox.pack_start (VSeparator (), False, False)
-                       hbox.pack_start (self._prev_button, False, False, 2)
-                       hbox.pack_start (self._next_button, False, False, 2)
-                       self.pack_start (hbox, False, False)
-
-               # self.hide_all ()
-               # self.show_all ()
-
-       def show_preedit_string (self):
-               self._show_preedit_string = True
-               self._preedit_label.show ()
-               self._check_show_states ()
-
-       def hide_preedit_string (self):
-               self._show_preedit_string = False
-               self._preedit_label.hide ()
-               self._check_show_states ()
-
-       def update_preedit (self, text, attrs, cursor_pos, show):
-               attrs = PangoAttrList (attrs, text)
-               if show:
-                       self.show_preedit_string ()
-               else:
-                       self.hide_preedit_string ()
-               self._preedit_string = text
-               self._preedit_label.set_text (text)
-               if attrs == None:
-                       attrs = pango.AttrList ()
-               self._preedit_attrs = attrs
-               self._preedit_label.set_attributes (attrs)
-
-       def show_aux_string (self):
-               self._show_aux_string = True
-               self._aux_label.show ()
-               self._check_show_states ()
-
-       def hide_aux_string (self):
-               self._show_aux_string = False
-               self._aux_label.hide ()
-               self._check_show_states ()
-
-       def update_aux_string (self, text, attrs, show):
-               attrs = PangoAttrList (attrs, text)
-
-               if show:
-                       self.show_aux_string ()
-               else:
-                       self.hide_aux_string ()
-
-               self._aux_string = text
-               self._aux_label.set_text (text)
-               if attrs == None:
-                       attrs = pango.AttrList ()
-               self._aux_attrs = attrs
-               self._aux_label.set_attributes (attrs)
-
-       def show_lookup_table (self):
-               self._show_lookup_table = True
-               self._candidate_area.set_no_show_all (False)
-               self._candidate_area.show_all ()
-               self._check_show_states ()
-
-       def hide_lookup_table (self):
-               self._show_lookup_table = False
-               self._candidate_area.hide_all ()
-               self._candidate_area.set_no_show_all (True)
-               self._check_show_states ()
-
-       def update_lookup_table (self, lookup_table, show):
-               if lookup_table == None:
-                       lookup_table = ibus.LookupTable ()
-
-               if show:
-                       self.show_lookup_table ()
-               else:
-                       self.hide_lookup_table ()
-
-               self._lookup_table = lookup_table
-               candidates = self._lookup_table.get_canidates_in_current_page ()
-               candidates = map (lambda x: (x[0], PangoAttrList (x[1], x[0])), candidates)
-               self._candidate_area.set_candidates (candidates, self._lookup_table.get_cursor_pos_in_current_page ())
-
-       def _check_show_states (self):
-               if self._show_preedit_string or \
-                       self._show_aux_string or \
-                       self._show_lookup_table:
-                       self.show_all ()
-                       self.emit ("show")
-               else:
-                       self.hide_all ()
-                       self.emit ("hide")
-
-       def reset (self):
-               self.hide ()
-               self.hide_preedit_string ()
-               self.hide_aux_string ()
-               self.hide_lookup_table ()
-               self.update_preedit ("", None, 0, False)
-               self.update_aux_string ("", None, False)
-               self.update_lookup_table (None, False)
-
-       def set_orientation (self, orientation):
-               if self._orientation == orientation:
-                       return
-               self._orientation = orientation
-               self._recreate_ui ()
-               if self._toplevel.flags () & gtk.VISIBLE:
-                       self.show_all ()
-
-       def get_orientation (self):
-               return self._orientation
-
-       def do_set_property (self, property, value):
-               if property == 'orientation':
-                       self.set_orientation (value)
-               else:
-                       return gtk.DrawingArea.do_set_property (property, value)
-
-       def do_get_property (self, property):
-               if property == 'orientation':
-                       return self._orientation
-               else:
-                       return gtk.DrawingArea.do_get_property (property)
-
-       def do_expose_event (self, event):
-               self.style.paint_box (self.window,
-                                       gtk.STATE_NORMAL,
-                                       gtk.SHADOW_IN,
-                                       event.area,
-                                       self,
-                                       "menu",
-                                       self.allocation.x, self.allocation.y, 
-                                       self.allocation.width, self.allocation.height) 
-
-               gtk.VBox.do_expose_event (self, event)
-
-       def do_size_request (self, requisition):
-               gtk.VBox.do_size_request (self, requisition)
-               self._toplevel.resize (1, 1)
-
-       def _button_press_event_cb (self, widget, event):
-               if event.button == 1:
-                       self._begin_move = True
-                       self._press_pos = event.x_root, event.y_root
-                       self._toplevel.window.set_cursor (gdk.Cursor (gdk.FLEUR))
-                       return True
-
-               if event.button == 3:
-                       if self.get_orientation () == gtk.ORIENTATION_HORIZONTAL:
-                               self.set_orientation (gtk.ORIENTATION_VERTICAL)
-                       else:
-                               
-                               self.set_orientation (gtk.ORIENTATION_HORIZONTAL)
-                       return True
-               return False
-
-       def _button_release_event_cb (self, widget, event):
-               if event.button == 1:
-                       del self._press_pos
-                       self._begin_move = False
-                       self._toplevel.window.set_cursor (gdk.Cursor (gdk.LEFT_PTR))
-                       return True
-               return False
-
-       def _motion_notify_event_cb (self, widget, event):
-               if self._begin_move != True:
-                       return False
-               x, y = self._toplevel.get_position ()
-               x  = int (x + event.x_root - self._press_pos[0])
-               y  = int (y + event.y_root - self._press_pos[1])
-               self._toplevel.move (x, y)
-               self._press_pos = event.x_root, event.y_root
-               return True
-
-       def show_all (self):
-               gtk.VBox.show_all (self)
-               self._toplevel.show_all ()
-       
-       def hide_all (self):
-               gtk.VBox.hide_all (self)
-               self._toplevel.hide_all ()
-
-       def move (self, x, y):
-               self._toplevel.move (x, y)
+    __gproperties__ = {
+        'orientation' : (gtk.Orientation,        # type
+        'orientation of candidates',            # nick name
+        'the orientation of candidates list',    # description
+        0,
+        gobject.PARAM_READWRITE)                # flags
+        }
+
+    __gsignals__ = {
+        "cursor-up" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            ()),
+        "cursor-down" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            ()),
+    }
+
+    def __init__ (self):
+        gtk.VBox.__init__ (self)
+        self._tooltips = gtk.Tooltips ()
+
+        self._toplevel = gtk.Window (gtk.WINDOW_POPUP)
+        self._toplevel.add (self)
+        self._toplevel.add_events (
+            gdk.BUTTON_PRESS_MASK | \
+            gdk.BUTTON_RELEASE_MASK | \
+            gdk.BUTTON1_MOTION_MASK)
+        self._begin_move = False
+        self._toplevel.connect ("button-press-event", self._button_press_event_cb)
+        self._toplevel.connect ("button-release-event", self._button_release_event_cb)
+        self._toplevel.connect ("motion-notify-event", self._motion_notify_event_cb)
+
+        self._orientation = gtk.ORIENTATION_HORIZONTAL
+        self._orientation = gtk.ORIENTATION_VERTICAL
+        self._show_preedit_string = False
+        self._show_aux_string = False
+        self._show_lookup_table = False
+        self._preedit_string = ""
+        self._preedit_attrs = pango.AttrList ()
+        self._aux_string = ""
+        self._aux_attrs = pango.AttrList ()
+        self._lookup_table = None
+
+        self._recreate_ui ()
+
+    def _recreate_ui (self):
+        for w in self:
+            self.remove (w)
+            w.destroy ()
+        # create preedit label
+        self._preedit_label = gtk.Label (self._preedit_string)
+        self._preedit_label.set_attributes (self._preedit_attrs)
+        self._preedit_label.set_alignment (0.0, 0.5)
+        self._preedit_label.set_padding (8, 0)
+        self._preedit_label.set_no_show_all (True)
+        if self._show_preedit_string:
+            self._preedit_label.show ()
+
+        # create aux label
+        self._aux_label = gtk.Label (self._aux_string)
+        self._aux_label.set_attributes (self._aux_attrs)
+        self._aux_label.set_alignment (0.0, 0.5)
+        self._aux_label.set_padding (8, 0)
+        self._tooltips.set_tip (self._aux_label, "Aux string")
+        self._aux_label.set_no_show_all (True)
+        if self._show_aux_string:
+            self._aux_label.show ()
+
+        # create candidates area
+        self._candidate_area = CandidateArea (self._orientation)
+        self._candidate_area.set_no_show_all (True)
+        self.update_lookup_table (self._lookup_table, self._show_lookup_table)
+
+        # create state label
+        self._state_label = gtk.Label ()
+        self._state_label.set_size_request (20, -1)
+
+        # create buttons
+        self._prev_button = gtk.Button ()
+        self._prev_button.connect ("clicked", lambda x: self.emit ("cursor-up"))
+        self._prev_button.set_relief (gtk.RELIEF_NONE)
+        self._tooltips.set_tip (self._prev_button, "Previous candidate")
+
+        self._next_button = gtk.Button ()
+        self._next_button.connect ("clicked", lambda x: self.emit ("cursor-down"))
+        self._next_button.set_relief (gtk.RELIEF_NONE)
+        self._tooltips.set_tip (self._next_button, "Next candidate")
+
+        self._pack_all_widgets ()
+
+    def _pack_all_widgets (self):
+        if self._orientation == gtk.ORIENTATION_VERTICAL:
+            # package all widgets in vertical mode
+            image = gtk.Image ()
+            image.set_from_stock (gtk.STOCK_GO_UP, gtk.ICON_SIZE_MENU)
+            self._prev_button.set_image (image)
+
+            image = gtk.Image ()
+            image.set_from_stock (gtk.STOCK_GO_DOWN, gtk.ICON_SIZE_MENU)
+            self._next_button.set_image (image)
+            vbox = gtk.VBox ()
+            vbox.pack_start (self._preedit_label, False, False, 0)
+            vbox.pack_start (self._aux_label, False, False, 0)
+            self.pack_start (vbox, False, False, 5)
+            self.pack_start (HSeparator (), False, False)
+            self.pack_start (self._candidate_area, False, False, 2)
+            self.pack_start (HSeparator (), False, False)
+            hbox= gtk.HBox ()
+            hbox.pack_start (self._state_label, True, True)
+            hbox.pack_start (VSeparator (), False, False)
+            hbox.pack_start (self._prev_button, False, False, 2)
+            hbox.pack_start (self._next_button, False, False, 2)
+            self.pack_start (hbox, False, False)
+        else:
+            # package all widgets in HORIZONTAL mode
+            image = gtk.Image ()
+            image.set_from_stock (gtk.STOCK_GO_BACK, gtk.ICON_SIZE_MENU)
+            self._prev_button.set_image (image)
+
+            image = gtk.Image ()
+            image.set_from_stock (gtk.STOCK_GO_FORWARD, gtk.ICON_SIZE_MENU)
+            self._next_button.set_image (image)
+
+            vbox = gtk.VBox ()
+            vbox.pack_start (self._preedit_label, False, False, 0)
+            vbox.pack_start (self._aux_label, False, False, 0)
+            self.pack_start (vbox, False, False, 5)
+            self.pack_start (HSeparator (), False, False)
+            hbox= gtk.HBox ()
+            hbox.pack_start (self._candidate_area, True, True, 2)
+            hbox.pack_start (VSeparator (), False, False)
+            hbox.pack_start (self._prev_button, False, False, 2)
+            hbox.pack_start (self._next_button, False, False, 2)
+            self.pack_start (hbox, False, False)
+
+        # self.hide_all ()
+        # self.show_all ()
+
+    def show_preedit_string (self):
+        self._show_preedit_string = True
+        self._preedit_label.show ()
+        self._check_show_states ()
+
+    def hide_preedit_string (self):
+        self._show_preedit_string = False
+        self._preedit_label.hide ()
+        self._check_show_states ()
+
+    def update_preedit (self, text, attrs, cursor_pos, show):
+        attrs = PangoAttrList (attrs, text)
+        if show:
+            self.show_preedit_string ()
+        else:
+            self.hide_preedit_string ()
+        self._preedit_string = text
+        self._preedit_label.set_text (text)
+        if attrs == None:
+            attrs = pango.AttrList ()
+        self._preedit_attrs = attrs
+        self._preedit_label.set_attributes (attrs)
+
+    def show_aux_string (self):
+        self._show_aux_string = True
+        self._aux_label.show ()
+        self._check_show_states ()
+
+    def hide_aux_string (self):
+        self._show_aux_string = False
+        self._aux_label.hide ()
+        self._check_show_states ()
+
+    def update_aux_string (self, text, attrs, show):
+        attrs = PangoAttrList (attrs, text)
+
+        if show:
+            self.show_aux_string ()
+        else:
+            self.hide_aux_string ()
+
+        self._aux_string = text
+        self._aux_label.set_text (text)
+        if attrs == None:
+            attrs = pango.AttrList ()
+        self._aux_attrs = attrs
+        self._aux_label.set_attributes (attrs)
+
+    def show_lookup_table (self):
+        self._show_lookup_table = True
+        self._candidate_area.set_no_show_all (False)
+        self._candidate_area.show_all ()
+        self._check_show_states ()
+
+    def hide_lookup_table (self):
+        self._show_lookup_table = False
+        self._candidate_area.hide_all ()
+        self._candidate_area.set_no_show_all (True)
+        self._check_show_states ()
+
+    def update_lookup_table (self, lookup_table, show):
+        if lookup_table == None:
+            lookup_table = ibus.LookupTable ()
+
+        if show:
+            self.show_lookup_table ()
+        else:
+            self.hide_lookup_table ()
+
+        self._lookup_table = lookup_table
+        candidates = self._lookup_table.get_canidates_in_current_page ()
+        candidates = map (lambda x: (x[0], PangoAttrList (x[1], x[0])), candidates)
+        self._candidate_area.set_candidates (candidates, self._lookup_table.get_cursor_pos_in_current_page ())
+
+    def _check_show_states (self):
+        if self._show_preedit_string or \
+            self._show_aux_string or \
+            self._show_lookup_table:
+            self.show_all ()
+            self.emit ("show")
+        else:
+            self.hide_all ()
+            self.emit ("hide")
+
+    def reset (self):
+        self.hide ()
+        self.hide_preedit_string ()
+        self.hide_aux_string ()
+        self.hide_lookup_table ()
+        self.update_preedit ("", None, 0, False)
+        self.update_aux_string ("", None, False)
+        self.update_lookup_table (None, False)
+
+    def set_orientation (self, orientation):
+        if self._orientation == orientation:
+            return
+        self._orientation = orientation
+        self._recreate_ui ()
+        if self._toplevel.flags () & gtk.VISIBLE:
+            self.show_all ()
+
+    def get_orientation (self):
+        return self._orientation
+
+    def do_set_property (self, property, value):
+        if property == 'orientation':
+            self.set_orientation (value)
+        else:
+            return gtk.DrawingArea.do_set_property (property, value)
+
+    def do_get_property (self, property):
+        if property == 'orientation':
+            return self._orientation
+        else:
+            return gtk.DrawingArea.do_get_property (property)
+
+    def do_expose_event (self, event):
+        self.style.paint_box (self.window,
+                    gtk.STATE_NORMAL,
+                    gtk.SHADOW_IN,
+                    event.area,
+                    self,
+                    "menu",
+                    self.allocation.x, self.allocation.y, 
+                    self.allocation.width, self.allocation.height) 
+
+        gtk.VBox.do_expose_event (self, event)
+
+    def do_size_request (self, requisition):
+        gtk.VBox.do_size_request (self, requisition)
+        self._toplevel.resize (1, 1)
+
+    def _button_press_event_cb (self, widget, event):
+        if event.button == 1:
+            self._begin_move = True
+            self._press_pos = event.x_root, event.y_root
+            self._toplevel.window.set_cursor (gdk.Cursor (gdk.FLEUR))
+            return True
+
+        if event.button == 3:
+            if self.get_orientation () == gtk.ORIENTATION_HORIZONTAL:
+                self.set_orientation (gtk.ORIENTATION_VERTICAL)
+            else:
+                
+                self.set_orientation (gtk.ORIENTATION_HORIZONTAL)
+            return True
+        return False
+
+    def _button_release_event_cb (self, widget, event):
+        if event.button == 1:
+            del self._press_pos
+            self._begin_move = False
+            self._toplevel.window.set_cursor (gdk.Cursor (gdk.LEFT_PTR))
+            return True
+        return False
+
+    def _motion_notify_event_cb (self, widget, event):
+        if self._begin_move != True:
+            return False
+        x, y = self._toplevel.get_position ()
+        x  = int (x + event.x_root - self._press_pos[0])
+        y  = int (y + event.y_root - self._press_pos[1])
+        self._toplevel.move (x, y)
+        self._press_pos = event.x_root, event.y_root
+        return True
+
+    def show_all (self):
+        gtk.VBox.show_all (self)
+        self._toplevel.show_all ()
+    
+    def hide_all (self):
+        gtk.VBox.hide_all (self)
+        self._toplevel.hide_all ()
+
+    def move (self, x, y):
+        self._toplevel.move (x, y)
 
 gobject.type_register (CandidatePanel, "IBusCandidate")
 
index b70aa66..0e8a2ec 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -24,79 +24,79 @@ import gtk.gdk as gdk
 import gobject
 
 class Handle (gtk.EventBox):
-       def __init__ (self):
-               gtk.EventBox.__init__ (self)
-               self.set_visible_window (False)
-               self.set_size_request (10, -1)
-               self.set_events (
-                       gdk.EXPOSURE_MASK | \
-                       gdk.BUTTON_PRESS_MASK | \
-                       gdk.BUTTON_RELEASE_MASK | \
-                       gdk.BUTTON1_MOTION_MASK)
+    def __init__ (self):
+        gtk.EventBox.__init__ (self)
+        self.set_visible_window (False)
+        self.set_size_request (10, -1)
+        self.set_events (
+            gdk.EXPOSURE_MASK | \
+            gdk.BUTTON_PRESS_MASK | \
+            gdk.BUTTON_RELEASE_MASK | \
+            gdk.BUTTON1_MOTION_MASK)
 
-               self._move_begined = False
+        self._move_begined = False
 
-               root = gdk.get_default_root_window ()
-               workarea = root.property_get ("_NET_WORKAREA")[2]
+        root = gdk.get_default_root_window ()
+        workarea = root.property_get ("_NET_WORKAREA")[2]
 
-       def do_button_press_event (self, event):
-               if event.button == 1:
-                       root = gdk.get_default_root_window ()
-                       desktop = root.property_get ("_NET_CURRENT_DESKTOP")[2][0]
-                       self._workarea = root.property_get ("_NET_WORKAREA")[2][desktop * 4: (desktop + 1) * 4]
-                       self._move_begined = True
-                       toplevel = self.get_toplevel ()
-                       x, y = toplevel.get_position ()
-                       self._press_pos = event.x_root - x, event.y_root - y
-                       self.window.set_cursor (gdk.Cursor (gdk.FLEUR))
-                       return True
-               return False
+    def do_button_press_event (self, event):
+        if event.button == 1:
+            root = gdk.get_default_root_window ()
+            desktop = root.property_get ("_NET_CURRENT_DESKTOP")[2][0]
+            self._workarea = root.property_get ("_NET_WORKAREA")[2][desktop * 4: (desktop + 1) * 4]
+            self._move_begined = True
+            toplevel = self.get_toplevel ()
+            x, y = toplevel.get_position ()
+            self._press_pos = event.x_root - x, event.y_root - y
+            self.window.set_cursor (gdk.Cursor (gdk.FLEUR))
+            return True
+        return False
 
-       def do_button_release_event (self, event):
-               if event.button == 1:
-                       self._move_begined = False
-                       del self._press_pos
-                       del self._workarea
-                       self.window.set_cursor (gdk.Cursor (gdk.LEFT_PTR))
-                       return True
+    def do_button_release_event (self, event):
+        if event.button == 1:
+            self._move_begined = False
+            del self._press_pos
+            del self._workarea
+            self.window.set_cursor (gdk.Cursor (gdk.LEFT_PTR))
+            return True
 
-               return False
+        return False
 
-       def do_motion_notify_event (self, event):
-               if not self._move_begined:
-                       return
-               toplevel = self.get_toplevel ()
-               x, y = toplevel.get_position ()
-               x  = int (event.x_root - self._press_pos[0])
-               y  = int (event.y_root - self._press_pos[1])
+    def do_motion_notify_event (self, event):
+        if not self._move_begined:
+            return
+        toplevel = self.get_toplevel ()
+        x, y = toplevel.get_position ()
+        x  = int (event.x_root - self._press_pos[0])
+        y  = int (event.y_root - self._press_pos[1])
 
-               if x < self._workarea[0] and x > self._workarea[0] - 16:
-                       x = self._workarea[0]
-               if y < self._workarea[1] and y > self._workarea[1] - 16:
-                       y = self._workarea[1]
+        if x < self._workarea[0] and x > self._workarea[0] - 16:
+            x = self._workarea[0]
+        if y < self._workarea[1] and y > self._workarea[1] - 16:
+            y = self._workarea[1]
 
-               w, h = toplevel.get_size ()
-               if x + w > self._workarea[0] + self._workarea[2] and \
-                       x + w < self._workarea[0] + self._workarea[2] + 16:
-                       x = self._workarea[0] + self._workarea[2] - w
-               if y + h > self._workarea[1] + self._workarea[3] and \
-                       y + h < self._workarea[1] + self._workarea[3] + 16:
-                       y =  self._workarea[1] + self._workarea[3] - h
+        w, h = toplevel.get_size ()
+        if x + w > self._workarea[0] + self._workarea[2] and \
+            x + w < self._workarea[0] + self._workarea[2] + 16:
+            x = self._workarea[0] + self._workarea[2] - w
+        if y + h > self._workarea[1] + self._workarea[3] and \
+            y + h < self._workarea[1] + self._workarea[3] + 16:
+            y =  self._workarea[1] + self._workarea[3] - h
 
-               toplevel.move (x, y)
+        toplevel.move (x, y)
 
-       def do_expose_event (self, event):
-               self.style.paint_handle (
-                                       self.window,
-                                       gtk.STATE_NORMAL,
-                                       gtk.SHADOW_OUT,
-                                       event.area,
-                                       self,
-                                       "",
-                                       self.allocation.x, self.allocation.y, 
-                                       10, self.allocation.height,
-                                       gtk.ORIENTATION_VERTICAL)
-               return True
+    def do_expose_event (self, event):
+        self.style.paint_handle (
+                    self.window,
+                    gtk.STATE_NORMAL,
+                    gtk.SHADOW_OUT,
+                    event.area,
+                    self,
+                    "",
+                    self.allocation.x, self.allocation.y, 
+                    10, self.allocation.height,
+                    gtk.ORIENTATION_VERTICAL)
+        return True
 
 gobject.type_register (Handle, "IBusHandle")
 
index 51652a9..7910b7b 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -23,9 +23,9 @@ import gtk
 import gtk.gdk as gdk
 
 class Image (gtk.Image):
-       def __init__ (self, filename, width, height):
-               gtk.Image.__init__ (self)
-               icon = gtk.IconSource
-               pixbuf = gdk.pixbuf_new_from_file_at_scale (filename, width, height, True)
-               self.set_from_pixbuf (pixbuf)
+    def __init__ (self, filename, width, height):
+        gtk.Image.__init__ (self)
+        icon = gtk.IconSource
+        pixbuf = gdk.pixbuf_new_from_file_at_scale (filename, width, height, True)
+        self.set_from_pixbuf (pixbuf)
 
index 704e962..d3d4454 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -27,127 +27,127 @@ from image import Image
 from handle import Handle
 from menu import menu_position
 from toolitem import ToolButton,\
-       ToggleToolButton, \
-       SeparatorToolItem, \
-       MenuToolButton
+    ToggleToolButton, \
+    SeparatorToolItem, \
+    MenuToolButton
 
 ICON_SIZE = gtk.ICON_SIZE_MENU
 
 class LanguageBar (gtk.Toolbar):
-       __gsignals__ = {
-               "property-activate" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_STRING, gobject.TYPE_INT)),
-               "get-im-menu" : (
-                       gobject.SIGNAL_RUN_LAST,
-                       gobject.TYPE_PYOBJECT,
-                       ()),
-               }
-
-       def __init__ (self):
-               gtk.Toolbar.__init__ (self)
-               self.set_style (gtk.TOOLBAR_ICONS)
-               self.set_show_arrow (False)
-               self.set_property ("icon-size", ICON_SIZE)
-               self._create_ui ()
-
-               self._properties = []
-               self._toplevel = gtk.Window (gtk.WINDOW_POPUP)
-               self._toplevel.add (self)
-
-               root = gdk.get_default_root_window ()
-               workarea = root.property_get ("_NET_WORKAREA")[2]
-               self._toplevel.move (workarea[2] - 200, workarea[3] - 40)
-
-       def _create_ui (self):
-               # create move handle
-               self._handle = gtk.ToolItem ()
-               self._handle.add (Handle ())
-               self.insert (self._handle, -1)
-
-               # create input methods menu
-               self._im_menu = ToggleToolButton (ibus.Property (name = "", type = ibus.PROP_TYPE_TOGGLE, icon = "engine-default", tooltip = "Swicth engine"))
-               self._im_menu.connect ("toggled", self._im_menu_toggled_cb)
-               self.insert (self._im_menu, -1)
-
-       def _im_menu_toggled_cb (self, widget):
-               if self._im_menu.get_active ():
-                       menu = self.emit ("get-im-menu")
-                       menu.connect ("deactivate", self._im_menu_deactivate_cb)
-                       menu.popup (None, None,
-                               menu_position,
-                               0,
-                               gtk.get_current_event_time (),
-                               widget)
-       def _im_menu_deactivate_cb (self, menu):
-               self._im_menu.set_active (False)
-
-       def _remove_properties (self):
-               # reset all properties
-
-               map (lambda i: i.destroy (), self._properties)
-               self._properties = []
-
-       def do_show (self):
-               gtk.Toolbar.do_show (self)
-
-       def do_size_request (self, requisition):
-               gtk.Toolbar.do_size_request (self, requisition)
-               self._toplevel.resize (1, 1)
-
-       def set_im_icon (self, icon_name):
-               self._im_menu.set_icon_name (icon_name)
-
-       def reset (self):
-               self._remove_properties ()
-
-       def register_properties (self, props):
-               self._remove_properties ()
-               # create new properties
-               for prop in props:
-                       if prop._type == ibus.PROP_TYPE_NORMAL:
-                               item = ToolButton (prop = prop)
-                       elif prop._type == ibus.PROP_TYPE_TOGGLE:
-                               item = ToggleToolButton (prop = prop)
-                       elif prop._type == ibus.PROP_TYPE_MENU:
-                               item = MenuToolButton (prop = prop)
-                       elif prop._type == PROP_TYPE_SEPARATOR:
-                               item = SeparatorToolItem ()
-                       else:
-                               raise IBusException ("Unknown property type = %d" % prop._type)
-
-                       item.connect ("property-activate",
-                                               lambda w, n, s: self.emit ("property-activate", n, s))
-
-                       item.set_sensitive (prop._sensitive)
-
-                       item.set_no_show_all (True)
-
-                       if prop._visible:
-                               item.show ()
-                       else:
-                               item.hide ()
-
-                       self._properties.append (item)
-                       self.insert (item, -1)
-
-       def update_property (self, prop):
-               map (lambda x: x.update_property (prop), self._properties)
-
-       def show_all (self):
-               self._toplevel.show_all ()
-               gtk.Toolbar.show_all (self)
-
-       def hide_all (self):
-               self._toplevel.hide_all ()
-               gtk.Toolbar.hide_all (self)
-
-       def focus_in (self):
-               self._im_menu.set_sensitive (True)
-
-       def focus_out (self):
-               self._im_menu.set_sensitive (False)
+    __gsignals__ = {
+        "property-activate" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            (gobject.TYPE_STRING, gobject.TYPE_INT)),
+        "get-im-menu" : (
+            gobject.SIGNAL_RUN_LAST,
+            gobject.TYPE_PYOBJECT,
+            ()),
+        }
+
+    def __init__ (self):
+        gtk.Toolbar.__init__ (self)
+        self.set_style (gtk.TOOLBAR_ICONS)
+        self.set_show_arrow (False)
+        self.set_property ("icon-size", ICON_SIZE)
+        self._create_ui ()
+
+        self._properties = []
+        self._toplevel = gtk.Window (gtk.WINDOW_POPUP)
+        self._toplevel.add (self)
+
+        root = gdk.get_default_root_window ()
+        workarea = root.property_get ("_NET_WORKAREA")[2]
+        self._toplevel.move (workarea[2] - 200, workarea[3] - 40)
+
+    def _create_ui (self):
+        # create move handle
+        self._handle = gtk.ToolItem ()
+        self._handle.add (Handle ())
+        self.insert (self._handle, -1)
+
+        # create input methods menu
+        self._im_menu = ToggleToolButton (ibus.Property (name = "", type = ibus.PROP_TYPE_TOGGLE, icon = "engine-default", tooltip = "Swicth engine"))
+        self._im_menu.connect ("toggled", self._im_menu_toggled_cb)
+        self.insert (self._im_menu, -1)
+
+    def _im_menu_toggled_cb (self, widget):
+        if self._im_menu.get_active ():
+            menu = self.emit ("get-im-menu")
+            menu.connect ("deactivate", self._im_menu_deactivate_cb)
+            menu.popup (None, None,
+                menu_position,
+                0,
+                gtk.get_current_event_time (),
+                widget)
+    def _im_menu_deactivate_cb (self, menu):
+        self._im_menu.set_active (False)
+
+    def _remove_properties (self):
+        # reset all properties
+
+        map (lambda i: i.destroy (), self._properties)
+        self._properties = []
+
+    def do_show (self):
+        gtk.Toolbar.do_show (self)
+
+    def do_size_request (self, requisition):
+        gtk.Toolbar.do_size_request (self, requisition)
+        self._toplevel.resize (1, 1)
+
+    def set_im_icon (self, icon_name):
+        self._im_menu.set_icon_name (icon_name)
+
+    def reset (self):
+        self._remove_properties ()
+
+    def register_properties (self, props):
+        self._remove_properties ()
+        # create new properties
+        for prop in props:
+            if prop._type == ibus.PROP_TYPE_NORMAL:
+                item = ToolButton (prop = prop)
+            elif prop._type == ibus.PROP_TYPE_TOGGLE:
+                item = ToggleToolButton (prop = prop)
+            elif prop._type == ibus.PROP_TYPE_MENU:
+                item = MenuToolButton (prop = prop)
+            elif prop._type == PROP_TYPE_SEPARATOR:
+                item = SeparatorToolItem ()
+            else:
+                raise IBusException ("Unknown property type = %d" % prop._type)
+
+            item.connect ("property-activate",
+                        lambda w, n, s: self.emit ("property-activate", n, s))
+
+            item.set_sensitive (prop._sensitive)
+
+            item.set_no_show_all (True)
+
+            if prop._visible:
+                item.show ()
+            else:
+                item.hide ()
+
+            self._properties.append (item)
+            self.insert (item, -1)
+
+    def update_property (self, prop):
+        map (lambda x: x.update_property (prop), self._properties)
+
+    def show_all (self):
+        self._toplevel.show_all ()
+        gtk.Toolbar.show_all (self)
+
+    def hide_all (self):
+        self._toplevel.hide_all ()
+        gtk.Toolbar.hide_all (self)
+
+    def focus_in (self):
+        self._im_menu.set_sensitive (True)
+
+    def focus_out (self):
+        self._im_menu.set_sensitive (False)
 
 gobject.type_register (LanguageBar, "IBusLanguageBar")
 
index 3d0f881..ece175f 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -29,60 +29,60 @@ import dbus.mainloop.glib
 import panel
 
 class PanelApplication:
-       def __init__ (self):
-               self._conn = ibus.Connection ()
-               self._conn.add_signal_receiver (self._disconnected_cb,
-                                                       "Disconnected",
-                                                       dbus_interface = dbus.LOCAL_IFACE)
+    def __init__ (self):
+        self._conn = ibus.Connection ()
+        self._conn.add_signal_receiver (self._disconnected_cb,
+                            "Disconnected",
+                            dbus_interface = dbus.LOCAL_IFACE)
 
-               self._ibus = self._conn.get_ibus ()
-               self._panel = panel.PanelProxy (self._conn, "/org/freedesktop/IBus/Panel", self._ibus)
+        self._ibus = self._conn.get_ibus ()
+        self._panel = panel.PanelProxy (self._conn, "/org/freedesktop/IBus/Panel", self._ibus)
 
-               self._ibus.RegisterPanel (self._panel, True)
+        self._ibus.RegisterPanel (self._panel, True)
 
-       def run (self):
-               gtk.main ()
+    def run (self):
+        gtk.main ()
 
-       def _disconnected_cb (self):
-               print "disconnected"
-               gtk.main_quit ()
+    def _disconnected_cb (self):
+        print "disconnected"
+        gtk.main_quit ()
 
 
 
 def launch_panel ():
-       dbus.mainloop.glib.DBusGMainLoop (set_as_default=True)
-       # gtk.settings_get_default ().props.gtk_theme_name = "/home/phuang/.themes/aud-Default/gtk-2.0/gtkrc"
-       # gtk.rc_parse ("./themes/default/gtkrc")
-       PanelApplication ().run ()
+    dbus.mainloop.glib.DBusGMainLoop (set_as_default=True)
+    # gtk.settings_get_default ().props.gtk_theme_name = "/home/phuang/.themes/aud-Default/gtk-2.0/gtkrc"
+    # gtk.rc_parse ("./themes/default/gtkrc")
+    PanelApplication ().run ()
 
 def print_help (out, v = 0):
-       print >> out, "-h, --help             show this message."
-       print >> out, "-d, --daemonize        daemonize ibus"
-       sys.exit (v)
+    print >> out, "-h, --help             show this message."
+    print >> out, "-d, --daemonize        daemonize ibus"
+    sys.exit (v)
 
 def main ():
-       daemonize = False
-       shortopt = "hd"
-       longopt = ["help", "daemonize"]
-       try:
-               opts, args = getopt.getopt (sys.argv[1:], shortopt, longopt)
-       except getopt.GetoptError, err:
-               print_help (sys.stderr, 1)
+    daemonize = False
+    shortopt = "hd"
+    longopt = ["help", "daemonize"]
+    try:
+        opts, args = getopt.getopt (sys.argv[1:], shortopt, longopt)
+    except getopt.GetoptError, err:
+        print_help (sys.stderr, 1)
 
-       for o, a in opts:
-               if o in ("-h", "--help"):
-                       print_help (sys.stdout)
-               elif o in ("-d", "--daemonize"):
-                       daemonize = True
-               else:
-                       print >> sys.stderr, "Unknown argument: %s" % o
-                       print_help (sys.stderr, 1)
+    for o, a in opts:
+        if o in ("-h", "--help"):
+            print_help (sys.stdout)
+        elif o in ("-d", "--daemonize"):
+            daemonize = True
+        else:
+            print >> sys.stderr, "Unknown argument: %s" % o
+            print_help (sys.stderr, 1)
 
-       if daemonize:
-               if os.fork ():
-                       sys.exit ()
+    if daemonize:
+        if os.fork ():
+            sys.exit ()
 
-       launch_panel ()
+    launch_panel ()
 
 if __name__ == "__main__":
-       main ()
+    main ()
index 0c6dc25..bcb9cbe 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -25,182 +25,182 @@ import ibus
 from propitem import PropItem
 
 class Menu (gtk.Menu, PropItem):
-       __gsignals__ = {
-       "property-activate" : (
-               gobject.SIGNAL_RUN_FIRST,
-               gobject.TYPE_NONE,
-               (gobject.TYPE_STRING, gobject.TYPE_INT)),
-       }
-
-       def __init__ (self, prop):
-               gtk.Menu.__init__ (self)
-               PropItem.__init__ (self, prop)
-
-               self.set_take_focus (False)
-               self._create_items (self._prop.get_sub_props ())
-               self.show_all ()
-               self.set_sensitive (prop._sensitive)
-
-       def _create_items (self, props):
-               radio_group = None
-
-               for prop in props:
-                       if prop._type == ibus.PROP_TYPE_NORMAL:
-                               item = gtk.ImageMenuItem (prop)
-                       elif prop._type == ibus.PROP_TYPE_TOGGLE:
-                               item = CheckMenuItem (prop)
-                       elif prop._type == ibus.PROP_TYPE_RADIO:
-                               item = RadioMenuItem (radio_group, prop)
-                               radio_group = item
-                       elif prop._type == ibus.PROP_TYPE_SEPARATOR:
-                               item = SeparatorMenuItem ()
-                               radio_group = None
-                       elif prop._type == ibus.PROP_TYPE_MENU:
-                               item = gtk.ImageMenuItem (prop)
-                               item.set_submenu (Menu (prop))
-                       else:
-                               assert Fasle
-
-                       item.set_sensitive (prop._sensitive)
-                       if prop._visible:
-                               item.set_no_show_all (False)
-                               item.show ()
-                       else:
-                               item.set_no_show_all (True)
-                               item.hide ()
-
-                       item.connect ("property-activate", lambda w,n,s: self.emit ("property-activate", n, s))
-
-                       self.append (item)
-                       self._sub_items.append (item)
-
-       def popup (self, button, active_time, widget):
-               gtk.Menu.popup (self, None, None, menu_position,
-                                                       button, active_time, widget)
-
-       def _property_clicked (self, item, prop):
-               pass
+    __gsignals__ = {
+    "property-activate" : (
+        gobject.SIGNAL_RUN_FIRST,
+        gobject.TYPE_NONE,
+        (gobject.TYPE_STRING, gobject.TYPE_INT)),
+    }
+
+    def __init__ (self, prop):
+        gtk.Menu.__init__ (self)
+        PropItem.__init__ (self, prop)
+
+        self.set_take_focus (False)
+        self._create_items (self._prop.get_sub_props ())
+        self.show_all ()
+        self.set_sensitive (prop._sensitive)
+
+    def _create_items (self, props):
+        radio_group = None
+
+        for prop in props:
+            if prop._type == ibus.PROP_TYPE_NORMAL:
+                item = gtk.ImageMenuItem (prop)
+            elif prop._type == ibus.PROP_TYPE_TOGGLE:
+                item = CheckMenuItem (prop)
+            elif prop._type == ibus.PROP_TYPE_RADIO:
+                item = RadioMenuItem (radio_group, prop)
+                radio_group = item
+            elif prop._type == ibus.PROP_TYPE_SEPARATOR:
+                item = SeparatorMenuItem ()
+                radio_group = None
+            elif prop._type == ibus.PROP_TYPE_MENU:
+                item = gtk.ImageMenuItem (prop)
+                item.set_submenu (Menu (prop))
+            else:
+                assert Fasle
+
+            item.set_sensitive (prop._sensitive)
+            if prop._visible:
+                item.set_no_show_all (False)
+                item.show ()
+            else:
+                item.set_no_show_all (True)
+                item.hide ()
+
+            item.connect ("property-activate", lambda w,n,s: self.emit ("property-activate", n, s))
+
+            self.append (item)
+            self._sub_items.append (item)
+
+    def popup (self, button, active_time, widget):
+        gtk.Menu.popup (self, None, None, menu_position,
+                            button, active_time, widget)
+
+    def _property_clicked (self, item, prop):
+        pass
 
 
 class ImageMenuItem (gtk.ImageMenuItem, PropItem):
-       __gsignals__ = {
-       "property-activate" : (
-               gobject.SIGNAL_RUN_FIRST,
-               gobject.TYPE_NONE,
-               (gobject.TYPE_STRING, gobject.TYPE_INT)),
-       }
-
-       def __init__ (self, prop):
-               gtk.ImageMenuItem.__init__ (self, label = prop._label)
-               PropItem.__init__ (self, prop)
-
-               if self._prop._icon:
-                       self.set_image (gtk.image_new_from_icon_name  (prop._icon, gtk.ICON_SIZE_MENU))
-
-               if self._prop._visible:
-                       self.set_no_show_all (False)
-                       self.show_all ()
-               else:
-                       self.set_no_show_all (True)
-                       self.hide_all ()
-
-       def do_activate (self):
-               self.emit ("property-activate", self._prop._name, self._prop._state)
-
-       def property_changed (self):
-               self.set_sensitive (self._prop._sensitive)
-               if self._prop._visible:
-                       self.set_no_show_all (False)
-                       self.show_all ()
-               else:
-                       self.set_no_show_all (True)
-                       self.hide_all ()
+    __gsignals__ = {
+    "property-activate" : (
+        gobject.SIGNAL_RUN_FIRST,
+        gobject.TYPE_NONE,
+        (gobject.TYPE_STRING, gobject.TYPE_INT)),
+    }
+
+    def __init__ (self, prop):
+        gtk.ImageMenuItem.__init__ (self, label = prop._label)
+        PropItem.__init__ (self, prop)
+
+        if self._prop._icon:
+            self.set_image (gtk.image_new_from_icon_name  (prop._icon, gtk.ICON_SIZE_MENU))
+
+        if self._prop._visible:
+            self.set_no_show_all (False)
+            self.show_all ()
+        else:
+            self.set_no_show_all (True)
+            self.hide_all ()
+
+    def do_activate (self):
+        self.emit ("property-activate", self._prop._name, self._prop._state)
+
+    def property_changed (self):
+        self.set_sensitive (self._prop._sensitive)
+        if self._prop._visible:
+            self.set_no_show_all (False)
+            self.show_all ()
+        else:
+            self.set_no_show_all (True)
+            self.hide_all ()
 
 
 class CheckMenuItem (gtk.CheckMenuItem, PropItem):
-       __gsignals__ = {
-       "property-activate" : (
-               gobject.SIGNAL_RUN_FIRST,
-               gobject.TYPE_NONE,
-               (gobject.TYPE_STRING, gobject.TYPE_INT)),
-       }
-
-       def __init__ (self, prop):
-               gtk.CheckMenuItem.__init__ (self, label = prop._label)
-               PropItem.__init__ (self, prop)
-
-               self.set_active (self._prop._state == ibus.PROP_STATE_CHECKED)
-
-               if prop._visible:
-                       self.set_no_show_all (False)
-                       self.show_all ()
-               else:
-                       self.set_no_show_all (True)
-                       self.hide_all ()
-
-       def do_toggled (self):
-               if self.get_active ():
-                       self._prop._state = ibus.PROP_STATE_CHECKED
-               else:
-                       self._prop._state = ibus.PROP_STATE_UNCHECKED
-               self.emit ("property-activate", self._prop._name, self._prop._state)
-
-       def property_changed (self):
-               self.set_active (self._prop._state == ibus.PROP_STATE_CHECKED)
-               self.set_sensitive (self._prop._sensitive)
-               if self._prop._visible:
-                       self.set_no_show_all (False)
-                       self.show_all ()
-               else:
-                       self.set_no_show_all (True)
-                       self.hide_all ()
+    __gsignals__ = {
+    "property-activate" : (
+        gobject.SIGNAL_RUN_FIRST,
+        gobject.TYPE_NONE,
+        (gobject.TYPE_STRING, gobject.TYPE_INT)),
+    }
+
+    def __init__ (self, prop):
+        gtk.CheckMenuItem.__init__ (self, label = prop._label)
+        PropItem.__init__ (self, prop)
+
+        self.set_active (self._prop._state == ibus.PROP_STATE_CHECKED)
+
+        if prop._visible:
+            self.set_no_show_all (False)
+            self.show_all ()
+        else:
+            self.set_no_show_all (True)
+            self.hide_all ()
+
+    def do_toggled (self):
+        if self.get_active ():
+            self._prop._state = ibus.PROP_STATE_CHECKED
+        else:
+            self._prop._state = ibus.PROP_STATE_UNCHECKED
+        self.emit ("property-activate", self._prop._name, self._prop._state)
+
+    def property_changed (self):
+        self.set_active (self._prop._state == ibus.PROP_STATE_CHECKED)
+        self.set_sensitive (self._prop._sensitive)
+        if self._prop._visible:
+            self.set_no_show_all (False)
+            self.show_all ()
+        else:
+            self.set_no_show_all (True)
+            self.hide_all ()
 
 
 class RadioMenuItem (gtk.RadioMenuItem, PropItem):
-       __gsignals__ = {
-       "property-activate" : (
-               gobject.SIGNAL_RUN_FIRST,
-               gobject.TYPE_NONE,
-               (gobject.TYPE_STRING, gobject.TYPE_INT)),
-       }
-
-       def __init__ (self, group, prop):
-               gtk.RadioMenuItem.__init__ (self, group, label = prop._label)
-               PropItem.__init__ (self, prop)
-
-               self.set_active (self._prop._state == ibus.PROP_STATE_CHECKED)
-
-               if prop._visible:
-                       self.set_no_show_all (False)
-                       self.show_all ()
-               else:
-                       self.set_no_show_all (True)
-                       self.hide_all ()
-
-       def property_changed (self):
-               self.set_active (self._prop._state == ibus.PROP_STATE_CHECKED)
-               self.set_sensitive (self._prop._sensitive)
-               if self._prop._visible:
-                       self.set_no_show_all (False)
-                       self.show_all ()
-               else:
-                       self.set_no_show_all (True)
-                       self.hide_all ()
-
-       def do_toggled (self):
-               if self.get_active ():
-                       self._prop._state = ibus.PROP_STATE_CHECKED
-               else:
-                       self._prop._state = ibus.PROP_STATE_UNCHECKED
-               self.emit ("property-activate", self._prop._name, self._prop._state)
+    __gsignals__ = {
+    "property-activate" : (
+        gobject.SIGNAL_RUN_FIRST,
+        gobject.TYPE_NONE,
+        (gobject.TYPE_STRING, gobject.TYPE_INT)),
+    }
+
+    def __init__ (self, group, prop):
+        gtk.RadioMenuItem.__init__ (self, group, label = prop._label)
+        PropItem.__init__ (self, prop)
+
+        self.set_active (self._prop._state == ibus.PROP_STATE_CHECKED)
+
+        if prop._visible:
+            self.set_no_show_all (False)
+            self.show_all ()
+        else:
+            self.set_no_show_all (True)
+            self.hide_all ()
+
+    def property_changed (self):
+        self.set_active (self._prop._state == ibus.PROP_STATE_CHECKED)
+        self.set_sensitive (self._prop._sensitive)
+        if self._prop._visible:
+            self.set_no_show_all (False)
+            self.show_all ()
+        else:
+            self.set_no_show_all (True)
+            self.hide_all ()
+
+    def do_toggled (self):
+        if self.get_active ():
+            self._prop._state = ibus.PROP_STATE_CHECKED
+        else:
+            self._prop._state = ibus.PROP_STATE_UNCHECKED
+        self.emit ("property-activate", self._prop._name, self._prop._state)
 
 class SeparatorMenuItem (gtk.SeparatorMenuItem, PropItem):
-       __gsignals__ = {
-       "property-activate" : (
-               gobject.SIGNAL_RUN_FIRST,
-               gobject.TYPE_NONE,
-               (gobject.TYPE_STRING, gobject.TYPE_INT)),
-       }
+    __gsignals__ = {
+    "property-activate" : (
+        gobject.SIGNAL_RUN_FIRST,
+        gobject.TYPE_NONE,
+        (gobject.TYPE_STRING, gobject.TYPE_INT)),
+    }
 
 
 gobject.type_register (Menu, "IBusMenu")
@@ -210,35 +210,35 @@ gobject.type_register (RadioMenuItem, "IBusRadioMenuItem")
 gobject.type_register (SeparatorMenuItem, "IBusSeparatorMenuItem")
 
 def menu_position (menu, button):
-       screen = button.get_screen ()
-       monitor = screen.get_monitor_at_window (button.window)
-       monitor_allocation = screen.get_monitor_geometry (monitor)
-
-       x, y = button.window.get_origin ()
-       x += button.allocation.x
-       y += button.allocation.y
-
-       menu_width, menu_height = menu.size_request ()
-
-       if x + menu_width >= monitor_allocation.width:
-               x -= menu_width - button.allocation.width
-       elif x - menu_width <= 0:
-               pass
-       else:
-               if x <= monitor_allocation.width * 3 / 4:
-                       pass
-               else:
-                       x -= menu_width - button.allocation.width
-
-       if y + button.allocation.height + menu_height >= monitor_allocation.height:
-               y -= menu_height
-       elif y - menu_height <= 0:
-               y += button.allocation.height
-       else:
-               if y <= monitor_allocation.height * 3 / 4:
-                       y += button.allocation.height
-               else:
-                       y -= menu_height
-
-       return (x, y, False)
+    screen = button.get_screen ()
+    monitor = screen.get_monitor_at_window (button.window)
+    monitor_allocation = screen.get_monitor_geometry (monitor)
+
+    x, y = button.window.get_origin ()
+    x += button.allocation.x
+    y += button.allocation.y
+
+    menu_width, menu_height = menu.size_request ()
+
+    if x + menu_width >= monitor_allocation.width:
+        x -= menu_width - button.allocation.width
+    elif x - menu_width <= 0:
+        pass
+    else:
+        if x <= monitor_allocation.width * 3 / 4:
+            pass
+        else:
+            x -= menu_width - button.allocation.width
+
+    if y + button.allocation.height + menu_height >= monitor_allocation.height:
+        y -= menu_height
+    elif y - menu_height <= 0:
+        y += button.allocation.height
+    else:
+        if y <= monitor_allocation.height * 3 / 4:
+            y += button.allocation.height
+        else:
+            y -= menu_height
+
+    return (x, y, False)
 
index 4c7fd01..5a20221 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -30,260 +30,260 @@ from languagebar import LanguageBar
 from candidatepanel import CandidatePanel
 
 class Panel (ibus.Object):
-       def __init__ (self, proxy, _ibus):
-               ibus.Object.__init__ (self)
-               self._proxy = proxy
-               self._ibus = _ibus
-               self._focus_ic = None
-
-               # add icon search path
-               icon_theme = gtk.icon_theme_get_default ()
-               dir = path.dirname (__file__)
-               icondir = path.join (dir, "..", "icons")
-               icon_theme.prepend_search_path (icondir)
-
-               self._language_bar = LanguageBar ()
-               self._language_bar.connect ("property-activate",
-                                               lambda widget, prop_name, prop_state: self._proxy.PropertyActivate (prop_name, prop_state))
-               self._language_bar.connect ("get-im-menu",
-                                               self._get_im_menu_cb)
-               self._language_bar.focus_out ()
-               self._language_bar.show_all ()
-
-               self._candidate_panel = CandidatePanel ()
-               self._candidate_panel.connect ("cursor-up",
-                                               lambda widget: self._proxy.CursorUp ())
-               self._candidate_panel.connect ("cursor-down",
-                                               lambda widget: self._proxy.CursorDown ())
-
-               self._status_icon = gtk.StatusIcon ()
-               self._status_icon.connect ("popup-menu", self._status_icon_popup_menu_cb)
-               self._status_icon.connect ("activate", self._status_icon_activate_cb)
-               self._status_icon.set_from_icon_name ("engine-default")
-               self._status_icon.set_tooltip ("iBus - Running")
-               self._status_icon.set_visible (True)
-
-       def set_cursor_location (self, x, y, w, h):
-               self._candidate_panel.move (x + w, y + h)
-
-       def update_preedit (self, text, attrs, cursor_pos, show):
-               self._candidate_panel.update_preedit (text, attrs, cursor_pos, show)
-
-       def show_preedit_string (self):
-               self._candidate_panel.show_preedit_string ()
-
-       def hide_preedit_string (self):
-               self._candidate_panel.hide_preedit_string ()
-
-       def update_aux_string (self, text, attrs, show):
-               self._candidate_panel.update_aux_string (text, attrs, show)
-
-       def show_aux_string (self):
-               self._candidate_panel.show_aux_string ()
-
-       def hide_aux_string (self):
-               self._candidate_panel.hide_aux_string ()
-
-       def update_lookup_table (self, lookup_table, show):
-               self._candidate_panel.update_lookup_table (lookup_table, show)
-
-       def show_candidate_window (self):
-               self._candidate_panel.show ()
-
-       def hide_candidate_window (self):
-               self._candidate_panel.hide ()
-
-       def show_language_bar (self):
-               self._language_bar.show ()
-
-       def hide_language_bar (self):
-               self._language_bar.hide ()
-
-       def register_properties (self, props):
-               self._language_bar.register_properties (props)
-
-       def update_property (self, prop):
-               self._language_bar.update_property (prop)
-
-       def _set_im_icon (self, icon_name):
-               self._language_bar.set_im_icon (icon_name)
-               self._status_icon.set_from_icon_name (icon_name)
-
-       def focus_in (self, ic):
-               self.reset ()
-               self._focus_ic = ic
-
-               factory, enabled = self._ibus.GetInputContextStates (ic)
-
-               if factory == "" or not enabled:
-                       self._set_im_icon ("engine-default")
-               else:
-                       name, lang, icon, authors, credits = self._ibus.GetFactoryInfo (factory)
-                       self._set_im_icon (icon)
-               self._language_bar.focus_in ()
-
-       def focus_out (self, ic):
-               self.reset ()
-               if self._focus_ic == ic:
-                       self._focus_ic = None
-                       self._language_bar.focus_out ()
-                       self._set_im_icon ("engine-default")
-
-       def states_changed (self):
-               if not self._focus_ic:
-                       return
-               factory, enabled = self._ibus.GetInputContextStates (self._focus_ic)
-               if enabled == False or not factory:
-                       self._set_im_icon ("engine-default")
-               else:
-                       name, lang, icon, authors, credits = self._ibus.GetFactoryInfo (factory)
-                       self._set_im_icon (icon)
-
-       def reset (self):
-               self._candidate_panel.reset ()
-               self._language_bar.reset ()
-
-       def do_destroy (self):
-               gtk.main_quit ()
-
-       def _create_im_menu (self):
-               menu = gtk.Menu ()
-               factories = self._ibus.GetFactories ()
-               
-               if not factories:
-                       item = gtk.MenuItem (label = "no engine")
-                       item.set_sensitive (False)
-                       menu.add (item)
-               else:
-                       tmp = {}
-                       for factory in factories:
-                               name, lang, icon, authors, credits = self._ibus.GetFactoryInfo (factory)
-                               lang = LANGUAGES.get (lang, "other")
-                               if not icon:
-                                       icon = "engine-default"
-                               if lang not in tmp:
-                                       tmp[lang] = []
-                               tmp[lang].append ((name, lang, icon, authors, credits, factory))
-
-                       langs = tmp.keys ()
-                       langs.sort ()
-                       for lang in langs:
-                               if len (tmp[lang]) == 1:
-                                       name, lang, icon, authors, credits, factory = tmp[lang][0]
-                                       item = gtk.ImageMenuItem ("%s - %s" % (lang, name))
-                                       item.set_image (gtk.image_new_from_icon_name (icon, gtk.ICON_SIZE_MENU))
-                                       item.connect ("activate", self._menu_item_activate_cb, factory)
-                                       menu.add (item)
-                               else:
-                                       item = gtk.MenuItem (lang)
-                                       menu.add (item)
-                                       submenu = gtk.Menu ()
-                                       item.set_submenu (submenu)
-                                       for name, _lang, icon, authors, credits, factory in tmp[lang]:
-                                               item = gtk.ImageMenuItem (name)
-                                               item.set_image (gtk.image_new_from_icon_name (icon, gtk.ICON_SIZE_MENU))
-                                               item.connect ("activate", self._menu_item_activate_cb, factory)
-                                               submenu.add (item)
-                                       
-
-               menu.show_all ()
-               menu.set_take_focus (False)
-               return menu
-
-       def _get_im_menu_cb (self, languagebar):
-               menu = self._create_im_menu ()
-               return menu
-
-       def _status_icon_activate_cb (self, status_icon):
-               if not self._focus_ic:
-                       return
-               menu = self._create_im_menu ()
-               menu.popup (None, None,
-                               gtk.status_icon_position_menu,
-                               0,
-                               gtk.get_current_event_time (),
-                               self._status_icon)
-
-       def _status_icon_popup_menu_cb (self, status_icon, button, active_time):
-               if not self._focus_ic:
-                       return
-               menu = self._create_im_menu ()
-               menu.popup (None, None,
-                               gtk.status_icon_position_menu,
-                               button,
-                               active_time,
-                               self._status_icon)
-
-       def _menu_item_activate_cb (self, item, factory):
-               self._ibus.SetFactory (factory)
+    def __init__ (self, proxy, _ibus):
+        ibus.Object.__init__ (self)
+        self._proxy = proxy
+        self._ibus = _ibus
+        self._focus_ic = None
+
+        # add icon search path
+        icon_theme = gtk.icon_theme_get_default ()
+        dir = path.dirname (__file__)
+        icondir = path.join (dir, "..", "icons")
+        icon_theme.prepend_search_path (icondir)
+
+        self._language_bar = LanguageBar ()
+        self._language_bar.connect ("property-activate",
+                        lambda widget, prop_name, prop_state: self._proxy.PropertyActivate (prop_name, prop_state))
+        self._language_bar.connect ("get-im-menu",
+                        self._get_im_menu_cb)
+        self._language_bar.focus_out ()
+        self._language_bar.show_all ()
+
+        self._candidate_panel = CandidatePanel ()
+        self._candidate_panel.connect ("cursor-up",
+                        lambda widget: self._proxy.CursorUp ())
+        self._candidate_panel.connect ("cursor-down",
+                        lambda widget: self._proxy.CursorDown ())
+
+        self._status_icon = gtk.StatusIcon ()
+        self._status_icon.connect ("popup-menu", self._status_icon_popup_menu_cb)
+        self._status_icon.connect ("activate", self._status_icon_activate_cb)
+        self._status_icon.set_from_icon_name ("engine-default")
+        self._status_icon.set_tooltip ("iBus - Running")
+        self._status_icon.set_visible (True)
+
+    def set_cursor_location (self, x, y, w, h):
+        self._candidate_panel.move (x + w, y + h)
+
+    def update_preedit (self, text, attrs, cursor_pos, show):
+        self._candidate_panel.update_preedit (text, attrs, cursor_pos, show)
+
+    def show_preedit_string (self):
+        self._candidate_panel.show_preedit_string ()
+
+    def hide_preedit_string (self):
+        self._candidate_panel.hide_preedit_string ()
+
+    def update_aux_string (self, text, attrs, show):
+        self._candidate_panel.update_aux_string (text, attrs, show)
+
+    def show_aux_string (self):
+        self._candidate_panel.show_aux_string ()
+
+    def hide_aux_string (self):
+        self._candidate_panel.hide_aux_string ()
+
+    def update_lookup_table (self, lookup_table, show):
+        self._candidate_panel.update_lookup_table (lookup_table, show)
+
+    def show_candidate_window (self):
+        self._candidate_panel.show ()
+
+    def hide_candidate_window (self):
+        self._candidate_panel.hide ()
+
+    def show_language_bar (self):
+        self._language_bar.show ()
+
+    def hide_language_bar (self):
+        self._language_bar.hide ()
+
+    def register_properties (self, props):
+        self._language_bar.register_properties (props)
+
+    def update_property (self, prop):
+        self._language_bar.update_property (prop)
+
+    def _set_im_icon (self, icon_name):
+        self._language_bar.set_im_icon (icon_name)
+        self._status_icon.set_from_icon_name (icon_name)
+
+    def focus_in (self, ic):
+        self.reset ()
+        self._focus_ic = ic
+
+        factory, enabled = self._ibus.GetInputContextStates (ic)
+
+        if factory == "" or not enabled:
+            self._set_im_icon ("engine-default")
+        else:
+            name, lang, icon, authors, credits = self._ibus.GetFactoryInfo (factory)
+            self._set_im_icon (icon)
+        self._language_bar.focus_in ()
+
+    def focus_out (self, ic):
+        self.reset ()
+        if self._focus_ic == ic:
+            self._focus_ic = None
+            self._language_bar.focus_out ()
+            self._set_im_icon ("engine-default")
+
+    def states_changed (self):
+        if not self._focus_ic:
+            return
+        factory, enabled = self._ibus.GetInputContextStates (self._focus_ic)
+        if enabled == False or not factory:
+            self._set_im_icon ("engine-default")
+        else:
+            name, lang, icon, authors, credits = self._ibus.GetFactoryInfo (factory)
+            self._set_im_icon (icon)
+
+    def reset (self):
+        self._candidate_panel.reset ()
+        self._language_bar.reset ()
+
+    def do_destroy (self):
+        gtk.main_quit ()
+
+    def _create_im_menu (self):
+        menu = gtk.Menu ()
+        factories = self._ibus.GetFactories ()
+        
+        if not factories:
+            item = gtk.MenuItem (label = "no engine")
+            item.set_sensitive (False)
+            menu.add (item)
+        else:
+            tmp = {}
+            for factory in factories:
+                name, lang, icon, authors, credits = self._ibus.GetFactoryInfo (factory)
+                lang = LANGUAGES.get (lang, "other")
+                if not icon:
+                    icon = "engine-default"
+                if lang not in tmp:
+                    tmp[lang] = []
+                tmp[lang].append ((name, lang, icon, authors, credits, factory))
+
+            langs = tmp.keys ()
+            langs.sort ()
+            for lang in langs:
+                if len (tmp[lang]) == 1:
+                    name, lang, icon, authors, credits, factory = tmp[lang][0]
+                    item = gtk.ImageMenuItem ("%s - %s" % (lang, name))
+                    item.set_image (gtk.image_new_from_icon_name (icon, gtk.ICON_SIZE_MENU))
+                    item.connect ("activate", self._menu_item_activate_cb, factory)
+                    menu.add (item)
+                else:
+                    item = gtk.MenuItem (lang)
+                    menu.add (item)
+                    submenu = gtk.Menu ()
+                    item.set_submenu (submenu)
+                    for name, _lang, icon, authors, credits, factory in tmp[lang]:
+                        item = gtk.ImageMenuItem (name)
+                        item.set_image (gtk.image_new_from_icon_name (icon, gtk.ICON_SIZE_MENU))
+                        item.connect ("activate", self._menu_item_activate_cb, factory)
+                        submenu.add (item)
+                    
+
+        menu.show_all ()
+        menu.set_take_focus (False)
+        return menu
+
+    def _get_im_menu_cb (self, languagebar):
+        menu = self._create_im_menu ()
+        return menu
+
+    def _status_icon_activate_cb (self, status_icon):
+        if not self._focus_ic:
+            return
+        menu = self._create_im_menu ()
+        menu.popup (None, None,
+                gtk.status_icon_position_menu,
+                0,
+                gtk.get_current_event_time (),
+                self._status_icon)
+
+    def _status_icon_popup_menu_cb (self, status_icon, button, active_time):
+        if not self._focus_ic:
+            return
+        menu = self._create_im_menu ()
+        menu.popup (None, None,
+                gtk.status_icon_position_menu,
+                button,
+                active_time,
+                self._status_icon)
+
+    def _menu_item_activate_cb (self, item, factory):
+        self._ibus.SetFactory (factory)
 
 gobject.type_register (Panel, "IBusPanel")
 
 class PanelProxy (interface.IPanel):
-       def __init__ (self, dbusconn, object_path, _ibus):
-               interface.IPanel.__init__ (self, dbusconn, object_path)
-               self._dbusconn = dbusconn
-               self._panel = Panel (self, _ibus)
+    def __init__ (self, dbusconn, object_path, _ibus):
+        interface.IPanel.__init__ (self, dbusconn, object_path)
+        self._dbusconn = dbusconn
+        self._panel = Panel (self, _ibus)
 
-       def SetCursorLocation (self, x, y, w, h):
-               self._panel.set_cursor_location (x, y, w, h)
+    def SetCursorLocation (self, x, y, w, h):
+        self._panel.set_cursor_location (x, y, w, h)
 
-       def UpdatePreedit (self, text, attrs, cursor_pos, show):
-               attrs = ibus.attr_list_from_dbus_value (attrs)
-               self._panel.update_preedit (text, atrrs, cursor_pos, show)
+    def UpdatePreedit (self, text, attrs, cursor_pos, show):
+        attrs = ibus.attr_list_from_dbus_value (attrs)
+        self._panel.update_preedit (text, atrrs, cursor_pos, show)
 
-       def ShowPreeditString (self):
-               self._panel.show_preedit_string ()
+    def ShowPreeditString (self):
+        self._panel.show_preedit_string ()
 
-       def HidePreeditString (self):
-               self._panel.hide_preedit_string ()
+    def HidePreeditString (self):
+        self._panel.hide_preedit_string ()
 
-       def UpdateAuxString (self, text, attrs, show):
-               attrs = ibus.attr_list_from_dbus_value (attrs)
-               self._panel.update_aux_string (text, attrs, show)
+    def UpdateAuxString (self, text, attrs, show):
+        attrs = ibus.attr_list_from_dbus_value (attrs)
+        self._panel.update_aux_string (text, attrs, show)
 
-       def ShowAuxString (self):
-               self._panel.show_aux_string ()
+    def ShowAuxString (self):
+        self._panel.show_aux_string ()
 
-       def HideAuxString (self):
-               self._panel.hide_aux_string ()
+    def HideAuxString (self):
+        self._panel.hide_aux_string ()
 
-       def UpdateLookupTable (self, lookup_table, show):
-               lookup_table = ibus.lookup_table_from_dbus_value (lookup_table)
-               self._panel.update_lookup_table (lookup_table, show)
+    def UpdateLookupTable (self, lookup_table, show):
+        lookup_table = ibus.lookup_table_from_dbus_value (lookup_table)
+        self._panel.update_lookup_table (lookup_table, show)
 
-       def ShowCandidateWindow (self):
-               self._panel.show_candidate_window ()
+    def ShowCandidateWindow (self):
+        self._panel.show_candidate_window ()
 
-       def HideCandidateWindow (self):
-               self._panel.hide_candidate_window ()
+    def HideCandidateWindow (self):
+        self._panel.hide_candidate_window ()
 
-       def ShowLanguageBar (self):
-               self._panel.show_language_bar ()
+    def ShowLanguageBar (self):
+        self._panel.show_language_bar ()
 
-       def HideLanguageBar (self):
-               self._panel.hide_language_bar ()
+    def HideLanguageBar (self):
+        self._panel.hide_language_bar ()
 
-       def RegisterProperties (self, props):
-               props = ibus.prop_list_from_dbus_value (props)
-               self._panel.register_properties (props)
+    def RegisterProperties (self, props):
+        props = ibus.prop_list_from_dbus_value (props)
+        self._panel.register_properties (props)
 
-       def UpdateProperty (self, prop):
-               prop = ibus.property_from_dbus_value (prop)
-               self._panel.update_property (prop)
+    def UpdateProperty (self, prop):
+        prop = ibus.property_from_dbus_value (prop)
+        self._panel.update_property (prop)
 
-       def FocusIn (self, ic):
-               self._panel.focus_in (ic)
+    def FocusIn (self, ic):
+        self._panel.focus_in (ic)
 
-       def FocusOut (self, ic):
-               self._panel.focus_out (ic)
+    def FocusOut (self, ic):
+        self._panel.focus_out (ic)
 
-       def StatesChanged (self):
-               self._panel.states_changed ()
+    def StatesChanged (self):
+        self._panel.states_changed ()
 
-       def Reset (self):
-               self._panel.reset ()
+    def Reset (self):
+        self._panel.reset ()
 
-       def Destroy (self):
-               self._panel.destroy ()
+    def Destroy (self):
+        self._panel.destroy ()
 
index 2cb9713..6a7db8f 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
 # Boston, MA  02111-1307  USA
 
 class PropItem:
-       def __init__ (self, prop):
-               self._prop = prop
-               self._sub_items = []
+    def __init__ (self, prop):
+        self._prop = prop
+        self._sub_items = []
 
-       def update_property (self, prop):
-               if self._prop == None:
-                       return False
+    def update_property (self, prop):
+        if self._prop == None:
+            return False
 
-               retval = False
+        retval = False
 
-               if self._prop._name == prop._name and self._prop._type == prop._type:
-                       self._prop = prop
-                       self.property_changed ()
-                       retval =  True
+        if self._prop._name == prop._name and self._prop._type == prop._type:
+            self._prop = prop
+            self.property_changed ()
+            retval =  True
 
-               if any (map (lambda i: i.update_property (prop), self._sub_items)):
-                       retval = True
+        if any (map (lambda i: i.update_property (prop), self._sub_items)):
+            retval = True
 
-               return retval
+        return retval
 
-       def set_prop_label (self, label):
-               self._prop._label = label
-               self.property_changed ()
+    def set_prop_label (self, label):
+        self._prop._label = label
+        self.property_changed ()
 
-       def set_icon (self, icon):
-               self._prop._icon = icon
-               self.property_changed ()
+    def set_icon (self, icon):
+        self._prop._icon = icon
+        self.property_changed ()
 
-       def set_tooltip (self, tooltip):
-               self._prop._tooltip = tooltip
-               self.property_changed ()
+    def set_tooltip (self, tooltip):
+        self._prop._tooltip = tooltip
+        self.property_changed ()
 
-       def set_state (self, state):
-               self._prop._state = state
-               self.property_changed ()
+    def set_state (self, state):
+        self._prop._state = state
+        self.property_changed ()
 
-       def property_changed (self):
-               pass
+    def property_changed (self):
+        pass
 
 
index 687e628..8771882 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set noet ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
@@ -28,151 +28,151 @@ from menu import *
 
 
 class ToolButton (gtk.ToolButton, PropItem):
-       __gsignals__ = {
-               "property-activate" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_STRING, gobject.TYPE_INT)),
-               }
-
-       def __init__ (self, prop):
-               gtk.ToolButton.__init__ (self, label = prop._label)
-               PropItem.__init__ (self, prop)
-
-               self.set_icon_name (prop._icon)
-               self.set_tooltip_text (prop._tooltip)
-               self.set_sensitive (prop._sensitive)
-
-               if prop._visible:
-                       self.set_no_show_all (False)
-                       self.show_all ()
-               else:
-                       self.set_no_show_all (True)
-                       self.hide_all ()
-
-
-       def set_icon_name (self, icon_name):
-               if icon_name:
-                       gtk.ToolButton.set_icon_name (self, icon_name)
-                       self.set_is_important (False)
-               else:
-                       gtk.ToolButton.set_icon_name (self, None)
-                       self.set_is_important (True)
-
-               self._prop._icon = icon_name
-
-       def set_tooltip_text (self, text):
-               if text:
-                       gtk.ToolButton.set_tooltip_text (self, text)
-               else:
-                       gtk.ToolButton.set_tooltip_text (self, None)
-
-               self._prop._tooltip = text
-
-       def property_changed (self):
-               self.set_icon_name (self._prop._icon)
-               self.set_tooltip_text (self._prop._tooltip)
-               self.set_label (self._prop._label)
-               self.set_sensitive (self._prop._sensitive)
-               if self._prop._visible:
-                       self.set_no_show_all (False)
-                       self.show_all ()
-               else:
-                       self.set_no_show_all (True)
-                       self.hide_all ()
-
-       def do_clicked (self):
-               self.emit ("property-activate", self._prop._name, self._prop._state)
+    __gsignals__ = {
+        "property-activate" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            (gobject.TYPE_STRING, gobject.TYPE_INT)),
+        }
+
+    def __init__ (self, prop):
+        gtk.ToolButton.__init__ (self, label = prop._label)
+        PropItem.__init__ (self, prop)
+
+        self.set_icon_name (prop._icon)
+        self.set_tooltip_text (prop._tooltip)
+        self.set_sensitive (prop._sensitive)
+
+        if prop._visible:
+            self.set_no_show_all (False)
+            self.show_all ()
+        else:
+            self.set_no_show_all (True)
+            self.hide_all ()
+
+
+    def set_icon_name (self, icon_name):
+        if icon_name:
+            gtk.ToolButton.set_icon_name (self, icon_name)
+            self.set_is_important (False)
+        else:
+            gtk.ToolButton.set_icon_name (self, None)
+            self.set_is_important (True)
+
+        self._prop._icon = icon_name
+
+    def set_tooltip_text (self, text):
+        if text:
+            gtk.ToolButton.set_tooltip_text (self, text)
+        else:
+            gtk.ToolButton.set_tooltip_text (self, None)
+
+        self._prop._tooltip = text
+
+    def property_changed (self):
+        self.set_icon_name (self._prop._icon)
+        self.set_tooltip_text (self._prop._tooltip)
+        self.set_label (self._prop._label)
+        self.set_sensitive (self._prop._sensitive)
+        if self._prop._visible:
+            self.set_no_show_all (False)
+            self.show_all ()
+        else:
+            self.set_no_show_all (True)
+            self.hide_all ()
+
+    def do_clicked (self):
+        self.emit ("property-activate", self._prop._name, self._prop._state)
 
 
 class ToggleToolButton (gtk.ToggleToolButton, PropItem):
-       __gsignals__ = {
-               "property-activate" : (
-                       gobject.SIGNAL_RUN_FIRST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_STRING, gobject.TYPE_INT)),
-               }
-
-       def __init__ (self, prop):
-               gtk.ToggleToolButton.__init__ (self)
-               PropItem.__init__ (self, prop)
-
-               self.set_label (prop._label)
-               self.set_icon_name (prop._icon)
-               self.set_tooltip_text (prop._tooltip)
-               self.set_active (prop._state == ibus.PROP_STATE_CHECKED)
-               self.set_sensitive (prop._sensitive)
-               if prop._visible:
-                       self.set_no_show_all (False)
-                       self.show_all ()
-               else:
-                       self.set_no_show_all (True)
-                       self.hide_all ()
-
-       def set_icon_name (self, icon_name):
-               if icon_name:
-                       gtk.ToggleToolButton.set_icon_name (self, icon_name)
-                       self.set_is_important (False)
-               else:
-                       gtk.ToggleToolButton.set_icon_name (self, None)
-                       self.set_is_important (True)
-
-               self._prop._icon = icon_name
-
-       def set_tooltip_text (self, text):
-               if text:
-                       gtk.ToggleToolButton.set_tooltip_text (self, text)
-               else:
-                       gtk.ToggleToolButton.set_tooltip_text (self, None)
-
-               self._prop._tooltip = text
-
-       def property_changed (self):
-               self.set_icon_name (self._prop._icon)
-               self.set_tooltip_text (self._prop._tooltip)
-               self.set_label (self._prop._label)
-               self.set_active (self._prop._state == ibus.PROP_STATE_CHECKED)
-               self.set_sensitive (self._prop._sensitive)
-               if self._prop._visible:
-                       self.set_no_show_all (False)
-                       self.show_all ()
-               else:
-                       self.set_no_show_all (True)
-                       self.hide_all ()
-
-       def do_toggled (self):
-               if self.get_active ():
-                       self._prop._state = ibus.PROP_STATE_CHECKED
-               else:
-                       self._prop._state = ibus.PROP_STATE_UNCHECKED
-               self.emit ("property-activate", self._prop._name, self._prop._state)
+    __gsignals__ = {
+        "property-activate" : (
+            gobject.SIGNAL_RUN_FIRST,
+            gobject.TYPE_NONE,
+            (gobject.TYPE_STRING, gobject.TYPE_INT)),
+        }
+
+    def __init__ (self, prop):
+        gtk.ToggleToolButton.__init__ (self)
+        PropItem.__init__ (self, prop)
+
+        self.set_label (prop._label)
+        self.set_icon_name (prop._icon)
+        self.set_tooltip_text (prop._tooltip)
+        self.set_active (prop._state == ibus.PROP_STATE_CHECKED)
+        self.set_sensitive (prop._sensitive)
+        if prop._visible:
+            self.set_no_show_all (False)
+            self.show_all ()
+        else:
+            self.set_no_show_all (True)
+            self.hide_all ()
+
+    def set_icon_name (self, icon_name):
+        if icon_name:
+            gtk.ToggleToolButton.set_icon_name (self, icon_name)
+            self.set_is_important (False)
+        else:
+            gtk.ToggleToolButton.set_icon_name (self, None)
+            self.set_is_important (True)
+
+        self._prop._icon = icon_name
+
+    def set_tooltip_text (self, text):
+        if text:
+            gtk.ToggleToolButton.set_tooltip_text (self, text)
+        else:
+            gtk.ToggleToolButton.set_tooltip_text (self, None)
+
+        self._prop._tooltip = text
+
+    def property_changed (self):
+        self.set_icon_name (self._prop._icon)
+        self.set_tooltip_text (self._prop._tooltip)
+        self.set_label (self._prop._label)
+        self.set_active (self._prop._state == ibus.PROP_STATE_CHECKED)
+        self.set_sensitive (self._prop._sensitive)
+        if self._prop._visible:
+            self.set_no_show_all (False)
+            self.show_all ()
+        else:
+            self.set_no_show_all (True)
+            self.hide_all ()
+
+    def do_toggled (self):
+        if self.get_active ():
+            self._prop._state = ibus.PROP_STATE_CHECKED
+        else:
+            self._prop._state = ibus.PROP_STATE_UNCHECKED
+        self.emit ("property-activate", self._prop._name, self._prop._state)
 
 class SeparatorToolItem (gtk.SeparatorToolItem, PropItem):
-       def __init__ (self, prop):
-               gtk.SeparatorToolItem.__init__ (self)
-               PropItem.__init__ (self, prop)
+    def __init__ (self, prop):
+        gtk.SeparatorToolItem.__init__ (self)
+        PropItem.__init__ (self, prop)
 
 class MenuToolButton (ToggleToolButton):
-       # __gsignals__ = {
-       #               "property-activate" : (
-       #                       gobject.SIGNAL_RUN_FIRST,
-       #                       gobject.TYPE_NONE,
-       #                       (gobject.TYPE_STRING, gobject.TYPE_INT)),
-       #               }
-
-       def __init__ (self, prop):
-               ToggleToolButton.__init__ (self, prop)
-               self._menu = Menu (prop)
-               self._menu.connect ("deactivate", lambda m: self.set_active (False))
-               self._menu.connect ("property-activate", lambda w,n,s: self.emit ("property-activate", n, s))
-
-       def update_property (self, prop):
-               PropItem.update_property (self, prop)
-               self._menu.update_property (prop)
-
-       def do_toggled (self):
-               if self.get_active ():
-                       self._menu.popup (0, gtk.get_current_event_time (), self)
+    # __gsignals__ = {
+    #        "property-activate" : (
+    #            gobject.SIGNAL_RUN_FIRST,
+    #            gobject.TYPE_NONE,
+    #            (gobject.TYPE_STRING, gobject.TYPE_INT)),
+    #        }
+
+    def __init__ (self, prop):
+        ToggleToolButton.__init__ (self, prop)
+        self._menu = Menu (prop)
+        self._menu.connect ("deactivate", lambda m: self.set_active (False))
+        self._menu.connect ("property-activate", lambda w,n,s: self.emit ("property-activate", n, s))
+
+    def update_property (self, prop):
+        PropItem.update_property (self, prop)
+        self._menu.update_property (prop)
+
+    def do_toggled (self):
+        if self.get_active ():
+            self._menu.popup (0, gtk.get_current_event_time (), self)
 
 gobject.type_register (ToolButton, "ToolButton")
 gobject.type_register (ToggleToolButton, "IBusToggleToolButton")
index ce1c945..f5463d0 100644 (file)
@@ -1,4 +1,4 @@
-# vim:set et ts=4:
+# vim:set et sts=4 sw=4:
 #
 # ibus - The Input Bus
 #
index 528fb4c..de609b0 100644 (file)
@@ -1,7 +1,7 @@
 import IMdkit
 
 def func ():
-       pass
+    pass
 
 xim = IMdkit.XIM ("a", "zh", func)
 print xim