| Index: third_party/google_input_tools/src/chrome/os/inputview/inputtool.js
|
| diff --git a/third_party/google_input_tools/src/chrome/os/inputview/inputtool.js b/third_party/google_input_tools/src/chrome/os/inputview/inputtool.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1ab0845ef14df1028f440f3cd011e9025a240d01
|
| --- /dev/null
|
| +++ b/third_party/google_input_tools/src/chrome/os/inputview/inputtool.js
|
| @@ -0,0 +1,600 @@
|
| +// Copyright 2013 Google Inc. All Rights Reserved.
|
| +
|
| +/**
|
| + * @fileoverview This file defines the input tool, included IME and virtual
|
| + * keyboard.
|
| + *
|
| + * @author wuyingbing@google.com (Yingbing Wu)
|
| + */
|
| +
|
| +goog.provide('i18n.input.lang.InputTool');
|
| +
|
| +goog.require('goog.array');
|
| +goog.require('goog.object');
|
| +goog.require('goog.string');
|
| +goog.require('i18n.input.common.GlobalSettings');
|
| +goog.require('i18n.input.lang.InputToolCode');
|
| +goog.require('i18n.input.lang.InputToolType');
|
| +
|
| +goog.scope(function() {
|
| +var GlobalSettings = i18n.input.common.GlobalSettings;
|
| +var InputToolCode = i18n.input.lang.InputToolCode;
|
| +var InputToolType = i18n.input.lang.InputToolType;
|
| +
|
| +
|
| +
|
| +/**
|
| + * The input tool class is used to define Input Tool. Don't call the method
|
| + * directly, use InputTool.get instead.
|
| + *
|
| + * @param {!InputToolCode} inputToolCode The input tool code
|
| + * value.
|
| + * @constructor
|
| + */
|
| +i18n.input.lang.InputTool = function(inputToolCode) {
|
| + /**
|
| + * The unique code of input tools.
|
| + *
|
| + * @type {!InputToolCode}
|
| + */
|
| + this.code = inputToolCode;
|
| +
|
| + /**
|
| + * The input tools type value.
|
| + *
|
| + * @type {?InputToolType}
|
| + */
|
| + this.type = null;
|
| +
|
| + /**
|
| + * The target language code.
|
| + *
|
| + * @type {string}
|
| + */
|
| + this.languageCode = 'en';
|
| +
|
| + /**
|
| + * The source language code.
|
| + *
|
| + * @type {string}
|
| + */
|
| + this.sourceLanguageCode = 'en';
|
| +
|
| + /**
|
| + * Keyboard layout code. Only valid if type is KBD.
|
| + * @type {string}
|
| + */
|
| + this.layoutCode;
|
| +
|
| + // Parses input tool code.
|
| + this.parseInputToolCode_();
|
| +};
|
| +var InputTool = i18n.input.lang.InputTool;
|
| +
|
| +
|
| +/**
|
| + * The array of rtl keyboards' input tool codes.
|
| + *
|
| + * @type {!Array.<string>}
|
| + */
|
| +InputTool.RtlKeyboards = [
|
| + InputToolCode.KEYBOARD_ARABIC,
|
| + InputToolCode.KEYBOARD_DARI,
|
| + InputToolCode.KEYBOARD_HEBREW,
|
| + InputToolCode.KEYBOARD_PASHTO,
|
| + InputToolCode.KEYBOARD_PERSIAN,
|
| + InputToolCode.KEYBOARD_SOUTHERN_UZBEK,
|
| + InputToolCode.KEYBOARD_UIGHUR,
|
| + InputToolCode.KEYBOARD_URDU,
|
| + InputToolCode.KEYBOARD_YIDDISH];
|
| +
|
| +
|
| +/**
|
| + * The array of rtl ime' input tool codes.
|
| + *
|
| + * @type {!Array.<string>}
|
| + */
|
| +InputTool.RtlIMEs = [
|
| + InputToolCode.INPUTMETHOD_TRANSLITERATION_ARABIC,
|
| + InputToolCode.INPUTMETHOD_TRANSLITERATION_HEBREW,
|
| + InputToolCode.INPUTMETHOD_TRANSLITERATION_PERSIAN,
|
| + InputToolCode.INPUTMETHOD_TRANSLITERATION_URDU];
|
| +
|
| +
|
| +/**
|
| + * The mapping from 3-letter language codes to 2-letter language codes.
|
| + *
|
| + * @type {!Object.<string, string>}
|
| + */
|
| +InputTool.LanguageCodeThreeTwoMap = goog.object.create(
|
| + 'arm', 'hy',
|
| + 'bel', 'be',
|
| + 'bul', 'bg',
|
| + 'cat', 'ca',
|
| + 'cze', 'cs',
|
| + 'dan', 'da',
|
| + 'eng', 'en',
|
| + 'est', 'et',
|
| + 'fin', 'fi',
|
| + 'fra', 'fr',
|
| + 'geo', 'ka',
|
| + 'ger', 'de',
|
| + 'gre', 'el',
|
| + 'heb', 'he',
|
| + 'hun', 'hu',
|
| + 'ice', 'is',
|
| + 'ind', 'id',
|
| + 'ita', 'it',
|
| + 'jpn', 'ja',
|
| + 'lav', 'lv',
|
| + 'lit', 'lt',
|
| + 'mlt', 'mt',
|
| + 'mon', 'mn',
|
| + 'msa', 'ms',
|
| + 'nld', 'nl',
|
| + // The new specification is "nb", but NACL uses "no".
|
| + 'nob', 'no',
|
| + 'pol', 'pl',
|
| + 'por', 'pt',
|
| + 'rum', 'ro',
|
| + 'rus', 'ru',
|
| + 'scr', 'hr',
|
| + 'slo', 'sk',
|
| + 'slv', 'sl',
|
| + 'spa', 'es',
|
| + 'srp', 'sr',
|
| + 'swe', 'sv',
|
| + 'tur', 'tr',
|
| + 'ukr', 'uk');
|
| +
|
| +
|
| +/**
|
| + * The special XKB id to language code mapping.
|
| + *
|
| + * @private {!Object.<string, string>}
|
| + */
|
| +InputTool.XkbId2Language_ = {
|
| + // NACL treads "pt-BR", "pt-PT" the same with "pt".
|
| + 'xkb:us:intl:por': 'pt',
|
| + 'xkb:br::por': 'pt',
|
| + 'xkb:pt::por': 'pt'
|
| +};
|
| +
|
| +
|
| +/**
|
| + * The input tool code and instance mapping.
|
| + *
|
| + * @type {!Object.<string, InputTool>}
|
| + * @private
|
| + */
|
| +InputTool.instances_ = {};
|
| +
|
| +
|
| +/**
|
| + * Gets an input tool by code.
|
| + *
|
| + * @param {!string} inputToolCode The input tool code value.
|
| + * @return {InputTool} The input tool.
|
| + */
|
| +InputTool.get = function(inputToolCode) {
|
| + if (!inputToolCode) {
|
| + return null;
|
| + }
|
| +
|
| + // The code isn't BCP47 pattern, transfers it from old pattern.
|
| + if (!goog.object.contains(InputToolCode, inputToolCode)) {
|
| + inputToolCode = InputTool.parseToBCP47_(inputToolCode);
|
| + }
|
| +
|
| + // Allow BCP47 code 'fa_t_k0_und' to 'fa-t-k0-und'.
|
| + inputToolCode = inputToolCode.replace(/_/g, '-');
|
| +
|
| + // Adds '-und' to keep compatible with previous codes.
|
| + if (!goog.object.contains(InputToolCode, inputToolCode)) {
|
| + inputToolCode = InputTool.parseToBCP47_(
|
| + inputToolCode + '-und');
|
| + }
|
| +
|
| + if (InputTool.instances_[inputToolCode]) {
|
| + return InputTool.instances_[inputToolCode];
|
| + }
|
| +
|
| + // If the input tool code is valid.
|
| + if (goog.object.contains(InputToolCode, inputToolCode)) {
|
| + InputTool.instances_[inputToolCode] =
|
| + new InputTool(
|
| + /** @type {InputToolCode} */ (inputToolCode));
|
| + return InputTool.instances_[inputToolCode];
|
| + }
|
| +
|
| + return null;
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Language codes whose BCP47 code has a rule like:
|
| + * Has 'und-latn', then adding 'phone' at last, otherwise, 'inscript' at last.
|
| + *
|
| + * @type {!Array.<string>}
|
| + * @private
|
| + */
|
| +InputTool.PHONETIC_INSCRIPT_LANGS_ = [
|
| + 'bn', 'gu', 'pa', 'kn', 'ml', 'or', 'sa', 'ta', 'te', 'ne'
|
| +];
|
| +
|
| +
|
| +/**
|
| + * Special previous old code mapping to BCP47 code.
|
| + *
|
| + * @type {!Object.<string, string>}
|
| + * @private
|
| + * @const
|
| + */
|
| +InputTool.BCP47_SPECIAL_ = {
|
| + 'im_pinyin_zh_hans': InputToolCode.INPUTMETHOD_PINYIN_CHINESE_SIMPLIFIED,
|
| + 'im_pinyin_zh_hant': InputToolCode.INPUTMETHOD_PINYIN_CHINESE_TRADITIONAL,
|
| + 'im_t13n_ja': InputToolCode.INPUTMETHOD_TRANSLITERATION_JAPANESE,
|
| + 'im_t13n_ja-Hira': InputToolCode.INPUTMETHOD_TRANSLITERATION_HIRAGANA,
|
| + 'im_wubi_zh_hans': InputToolCode.INPUTMETHOD_WUBI_CHINESE_SIMPLIFIED,
|
| + 'im_zhuyin_zh_hant': InputToolCode.INPUTMETHOD_ZHUYIN_CHINESE_TRADITIONAL,
|
| + 'vkd_bg_phone': InputToolCode.KEYBOARD_BULGARIAN_PHONETIC,
|
| + 'vkd_chr_phone': InputToolCode.KEYBOARD_CHEROKEE_PHONETIC,
|
| + 'vkd_cs_qwertz': InputToolCode.KEYBOARD_CZECH_QWERTZ,
|
| + 'vkd_deva_phone': InputToolCode.KEYBOARD_DEVANAGARI_PHONETIC,
|
| + 'vkd_en_dvorak': InputToolCode.KEYBOARD_ENGLISH_DVORAK,
|
| + 'vkd_es_es': InputToolCode.KEYBOARD_SPANISH,
|
| + 'vkd_ethi': InputToolCode.KEYBOARD_ETHIOPIC,
|
| + 'vkd_gu_phone': InputToolCode.KEYBOARD_GUJARATI_PHONETIC,
|
| + 'vkd_guru_inscript': InputToolCode.KEYBOARD_GURMUKHI_INSCRIPT,
|
| + 'vkd_guru_phone': InputToolCode.KEYBOARD_GURMUKHI_PHONETIC,
|
| + 'vkd_hu_101': InputToolCode.KEYBOARD_HUNGARIAN_101,
|
| + 'vkd_hy_east': InputToolCode.KEYBOARD_ARMENIAN_EASTERN,
|
| + 'vkd_hy_west': InputToolCode.KEYBOARD_ARMENIAN_WESTERN,
|
| + 'vkd_ka_qwerty': InputToolCode.KEYBOARD_GEORGIAN_QWERTY,
|
| + 'vkd_ka_typewriter': InputToolCode.KEYBOARD_GEORGIAN_TYPEWRITER,
|
| + 'vkd_ro_sr13392_primary': InputToolCode.KEYBOARD_ROMANIAN_SR13392_PRIMARY,
|
| + 'vkd_ro_sr13392_secondary': InputToolCode.KEYBOARD_ROMANIAN_SR13392_SECONDARY,
|
| + 'vkd_ru_phone': InputToolCode.KEYBOARD_RUSSIAN_PHONETIC,
|
| + 'vkd_ru_phone_aatseel': InputToolCode.KEYBOARD_RUSSIAN_PHONETIC_AATSEEL,
|
| + 'vkd_ru_phone_yazhert': InputToolCode.KEYBOARD_RUSSIAN_PHONETIC_YAZHERT,
|
| + 'vkd_sk_qwerty': InputToolCode.KEYBOARD_SLOVAK_QWERTY,
|
| + 'vkd_ta_itrans': InputToolCode.KEYBOARD_TAMIL_ITRANS,
|
| + 'vkd_ta_tamil99': InputToolCode.KEYBOARD_TAMIL_99,
|
| + 'vkd_ta_typewriter': InputToolCode.KEYBOARD_TAMIL_TYPEWRITER,
|
| + 'vkd_th_pattajoti': InputToolCode.KEYBOARD_THAI_PATTAJOTI,
|
| + 'vkd_th_tis': InputToolCode.KEYBOARD_THAI_TIS,
|
| + 'vkd_tr_f': InputToolCode.KEYBOARD_TURKISH_F,
|
| + 'vkd_tr_q': InputToolCode.KEYBOARD_TURKISH_Q,
|
| + 'vkd_uk_101': InputToolCode.KEYBOARD_UKRAINIAN_101,
|
| + 'vkd_us_intl': InputToolCode.KEYBOARD_FRENCH_INTL,
|
| + 'vkd_uz_cyrl_phone': InputToolCode.KEYBOARD_UZBEK_CYRILLIC_PHONETIC,
|
| + 'vkd_uz_cyrl_type': InputToolCode.KEYBOARD_UZBEK_CYRILLIC_TYPEWRITTER,
|
| + 'vkd_vi_tcvn': InputToolCode.KEYBOARD_VIETNAMESE_TCVN,
|
| + 'vkd_vi_telex': InputToolCode.KEYBOARD_VIETNAMESE_TELEX
|
| +};
|
| +
|
| +
|
| +/**
|
| + * BCP47 code maps to previous code.
|
| + *
|
| + * @type {!Object.<string, string>}
|
| + * @private
|
| + */
|
| +InputTool.BCP47_SPECIAL_REVERSE_ = goog.object.transpose(
|
| + InputTool.BCP47_SPECIAL_);
|
| +
|
| +
|
| +/**
|
| + * Special keyboard layout code mapping. Multiple Input Tools map to the same
|
| + * layout.
|
| + *
|
| + * key: Input Tool code.
|
| + * value: layout code.
|
| + *
|
| + * @private {!Object.<string, string>}
|
| + */
|
| +InputTool.SpecialLayoutCodes_ = goog.object.create(
|
| + InputToolCode.KEYBOARD_DUTCH_INTL, 'us_intl',
|
| + InputToolCode.KEYBOARD_FRENCH_INTL, 'us_intl',
|
| + InputToolCode.KEYBOARD_GERMAN_INTL, 'us_intl',
|
| + InputToolCode.KEYBOARD_HAITIAN, 'fr',
|
| + InputToolCode.KEYBOARD_INDONESIAN, 'latn_002',
|
| + InputToolCode.KEYBOARD_IRISH, 'latn_002',
|
| + InputToolCode.KEYBOARD_ITALIAN_INTL, 'us_intl',
|
| + InputToolCode.KEYBOARD_JAVANESE, 'latn_002',
|
| + InputToolCode.KEYBOARD_MARATHI, 'deva_phone',
|
| + InputToolCode.KEYBOARD_MALAY, 'latn_002',
|
| + InputToolCode.KEYBOARD_PORTUGUESE_BRAZIL_INTL, 'us_intl',
|
| + InputToolCode.KEYBOARD_PORTUGUESE_PORTUGAL_INTL, 'us_intl',
|
| + InputToolCode.KEYBOARD_SPANISH_INTL, 'us_intl',
|
| + InputToolCode.KEYBOARD_SWAHILI, 'latn_002',
|
| + InputToolCode.KEYBOARD_TAGALOG, 'latn_002',
|
| + InputToolCode.KEYBOARD_TIGRINYA, 'ethi',
|
| + InputToolCode.KEYBOARD_WELSH, 'latn_002');
|
| +
|
| +
|
| +/**
|
| + * Parses previous old code to BCP 47 code.
|
| + *
|
| + * @param {string} itCode Previous old input tool code format.
|
| + * @return {string} BCP 47 code.
|
| + * @private
|
| + */
|
| +InputTool.parseToBCP47_ = function(itCode) {
|
| + if (InputTool.BCP47_SPECIAL_[itCode]) {
|
| + return InputTool.BCP47_SPECIAL_[itCode];
|
| + }
|
| +
|
| + if (itCode == 'vkd_iw') {
|
| + return InputToolCode.KEYBOARD_HEBREW;
|
| + }
|
| +
|
| + if (itCode == 'im_t13n_iw') {
|
| + return InputToolCode.INPUTMETHOD_TRANSLITERATION_HEBREW;
|
| + }
|
| +
|
| + // Types 'legacy' to 'lagacy' by mistake, correct it.
|
| + // Can't put 'tr' + '-t-k0-lagacy' into BCP47_SPECIAL_ map, becasue we have
|
| + // to split 'tr-t-k0-lagacy' but JS grammar wasn't allow to
|
| + // use 'tr' + '-t-k0-lagacy' as key.
|
| + if (itCode == 'tr' + '-t-k0-lagacy') {
|
| + return InputToolCode.KEYBOARD_TURKISH_F;
|
| + }
|
| +
|
| + var parts = itCode.split('_');
|
| + var code = '';
|
| + if (goog.string.startsWith(itCode, 'im_t13n')) {
|
| + // Example: 'im_t13n_hi'.
|
| + code = parts[2] + '-t-i0-und';
|
| + } else if (goog.string.startsWith(itCode, 'vkd_')) {
|
| + // Special codes for keyboard.
|
| + if (parts.length == 2) {
|
| + // Example: 'vkd_sq'
|
| + code = parts[1] + '-t-k0-und';
|
| + } else {
|
| + if (goog.array.contains(
|
| + InputTool.PHONETIC_INSCRIPT_LANGS_, parts[1])) {
|
| + if (parts[2] == 'inscript') {
|
| + code = parts[1] + '-t-k0-und';
|
| + } else {
|
| + code = parts[1] + '-t-und-latn-k0-und';
|
| + }
|
| + } else {
|
| + code = parts[1] + '-t-k0-' + parts[2];
|
| + if (!goog.object.contains(InputToolCode, code)) {
|
| + code = parts[1] + '-' + parts[2] + '-t-k0-und';
|
| + }
|
| + }
|
| + }
|
| + }
|
| + return goog.object.contains(InputToolCode, code) ? code : itCode;
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Gets the input tools by parameters. Keep compatible with previous language
|
| + * code pair. Not support to get input tool by keyboard layout.
|
| + *
|
| + * @param {!InputToolType} type The input tool type.
|
| + * @param {!string} code It's the target language code if type is input method.
|
| + * @return {InputTool} The input tool.
|
| + */
|
| +InputTool.getInputTool = function(type, code) {
|
| + // Makes compatible input tool code with previous language code version.
|
| + if (type == InputToolType.IME) {
|
| + if (code == 'zh' || code == 'zh-Hans') {
|
| + return InputTool.get(
|
| + InputToolCode.INPUTMETHOD_PINYIN_CHINESE_SIMPLIFIED);
|
| + } else if (code == 'zh-Hant') {
|
| + return InputTool.get(
|
| + InputToolCode.INPUTMETHOD_ZHUYIN_CHINESE_TRADITIONAL);
|
| + } else if (code == 'ja') {
|
| + return InputTool.get(
|
| + InputToolCode.INPUTMETHOD_TRANSLITERATION_JAPANESE);
|
| + } else {
|
| + return InputTool.get(code + '-t-i0-und');
|
| + }
|
| + } else if (type == InputToolType.KBD) {
|
| + return InputTool.get('vkd_' + code);
|
| + }
|
| + return null;
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Parses BCP47 codes to the virtual keyboard layout.
|
| + *
|
| + * @private
|
| + */
|
| +InputTool.prototype.parseLayoutCode_ = function() {
|
| + if (InputTool.SpecialLayoutCodes_[this.code]) {
|
| + this.layoutCode = InputTool.SpecialLayoutCodes_[this.code];
|
| + } else if (InputTool.BCP47_SPECIAL_REVERSE_[this.code]) {
|
| + // Removes prefix 'vkd_';
|
| + this.layoutCode = InputTool.
|
| + BCP47_SPECIAL_REVERSE_[this.code].slice(4);
|
| + } else {
|
| + var parts = this.code.split('-t-');
|
| + var countryCode = parts[0];
|
| + var inputToolType = parts[1];
|
| + countryCode = countryCode.replace(/-/g, '_');
|
| + if (countryCode == 'en_us') {
|
| + countryCode = 'us';
|
| + }
|
| +
|
| + if (goog.array.contains(
|
| + InputTool.PHONETIC_INSCRIPT_LANGS_, countryCode) &&
|
| + (inputToolType == 'und-latn-k0-und' || inputToolType == 'k0-und')) {
|
| + // If it's virtual keyboard having the inscript/phonetic rule.
|
| + this.layoutCode = countryCode +
|
| + (inputToolType == 'k0-und' ? '_inscript' : '_phone');
|
| + } else if (inputToolType == 'k0-und') {
|
| + this.layoutCode = countryCode;
|
| + } else {
|
| + var matches = inputToolType.match(/k0-(.*)/);
|
| + if (matches[1]) {
|
| + this.layoutCode = countryCode + '_' + matches[1].replace(
|
| + 'qwerty', 'phone');
|
| + }
|
| + }
|
| + }
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Parses the input tool code.
|
| + * TODO(wuyingbing): We will introduce new code pattern, and then write a new
|
| + * parsing method.
|
| + *
|
| + * @private
|
| + */
|
| +InputTool.prototype.parseInputToolCode_ = function() {
|
| + // Sets the input tool type.
|
| + if (this.code.indexOf('-i0') >= 0) {
|
| + this.type = InputToolType.IME;
|
| + if (goog.string.endsWith(this.code, '-handwrit')) {
|
| + this.type = InputToolType.HWT;
|
| + } else if (goog.string.endsWith(this.code, '-voice')) {
|
| + this.type = InputToolType.VOICE;
|
| + }
|
| + } else if (this.code.indexOf('-k0') >= 0) {
|
| + this.type = InputToolType.KBD;
|
| + } else if (goog.string.startsWith(this.code, 'xkb')) {
|
| + this.type = InputToolType.XKB;
|
| + }
|
| +
|
| + // Sets target language code.
|
| + var codes = this.code.split(/-t|-i0|-k0|:/);
|
| +
|
| + if (codes[0] == 'yue-hant') {
|
| + codes[0] = 'zh-Hant';
|
| + }
|
| + switch (this.code) {
|
| + // Currently most of systems doesn't support 'yue-hant', so hack it to
|
| + // 'zh-hant';
|
| + case InputToolCode.INPUTMETHOD_CANTONESE_TRADITIONAL:
|
| + codes[0] = 'zh-Hant';
|
| + break;
|
| + case InputToolCode.INPUTMETHOD_PINYIN_CHINESE_SIMPLIFIED:
|
| + case InputToolCode.INPUTMETHOD_WUBI_CHINESE_SIMPLIFIED:
|
| + codes[0] = 'zh-Hans';
|
| + break;
|
| + }
|
| + if (this.type == InputToolType.XKB) {
|
| + if (InputTool.XkbId2Language_[this.code]) {
|
| + this.languageCode = InputTool.XkbId2Language_[this.code];
|
| + } else {
|
| + this.languageCode = this.formatLanguageCode_(codes[codes.length - 1]);
|
| + }
|
| + } else {
|
| + this.languageCode = this.formatLanguageCode_(codes[0]);
|
| + // Sets source language target.
|
| + if (codes[1]) {
|
| + this.sourceLanguageCode = this.formatLanguageCode_(codes[1]);
|
| + }
|
| + }
|
| +
|
| + if (this.type == InputToolType.KBD) {
|
| + this.parseLayoutCode_();
|
| + }
|
| +};
|
| +
|
| +
|
| +/** @override */
|
| +InputTool.prototype.toString = function() {
|
| + return this.code;
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Gets the input tool's direction.
|
| + *
|
| + * @return {string} The direction string - 'rtl' or 'ltr'.
|
| + */
|
| +InputTool.prototype.getDirection = function() {
|
| + return this.isRightToLeft() ? 'rtl' : 'ltr';
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Gets the input tool's direction.
|
| + *
|
| + * @return {boolean} Whether is rtl direction of the input tool.
|
| + */
|
| +InputTool.prototype.isRightToLeft = function() {
|
| + return goog.array.contains(InputTool.RtlIMEs, this.code) ||
|
| + goog.array.contains(InputTool.RtlKeyboards, this.code);
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Gets whether has status bar.
|
| + *
|
| + * @return {boolean} Whether has status bar.
|
| + */
|
| +InputTool.prototype.hasStatusBar = function() {
|
| + // Don't show status bar in moblie device.
|
| + if (!GlobalSettings.mobile && this.type == InputToolType.IME) {
|
| + return /^(zh|yue)/.test(this.code);
|
| + }
|
| + return false;
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Format language to standard language code.
|
| + *
|
| + * @param {string} code The language code.
|
| + * @return {string} The standard language code.
|
| + * @private
|
| + */
|
| +InputTool.prototype.formatLanguageCode_ = function(code) {
|
| + // Hack 'und-ethi' to 'et'. The major population use 'ethi' script in
|
| + // Ethiopia country. So we set 'et' as language code.
|
| + if (code == 'und-ethi') {
|
| + return 'et';
|
| + }
|
| +
|
| + var parts = code.split('-');
|
| + var retCode;
|
| + if (parts.length == 2) {
|
| + if (parts[1].length == 2) {
|
| + retCode = parts[0] + '-' + parts[1].toUpperCase();
|
| + } else {
|
| + retCode = parts[0] + '-' + parts[1].charAt(0).toUpperCase() +
|
| + parts[1].slice(1);
|
| + }
|
| + } else {
|
| + if (goog.object.containsKey(InputTool.LanguageCodeThreeTwoMap, parts[0])) {
|
| + retCode = InputTool.LanguageCodeThreeTwoMap[parts[0]];
|
| + } else {
|
| + retCode = parts[0];
|
| + }
|
| + }
|
| + return retCode;
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Returns whether the input tool is transliteration or not.
|
| + *
|
| + * @return {boolean} .
|
| + */
|
| +InputTool.prototype.isTransliteration = function() {
|
| + var reg = new RegExp('^(am|ar|bn|el|gu|he|hi|kn|ml|mr|ne|or|fa|pa|ru|sa|' +
|
| + 'sr|si|ta|te|ti|ur|uk|be|bg)');
|
| + return this.type == InputToolType.IME && reg.test(this.code);
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Returns whether the input tool is Latin suggestion or not.
|
| + *
|
| + * @return {boolean} .
|
| + */
|
| +InputTool.prototype.isLatin = function() {
|
| + return this.type == InputToolType.IME &&
|
| + /^(en|fr|de|it|es|nl|pt|tr|sv|da|fi|no)/.test(this.code);
|
| +};
|
| +}); // goog.scope
|
| +
|
|
|