// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_RENDERER_SPELLCHECKER_SPELLCHECK_LANGUAGE_H_ #define CHROME_RENDERER_SPELLCHECKER_SPELLCHECK_LANGUAGE_H_ #include <queue> #include <string> #include <vector> #include "base/files/file.h" #include "base/memory/scoped_ptr.h" #include "base/strings/string16.h" #include "chrome/renderer/spellchecker/spellcheck_worditerator.h" class SpellingEngine; class SpellcheckLanguage { public: SpellcheckLanguage(); ~SpellcheckLanguage(); void Init(base::File file, const std::string& language); // SpellCheck a word. // Returns true if spelled correctly, false otherwise. // If the spellchecker failed to initialize, always returns true. // TODO(groby): This is not true in the multilingual case any more! // The |tag| parameter should either be a unique identifier for the document // that the word came from (if the current platform requires it), or 0. // In addition, finds the suggested words for a given word // and puts them into |*optional_suggestions|. // If the word is spelled correctly, the vector is empty. // If optional_suggestions is NULL, suggested words will not be looked up. // Note that doing suggest lookups can be slow. bool SpellCheckWord(const base::char16* in_word, int in_word_len, int tag, int* misspelling_start, int* misspelling_len, std::vector<base::string16>* optional_suggestions); // Initialize |spellcheck_| if that hasn't happened yet. bool InitializeIfNeeded(); // Return true if the underlying spellcheck engine is enabled. bool IsEnabled(); private: friend class SpellCheckTest; // Returns whether or not the given word is a contraction of valid words // (e.g. "word:word"). bool IsValidContraction(const base::string16& word, int tag); // Represents character attributes used for filtering out characters which // are not supported by this SpellCheck object. SpellcheckCharAttribute character_attributes_; // Represents word iterators used in this spellchecker. The |text_iterator_| // splits text provided by WebKit into words, contractions, or concatenated // words. The |contraction_iterator_| splits a concatenated word extracted by // |text_iterator_| into word components so we can treat a concatenated word // consisting only of correct words as a correct word. SpellcheckWordIterator text_iterator_; SpellcheckWordIterator contraction_iterator_; // Pointer to a platform-specific spelling engine, if it is in use. This // should only be set if hunspell is not used. (I.e. on OSX, for now) scoped_ptr<SpellingEngine> platform_spelling_engine_; DISALLOW_COPY_AND_ASSIGN(SpellcheckLanguage); }; #endif // CHROME_RENDERER_SPELLCHECKER_SPELLCHECK_LANGUAGE_H_