| OLD | NEW |
| 1 // Copyright 2014 The ChromeOS IME Authors. All Rights Reserved. | 1 // Copyright 2014 The ChromeOS IME Authors. All Rights Reserved. |
| 2 // limitations under the License. | 2 // limitations under the License. |
| 3 // See the License for the specific language governing permissions and | 3 // See the License for the specific language governing permissions and |
| 4 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 4 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 5 // distributed under the License is distributed on an "AS-IS" BASIS, | 5 // distributed under the License is distributed on an "AS-IS" BASIS, |
| 6 // Unless required by applicable law or agreed to in writing, software | 6 // Unless required by applicable law or agreed to in writing, software |
| 7 // | 7 // |
| 8 // http://www.apache.org/licenses/LICENSE-2.0 | 8 // http://www.apache.org/licenses/LICENSE-2.0 |
| 9 // | 9 // |
| 10 // You may obtain a copy of the License at | 10 // You may obtain a copy of the License at |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 '\u0327' : '\u00B8', | 45 '\u0327' : '\u00B8', |
| 46 '\u0328' : '\u02DB', | 46 '\u0328' : '\u02DB', |
| 47 '\u0345' : '\u037A', | 47 '\u0345' : '\u037A', |
| 48 '\u030F' : '\u030F\u0020', | 48 '\u030F' : '\u030F\u0020', |
| 49 '\u031B' : '\u031B\u0020', | 49 '\u031B' : '\u031B\u0020', |
| 50 '\u0323' : '\u0323\u0020' | 50 '\u0323' : '\u0323\u0020' |
| 51 }; | 51 }; |
| 52 | 52 |
| 53 | 53 |
| 54 /** | 54 /** |
| 55 * Special lower to upper case mapping. |
| 56 * |
| 57 * @private {!Object.<string, string>} |
| 58 */ |
| 59 util.CASE_LOWER_TO_UPPER_MAPPING_ = { |
| 60 '\u00b5': '\u00b5', |
| 61 // Korean characters. |
| 62 '\u3142': '\u3143', |
| 63 '\u3148': '\u3149', |
| 64 '\u3137': '\u3138', |
| 65 '\u3131': '\u3132', |
| 66 '\u3145': '\u3146', |
| 67 '\u1162': '\u1164', |
| 68 '\u1166': '\u1168' |
| 69 }; |
| 70 |
| 71 |
| 72 /** |
| 73 * Special upper to lower case mapping. |
| 74 * |
| 75 * @private {!Object.<string, string>} |
| 76 */ |
| 77 util.CASE_UPPER_TO_LOWER_MAPPING_ = { |
| 78 '\u0049': '\u0131' |
| 79 }; |
| 80 |
| 81 |
| 82 /** |
| 55 * The keysets using US keyboard layouts. | 83 * The keysets using US keyboard layouts. |
| 56 * | 84 * |
| 57 * @type {!Array.<string>} | 85 * @type {!Array.<string>} |
| 58 */ | 86 */ |
| 59 util.KEYSETS_USE_US = [ | 87 util.KEYSETS_USE_US = [ |
| 60 'array', | 88 'array', |
| 61 'cangjie', | 89 'cangjie', |
| 62 'dayi', | 90 'dayi', |
| 63 'jp_us', | 91 'jp_us', |
| 64 'pinyin-zh-CN', | 92 'pinyin-zh-CN', |
| 65 'pinyin-zh-TW', | 93 'pinyin-zh-TW', |
| 66 'quick', | 94 'quick', |
| 67 't13n', | 95 't13n', |
| 68 'wubi' | 96 'wubi', |
| 97 'zhuyin.us', |
| 98 'ko.set2.us', |
| 99 'ko.set390.us', |
| 100 'ko.set3final.us', |
| 101 'ko.set3sun.us', |
| 102 'ko.romaja.us', |
| 103 'ko.ahn.us', |
| 104 'ko.set2y.us', |
| 105 'ko.set3yet.us', |
| 106 'ko.set32.us' |
| 69 ]; | 107 ]; |
| 70 | 108 |
| 71 | 109 |
| 72 /** | 110 /** |
| 73 * The keysets that have en switcher key. | 111 * The keysets that have en switcher key. |
| 74 * | 112 * |
| 75 * @type {!Array.<string>} | 113 * @type {!Array.<string>} |
| 76 */ | 114 */ |
| 77 util.KEYSETS_HAVE_EN_SWTICHER = [ | 115 util.KEYSETS_HAVE_EN_SWTICHER = [ |
| 78 // When other keysets that use us add the enswitcher key, | 116 // When other keysets that use us add the enswitcher key, |
| 79 // should move them to this array. | 117 // should move them to this array. |
| 80 'array', | 118 'array', |
| 81 'cangjie', | 119 'cangjie', |
| 82 'dayi', | 120 'dayi', |
| 83 'pinyin-zh-CN', | 121 'pinyin-zh-CN', |
| 84 'pinyin-zh-TW', | 122 'pinyin-zh-TW', |
| 85 'quick', | 123 'quick', |
| 86 'wubi', | 124 'wubi', |
| 87 'zhuyin' | 125 'zhuyin', |
| 126 'zhuyin.us' |
| 88 ]; | 127 ]; |
| 89 | 128 |
| 90 | 129 |
| 130 /** |
| 131 * The keysets that can switch with US keyboard layouts. |
| 132 * |
| 133 * @type {!Array.<string>} |
| 134 */ |
| 135 util.KEYSETS_SWITCH_WITH_US = [ |
| 136 'zhuyin', |
| 137 'ko.set2', |
| 138 'ko.set390', |
| 139 'ko.set3final', |
| 140 'ko.set3sun', |
| 141 'ko.romaja', |
| 142 'ko.ahn', |
| 143 'ko.set2y', |
| 144 'ko.set3yet', |
| 145 'ko.set32' |
| 146 ]; |
| 147 |
| 148 |
| 91 /** | 149 /** |
| 92 * The keysets that have compact keyset. | 150 * The keysets that have compact keyset. |
| 93 * | 151 * |
| 94 * @type {!Array.<string>} | 152 * @type {!Array.<string>} |
| 95 */ | 153 */ |
| 96 util.KEYSETS_HAVE_COMPACT = [ | 154 util.KEYSETS_HAVE_COMPACT = [ |
| 97 'ca', | 155 'ca', |
| 98 'ca-eng', | 156 'ca-eng', |
| 99 'de', | 157 'de', |
| 100 'dk', | 158 'dk', |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 }; | 265 }; |
| 208 | 266 |
| 209 | 267 |
| 210 /** | 268 /** |
| 211 * To upper case. | 269 * To upper case. |
| 212 * | 270 * |
| 213 * @param {string} character The character. | 271 * @param {string} character The character. |
| 214 * @return {string} The uppercase of the character. | 272 * @return {string} The uppercase of the character. |
| 215 */ | 273 */ |
| 216 util.toUpper = function(character) { | 274 util.toUpper = function(character) { |
| 217 if (character == '\u00b5') { | 275 var upper = util.CASE_LOWER_TO_UPPER_MAPPING_[character]; |
| 218 return '\u00b5'; | 276 if (upper) { |
| 219 } else { | 277 return upper; |
| 220 return character.toUpperCase(); | |
| 221 } | 278 } |
| 279 return character.toUpperCase(); |
| 222 }; | 280 }; |
| 223 | 281 |
| 224 | 282 |
| 225 /** | 283 /** |
| 226 * To lower case. | 284 * To lower case. |
| 227 * | 285 * |
| 228 * @param {string} character The character. | 286 * @param {string} character The character. |
| 229 * @return {string} The lower case of the character. | 287 * @return {string} The lower case of the character. |
| 230 */ | 288 */ |
| 231 util.toLower = function(character) { | 289 util.toLower = function(character) { |
| 232 if (character == '\u0049') { | 290 var lower = util.CASE_UPPER_TO_LOWER_MAPPING_[character]; |
| 233 return '\u0131'; | 291 if (lower) { |
| 292 return lower; |
| 234 } | 293 } |
| 235 return character.toLowerCase(); | 294 return character.toLowerCase(); |
| 236 }; | 295 }; |
| 237 | 296 |
| 238 | 297 |
| 239 /** | 298 /** |
| 240 * Is this character trigger commit. | 299 * Is this character trigger commit. |
| 241 * | 300 * |
| 242 * @param {string} character The character. | 301 * @param {string} character The character. |
| 243 * @return {boolean} True to trigger commit. | 302 * @return {boolean} True to trigger commit. |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 320 /** | 379 /** |
| 321 * Returns the configuration file name from the keyboard code. | 380 * Returns the configuration file name from the keyboard code. |
| 322 * | 381 * |
| 323 * @param {string} keyboardCode The keyboard code. | 382 * @param {string} keyboardCode The keyboard code. |
| 324 * @return {string} The config file name which contains the keyset. | 383 * @return {string} The config file name which contains the keyset. |
| 325 */ | 384 */ |
| 326 util.getConfigName = function(keyboardCode) { | 385 util.getConfigName = function(keyboardCode) { |
| 327 // Strips out all the suffixes in the keyboard code. | 386 // Strips out all the suffixes in the keyboard code. |
| 328 return keyboardCode.replace(/\..*$/, ''); | 387 return keyboardCode.replace(/\..*$/, ''); |
| 329 }; | 388 }; |
| 330 | |
| 331 | |
| 332 /** | |
| 333 * Checks that the word is a valid delete from the old to new context. | |
| 334 * | |
| 335 * @param {string} oldContext The old context. | |
| 336 * @param {string} newContext The new context. | |
| 337 * @param {string} deletionCandidate A possible word deletion. | |
| 338 * | |
| 339 * @return {boolean} Whether the deletion was valid. | |
| 340 */ | |
| 341 util.isPossibleDelete = function( | |
| 342 oldContext, newContext, deletionCandidate) { | |
| 343 // Check that deletionCandidate exists in oldContext. We don't check if it's a | |
| 344 // tail since our heuristic may have trimmed whitespace. | |
| 345 var rootEnd = oldContext.lastIndexOf(deletionCandidate); | |
| 346 if (rootEnd != -1) { | |
| 347 // Check that remaining text in root persisted in newContext. | |
| 348 var root = oldContext.slice(0, rootEnd); | |
| 349 return root == newContext.slice(-rootEnd); | |
| 350 } | |
| 351 return false; | |
| 352 }; | |
| 353 | |
| 354 | |
| 355 /** | |
| 356 * Checks whether a letter deletion would cause the observed context transform. | |
| 357 * | |
| 358 * @param {string} oldContext The old context. | |
| 359 * @param {string} newContext The new context. | |
| 360 * | |
| 361 * @return {boolean} Whether the transform is valid. | |
| 362 */ | |
| 363 util.isLetterDelete = function(oldContext, newContext) { | |
| 364 if (oldContext == '') { | |
| 365 return false; | |
| 366 } | |
| 367 // Handle buffer overflow. | |
| 368 if (oldContext.length == newContext.length) { | |
| 369 return util.isLetterDelete(oldContext, newContext.slice(1)); | |
| 370 } | |
| 371 return oldContext.length == newContext.length + 1 && | |
| 372 oldContext.indexOf(newContext) == 0; | |
| 373 }; | |
| 374 | |
| 375 | |
| 376 /** | |
| 377 * Checks whether a letter restoration would cause the observed context | |
| 378 * transform. | |
| 379 * | |
| 380 * @param {string} oldContext The old context. | |
| 381 * @param {string} newContext The new context. | |
| 382 * | |
| 383 * @return {boolean} Whether the transform is valid. | |
| 384 */ | |
| 385 util.isLetterRestore = function(oldContext, newContext) { | |
| 386 return util.isLetterDelete(newContext, oldContext); | |
| 387 }; | |
| 388 | |
| 389 }); // goog.scope | 389 }); // goog.scope |
| OLD | NEW |