summaryrefslogtreecommitdiffstats
path: root/i18npool
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2012-06-19 13:48:45 +0100
committerCaolán McNamara <caolanm@redhat.com>2012-06-19 14:11:50 +0100
commitd9e4c74811855de15f1bf2045c2c9b061a2d4dc6 (patch)
tree895cbcd595094e9fd2621a943fc83bb004b429c9 /i18npool
parentRelated: #i89077# Singapore uses simplified chinese (diff)
downloadcore-d9e4c74811855de15f1bf2045c2c9b061a2d4dc6.tar.gz
core-d9e4c74811855de15f1bf2045c2c9b061a2d4dc6.zip
merge together hand-crafted traditional/simplified chinese tests
merge together a gadzillion hand-crafted isSimpleChinese/isTraditionalChinese/isKoreanVariants/isCJK implementations which should fix a goodly amount of them add a MsLangId::isFamilyNameFirst for locales where family name appears first while I'm at it. Change-Id: I65377793be037d16fe7250cd7450b28aec689e83
Diffstat (limited to 'i18npool')
-rw-r--r--i18npool/inc/i18npool/mslangid.hxx23
-rw-r--r--i18npool/source/characterclassification/characterclassificationImpl.cxx3
-rw-r--r--i18npool/source/collator/collatorImpl.cxx6
-rw-r--r--i18npool/source/isolang/mslangid.cxx59
-rw-r--r--i18npool/source/nativenumber/nativenumbersupplier.cxx4
5 files changed, 86 insertions, 9 deletions
diff --git a/i18npool/inc/i18npool/mslangid.hxx b/i18npool/inc/i18npool/mslangid.hxx
index f1da9814cf11..7fb3d8dbfd2b 100644
--- a/i18npool/inc/i18npool/mslangid.hxx
+++ b/i18npool/inc/i18npool/mslangid.hxx
@@ -184,6 +184,29 @@ public:
/** Whether locale has a Right-To-Left orientation. */
static bool isRightToLeft( LanguageType nLang );
+ /** Whether locale is a CJK locale */
+ static bool isCJK( LanguageType nLang );
+
+ /** Whether locale is a chinese locale */
+ static bool isChinese( LanguageType nLang );
+
+ /** Whether locale is a simplified chinese locale */
+ static bool isSimplifiedChinese( LanguageType nLang );
+
+ /** Whether locale is a traditional chinese locale */
+ static bool isTraditionalChinese( LanguageType nLang );
+
+ /** Whether locale is a korean locale */
+ static bool isKorean( LanguageType nLang );
+
+ /** Whether locale is a simplified chinese locale */
+ static bool isSimplifiedChinese( const ::com::sun::star::lang::Locale & rLocale );
+
+ /** Whether locale is a traditional chinese locale */
+ static bool isTraditionalChinese( const ::com::sun::star::lang::Locale & rLocale );
+
+ /** Whether locale is one where family name comes first, e.g. Japan, Hungary, Samoa */
+ static bool isFamilyNameFirst( LanguageType nLang );
/** Whether there are "forbidden characters at start or end of line" in
this locale. CJK locales.
diff --git a/i18npool/source/characterclassification/characterclassificationImpl.cxx b/i18npool/source/characterclassification/characterclassificationImpl.cxx
index 70d1683055fa..df4abe461408 100644
--- a/i18npool/source/characterclassification/characterclassificationImpl.cxx
+++ b/i18npool/source/characterclassification/characterclassificationImpl.cxx
@@ -178,7 +178,6 @@ CharacterClassificationImpl::getLocaleSpecificCharacterClassification(const Loca
}
static sal_Unicode under = (sal_Unicode)'_';
- static OUString tw("TW");
sal_Int32 l = rLocale.Language.getLength();
sal_Int32 c = rLocale.Country.getLength();
sal_Int32 v = rLocale.Variant.getLength();
@@ -197,7 +196,7 @@ CharacterClassificationImpl::getLocaleSpecificCharacterClassification(const Loca
rLocale.Country.compareToAscii("MO") == 0) &&
// if the country code is HK or MO, one more step to try TW.
createLocaleSpecificCharacterClassification(aBuf.append(rLocale.Language).append(under).append(
- tw).makeStringAndClear(), rLocale)) ||
+ "TW").makeStringAndClear(), rLocale)) ||
(l > 0 &&
// load service with name <base>_<lang>
createLocaleSpecificCharacterClassification(rLocale.Language, rLocale))) {
diff --git a/i18npool/source/collator/collatorImpl.cxx b/i18npool/source/collator/collatorImpl.cxx
index 93cc2a6a930d..b76bea6ef853 100644
--- a/i18npool/source/collator/collatorImpl.cxx
+++ b/i18npool/source/collator/collatorImpl.cxx
@@ -195,8 +195,6 @@ CollatorImpl::loadCachedCollator(const lang::Locale& rLocale, const OUString& rS
}
static sal_Unicode under = (sal_Unicode) '_';
- static OUString tw("TW");
- static OUString unicode("Unicode");
sal_Int32 l = rLocale.Language.getLength();
sal_Int32 c = rLocale.Country.getLength();
@@ -215,7 +213,7 @@ CollatorImpl::loadCachedCollator(const lang::Locale& rLocale, const OUString& rS
under).append(rSortAlgorithm).makeStringAndClear(), rSortAlgorithm)) ||
(l > 0 && c > 0 && a > 0 && rLocale.Language == "zh" && (rLocale.Country == "HK" || rLocale.Country == "MO") &&
// if the country code is HK or MO, one more step to try TW.
- createCollator(rLocale, aBuf.append(rLocale.Language).append(under).append(tw).append(under).append(
+ createCollator(rLocale, aBuf.append(rLocale.Language).append(under).append("TW").append(under).append(
rSortAlgorithm).makeStringAndClear(), rSortAlgorithm)) ||
(l > 0 && a > 0 &&
// load service with name <base>_<lang>_<algorithm>
@@ -225,7 +223,7 @@ CollatorImpl::loadCachedCollator(const lang::Locale& rLocale, const OUString& rS
(a > 0 &&
createCollator(rLocale, rSortAlgorithm, rSortAlgorithm)) ||
// load default service with name <base>_Unicode
- createCollator(rLocale, unicode, rSortAlgorithm)) {
+ createCollator(rLocale, "Unicode", rSortAlgorithm)) {
return;
} else {
cachedItem = NULL;
diff --git a/i18npool/source/isolang/mslangid.cxx b/i18npool/source/isolang/mslangid.cxx
index 3cd877e4c91b..206a8c71aa41 100644
--- a/i18npool/source/isolang/mslangid.cxx
+++ b/i18npool/source/isolang/mslangid.cxx
@@ -249,9 +249,54 @@ bool MsLangId::isRightToLeft( LanguageType nLang )
return false;
}
+// static
+bool MsLangId::isSimplifiedChinese( LanguageType nLang )
+{
+ return isChinese(nLang) && !isTraditionalChinese(nLang);
+}
// static
-bool MsLangId::hasForbiddenCharacters( LanguageType nLang )
+bool MsLangId::isSimplifiedChinese( const ::com::sun::star::lang::Locale & rLocale )
+{
+ return rLocale.Language == "zh" && !isTraditionalChinese(rLocale);
+}
+
+// static
+bool MsLangId::isTraditionalChinese( LanguageType nLang )
+{
+ bool bRet = false;
+ switch (nLang)
+ {
+ case LANGUAGE_CHINESE_TRADITIONAL:
+ case LANGUAGE_CHINESE_HONGKONG:
+ case LANGUAGE_CHINESE_MACAU:
+ bRet = true;
+ default:
+ break;
+ }
+ return bRet;
+}
+
+// static
+bool MsLangId::isTraditionalChinese( const ::com::sun::star::lang::Locale & rLocale )
+{
+ return rLocale.Language == "zh" && (rLocale.Country == "TW" || rLocale.Country == "HK" || rLocale.Country == "MO");
+}
+
+//static
+bool MsLangId::isChinese( LanguageType nLang )
+{
+ return MsLangId::getPrimaryLanguage(nLang) == LANGUAGE_CHINESE;
+}
+
+//static
+bool MsLangId::isKorean( LanguageType nLang )
+{
+ return MsLangId::getPrimaryLanguage(nLang) == LANGUAGE_KOREAN;
+}
+
+// static
+bool MsLangId::isCJK( LanguageType nLang )
{
switch (nLang & LANGUAGE_MASK_PRIMARY)
{
@@ -265,6 +310,18 @@ bool MsLangId::hasForbiddenCharacters( LanguageType nLang )
return false;
}
+// static
+bool MsLangId::isFamilyNameFirst( LanguageType nLang )
+{
+ return isCJK(nLang) || nLang == LANGUAGE_HUNGARIAN;
+}
+
+// static
+bool MsLangId::hasForbiddenCharacters( LanguageType nLang )
+{
+ return isCJK(nLang);
+}
+
// static
bool MsLangId::needsSequenceChecking( LanguageType nLang )
diff --git a/i18npool/source/nativenumber/nativenumbersupplier.cxx b/i18npool/source/nativenumber/nativenumbersupplier.cxx
index 2d09dabbfa63..cd3d2ca756e3 100644
--- a/i18npool/source/nativenumber/nativenumbersupplier.cxx
+++ b/i18npool/source/nativenumber/nativenumbersupplier.cxx
@@ -26,7 +26,7 @@
*
************************************************************************/
-
+#include <i18npool/mslangid.hxx>
#include <rtl/ustrbuf.hxx>
#include <sal/macros.h>
#include <nativenumbersupplier.hxx>
@@ -526,7 +526,7 @@ static sal_Int16 sizeof_natnum2 = SAL_N_ELEMENTS(natnum2);
static sal_Int16 SAL_CALL getLanguageNumber( const Locale& rLocale)
{
// return zh_TW for TW, HK and MO, return zh_CN for other zh locales.
- if (isLang("zh")) return (isCtry("TW") || isCtry("HK") || isCtry("MO")) ? 1 : 0;
+ if (isLang("zh")) return MsLangId::isTraditionalChinese(rLocale) ? 1 : 0;
for (sal_Int16 i = 2; i < nbOfLocale; i++)
if (isLang(natnum1Locales[i]))