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>
46typedef sal_Unicode const *** (* MyFunc_Type2)( sal_Int16&, sal_Int16& );
47typedef sal_Unicode const **** (* MyFunc_Type3)( sal_Int16&, sal_Int16&, sal_Int16& );
50#ifndef DISABLE_DYNLOADING
344#include "localedata_static.hxx"
358 return comphelper::containerToSequence<CalendarItem>(rCi);
370 rC.MinimumNumberOfDaysForFirstWeek,
386LocaleDataItem SAL_CALL
392 sal_Int16 dataItemCount = 0;
396 OUString(dataItem[0]),
397 OUString(dataItem[1]),
398 OUString(dataItem[2]),
399 OUString(dataItem[3]),
400 OUString(dataItem[4]),
401 OUString(dataItem[5]),
402 OUString(dataItem[6]),
403 OUString(dataItem[7]),
404 OUString(dataItem[8]),
405 OUString(dataItem[9]),
406 OUString(dataItem[10]),
407 OUString(dataItem[11]),
408 OUString(dataItem[12]),
409 OUString(dataItem[13]),
410 OUString(dataItem[14]),
411 OUString(dataItem[15]),
412 OUString(dataItem[16]),
413 OUString(dataItem[17])
418 LocaleDataItem item1;
424LocaleDataItem2 SAL_CALL
430 sal_Int16 dataItemCount = 0;
433 assert(dataItemCount >= 18);
435 LocaleDataItem2 item{
436 OUString(dataItem[0]),
437 OUString(dataItem[1]),
438 OUString(dataItem[2]),
439 OUString(dataItem[3]),
440 OUString(dataItem[4]),
441 OUString(dataItem[5]),
442 OUString(dataItem[6]),
443 OUString(dataItem[7]),
444 OUString(dataItem[8]),
445 OUString(dataItem[9]),
446 OUString(dataItem[10]),
447 OUString(dataItem[11]),
448 OUString(dataItem[12]),
449 OUString(dataItem[13]),
450 OUString(dataItem[14]),
451 OUString(dataItem[15]),
452 OUString(dataItem[16]),
453 OUString(dataItem[17]),
454 dataItemCount >= 19 ? OUString(dataItem[18]) : OUString()
459 LocaleDataItem2 item1;
464#ifndef DISABLE_DYNLOADING
474class lcl_LookupTableHelper
477 lcl_LookupTableHelper();
478 ~lcl_LookupTableHelper();
480 oslGenericFunction getFunctionSymbolByName(
481 const OUString& localeName,
const char* pFunction,
482 std::optional<LocaleDataLookupTableItem>& rOutCachedItem );
494lcl_LookupTableHelper& lcl_LookupTableStatic()
496 static lcl_LookupTableHelper SINGLETON;
500lcl_LookupTableHelper::lcl_LookupTableHelper()
504lcl_LookupTableHelper::~lcl_LookupTableHelper()
506 for (
const LocaleDataLookupTableItem& item :
maLookupTable ) {
511oslGenericFunction lcl_LookupTableHelper::getFunctionSymbolByName(
512 const OUString& localeName,
const char* pFunction,
513 std::optional<LocaleDataLookupTableItem>& rOutCachedItem )
516 bool bFallback = (localeName.indexOf(
cUnder) < 0);
520 aLocale.Language = localeName;
522 if (aFbLocale == aLocale)
530 if (localeName.equalsAscii(
i.pLocale) ||
531 (bFallback && aFallback.equalsAscii(
i.pLocale)))
533#ifndef DISABLE_DYNLOADING
535 std::unique_lock aGuard(
maMutex );
538 if (rCurrent.dllName ==
i.pLib)
540 rOutCachedItem.emplace( rCurrent );
541 rOutCachedItem->localeName =
i.pLocale;
542 OString sSymbolName = OString::Concat(pFunction) +
"_" +
543 rOutCachedItem->localeName;
544 return rOutCachedItem->module->getFunctionSymbol(
545 sSymbolName.getStr());
551 OString sModuleName =
554 OString sModuleName =
557 std::unique_ptr<osl::Module>
module(
new osl::Module());
560 std::unique_lock aGuard(
maMutex );
561 auto pTmpModule =
module.get();
564 OString sSymbolName = OString::Concat(pFunction) +
"_" + rOutCachedItem->localeName;
565 return pTmpModule->getFunctionSymbol(sSymbolName.getStr());
570 (void) rOutCachedItem;
572 if( strcmp(pFunction,
"getAllCalendars") == 0 )
573 return i.getAllCalendars;
574 else if( strcmp(pFunction,
"getAllCurrencies") == 0 )
575 return i.getAllCurrencies;
576 else if( strcmp(pFunction,
"getAllFormats0") == 0 )
577 return i.getAllFormats0;
578 else if( strcmp(pFunction,
"getBreakIteratorRules") == 0 )
579 return i.getBreakIteratorRules;
580 else if( strcmp(pFunction,
"getCollationOptions") == 0 )
581 return i.getCollationOptions;
582 else if( strcmp(pFunction,
"getCollatorImplementation") == 0 )
583 return i.getCollatorImplementation;
584 else if( strcmp(pFunction,
"getContinuousNumberingLevels") == 0 )
585 return i.getContinuousNumberingLevels;
586 else if( strcmp(pFunction,
"getDateAcceptancePatterns") == 0 )
587 return i.getDateAcceptancePatterns;
588 else if( strcmp(pFunction,
"getFollowPageWords") == 0 )
589 return i.getFollowPageWords;
590 else if( strcmp(pFunction,
"getForbiddenCharacters") == 0 )
591 return i.getForbiddenCharacters;
592 else if( strcmp(pFunction,
"getIndexAlgorithm") == 0 )
593 return i.getIndexAlgorithm;
594 else if( strcmp(pFunction,
"getLCInfo") == 0 )
596 else if( strcmp(pFunction,
"getLocaleItem") == 0 )
597 return i.getLocaleItem;
598 else if( strcmp(pFunction,
"getOutlineNumberingLevels") == 0 )
599 return i.getOutlineNumberingLevels;
600 else if( strcmp(pFunction,
"getReservedWords") == 0 )
601 return i.getReservedWords;
602 else if( strcmp(pFunction,
"getSearchOptions") == 0 )
603 return i.getSearchOptions;
604 else if( strcmp(pFunction,
"getTransliterations") == 0 )
605 return i.getTransliterations;
606 else if( strcmp(pFunction,
"getUnicodeScripts") == 0 )
607 return i.getUnicodeScripts;
608 else if( strcmp(pFunction,
"getAllFormats1") == 0 )
609 return i.getAllFormats1;
625#define REF_OFFSET_COUNT 5
631 OUString aLocStr, id;
632 sal_Int32 nLastUnder =
name.lastIndexOf(
cUnder);
634 "LocaleDataImpl::getCalendarItemByName - no '_' or first in name can't be right: " <<
name);
637 aLocStr =
name.copy( 0, nLastUnder);
638 if (nLastUnder + 1 <
name.getLength())
639 id =
name.copy( nLastUnder + 1);
643 if (loc == rLocale) {
648 auto pCal = std::find_if(std::cbegin(cals), std::cend(cals),
649 [&
id](
const Calendar2& rCal) {
return id == rCal.Name; });
650 if (pCal != std::cend(cals))
655 if (!cals.hasElements())
657 ref_cal = cals.getConstArray()[0];
670 return ref_cal.PartitiveMonths;
672 OSL_FAIL(
"LocaleDataImpl::getCalendarItemByName: unhandled REF_* case");
680 sal_Unicode const *
const *
const allCalendars, sal_Int16 & rnOffset,
681 const sal_Int16 nWhichItem,
const sal_Int16 nCalendar,
685 if ( allCalendars[rnOffset] == std::u16string_view(
u"ref") )
687 aItems =
getCalendarItemByName( OUString( allCalendars[rnOffset+1]), rLocale, calendarsSeq, nWhichItem);
692 const sal_Int32 nSize = allCalendars[nWhichItem][nCalendar];
693 aItems.realloc( nSize);
700 for (CalendarItem2& rItem : asNonConstRange(aItems))
702 rItem = CalendarItem2{ OUString(allCalendars[rnOffset]),
703 OUString(allCalendars[rnOffset+1]),
704 OUString(allCalendars[rnOffset+2]), OUString(allCalendars[rnOffset+3])};
710 for (CalendarItem2& rItem : asNonConstRange(aItems))
712 rItem = CalendarItem2{ OUString(allCalendars[rnOffset]),
713 OUString(allCalendars[rnOffset+1]),
714 OUString(allCalendars[rnOffset+2]), OUString()};
719 OSL_FAIL(
"LocaleDataImpl::getCalendarItems: unhandled REF_* case");
729 sal_Unicode const *
const * allCalendars =
nullptr;
734 sal_Int16 calendarsCount = 0;
735 allCalendars = func(calendarsCount);
738 auto calendarsSeqRange = asNonConstRange(calendarsSeq);
740 for(sal_Int16
i = 0;
i < calendarsCount;
i++) {
741 OUString calendarID(allCalendars[offset]);
743 bool defaultCalendar = allCalendars[offset][0] != 0;
746 rLocale, calendarsSeq);
748 rLocale, calendarsSeq);
750 rLocale, calendarsSeq);
752 rLocale, calendarsSeq);
754 rLocale, calendarsSeq);
755 OUString startOfWeekDay(allCalendars[offset]);
757 sal_Int16 minimalDaysInFirstWeek = allCalendars[offset][0];
759 Calendar2 aCalendar(days, months, gmonths, pmonths, eras, startOfWeekDay,
760 minimalDaysInFirstWeek, defaultCalendar, calendarID);
761 calendarsSeqRange[
i] = aCalendar;
775 std::vector<Calendar> aCal1;
776 aCal1.reserve(aCal2.getLength());
777 std::transform(aCal2.begin(), aCal2.end(), std::back_inserter(aCal1),
778 [](
const Calendar2& rCal2) { return downcastCalendar(rCal2); });
789 sal_Int16 currencyCount = 0;
793 auto seqRange = asNonConstRange(seq);
794 for(
int i = 0, nOff = 0;
i < currencyCount;
i++, nOff += 8 ) {
796 OUString(allCurrencies[nOff]),
797 OUString(allCurrencies[nOff+1]),
798 OUString(allCurrencies[nOff+2]),
799 OUString(allCurrencies[nOff+3]),
800 allCurrencies[nOff+4][0] != 0,
801 allCurrencies[nOff+5][0] != 0,
802 allCurrencies[nOff+6][0],
803 allCurrencies[nOff+7][0] != 0
825 const int SECTIONS = 2;
832 sal_Int16 formatCount;
834 FormatSection() : func(
nullptr),
from(
nullptr),
to(
nullptr), formatArray(
nullptr), formatCount(0) {}
839 formatArray = func( formatCount,
from,
to);
844 sal_Int32 formatCount;
845 formatCount =
section[0].getFunc( *
this, rLocale,
"getAllFormats0");
846 formatCount +=
section[1].getFunc( *
this, rLocale,
"getAllFormats1");
849 auto seqRange = asNonConstRange(seq);
851 for (
const FormatSection & s :
section)
853 sal_Unicode const *
const *
const formatArray = s.formatArray;
856 for (
int i = 0, nOff = 0;
i < s.formatCount; ++
i, nOff += 7, ++f)
859 OUString(formatArray[nOff]).replaceAll(s.from, s.to),
860 OUString(formatArray[nOff + 1]),
861 OUString(formatArray[nOff + 2]),
862 OUString(formatArray[nOff + 3]),
863 OUString(formatArray[nOff + 4]),
864 formatArray[nOff + 5][0],
865 formatArray[nOff + 6][0] != 0);
881 sal_Int16 patternsCount = 0;
882 sal_Unicode **patternsArray = func( patternsCount );
884 auto seqRange = asNonConstRange(seq);
885 for (sal_Int16
i = 0;
i < patternsCount; ++
i)
887 seqRange[
i] = OUString( 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;
910 for(sal_Int16
i = 0;
i < collatorCount;
i++)
924 sal_Int16 collatorCount = 0;
927 auto seqRange = asNonConstRange(seq);
928 for(sal_Int16
i = 0;
i < collatorCount;
i++) {
947 sal_Int16 optionsCount = 0;
950 auto seqRange = asNonConstRange(seq);
951 for(sal_Int16
i = 0;
i < optionsCount;
i++) {
952 seqRange[
i] = OUString( optionsArray[
i] );
967 sal_Int16 optionsCount = 0;
970 auto seqRange = asNonConstRange(seq);
971 for(sal_Int16
i = 0;
i < optionsCount;
i++) {
972 seqRange[
i] = OUString( optionsArray[
i] );
987 return func(indexCount);
994 sal_Int16 indexCount = 0;
999 auto seqRange = asNonConstRange(seq);
1000 for(sal_Int16
i = 0;
i < indexCount;
i++) {
1001 seqRange[
i] = indexArray[
i*5];
1013 sal_Int16 indexCount = 0;
1017 for(sal_Int16
i = 0;
i < indexCount;
i++) {
1018 if (indexArray[
i*5 + 3][0])
1019 return OUString(indexArray[
i*5]);
1028 sal_Int16 indexCount = 0;
1032 for(sal_Int16
i = 0;
i < indexCount;
i++) {
1033 if (indexArray[
i*5 + 4][0])
1043 sal_Int16 indexCount = 0;
1046 for(sal_Int16
i = 0;
i < indexCount;
i++) {
1047 if (algorithm == indexArray[
i*5])
1048 return indexArray+
i*5;
1058 return indexArray && indexArray[4][0];
1065 return indexArray ? (OUString::Concat(
u"0-9") + indexArray[2]) : OUString();
1072 return indexArray ? OUString(indexArray[1]) : OUString();
1081 sal_Int16 scriptCount = 0;
1084 auto seqRange = asNonConstRange(seq);
1085 for(sal_Int16
i = 0;
i < scriptCount;
i++) {
1086 seqRange[
i] = UnicodeScript(
o3tl::toInt32(std::u16string_view(scriptArray[
i], 1)) );
1101 sal_Int16 wordCount = 0;
1104 auto seqRange = asNonConstRange(seq);
1105 for(sal_Int16
i = 0;
i < wordCount;
i++) {
1106 seqRange[
i] = OUString(wordArray[
i]);
1121 sal_Int16 transliterationsCount = 0;
1122 sal_Unicode **transliterationsArray = func(transliterationsCount);
1125 auto seqRange = asNonConstRange(seq);
1126 for(
int i = 0;
i < transliterationsCount;
i++) {
1127 OUString elem(transliterationsArray[
i]);
1140LanguageCountryInfo SAL_CALL
1146 sal_Int16 LCInfoCount = 0;
1148 LanguageCountryInfo info{OUString(LCInfoArray[0]),
1149 OUString(LCInfoArray[1]),
1150 OUString(LCInfoArray[2]),
1151 OUString(LCInfoArray[3]),
1152 OUString(LCInfoArray[4])};
1156 LanguageCountryInfo info1;
1163ForbiddenCharacters SAL_CALL
1169 sal_Int16 LCForbiddenCharactersCount = 0;
1170 sal_Unicode **LCForbiddenCharactersArray = func(LCForbiddenCharactersCount);
1171 ForbiddenCharacters chars{
1172 OUString(LCForbiddenCharactersArray[0]), OUString(LCForbiddenCharactersArray[1])};
1176 ForbiddenCharacters chars1;
1187 sal_Int16 LCForbiddenCharactersCount = 0;
1188 sal_Unicode **LCForbiddenCharactersArray = func(LCForbiddenCharactersCount);
1189 return OUString(LCForbiddenCharactersArray[2]);
1201 sal_Int16 LCBreakIteratorRuleCount = 0;
1202 sal_Unicode **LCBreakIteratorRulesArray = func(LCBreakIteratorRuleCount);
1204 auto seqRange = asNonConstRange(seq);
1205 for(
int i = 0;
i < LCBreakIteratorRuleCount;
i++) {
1206 OUString elem(LCBreakIteratorRulesArray[
i]);
1223 sal_Int16 LCReservedWordsCount = 0;
1224 sal_Unicode **LCReservedWordsArray = func(LCReservedWordsCount);
1226 auto seqRange = asNonConstRange(seq);
1227 for(
int i = 0;
i < LCReservedWordsCount;
i++) {
1228 OUString elem(LCReservedWordsArray[
i]);
1254 auto pvRange = asNonConstRange(pv);
1255 for(
auto&
i : pvRange ) {
1260 for(
int i=0;
i<nStyles;
i++ ) {
1262 auto pvElementRange = asNonConstRange(pvRange[
i]);
1265 beans::PropertyValue& rVal = pvElementRange[j];
1268 if( 0 != j && 2 != j )
1271 sVal = OUString( pString, 1 );
1277 rVal.Name =
"Prefix";
1278 rVal.Value <<= sVal;
1281 rVal.Name =
"NumberingType";
1282 rVal.Value <<=
static_cast<sal_Int16
>(sVal.toInt32());
1285 rVal.Name =
"Suffix";
1286 rVal.Value <<= sVal;
1289 rVal.Name =
"Transliteration";
1290 rVal.Value <<= sVal;
1293 rVal.Name =
"NatNum";
1294 rVal.Value <<=
static_cast<sal_Int16
>(sVal.toInt32());
1311struct OutlineNumberingLevel_Impl
1327class OutlineNumbering :
public cppu::WeakImplHelper < container::XIndexAccess >
1334 OutlineNumbering(std::unique_ptr<
const OutlineNumberingLevel_Impl[]> pOutlineLevels,
int nLevels);
1337 virtual sal_Int32 SAL_CALL getCount( )
override;
1338 virtual Any SAL_CALL getByIndex( sal_Int32 Index )
override;
1341 virtual Type SAL_CALL getElementType( )
override;
1342 virtual sal_Bool SAL_CALL hasElements( )
override;
1363 auto aRetRange = asNonConstRange(aRet);
1365 for(
i=0;
i<nStyles;
i++ )
1369 std::unique_ptr<OutlineNumberingLevel_Impl[]> level(
new OutlineNumberingLevel_Impl[ nLevels+1 ]);
1371 for( j = 0; j < nLevels; j++ )
1376 OUString tmp( pAttribute[k] );
1379 case 0: level[j].sPrefix = tmp;
break;
1380 case 1: level[j].nNumType = sal::static_int_cast<sal_Int16>(tmp.toInt32());
break;
1381 case 2: level[j].sSuffix = tmp;
break;
1382 case 3: level[j].cBulletChar = sal::static_int_cast<sal_Unicode>(tmp.toUInt32(16));
break;
1383 case 4: level[j].sBulletFontName = tmp;
break;
1384 case 5: level[j].nParentNumbering = sal::static_int_cast<sal_Int16>(tmp.toInt32());
break;
1385 case 6: level[j].nLeftMargin = tmp.toInt32();
break;
1386 case 7: level[j].nSymbolTextDistance = tmp.toInt32();
break;
1387 case 8: level[j].nFirstLineOffset = tmp.toInt32();
break;
1388 case 9: level[j].nAdjust = sal::static_int_cast<sal_Int16>(tmp.toInt32());
break;
1389 case 10: level[j].sTransliteration = tmp;
break;
1390 case 11: level[j].nNatNum = tmp.toInt32();
break;
1396 level[j].sPrefix.clear();
1397 level[j].nNumType = 0;
1398 level[j].sSuffix.clear();
1399 level[j].nAdjust = 0;
1400 level[j].cBulletChar = 0;
1401 level[j].sBulletFontName.clear();
1402 level[j].nParentNumbering = 0;
1403 level[j].nLeftMargin = 0;
1404 level[j].nSymbolTextDistance = 0;
1405 level[j].nFirstLineOffset = 0;
1406 level[j].sTransliteration.clear();
1407 level[j].nNatNum = 0;
1408 aRetRange[
i] =
new OutlineNumbering( std::move(level), nLevels );
1421 lcl_LookupTableHelper & rLookupTable = lcl_LookupTableStatic();
1425 OString sSymbolName = OString::Concat(pFunction) +
"_" +
1427 return moCachedItem->module->getFunctionSymbol(sSymbolName.getStr());
1430 oslGenericFunction pSymbol =
nullptr;
1431 std::optional<LocaleDataLookupTableItem> oCachedItem;
1436 pFunction, oCachedItem);
1440 for (
const auto& rFallback : aFallbacks)
1442 pSymbol = rLookupTable.getFunctionSymbolByName(rFallback, pFunction, oCachedItem);
1450 pSymbol = rLookupTable.getFunctionSymbolByName(
"en_US", pFunction, oCachedItem);
1469 auto seqRange = asNonConstRange(seq);
1470 sal_Int16 nInstalled = 0;
1473 OUString
name = OUString::createFromAscii(
i.pLocale );
1477 std::optional<LocaleDataLookupTableItem> oCachedItem;
1478 if (lcl_LookupTableStatic().getFunctionSymbolByName(
name,
"getLocaleItem", oCachedItem )) {
1485 seq.realloc( nInstalled );
1493OutlineNumbering::OutlineNumbering(std::unique_ptr<
const OutlineNumberingLevel_Impl[]> pOutlnLevels,
int nLevels) :
1495 m_nCount(
sal::static_int_cast<sal_Int16>(nLevels))
1499sal_Int32 OutlineNumbering::getCount( )
1504Any OutlineNumbering::getByIndex( sal_Int32 nIndex )
1506 if(nIndex < 0 || nIndex >=
m_nCount)
1507 throw IndexOutOfBoundsException();
1513 PropertyValue*
pValues = aOutlineNumbering.getArray();
1515 pValues[0].Value <<= pTemp->sPrefix;
1516 pValues[1].Name =
"NumberingType";
1517 pValues[1].Value <<= pTemp->nNumType;
1519 pValues[2].Value <<= pTemp->sSuffix;
1520 pValues[3].Name =
"BulletChar";
1521 pValues[3].Value <<= OUString(&pTemp->cBulletChar, 1);
1522 pValues[4].Name =
"BulletFontName";
1523 pValues[4].Value <<= pTemp->sBulletFontName;
1524 pValues[5].Name =
"ParentNumbering";
1525 pValues[5].Value <<= pTemp->nParentNumbering;
1526 pValues[6].Name =
"LeftMargin";
1527 pValues[6].Value <<= pTemp->nLeftMargin;
1528 pValues[7].Name =
"SymbolTextDistance";
1529 pValues[7].Value <<= pTemp->nSymbolTextDistance;
1530 pValues[8].Name =
"FirstLineOffset";
1531 pValues[8].Value <<= pTemp->nFirstLineOffset;
1533 pValues[9].Value <<= pTemp->nAdjust;
1534 pValues[10].Name =
"Transliteration";
1535 pValues[10].Value <<= pTemp->sTransliteration;
1537 pValues[11].Value <<= pTemp->nNatNum;
1538 aRet <<= aOutlineNumbering;
1542Type OutlineNumbering::getElementType( )
1547sal_Bool OutlineNumbering::hasElements( )
1555 return "com.sun.star.i18n.LocaleDataImpl";
1567 "com.sun.star.i18n.LocaleData",
1568 "com.sun.star.i18n.LocaleData2"
1578 else if (!rLocale.Country.isEmpty())
1579 return rLocale.Language +
"_" + rLocale.Country;
1581 return rLocale.Language;
1587 ::std::vector< OUString > aVec;
1591 for (
auto& rItem : aVec)
1596 else if (!rLocale.Country.isEmpty())
1598 aVec.push_back( rLocale.Language);
1606extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface *
1608 css::uno::XComponentContext *,
1609 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
sal_Unicode ** getIndexArrayForAlgorithm(const css::lang::Locale &rLocale, std::u16string_view rAlgorithm)
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
sal_Unicode ** getIndexArray(const css::lang::Locale &rLocale, sal_Int16 &indexCount)
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...
css::uno::Sequence< css::i18n::CalendarItem2 > getCalendarItems(sal_Unicode const *const *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.
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
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)
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
sal_Unicode const ****(* MyFunc_Type3)(sal_Int16 &, sal_Int16 &, sal_Int16 &)
const struct @0 aLibTable[]
const sal_Unicode cHyphen
#define COLLATOR_OFFSET_RULE
sal_Int16 nParentNumbering
std::unique_ptr< const OutlineNumberingLevel_Impl[]> m_pOutlineLevels
#define COLLATOR_ELEMENTS
static const char * lcl_DATA_ES
const sal_Int16 nbOfLocales
static const char * lcl_DATA_EURO
::std::vector< LocaleDataLookupTableItem > maLookupTable
static const char * lcl_DATA_EN
#define COLLATOR_OFFSET_DEFAULT
sal_Unicode const ***(* MyFunc_Type2)(sal_Int16 &, sal_Int16 &)
sal_Unicode const *const *(* MyFunc_FormatCode)(sal_Int16 &, sal_Unicode const *&, sal_Unicode const *&)
#define COLLATOR_OFFSET_ALGO
sal_Unicode **(* MyFunc_Type)(sal_Int16 &)
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * com_sun_star_i18n_LocaleDataImpl_get_implementation(css::uno::XComponentContext *, css::uno::Sequence< css::uno::Any > 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)