Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 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 "app/l10n_util.h" | 5 #include "app/l10n_util.h" |
| 6 #include "chrome/browser/spellchecker.h" | 6 #include "chrome/browser/spellchecker.h" |
| 7 #include "chrome/browser/spellchecker_common.h" | 7 #include "chrome/browser/spellchecker_common.h" |
| 8 #include "chrome/browser/spellchecker_platform_engine.h" | 8 #include "chrome/browser/spellchecker_platform_engine.h" |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 72 {"ca", "ca-ES"}, | 72 {"ca", "ca-ES"}, |
| 73 {"lv", "lv-LV"}, | 73 {"lv", "lv-LV"}, |
| 74 // {"uk", "uk-UA"}, // Not to be included in Spellchecker as per B=1277824 | 74 // {"uk", "uk-UA"}, // Not to be included in Spellchecker as per B=1277824 |
| 75 {"hi", "hi-IN"}, | 75 {"hi", "hi-IN"}, |
| 76 {"et", "et-EE"}, | 76 {"et", "et-EE"}, |
| 77 {"tr", "tr-TR"}, | 77 {"tr", "tr-TR"}, |
| 78 }; | 78 }; |
| 79 | 79 |
| 80 } | 80 } |
| 81 | 81 |
| 82 void SpellChecker::SpellCheckLanguages(Languages* languages) { | 82 void SpellChecker::SpellCheckLanguages(std::vector<std::string>* languages) { |
| 83 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(g_supported_spellchecker_languages); | 83 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(g_supported_spellchecker_languages); |
| 84 ++i) | 84 ++i) |
| 85 languages->push_back(g_supported_spellchecker_languages[i].language); | 85 languages->push_back(g_supported_spellchecker_languages[i].language); |
| 86 } | 86 } |
| 87 | 87 |
| 88 // This function returns the language-region version of language name. | 88 // This function returns the language-region version of language name. |
| 89 // e.g. returns hi-IN for hi. | 89 // e.g. returns hi-IN for hi. |
| 90 SpellChecker::Language SpellChecker::GetSpellCheckLanguageRegion( | 90 std::string SpellChecker::GetSpellCheckLanguageRegion( |
| 91 Language input_language) { | 91 std::string input_language) { |
| 92 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(g_supported_spellchecker_languages); | 92 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(g_supported_spellchecker_languages); |
| 93 ++i) { | 93 ++i) { |
| 94 Language language(g_supported_spellchecker_languages[i].language); | 94 std::string language( |
| 95 g_supported_spellchecker_languages[i].language); | |
| 95 if (language == input_language) | 96 if (language == input_language) |
| 96 return Language(g_supported_spellchecker_languages[i].language_region); | 97 return std::string( |
| 98 g_supported_spellchecker_languages[i].language_region); | |
| 97 } | 99 } |
| 98 | 100 |
| 99 return input_language; | 101 return input_language; |
| 100 } | 102 } |
| 101 | 103 |
| 102 | 104 |
| 103 SpellChecker::Language SpellChecker::GetLanguageFromLanguageRegion( | 105 std::string SpellChecker::GetLanguageFromLanguageRegion( |
| 104 Language input_language) { | 106 std::string input_language) { |
| 105 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(g_supported_spellchecker_languages); | 107 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(g_supported_spellchecker_languages); |
| 106 ++i) { | 108 ++i) { |
| 107 Language language(g_supported_spellchecker_languages[i].language_region); | 109 std::string language( |
| 110 g_supported_spellchecker_languages[i].language_region); | |
| 108 if (language == input_language) | 111 if (language == input_language) |
| 109 return Language(g_supported_spellchecker_languages[i].language); | 112 return std::string(g_supported_spellchecker_languages[i].language); |
| 110 } | 113 } |
| 111 | 114 |
| 112 return input_language; | 115 return input_language; |
| 113 } | 116 } |
| 114 | 117 |
| 115 SpellChecker::Language SpellChecker::GetCorrespondingSpellCheckLanguage( | 118 std::string SpellChecker:: |
| 116 const Language& language) { | 119 GetCorrespondingSpellCheckLanguage(const std::string& language) { |
|
brettw
2009/07/01 23:11:34
Can you wrap this like it used to be?
| |
| 117 // Look for exact match in the Spell Check language list. | 120 // Look for exact match in the Spell Check language list. |
| 118 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(g_supported_spellchecker_languages); | 121 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(g_supported_spellchecker_languages); |
| 119 ++i) { | 122 ++i) { |
| 120 // First look for exact match in the language region of the list. | 123 // First look for exact match in the language region of the list. |
| 121 Language spellcheck_language( | 124 std::string spellcheck_language( |
| 122 g_supported_spellchecker_languages[i].language); | 125 g_supported_spellchecker_languages[i].language); |
| 123 if (spellcheck_language == language) | 126 if (spellcheck_language == language) |
| 124 return language; | 127 return language; |
| 125 | 128 |
| 126 // Next, look for exact match in the language_region part of the list. | 129 // Next, look for exact match in the language_region part of the list. |
| 127 Language spellcheck_language_region( | 130 std::string spellcheck_language_region( |
| 128 g_supported_spellchecker_languages[i].language_region); | 131 g_supported_spellchecker_languages[i].language_region); |
| 129 if (spellcheck_language_region == language) | 132 if (spellcheck_language_region == language) |
| 130 return g_supported_spellchecker_languages[i].language; | 133 return g_supported_spellchecker_languages[i].language; |
| 131 } | 134 } |
| 132 | 135 |
| 133 // Look for a match by comparing only language parts. All the 'en-RR' | 136 // Look for a match by comparing only language parts. All the 'en-RR' |
| 134 // except for 'en-GB' exactly matched in the above loop, will match | 137 // except for 'en-GB' exactly matched in the above loop, will match |
| 135 // 'en-US'. This is not ideal because 'en-ZA', 'en-NZ' had | 138 // 'en-US'. This is not ideal because 'en-ZA', 'en-NZ' had |
| 136 // better be matched with 'en-GB'. This does not handle cases like | 139 // better be matched with 'en-GB'. This does not handle cases like |
| 137 // 'az-Latn-AZ' vs 'az-Arab-AZ', either, but we don't use 3-part | 140 // 'az-Latn-AZ' vs 'az-Arab-AZ', either, but we don't use 3-part |
| 138 // locale ids with a script code in the middle, yet. | 141 // locale ids with a script code in the middle, yet. |
| 139 // TODO(jungshik): Add a better fallback. | 142 // TODO(jungshik): Add a better fallback. |
| 140 Language language_part(language, 0, language.find('-')); | 143 std::string language_part(language, 0, language.find('-')); |
| 141 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(g_supported_spellchecker_languages); | 144 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(g_supported_spellchecker_languages); |
| 142 ++i) { | 145 ++i) { |
| 143 Language spellcheck_language( | 146 std::string spellcheck_language( |
| 144 g_supported_spellchecker_languages[i].language_region); | 147 g_supported_spellchecker_languages[i].language_region); |
| 145 if (spellcheck_language.substr(0, spellcheck_language.find('-')) == | 148 if (spellcheck_language.substr(0, spellcheck_language.find('-')) == |
| 146 language_part) | 149 language_part) |
| 147 return spellcheck_language; | 150 return spellcheck_language; |
| 148 } | 151 } |
| 149 | 152 |
| 150 // No match found - return blank. | 153 // No match found - return blank. |
| 151 return Language(); | 154 return std::string(); |
| 152 } | 155 } |
| 153 | 156 |
| 154 int SpellChecker::GetSpellCheckLanguages( | 157 int SpellChecker::GetSpellCheckLanguages( |
| 155 Profile* profile, | 158 Profile* profile, |
| 156 Languages* languages) { | 159 std::vector<std::string>* languages) { |
| 157 StringPrefMember accept_languages_pref; | 160 StringPrefMember accept_languages_pref; |
| 158 StringPrefMember dictionary_language_pref; | 161 StringPrefMember dictionary_language_pref; |
| 159 accept_languages_pref.Init(prefs::kAcceptLanguages, profile->GetPrefs(), | 162 accept_languages_pref.Init(prefs::kAcceptLanguages, profile->GetPrefs(), |
| 160 NULL); | 163 NULL); |
| 161 dictionary_language_pref.Init(prefs::kSpellCheckDictionary, | 164 dictionary_language_pref.Init(prefs::kSpellCheckDictionary, |
| 162 profile->GetPrefs(), NULL); | 165 profile->GetPrefs(), NULL); |
| 163 std::string dictionary_language = | 166 std::string dictionary_language = |
| 164 WideToASCII(dictionary_language_pref.GetValue()); | 167 WideToASCII(dictionary_language_pref.GetValue()); |
| 165 | 168 |
| 166 // The current dictionary language should be there. | 169 // The current dictionary language should be there. |
| 167 languages->push_back(dictionary_language); | 170 languages->push_back(dictionary_language); |
| 168 | 171 |
| 169 // Now scan through the list of accept languages, and find possible mappings | 172 // Now scan through the list of accept languages, and find possible mappings |
| 170 // from this list to the existing list of spell check languages. | 173 // from this list to the existing list of spell check languages. |
| 171 Languages accept_languages; | 174 std::vector<std::string> accept_languages; |
| 172 SplitString(WideToASCII(accept_languages_pref.GetValue()), ',', | 175 SplitString(WideToASCII(accept_languages_pref.GetValue()), ',', |
| 173 &accept_languages); | 176 &accept_languages); |
| 174 for (Languages::const_iterator i = accept_languages.begin(); | 177 for (std::vector<std::string>::const_iterator i = accept_languages.begin(); |
| 175 i != accept_languages.end(); ++i) { | 178 i != accept_languages.end(); ++i) { |
| 176 std::string language = GetCorrespondingSpellCheckLanguage(*i); | 179 std::string language = GetCorrespondingSpellCheckLanguage(*i); |
| 177 if (!language.empty() && | 180 if (!language.empty() && |
| 178 std::find(languages->begin(), languages->end(), language) == | 181 std::find(languages->begin(), languages->end(), language) == |
| 179 languages->end()) | 182 languages->end()) |
| 180 languages->push_back(language); | 183 languages->push_back(language); |
| 181 } | 184 } |
| 182 | 185 |
| 183 for (size_t i = 0; i < languages->size(); ++i) { | 186 for (size_t i = 0; i < languages->size(); ++i) { |
| 184 if ((*languages)[i] == dictionary_language) | 187 if ((*languages)[i] == dictionary_language) |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 324 }; | 327 }; |
| 325 | 328 |
| 326 void SpellChecker::set_file_is_downloading(bool value) { | 329 void SpellChecker::set_file_is_downloading(bool value) { |
| 327 dic_is_downloading_ = value; | 330 dic_is_downloading_ = value; |
| 328 } | 331 } |
| 329 | 332 |
| 330 // ################################################################ | 333 // ################################################################ |
| 331 // This part of the code is used for spell checking. | 334 // This part of the code is used for spell checking. |
| 332 // ################################################################ | 335 // ################################################################ |
| 333 | 336 |
| 334 FilePath SpellChecker::GetVersionedFileName(const Language& input_language, | 337 FilePath SpellChecker::GetVersionedFileName( |
|
brettw
2009/07/01 23:11:34
I think the old wrapping was better here.
| |
| 335 const FilePath& dict_dir) { | 338 const std::string& input_language, const FilePath& dict_dir) { |
| 336 // The default dictionary version is 1-2. These versions have been augmented | 339 // The default dictionary version is 1-2. These versions have been augmented |
| 337 // with additional words found by the translation team. | 340 // with additional words found by the translation team. |
| 338 static const char kDefaultVersionString[] = "-1-2"; | 341 static const char kDefaultVersionString[] = "-1-2"; |
| 339 | 342 |
| 340 // The following dictionaries have either not been augmented with additional | 343 // The following dictionaries have either not been augmented with additional |
| 341 // words (version 1-1) or have new words, as well as an upgraded dictionary | 344 // words (version 1-1) or have new words, as well as an upgraded dictionary |
| 342 // as of Feb 2009 (version 1-3). | 345 // as of Feb 2009 (version 1-3). |
| 343 static const struct { | 346 static const struct { |
| 344 // The language input. | 347 // The language input. |
| 345 const char* language; | 348 const char* language; |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 373 versioned_bdict_file_name = | 376 versioned_bdict_file_name = |
| 374 language + special_version_string[i].version + ".bdic"; | 377 language + special_version_string[i].version + ".bdic"; |
| 375 break; | 378 break; |
| 376 } | 379 } |
| 377 } | 380 } |
| 378 | 381 |
| 379 return dict_dir.AppendASCII(versioned_bdict_file_name); | 382 return dict_dir.AppendASCII(versioned_bdict_file_name); |
| 380 } | 383 } |
| 381 | 384 |
| 382 SpellChecker::SpellChecker(const FilePath& dict_dir, | 385 SpellChecker::SpellChecker(const FilePath& dict_dir, |
| 383 const Language& language, | 386 const std::string& language, |
| 384 URLRequestContext* request_context, | 387 URLRequestContext* request_context, |
| 385 const FilePath& custom_dictionary_file_name) | 388 const FilePath& custom_dictionary_file_name) |
| 386 : custom_dictionary_file_name_(custom_dictionary_file_name), | 389 : custom_dictionary_file_name_(custom_dictionary_file_name), |
| 387 tried_to_init_(false), | 390 tried_to_init_(false), |
| 388 #ifndef NDEBUG | 391 #ifndef NDEBUG |
| 389 worker_loop_(NULL), | 392 worker_loop_(NULL), |
| 390 #endif | 393 #endif |
| 391 tried_to_download_(false), | 394 tried_to_download_(false), |
| 392 file_loop_(NULL), | 395 file_loop_(NULL), |
| 393 url_request_context_(request_context), | 396 url_request_context_(request_context), |
| (...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 724 | 727 |
| 725 // Populate the vector of WideStrings. | 728 // Populate the vector of WideStrings. |
| 726 for (int i = 0; i < number_of_suggestions; i++) { | 729 for (int i = 0; i < number_of_suggestions; i++) { |
| 727 if (i < kMaxSuggestions) | 730 if (i < kMaxSuggestions) |
| 728 optional_suggestions->push_back(UTF8ToWide(suggestions[i])); | 731 optional_suggestions->push_back(UTF8ToWide(suggestions[i])); |
| 729 free(suggestions[i]); | 732 free(suggestions[i]); |
| 730 } | 733 } |
| 731 if (suggestions != NULL) | 734 if (suggestions != NULL) |
| 732 free(suggestions); | 735 free(suggestions); |
| 733 } | 736 } |
| OLD | NEW |