X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FAspellChecker.cpp;h=ad4ca976e89311f636dff4eb754afee0af40571c;hb=889182eb1a19da1cb4d5b5efeea434a5e6592ef0;hp=c549980e0378b42a3b33ad65a260eb793a0d5440;hpb=e309590df8fde56c6696fa14dc09dfb9b59cdac7;p=lyx.git diff --git a/src/AspellChecker.cpp b/src/AspellChecker.cpp index c549980e03..ad4ca976e8 100644 --- a/src/AspellChecker.cpp +++ b/src/AspellChecker.cpp @@ -25,7 +25,7 @@ #include "support/filetools.h" #include "support/Package.h" #include "support/FileName.h" -#include "support/Path.h" +#include "support/PathChanger.h" #include @@ -53,7 +53,8 @@ typedef map LangPersonalWordList; struct AspellChecker::Private { - Private() {} + Private() + {} ~Private(); @@ -65,6 +66,7 @@ struct AspellChecker::Private bool isValidDictionary(AspellConfig * config, string const & lang, string const & variety); + int numDictionaries() const; bool checkAspellData(AspellConfig * config, string const & basepath, string const & datapath, string const & dictpath, string const & lang, string const & variety); @@ -90,27 +92,38 @@ struct AspellChecker::Private /// the location below system/user directory /// there the rws files lookup will happen - const string dictDirectory(void) { return "dicts"; } + const string dictDirectory(void) + { + return "dicts"; + } /// there the dat+cmap files lookup will happen - const string dataDirectory(void) { return "data"; } + const string dataDirectory(void) + { + return "data"; + } /// os package directory constants /// macports on Mac OS X or /// aspell rpms on Linux - const string osPackageBase(void) { + const string osPackageBase(void) + { #ifdef USE_MACOSX_PACKAGING return "/opt/local"; #else return "/usr"; #endif } - const string osPackageDictDirectory(void) { + const string osPackageDictDirectory(void) + { #ifdef USE_MACOSX_PACKAGING return "/share/aspell"; #else return "/lib/aspell-0.60"; #endif } - const string osPackageDataDirectory(void) { return "/lib/aspell-0.60"; } + const string osPackageDataDirectory(void) + { + return "/lib/aspell-0.60"; + } }; @@ -313,6 +326,20 @@ AspellSpeller * AspellChecker::Private::speller(Language const * lang) } +int AspellChecker::Private::numDictionaries() const +{ + int result = 0; + Spellers::const_iterator it = spellers_.begin(); + Spellers::const_iterator et = spellers_.end(); + + for (; it != et; ++it) { + Speller aspell = it->second; + result += aspell.e_speller != 0; + } + return result; +} + + string AspellChecker::Private::toAspellWord(docstring const & word) const { size_t mpos; @@ -334,7 +361,7 @@ SpellChecker::Result AspellChecker::Private::check( for (; result == WORD_OK;) { string const word_str = toAspellWord(w1); int const word_ok = aspell_speller_check(m, word_str.c_str(), -1); - LASSERT(word_ok != -1, /**/); + LASSERT(word_ok != -1, return UNKNOWN_WORD); result = (word_ok) ? WORD_OK : UNKNOWN_WORD; if (rest.empty()) break; @@ -344,7 +371,7 @@ SpellChecker::Result AspellChecker::Private::check( return result; string const word_str = toAspellWord(word.word()); int const word_ok = aspell_speller_check(m, word_str.c_str(), -1); - LASSERT(word_ok != -1, /**/); + LASSERT(word_ok != -1, return UNKNOWN_WORD); return (word_ok) ? WORD_OK : UNKNOWN_WORD; } @@ -389,9 +416,9 @@ bool AspellChecker::Private::learned(WordLangTuple const & word) } -AspellChecker::AspellChecker(): d(new Private) -{ -} +AspellChecker::AspellChecker() + : d(new Private) +{} AspellChecker::~AspellChecker() @@ -406,7 +433,7 @@ SpellChecker::Result AspellChecker::check(WordLangTuple const & word) AspellSpeller * m = d->speller(word.lang()); if (!m) - return WORD_OK; + return NO_DICTIONARY; if (word.word().empty()) // MSVC compiled Aspell doesn't like it. @@ -453,7 +480,7 @@ void AspellChecker::suggest(WordLangTuple const & wl, string const word = d->toAspellWord(wl.word()); AspellWordList const * sugs = aspell_speller_suggest(m, word.c_str(), -1); - LASSERT(sugs != 0, /**/); + LASSERT(sugs != 0, return); AspellStringEnumeration * els = aspell_word_list_elements(sugs); if (!els || aspell_word_list_empty(sugs)) return; @@ -468,12 +495,14 @@ void AspellChecker::suggest(WordLangTuple const & wl, delete_aspell_string_enumeration(els); } + void AspellChecker::remove(WordLangTuple const & word) { d->remove(word); advanceChangeNumber(); } + bool AspellChecker::hasDictionary(Language const * lang) const { bool have = false; @@ -494,6 +523,12 @@ bool AspellChecker::hasDictionary(Language const * lang) const } +int AspellChecker::numDictionaries() const +{ + return d->numDictionaries(); +} + + docstring const AspellChecker::error() { Spellers::iterator it = d->spellers_.begin();