X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FAppleSpellChecker.cpp;h=5e6240125fb43b9357b5e9e7bd2ecebf675d9d0c;hb=b65d0c087bc8cc61ec898210852c7ea39ab64ee4;hp=71f7e1e25be3334d7c04322d6b849668d36bdb9c;hpb=4bde2bc7bc7f19ac3ff0e223a0e87ba842a62e10;p=lyx.git diff --git a/src/AppleSpellChecker.cpp b/src/AppleSpellChecker.cpp index 71f7e1e25b..5e6240125f 100644 --- a/src/AppleSpellChecker.cpp +++ b/src/AppleSpellChecker.cpp @@ -34,6 +34,10 @@ struct AppleSpellChecker::Private /// the speller AppleSpeller speller; + + /// language map + map languageMap; + }; @@ -77,23 +81,34 @@ string AppleSpellChecker::Private::toString(SpellCheckResult status) SpellChecker::Result AppleSpellChecker::check(WordLangTuple const & word) { + if (!hasDictionary(word.lang())) + return WORD_OK; + string const word_str = to_utf8(word.word()); + string const lang = d->languageMap[word.lang()->lang()]; SpellCheckResult result = AppleSpeller_check(d->speller, - word_str.c_str(), word.lang()->code().c_str()); + word_str.c_str(), lang.c_str()); LYXERR(Debug::GUI, "spellCheck: \"" << word.word() << "\" = " << d->toString(result) << - ", lang = " << word.lang()->code()) ; + ", lang = " << lang) ; return d->toResult(result); } +void AppleSpellChecker::advanceChangeNumber() +{ + nextChangeNumber(); +} + + // add to personal dictionary void AppleSpellChecker::insert(WordLangTuple const & word) { string const word_str = to_utf8(word.word()); AppleSpeller_learn(d->speller, word_str.c_str()); LYXERR(Debug::GUI, "learn word: \"" << word.word() << "\"") ; + advanceChangeNumber(); } @@ -103,6 +118,7 @@ void AppleSpellChecker::remove(WordLangTuple const & word) string const word_str = to_utf8(word.word()); AppleSpeller_unlearn(d->speller, word_str.c_str()); LYXERR(Debug::GUI, "unlearn word: \"" << word.word() << "\"") ; + advanceChangeNumber(); } @@ -111,6 +127,8 @@ void AppleSpellChecker::accept(WordLangTuple const & word) { string const word_str = to_utf8(word.word()); AppleSpeller_ignore(d->speller, word_str.c_str()); + LYXERR(Debug::GUI, "ignore word: \"" << word.word() << "\"") ; + advanceChangeNumber(); } @@ -119,7 +137,8 @@ void AppleSpellChecker::suggest(WordLangTuple const & wl, { suggestions.clear(); string const word_str = to_utf8(wl.word()); - size_t num = AppleSpeller_makeSuggestion(d->speller, word_str.c_str(), wl.lang()->code().c_str()); + size_t num = AppleSpeller_makeSuggestion(d->speller, + word_str.c_str(), wl.lang()->code().c_str()); for (size_t i = 0; i < num; i++) { char const * next = AppleSpeller_getSuggestion(d->speller, i); if (!next) break; @@ -130,7 +149,22 @@ void AppleSpellChecker::suggest(WordLangTuple const & wl, bool AppleSpellChecker::hasDictionary(Language const * lang) const { - return AppleSpeller_hasLanguage(d->speller,lang->code().c_str()); + string const langmap = d->languageMap[lang->lang()]; + bool result = !langmap.empty(); + + if (result) + return result; + + result = AppleSpeller_hasLanguage(d->speller,lang->code().c_str()); + if (result) { + d->languageMap[lang->lang()] = lang->code(); + } else { + result = AppleSpeller_hasLanguage(d->speller,lang->lang().c_str()); + if (result) + d->languageMap[lang->lang()] = lang->lang(); + } + LYXERR(Debug::GUI, "has dictionary: " << lang->lang() << " = " << result) ; + return result; }