From: Stephan Witt Date: Sun, 31 Jul 2011 13:27:39 +0000 (+0000) Subject: #7660 with aspell backend split words on hard hyphens to check parts separately becau... X-Git-Tag: 2.1.0beta1~2870 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=e309590df8fde56c6696fa14dc09dfb9b59cdac7;p=features.git #7660 with aspell backend split words on hard hyphens to check parts separately because hyphen is not allowed to be part of a word - neither in regular nor in personal dictionary git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@39395 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/AspellChecker.cpp b/src/AspellChecker.cpp index 16bc580211..c549980e03 100644 --- a/src/AspellChecker.cpp +++ b/src/AspellChecker.cpp @@ -19,6 +19,7 @@ #include "support/lassert.h" #include "support/debug.h" +#include "support/lstrings.h" #include "support/docstring_list.h" #include "support/filetools.h" @@ -311,17 +312,36 @@ AspellSpeller * AspellChecker::Private::speller(Language const * lang) return addSpeller(lang); } - + string AspellChecker::Private::toAspellWord(docstring const & word) const { - return to_utf8(word); + size_t mpos; + string word_str = to_utf8(word); + while ((mpos = word_str.find('-')) != word_str.npos) { + word_str.erase(mpos, 1); + } + return word_str; } - + SpellChecker::Result AspellChecker::Private::check( AspellSpeller * m, WordLangTuple const & word) const { + SpellChecker::Result result = WORD_OK; + docstring w1; + docstring rest = split(word.word(), w1, '-'); + for (; result == WORD_OK;) { + string const word_str = toAspellWord(w1); + int const word_ok = aspell_speller_check(m, word_str.c_str(), -1); + LASSERT(word_ok != -1, /**/); + result = (word_ok) ? WORD_OK : UNKNOWN_WORD; + if (rest.empty()) + break; + rest = split(rest,w1,'-'); + } + if (result == WORD_OK) + return result; string const word_str = toAspellWord(word.word()); int const word_ok = aspell_speller_check(m, word_str.c_str(), -1); LASSERT(word_ok != -1, /**/);