summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos/input_method/input_method_util.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/chromeos/input_method/input_method_util.cc')
-rw-r--r--chrome/browser/chromeos/input_method/input_method_util.cc111
1 files changed, 47 insertions, 64 deletions
diff --git a/chrome/browser/chromeos/input_method/input_method_util.cc b/chrome/browser/chromeos/input_method/input_method_util.cc
index abb94c2..3d981f1 100644
--- a/chrome/browser/chromeos/input_method/input_method_util.cc
+++ b/chrome/browser/chromeos/input_method/input_method_util.cc
@@ -8,12 +8,15 @@
#include <map>
#include <utility>
+#include "unicode/uloc.h"
+
#include "app/l10n_util.h"
#include "app/l10n_util_collator.h"
#include "base/basictypes.h"
#include "base/hash_tables.h"
#include "base/scoped_ptr.h"
#include "base/singleton.h"
+#include "base/string_split.h"
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/browser_process.h"
@@ -22,21 +25,17 @@
#include "chrome/browser/chromeos/cros/keyboard_library.h"
#include "chrome/browser/chromeos/language_preferences.h"
#include "grit/generated_resources.h"
-#include "third_party/icu/public/common/unicode/uloc.h"
namespace {
// Map from language code to associated input method IDs, etc.
typedef std::multimap<std::string, std::string> LanguageCodeToIdsMap;
struct IdMaps {
- LanguageCodeToIdsMap* language_code_to_ids;
- std::map<std::string, std::string>* id_to_language_code;
- std::map<std::string, std::string>* id_to_display_name;
+ scoped_ptr<LanguageCodeToIdsMap> language_code_to_ids;
+ scoped_ptr<std::map<std::string, std::string> > id_to_language_code;
+ scoped_ptr<std::map<std::string, std::string> > id_to_display_name;
- private:
- IdMaps() : language_code_to_ids(NULL),
- id_to_language_code(NULL),
- id_to_display_name(NULL) {
+ void ReloadMaps() {
chromeos::InputMethodLibrary* library =
chromeos::CrosLibrary::Get()->GetInputMethodLibrary();
scoped_ptr<chromeos::InputMethodDescriptors> supported_input_methods(
@@ -46,9 +45,9 @@ struct IdMaps {
// TODO(yusukes): Handle this error in nicer way.
}
- language_code_to_ids = new LanguageCodeToIdsMap;
- id_to_language_code = new std::map<std::string, std::string>;
- id_to_display_name = new std::map<std::string, std::string>;
+ language_code_to_ids->clear();
+ id_to_language_code->clear();
+ id_to_display_name->clear();
// Build the id to descriptor map for handling kExtraLanguages later.
typedef std::map<std::string,
@@ -81,6 +80,13 @@ struct IdMaps {
}
}
+ private:
+ IdMaps() : language_code_to_ids(new LanguageCodeToIdsMap),
+ id_to_language_code(new std::map<std::string, std::string>),
+ id_to_display_name(new std::map<std::string, std::string>) {
+ ReloadMaps();
+ }
+
void AddInputMethodToMaps(
const std::string& language_code,
const chromeos::InputMethodDescriptor& input_method) {
@@ -153,10 +159,6 @@ const struct EnglishToResouceId {
IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_VIETNAMESE_VIQR_INPUT_METHOD },
{ "vni (m17n)",
IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_VIETNAMESE_VNI_INPUT_METHOD },
- { "latn-post (m17n)",
- IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_LATIN_POST_INPUT_METHOD },
- { "latn-pre (m17n)",
- IDS_OPTIONS_SETTINGS_LANGUAGES_M17N_LATIN_PRE_INPUT_METHOD },
{ "Bopomofo", IDS_OPTIONS_SETTINGS_LANGUAGES_BOPOMOFO_INPUT_METHOD },
{ "Chewing", IDS_OPTIONS_SETTINGS_LANGUAGES_CHEWING_INPUT_METHOD },
{ "Pinyin", IDS_OPTIONS_SETTINGS_LANGUAGES_PINYIN_INPUT_METHOD },
@@ -190,15 +192,20 @@ const struct EnglishToResouceId {
{ "USA - Dvorak", IDS_STATUSBAR_LAYOUT_USA_DVORAK },
{ "Romania", IDS_STATUSBAR_LAYOUT_ROMANIA },
{ "USA", IDS_STATUSBAR_LAYOUT_USA },
+ { "USA - International (AltGr dead keys)",
+ IDS_STATUSBAR_LAYOUT_USA_INTERNATIONAL },
{ "Lithuania", IDS_STATUSBAR_LAYOUT_LITHUANIA },
{ "United Kingdom - Extended - Winkeys",
IDS_STATUSBAR_LAYOUT_UNITED_KINGDOM },
{ "Slovakia", IDS_STATUSBAR_LAYOUT_SLOVAKIA },
{ "Russia", IDS_STATUSBAR_LAYOUT_RUSSIA },
+ { "Russia - Phonetic", IDS_STATUSBAR_LAYOUT_RUSSIA_PHONETIC },
{ "Greece", IDS_STATUSBAR_LAYOUT_GREECE },
{ "Belgium", IDS_STATUSBAR_LAYOUT_BELGIUM },
{ "Bulgaria", IDS_STATUSBAR_LAYOUT_BULGARIA },
+ { "Bulgaria - Traditional phonetic", IDS_STATUSBAR_LAYOUT_BULGARIA_PHONETIC },
{ "Switzerland", IDS_STATUSBAR_LAYOUT_SWITZERLAND },
+ { "Switzerland - French", IDS_STATUSBAR_LAYOUT_SWITZERLAND_FRENCH },
{ "Turkey", IDS_STATUSBAR_LAYOUT_TURKEY },
{ "Portugal", IDS_STATUSBAR_LAYOUT_PORTUGAL },
{ "Spain", IDS_STATUSBAR_LAYOUT_SPAIN },
@@ -211,6 +218,11 @@ const struct EnglishToResouceId {
{ "Sweden", IDS_STATUSBAR_LAYOUT_SWEDEN },
{ "Netherlands", IDS_STATUSBAR_LAYOUT_NETHERLANDS },
{ "Latvia", IDS_STATUSBAR_LAYOUT_LATVIA },
+ { "Canada", IDS_STATUSBAR_LAYOUT_CANADA },
+ { "Canada - English", IDS_STATUSBAR_LAYOUT_CANADA_ENGLISH },
+ { "Israel", IDS_STATUSBAR_LAYOUT_ISRAEL },
+ { "Korea, Republic of - 101/104 key Compatible",
+ IDS_STATUSBAR_LAYOUT_KOREA_104 },
};
const size_t kNumEntries = arraysize(kEnglishToResourceIdArray);
@@ -231,20 +243,6 @@ const char* kIso639VariantMapping[][2] = {
{"slo", "slk"},
};
-// The list defines pairs of language code and the default input method
-// id. The list is used for reordering input method ids.
-//
-// TODO(satorux): We may need to handle secondary, and ternary input
-// methods, rather than handling the default input method only.
-const struct LanguageDefaultInputMethodId {
- const char* language_code;
- const char* input_method_id;
-} kLanguageDefaultInputMethodIds[] = {
- { "en-US", "xkb:us::eng", }, // US - English
- { "fr", "xkb:fr::fra", }, // France - French
- { "de", "xkb:de::ger", }, // Germany - German
-};
-
// The comparator is used for sorting language codes by their
// corresponding language names, using the ICU collator.
struct CompareLanguageCodesByLanguageName
@@ -264,6 +262,7 @@ struct CompareLanguageCodesByLanguageName
return l10n_util::StringComparator<std::wstring>(collator_)(key1, key2);
}
+ private:
icu::Collator* collator_;
};
@@ -293,6 +292,7 @@ struct CompareInputMethodIdsByLanguageName
return comparator_(language_code_1, language_code_2);
}
+ private:
const CompareLanguageCodesByLanguageName comparator_;
const std::map<std::string, std::string>& id_to_language_code_map_;
};
@@ -444,16 +444,6 @@ std::string GetLanguageCodeFromDescriptor(
return language_code;
}
-std::wstring MaybeRewriteLanguageName(const std::wstring& language_name) {
- // "t" is used as the language code for input methods that don't fall
- // under any other languages.
- if (language_name == L"t") {
- return l10n_util::GetString(
- IDS_OPTIONS_SETTINGS_LANGUAGES_OTHERS);
- }
- return language_name;
-}
-
std::string GetLanguageCodeFromInputMethodId(
const std::string& input_method_id) {
// The code should be compatible with one of codes used for UI languages,
@@ -490,10 +480,14 @@ std::wstring GetLanguageDisplayNameFromCode(const std::string& language_code) {
if (!g_browser_process) {
return L"";
}
- return MaybeRewriteLanguageName(UTF16ToWide(
- l10n_util::GetDisplayNameForLocale(
- language_code, g_browser_process->GetApplicationLocale(),
- true)));
+ return UTF16ToWide(l10n_util::GetDisplayNameForLocale(
+ language_code, g_browser_process->GetApplicationLocale(), true));
+}
+
+std::wstring GetLanguageNativeDisplayNameFromCode(
+ const std::string& language_code) {
+ return UTF16ToWide(l10n_util::GetDisplayNameForLocale(
+ language_code, language_code, true));
}
void SortLanguageCodesByNames(std::vector<std::string>* language_codes) {
@@ -536,24 +530,6 @@ void SortInputMethodIdsByNamesInternal(
collator.get(), id_to_language_code_map));
}
-void ReorderInputMethodIdsForLanguageCode(
- const std::string& language_code,
- std::vector<std::string>* input_method_ids) {
- for (size_t i = 0; i < arraysize(kLanguageDefaultInputMethodIds); ++i) {
- if (language_code == kLanguageDefaultInputMethodIds[i].language_code) {
- std::vector<std::string>::iterator iter =
- std::find(input_method_ids->begin(), input_method_ids->end(),
- kLanguageDefaultInputMethodIds[i].input_method_id);
- // If it's not on the top of |input_method_id|, swap it with the top one.
- if (iter != input_method_ids->end() &&
- iter != input_method_ids->begin()) {
- std::swap(*input_method_ids->begin(), *iter);
- }
- break; // Don't have to check other language codes.
- }
- }
-}
-
bool GetInputMethodIdsFromLanguageCode(
const std::string& normalized_language_code,
InputMethodType type,
@@ -594,9 +570,11 @@ void EnableInputMethods(const std::string& language_code, InputMethodType type,
std::vector<std::string> input_method_ids;
GetInputMethodIdsFromLanguageCode(language_code, type, &input_method_ids);
+ std::string keyboard = CrosLibrary::Get()->GetKeyboardLibrary()->
+ GetHardwareKeyboardLayoutName();
if (std::count(input_method_ids.begin(), input_method_ids.end(),
- kHardwareKeyboardLayout) == 0) {
- input_method_ids.push_back(kHardwareKeyboardLayout);
+ keyboard) == 0) {
+ input_method_ids.push_back(keyboard);
}
// First, sort the vector by input method id, then by its display name.
std::sort(input_method_ids.begin(), input_method_ids.end());
@@ -607,11 +585,16 @@ void EnableInputMethods(const std::string& language_code, InputMethodType type,
value.type = ImeConfigValue::kValueTypeStringList;
value.string_list_value = input_method_ids;
InputMethodLibrary* library = CrosLibrary::Get()->GetInputMethodLibrary();
- library->SetImeConfig(kGeneralSectionName, kPreloadEnginesConfigName, value);
+ library->SetImeConfig(language_prefs::kGeneralSectionName,
+ language_prefs::kPreloadEnginesConfigName, value);
if (!initial_input_method_id.empty()) {
library->ChangeInputMethod(initial_input_method_id);
}
}
+void OnLocaleChanged() {
+ Singleton<IdMaps>::get()->ReloadMaps();
+}
+
} // namespace input_method
} // namespace chromeos