Home | History | Annotate | Download | only in spellchecker
      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