bug 195093 : modernize |GetDefaultCharsetForLocale| (use nsACString). r=darin, sr=bz

This commit is contained in:
jshin%mailaps.org 2003-07-22 23:46:38 +00:00
parent d16b07ec3e
commit c1c03f8f14
13 changed files with 83 additions and 88 deletions

View File

@ -184,11 +184,10 @@ nsresult nsCollationMac::Initialize(nsILocale* locale)
nsCOMPtr <nsIPlatformCharset> platformCharset = do_GetService(NS_PLATFORMCHARSET_CONTRACTID, &res);
if (NS_SUCCEEDED(res)) {
PRUnichar* mappedCharset = NULL;
res = platformCharset->GetDefaultCharsetForLocale(aLocale.get(), &mappedCharset);
if (NS_SUCCEEDED(res) && mappedCharset) {
res = mCollation->SetCharset(NS_LossyConvertUCS2toASCII(mappedCharset).get());
nsMemory::Free(mappedCharset);
nsCAutoString mappedCharset;
res = platformCharset->GetDefaultCharsetForLocale(aLocale.get(), mappedCharset);
if (NS_SUCCEEDED(res)) {
res = mCollation->SetCharset(mappedCharset.get());
}
}
}

View File

@ -302,11 +302,10 @@ nsresult nsDateTimeFormatMac::Initialize(nsILocale* locale)
nsCOMPtr <nsIPlatformCharset> platformCharset = do_GetService(NS_PLATFORMCHARSET_CONTRACTID, &res);
if (NS_SUCCEEDED(res)) {
PRUnichar* mappedCharset = NULL;
res = platformCharset->GetDefaultCharsetForLocale(mLocale.get(), &mappedCharset);
if (NS_SUCCEEDED(res) && mappedCharset) {
mCharset.AssignWithConversion(mappedCharset);
nsMemory::Free(mappedCharset);
nsCAutoString mappedCharset;
res = platformCharset->GetDefaultCharsetForLocale(mLocale.get(), mappedCharset);
if (NS_SUCCEEDED(res)) {
mCharset = mappedCharset;
}
// get a system charset (used when getting date/time strings as default)

View File

@ -158,11 +158,10 @@ nsresult nsCollationUnix::Initialize(nsILocale* locale)
nsCOMPtr <nsIPlatformCharset> platformCharset = do_GetService(NS_PLATFORMCHARSET_CONTRACTID, &res);
if (NS_SUCCEEDED(res)) {
PRUnichar* mappedCharset = NULL;
res = platformCharset->GetDefaultCharsetForLocale(aLocale.get(), &mappedCharset);
if (NS_SUCCEEDED(res) && mappedCharset) {
mCollation->SetCharset(NS_LossyConvertUCS2toASCII(mappedCharset).get());
nsMemory::Free(mappedCharset);
nsCAutoString mappedCharset;
res = platformCharset->GetDefaultCharsetForLocale(aLocale.get(), mappedCharset);
if (NS_SUCCEEDED(res)) {
mCollation->SetCharset(mappedCharset.get());
}
}
}

View File

@ -116,13 +116,10 @@ nsresult nsDateTimeFormatUnix::Initialize(nsILocale* locale)
nsCOMPtr <nsIPlatformCharset> platformCharset = do_GetService(NS_PLATFORMCHARSET_CONTRACTID, &res);
if (NS_SUCCEEDED(res)) {
PRUnichar* mappedCharset = NULL;
res = platformCharset->GetDefaultCharsetForLocale(mLocale.get(), &mappedCharset);
if (NS_SUCCEEDED(res) && mappedCharset) {
// XXX hacky, nsIPlatformCharset::GetDefaultCharsetForLocale
// should return a nsACString&
CopyUCS2toASCII(nsDependentString(mappedCharset), mCharset);
nsMemory::Free(mappedCharset);
nsCAutoString mappedCharset;
res = platformCharset->GetDefaultCharsetForLocale(mLocale.get(), mappedCharset);
if (NS_SUCCEEDED(res)) {
mCharset = mappedCharset;
}
}
}

View File

@ -129,11 +129,10 @@ nsresult nsCollationWin::Initialize(nsILocale* locale)
nsCOMPtr <nsIPlatformCharset> platformCharset = do_GetService(NS_PLATFORMCHARSET_CONTRACTID, &res);
if (NS_SUCCEEDED(res)) {
PRUnichar* mappedCharset = NULL;
res = platformCharset->GetDefaultCharsetForLocale(aLocale.get(), &mappedCharset);
if (NS_SUCCEEDED(res) && mappedCharset) {
mCollation->SetCharset(NS_LossyConvertUCS2toASCII(mappedCharset).get());
nsMemory::Free(mappedCharset);
nsCAutoString mappedCharset;
res = platformCharset->GetDefaultCharsetForLocale(aLocale.get(), mappedCharset);
if (NS_SUCCEEDED(res)) {
mCollation->SetCharset(mappedCharset.get());
}
}
}

View File

@ -74,7 +74,7 @@ public:
NS_IMETHOD GetCharset(nsPlatformCharsetSel selector, nsACString& oResult) = 0;
NS_IMETHOD GetDefaultCharsetForLocale(const PRUnichar* localeName, PRUnichar** _retValue) = 0;
NS_IMETHOD GetDefaultCharsetForLocale(const PRUnichar* localeName, nsACString& oResult) = 0;
};

View File

@ -59,9 +59,9 @@ nsPlatformCharset::GetCharset(nsPlatformCharsetSel selector, nsACString& aResult
}
NS_IMETHODIMP
nsPlatformCharset::GetDefaultCharsetForLocale(const PRUnichar* localeName, PRUnichar** _retValue)
nsPlatformCharset::GetDefaultCharsetForLocale(const PRUnichar* localeName, nsACString& aResult)
{
*_retValue = ToNewUnicode(mCharset);
aResult = mCharset;
return NS_OK;
}

View File

@ -153,25 +153,25 @@ nsPlatformCharset::GetCharset(nsPlatformCharsetSel selector, nsACString& oResult
}
NS_IMETHODIMP
nsPlatformCharset::GetDefaultCharsetForLocale(const PRUnichar* localeName, PRUnichar** _retValue)
nsPlatformCharset::GetDefaultCharsetForLocale(const PRUnichar* localeName, nsACString &oResult)
{
nsCOMPtr<nsIMacLocale> pMacLocale;
nsAutoString localeAsString(localeName);
nsCAutoString charset(NS_LITERAL_CSTRING("x-mac-roman"));
short script, language, region;
nsresult rv;
nsCOMPtr<nsIMacLocale> pMacLocale;
pMacLocale = do_CreateInstance(NS_MACLOCALE_CONTRACTID, &rv);
if (NS_SUCCEEDED(rv)) {
nsAutoString localeAsString(localeName);
short script, language, region;
rv = pMacLocale->GetPlatformLocale(&localeAsString, &script, &language, &region);
if (NS_SUCCEEDED(rv)) {
rv = MapToCharset(script, region, charset);
if (NS_SUCCEEDED(MapToCharset(script, region, oResult))) {
return NS_OK;
}
}
}
*_retValue = ToNewUnicode(charset);
NS_ENSURE_TRUE(*_retValue, NS_ERROR_OUT_OF_MEMORY);
return rv;
// fallback
oResult.Assign(NS_LITERAL_CSTRING("x-mac-roman"));
retrun NS_SUCCESS_USING_FALLBACK_LOCALE;
}
NS_IMETHODIMP

View File

@ -134,8 +134,9 @@ nsPlatformCharset::GetCharset(nsPlatformCharsetSel selector,
}
NS_IMETHODIMP
nsPlatformCharset::GetDefaultCharsetForLocale(const PRUnichar* localeName, PRUnichar** _retValue)
nsPlatformCharset::GetDefaultCharsetForLocale(const PRUnichar* localeName, nsACString &oResult)
{
oResult.Truncate();
return NS_OK;
}

View File

@ -51,7 +51,7 @@ public:
NS_IMETHOD Init();
NS_IMETHOD GetCharset(nsPlatformCharsetSel selector, nsACString& oResult);
NS_IMETHOD GetDefaultCharsetForLocale(const PRUnichar* localeName, PRUnichar** _retValue);
NS_IMETHOD GetDefaultCharsetForLocale(const PRUnichar* localeName, nsACString& oResult);
private:
nsCString mCharset;

View File

@ -124,6 +124,7 @@ nsPlatformCharset::ConvertLocaleToCharsetUsingDeprecatedConfig(nsAutoString& loc
}
NS_ASSERTION(0, "unable to convert locale to charset using deprecated config");
mCharset.Assign(NS_LITERAL_CSTRING("ISO-8859-1"));
oResult.Assign(NS_LITERAL_STRING("ISO-8859-1"));
return NS_SUCCESS_USING_FALLBACK_LOCALE;
}
@ -152,7 +153,7 @@ nsPlatformCharset::GetCharset(nsPlatformCharsetSel selector, nsACString& oResult
}
NS_IMETHODIMP
nsPlatformCharset::GetDefaultCharsetForLocale(const PRUnichar* localeName, PRUnichar** _retValue)
nsPlatformCharset::GetDefaultCharsetForLocale(const PRUnichar* localeName, nsACString &oResult)
{
nsAutoString localeNameAsString(localeName);
@ -163,7 +164,7 @@ nsPlatformCharset::GetDefaultCharsetForLocale(const PRUnichar* localeName, PRUni
if (mLocale.Equals(localeNameAsString) ||
// support the 4.x behavior
(mLocale.EqualsIgnoreCase("en_US") && localeNameAsString.EqualsIgnoreCase("C"))) {
*_retValue = ToNewUnicode(mCharset);
oResult = mCharset;
return NS_OK;
}
@ -176,8 +177,12 @@ nsPlatformCharset::GetDefaultCharsetForLocale(const PRUnichar* localeName, PRUni
// http://oss.software.ibm.com/icu/
//
NS_ASSERTION(0, "GetDefaultCharsetForLocale: need to add multi locale support");
#ifdef DEBUG_jungshik
printf("localeName=%s mCharset=%s\n", NS_ConvertUCS2toUTF8(localeName).get(),
mCharset.get());
#endif
// until we add multi locale support: use the the charset of the user's locale
*_retValue = ToNewUnicode(mCharset);
oResult = mCharset;
return NS_SUCCESS_USING_FALLBACK_LOCALE;
#endif
@ -186,16 +191,15 @@ nsPlatformCharset::GetDefaultCharsetForLocale(const PRUnichar* localeName, PRUni
// using the deprecated locale to charset mapping
//
nsAutoString localeStr(localeName);
nsString charset;
nsAutoString charset;
nsresult res = ConvertLocaleToCharsetUsingDeprecatedConfig(localeStr, charset);
if (NS_SUCCEEDED(res)) {
*_retValue = ToNewUnicode(charset);
LossyCopyUTF16toASCII(charset, oResult); // charset name is always ASCII.
return res; // succeeded
}
NS_ASSERTION(0, "unable to convert locale to charset using deprecated config");
charset.Assign(NS_LITERAL_STRING("ISO-8859-1"));
*_retValue = ToNewUnicode(charset);
oResult.Assign(NS_LITERAL_CSTRING("ISO-8859-1"));
return NS_SUCCESS_USING_FALLBACK_LOCALE;
}

View File

@ -1,4 +1,4 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
@ -132,34 +132,32 @@ nsPlatformCharset::GetCharset(nsPlatformCharsetSel selector,
}
NS_IMETHODIMP
nsPlatformCharset::GetDefaultCharsetForLocale(const PRUnichar* localeName, PRUnichar** _retValue)
nsPlatformCharset::GetDefaultCharsetForLocale(const PRUnichar* localeName, nsACString& oResult)
{
nsCOMPtr<nsIWin32Locale> winLocale;
LCID localeAsLCID;
char acp_name[6];
nsCAutoString charset;
nsAutoString localeAsNSString(localeName);
//
// convert locale name to a code page (through the LCID)
//
nsresult result;
winLocale = do_CreateInstance(NS_WIN32LOCALE_CONTRACTID, &result);
result = winLocale->GetPlatformLocale(&localeAsNSString,&localeAsLCID);
nsresult rv;
oResult.Truncate();
if (NS_FAILED(result)) { *_retValue = ToNewUnicode(charset); return result; }
winLocale = do_CreateInstance(NS_WIN32LOCALE_CONTRACTID, &rv);
if (NS_FAILED(rv)) { return rv; }
if (GetLocaleInfo(localeAsLCID,LOCALE_IDEFAULTANSICODEPAGE,acp_name,sizeof(acp_name))==0) {
*_retValue = ToNewUnicode(charset);
rv = winLocale->GetPlatformLocale(&localeAsNSString, &localeAsLCID);
if (NS_FAILED(rv)) { return rv; }
if (GetLocaleInfo(localeAsLCID, LOCALE_IDEFAULTANSICODEPAGE, acp_name, sizeof(acp_name))==0) {
return NS_ERROR_FAILURE;
}
nsAutoString acp_key; acp_key.Assign(NS_LITERAL_STRING("acp."));
acp_key.AppendWithConversion(acp_name);
result = MapToCharset(acp_key,charset);
*_retValue = ToNewUnicode(charset);
return result;
return MapToCharset(acp_key, oResult);
}
NS_IMETHODIMP

View File

@ -1,4 +1,4 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
@ -54,32 +54,31 @@ main(int argc, const char** argv)
nsCOMPtr<nsILocale> locale;
nsCOMPtr<nsIPlatformCharset> platform_charset;
nsString locale_category(NS_LITERAL_STRING("NSILOCALE_MESSAGES"));
PRUnichar* category_value, *charset;
nsString categoryAsNSString, charsetAsNSString;
PRUnichar* category_value;
nsCAutoString charset;
nsString categoryAsNSString;
nsresult rv = nsComponentManager::CreateInstance(NS_PLATFORMCHARSET_CONTRACTID,NULL,kPlatformCharsetIID,getter_AddRefs(platform_charset));
rv = nsComponentManager::CreateInstance(kLocaleServiceCID,NULL,kLocaleServiceIID,getter_AddRefs(locale_service));
nsresult rv = nsComponentManager::CreateInstance(NS_PLATFORMCHARSET_CONTRACTID, NULL, kPlatformCharsetIID, getter_AddRefs(platform_charset));
rv = nsComponentManager::CreateInstance(kLocaleServiceCID, NULL, kLocaleServiceIID, getter_AddRefs(locale_service));
if (NS_FAILED(rv)) return -1;
rv = locale_service->GetSystemLocale(getter_AddRefs(locale));
if (NS_FAILED(rv)) return -1;
rv = locale->GetCategory(locale_category.get(),&category_value);
rv = locale->GetCategory(locale_category.get(), &category_value);
if (NS_FAILED(rv)) return -1;
rv = platform_charset->GetDefaultCharsetForLocale(category_value,&charset);
rv = platform_charset->GetDefaultCharsetForLocale(category_value, charset);
if (NS_FAILED(rv)) return -1;
charsetAsNSString = charset;
categoryAsNSString = category_value;
printf("DefaultCharset for %s is %s\n", NS_LossyConvertUCS2toASCII(categoryAsNSString).get(), NS_LossyConvertUCS2toASCII(charsetAsNSString).get());
printf("DefaultCharset for %s is %s\n", NS_LossyConvertUTF16toASCII(categoryAsNSString).get(), charset.get());
categoryAsNSString.Assign(NS_LITERAL_STRING("en-US"));
rv = platform_charset->GetDefaultCharsetForLocale(categoryAsNSString.get(),&charset);
rv = platform_charset->GetDefaultCharsetForLocale(categoryAsNSString.get(), charset);
if (NS_FAILED(rv)) return -1;
charsetAsNSString = charset;
printf("DefaultCharset for %s is %s\n", NS_LossyConvertUCS2toASCII(categoryAsNSString).get(), NS_LossyConvertUCS2toASCII(charsetAsNSString).get());
printf("DefaultCharset for %s is %s\n", NS_LossyConvertUTF16toASCII(categoryAsNSString).get(), charset.get());
return 0;
}