X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FASpell.cpp;h=b4a8bdb173f5536313c7f82332646a9846de0229;hb=4594b1425b484138fcae28996f460312d810b8d5;hp=cafa53b3d6a0ddb9521129173ae4c8402d9fbeff;hpb=f630be890494c849981e4fb52ea4740506e92bed;p=lyx.git diff --git a/src/ASpell.cpp b/src/ASpell.cpp index cafa53b3d6..b4a8bdb173 100644 --- a/src/ASpell.cpp +++ b/src/ASpell.cpp @@ -11,23 +11,22 @@ #include -#include "debug.h" +#include "support/debug.h" #include #include "ASpell_local.h" +#include "LyXRC.h" #include "WordLangTuple.h" -#include +#include "support/lassert.h" -using std::string; +using namespace std; namespace lyx { -ASpell::ASpell(BufferParams const &, string const & lang) - : els(0), spell_error_object(0) +ASpell::ASpell(): els(0), spell_error_object(0) { - addSpeller(lang); } @@ -65,6 +64,12 @@ void ASpell::addSpeller(string const & lang) // platforms (cygwin, OS X). Therefore we use utf-8, that does // always work. aspell_config_replace(config, "encoding", "utf-8"); + if (lyxrc.spellchecker_accept_compound) + // Consider run-together words as legal compounds + aspell_config_replace(config, "run-together", "true"); + else + // Report run-together words as errors + aspell_config_replace(config, "run-together", "false"); AspellCanHaveError * err = new_aspell_speller(config); if (spell_error_object) delete_aspell_can_have_error(spell_error_object); @@ -96,21 +101,25 @@ ASpell::Result ASpell::check(WordLangTuple const & word) AspellSpeller * m = it->second.speller; + if (word.word().empty()) + // MSVC compiled Aspell doesn't like it. + return OK; + int const word_ok = aspell_speller_check(m, to_utf8(word.word()).c_str(), -1); - BOOST_ASSERT(word_ok != -1); + LASSERT(word_ok != -1, /**/); + + if (word_ok) + return OK; + + AspellWordList const * sugs = + aspell_speller_suggest(m, to_utf8(word.word()).c_str(), -1); + LASSERT(sugs != 0, /**/); + els = aspell_word_list_elements(sugs); + if (aspell_word_list_empty(sugs)) + res = UNKNOWN_WORD; + else + res = SUGGESTED_WORDS; - if (word_ok) { - res = OK; - } else { - AspellWordList const * sugs = - aspell_speller_suggest(m, to_utf8(word.word()).c_str(), -1); - BOOST_ASSERT(sugs != 0); - els = aspell_word_list_elements(sugs); - if (aspell_word_list_empty(sugs)) - res = UNKNOWN_WORD; - else - res = SUGGESTED_WORDS; - } return res; } @@ -145,10 +154,9 @@ docstring const ASpell::nextMiss() docstring const ASpell::error() { char const * err = 0; - - if (spell_error_object && aspell_error_number(spell_error_object) != 0) { + + if (spell_error_object && aspell_error_number(spell_error_object) != 0) err = aspell_error_message(spell_error_object); - } // FIXME UNICODE: err is not in UTF8, but probably the locale encoding return (err ? from_utf8(err) : docstring());