X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FSpellChecker.h;h=f908ba2b471008e7f7f5b2d1f690dc5b4544f8e7;hb=28be7d552f62cc02fa86d7f79201d089bfb2d7b5;hp=c0a2433ff434baece951c8e288790a70e8ef142b;hpb=26bb1474f3eb60f0aeac14f0d83ad97e9ad52756;p=lyx.git diff --git a/src/SpellChecker.h b/src/SpellChecker.h index c0a2433ff4..f908ba2b47 100644 --- a/src/SpellChecker.h +++ b/src/SpellChecker.h @@ -19,11 +19,12 @@ namespace lyx { class BufferParams; +class Language; class WordLangTuple; +class docstring_list; /** - * Base class of all spellchecker implementations. - * The class can be instantiated but will have no functionality. + * Pure virtual base class of all spellchecker implementations. */ class SpellChecker { public: @@ -31,42 +32,94 @@ public: /// the result from checking a single word enum Result { /// word is correct - OK = 1, + WORD_OK = 1, /// root of given word was found - ROOT, + ROOT_FOUND, /// word found through compound formation COMPOUND_WORD, /// word not found UNKNOWN_WORD, - /// not found, with suggestions - SUGGESTED_WORDS, /// number of other ignored "word" - IGNORED_WORD + IGNORED_WORD, + /// number of personal dictionary "word" + LEARNED_WORD, + /// missing dictionary for language + NO_DICTIONARY }; + SpellChecker() : change_number_(0) {} + virtual ~SpellChecker() {} + /// does the spell check failed + static bool misspelled(Result res) { + return res != WORD_OK + && res != IGNORED_WORD + && res != NO_DICTIONARY + && res != LEARNED_WORD; } + /// check the given word of the given lang code and return the result virtual enum Result check(WordLangTuple const &) = 0; + /// Gives suggestions. + virtual void suggest(WordLangTuple const &, docstring_list & suggestions) = 0; + + /// Lemmatizing: return stem of word (used by Thesaurus). + virtual void stem(WordLangTuple const &, docstring_list & suggestions) = 0; /// insert the given word into the personal dictionary virtual void insert(WordLangTuple const &) = 0; + /// remove the given word from the personal dictionary + virtual void remove(WordLangTuple const &) = 0; + /// accept the given word temporarily virtual void accept(WordLangTuple const &) = 0; - /// return the next near miss after a SUGGESTED_WORDS result - virtual docstring const nextMiss() = 0; + /// check if dictionary exists + virtual bool hasDictionary(Language const *) const = 0; + + /// how many valid dictionaries were found + virtual int numDictionaries() const = 0; + + /// if speller can spell check whole paragraph return true + virtual bool canCheckParagraph() const { return false; } + + /// count of misspelled words + virtual int numMisspelledWords() const { return 0; } + + /// start position and length of misspelled word at index + virtual void misspelledWord( + int /* index */, + int & start, int & length) const + { + /// index is used here to make the compiler happy + start = 0; + length = 0; + } /// give an error message on messy exit virtual docstring const error() = 0; + + /// spell checker state versioning support + typedef unsigned long int ChangeNumber ; + ChangeNumber changeNumber() const { return change_number_; } + void changeNumber(ChangeNumber value) { change_number_ = value; } + void nextChangeNumber() { ++change_number_; } + virtual void advanceChangeNumber() = 0; + +private: + ChangeNumber change_number_; }; /// Access to the singleton SpellChecker. /// Implemented in LyX.cpp SpellChecker * theSpellChecker(); +/// Set the singleton SpellChecker engine. +/// Implemented in LyX.cpp +void setSpellChecker(); + } // namespace lyx #endif // SPELL_BASE_H