summaryrefslogtreecommitdiff
path: root/i18nlangtag/source/languagetag/languagetag.cxx
diff options
context:
space:
mode:
authorMartin Hosken <martin_hosken@sil.org>2016-11-16 00:53:59 +0000
committerStephan Bergmann <sbergman@redhat.com>2016-11-17 17:16:52 +0000
commit6b35e804198ac45386805e80a3d413ed3405c3b4 (patch)
tree1132517e5e139e6387016e04d20a5660e8c39064 /i18nlangtag/source/languagetag/languagetag.cxx
parent3b94229fb74dfe43e2b7349d6f580dc375f28814 (diff)
Fix tdf#103855 add language codes and names to language lists from extensions
Rationale for changes to languagetag.hxx can be found in the bug tdf#103855. Change-Id: I7fa7c8a3f7b219ce08df69a3965f544ae156beab Reviewed-on: https://gerrit.libreoffice.org/30882 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'i18nlangtag/source/languagetag/languagetag.cxx')
-rw-r--r--i18nlangtag/source/languagetag/languagetag.cxx45
1 files changed, 45 insertions, 0 deletions
diff --git a/i18nlangtag/source/languagetag/languagetag.cxx b/i18nlangtag/source/languagetag/languagetag.cxx
index f87fe583f64b..899ee5f08e89 100644
--- a/i18nlangtag/source/languagetag/languagetag.cxx
+++ b/i18nlangtag/source/languagetag/languagetag.cxx
@@ -267,6 +267,7 @@ private:
mutable OUString maCachedVariants; ///< cache getVariants()
mutable lt_tag_t* mpImplLangtag; ///< liblangtag pointer
mutable LanguageType mnLangID;
+ mutable LanguageTag::ScriptType meScriptType;
mutable Decision meIsValid;
mutable Decision meIsIsoLocale;
mutable Decision meIsIsoODF;
@@ -288,6 +289,9 @@ private:
OUString const & getVariants() const;
bool hasScript() const;
+ void setScriptType(LanguageTag::ScriptType st);
+ LanguageTag::ScriptType getScriptType() const;
+
bool isIsoLocale() const;
bool isIsoODF() const;
bool isValidBcp47() const;
@@ -364,6 +368,7 @@ private:
/** Convert Locale to BCP 47 string without resolving system and creating
temporary LanguageTag instances. */
static OUString convertToBcp47( const css::lang::Locale& rLocale );
+
};
@@ -373,6 +378,7 @@ LanguageTagImpl::LanguageTagImpl( const LanguageTag & rLanguageTag )
maBcp47( rLanguageTag.maBcp47),
mpImplLangtag( nullptr),
mnLangID( rLanguageTag.mnLangID),
+ meScriptType( LanguageTag::ScriptType::UNKNOWN),
meIsValid( DECISION_DONTKNOW),
meIsIsoLocale( DECISION_DONTKNOW),
meIsIsoODF( DECISION_DONTKNOW),
@@ -400,6 +406,7 @@ LanguageTagImpl::LanguageTagImpl( const LanguageTagImpl & rLanguageTagImpl )
mpImplLangtag( rLanguageTagImpl.mpImplLangtag ?
lt_tag_copy( rLanguageTagImpl.mpImplLangtag) : nullptr),
mnLangID( rLanguageTagImpl.mnLangID),
+ meScriptType( rLanguageTagImpl.meScriptType),
meIsValid( rLanguageTagImpl.meIsValid),
meIsIsoLocale( rLanguageTagImpl.meIsIsoLocale),
meIsIsoODF( rLanguageTagImpl.meIsIsoODF),
@@ -434,6 +441,7 @@ LanguageTagImpl& LanguageTagImpl::operator=( const LanguageTagImpl & rLanguageTa
lt_tag_copy( rLanguageTagImpl.mpImplLangtag) : nullptr;
lt_tag_unref(oldTag);
mnLangID = rLanguageTagImpl.mnLangID;
+ meScriptType = rLanguageTagImpl.meScriptType;
meIsValid = rLanguageTagImpl.meIsValid;
meIsIsoLocale = rLanguageTagImpl.meIsIsoLocale;
meIsIsoODF = rLanguageTagImpl.meIsIsoODF;
@@ -701,6 +709,18 @@ LanguageTag::ImplPtr LanguageTagImpl::registerOnTheFly( LanguageType nRegisterID
return pImpl;
}
+
+LanguageTag::ScriptType LanguageTag::getOnTheFlyScriptType( LanguageType nRegisterID )
+{
+ const MapLangID& rMapLangID = theMapLangID::get();
+ MapLangID::const_iterator itID( rMapLangID.find( nRegisterID));
+ if (itID != rMapLangID.end())
+ return (*itID).second->getScriptType();
+ else
+ return UNKNOWN;
+}
+
+
// static
void LanguageTag::setConfiguredSystemLanguage( LanguageType nLang )
{
@@ -1949,6 +1969,31 @@ bool LanguageTag::hasScript() const
}
+LanguageTag::ScriptType LanguageTagImpl::getScriptType() const
+{
+ return meScriptType;
+}
+
+
+LanguageTag::ScriptType LanguageTag::getScriptType() const
+{
+ return getImpl()->getScriptType();
+}
+
+
+void LanguageTagImpl::setScriptType(LanguageTag::ScriptType st)
+{
+ if (meScriptType == LanguageTag::ScriptType::UNKNOWN) // poor man's clash resolution
+ meScriptType = st;
+}
+
+
+void LanguageTag::setScriptType(LanguageTag::ScriptType st)
+{
+ getImpl()->setScriptType(st);
+}
+
+
bool LanguageTagImpl::cacheSimpleLSCV()
{
OUString aLanguage, aScript, aCountry, aVariants;