예제 #1
0
    def __init__(self, engine, delay, layout):
        self.__engine = engine
        self.__delay = delay  # Delay for non-shift keys in milliseconds (mainly for Nicola layout)

        self.MODIFIERS = (keysyms.Shift_L, keysyms.Shift_R, keysyms.Control_L,
                          keysyms.Control_R, keysyms.Alt_L, keysyms.Alt_R)

        # Set to the default values
        self.__OnOffByCaps = True  # or False
        self.__SandS = False  # True if SandS is used
        self.__Henkan = keysyms.space  # or keysyms.Henkan
        self.__Muhenkan = keysyms.VoidSymbol  # or keysyms.Muhenkan
        self.__Eisuu = keysyms.VoidSymbol  # or keysyms.Eisu_toggle
        self.__Kana = keysyms.Control_R  # or keysyms.Hiragana_Katakana, keysyms.Control_R
        self.__Space = keysyms.Shift_R  # Extra space key in Kana mode
        self.__Prefix = False  # True if Shift is to be prefixed
        self.__HasYen = False
        self.__DualBits = bits.Dual_ShiftL_Bit

        if "Keyboard" in layout:
            keyboard = layout["Keyboard"]
            if keyboard == "109":
                self.__Henkan = keysyms.VoidSymbol
                self.__Muhenkan = keysyms.VoidSymbol
                self.__Kana = keysyms.Hiragana_Katakana
                self.__Eisuu = keysyms.Eisu_toggle
                self.__Space = keysyms.VoidSymbol

        if "OnOffByCaps" in layout:
            self.__OnOffByCaps = layout["OnOffByCaps"]
        if "HasYen" in layout:
            self.__HasYen = layout["HasYen"]

        if "SandS" in layout:
            self.__SandS = layout["SandS"]
            if self.__SandS:
                self.__DualBits |= bits.Dual_Space_Bit
        elif "Prefix" in layout:
            self.__Prefix = layout["Prefix"]
            if self.__Prefix:
                self.__DualBits |= bits.Dual_Space_Bit

        if "Space" in layout:
            self.__Space = IBus.keyval_from_name(layout["Space"])
        if "Henkan" in layout:
            self.__Henkan = IBus.keyval_from_name(layout["Henkan"])
        if "Muhenkan" in layout:
            self.__Muhenkan = IBus.keyval_from_name(layout["Muhenkan"])

        # Check dual role modifiers
        for k in (self.__Henkan, self.__Muhenkan, self.__Kana, self.__Space):
            if k in self.MODIFIERS:
                self.__DualBits |= bits.Dual_ShiftL_Bit << self.MODIFIERS.index(
                    k)

        # Current event
        self.__keyval = keysyms.VoidSymbol
        self.__keycode = 0
        self.reset()
예제 #2
0
    def __init__(self, engine, delay, layout):
        self._engine = engine
        self._delay = delay  # Delay for non-shift keys in milliseconds (mainly for Nicola layout)

        # Set to the default values
        self._OnOffByCaps = True  # or False
        self._SandS = False  # True if SandS is used
        self._Henkan = keysyms.VoidSymbol  # or keysyms.Henkan, keysyms.space
        self._Muhenkan = keysyms.VoidSymbol  # or keysyms.Muhenkan
        self._Eisuu = keysyms.VoidSymbol  # or keysyms.Eisu_toggle
        self._Kana = keysyms.VoidSymbol  # or keysyms.Hiragana_Katakana, keysyms.Control_R
        self._Space = keysyms.VoidSymbol  # Extra space key
        self._Shrink = keysyms.VoidSymbol
        self._Prefix = False  # True if Shift is to be prefixed
        self._HasYen = False
        self._DualBits = DUAL_SHIFT_L_BIT

        if layout.get("Keyboard") == "109":
            self._Kana = keysyms.Hiragana_Katakana
            self._Eisuu = keysyms.Eisu_toggle

        self._OnOffByCaps = layout.get("OnOffByCaps", self._OnOffByCaps)
        self._HasYen = layout.get("HasYen", self._HasYen)

        self._SandS = layout.get("SandS", False)
        if self._SandS:
            self._DualBits |= DUAL_SPACE_BIT
        else:
            self._Prefix = layout.get("Prefix", False)
            if self._Prefix:
                self._DualBits |= DUAL_SPACE_BIT

        if "Space" in layout:
            self._Space = IBus.keyval_from_name(layout["Space"])
        if "Henkan" in layout:
            self._Henkan = IBus.keyval_from_name(layout["Henkan"])
        if "Muhenkan" in layout:
            self._Muhenkan = IBus.keyval_from_name(layout["Muhenkan"])
        if "Katakana" in layout:
            self._Kana = IBus.keyval_from_name(layout["Katakana"])
        if "Shrink" in layout:
            self._Shrink = IBus.keyval_from_name(layout["Shrink"])

        # Check dual role modifiers
        self._capture_alt_r = False
        for k in (self._Henkan, self._Muhenkan, self._Kana, self._Space,
                  self._Shrink):
            if k in MODIFIERS:
                self._DualBits |= DUAL_SHIFT_L_BIT << MODIFIERS.index(k)
            if k == keysyms.Alt_R:
                self._capture_alt_r = True

        # Current event
        self._keyval = keysyms.VoidSymbol
        self._keycode = 0
        self.reset()
예제 #3
0
 def __s_to_key_raw(self, s):
     keyval = IBus.keyval_from_name(s.split('+')[-1])
     s = s.lower()
     state = ('shift+' in s and IBus.ModifierType.SHIFT_MASK or 0) | (
         'ctrl+' in s and IBus.ModifierType.CONTROL_MASK
         or 0) | ('alt+' in s and IBus.ModifierType.MOD1_MASK or 0)
     return (keyval, state)
예제 #4
0
 def __s_to_key_raw(self, s):
     keyval = IBus.keyval_from_name(s.split('+')[-1])
     s = s.lower()
     state = ('shift+' in s and IBus.ModifierType.SHIFT_MASK or 0) | (
              'ctrl+' in s and IBus.ModifierType.CONTROL_MASK or 0) | (
              'alt+' in s and IBus.ModifierType.MOD1_MASK or 0)
     return (keyval, state)
예제 #5
0
def keybinding_to_keyevent(keybinding):
    name = keybinding.split('+')[-1]
    keyval = IBus.keyval_from_name(name)
    state = 0
    if 'Shift+' in keybinding:
        state |= IBus.ModifierType.SHIFT_MASK
    if 'Lock+' in keybinding:
        state |= IBus.ModifierType.LOCK_MASK
    if 'Control+' in keybinding:
        state |= IBus.ModifierType.CONTROL_MASK
    if 'Super+' in keybinding:
        state |= IBus.ModifierType.SUPER_MASK
    if 'Hyper+' in keybinding:
        state |= IBus.ModifierType.HYPER_MASK
    if 'Meta+' in keybinding:
        state |= IBus.ModifierType.META_MASK
    if 'Mod1+' in keybinding:
        state |= IBus.ModifierType.MOD1_MASK
    if 'Mod2+' in keybinding:
        state |= IBus.ModifierType.MOD2_MASK
    if 'Mod3+' in keybinding:
        state |= IBus.ModifierType.MOD3_MASK
    if 'Mod4+' in keybinding:
        state |= IBus.ModifierType.MOD4_MASK
    if 'Mod5+' in keybinding:
        state |= IBus.ModifierType.MOD5_MASK
    return KeyEvent(keyval, 0, state)
예제 #6
0
def set_default_settings():
    global ENGINE
    global TABSQLITEDB
    ENGINE.set_input_mode(mode=1)
    chinese_mode = 4
    language_filter = TABSQLITEDB.ime_properties.get('language_filter')
    if language_filter in ('cm0', 'cm1', 'cm2', 'cm3', 'cm4'):
        chinese_mode = int(language_filter[-1])
    ENGINE.set_chinese_mode(mode=chinese_mode)

    letter_width_mode = False
    def_full_width_letter = TABSQLITEDB.ime_properties.get(
        'def_full_width_letter')
    if def_full_width_letter:
        letter_width_mode = (def_full_width_letter.lower() == u'true')
    ENGINE.set_letter_width(mode=False, input_mode=0)
    ENGINE.set_letter_width(mode=letter_width_mode, input_mode=1)

    punctuation_width_mode = False
    def_full_width_punct = TABSQLITEDB.ime_properties.get(
        'def_full_width_punct')
    if def_full_width_punct:
        punctuation_width_mode = (def_full_width_punct.lower() == u'true')
    ENGINE.set_punctuation_width(mode=False, input_mode=0)
    ENGINE.set_punctuation_width(mode=punctuation_width_mode, input_mode=1)

    always_show_lookup_mode = True
    always_show_lookup = TABSQLITEDB.ime_properties.get('always_show_lookup')
    if always_show_lookup:
        always_show_lookup_mode = (always_show_lookup.lower() == u'true')
    ENGINE.set_always_show_lookup(always_show_lookup_mode)

    orientation = TABSQLITEDB.get_orientation()
    ENGINE.set_lookup_table_orientation(orientation)

    page_size = 6
    select_keys_csv = TABSQLITEDB.ime_properties.get('select_keys')
    # select_keys_csv is something like: "1,2,3,4,5,6,7,8,9,0"
    if select_keys_csv:
        page_size = len(select_keys_csv.split(","))
    ENGINE.set_page_size(page_size)

    onechar = False
    ENGINE.set_onechar_mode(onechar)

    auto_select_mode = False
    auto_select = TABSQLITEDB.ime_properties.get('auto_select')
    if auto_select:
        auto_select_mode = (auto_select.lower() == u'true')
    ENGINE.set_autoselect_mode(auto_select_mode)

    auto_commit_mode = False
    auto_commit = TABSQLITEDB.ime_properties.get('auto_commit')
    if auto_commit:
        auto_commit_mode = (auto_commit.lower() == u'true')
    ENGINE.set_autocommit_mode(auto_commit_mode)

    space_key_behavior_mode = False
    # if space is a page down key, set the option
    # “spacekeybehavior” to “True”:
    page_down_keys_csv = TABSQLITEDB.ime_properties.get('page_down_keys')
    if page_down_keys_csv:
        page_down_keys = [
            IBus.keyval_from_name(x) for x in page_down_keys_csv.split(',')
        ]
    if IBus.KEY_space in page_down_keys:
        space_key_behavior_mode = True
    # if space is a commit key, set the option
    # “spacekeybehavior” to “False” (overrides if space is
    # also a page down key):
    commit_keys_csv = TABSQLITEDB.ime_properties.get('commit_keys')
    if commit_keys_csv:
        commit_keys = [
            IBus.keyval_from_name(x) for x in commit_keys_csv.split(',')
        ]
    if IBus.KEY_space in commit_keys:
        space_key_behavior_mode = False
    ENGINE.set_space_key_behavior_mode(space_key_behavior_mode)

    auto_wildcard_mode = True
    auto_wildcard = TABSQLITEDB.ime_properties.get('auto_wildcard')
    if auto_wildcard:
        auto_wildcard_mode = (auto_wildcard.lower() == u'true')
    ENGINE.set_autowildcard_mode(auto_wildcard_mode)

    single_wildcard_char = TABSQLITEDB.ime_properties.get(
        'single_wildcard_char')
    if not single_wildcard_char:
        single_wildcard_char = u''
    if len(single_wildcard_char) > 1:
        single_wildcard_char = single_wildcard_char[0]
    ENGINE.set_single_wildcard_char(single_wildcard_char)

    multi_wildcard_char = TABSQLITEDB.ime_properties.get('multi_wildcard_char')
    if not multi_wildcard_char:
        multi_wildcard_char = u''
    if len(multi_wildcard_char) > 1:
        multi_wildcard_char = multi_wildcard_char[0]
    ENGINE.set_multi_wildcard_char(multi_wildcard_char)

    ENGINE.set_pinyin_mode(False)
    ENGINE.set_suggestion_mode(False)
예제 #7
0
def set_default_settings():
    global ENGINE
    global TABSQLITEDB
    ENGINE.set_input_mode(mode=1)
    chinese_mode = 4
    language_filter = TABSQLITEDB.ime_properties.get('language_filter')
    if language_filter in ('cm0', 'cm1', 'cm2', 'cm3', 'cm4'):
        chinese_mode = int(language_filter[-1])
    ENGINE.set_chinese_mode(mode=chinese_mode)

    letter_width_mode = False
    def_full_width_letter = TABSQLITEDB.ime_properties.get(
        'def_full_width_letter')
    if def_full_width_letter:
        letter_width_mode = (def_full_width_letter.lower() == u'true')
    ENGINE.set_letter_width(mode=False, input_mode=0)
    ENGINE.set_letter_width(mode=letter_width_mode, input_mode=1)

    punctuation_width_mode = False
    def_full_width_punct = TABSQLITEDB.ime_properties.get(
        'def_full_width_punct')
    if def_full_width_punct:
        punctuation_width_mode = (def_full_width_punct.lower() == u'true')
    ENGINE.set_punctuation_width(mode=False, input_mode=0)
    ENGINE.set_punctuation_width(mode=punctuation_width_mode, input_mode=1)

    always_show_lookup_mode = True
    always_show_lookup = TABSQLITEDB.ime_properties.get(
        'always_show_lookup')
    if always_show_lookup:
        always_show_lookup_mode = (always_show_lookup.lower() == u'true')
    ENGINE.set_always_show_lookup(always_show_lookup_mode)

    orientation = TABSQLITEDB.get_orientation()
    ENGINE.set_lookup_table_orientation(orientation)

    page_size = 6
    select_keys_csv = TABSQLITEDB.ime_properties.get('select_keys')
    # select_keys_csv is something like: "1,2,3,4,5,6,7,8,9,0"
    if select_keys_csv:
        page_size = len(select_keys_csv.split(","))
    ENGINE.set_page_size(page_size)

    onechar = False
    ENGINE.set_onechar_mode(onechar)

    auto_select_mode = False
    auto_select = TABSQLITEDB.ime_properties.get('auto_select')
    if auto_select:
        auto_select_mode = (auto_select.lower() == u'true')
    ENGINE.set_autoselect_mode(auto_select_mode)

    auto_commit_mode = False
    auto_commit = TABSQLITEDB.ime_properties.get('auto_commit')
    if auto_commit:
        auto_commit_mode = (auto_commit.lower() == u'true')
    ENGINE.set_autocommit_mode(auto_commit_mode)

    space_key_behavior_mode = False
    # if space is a page down key, set the option
    # “spacekeybehavior” to “True”:
    page_down_keys_csv = TABSQLITEDB.ime_properties.get(
        'page_down_keys')
    if page_down_keys_csv:
        page_down_keys = [
            IBus.keyval_from_name(x)
            for x in page_down_keys_csv.split(',')]
    if IBus.KEY_space in page_down_keys:
        space_key_behavior_mode = True
    # if space is a commit key, set the option
    # “spacekeybehavior” to “False” (overrides if space is
    # also a page down key):
    commit_keys_csv = TABSQLITEDB.ime_properties.get('commit_keys')
    if commit_keys_csv:
        commit_keys = [
            IBus.keyval_from_name(x)
            for x in commit_keys_csv.split(',')]
    if IBus.KEY_space in commit_keys:
        space_key_behavior_mode = False
    ENGINE.set_space_key_behavior_mode(space_key_behavior_mode)

    auto_wildcard_mode = True
    auto_wildcard = TABSQLITEDB.ime_properties.get('auto_wildcard')
    if auto_wildcard:
        auto_wildcard_mode = (auto_wildcard.lower() == u'true')
    ENGINE.set_autowildcard_mode(auto_wildcard_mode)

    single_wildcard_char = TABSQLITEDB.ime_properties.get(
        'single_wildcard_char')
    if not single_wildcard_char:
        single_wildcard_char = u''
    if len(single_wildcard_char) > 1:
        single_wildcard_char = single_wildcard_char[0]
    ENGINE.set_single_wildcard_char(single_wildcard_char)

    multi_wildcard_char = TABSQLITEDB.ime_properties.get(
        'multi_wildcard_char')
    if not multi_wildcard_char:
        multi_wildcard_char = u''
    if len(multi_wildcard_char) > 1:
        multi_wildcard_char = multi_wildcard_char[0]
    ENGINE.set_multi_wildcard_char(multi_wildcard_char)
예제 #8
0
 def get_default_options_from_database(self):
     '''
     If there are default options in the database,
     they override the defaults from Gsettings.
     '''
     self.tabsqlitedb = tabsqlitedb.TabSqliteDb(
         filename=os.path.join(
             DB_DIR,
             re.sub(r'^table:', '', self.__engine_name)+'.db'),
         user_db=None,
         create_database=False)
     self.__is_chinese = False
     self.__is_cjk = False
     languages = self.tabsqlitedb.ime_properties.get('languages')
     if languages:
         languages = languages.split(',')
         for language in languages:
             if language.strip().startswith('zh'):
                 self.__is_chinese = True
             for lang in ['zh', 'ja', 'ko']:
                 if language.strip().startswith(lang):
                     self.__is_cjk = True
     self.__user_can_define_phrase = False
     user_can_define_phrase = self.tabsqlitedb.ime_properties.get(
         'user_can-define_phrase')
     if user_can_define_phrase:
         self.__user_can_define_phrase = (
             user_can_define_phrase.lower() == u'true')
     self.__rules = self.tabsqlitedb.ime_properties.get('rules')
     language_filter = self.tabsqlitedb.ime_properties.get(
         'language_filter')
     if language_filter in ('cm0', 'cm1', 'cm2', 'cm3', 'cm4'):
         OPTION_DEFAULTS['chinesemode'] = int(language_filter[-1])
     def_full_width_punct = self.tabsqlitedb.ime_properties.get(
         'def_full_width_punct')
     if (def_full_width_punct
             and type(def_full_width_punct) == type(u'')
             and def_full_width_punct.lower() in [u'true', u'false']):
         OPTION_DEFAULTS['tabdeffullwidthpunct'] = (
             def_full_width_punct.lower() == u'true')
         OPTION_DEFAULTS['endeffullwidthpunct'] = (
             def_full_width_punct.lower() == u'true')
     def_full_width_letter = self.tabsqlitedb.ime_properties.get(
         'def_full_width_letter')
     if (def_full_width_letter
             and type(def_full_width_letter) == type(u'')
             and def_full_width_letter.lower() in [u'true', u'false']):
         OPTION_DEFAULTS['tabdeffullwidthletter'] = (
             def_full_width_letter.lower() == u'true')
         OPTION_DEFAULTS['endeffullwidthletter'] = (
             def_full_width_letter.lower() == u'true')
     always_show_lookup = self.tabsqlitedb.ime_properties.get(
         'always_show_lookup')
     if (always_show_lookup
             and type(always_show_lookup) == type(u'')
             and always_show_lookup.lower() in [u'true', u'false']):
         OPTION_DEFAULTS['alwaysshowlookup'] = (
             always_show_lookup.lower() == u'true')
     select_keys_csv = self.tabsqlitedb.ime_properties.get('select_keys')
     if select_keys_csv:
         # select_keys_csv is something like: "1,2,3,4,5,6,7,8,9,0"
         OPTION_DEFAULTS['lookuptablepagesize'] = len(
             select_keys_csv.split(","))
     auto_select = self.tabsqlitedb.ime_properties.get('auto_select')
     if (auto_select
             and type(auto_select) == type(u'')
             and auto_select.lower() in [u'true', u'false']):
         OPTION_DEFAULTS['autoselect'] = auto_select.lower() == u'true'
     auto_commit = self.tabsqlitedb.ime_properties.get('auto_commit')
     if (auto_commit
             and type(auto_commit) == type(u'')
             and auto_commit.lower() in [u'true', u'false']):
         OPTION_DEFAULTS['autocommit'] = auto_commit.lower() == u'true'
     orientation = self.tabsqlitedb.get_orientation()
     OPTION_DEFAULTS['lookuptableorientation'] = orientation
     # if space is a page down key, set the option
     # “spacekeybehavior” to “True”:
     page_down_keys_csv = self.tabsqlitedb.ime_properties.get(
         'page_down_keys')
     if page_down_keys_csv:
         self._page_down_keys = [
             IBus.keyval_from_name(x)
             for x in page_down_keys_csv.split(',')]
     if IBus.KEY_space in self._page_down_keys:
         OPTION_DEFAULTS['spacekeybehavior'] = True
     # if space is a commit key, set the option
     # “spacekeybehavior” to “False” (overrides if space is
     # also a page down key):
     commit_keys_csv = self.tabsqlitedb.ime_properties.get('commit_keys')
     if commit_keys_csv:
         self._commit_keys = [
             IBus.keyval_from_name(x)
             for x in commit_keys_csv.split(',')]
     if IBus.KEY_space in self._commit_keys:
         OPTION_DEFAULTS['spacekeybehavior'] = False
     auto_wildcard = self.tabsqlitedb.ime_properties.get('auto_wildcard')
     if (auto_wildcard
             and type(auto_wildcard) == type(u'')
             and auto_wildcard.lower() in [u'true', u'false']):
         OPTION_DEFAULTS['autowildcard'] = auto_wildcard.lower() == u'true'
     single_wildcard_char = self.tabsqlitedb.ime_properties.get(
         'single_wildcard_char')
     if (single_wildcard_char
             and type(single_wildcard_char) == type(u'')):
         if len(single_wildcard_char) > 1:
             single_wildcard_char = single_wildcard_char[0]
         OPTION_DEFAULTS['singlewildcardchar'] = single_wildcard_char
     multi_wildcard_char = self.tabsqlitedb.ime_properties.get(
         'multi_wildcard_char')
     if (multi_wildcard_char
             and type(multi_wildcard_char) == type(u'')):
         if len(multi_wildcard_char) > 1:
             multi_wildcard_char = multi_wildcard_char[0]
         OPTION_DEFAULTS['multiwildcardchar'] = multi_wildcard_char