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 17class Hunspell; 18 19namespace base { 20class MemoryMappedFile; 21} 22 23class 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