Commit ac2e6192 authored by tkent's avatar tkent Committed by Commit bot

Remove Windows XP support code in LocaleWin.cpp.

Review URL: https://codereview.chromium.org/1632173002

Cr-Commit-Position: refs/heads/master@{#371465}
parent 5cf1c5f0
...@@ -46,9 +46,6 @@ ...@@ -46,9 +46,6 @@
namespace blink { namespace blink {
typedef LCID (WINAPI* LocaleNameToLCIDPtr)(LPCWSTR, DWORD);
typedef HashMap<String, LCID> NameToLCIDMap;
static String extractLanguageCode(const String& locale) static String extractLanguageCode(const String& locale)
{ {
size_t dashPosition = locale.find('-'); size_t dashPosition = locale.find('-');
...@@ -57,90 +54,25 @@ static String extractLanguageCode(const String& locale) ...@@ -57,90 +54,25 @@ static String extractLanguageCode(const String& locale)
return locale.left(dashPosition); return locale.left(dashPosition);
} }
static String removeLastComponent(const String& name) static LCID LCIDFromLocaleInternal(LCID userDefaultLCID, const String& userDefaultLanguageCode, const String& locale)
{
size_t lastSeparator = name.reverseFind('-');
if (lastSeparator == kNotFound)
return emptyString();
return name.left(lastSeparator);
}
static void ensureNameToLCIDMap(NameToLCIDMap& map)
{
if (!map.isEmpty())
return;
// http://www.microsoft.com/resources/msdn/goglobal/default.mspx
// We add only locales used in layout tests for now.
map.add("ar", 0x0001);
map.add("ar-eg", 0x0C01);
map.add("de", 0x0007);
map.add("de-de", 0x0407);
map.add("el", 0x0008);
map.add("el-gr", 0x0408);
map.add("en", 0x0009);
map.add("en-gb", 0x0809);
map.add("en-us", 0x0409);
map.add("fr", 0x000C);
map.add("fr-fr", 0x040C);
map.add("he", 0x000D);
map.add("he-il", 0x040D);
map.add("hi", 0x0039);
map.add("hi-in", 0x0439);
map.add("ja", 0x0011);
map.add("ja-jp", 0x0411);
map.add("ko", 0x0012);
map.add("ko-kr", 0x0412);
map.add("ru", 0x0019);
map.add("ru-ru", 0x0419);
map.add("zh-cn", 0x0804);
map.add("zh-tw", 0x0404);
}
// Fallback implementation of LocaleNameToLCID API. This is used for
// testing on Windows XP.
// FIXME: Remove this, ensureNameToLCIDMap, and removeLastComponent when we drop
// Windows XP support.
static LCID WINAPI convertLocaleNameToLCID(LPCWSTR name, DWORD)
{
if (!name || !name[0])
return LOCALE_USER_DEFAULT;
DEFINE_STATIC_LOCAL(NameToLCIDMap, map, ());
ensureNameToLCIDMap(map);
String localeName = String(name).replace('_', '-');
localeName = localeName.lower();
do {
NameToLCIDMap::const_iterator iterator = map.find(localeName);
if (iterator != map.end())
return iterator->value;
localeName = removeLastComponent(localeName);
} while (!localeName.isEmpty());
return LOCALE_USER_DEFAULT;
}
static LCID LCIDFromLocaleInternal(LCID userDefaultLCID, const String& userDefaultLanguageCode, LocaleNameToLCIDPtr localeNameToLCID, const String& locale)
{ {
String localeLanguageCode = extractLanguageCode(locale); String localeLanguageCode = extractLanguageCode(locale);
if (equalIgnoringCase(localeLanguageCode, userDefaultLanguageCode)) if (equalIgnoringCase(localeLanguageCode, userDefaultLanguageCode))
return userDefaultLCID; return userDefaultLCID;
return localeNameToLCID(locale.charactersWithNullTermination().data(), 0); return ::LocaleNameToLCID(locale.charactersWithNullTermination().data(), 0);
} }
static LCID LCIDFromLocale(const String& locale, bool defaultsForLocale) static LCID LCIDFromLocale(const String& locale, bool defaultsForLocale)
{ {
// LocaleNameToLCID() is available since Windows Vista.
LocaleNameToLCIDPtr localeNameToLCID = reinterpret_cast<LocaleNameToLCIDPtr>(::GetProcAddress(::GetModuleHandle(L"kernel32"), "LocaleNameToLCID"));
if (!localeNameToLCID)
localeNameToLCID = convertLocaleNameToLCID;
// According to MSDN, 9 is enough for LOCALE_SISO639LANGNAME. // According to MSDN, 9 is enough for LOCALE_SISO639LANGNAME.
const size_t languageCodeBufferSize = 9; const size_t languageCodeBufferSize = 9;
WCHAR lowercaseLanguageCode[languageCodeBufferSize]; WCHAR lowercaseLanguageCode[languageCodeBufferSize];
::GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SISO639LANGNAME | (defaultsForLocale ? LOCALE_NOUSEROVERRIDE : 0), lowercaseLanguageCode, languageCodeBufferSize); ::GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SISO639LANGNAME | (defaultsForLocale ? LOCALE_NOUSEROVERRIDE : 0), lowercaseLanguageCode, languageCodeBufferSize);
String userDefaultLanguageCode = String(lowercaseLanguageCode); String userDefaultLanguageCode = String(lowercaseLanguageCode);
LCID lcid = LCIDFromLocaleInternal(LOCALE_USER_DEFAULT, userDefaultLanguageCode, localeNameToLCID, locale); LCID lcid = LCIDFromLocaleInternal(LOCALE_USER_DEFAULT, userDefaultLanguageCode, locale);
if (!lcid) if (!lcid)
lcid = LCIDFromLocaleInternal(LOCALE_USER_DEFAULT, userDefaultLanguageCode, localeNameToLCID, defaultLanguage()); lcid = LCIDFromLocaleInternal(LOCALE_USER_DEFAULT, userDefaultLanguageCode, defaultLanguage());
return lcid; return lcid;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment