non-system languages from cocoAspell are enumerated with long names - therefore a mapping from lang code to name is needed

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@36970 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Stephan Witt 2010-12-20 20:40:32 +00:00
parent 8adcffff0c
commit c95d441818

View File

@ -34,6 +34,10 @@ struct AppleSpellChecker::Private
/// the speller
AppleSpeller speller;
/// language map
map<string, string> languageMap;
};
@ -77,13 +81,17 @@ 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()->code()];
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);
}
@ -140,7 +148,21 @@ 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->code()];
bool result = !langmap.empty();
if (result)
return result;
result = AppleSpeller_hasLanguage(d->speller,lang->code().c_str());
if (result) {
d->languageMap[lang->code()] = lang->code();
} else {
result = AppleSpeller_hasLanguage(d->speller,lang->lang().c_str());
if (result)
d->languageMap[lang->code()] = lang->lang();
}
return result;
}