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::PlatformFile file) OVERRIDE; 29 30 virtual bool InitializeIfNeeded() OVERRIDE; 31 virtual bool IsEnabled() OVERRIDE; 32 virtual bool CheckSpelling(const string16& word_to_check, int tag) OVERRIDE; 33 virtual void FillSuggestionList(const string16& wrong_word, 34 std::vector<string16>* optional_suggestions) OVERRIDE; 35 36 private: 37 // Initializes the Hunspell dictionary, or does nothing if |hunspell_| is 38 // non-null. This blocks. 39 void InitializeHunspell(); 40 41 // We memory-map the BDict file. 42 scoped_ptr<base::MemoryMappedFile> bdict_file_; 43 44 // The hunspell dictionary in use. 45 scoped_ptr<Hunspell> hunspell_; 46 47 base::PlatformFile file_; 48 49 // This flags is true if we have been initialized. 50 // The value indicates whether we should request a 51 // dictionary from the browser when the render view asks us to check the 52 // spelling of a word. 53 bool initialized_; 54 55 // This flags is true if we have requested dictionary. 56 bool dictionary_requested_; 57}; 58 59#endif // CHROME_RENDERER_SPELLCHECKER_HUNSPELL_ENGINE_H_ 60