blob: c26e4becc5a71cbe059f414c6731944f479760a6 [file] [log] [blame]
// Copyright 2010-2015, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef MOZC_COMPOSER_INTERNAL_TYPING_CORRECTOR_H_
#define MOZC_COMPOSER_INTERNAL_TYPING_CORRECTOR_H_
#include <string>
#include <utility>
#include <vector>
#include "base/port.h"
#include "base/protobuf/repeated_field.h"
#include "base/string_piece.h"
namespace mozc {
namespace commands {
class KeyEvent;
class KeyEvent_ProbableKeyEvent;
} // namespace commands
namespace composer {
class Table;
struct TypeCorrectedQuery;
typedef commands::KeyEvent_ProbableKeyEvent ProbableKeyEvent;
typedef mozc::protobuf::RepeatedPtrField<ProbableKeyEvent> ProbableKeyEvents;
class TypingCorrector {
public:
// Keeps up to |max_correction_query_candidates| corrections at each
// insertion.
// Returns up to |max_correction_query_results| results from
// GetQueriesForPrediction.
TypingCorrector(const Table *table,
size_t max_correction_query_candidates,
size_t max_correction_query_results);
~TypingCorrector();
// Sets a romaji table.
void SetTable(const Table *table);
// Resets this instance as a copy of |src|.
void CopyFrom(const TypingCorrector &src);
// Returns true if there is typing correction available.
bool IsAvailable() const;
// Invalidates the all corrections.
void Invalidate();
// Resets to the default state.
void Reset();
// Inserts a character, represented by a key or a ProbableKeyEvents,
// and performs online typing correction.
// If |probable_key_events| is non-empty, |key| is ignored.
// If |probable_key_events| is empty, |key| is used instead assuming that
// the probability is 1.0.
void InsertCharacter(const StringPiece key,
const ProbableKeyEvents &probable_key_events);
// Extracts type-corrected queries for prediction.
void GetQueriesForPrediction(vector<TypeCorrectedQuery> *queries) const;
private:
friend class TypingCorrectorTest;
// Represents one type-correction: key sequence and its penalty (cost).
typedef pair<string, int> KeyAndPenalty;
// Less-than comparator for KeyAndPenalty. Since this functor accesses
// KeyAndPenalty, we need to define it in private member.
struct KeyAndPenaltyLess;
bool available_;
const Table *table_;
size_t max_correction_query_candidates_;
size_t max_correction_query_results_;
string raw_key_;
vector<KeyAndPenalty> top_n_;
DISALLOW_COPY_AND_ASSIGN(TypingCorrector);
};
} // namespace composer
} // namespace mozc
#endif // MOZC_COMPOSER_INTERNAL_TYPING_CORRECTOR_H_