23#include <com/sun/star/beans/PropertyValue.hpp>
24#include <com/sun/star/container/XIndexAccess.hpp>
25#include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
34#include <osl/diagnose.h>
45typedef OUString
const * (* MyFuncOUString_Type)( sal_Int16&);
46typedef OUString
const ** (* MyFunc_Type2)( sal_Int16&, sal_Int16& );
47typedef OUString
const *** (* MyFunc_Type3)( sal_Int16&, sal_Int16&, sal_Int16& );
50#ifndef DISABLE_DYNLOADING
346#include "localedata_static.hxx"
360 return comphelper::containerToSequence<CalendarItem>(rCi);
372 rC.MinimumNumberOfDaysForFirstWeek,
388LocaleDataItem SAL_CALL
394 sal_Int16 dataItemCount = 0;
395 OUString
const *dataItem = func(dataItemCount);
420 LocaleDataItem item1;
426LocaleDataItem2 SAL_CALL
432 sal_Int16 dataItemCount = 0;
433 OUString
const *dataItem = func(dataItemCount);
435 assert(dataItemCount >= 18);
437 LocaleDataItem2 item{
456 dataItemCount >= 19 ? dataItem[18] : OUString()
461 LocaleDataItem2 item1;
466#ifndef DISABLE_DYNLOADING
476class lcl_LookupTableHelper
479 lcl_LookupTableHelper();
480 ~lcl_LookupTableHelper();
482 oslGenericFunction getFunctionSymbolByName(
483 const OUString& localeName,
const char* pFunction,
484 std::optional<LocaleDataLookupTableItem>& rOutCachedItem );
496lcl_LookupTableHelper& lcl_LookupTableStatic()
498 static lcl_LookupTableHelper SINGLETON;
502lcl_LookupTableHelper::lcl_LookupTableHelper()
506lcl_LookupTableHelper::~lcl_LookupTableHelper()
508 for (
const LocaleDataLookupTableItem& item :
maLookupTable ) {
513oslGenericFunction lcl_LookupTableHelper::getFunctionSymbolByName(
514 const OUString& localeName,
const char* pFunction,
515 std::optional<LocaleDataLookupTableItem>& rOutCachedItem )
518 bool bFallback = (localeName.indexOf(
cUnder) < 0);
522 aLocale.Language = localeName;
524 if (aFbLocale == aLocale)
532 if (localeName.equalsAscii(
i.pLocale) ||
533 (bFallback && aFallback.equalsAscii(
i.pLocale)))
535#ifndef DISABLE_DYNLOADING
537 std::unique_lock aGuard(
maMutex );
540 if (rCurrent.dllName ==
i.pLib)
542 rOutCachedItem.emplace( rCurrent );
543 rOutCachedItem->localeName =
i.pLocale;
544 OString sSymbolName = OString::Concat(pFunction) +
"_" +
545 rOutCachedItem->localeName;
546 return rOutCachedItem->module->getFunctionSymbol(
547 sSymbolName.getStr());
553 OString sModuleName =
556 OString sModuleName =
559 std::unique_ptr<osl::Module>
module(
new osl::Module());
562 std::unique_lock aGuard(
maMutex );
563 auto pTmpModule =
module.get();
566 OString sSymbolName = OString::Concat(pFunction) +
"_" + rOutCachedItem->localeName;
567 return pTmpModule->getFunctionSymbol(sSymbolName.getStr());
572 (void) rOutCachedItem;
574 if( strcmp(pFunction,
"getAllCalendars") == 0 )
575 return i.getAllCalendars;
576 else if( strcmp(pFunction,
"getAllCurrencies") == 0 )
577 return i.getAllCurrencies;
578 else if( strcmp(pFunction,
"getAllFormats0") == 0 )
579 return i.getAllFormats0;
580 else if( strcmp(pFunction,
"getBreakIteratorRules") == 0 )
581 return i.getBreakIteratorRules;
582 else if( strcmp(pFunction,
"getCollationOptions") == 0 )
583 return i.getCollationOptions;
584 else if( strcmp(pFunction,
"getCollatorImplementation") == 0 )
585 return i.getCollatorImplementation;
586 else if( strcmp(pFunction,
"getContinuousNumberingLevels") == 0 )
587 return i.getContinuousNumberingLevels;
588 else if( strcmp(pFunction,
"getDateAcceptancePatterns") == 0 )
589 return i.getDateAcceptancePatterns;
590 else if( strcmp(pFunction,
"getFollowPageWords") == 0 )
591 return i.getFollowPageWords;
592 else if( strcmp(pFunction,
"getForbiddenCharacters") == 0 )
593 return i.getForbiddenCharacters;
594 else if( strcmp(pFunction,
"getIndexAlgorithm") == 0 )
595 return i.getIndexAlgorithm;
596 else if( strcmp(pFunction,
"getLCInfo") == 0 )
598 else if( strcmp(pFunction,
"getLocaleItem") == 0 )
599 return i.getLocaleItem;
600 else if( strcmp(pFunction,
"getOutlineNumberingLevels") == 0 )
601 return i.getOutlineNumberingLevels;
602 else if( strcmp(pFunction,
"getReservedWords") == 0 )
603 return i.getReservedWords;
604 else if( strcmp(pFunction,
"getSearchOptions") == 0 )
605 return i.getSearchOptions;
606 else if( strcmp(pFunction,
"getTransliterations") == 0 )
607 return i.getTransliterations;
608 else if( strcmp(pFunction,
"getUnicodeScripts") == 0 )
609 return i.getUnicodeScripts;
610 else if( strcmp(pFunction,
"getAllFormats1") == 0 )
611 return i.getAllFormats1;
627#define REF_OFFSET_COUNT 5
633 OUString aLocStr, id;
634 sal_Int32 nLastUnder =
name.lastIndexOf(
cUnder);
636 "LocaleDataImpl::getCalendarItemByName - no '_' or first in name can't be right: " <<
name);
639 aLocStr =
name.copy( 0, nLastUnder);
640 if (nLastUnder + 1 <
name.getLength())
641 id =
name.copy( nLastUnder + 1);
645 if (loc == rLocale) {
650 auto pCal = std::find_if(std::cbegin(cals), std::cend(cals),
651 [&
id](
const Calendar2& rCal) {
return id == rCal.Name; });
652 if (pCal != std::cend(cals))
657 if (!cals.hasElements())
659 ref_cal = cals.getConstArray()[0];
672 return ref_cal.PartitiveMonths;
674 OSL_FAIL(
"LocaleDataImpl::getCalendarItemByName: unhandled REF_* case");
682 OUString
const * allCalendars, sal_Int16 & rnOffset,
683 const sal_Int16 nWhichItem,
const sal_Int16 nCalendar,
687 if ( allCalendars[rnOffset] == std::u16string_view(
u"ref") )
694 const sal_Int32 nSize = allCalendars[nWhichItem][nCalendar];
695 aItems.realloc( nSize);
702 for (CalendarItem2& rItem : asNonConstRange(aItems))
704 rItem = CalendarItem2{ allCalendars[rnOffset],
705 allCalendars[rnOffset+1],
706 allCalendars[rnOffset+2], allCalendars[rnOffset+3]};
712 for (CalendarItem2& rItem : asNonConstRange(aItems))
714 rItem = CalendarItem2{ allCalendars[rnOffset],
715 allCalendars[rnOffset+1],
716 allCalendars[rnOffset+2], OUString()};
721 OSL_FAIL(
"LocaleDataImpl::getCalendarItems: unhandled REF_* case");
731 OUString
const * allCalendars =
nullptr;
736 sal_Int16 calendarsCount = 0;
737 allCalendars = func(calendarsCount);
740 auto calendarsSeqRange = asNonConstRange(calendarsSeq);
742 for(sal_Int16
i = 0;
i < calendarsCount;
i++) {
743 OUString calendarID(allCalendars[offset]);
745 bool defaultCalendar = allCalendars[offset][0] != 0;
748 rLocale, calendarsSeq);
750 rLocale, calendarsSeq);
752 rLocale, calendarsSeq);
754 rLocale, calendarsSeq);
756 rLocale, calendarsSeq);
757 OUString startOfWeekDay(allCalendars[offset]);
759 sal_Int16 minimalDaysInFirstWeek = allCalendars[offset][0];
761 Calendar2 aCalendar(days, months, gmonths, pmonths, eras, startOfWeekDay,
762 minimalDaysInFirstWeek, defaultCalendar, calendarID);
763 calendarsSeqRange[
i] = aCalendar;
777 std::vector<Calendar> aCal1;
778 aCal1.reserve(aCal2.getLength());
779 std::transform(aCal2.begin(), aCal2.end(), std::back_inserter(aCal1),
780 [](
const Calendar2& rCal2) { return downcastCalendar(rCal2); });
791 sal_Int16 currencyCount = 0;
792 OUString
const *allCurrencies = func(currencyCount);
795 auto seqRange = asNonConstRange(seq);
796 for(
int i = 0, nOff = 0;
i < currencyCount;
i++, nOff += 8 ) {
797 seqRange[
i] = Currency2(
799 allCurrencies[nOff+1],
800 allCurrencies[nOff+2],
801 allCurrencies[nOff+3],
802 allCurrencies[nOff+4][0] != 0,
803 allCurrencies[nOff+5][0] != 0,
804 allCurrencies[nOff+6][0],
805 allCurrencies[nOff+7][0] != 0
826 const int SECTIONS = 2;
832 OUString
const *formatArray;
833 sal_Int16 formatCount;
835 FormatSection() : func(
nullptr),
from(
nullptr),
to(
nullptr), formatArray(
nullptr), formatCount(0) {}
840 formatArray = func( formatCount,
from,
to);
845 sal_Int32 formatCount;
846 formatCount =
section[0].getFunc( *
this, rLocale,
"getAllFormats0");
847 formatCount +=
section[1].getFunc( *
this, rLocale,
"getAllFormats1");
850 auto seqRange = asNonConstRange(seq);
852 for (
const FormatSection & s :
section)
854 OUString
const *
const formatArray = s.formatArray;
857 for (
int i = 0, nOff = 0;
i < s.formatCount; ++
i, nOff += 7, ++f)
859 seqRange[f] = FormatElement(
860 formatArray[nOff].replaceAll(s.from, s.to),
861 formatArray[nOff + 1],
862 formatArray[nOff + 2],
863 formatArray[nOff + 3],
864 formatArray[nOff + 4],
865 formatArray[nOff + 5][0],
866 formatArray[nOff + 6][0] != 0);
881 sal_Int16 patternsCount = 0;
882 OUString
const *patternsArray = func( patternsCount );
884 auto seqRange = asNonConstRange(seq);
885 for (sal_Int16
i = 0;
i < patternsCount; ++
i)
887 seqRange[
i] = patternsArray[
i];
898#define COLLATOR_OFFSET_ALGO 0
899#define COLLATOR_OFFSET_DEFAULT 1
900#define COLLATOR_OFFSET_RULE 2
901#define COLLATOR_ELEMENTS 3
908 sal_Int16 collatorCount = 0;
909 OUString
const *collatorArray = func(collatorCount);
910 for(sal_Int16
i = 0;
i < collatorCount;
i++)
924 sal_Int16 collatorCount = 0;
925 OUString
const *collatorArray = func(collatorCount);
927 auto seqRange = asNonConstRange(seq);
928 for(sal_Int16
i = 0;
i < collatorCount;
i++) {
929 seqRange[
i] = Implementation(
946 sal_Int16 optionsCount = 0;
947 OUString
const *optionsArray = func(optionsCount);
949 auto seqRange = asNonConstRange(seq);
950 for(sal_Int16
i = 0;
i < optionsCount;
i++) {
951 seqRange[
i] = optionsArray[
i];
966 sal_Int16 optionsCount = 0;
967 OUString
const *optionsArray = func(optionsCount);
981 return func(indexCount);
988 sal_Int16 indexCount = 0;
989 OUString
const *indexArray =
getIndexArray(rLocale, indexCount);
993 auto seqRange = asNonConstRange(seq);
994 for(sal_Int16
i = 0;
i < indexCount;
i++) {
995 seqRange[
i] = indexArray[
i*5];
1007 sal_Int16 indexCount = 0;
1008 OUString
const *indexArray =
getIndexArray(rLocale, indexCount);
1011 for(sal_Int16
i = 0;
i < indexCount;
i++) {
1012 if (indexArray[
i*5 + 3][0])
1013 return indexArray[
i*5];
1022 sal_Int16 indexCount = 0;
1023 OUString
const *indexArray =
getIndexArray(rLocale, indexCount);
1026 for(sal_Int16
i = 0;
i < indexCount;
i++) {
1027 if (indexArray[
i*5 + 4][0])
1037 sal_Int16 indexCount = 0;
1038 OUString
const *indexArray =
getIndexArray(rLocale, indexCount);
1040 for(sal_Int16
i = 0;
i < indexCount;
i++) {
1041 if (algorithm == indexArray[
i*5])
1042 return indexArray+
i*5;
1052 return indexArray && indexArray[4][0];
1059 return indexArray ? (OUString::Concat(
u"0-9") + indexArray[2]) : OUString();
1066 return indexArray ? indexArray[1] : OUString();
1075 sal_Int16 scriptCount = 0;
1076 OUString
const *scriptArray = func(scriptCount);
1078 auto seqRange = asNonConstRange(seq);
1079 for(sal_Int16
i = 0;
i < scriptCount;
i++) {
1080 seqRange[
i] = UnicodeScript(
o3tl::toInt32(scriptArray[
i].subView(0, 1)) );
1095 sal_Int16 wordCount = 0;
1096 OUString
const *wordArray = func(wordCount);
1110 sal_Int16 transliterationsCount = 0;
1111 const OUString *transliterationsArray = func(transliterationsCount);
1122LanguageCountryInfo SAL_CALL
1128 sal_Int16 LCInfoCount = 0;
1129 OUString
const *LCInfoArray = func(LCInfoCount);
1130 LanguageCountryInfo info{LCInfoArray[0],
1138 LanguageCountryInfo info1;
1145ForbiddenCharacters SAL_CALL
1151 sal_Int16 LCForbiddenCharactersCount = 0;
1152 OUString
const *LCForbiddenCharactersArray = func(LCForbiddenCharactersCount);
1153 assert(LCForbiddenCharactersCount == 3);
1154 ForbiddenCharacters chars{
1155 LCForbiddenCharactersArray[0], LCForbiddenCharactersArray[1]};
1159 ForbiddenCharacters chars1;
1170 sal_Int16 LCForbiddenCharactersCount = 0;
1171 const OUString *LCForbiddenCharactersArray = func(LCForbiddenCharactersCount);
1172 assert(LCForbiddenCharactersCount == 3);
1173 return LCForbiddenCharactersArray[2];
1185 sal_Int16 LCBreakIteratorRuleCount = 0;
1186 OUString
const *LCBreakIteratorRulesArray = func(LCBreakIteratorRuleCount);
1201 sal_Int16 LCReservedWordsCount = 0;
1202 OUString
const *LCReservedWordsArray = func(LCReservedWordsCount);
1222 OUString
const ** p0 = func( nStyles,
nAttributes );
1226 auto pvRange = asNonConstRange(pv);
1227 for(
auto&
i : pvRange ) {
1231 OUString
const ** pStyle = p0;
1232 for(
int i=0;
i<nStyles;
i++ ) {
1233 OUString
const * pAttribute = pStyle[
i];
1234 auto pvElementRange = asNonConstRange(pvRange[
i]);
1236 OUString
const & pString = pAttribute[j];
1237 beans::PropertyValue& rVal = pvElementRange[j];
1239 if( 0 != j && 2 != j )
1241 else if( !pString.isEmpty() )
1242 sVal = pString.copy( 0, 1 );
1247 rVal.Name =
"Prefix";
1248 rVal.Value <<= sVal;
1251 rVal.Name =
"NumberingType";
1252 rVal.Value <<=
static_cast<sal_Int16
>(sVal.toInt32());
1255 rVal.Name =
"Suffix";
1256 rVal.Value <<= sVal;
1259 rVal.Name =
"Transliteration";
1260 rVal.Value <<= sVal;
1263 rVal.Name =
"NatNum";
1264 rVal.Value <<=
static_cast<sal_Int16
>(sVal.toInt32());
1281struct OutlineNumberingLevel_Impl
1297class OutlineNumbering :
public cppu::WeakImplHelper < container::XIndexAccess >
1304 OutlineNumbering(std::unique_ptr<
const OutlineNumberingLevel_Impl[]> pOutlineLevels,
int nLevels);
1307 virtual sal_Int32 SAL_CALL getCount( )
override;
1308 virtual Any SAL_CALL getByIndex( sal_Int32 Index )
override;
1311 virtual Type SAL_CALL getElementType( )
override;
1312 virtual sal_Bool SAL_CALL hasElements( )
override;
1330 OUString
const *** p0 = func( nStyles, nLevels,
nAttributes );
1333 auto aRetRange = asNonConstRange(aRet);
1334 OUString
const *** pStyle = p0;
1335 for(
i=0;
i<nStyles;
i++ )
1339 std::unique_ptr<OutlineNumberingLevel_Impl[]> level(
new OutlineNumberingLevel_Impl[ nLevels+1 ]);
1340 OUString
const ** pLevel = pStyle[
i];
1341 for( j = 0; j < nLevels; j++ )
1343 OUString
const * pAttribute = pLevel[j];
1346 OUString tmp( pAttribute[k] );
1349 case 0: level[j].sPrefix = tmp;
break;
1350 case 1: level[j].nNumType = sal::static_int_cast<sal_Int16>(tmp.toInt32());
break;
1351 case 2: level[j].sSuffix = tmp;
break;
1352 case 3: level[j].cBulletChar = sal::static_int_cast<sal_Unicode>(tmp.toUInt32(16));
break;
1353 case 4: level[j].sBulletFontName = tmp;
break;
1354 case 5: level[j].nParentNumbering = sal::static_int_cast<sal_Int16>(tmp.toInt32());
break;
1355 case 6: level[j].nLeftMargin = tmp.toInt32();
break;
1356 case 7: level[j].nSymbolTextDistance = tmp.toInt32();
break;
1357 case 8: level[j].nFirstLineOffset = tmp.toInt32();
break;
1358 case 9: level[j].nAdjust = sal::static_int_cast<sal_Int16>(tmp.toInt32());
break;
1359 case 10: level[j].sTransliteration = tmp;
break;
1360 case 11: level[j].nNatNum = tmp.toInt32();
break;
1366 level[j].sPrefix.clear();
1367 level[j].nNumType = 0;
1368 level[j].sSuffix.clear();
1369 level[j].nAdjust = 0;
1370 level[j].cBulletChar = 0;
1371 level[j].sBulletFontName.clear();
1372 level[j].nParentNumbering = 0;
1373 level[j].nLeftMargin = 0;
1374 level[j].nSymbolTextDistance = 0;
1375 level[j].nFirstLineOffset = 0;
1376 level[j].sTransliteration.clear();
1377 level[j].nNatNum = 0;
1378 aRetRange[
i] =
new OutlineNumbering( std::move(level), nLevels );
1391 lcl_LookupTableHelper & rLookupTable = lcl_LookupTableStatic();
1395 OString sSymbolName = OString::Concat(pFunction) +
"_" +
1397 return moCachedItem->module->getFunctionSymbol(sSymbolName.getStr());
1400 oslGenericFunction pSymbol =
nullptr;
1401 std::optional<LocaleDataLookupTableItem> oCachedItem;
1406 pFunction, oCachedItem);
1410 for (
const auto& rFallback : aFallbacks)
1412 pSymbol = rLookupTable.getFunctionSymbolByName(rFallback, pFunction, oCachedItem);
1420 pSymbol = rLookupTable.getFunctionSymbolByName(
"en_US", pFunction, oCachedItem);
1439 auto seqRange = asNonConstRange(seq);
1440 sal_Int16 nInstalled = 0;
1443 OUString
name = OUString::createFromAscii(
i.pLocale );
1447 std::optional<LocaleDataLookupTableItem> oCachedItem;
1448 if (lcl_LookupTableStatic().getFunctionSymbolByName(
name,
"getLocaleItem", oCachedItem )) {
1455 seq.realloc( nInstalled );
1463OutlineNumbering::OutlineNumbering(std::unique_ptr<
const OutlineNumberingLevel_Impl[]> pOutlnLevels,
int nLevels) :
1465 m_nCount(
sal::static_int_cast<sal_Int16>(nLevels))
1469sal_Int32 OutlineNumbering::getCount( )
1474Any OutlineNumbering::getByIndex( sal_Int32 nIndex )
1476 if(nIndex < 0 || nIndex >=
m_nCount)
1477 throw IndexOutOfBoundsException();
1483 PropertyValue*
pValues = aOutlineNumbering.getArray();
1485 pValues[0].Value <<= pTemp->sPrefix;
1486 pValues[1].Name =
"NumberingType";
1487 pValues[1].Value <<= pTemp->nNumType;
1489 pValues[2].Value <<= pTemp->sSuffix;
1490 pValues[3].Name =
"BulletChar";
1491 pValues[3].Value <<= OUString(&pTemp->cBulletChar, 1);
1492 pValues[4].Name =
"BulletFontName";
1493 pValues[4].Value <<= pTemp->sBulletFontName;
1494 pValues[5].Name =
"ParentNumbering";
1495 pValues[5].Value <<= pTemp->nParentNumbering;
1496 pValues[6].Name =
"LeftMargin";
1497 pValues[6].Value <<= pTemp->nLeftMargin;
1498 pValues[7].Name =
"SymbolTextDistance";
1499 pValues[7].Value <<= pTemp->nSymbolTextDistance;
1500 pValues[8].Name =
"FirstLineOffset";
1501 pValues[8].Value <<= pTemp->nFirstLineOffset;
1503 pValues[9].Value <<= pTemp->nAdjust;
1504 pValues[10].Name =
"Transliteration";
1505 pValues[10].Value <<= pTemp->sTransliteration;
1507 pValues[11].Value <<= pTemp->nNatNum;
1508 aRet <<= aOutlineNumbering;
1512Type OutlineNumbering::getElementType( )
1517sal_Bool OutlineNumbering::hasElements( )
1525 return "com.sun.star.i18n.LocaleDataImpl";
1537 "com.sun.star.i18n.LocaleData",
1538 "com.sun.star.i18n.LocaleData2"
1548 else if (!rLocale.Country.isEmpty())
1549 return rLocale.Language +
"_" + rLocale.Country;
1551 return rLocale.Language;
1557 ::std::vector< OUString > aVec;
1561 for (
auto& rItem : aVec)
1566 else if (!rLocale.Country.isEmpty())
1568 aVec.push_back( rLocale.Language);
1576extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface *
1578 css::uno::XComponentContext *,
1579 css::uno::Sequence<css::uno::Any>
const &)
const PropertyValue * pValues
static css::lang::Locale convertToLocale(LanguageType nLangID, bool bResolveSystem=true)
::std::vector< OUString > getFallbackStrings(bool bIncludeFullBcp47) const
static css::lang::Locale getFallbackLocale(const css::lang::Locale &rLocale)
virtual OUString SAL_CALL getImplementationName() override
virtual css::i18n::LanguageCountryInfo SAL_CALL getLanguageCountryInfo(const css::lang::Locale &rLocale) override
virtual css::uno::Sequence< css::i18n::FormatElement > SAL_CALL getAllFormats(const css::lang::Locale &rLocale) override
css::uno::Sequence< css::uno::Reference< css::container::XIndexAccess > > getOutlineNumberingLevels(const css::lang::Locale &rLocale)
static css::uno::Sequence< css::i18n::CalendarItem > downcastCalendarItems(const css::uno::Sequence< css::i18n::CalendarItem2 > &rCi)
css::uno::Sequence< css::i18n::CalendarItem2 > & getCalendarItemByName(const OUString &name, const css::lang::Locale &rLocale, const css::uno::Sequence< css::i18n::Calendar2 > &calendarsSeq, sal_Int16 item)
bool hasPhonetic(const css::lang::Locale &rLocale)
virtual css::uno::Sequence< css::i18n::Currency2 > SAL_CALL getAllCurrencies2(const css::lang::Locale &rLocale) override
virtual css::uno::Sequence< OUString > SAL_CALL getDateAcceptancePatterns(const css::lang::Locale &rLocale) override
virtual css::uno::Sequence< OUString > SAL_CALL getReservedWord(const css::lang::Locale &rLocale) override
css::i18n::Calendar2 ref_cal
virtual ~LocaleDataImpl() override
virtual css::uno::Sequence< OUString > SAL_CALL getSearchOptions(const css::lang::Locale &rLocale) override
css::uno::Sequence< OUString > getBreakIteratorRules(const css::lang::Locale &rLocale)
virtual css::uno::Sequence< css::i18n::Currency > SAL_CALL getAllCurrencies(const css::lang::Locale &rLocale) override
virtual css::i18n::LocaleDataItem SAL_CALL getLocaleItem(const css::lang::Locale &rLocale) override
virtual css::uno::Sequence< OUString > SAL_CALL getTransliterations(const css::lang::Locale &rLocale) override
css::uno::Sequence< OUString > getFollowPageWords(const css::lang::Locale &rLocale)
static ::std::vector< OUString > getFallbackLocaleServiceNames(const css::lang::Locale &rLocale)
Generates fallback strings suitable as parts of service names, excluding the one obtained via getFirs...
virtual css::uno::Sequence< css::i18n::Calendar > SAL_CALL getAllCalendars(const css::lang::Locale &rLocale) override
virtual css::i18n::LocaleDataItem2 SAL_CALL getLocaleItem2(const css::lang::Locale &rLocale) override
css::uno::Sequence< css::uno::Sequence< css::beans::PropertyValue > > getContinuousNumberingLevels(const css::lang::Locale &rLocale)
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
OUString getIndexModuleByAlgorithm(const css::lang::Locale &rLocale, std::u16string_view algorithm)
static OUString getFirstLocaleServiceName(const css::lang::Locale &rLocale)
Generates a <Language>_<Country> or <Variant> (if Language=="qlt") string suitable as part of service...
bool isPhonetic(const css::lang::Locale &rLocale, std::u16string_view algorithm)
virtual css::uno::Sequence< OUString > SAL_CALL getCollationOptions(const css::lang::Locale &rLocale) override
css::uno::Sequence< css::i18n::UnicodeScript > getUnicodeScripts(const css::lang::Locale &rLocale)
virtual sal_Bool SAL_CALL supportsService(const OUString &ServiceName) override
OUString const * getIndexArrayForAlgorithm(const css::lang::Locale &rLocale, std::u16string_view rAlgorithm)
css::uno::Sequence< css::i18n::CalendarItem2 > getCalendarItems(OUString const *allCalendars, sal_Int16 &rnOffset, const sal_Int16 nWhichItem, const sal_Int16 nCalendar, const css::lang::Locale &rLocale, const css::uno::Sequence< css::i18n::Calendar2 > &calendarsSeq)
Helper to obtain a sequence of days, months, gmonths or eras.
virtual css::uno::Sequence< css::lang::Locale > SAL_CALL getAllInstalledLocaleNames() override
css::uno::Sequence< OUString > getIndexAlgorithm(const css::lang::Locale &rLocale)
virtual css::uno::Sequence< css::i18n::Implementation > SAL_CALL getCollatorImplementations(const css::lang::Locale &rLocale) override
OUString getHangingCharacters(const css::lang::Locale &rLocale)
OUString getCollatorRuleByAlgorithm(const css::lang::Locale &rLocale, std::u16string_view algorithm)
OUString const * getIndexArray(const css::lang::Locale &rLocale, sal_Int16 &indexCount)
oslGenericFunction getFunctionSymbol(const css::lang::Locale &rLocale, const char *pFunction)
OUString getDefaultIndexAlgorithm(const css::lang::Locale &rLocale)
virtual css::i18n::ForbiddenCharacters SAL_CALL getForbiddenCharacters(const css::lang::Locale &rLocale) override
virtual css::uno::Sequence< css::i18n::Calendar2 > SAL_CALL getAllCalendars2(const css::lang::Locale &rLocale) override
OUString getIndexKeysByAlgorithm(const css::lang::Locale &rLocale, std::u16string_view algorithm)
static css::i18n::Calendar downcastCalendar(const css::i18n::Calendar2 &rC)
::std::optional< LocaleDataLookupTableItem > moCachedItem
constexpr OUStringLiteral I18NLANGTAG_QLT
sal_Int32 nSymbolTextDistance
static const char * lcl_DATA_OTHERS
OUString sTransliteration
sal_Int32 nFirstLineOffset
OUString const ***(* MyFunc_Type3)(sal_Int16 &, sal_Int16 &, sal_Int16 &)
const struct @0 aLibTable[]
const sal_Unicode cHyphen
#define COLLATOR_OFFSET_RULE
OUString const **(* MyFunc_Type2)(sal_Int16 &, sal_Int16 &)
sal_Int16 nParentNumbering
std::unique_ptr< const OutlineNumberingLevel_Impl[]> m_pOutlineLevels
#define COLLATOR_ELEMENTS
static const char * lcl_DATA_ES
const sal_Int16 nbOfLocales
OUString const *(* MyFuncOUString_Type)(sal_Int16 &)
static const char * lcl_DATA_EURO
::std::vector< LocaleDataLookupTableItem > maLookupTable
static const char * lcl_DATA_EN
#define COLLATOR_OFFSET_DEFAULT
#define COLLATOR_OFFSET_ALGO
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * com_sun_star_i18n_LocaleDataImpl_get_implementation(css::uno::XComponentContext *, css::uno::Sequence< css::uno::Any > const &)
OUString const *(* MyFunc_FormatCode)(sal_Int16 &, sal_Unicode const *&, sal_Unicode const *&)
#define SAL_WARN_IF(condition, area, stream)
#define SAL_N_ELEMENTS(arr)
css::uno::Sequence< DstElementType > containerToSequence(const SrcType &i_Container)
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
Constant values shared between i18npool and, for example, the number formatter.
sal_Int32 toInt32(std::u16string_view str, sal_Int16 radix=10)