1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_RENDERER_SPELLCHECKER_SPELLCHECK_LANGUAGE_H_ 6 #define CHROME_RENDERER_SPELLCHECKER_SPELLCHECK_LANGUAGE_H_ 7 8 #include <queue> 9 #include <string> 10 #include <vector> 11 12 #include "base/files/file.h" 13 #include "base/memory/scoped_ptr.h" 14 #include "base/strings/string16.h" 15 #include "chrome/renderer/spellchecker/spellcheck_worditerator.h" 16 17 class SpellingEngine; 18 19 class SpellcheckLanguage { 20 public: 21 SpellcheckLanguage(); 22 ~SpellcheckLanguage(); 23 24 void Init(base::File file, const std::string& language); 25 26 // SpellCheck a word. 27 // Returns true if spelled correctly, false otherwise. 28 // If the spellchecker failed to initialize, always returns true. 29 // TODO(groby): This is not true in the multilingual case any more! 30 // The |tag| parameter should either be a unique identifier for the document 31 // that the word came from (if the current platform requires it), or 0. 32 // In addition, finds the suggested words for a given word 33 // and puts them into |*optional_suggestions|. 34 // If the word is spelled correctly, the vector is empty. 35 // If optional_suggestions is NULL, suggested words will not be looked up. 36 // Note that doing suggest lookups can be slow. 37 bool SpellCheckWord(const base::char16* in_word, 38 int in_word_len, 39 int tag, 40 int* misspelling_start, 41 int* misspelling_len, 42 std::vector<base::string16>* optional_suggestions); 43 44 // Initialize |spellcheck_| if that hasn't happened yet. 45 bool InitializeIfNeeded(); 46 47 // Return true if the underlying spellcheck engine is enabled. 48 bool IsEnabled(); 49 50 private: 51 friend class SpellCheckTest; 52 53 // Returns whether or not the given word is a contraction of valid words 54 // (e.g. "word:word"). 55 bool IsValidContraction(const base::string16& word, int tag); 56 57 // Represents character attributes used for filtering out characters which 58 // are not supported by this SpellCheck object. 59 SpellcheckCharAttribute character_attributes_; 60 61 // Represents word iterators used in this spellchecker. The |text_iterator_| 62 // splits text provided by WebKit into words, contractions, or concatenated 63 // words. The |contraction_iterator_| splits a concatenated word extracted by 64 // |text_iterator_| into word components so we can treat a concatenated word 65 // consisting only of correct words as a correct word. 66 SpellcheckWordIterator text_iterator_; 67 SpellcheckWordIterator contraction_iterator_; 68 69 // Pointer to a platform-specific spelling engine, if it is in use. This 70 // should only be set if hunspell is not used. (I.e. on OSX, for now) 71 scoped_ptr<SpellingEngine> platform_spelling_engine_; 72 73 DISALLOW_COPY_AND_ASSIGN(SpellcheckLanguage); 74 }; 75 76 #endif // CHROME_RENDERER_SPELLCHECKER_SPELLCHECK_LANGUAGE_H_ 77