1 // Copyright 2010-2018, Google Inc. 2 // All rights reserved. 3 // 4 // Redistribution and use in source and binary forms, with or without 5 // modification, are permitted provided that the following conditions are 6 // met: 7 // 8 // * Redistributions of source code must retain the above copyright 9 // notice, this list of conditions and the following disclaimer. 10 // * Redistributions in binary form must reproduce the above 11 // copyright notice, this list of conditions and the following disclaimer 12 // in the documentation and/or other materials provided with the 13 // distribution. 14 // * Neither the name of Google Inc. nor the names of its 15 // contributors may be used to endorse or promote products derived from 16 // this software without specific prior written permission. 17 // 18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 30 // Keymap utils of Mozc interface. 31 32 #ifndef MOZC_SESSION_INTERNAL_KEYMAP_INTERFACE_H_ 33 #define MOZC_SESSION_INTERNAL_KEYMAP_INTERFACE_H_ 34 35 #include "base/port.h" 36 37 namespace mozc { 38 namespace commands { 39 class KeyEvent; 40 } // namespace commands 41 42 namespace keymap { 43 44 struct DirectInputState { 45 enum Commands { 46 NONE = 0, 47 IME_ON, 48 // Switch input mode. 49 INPUT_MODE_HIRAGANA, 50 INPUT_MODE_FULL_KATAKANA, 51 INPUT_MODE_HALF_KATAKANA, 52 INPUT_MODE_FULL_ALPHANUMERIC, 53 INPUT_MODE_HALF_ALPHANUMERIC, 54 RECONVERT, 55 }; 56 }; 57 58 struct PrecompositionState { 59 enum Commands { 60 NONE = 0, 61 IME_OFF, 62 IME_ON, 63 INSERT_CHARACTER, // Move to Composition status. 64 INSERT_SPACE, // To handle spaces. 65 // to handle shift+spaces (useally toggle half/full with) 66 INSERT_ALTERNATE_SPACE, 67 INSERT_HALF_SPACE, // Input half-width space 68 INSERT_FULL_SPACE, // Input full-width space 69 TOGGLE_ALPHANUMERIC_MODE, // toggle AlphaNumeric and Hiragana mode. 70 // Switch input mode. 71 INPUT_MODE_HIRAGANA, 72 INPUT_MODE_FULL_KATAKANA, 73 INPUT_MODE_HALF_KATAKANA, 74 INPUT_MODE_FULL_ALPHANUMERIC, 75 INPUT_MODE_HALF_ALPHANUMERIC, 76 INPUT_MODE_SWITCH_KANA_TYPE, // rotate input mode 77 LAUNCH_CONFIG_DIALOG, 78 LAUNCH_DICTIONARY_TOOL, 79 LAUNCH_WORD_REGISTER_DIALOG, 80 REVERT, // revert last operation (preedit still remains) 81 UNDO, // undo last operation (preedit is restored) 82 RECONVERT, 83 84 // For ZeroQuerySuggestion 85 CANCEL, // Back to Composition status. 86 CANCEL_AND_IME_OFF, // Cancel composition and turn off IME 87 COMMIT_FIRST_SUGGESTION, // ATOK's Shift-Enter style 88 PREDICT_AND_CONVERT, 89 }; 90 }; 91 92 struct CompositionState { 93 enum Commands { 94 NONE = 0, 95 IME_OFF, 96 IME_ON, 97 INSERT_CHARACTER, 98 DEL, // DELETE cannot be used on Windows. It is defined as a macro. 99 BACKSPACE, 100 INSERT_SPACE, // To handle spaces. 101 // to handle shift+spaces (useally toggle half/full with) 102 INSERT_ALTERNATE_SPACE, 103 INSERT_HALF_SPACE, // Input half-width space 104 INSERT_FULL_SPACE, // Input full-width space 105 CANCEL, // Move to Precomposition stauts. 106 CANCEL_AND_IME_OFF, // Cancel composition and turn off IME 107 UNDO, 108 MOVE_CURSOR_LEFT, 109 MOVE_CURSOR_RIGHT, 110 MOVE_CURSOR_TO_BEGINNING, 111 MOVE_MOVE_CURSOR_TO_END, 112 COMMIT, // Move to Precomposition status. 113 COMMIT_FIRST_SUGGESTION, // ATOK's Shift-Enter style 114 CONVERT, // Move to Conversion status. 115 CONVERT_WITHOUT_HISTORY, // Move to Conversion status. 116 PREDICT_AND_CONVERT, 117 // Switching to ConversionState 118 CONVERT_TO_HIRAGANA, // F6 119 CONVERT_TO_FULL_KATAKANA, // F7 120 CONVERT_TO_HALF_KATAKANA, 121 CONVERT_TO_HALF_WIDTH, // F8 122 CONVERT_TO_FULL_ALPHANUMERIC, // F9 123 CONVERT_TO_HALF_ALPHANUMERIC, // F10 124 SWITCH_KANA_TYPE, // Muhenkan 125 // Rmaining CompositionState 126 DISPLAY_AS_HIRAGANA, // F6 127 DISPLAY_AS_FULL_KATAKANA, // F7 128 DISPLAY_AS_HALF_KATAKANA, 129 TRANSLATE_HALF_WIDTH, // F8 130 TRANSLATE_FULL_ASCII, // F9 131 TRANSLATE_HALF_ASCII, // F10 132 TOGGLE_ALPHANUMERIC_MODE, // toggle AlphaNumeric and Hiragana mode. 133 // Switch input mode. 134 INPUT_MODE_HIRAGANA, 135 INPUT_MODE_FULL_KATAKANA, 136 INPUT_MODE_HALF_KATAKANA, 137 INPUT_MODE_FULL_ALPHANUMERIC, 138 INPUT_MODE_HALF_ALPHANUMERIC, 139 }; 140 }; 141 142 struct ConversionState { 143 enum Commands { 144 NONE = 0, 145 IME_OFF, 146 IME_ON, 147 INSERT_CHARACTER, // Submit and Move to Composition status. 148 INSERT_SPACE, // To handle spaces. 149 // to handle shift+spaces (useally toggle half/full with) 150 INSERT_ALTERNATE_SPACE, 151 INSERT_HALF_SPACE, // Input half-width space 152 INSERT_FULL_SPACE, // Input full-width space 153 CANCEL, // Back to Composition status. 154 CANCEL_AND_IME_OFF, // Cancel composition and turn off IME 155 UNDO, 156 SEGMENT_FOCUS_LEFT, 157 SEGMENT_FOCUS_RIGHT, 158 SEGMENT_FOCUS_FIRST, 159 SEGMENT_FOCUS_LAST, 160 SEGMENT_WIDTH_EXPAND, 161 SEGMENT_WIDTH_SHRINK, 162 CONVERT_NEXT, 163 CONVERT_PREV, 164 CONVERT_NEXT_PAGE, 165 CONVERT_PREV_PAGE, 166 PREDICT_AND_CONVERT, 167 COMMIT, // Move to Precomposition status. 168 COMMIT_SEGMENT, // Down on the ATOK style. 169 // CONVERT_TO and TRANSLATE are same behavior on ConversionState. 170 CONVERT_TO_HIRAGANA, // F6 171 CONVERT_TO_FULL_KATAKANA, // F7 172 CONVERT_TO_HALF_KATAKANA, 173 CONVERT_TO_HALF_WIDTH, // F8 174 CONVERT_TO_FULL_ALPHANUMERIC, // F9 175 CONVERT_TO_HALF_ALPHANUMERIC, // F10 176 SWITCH_KANA_TYPE, // Muhenkan 177 DISPLAY_AS_HIRAGANA, // F6 178 DISPLAY_AS_FULL_KATAKANA, // F7 179 DISPLAY_AS_HALF_KATAKANA, 180 TRANSLATE_HALF_WIDTH, // F8 181 TRANSLATE_FULL_ASCII, // F9 182 TRANSLATE_HALF_ASCII, // F10 183 TOGGLE_ALPHANUMERIC_MODE, // toggle AlphaNumeric and Hiragana mode. 184 // Switch input mode. 185 INPUT_MODE_HIRAGANA, 186 INPUT_MODE_FULL_KATAKANA, 187 INPUT_MODE_HALF_KATAKANA, 188 INPUT_MODE_FULL_ALPHANUMERIC, 189 INPUT_MODE_HALF_ALPHANUMERIC, 190 DELETE_SELECTED_CANDIDATE, 191 REPORT_BUG, 192 }; 193 }; 194 195 196 template<typename T> 197 class KeyMapInterface { 198 public: 199 virtual ~KeyMapInterface<T>() {} 200 virtual bool GetCommand(const commands::KeyEvent &key_event, 201 T *command) const = 0; 202 203 virtual bool AddRule(const commands::KeyEvent &key_event, T command) = 0; 204 }; 205 206 } // namespace keymap 207 } // namespace mozc 208 209 #endif // MOZC_SESSION_INTERNAL_KEYMAP_INTERFACE_H_ 210