diff -Nur sunpinyin/wrapper/ibus/debian/changelog sunpinyin-new/wrapper/ibus/debian/changelog --- sunpinyin/wrapper/ibus/debian/changelog 1970-01-01 08:00:00.000000000 +0800 +++ sunpinyin-new/wrapper/ibus/debian/changelog 2020-03-03 20:33:45.210426000 +0800 @@ -0,0 +1,5 @@ +ibus-sunpinyin (2.0.2~git20100607) unstable; urgency=low + + * first debian package + + -- Mike Qin Mon, 23 May 2010 11:20:00 +0800 diff -Nur sunpinyin/wrapper/ibus/debian/control.in sunpinyin-new/wrapper/ibus/debian/control.in --- sunpinyin/wrapper/ibus/debian/control.in 1970-01-01 08:00:00.000000000 +0800 +++ sunpinyin-new/wrapper/ibus/debian/control.in 2020-03-03 20:33:45.210426000 +0800 @@ -0,0 +1,15 @@ +Source: ibus-sunpinyin +Section: util +Priority: optional +Maintainer: Mike Qin +Build-Depends: @cdbs@, pkg-config, libgtk2.0-dev (>=2.12.0), + libsqlite3-dev (>=3.6), libsunpinyin3-dev, libibus-dev (>=1.2.0) +Standards-Version: 3.8.4 +Homepage: http://code.google.com/p/sunpinyin/ + +Package: ibus-sunpinyin +Architecture: any +Section: util +Priority: optional +Depends: libsunpinyin3, ${shlibs:Depends}, ${misc:Depends} +Homepage: http://code.google.com/p/sunpinyin/ diff -Nur sunpinyin/wrapper/ibus/debian/rules sunpinyin-new/wrapper/ibus/debian/rules --- sunpinyin/wrapper/ibus/debian/rules 1970-01-01 08:00:00.000000000 +0800 +++ sunpinyin-new/wrapper/ibus/debian/rules 2020-03-03 20:33:45.210426000 +0800 @@ -0,0 +1,10 @@ +#!/usr/bin/make -f +# -*- mode: makefile; indent-tabs-mode: t -*- vim:noet:ts=4 + +include /usr/share/cdbs/1/class/scons.mk +include /usr/share/cdbs/1/rules/debhelper.mk + +DEB_SCONS_BUILD_OPTIONS := --prefix=/usr +DEB_SCONS_INSTALL_OPTIONS := $(DEB_SCONS_BUILD_OPTIONS) \ + --install-sandbox=$(DEB_DESTDIR) + diff -Nur sunpinyin/wrapper/ibus/.gitignore sunpinyin-new/wrapper/ibus/.gitignore --- sunpinyin/wrapper/ibus/.gitignore 1970-01-01 08:00:00.000000000 +0800 +++ sunpinyin-new/wrapper/ibus/.gitignore 2020-03-03 20:33:45.210426000 +0800 @@ -0,0 +1,3 @@ +cmakebuild/ +setup/ibus-setup-sunpinyin + diff -Nur sunpinyin/wrapper/ibus/po/.gitignore sunpinyin-new/wrapper/ibus/po/.gitignore --- sunpinyin/wrapper/ibus/po/.gitignore 1970-01-01 08:00:00.000000000 +0800 +++ sunpinyin-new/wrapper/ibus/po/.gitignore 2020-03-03 20:33:45.210426000 +0800 @@ -0,0 +1,4 @@ +POTFILES +stamp-it +Makefile.in.in + diff -Nur sunpinyin/wrapper/ibus/setup/ibus-setup-sunpinyin.in sunpinyin-new/wrapper/ibus/setup/ibus-setup-sunpinyin.in --- sunpinyin/wrapper/ibus/setup/ibus-setup-sunpinyin.in 2016-05-08 21:57:00.000000000 +0800 +++ sunpinyin-new/wrapper/ibus/setup/ibus-setup-sunpinyin.in 2020-03-03 21:08:09.694916205 +0800 @@ -4,4 +4,4 @@ exec_prefix=${prefix} export IBUS_PREFIX=${prefix} export IBUS_LOCALEDIR=${prefix}/share/locale -exec python @DATA_DIR@/setup/main.py $@ +exec python3 @DATA_DIR@/setup/main.py $@ diff -Nur sunpinyin/wrapper/ibus/setup/main.py sunpinyin-new/wrapper/ibus/setup/main.py --- sunpinyin/wrapper/ibus/setup/main.py 2016-05-08 21:57:00.000000000 +0800 +++ sunpinyin-new/wrapper/ibus/setup/main.py 2020-03-03 21:07:39.739075161 +0800 @@ -1,5 +1,6 @@ +#!/usr/bin/python3 # -*- coding: utf-8 -*- -# +# # Copyright (c) 2009 Leo Zheng , Kov Chai # * # The contents of this file are subject to the terms of either the GNU Lesser @@ -7,12 +8,12 @@ # Distribution License ("CDDL")(collectively, the "License"). You may not use this # file except in compliance with the License. You can obtain a copy of the CDDL at # http://www.opensource.org/licenses/cddl1.php and a copy of the LGPLv2.1 at -# http://www.opensource.org/licenses/lgpl-license.php. See the License for the +# http://www.opensource.org/licenses/lgpl-license.php. See the License for the # specific language governing permissions and limitations under the License. When # distributing the software, include this License Header Notice in each file and # include the full text of the License in the License file as well as the # following notice: -# +# # NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE # (CDDL) # For Covered Software in this distribution, this License shall be governed by the @@ -20,9 +21,9 @@ # Any litigation relating to this License shall be subject to the jurisdiction of # the Federal Courts of the Northern District of California and the state courts # of the State of California, with venue lying in Santa Clara County, California. -# +# # Contributor(s): -# +# # If you wish your version of this file to be governed by only the CDDL or only # the LGPL Version 2.1, indicate your decision by adding "[Contributor]" elects to # include this software in this distribution under the [CDDL or LGPL Version 2.1] @@ -31,14 +32,26 @@ # Version 2.1, or to extend the choice of license to its licensees as provided # above. However, if you add LGPL Version 2.1 code and therefore, elected the LGPL # Version 2 license, then the option applies only if the new code is made subject -# to such option by the copyright holder. +# to such option by the copyright holder. # import sys import os from os import path -import gtk -import ibus +try: + import gtk + import glib +except ImportError: + from gi import require_version as gi_require_version + gi_require_version('Gtk', '3.0') + from gi.repository import Gtk as gtk + from gi.repository import GLib as glib +try: + import ibus +except ImportError: + from gi import require_version as gi_require_version + gi_require_version('IBus', '1.0') + from gi.repository import IBus as ibus import gettext import locale @@ -52,27 +65,35 @@ @staticmethod def pr(message): print >> sys.stderr, message - + + class Option(object): """Option serves as an interface of ibus.config it is used to synchronize the configuration with setting on user interface """ config = ibus.Bus().get_config() - + __wrappers = { + type(True): glib.Variant.new_boolean, + type(1): glib.Variant.new_int32, + type('str'): glib.Variant.new_string, + type([]): glib.Variant.new_strv, + } + def __init__(self, name, default): self.name = name self.default = default - + self.__wrap = self.__wrappers[type(self.default)] + def read(self): section, key = self.__get_config_name() - return self.config.get_value(section, key, self.default) + wrapped = self.config.get_value(section, key) + return self.default if wrapped is None else wrapped.unpack() def write(self, v): section, key = self.__get_config_name() - return self.config.set_value(section, key, type(self.default)(v)) + return self.config.set_value(section, key, self.__wrap(v)) - def __get_config_name(self): keys = self.name.rsplit(SEPARATOR ,1) if len(keys) == 2: @@ -96,7 +117,7 @@ def init(self): pass - + def read_config(self): """update user inferface with ibus.config """ @@ -106,13 +127,13 @@ def write_config(self): v = self.save_ui_setting() self.write(v) - + def save_ui_setting(self): """save user interface settings into self.v """ self.v = self.__get_value() return self.v - + def is_changed(self): return self.v != self.__get_value() @@ -127,7 +148,7 @@ self.widget.set_value(v) except: self.widget.set_active(v) - + class CheckBoxOption(TrivalOption): def __init__(self, name, default, owner): super(CheckBoxOption, self).__init__(name, default, owner) @@ -140,7 +161,7 @@ default = options.index(default) super(ComboBoxOption, self).__init__(name, default, owner) self.options = options - + def init(self): model = gtk.ListStore(str) for v in self.options: @@ -156,7 +177,7 @@ except ValueError: # otherwise save its index return active - + def __set_value(self, v): try: # if the options are just numbers, we treat 'self.v' as the literal @@ -166,7 +187,7 @@ except ValueError: active = v self.widget.set_active(active) - + class RadioOption(Option): """option represented using multiple Raidio buttons """ @@ -177,7 +198,7 @@ def init_ui(self): self.read_config() - + def read_config(self): self.v = self.read() name = SEPARATOR.join([self.name, self.v]) @@ -200,7 +221,7 @@ def __init__(self, name, mapping): self.name = name self.mapping = mapping - + class MappingOption(object): """an option which presents some sort of mapping, e.g. fuzzy pinyin mapping @@ -211,7 +232,7 @@ self.name = name self.widget = owner.get_object(name) self.mappings = mappings - + def get_mappings(self): if self.widget.get_active(): return [':'.join(self.mappings)] @@ -223,18 +244,18 @@ def get_active(self): return self.widget.get_active() - + is_enabled = property(get_active, set_active) def key(self): return self.mappings[0] - + class MultiMappingOption(Option): def __init__(self, name, options, default=[]): Option.__init__(self, name, default) self.options = options self.saved_pairs = default - + def read_config(self): if not self.saved_pairs: self.saved_pairs = self.read() @@ -242,24 +263,24 @@ for opt in self.options: opt.is_enabled = (opt.key() in keys) # throw away unknown pair - + def write_config(self): # ignore empty settings if self.saved_pairs: self.write(self.saved_pairs) - + def save_ui_setting(self): self.saved_pairs = sum([opt.get_mappings() for opt in self.options if opt.is_enabled], []) return self.saved_pairs - + def set_active_all(self, enabled): for opt in self.options: opt.is_enabled = enabled - + class MultiCheckDialog (object): """ a modal dialog box with 'choose all' and 'choose none' button - + TODO: another option is to use radio button """ def __init__ (self, ui_name, config_name, mappings, option_klass=MappingOption): @@ -269,25 +290,26 @@ self.option_klass = option_klass self.saved_settings = [] self.mapping_options = None - + def get_setup_name(self): """assuming the name of dialog looks like 'dlg_fuzzy_setup' """ return '_'.join(['dlg', self.ui_name, 'setup']) - - def __init_ui(self): + + def __init_ui(self, parent_window): dlg_name = self.get_setup_name() self.__xml = gtk.Builder() self.__xml.add_objects_from_file(XML_FILE, [dlg_name]) self.__dlg = self.__xml.get_object(dlg_name) assert self.__dlg is not None, "dialog %s not found in %s" % (dlg_name, XML_FILE) + self.__dlg.set_transient_for(parent_window) handlers = {'_'.join(["on", self.ui_name, "select_all_clicked"]) : self.on_button_check_all_clicked, '_'.join(["on", self.ui_name, "unselect_all_clicked"]) : self.on_button_uncheck_all_clicked, '_'.join(["on", self.ui_name, "ok_clicked"]) : self.on_button_ok_clicked, '_'.join(["on", self.ui_name, "cancel_clicked"]) : self.on_button_cancel_clicked} self.__xml.connect_signals(handlers) - options = [self.option_klass(m.name, m.mapping, self.__xml) + options = [self.option_klass(m.name, m.mapping, self.__xml) for m in self.mappings] self.mapping_options = MultiMappingOption(self.config_name, options, self.saved_settings) @@ -298,15 +320,15 @@ pass init_ui = read_config = dummy - - def run(self): - self.__init_ui() + + def run(self, parent_window): + self.__init_ui(parent_window) self.__read_config() self.__dlg.run() - + def __read_config(self): self.mapping_options.read_config() - + def __save_ui_settings(self): """save to in-memory storage, will flush to config if not canceled in main_window """ @@ -315,20 +337,20 @@ def write_config(self): if self.mapping_options is not None: self.mapping_options.write_config() - + def on_button_check_all_clicked(self, button): self.mapping_options.set_active_all(True) - + def on_button_uncheck_all_clicked(self, button): self.mapping_options.set_active_all(False) - + def on_button_ok_clicked(self, button): """update given options with settings in UI, these settings will be written to config if user push 'OK' or 'Apply' in the main window """ self.__save_ui_settings() self.__dlg.destroy() - + def on_button_cancel_clicked(self, button): self.__dlg.destroy() @@ -353,7 +375,7 @@ ui_name = 'fuzzy', config_name = 'QuanPin/Fuzzy/Pinyins', mappings = mappings) - + class CorrectionSetupDialog (MultiCheckDialog): def __init__(self): mappings = [MappingInfo('QuanPin/AutoCorrection/GnNg', ('gn','ng')), @@ -374,7 +396,7 @@ self.init_keys_values(mappings) else: self.widget.set_sensitive(False) - + def init_keys_values(self, mappings): self.keys = [m[0] for m in mappings] values_with_closing = [v or k for k, v in mappings] @@ -412,7 +434,7 @@ self.widget.set_active(enabled) is_enabled = property(MappingOption.get_active, set_active) - + def key(self): for k, v in self.mappings: if v is not None: @@ -460,13 +482,13 @@ def __init__ (self): self.__bus = ibus.Bus() self.__config = self.__bus.get_config() - - + + def run(self): self.__init_ui("main_window") self.__read_config() gtk.main() - + def __init_ui(self, name): self.__init_gettext() xml_file = path.join(path.dirname(__file__), XML_FILE) @@ -488,19 +510,19 @@ self.__fuzzy_setup = FuzzySetupDialog() self.__correction_setup = CorrectionSetupDialog() self.__punctmapping_setup = PunctMappingSetupDialog() - + self.__options = [ TrivalOption("General/MemoryPower", 3, self.__xml), TrivalOption("General/PageSize", 10, self.__xml), TrivalOption("General/MaxBest", 1, self.__xml), TrivalOption("General/MaxTailCandidate", 0, self.__xml), - + RadioOption("General/InitialStatus/Mode", 'Chinese', ['Chinese', 'English'], self.__xml), RadioOption("General/InitialStatus/Punct", 'Full', ['Full', 'Half'], self.__xml), RadioOption("General/InitialStatus/Letter", 'Half', ['Full', 'Half'], self.__xml), RadioOption("General/Charset", 'GBK', ['GB2312', 'GBK', 'GB18030'], self.__xml), CheckBoxOption("General/PunctMapping/Enabled", False, self.__xml), - + RadioOption("Keyboard/ModeSwitch", 'Shift', ['Shift', 'Control'], self.__xml), RadioOption("Keyboard/PunctSwitch", 'None', ['ControlComma', 'ControlPeriod', @@ -510,7 +532,7 @@ CheckBoxOption("Keyboard/Page/CommaPeriod", False, self.__xml), CheckBoxOption("Keyboard/CancelBackspace", True, self.__xml), CheckBoxOption("Keyboard/SmartPunct", True, self.__xml), - + RadioOption("Pinyin/Scheme", 'QuanPin', ['QuanPin', 'ShuangPin'], self.__xml), ComboBoxOption("Pinyin/ShuangPinType", 'MS2003', ['MS2003', 'ABC', @@ -522,7 +544,7 @@ CheckBoxOption("QuanPin/AutoCorrection/Enabled", False, self.__xml), CheckBoxOption("QuanPin/FuzzySegs/Enabled", False, self.__xml), CheckBoxOption("QuanPin/InnerFuzzy/Enabled", False, self.__xml), - + self.__fuzzy_setup, self.__correction_setup, self.__punctmapping_setup, @@ -534,7 +556,7 @@ return opt else: return None - + def __read_config(self): for opt in self.__options: opt.init_ui() @@ -543,7 +565,7 @@ self.on_chk_correction_enabled_toggled(None) self.on_chk_punctmapping_enabled_toggled(None) self.on_radio_shuangpin_toggled(None) - + def __write_config(self): for opt in self.__options: opt.write_config() @@ -563,14 +585,14 @@ enabled = radio.get_active() combo = self.__xml.get_object("Pinyin/ShuangPinType") combo.set_sensitive(enabled) - + def on_chk_fuzzy_enabled_toggled(self, button): self.__update_enabling_button("QuanPin/Fuzzy/Enabled", "button_fuzzy_setup") - + def on_button_fuzzy_setup_clicked(self, button): - self.__fuzzy_setup.run() - + self.__fuzzy_setup.run(self.window) + def on_chk_correction_enabled_toggled(self, button): self.__update_enabling_button("QuanPin/AutoCorrection/Enabled", "button_correction_setup") @@ -580,19 +602,19 @@ "QuanPin/InnerFuzzy/Enabled") def on_button_correction_setup_clicked(self, button): - self.__correction_setup.run() - + self.__correction_setup.run(self.window) + def on_chk_punctmapping_enabled_toggled(self, button): self.__update_enabling_button("General/PunctMapping/Enabled", "button_punctmapping_setup") - + def on_button_punctmapping_setup_clicked(self, button): - self.__punctmapping_setup.run() - + self.__punctmapping_setup.run(self.window) + def on_main_ok_clicked(self, button): self.__write_config() self.__quit() - + def on_main_apply_clicked(self, button): self.__write_config() @@ -601,7 +623,7 @@ def __quit(self): gtk.main_quit() - + if __name__ == "__main__": MainWindow().run() diff -Nur sunpinyin/wrapper/ibus/setup/setup.xml sunpinyin-new/wrapper/ibus/setup/setup.xml --- sunpinyin/wrapper/ibus/setup/setup.xml 2016-05-08 21:57:00.000000000 +0800 +++ sunpinyin-new/wrapper/ibus/setup/setup.xml 2020-03-03 20:33:45.210426000 +0800 @@ -50,7 +50,7 @@ True True False - + False diff -Nur sunpinyin/wrapper/ibus/src/sunpinyin_engine.cpp sunpinyin-new/wrapper/ibus/src/sunpinyin_engine.cpp --- sunpinyin/wrapper/ibus/src/sunpinyin_engine.cpp 2016-05-08 21:57:00.000000000 +0800 +++ sunpinyin-new/wrapper/ibus/src/sunpinyin_engine.cpp 2020-03-03 20:33:45.210426000 +0800 @@ -131,7 +131,7 @@ if (getenv("DISABLE_HARD_FORWARD") == NULL) { // Ctrl+ is pressed. let's just hard code these. - // it looks rediculous, but on what else do you need to do this hack? + // it looks ridiculous, but on what else do you need to do this hack? if (key.code == 0x20 && key.modifiers == IM_CTRL_MASK) { m_hard_forward = !m_hard_forward; return TRUE;