Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(303)

Side by Side Diff: chrome/browser/chromeos/input_method/input_method_util.cc

Issue 150723006: Make input_methods.txt to be able to specify indicator string. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: more consistent Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/input_method/input_method_util.h" 5 #include "chrome/browser/chromeos/input_method/input_method_util.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <functional> 8 #include <functional>
9 #include <map> 9 #include <map>
10 #include <utility> 10 #include <utility>
(...skipping 12 matching lines...) Expand all
23 23
24 namespace { 24 namespace {
25 25
26 // A mapping from an input method id to a string for the language indicator. The 26 // A mapping from an input method id to a string for the language indicator. The
27 // mapping is necessary since some input methods belong to the same language. 27 // mapping is necessary since some input methods belong to the same language.
28 // For example, both "xkb:us::eng" and "xkb:us:dvorak:eng" are for US English. 28 // For example, both "xkb:us::eng" and "xkb:us:dvorak:eng" are for US English.
29 const struct { 29 const struct {
30 const char* input_method_id; 30 const char* input_method_id;
31 const char* indicator_text; 31 const char* indicator_text;
32 } kMappingFromIdToIndicatorText[] = { 32 } kMappingFromIdToIndicatorText[] = {
33 // To distinguish from "xkb:us::eng"
34 { "xkb:us:altgr-intl:eng", "EXTD" },
35 { "xkb:us:dvorak:eng", "DV" },
36 { "xkb:us:intl:eng", "INTL" },
37 { "xkb:us:colemak:eng", "CO" },
38 { "english-m", "??" },
39 { "xkb:de:neo:ger", "NEO" },
40 // To distinguish from "xkb:es::spa"
41 { "xkb:es:cat:cat", "CAS" },
42 // To distinguish from "xkb:gb::eng"
43 { "xkb:gb:dvorak:eng", "DV" },
44 // To distinguish from "xkb:jp::jpn" 33 // To distinguish from "xkb:jp::jpn"
45 // TODO(nona): Make following variables configurable. http://crbug.com/232260. 34 // TODO(nona): Make following variables configurable. http://crbug.com/232260.
46 { "_comp_ime_fpfbhcjppmaeaijcidgiibchfbnhbeljnacl_mozc_us", "\xe3\x81\x82" }, 35 { "_comp_ime_fpfbhcjppmaeaijcidgiibchfbnhbeljnacl_mozc_us", "\xe3\x81\x82" },
47 { "_comp_ime_fpfbhcjppmaeaijcidgiibchfbnhbeljnacl_mozc_jp", "\xe3\x81\x82" }, 36 { "_comp_ime_fpfbhcjppmaeaijcidgiibchfbnhbeljnacl_mozc_jp", "\xe3\x81\x82" },
48 { "_comp_ime_bbaiamgfapehflhememkfglaehiobjnknacl_mozc_us", "\xe3\x81\x82" }, 37 { "_comp_ime_bbaiamgfapehflhememkfglaehiobjnknacl_mozc_us", "\xe3\x81\x82" },
49 { "_comp_ime_bbaiamgfapehflhememkfglaehiobjnknacl_mozc_jp", "\xe3\x81\x82" }, 38 { "_comp_ime_bbaiamgfapehflhememkfglaehiobjnknacl_mozc_jp", "\xe3\x81\x82" },
50 // For simplified Chinese input methods 39 // For simplified Chinese input methods
51 { "pinyin", "\xe6\x8b\xbc" }, // U+62FC 40 { "pinyin", "\xe6\x8b\xbc" }, // U+62FC
52 { "_comp_ime_cpgalbafkoofkjmaeonnfijgpfennjjnzh-t-i0-pinyin", 41 { "_comp_ime_cpgalbafkoofkjmaeonnfijgpfennjjnzh-t-i0-pinyin",
53 "\xe6\x8b\xbc" }, 42 "\xe6\x8b\xbc" },
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 return base::UTF16ToUTF8(display_name); 372 return base::UTF16ToUTF8(display_name);
384 } 373 }
385 // Return an empty string if the display name is not found. 374 // Return an empty string if the display name is not found.
386 return ""; 375 return "";
387 } 376 }
388 377
389 base::string16 InputMethodUtil::GetInputMethodShortName( 378 base::string16 InputMethodUtil::GetInputMethodShortName(
390 const InputMethodDescriptor& input_method) const { 379 const InputMethodDescriptor& input_method) const {
391 // For the status area, we use two-letter, upper-case language code like 380 // For the status area, we use two-letter, upper-case language code like
392 // "US" and "JP". 381 // "US" and "JP".
382
383 // Use the indicator string if set.
384 if (!input_method.indicator().empty()) {
385 return base::UTF8ToUTF16(input_method.indicator());
386 }
387
393 base::string16 text; 388 base::string16 text;
394
395 // Check special cases first. 389 // Check special cases first.
396 for (size_t i = 0; i < kMappingFromIdToIndicatorTextLen; ++i) { 390 for (size_t i = 0; i < kMappingFromIdToIndicatorTextLen; ++i) {
397 if (kMappingFromIdToIndicatorText[i].input_method_id == input_method.id()) { 391 if (kMappingFromIdToIndicatorText[i].input_method_id ==
392 input_method.id()) {
398 text = base::UTF8ToUTF16(kMappingFromIdToIndicatorText[i].indicator_text); 393 text = base::UTF8ToUTF16(kMappingFromIdToIndicatorText[i].indicator_text);
399 break; 394 break;
400 } 395 }
401 } 396 }
402 397
403 // Display the keyboard layout name when using a keyboard layout. 398 // Display the keyboard layout name when using a keyboard layout.
404 if (text.empty() && 399 if (text.empty() &&
405 IsKeyboardLayout(input_method.id())) { 400 IsKeyboardLayout(input_method.id())) {
406 const size_t kMaxKeyboardLayoutNameLen = 2; 401 const size_t kMaxKeyboardLayoutNameLen = 2;
407 const base::string16 keyboard_layout = 402 const base::string16 keyboard_layout =
408 base::UTF8ToUTF16(GetKeyboardLayoutName(input_method.id())); 403 base::UTF8ToUTF16(GetKeyboardLayoutName(input_method.id()));
409 text = StringToUpperASCII(keyboard_layout).substr( 404 text = StringToUpperASCII(keyboard_layout).substr(
410 0, kMaxKeyboardLayoutNameLen); 405 0, kMaxKeyboardLayoutNameLen);
411 } 406 }
412 407
413 // TODO(yusukes): Some languages have two or more input methods. For example, 408 // TODO(yusukes): Some languages have two or more input methods. For example,
414 // Thai has 3, Vietnamese has 4. If these input methods could be activated at 409 // Thai has 3, Vietnamese has 4. If these input methods could be activated at
415 // the same time, we should do either of the following: 410 // the same time, we should do either of the following:
416 // (1) Add mappings to |kMappingFromIdToIndicatorText| 411 // (1) Add mappings to |kMappingFromIdToIndicatorText|
417 // (2) Add suffix (1, 2, ...) to |text| when ambiguous. 412 // (2) Add suffix (1, 2, ...) to |text| when ambiguous.
418 413
419 if (text.empty()) { 414 if (text.empty()) {
420 const size_t kMaxLanguageNameLen = 2; 415 const size_t kMaxLanguageNameLen = 2;
421 DCHECK(!input_method.language_codes().empty()); 416 DCHECK(!input_method.language_codes().empty());
422 const std::string language_code = input_method.language_codes().at(0); 417 const std::string language_code = input_method.language_codes().at(0);
423 text = StringToUpperASCII(base::UTF8ToUTF16(language_code)).substr( 418 text = StringToUpperASCII(base::UTF8ToUTF16(language_code)).substr(
424 0, kMaxLanguageNameLen); 419 0, kMaxLanguageNameLen);
425 } 420 }
426 DCHECK(!text.empty()); 421 DCHECK(!text.empty()) << input_method.id();
427 return text; 422 return text;
428 } 423 }
429 424
430 base::string16 InputMethodUtil::GetInputMethodMediumName( 425 base::string16 InputMethodUtil::GetInputMethodMediumName(
431 const InputMethodDescriptor& input_method) const { 426 const InputMethodDescriptor& input_method) const {
432 // For the "Your input method has changed to..." bubble. In most cases 427 // For the "Your input method has changed to..." bubble. In most cases
433 // it uses the same name as the short name, unless found in a table 428 // it uses the same name as the short name, unless found in a table
434 // for medium length names. 429 // for medium length names.
435 for (size_t i = 0; i < kMappingImeIdToMediumLenNameResourceIdLen; ++i) { 430 for (size_t i = 0; i < kMappingImeIdToMediumLenNameResourceIdLen; ++i) {
436 if (kMappingImeIdToMediumLenNameResourceId[i].input_method_id == 431 if (kMappingImeIdToMediumLenNameResourceId[i].input_method_id ==
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
656 } 651 }
657 } 652 }
658 653
659 InputMethodDescriptor InputMethodUtil::GetFallbackInputMethodDescriptor() { 654 InputMethodDescriptor InputMethodUtil::GetFallbackInputMethodDescriptor() {
660 std::vector<std::string> layouts; 655 std::vector<std::string> layouts;
661 layouts.push_back("us"); 656 layouts.push_back("us");
662 std::vector<std::string> languages; 657 std::vector<std::string> languages;
663 languages.push_back("en-US"); 658 languages.push_back("en-US");
664 return InputMethodDescriptor("xkb:us::eng", 659 return InputMethodDescriptor("xkb:us::eng",
665 "", 660 "",
661 "US",
666 layouts, 662 layouts,
667 languages, 663 languages,
668 true, // login keyboard. 664 true, // login keyboard.
669 GURL(), // options page, not available. 665 GURL(), // options page, not available.
670 GURL()); // input view page, not available. 666 GURL()); // input view page, not available.
671 } 667 }
672 668
673 void InputMethodUtil::ReloadInternalMaps() { 669 void InputMethodUtil::ReloadInternalMaps() {
674 if (supported_input_methods_->size() <= 1) { 670 if (supported_input_methods_->size() <= 1) {
675 DVLOG(1) << "GetSupportedInputMethods returned a fallback ID"; 671 DVLOG(1) << "GetSupportedInputMethods returned a fallback ID";
(...skipping 23 matching lines...) Expand all
699 if (IsKeyboardLayout(input_method.id())) { 695 if (IsKeyboardLayout(input_method.id())) {
700 xkb_id_to_descriptor_.insert( 696 xkb_id_to_descriptor_.insert(
701 std::make_pair(input_method.GetPreferredKeyboardLayout(), 697 std::make_pair(input_method.GetPreferredKeyboardLayout(),
702 input_method)); 698 input_method));
703 } 699 }
704 } 700 }
705 } 701 }
706 702
707 } // namespace input_method 703 } // namespace input_method
708 } // namespace chromeos 704 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698