diff options
author | Martin Hosken <martin_hosken@sil.org> | 2016-11-16 00:53:59 +0000 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2016-11-17 17:16:52 +0000 |
commit | 6b35e804198ac45386805e80a3d413ed3405c3b4 (patch) | |
tree | 1132517e5e139e6387016e04d20a5660e8c39064 /i18nlangtag/source/languagetag/languagetag.cxx | |
parent | 3b94229fb74dfe43e2b7349d6f580dc375f28814 (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.cxx | 45 |
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; |