From 6c774c3d959dba90929207f27a47d7603a2f00a6 Mon Sep 17 00:00:00 2001 From: fujiwarat Date: Wed, 4 Jul 2012 19:43:28 +0900 Subject: Fixed MBCS dict file names (#1479) --- engine/engine.py | 33 +++++++++++++++++++++++++-------- setup/main.py | 36 +++++++++++++++++++++++++----------- 2 files changed, 50 insertions(+), 19 deletions(-) diff --git a/engine/engine.py b/engine/engine.py index 5c6e0a9..462398a 100644 --- a/engine/engine.py +++ b/engine/engine.py @@ -312,6 +312,7 @@ class Engine(ibus.EngineBase): label=UN(_(long_label)))) for file in self.__prefs.get_value('dict', 'files'): + file = str(file) self._link_dict_file(file) id = self._get_dict_id_from_file(file) if id == None: @@ -384,6 +385,7 @@ class Engine(ibus.EngineBase): files = self.__prefs.get_value('dict', 'files') single_files = [] for file in files: + file = str(file) id = self._get_dict_id_from_file(file) if id == None: continue @@ -394,6 +396,7 @@ class Engine(ibus.EngineBase): def __remove_dict_files(self): for file in self.__prefs.get_value('dict', 'files'): + file = str(file) self._remove_dict_file(file) def update_preedit(self, string, attrs, cursor_pos, visible): @@ -723,10 +726,12 @@ class Engine(ibus.EngineBase): i = prop_name.find('.') if i < 0: return - id = prop_name[i + 1:].encode('utf-8') + # The id is already quoted. + id = prop_name[i + 1:] file = None - files = self.__prefs.get_value('dict', 'files') + single_files = self.__get_single_dict_files() + if id == 'embedded': pass elif id == 'anthy_zipcode' or id == 'ibus_symbol' or \ @@ -734,7 +739,7 @@ class Engine(ibus.EngineBase): file = self.__prefs.get_value('dict', id)[0] else: found = False - for file in files: + for file in single_files: if id == self._get_quoted_id(file): found = True break @@ -745,12 +750,16 @@ class Engine(ibus.EngineBase): dict_name = 'default' self.__dict_mode = 0 else: + if file not in single_files: + print >> sys.stderr, "Index error ", file, single_files + return dict_name = 'ibus__' + id - self.__dict_mode = files.index(file) + 1 + self.__dict_mode = single_files.index(file) + 1 self.__prop_dict[prop_name].set_state(state) self.update_property(self.__prop_dict[prop_name]) self.__context.init_personality() - self.__context.do_set_personality(dict_name) + # dict_name is unicode but the argument is str. + self.__context.do_set_personality(str(dict_name)) prop = self.__prop_dict[u"DictMode"] section = 'dict/file/' + id @@ -1447,13 +1456,18 @@ class Engine(ibus.EngineBase): has_mbcs = True break if has_mbcs: - import urllib - id = urllib.quote(id) + id = id.encode('hex') if id.find('/') >=0: id = id[id.rindex('/') + 1:] if id.find('.') >=0: id = id[:id.rindex('.')] + + if id.startswith('0x'): + id = id.encode('hex') + has_mbcs = True + if has_mbcs: + id = '0x' + id return id @classmethod @@ -1558,7 +1572,10 @@ class Engine(ibus.EngineBase): str_list = [] for file in value: str_list.append(str(file)) - old_files = cls.__prefs.get_value(base_sec, name) + old_files = [] + dbus_old_files = cls.__prefs.get_value(base_sec, name) + for file in dbus_old_files: + old_files.append(str(file)) for file in old_files: if file in str_list: continue diff --git a/setup/main.py b/setup/main.py index d05c015..47fa53b 100644 --- a/setup/main.py +++ b/setup/main.py @@ -525,33 +525,39 @@ class AnthySetup(object): has_mbcs = True break if has_mbcs: - import urllib - id = urllib.quote(id) + id = id.encode('hex') if id.find('/') >=0: id = id[id.rindex('/') + 1:] if id.find('.') >=0: id = id[:id.rindex('.')] + + if id.startswith('0x'): + id = id.encode('hex') + has_mbcs = True + if has_mbcs: + id = '0x' + id return id def __get_dict_file_from_id(self, selected_id): - found = False - files = self.prefs.get_value('dict', 'files') - if selected_id == 'anthy_zipcode': return self.prefs.get_value('dict', 'anthy_zipcode')[0] elif selected_id == 'ibus_symbol': return self.prefs.get_value('dict', 'ibus_symbol')[0] elif selected_id == 'ibus_oldchar': return self.prefs.get_value('dict', 'ibus_oldchar')[0] + + files = self.prefs.get_value('dict', 'files') + retval = None + for file in files: + file = str(file) id = self.__get_quoted_id(file) + # The selected_id is already quoted. if selected_id == id: - found = True + retval = file break - if found: - return file - return None + return retval def __is_system_dict_file_from_id(self, selected_id): prefs = self.prefs @@ -583,6 +589,7 @@ class AnthySetup(object): def __append_dicts_in_model(self): prefs = self.prefs for file in prefs.get_value('dict', 'files'): + file = str(file) if not path.exists(file): continue if file in prefs.get_value('dict', 'anthy_zipcode'): @@ -1085,7 +1092,10 @@ class AnthySetup(object): file = self.__get_dict_file_from_id(selected_id) if file != None: - files = self.prefs.get_value('dict', 'files') + files = [] + values = self.prefs.get_value('dict', 'files') + for dbus_file in values: + files.append(str(dbus_file)) files.remove(file) self.prefs.set_value('dict', 'files', files) self.xml.get_widget('btn_apply').set_sensitive(True) @@ -1113,6 +1123,7 @@ class AnthySetup(object): if dict_file == None: return + # The selected id is already quoted. section = 'dict/file/' + selected_id if 'preview_lines' not in self.prefs.keys(section): section = 'dict/file/default' @@ -1170,7 +1181,10 @@ class AnthySetup(object): l.swap(it, next_it) dict_file = self.__get_dict_file_from_id(selected_id) - files = self.prefs.get_value('dict', 'files') + files = [] + values = self.prefs.get_value('dict', 'files') + for dbus_file in values: + files.append(str(dbus_file)) if dict_file == None: return -- cgit v1.2.1