LibreOffice Module i18nlangtag (master) 1
languagetag.hxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 */
9
10#ifndef INCLUDED_I18NLANGTAG_LANGUAGETAG_HXX
11#define INCLUDED_I18NLANGTAG_LANGUAGETAG_HXX
12
13#include <sal/config.h>
14#include <rtl/locale.h>
15#include <rtl/ustring.hxx>
16#include <com/sun/star/lang/Locale.hpp>
18#include <i18nlangtag/lang.h>
19
20#include <memory>
21#include <string_view>
22#include <vector>
23
35#define I18NLANGTAG_QLT_ASCII "qlt"
36inline constexpr OUStringLiteral I18NLANGTAG_QLT = u"qlt";
37
38
39class LanguageTagImpl;
40
41
53{
54 friend class LanguageTagImpl;
55
56public:
57
67 enum class ScriptType
68 {
69 UNKNOWN = 0,
70 WESTERN = 1, // Copies css::i18n::ScriptType for strong types
71 CJK = 2,
72 CTL = 3,
73 RTL = 4 // implies CTL
74 };
75
89 explicit LanguageTag( const OUString & rBcp47LanguageTag, bool bCanonicalize = false );
90
92 explicit LanguageTag( const css::lang::Locale & rLocale );
93
95 explicit LanguageTag( LanguageType nLanguage );
96
103 explicit LanguageTag( const OUString& rBcp47, const OUString& rLanguage,
104 std::u16string_view rScript, const OUString& rCountry );
105
110 explicit LanguageTag( const rtl_Locale & rLocale );
111
112 ~LanguageTag();
113
114 LanguageTag(LanguageTag const &) = default;
116 LanguageTag & operator =(LanguageTag const &) = default;
118
126 const OUString & getBcp47( bool bResolveSystem = true ) const;
127
134 OUString getBcp47MS() const;
135
150 const css::lang::Locale & getLocale( bool bResolveSystem = true ) const;
151
159 LanguageType getLanguageType( bool bResolveSystem = true ) const;
160
173 void getIsoLanguageScriptCountry( OUString& rLanguage,
174 OUString& rScript, OUString& rCountry ) const;
175
180 OUString getLanguage() const;
181
189 OUString getScript() const;
190
198 OUString getLanguageAndScript() const;
199
205 OUString getCountry() const;
206
215 OUString getVariants() const;
216
228 OUString getGlibcLocaleString( std::u16string_view rEncoding ) const;
229
232 bool hasScript() const;
233
245 bool isIsoLocale() const;
246
255 bool isIsoODF() const;
256
263 bool isValidBcp47() const;
264
267 bool isSystemLocale() const { return mbSystemLocale;}
268
271
273 void setScriptType(ScriptType st);
274
276 LanguageTag & reset( const OUString & rBcp47LanguageTag );
277
279 LanguageTag & reset( const css::lang::Locale & rLocale );
280
282 LanguageTag & reset( LanguageType nLanguage );
283
284
291 LanguageTag & makeFallback();
292
327 ::std::vector< OUString > getFallbackStrings( bool bIncludeFullBcp47 ) const;
328
329
365 static ::std::vector< OUString >::const_iterator getFallback( const ::std::vector< OUString > & rList,
366 const OUString & rReference );
367
368
391 static ::std::vector< css::lang::Locale >::const_iterator getMatchingFallback(
392 const ::std::vector< css::lang::Locale > & rList,
393 const css::lang::Locale & rReference );
394
395
401 bool equals( const LanguageTag & rLanguageTag ) const;
402
409 bool operator==( const LanguageTag & rLanguageTag ) const;
410
417 bool operator!=( const LanguageTag & rLanguageTag ) const;
418
423 bool operator<( const LanguageTag & rLanguageTag ) const;
424
432 static css::lang::Locale convertToLocale( LanguageType nLangID, bool bResolveSystem = true );
433
441 static LanguageType convertToLanguageType( const css::lang::Locale& rLocale, bool bResolveSystem = true );
442
448 static OUString convertToBcp47( LanguageType nLangID );
449
457 static OUString convertToBcp47( const css::lang::Locale& rLocale, bool bResolveSystem = true );
458
471 static css::lang::Locale convertToLocale( const OUString& rBcp47, bool bResolveSystem = true );
472
483 static LanguageType convertToLanguageType( const OUString& rBcp47 );
484
496 static LanguageType convertToLanguageTypeWithFallback( const OUString& rBcp47 );
497
509 static css::lang::Locale convertToLocaleWithFallback( const OUString& rBcp47 );
510
516 static LanguageType convertToLanguageTypeWithFallback( const css::lang::Locale& rLocale );
517
520 {
521 ALLOW = 0,
523 ALLOW_ART_X
525 };
526
544 static bool isValidBcp47( const OUString& rString, OUString* o_pCanonicalized,
545 PrivateUse ePrivateUse = PrivateUse::ALLOW );
546
548 static bool isOnTheFlyID( LanguageType nLang );
549 static ScriptType getOnTheFlyScriptType( LanguageType nLang );
550
552 static void setConfiguredSystemLanguage( LanguageType nLang );
553
555 static void disable_lt_tag_parse();
556
557 typedef std::shared_ptr< LanguageTagImpl > ImplPtr;
558
559private:
560
561 mutable css::lang::Locale maLocale;
562 mutable OUString maBcp47;
566 mutable bool mbInitializedBcp47 : 1;
567 mutable bool mbInitializedLocale : 1;
568 mutable bool mbInitializedLangID : 1;
569 bool mbIsFallback : 1;
570
571 LanguageTagImpl* getImpl();
572 LanguageTagImpl const* getImpl() const;
573 ImplPtr registerImpl() const;
574 void syncFromImpl();
575 void syncVarsFromRawImpl() const;
576 void syncVarsFromImpl() const;
577
578 void convertLocaleToLang();
580 void convertBcp47ToLang();
581 void convertLangToLocale();
582
583 void convertFromRtlLocale();
584
589 bool synCanonicalize();
590
591 void resetVars();
592
593 static bool isIsoLanguage( const OUString& rLanguage );
594 static bool isIsoScript( const OUString& rScript );
595 static bool isIsoCountry( const OUString& rRegion );
596
597};
598
599#endif // INCLUDED_I18NLANGTAG_LANGUAGETAG_HXX
600
601/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
#define WESTERN
bool hasScript() const
bool convertLocaleToLang(bool bAllowOnTheFlyID)
void convertLangToLocale()
bool synCanonicalize()
Canonicalize if not yet done and synchronize initialized conversions.
bool isIsoODF() const
OUString const & getGlibcLocaleString() const
static OUString convertToBcp47(const css::lang::Locale &rLocale)
Convert Locale to BCP 47 string without resolving system and creating temporary LanguageTag instances...
friend class LanguageTag
OUString const & getLanguage() const
LanguageTagImpl & operator=(const LanguageTagImpl &rLanguageTagImpl)
OUString const & getScript() const
OUString const & getCountry() const
LanguageTag::ScriptType getScriptType() const
OUString const & getVariants() const
OUString const & getBcp47() const
bool isValidBcp47() const
void convertBcp47ToLocale()
void setScriptType(LanguageTag::ScriptType st)
void convertBcp47ToLang()
bool isIsoLocale() const
Wrapper for liblangtag BCP 47 language tags, MS-LangIDs, locales and conversions in between.
Definition: languagetag.hxx:53
bool isSystemLocale() const
If this tag was constructed as an empty tag denoting the system locale.
css::lang::Locale maLocale
ImplPtr mpImpl
bool mbSystemLocale
PrivateUse
Enums to be used with isValidBcp47().
@ DISALLOW
Disallow all private-use and 'qlt' local-use, other 'qaa' to 'qtz' local-use are allowed.
bool mbInitializedBcp47
OUString maBcp47
ScriptType
ScriptType for a language.
Definition: languagetag.hxx:68
bool mbInitializedLangID
bool mbInitializedLocale
LanguageType mnLangID
std::shared_ptr< LanguageTagImpl > ImplPtr
LanguageTag(LanguageTag const &)=default
LanguageTag(LanguageTag &&)=default
float u
UNKNOWN
#define I18NLANGTAG_DLLPUBLIC
constexpr OUStringLiteral I18NLANGTAG_QLT
Definition: languagetag.hxx:36
ScriptType
const LanguageTag & getLocale()
#define SAL_WARN_UNUSED
bool operator<(const wwFont &r1, const wwFont &r2)
bool operator!=(const XclExpString &rLeft, const XclExpString &rRight)
bool operator==(const XclFontData &rLeft, const XclFontData &rRight)