diff --git a/src/fastwq/context.py b/src/fastwq/context.py index 2860a0d..452a90a 100644 --- a/src/fastwq/context.py +++ b/src/fastwq/context.py @@ -105,5 +105,10 @@ class Config(object): """ return self.data.get('last_folder', '') + @property + def ignore_accents(self): + '''ignore accents of field in querying''' + return self.data.get('ignore_accents', False) + config = Config(mw) diff --git a/src/fastwq/lang.py b/src/fastwq/lang.py index 3ab2f31..0840a03 100644 --- a/src/fastwq/lang.py +++ b/src/fastwq/lang.py @@ -56,6 +56,7 @@ arr = [ ['NEW_VERSION', u'检查到新版本:', u'New version:'], ['UPDATE', u'更新', u'Update'], ['FORCE_UPDATE', u'强制更新字段', u'Force Update Fields'], + ['IGNORE_ACCENTS', u'忽略声调', u'Ignore Accents'], ['SETTINGS', u'参数', u'Settings'], ['THREAD_NUMBER', u'线程数', u'Thread Number'], ['INITLIZING_DICT', u'初始化词典...', u'Initlizing Dictionary...'], diff --git a/src/fastwq/query.py b/src/fastwq/query.py index 22be25d..aa5eb03 100644 --- a/src/fastwq/query.py +++ b/src/fastwq/query.py @@ -23,6 +23,7 @@ import re import shutil import sys import time +import unicodedata from aqt import mw from aqt.qt import QFileDialog, QObject, QThread, pyqtSignal, pyqtSlot, QMutex @@ -337,6 +338,11 @@ def add_to_tmpl(note, **kwargs): class InvalidWordException(Exception): """Invalid word exception""" +def strip_combining(txt): + "Return txt with all combining characters removed." + norm = unicodedata.normalize('NFKD', txt) + return u"".join([c for c in norm if not unicodedata.combining(c)]) + def query_all_flds(note): """ Query all fields of single note @@ -346,6 +352,9 @@ def query_all_flds(note): if not word: raise InvalidWordException + if config.ignore_accents: + word = strip_combining(unicode(word)) + # progress.update_title(u'Querying [[ %s ]]' % word) services = {} diff --git a/src/fastwq/ui.py b/src/fastwq/ui.py index 53c4d28..e3498fa 100644 --- a/src/fastwq/ui.py +++ b/src/fastwq/ui.py @@ -68,6 +68,11 @@ class ParasDialog(QDialog): layout.addWidget(check_force_update) layout.addSpacing(10) + check_ignore_accents = QCheckBox(_("IGNORE_ACCENTS")) + check_ignore_accents.setChecked(config.ignore_accents) + layout.addWidget(check_ignore_accents) + layout.addSpacing(10) + hbox = QHBoxLayout() input_thread_number = QSpinBox(parent=self) input_thread_number.setRange(1, 120) @@ -87,6 +92,7 @@ class ParasDialog(QDialog): layout.addWidget(buttonBox) self.check_force_update = check_force_update + self.check_ignore_accents = check_ignore_accents self.input_thread_number = input_thread_number layout.setAlignment(Qt.AlignTop|Qt.AlignLeft) @@ -97,8 +103,11 @@ class ParasDialog(QDialog): self.close() def save(self): - data = {'force_update': self.check_force_update.isChecked(), - 'thread_number': self.input_thread_number.value()} + data = { + 'force_update': self.check_force_update.isChecked(), + 'ignore_accents': self.check_ignore_accents.isChecked(), + 'thread_number': self.input_thread_number.value() + } config.update(data)