// 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