blob: 4260f2a897cf4040c94ed82a899459a47ed1f3f6 [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.
// Keymap utils of Mozc interface.
#ifndef MOZC_SESSION_INTERNAL_KEYMAP_INTERFACE_H_
#define MOZC_SESSION_INTERNAL_KEYMAP_INTERFACE_H_
#include "base/port.h"
namespace mozc {
namespace commands {
class KeyEvent;
} // namespace commands
namespace keymap {
struct DirectInputState {
enum Commands {
NONE = 0,
IME_ON,
// Switch input mode.
INPUT_MODE_HIRAGANA,
INPUT_MODE_FULL_KATAKANA,
INPUT_MODE_HALF_KATAKANA,
INPUT_MODE_FULL_ALPHANUMERIC,
INPUT_MODE_HALF_ALPHANUMERIC,
RECONVERT,
};
};
struct PrecompositionState {
enum Commands {
NONE = 0,
IME_OFF,
IME_ON,
INSERT_CHARACTER, // Move to Composition status.
INSERT_SPACE, // To handle spaces.
// to handle shift+spaces (useally toggle half/full with)
INSERT_ALTERNATE_SPACE,
INSERT_HALF_SPACE, // Input half-width space
INSERT_FULL_SPACE, // Input full-width space
TOGGLE_ALPHANUMERIC_MODE, // toggle AlphaNumeric and Hiragana mode.
// Switch input mode.
INPUT_MODE_HIRAGANA,
INPUT_MODE_FULL_KATAKANA,
INPUT_MODE_HALF_KATAKANA,
INPUT_MODE_FULL_ALPHANUMERIC,
INPUT_MODE_HALF_ALPHANUMERIC,
INPUT_MODE_SWITCH_KANA_TYPE, // rotate input mode
LAUNCH_CONFIG_DIALOG,
LAUNCH_DICTIONARY_TOOL,
LAUNCH_WORD_REGISTER_DIALOG,
REVERT, // revert last operation (preedit still remains)
UNDO, // undo last operation (preedit is restored)
RECONVERT,
// For ZeroQuerySuggestion
CANCEL, // Back to Composition status.
CANCEL_AND_IME_OFF, // Cancel composition and turn off IME
COMMIT_FIRST_SUGGESTION, // ATOK's Shift-Enter style
PREDICT_AND_CONVERT,
};
};
struct CompositionState {
enum Commands {
NONE = 0,
IME_OFF,
IME_ON,
INSERT_CHARACTER,
DEL, // DELETE cannot be used on Windows. It is defined as a macro.
BACKSPACE,
INSERT_SPACE, // To handle spaces.
// to handle shift+spaces (useally toggle half/full with)
INSERT_ALTERNATE_SPACE,
INSERT_HALF_SPACE, // Input half-width space
INSERT_FULL_SPACE, // Input full-width space
CANCEL, // Move to Precomposition stauts.
CANCEL_AND_IME_OFF, // Cancel composition and turn off IME
UNDO,
MOVE_CURSOR_LEFT,
MOVE_CURSOR_RIGHT,
MOVE_CURSOR_TO_BEGINNING,
MOVE_MOVE_CURSOR_TO_END,
COMMIT, // Move to Precomposition status.
COMMIT_FIRST_SUGGESTION, // ATOK's Shift-Enter style
CONVERT, // Move to Conversion status.
CONVERT_WITHOUT_HISTORY, // Move to Conversion status.
PREDICT_AND_CONVERT,
// Switching to ConversionState
CONVERT_TO_HIRAGANA, // F6
CONVERT_TO_FULL_KATAKANA, // F7
CONVERT_TO_HALF_KATAKANA,
CONVERT_TO_HALF_WIDTH, // F8
CONVERT_TO_FULL_ALPHANUMERIC, // F9
CONVERT_TO_HALF_ALPHANUMERIC, // F10
SWITCH_KANA_TYPE, // Muhenkan
// Rmaining CompositionState
DISPLAY_AS_HIRAGANA, // F6
DISPLAY_AS_FULL_KATAKANA, // F7
DISPLAY_AS_HALF_KATAKANA,
TRANSLATE_HALF_WIDTH, // F8
TRANSLATE_FULL_ASCII, // F9
TRANSLATE_HALF_ASCII, // F10
TOGGLE_ALPHANUMERIC_MODE, // toggle AlphaNumeric and Hiragana mode.
// Switch input mode.
INPUT_MODE_HIRAGANA,
INPUT_MODE_FULL_KATAKANA,
INPUT_MODE_HALF_KATAKANA,
INPUT_MODE_FULL_ALPHANUMERIC,
INPUT_MODE_HALF_ALPHANUMERIC,
};
};
struct ConversionState {
enum Commands {
NONE = 0,
IME_OFF,
IME_ON,
INSERT_CHARACTER, // Submit and Move to Composition status.
INSERT_SPACE, // To handle spaces.
// to handle shift+spaces (useally toggle half/full with)
INSERT_ALTERNATE_SPACE,
INSERT_HALF_SPACE, // Input half-width space
INSERT_FULL_SPACE, // Input full-width space
CANCEL, // Back to Composition status.
CANCEL_AND_IME_OFF, // Cancel composition and turn off IME
UNDO,
SEGMENT_FOCUS_LEFT,
SEGMENT_FOCUS_RIGHT,
SEGMENT_FOCUS_FIRST,
SEGMENT_FOCUS_LAST,
SEGMENT_WIDTH_EXPAND,
SEGMENT_WIDTH_SHRINK,
CONVERT_NEXT,
CONVERT_PREV,
CONVERT_NEXT_PAGE,
CONVERT_PREV_PAGE,
PREDICT_AND_CONVERT,
COMMIT, // Move to Precomposition status.
COMMIT_SEGMENT, // Down on the ATOK style.
// CONVERT_TO and TRANSLATE are same behavior on ConversionState.
CONVERT_TO_HIRAGANA, // F6
CONVERT_TO_FULL_KATAKANA, // F7
CONVERT_TO_HALF_KATAKANA,
CONVERT_TO_HALF_WIDTH, // F8
CONVERT_TO_FULL_ALPHANUMERIC, // F9
CONVERT_TO_HALF_ALPHANUMERIC, // F10
SWITCH_KANA_TYPE, // Muhenkan
DISPLAY_AS_HIRAGANA, // F6
DISPLAY_AS_FULL_KATAKANA, // F7
DISPLAY_AS_HALF_KATAKANA,
TRANSLATE_HALF_WIDTH, // F8
TRANSLATE_FULL_ASCII, // F9
TRANSLATE_HALF_ASCII, // F10
TOGGLE_ALPHANUMERIC_MODE, // toggle AlphaNumeric and Hiragana mode.
// Switch input mode.
INPUT_MODE_HIRAGANA,
INPUT_MODE_FULL_KATAKANA,
INPUT_MODE_HALF_KATAKANA,
INPUT_MODE_FULL_ALPHANUMERIC,
INPUT_MODE_HALF_ALPHANUMERIC,
DELETE_SELECTED_CANDIDATE,
REPORT_BUG,
};
};
template<typename T>
class KeyMapInterface {
public:
virtual ~KeyMapInterface<T>() {}
virtual bool GetCommand(const commands::KeyEvent &key_event,
T *command) const = 0;
virtual bool AddRule(const commands::KeyEvent &key_event, T command) = 0;
};
} // namespace keymap
} // namespace mozc
#endif // MOZC_SESSION_INTERNAL_KEYMAP_INTERFACE_H_