]> git.lyx.org Git - lyx.git/blobdiff - src/HunspellChecker.cpp
* src/LaTeXFeatures.cpp: simplify greektext definition. Patch by G. Milde (bug #6458)
[lyx.git] / src / HunspellChecker.cpp
index 5d42421c2c6dc8bbb8c032195e3a6e38919fd70c..e85338ddd4a169d1afbd4172d977d04baded6a31 100644 (file)
@@ -51,7 +51,7 @@ struct HunspellChecker::Private
 
        ~Private();
 
-       bool haveDictionary(string const & lang) const;
+       bool haveDictionary(string const & lang, string & hpath);
        Hunspell * addSpeller(string const & lang);
        Hunspell * speller(string const & lang);
        /// ignored words
@@ -95,9 +95,8 @@ bool haveLanguageFiles(string const & hpath)
 }
 
 
-bool HunspellChecker::Private::haveDictionary(string const & lang) const
+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
@@ -134,7 +133,7 @@ Hunspell * HunspellChecker::Private::addSpeller(string const & lang)
 {
        string hunspell_path = lyxrc.hunspelldir_path;
 
-       if (!haveDictionary(lang))
+       if (!haveDictionary(lang, hunspell_path))
                return 0;
 
        FileName const affix(hunspell_path + ".aff");
@@ -184,11 +183,14 @@ SpellChecker::Result HunspellChecker::check(WordLangTuple const & wl)
        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;
 
@@ -225,16 +227,17 @@ void HunspellChecker::suggest(WordLangTuple const & wl,
        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);
 }
 
@@ -243,7 +246,8 @@ bool HunspellChecker::hasDictionary(Language const * lang) const
 {
        if (!lang)
                return false;
-       return (d->haveDictionary(lang->code()));
+       string hunspell_path = lyxrc.hunspelldir_path;
+       return (d->haveDictionary(lang->code(), hunspell_path));
 }