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_HUNSPELL_ENGINE_H_ 6 #define CHROME_RENDERER_SPELLCHECKER_HUNSPELL_ENGINE_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/memory/scoped_ptr.h" 12 #include "base/strings/string16.h" 13 #include "base/strings/utf_string_conversions.h" 14 #include "chrome/common/spellcheck_common.h" 15 #include "chrome/renderer/spellchecker/spelling_engine.h" 16 17 class Hunspell; 18 19 namespace base { 20 class MemoryMappedFile; 21 } 22 23 class HunspellEngine : public SpellingEngine { 24 public: 25 HunspellEngine(); 26 virtual ~HunspellEngine(); 27 28 virtual void Init(base::File file) OVERRIDE; 29 30 virtual bool InitializeIfNeeded() OVERRIDE; 31 virtual bool IsEnabled() OVERRIDE; 32 virtual bool CheckSpelling(const base::string16& word_to_check, 33 int tag) OVERRIDE; 34 virtual void FillSuggestionList( 35 const base::string16& wrong_word, 36 std::vector<base::string16>* optional_suggestions) OVERRIDE; 37 38 private: 39 // Initializes the Hunspell dictionary, or does nothing if |hunspell_| is 40 // non-null. This blocks. 41 void InitializeHunspell(); 42 43 // We memory-map the BDict file. 44 scoped_ptr<base::MemoryMappedFile> bdict_file_; 45 46 // The hunspell dictionary in use. 47 scoped_ptr<Hunspell> hunspell_; 48 49 base::File file_; 50 51 // This flag is true if hunspell is enabled. 52 bool hunspell_enabled_; 53 54 // This flag is true if we have been initialized. 55 // The value indicates whether we should request a 56 // dictionary from the browser when the render view asks us to check the 57 // spelling of a word. 58 bool initialized_; 59 60 // This flag is true if we have requested dictionary. 61 bool dictionary_requested_; 62 }; 63 64 #endif // CHROME_RENDERER_SPELLCHECKER_HUNSPELL_ENGINE_H_ 65