#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
This commit is contained in:
Stephan Witt 2011-07-31 13:27:39 +00:00
parent 6cb62d3704
commit e309590df8

View File

@ -19,6 +19,7 @@
#include "support/lassert.h" #include "support/lassert.h"
#include "support/debug.h" #include "support/debug.h"
#include "support/lstrings.h"
#include "support/docstring_list.h" #include "support/docstring_list.h"
#include "support/filetools.h" #include "support/filetools.h"
@ -311,17 +312,36 @@ AspellSpeller * AspellChecker::Private::speller(Language const * lang)
return addSpeller(lang); return addSpeller(lang);
} }
string AspellChecker::Private::toAspellWord(docstring const & word) const 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( SpellChecker::Result AspellChecker::Private::check(
AspellSpeller * m, WordLangTuple const & word) AspellSpeller * m, WordLangTuple const & word)
const 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()); string const word_str = toAspellWord(word.word());
int const word_ok = aspell_speller_check(m, word_str.c_str(), -1); int const word_ok = aspell_speller_check(m, word_str.c_str(), -1);
LASSERT(word_ok != -1, /**/); LASSERT(word_ok != -1, /**/);