| Index: chromeos/ime/extension_ime_util.cc
|
| diff --git a/chromeos/ime/extension_ime_util.cc b/chromeos/ime/extension_ime_util.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..bc0d078aaef24f1ccc378243b525aed56ec6cfc0
|
| --- /dev/null
|
| +++ b/chromeos/ime/extension_ime_util.cc
|
| @@ -0,0 +1,132 @@
|
| +// Copyright 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "chromeos/ime/extension_ime_util.h"
|
| +
|
| +#include "base/strings/string_util.h"
|
| +
|
| +namespace chromeos {
|
| +
|
| +namespace {
|
| +
|
| +const char kExtensionIMEPrefix[] = "_ext_ime_";
|
| +const int kExtensionIMEPrefixLength =
|
| + sizeof(kExtensionIMEPrefix) / sizeof(kExtensionIMEPrefix[0]) - 1;
|
| +const char kComponentExtensionIMEPrefix[] = "_comp_ime_";
|
| +const int kComponentExtensionIMEPrefixLength =
|
| + sizeof(kComponentExtensionIMEPrefix) /
|
| + sizeof(kComponentExtensionIMEPrefix[0]) - 1;
|
| +const int kExtensionIdLength = 32;
|
| +
|
| +} // namespace
|
| +
|
| +namespace extension_ime_util {
|
| +
|
| +std::string GetInputMethodID(const std::string& extension_id,
|
| + const std::string& engine_id) {
|
| + DCHECK(!extension_id.empty());
|
| + DCHECK(!engine_id.empty());
|
| + return kExtensionIMEPrefix + extension_id + engine_id;
|
| +}
|
| +
|
| +std::string GetComponentInputMethodID(const std::string& extension_id,
|
| + const std::string& engine_id) {
|
| + DCHECK(!extension_id.empty());
|
| + DCHECK(!engine_id.empty());
|
| + return kComponentExtensionIMEPrefix + extension_id + engine_id;
|
| +}
|
| +
|
| +std::string GetExtensionIDFromInputMethodID(
|
| + const std::string& input_method_id) {
|
| + if (IsExtensionIME(input_method_id)) {
|
| + return input_method_id.substr(kExtensionIMEPrefixLength,
|
| + kExtensionIdLength);
|
| + }
|
| + if (IsComponentExtensionIME(input_method_id)) {
|
| + return input_method_id.substr(kComponentExtensionIMEPrefixLength,
|
| + kExtensionIdLength);
|
| + }
|
| + return "";
|
| +}
|
| +
|
| +std::string GetComponentIDByInputMethodID(const std::string& input_method_id) {
|
| + if (IsComponentExtensionIME(input_method_id))
|
| + return input_method_id.substr(kComponentExtensionIMEPrefixLength +
|
| + kExtensionIdLength);
|
| + if (IsExtensionIME(input_method_id))
|
| + return input_method_id.substr(kExtensionIMEPrefixLength +
|
| + kExtensionIdLength);
|
| + return input_method_id;
|
| +}
|
| +
|
| +std::string GetInputMethodIDByEngineID(const std::string& engine_id) {
|
| + if (StartsWithASCII(engine_id, kComponentExtensionIMEPrefix, true) ||
|
| + StartsWithASCII(engine_id, kExtensionIMEPrefix, true)) {
|
| + return engine_id;
|
| + }
|
| + if (StartsWithASCII(engine_id, "xkb:", true))
|
| + return GetComponentInputMethodID(kXkbExtensionId, engine_id);
|
| + if (StartsWithASCII(engine_id, "vkd_", true))
|
| + return GetComponentInputMethodID(kM17nExtensionId, engine_id);
|
| + if (StartsWithASCII(engine_id, "nacl_mozc_", true))
|
| + return GetComponentInputMethodID(kMozcExtensionId, engine_id);
|
| + if (StartsWithASCII(engine_id, "hangul_", true))
|
| + return GetComponentInputMethodID(kHangulExtensionId, engine_id);
|
| +
|
| + if (StartsWithASCII(engine_id, "zh-", true) &&
|
| + engine_id.find("pinyin") != std::string::npos) {
|
| + return GetComponentInputMethodID(kChinesePinyinExtensionId, engine_id);
|
| + }
|
| + if (StartsWithASCII(engine_id, "zh-", true) &&
|
| + engine_id.find("zhuyin") != std::string::npos) {
|
| + return GetComponentInputMethodID(kChineseZhuyinExtensionId, engine_id);
|
| + }
|
| + if (StartsWithASCII(engine_id, "zh-", true) &&
|
| + engine_id.find("cangjie") != std::string::npos) {
|
| + return GetComponentInputMethodID(kChineseCangjieExtensionId, engine_id);
|
| + }
|
| + if (engine_id.find("-t-i0-") != std::string::npos)
|
| + return GetComponentInputMethodID(kT13nExtensionId, engine_id);
|
| +
|
| + return engine_id;
|
| +}
|
| +
|
| +bool IsExtensionIME(const std::string& input_method_id) {
|
| + return StartsWithASCII(input_method_id,
|
| + kExtensionIMEPrefix,
|
| + true /* Case sensitive */) &&
|
| + input_method_id.size() > kExtensionIMEPrefixLength +
|
| + kExtensionIdLength;
|
| +}
|
| +
|
| +bool IsComponentExtensionIME(const std::string& input_method_id) {
|
| + return StartsWithASCII(input_method_id,
|
| + kComponentExtensionIMEPrefix,
|
| + true /* Case sensitive */) &&
|
| + input_method_id.size() > kComponentExtensionIMEPrefixLength +
|
| + kExtensionIdLength;
|
| +}
|
| +
|
| +bool IsMemberOfExtension(const std::string& input_method_id,
|
| + const std::string& extension_id) {
|
| + return StartsWithASCII(input_method_id,
|
| + kExtensionIMEPrefix + extension_id,
|
| + true /* Case sensitive */);
|
| +}
|
| +
|
| +bool IsKeyboardLayoutExtension(const std::string& input_method_id) {
|
| + if (IsComponentExtensionIME(input_method_id))
|
| + return StartsWithASCII(GetComponentIDByInputMethodID(input_method_id),
|
| + "xkb:", true);
|
| + return false;
|
| +}
|
| +
|
| +std::string MaybeGetLegacyXkbId(const std::string& input_method_id) {
|
| + if (IsKeyboardLayoutExtension(input_method_id))
|
| + return GetComponentIDByInputMethodID(input_method_id);
|
| + return input_method_id;
|
| +}
|
| +
|
| +} // namespace extension_ime_util
|
| +} // namespace chromeos
|
|
|