#include "chrome/common/spellcheck_common.h"
#include "base/file_path.h"
namespace chrome {
namespace spellcheck_common {
static const struct {
const char* language;
const char* language_region;
} g_supported_spellchecker_languages[] = {
{"af", "af-ZA"},
{"bg", "bg-BG"},
{"ca", "ca-ES"},
{"cs", "cs-CZ"},
{"da", "da-DK"},
{"de", "de-DE"},
{"el", "el-GR"},
{"en-AU", "en-AU"},
{"en-CA", "en-CA"},
{"en-GB", "en-GB"},
{"en-US", "en-US"},
{"es", "es-ES"},
{"et", "et-EE"},
{"fo", "fo-FO"},
{"fr", "fr-FR"},
{"he", "he-IL"},
{"hi", "hi-IN"},
{"hr", "hr-HR"},
{"hu", "hu-HU"},
{"id", "id-ID"},
{"it", "it-IT"},
{"lt", "lt-LT"},
{"lv", "lv-LV"},
{"nb", "nb-NO"},
{"nl", "nl-NL"},
{"pl", "pl-PL"},
{"pt-BR", "pt-BR"},
{"pt-PT", "pt-PT"},
{"ro", "ro-RO"},
{"ru", "ru-RU"},
{"sk", "sk-SK"},
{"sl", "sl-SI"},
{"sh", "sh"},
{"sr", "sr"},
{"sv", "sv-SE"},
{"tr", "tr-TR"},
{"uk", "uk-UA"},
{"vi", "vi-VN"},
};
std::string GetSpellCheckLanguageRegion(const std::string& input_language) {
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(g_supported_spellchecker_languages);
++i) {
if (g_supported_spellchecker_languages[i].language == input_language) {
return std::string(
g_supported_spellchecker_languages[i].language_region);
}
}
return input_language;
}
FilePath GetVersionedFileName(const std::string& input_language,
const FilePath& dict_dir) {
static const char kDefaultVersionString[] = "-1-2";
static const struct {
const char* language;
const char* version;
} special_version_string[] = {
{"es-ES", "-1-1"},
{"nl-NL", "-1-1"},
{"sv-SE", "-1-1"},
{"he-IL", "-1-1"},
{"el-GR", "-1-1"},
{"hi-IN", "-1-1"},
{"tr-TR", "-1-1"},
{"et-EE", "-1-1"},
{"lt-LT", "-1-3"},
{"pl-PL", "-1-3"},
{"fr-FR", "-2-0"},
{"hu-HU", "-2-0"},
{"ro-RO", "-2-0"},
{"ru-RU", "-2-0"},
{"bg-BG", "-2-0"},
{"sr", "-2-0"},
{"uk-UA", "-2-0"},
{"pt-BR", "-2-2"},
{"sh", "-2-2"},
{"en-US", "-2-3"},
{"en-CA", "-2-3"},
{"en-GB", "-2-3"},
{"en-AU", "-2-3"},
{"ca-ES", "-2-3"},
{"sv-SE", "-2-3"},
{"af-ZA", "-2-3"},
{"fo-FO", "-2-3"},
};
std::string language = GetSpellCheckLanguageRegion(input_language);
std::string versioned_bdict_file_name(language + kDefaultVersionString +
".bdic");
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(special_version_string); ++i) {
if (language == special_version_string[i].language) {
versioned_bdict_file_name =
language + special_version_string[i].version + ".bdic";
break;
}
}
return dict_dir.AppendASCII(versioned_bdict_file_name);
}
std::string GetCorrespondingSpellCheckLanguage(const std::string& language) {
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(g_supported_spellchecker_languages);
++i) {
std::string spellcheck_language(
g_supported_spellchecker_languages[i].language);
if (spellcheck_language == language)
return language;
std::string spellcheck_language_region(
g_supported_spellchecker_languages[i].language_region);
if (spellcheck_language_region == language)
return g_supported_spellchecker_languages[i].language;
}
std::string language_part(language, 0, language.find('-'));
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(g_supported_spellchecker_languages);
++i) {
std::string spellcheck_language(
g_supported_spellchecker_languages[i].language_region);
if (spellcheck_language.substr(0, spellcheck_language.find('-')) ==
language_part) {
return spellcheck_language;
}
}
return std::string();
}
void SpellCheckLanguages(std::vector<std::string>* languages) {
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(g_supported_spellchecker_languages);
++i) {
languages->push_back(g_supported_spellchecker_languages[i].language);
}
}
}
}