summaryrefslogtreecommitdiff
path: root/i18nlangtag/source
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2022-08-31 21:54:51 +0200
committerEike Rathke <erack@redhat.com>2022-09-01 11:30:56 +0200
commit24d382a18ec2ade0d9e9b9c6e6c3e86bed6cde14 (patch)
tree5ba1b255428b67e969319882aa5f0c2db7d403a2 /i18nlangtag/source
parentebb73e9e220433be9326dde4ac2284eba5e42558 (diff)
Resolves: tdf#150370 Accept 'art-x-...' private-use input in language box
... for artificial constructed languages. Change-Id: Ifd0f2ca63738eb9bbe78361cd3fdf507f3e397f5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139135 Reviewed-by: Eike Rathke <erack@redhat.com> Tested-by: Jenkins
Diffstat (limited to 'i18nlangtag/source')
-rw-r--r--i18nlangtag/source/languagetag/languagetag.cxx21
1 files changed, 14 insertions, 7 deletions
diff --git a/i18nlangtag/source/languagetag/languagetag.cxx b/i18nlangtag/source/languagetag/languagetag.cxx
index 0b1ab1ac5a3e..239215a187c1 100644
--- a/i18nlangtag/source/languagetag/languagetag.cxx
+++ b/i18nlangtag/source/languagetag/languagetag.cxx
@@ -2868,28 +2868,35 @@ bool LanguageTag::isValidBcp47( const OUString& rString, OUString* o_pCanonicali
bValid = true;
if (ePrivateUse != PrivateUse::ALLOW)
{
- const lt_string_t* pPrivate = lt_tag_get_privateuse( aVar.mpLangtag);
- if (pPrivate && lt_string_length( pPrivate) > 0)
- bValid = false;
- else
+ do
{
+ const char* pLang = nullptr;
const lt_lang_t* pLangT = lt_tag_get_language( aVar.mpLangtag);
if (pLangT)
{
- const char* pLang = lt_lang_get_tag( pLangT);
+ pLang = lt_lang_get_tag( pLangT);
if (pLang && strcmp( pLang, I18NLANGTAG_QLT_ASCII) == 0)
{
- // Disallow 'qlt' privateuse code to prevent
+ // Disallow 'qlt' localuse code to prevent
// confusion with our internal usage.
bValid = false;
+ break;
}
}
+ if (ePrivateUse == PrivateUse::ALLOW_ART_X && pLang && strcmp( pLang, "art") == 0)
+ {
+ // Allow anything 'art' which includes 'art-x-...' and 'art-Latn-x-...'.
+ break;
+ }
+ const lt_string_t* pPrivate = lt_tag_get_privateuse( aVar.mpLangtag);
+ if (pPrivate && lt_string_length( pPrivate) > 0)
+ bValid = false;
}
+ while (false);
}
if (o_pCanonicalized)
*o_pCanonicalized = OUString::createFromAscii( pTag);
free( pTag);
- return bValid;
}
}
else