~Private();
+ bool haveDictionary(string const & lang, string & hpath);
Hunspell * addSpeller(string const & lang);
Hunspell * speller(string const & lang);
/// ignored words
}
-Hunspell * HunspellChecker::Private::addSpeller(string const & lang)
+bool HunspellChecker::Private::haveDictionary(string const & lang, string & hunspell_path)
{
- string hunspell_path = lyxrc.hunspelldir_path;
LYXERR(Debug::FILES, "hunspell path: " << external_path(hunspell_path));
if (hunspell_path.empty()) {
// FIXME We'd like to issue a better error message here, but there seems
//frontend::Alert::error(_("Hunspell Path Not Found"),
// _("You must set the Hunspell dictionary path in Tools>Preferences>Paths."));
}
- return 0;
+ return false;
}
hunspell_path = external_path(addName(hunspell_path, lang));
// FIXME: We should indicate somehow that this language is not
// supported, probably by popping a warning. But we'll need to
// remember which warnings we've issued.
- return 0;
+ return false;
}
}
+ return true;
+}
+
+
+Hunspell * HunspellChecker::Private::addSpeller(string const & lang)
+{
+ string hunspell_path = lyxrc.hunspelldir_path;
+
+ if (!haveDictionary(lang, hunspell_path))
+ return 0;
+
FileName const affix(hunspell_path + ".aff");
FileName const dict(hunspell_path + ".dic");
Hunspell * h = new Hunspell(affix.absFilename().c_str(), dict.absFilename().c_str());
if (d->isIgnored(wl))
return OK;
- string const word_to_check = to_utf8(wl.word());
Hunspell * h = d->speller(wl.lang()->code());
if (!h)
return OK;
int info;
+
+ string const encoding = h->get_dic_encoding();
+ string const word_to_check = to_iconv_encoding(wl.word(), encoding);
+
if (h->spell(word_to_check.c_str(), &info))
return OK;
docstring_list & suggestions)
{
suggestions.clear();
- string const word_to_check = to_utf8(wl.word());
Hunspell * h = d->speller(wl.lang()->code());
if (!h)
return;
+ string const encoding = h->get_dic_encoding();
+ string const word_to_check = to_iconv_encoding(wl.word(), encoding);
char ** suggestion_list;
int const suggestion_number = h->suggest(&suggestion_list, word_to_check.c_str());
if (suggestion_number <= 0)
return;
for (int i = 0; i != suggestion_number; ++i)
- suggestions.push_back(from_utf8(suggestion_list[i]));
+ suggestions.push_back(from_iconv_encoding(suggestion_list[i], encoding));
h->free_list(&suggestion_list, suggestion_number);
}
+bool HunspellChecker::hasDictionary(Language const * lang) const
+{
+ if (!lang)
+ return false;
+ string hunspell_path = lyxrc.hunspelldir_path;
+ return (d->haveDictionary(lang->code(), hunspell_path));
+}
+
+
docstring const HunspellChecker::error()
{
return docstring();