From 2c1bd6a8c837788f490a9c7fc6bea7a34c1ab4c0 Mon Sep 17 00:00:00 2001 From: Manuel Cortez Date: Fri, 1 Dec 2017 12:26:16 -0600 Subject: [PATCH] Spellchecker: allow adding words to personal dictionaries --- src/extra/SpellChecker/spellchecker.py | 22 ++++++++++++++-------- src/extra/SpellChecker/wx_ui.py | 3 +++ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/extra/SpellChecker/spellchecker.py b/src/extra/SpellChecker/spellchecker.py index 62305b80..a0afdcee 100644 --- a/src/extra/SpellChecker/spellchecker.py +++ b/src/extra/SpellChecker/spellchecker.py @@ -1,15 +1,17 @@ # -*- coding: utf-8 -*- import logging -log = logging.getLogger("extra.SpellChecker.spellChecker") import wx_ui import widgetUtils import output import config import languageHandler +import enchant +import paths +import twitterFilter from enchant.checker import SpellChecker from enchant.errors import DictNotFoundError from enchant import tokenize -import twitterFilter +log = logging.getLogger("extra.SpellChecker.spellChecker") class spellChecker(object): def __init__(self, text, dictionary): @@ -19,15 +21,16 @@ class spellChecker(object): try: if config.app["app-settings"]["language"] == "system": log.debug("Using the system language") - self.checker = SpellChecker(languageHandler.curLang[:2], filters=[twitterFilter.TwitterFilter, tokenize.EmailFilter, tokenize.URLFilter]) + self.dict = enchant.DictWithPWL(languageHandler.curLang[:2], paths.config_path("wordlist.dict")) else: log.debug("Using language: %s" % (languageHandler.getLanguage(),)) - self.checker = SpellChecker(languageHandler.getLanguage()[:2], filters=[twitterFilter.TwitterFilter, tokenize.EmailFilter, tokenize.URLFilter]) - self.checker.set_text(text) + self.dict = enchant.DictWithPWL(languageHandler.getLanguage()[:2], paths.config_path("wordlist.dict")) except DictNotFoundError: log.exception("Dictionary for language %s not found." % (dictionary,)) wx_ui.dict_not_found_error() self.active = False + self.checker = SpellChecker(self.dict, filters=[twitterFilter.TwitterFilter, tokenize.EmailFilter, tokenize.URLFilter]) + self.checker.set_text(text) if self.active == True: log.debug("Creating dialog...") self.dialog = wx_ui.spellCheckerDialog() @@ -35,6 +38,7 @@ class spellChecker(object): widgetUtils.connect_event(self.dialog.ignoreAll, widgetUtils.BUTTON_PRESSED, self.ignoreAll) widgetUtils.connect_event(self.dialog.replace, widgetUtils.BUTTON_PRESSED, self.replace) widgetUtils.connect_event(self.dialog.replaceAll, widgetUtils.BUTTON_PRESSED, self.replaceAll) + widgetUtils.connect_event(self.dialog.add, widgetUtils.BUTTON_PRESSED, self.add) self.check() self.dialog.get_response() self.fixed_text = self.checker.get_text() @@ -51,8 +55,6 @@ class spellChecker(object): log.debug("Process finished.") wx_ui.finished() self.dialog.Destroy() -# except AttributeError: -# pass def ignore(self, ev): self.check() @@ -67,4 +69,8 @@ class spellChecker(object): def replaceAll(self, ev): self.checker.replace_always(self.dialog.get_selected_suggestion()) - self.check() \ No newline at end of file + self.check() + + def add(self, ev): + self.checker.add() + self.check() diff --git a/src/extra/SpellChecker/wx_ui.py b/src/extra/SpellChecker/wx_ui.py index 407c0119..215a40b6 100644 --- a/src/extra/SpellChecker/wx_ui.py +++ b/src/extra/SpellChecker/wx_ui.py @@ -18,6 +18,7 @@ ############################################################ import wx import application + class spellCheckerDialog(wx.Dialog): def __init__(self): super(spellCheckerDialog, self).__init__(None, 1) @@ -42,12 +43,14 @@ class spellCheckerDialog(wx.Dialog): self.ignoreAll = wx.Button(panel, -1, _(u"Ignore all")) self.replace = wx.Button(panel, -1, _(u"Replace")) self.replaceAll = wx.Button(panel, -1, _(u"Replace all")) + self.add = wx.Button(panel, -1, _(u"Add to personal dictionary")) close = wx.Button(panel, wx.ID_CANCEL) btnBox = wx.BoxSizer(wx.HORIZONTAL) btnBox.Add(self.ignore, 0, wx.ALL, 5) btnBox.Add(self.ignoreAll, 0, wx.ALL, 5) btnBox.Add(self.replace, 0, wx.ALL, 5) btnBox.Add(self.replaceAll, 0, wx.ALL, 5) + btnBox.Add(self.add, 0, wx.ALL, 5) btnBox.Add(close, 0, wx.ALL, 5) sizer.Add(wordBox, 0, wx.ALL, 5) sizer.Add(contextBox, 0, wx.ALL, 5)