29#include <rtl/math.hxx>
32#include <com/sun/star/lang/Locale.hpp>
33#include <rtl/ustrbuf.hxx>
35#include <osl/diagnose.h>
39#include <com/sun/star/i18n/NativeNumberXmlAttributes2.hpp>
63struct SvXMLEmbeddedTextEntry
65 sal_uInt16 nSourcePos;
69 SvXMLEmbeddedTextEntry( sal_uInt16 nSP, sal_Int32 nFP,
const OUString& rT ) :
70 nSourcePos(nSP), nFormatPos(nFP), aText(rT) {}
77 typedef std::vector<SvXMLEmbeddedTextEntry>
DataType;
87 const SvXMLEmbeddedTextEntry&
operator[] (
size_t i )
const
109 void SetUsed( sal_uInt32 nKey );
110 bool IsUsed( sal_uInt32 nKey )
const;
118 void SetWasUsed(
const uno::Sequence<sal_Int32>& rWasUsed);
133 std::pair<SvXMLuInt32Set::iterator, bool> aPair =
aUsed.insert( nKey );
141 SvXMLuInt32Set::const_iterator aItr =
aUsed.find(nKey);
142 return (aItr !=
aUsed.end());
147 SvXMLuInt32Set::const_iterator aItr =
aWasUsed.find(nKey);
153 SvXMLuInt32Set::const_iterator aItr =
aUsed.begin();
154 while (aItr !=
aUsed.end())
156 std::pair<SvXMLuInt32Set::const_iterator, bool> aPair =
aWasUsed.insert( *aItr );
195 return comphelper::containerToSequence<sal_Int32>(
aWasUsed);
201 for (
const auto nWasUsed : rWasUsed)
203 std::pair<SvXMLuInt32Set::const_iterator, bool> aPair =
aWasUsed.insert( nWasUsed );
211 const uno::Reference< util::XNumberFormatsSupplier >& rSupp ) :
214 pFormatter( nullptr ),
219 comphelper::getFromUnoTunnel<SvNumberFormatsSupplierObj>( rSupp );
226 pFormatter->GetLanguageTag() ) );
232 pLocaleData.reset(
new LocaleDataWrapper( rExport.getComponentContext(), std::move(aLanguageTag) ) );
240 const css::uno::Reference< css::util::XNumberFormatsSupplier >& rSupp,
241 const OUString& rPrefix ) :
244 pFormatter( nullptr ),
249 comphelper::getFromUnoTunnel<SvNumberFormatsSupplierObj>( rSupp );
274static OUString
lcl_CreateStyleName( sal_Int32 nKey, sal_Int32 nPart,
bool bDefPart, std::u16string_view rPrefix )
276 OUStringBuffer aFmtName(10);
277 aFmtName.append( rPrefix );
278 aFmtName.append( nKey );
281 aFmtName.append(
'P' );
282 aFmtName.append( nPart );
284 return aFmtName.makeStringAndClear();
289 if ( !rCalendar.isEmpty() )
342 OUStringBuffer aColStr( 7 );
345 aColStr.makeStringAndClear() );
352 std::u16string_view rExt )
516 OUString::number( nDecimals ) );
534 sal_Int32 nDecimals, sal_Int32 nMinDecimals,
535 sal_Int32 nInteger,
const OUString& rDashStr,
536 bool bGrouping, sal_Int32 nTrailingThousands,
542 if ( nDecimals >= 0 )
545 OUString::number( nDecimals ) );
548 if ( nMinDecimals >= 0 )
558 OUString::number( nMinDecimals ) );
566 OUString::number( nInteger ) );
570 if ( !rDashStr.isEmpty() || nMinDecimals < nDecimals )
584 if ( nTrailingThousands )
587 double fFactor = ::rtl::math::pow10Exp( 1.0, 3 * nTrailingThousands );
589 OUStringBuffer aFactStr;
599 auto nEntryCount = rEmbeddedEntries.
size();
600 for (
decltype(nEntryCount) nEntry=0; nEntry < nEntryCount; ++nEntry)
602 const SvXMLEmbeddedTextEntry *
const pObj = &rEmbeddedEntries[nEntry];
606 OUString::number( pObj->nFormatPos ) );
611 OUStringBuffer aContent( pObj->aText );
612 while ( nEntry+1 < nEntryCount && rEmbeddedEntries[nEntry+1].nFormatPos == pObj->nFormatPos )
617 aContent.append(rEmbeddedEntries[nEntry+1].aText);
625 sal_Int32 nDecimals, sal_Int32 nMinDecimals, sal_Int32 nInteger,
626 bool bGrouping, sal_Int32 nExp, sal_Int32 nExpInterval,
bool bExpSign )
631 if ( nDecimals >= 0 )
634 OUString::number( nDecimals ) );
638 if ( nMinDecimals >= 0 )
647 OUString::number( nMinDecimals ) );
655 OUString::number( nInteger ) );
668 OUString::number( nExp ) );
672 if ( nExpInterval >= 0 )
701 sal_Int32 nInteger,
bool bGrouping,
708 sal_Int32 nMaxNumeratorDigits = aNumeratorString.getLength();
710 sal_Int32 nMinNumeratorDigits = aNumeratorString.replaceAll(
"0",
"?").indexOf(
'?');
711 sal_Int32 nZerosNumeratorDigits = aNumeratorString.indexOf(
'0');
712 if ( nMinNumeratorDigits >= 0 )
713 nMinNumeratorDigits = nMaxNumeratorDigits - nMinNumeratorDigits;
715 nMinNumeratorDigits = 0;
716 if ( nZerosNumeratorDigits >= 0 )
717 nZerosNumeratorDigits = nMaxNumeratorDigits - nZerosNumeratorDigits;
719 nZerosNumeratorDigits = 0;
720 sal_Int32 nMaxDenominatorDigits = aDenominatorString.getLength();
721 sal_Int32 nMinDenominatorDigits = aDenominatorString.replaceAll(
"0",
"?").indexOf(
'?');
722 sal_Int32 nZerosDenominatorDigits = aDenominatorString.indexOf(
'0');
723 if ( nMinDenominatorDigits >= 0 )
724 nMinDenominatorDigits = nMaxDenominatorDigits - nMinDenominatorDigits;
726 nMinDenominatorDigits = 0;
727 if ( nZerosDenominatorDigits >= 0 )
728 nZerosDenominatorDigits = nMaxDenominatorDigits - nZerosDenominatorDigits;
730 nZerosDenominatorDigits = 0;
731 sal_Int32 nDenominator = aDenominatorString.toInt32();
737 OUString::number( nInteger ) );
748 if ( !aIntegerFractionDelimiterString.isEmpty() && aIntegerFractionDelimiterString !=
" "
752 aIntegerFractionDelimiterString );
756 if ( nMinNumeratorDigits == 0 )
757 nMinNumeratorDigits++;
759 OUString::number( nMinNumeratorDigits ) );
765 OUString::number( nMaxNumeratorDigits ) );
769 OUString::number( nZerosNumeratorDigits ) );
774 OUString::number( nDenominator) );
780 if ( nMinDenominatorDigits == 0 )
781 nMinDenominatorDigits++;
783 OUString::number( nMinDenominatorDigits ) );
790 OUString::number( pow ( 10.0, nMaxDenominatorDigits ) - 1 ) );
794 OUString::number( nZerosDenominatorDigits ) );
804 sal_Int32 nKey, sal_Int32 nPart )
813 OUStringBuffer aCondStr(20);
814 aCondStr.append(
"value()" );
824 OSL_FAIL(
"unknown operator");
826 ::rtl::math::doubleToUStringBuffer( aCondStr, fLimit,
827 rtl_math_StringFormat_Automatic, rtl_math_DecimalPlaces_Max,
831 aCondStr.makeStringAndClear() );
843static sal_Int32
lcl_FindSymbol(
const OUString& sUpperStr, std::u16string_view sCurString )
851 nCPos = sUpperStr.indexOf( sCurString, nCPos );
862 c = sUpperStr[nCPos-1];
863 if ( c !=
'"' && c !=
'\\')
882 const css::lang::Locale& rLocale )
890 OUString sCurString, sDummy;
897 sal_Int32
nLength = rString.getLength();
898 sal_Int32 nCurLen = sCurString.getLength();
899 sal_Int32 nCont =
nPos + nCurLen;
934 const uno::Sequence<OUString> aCals = pCalendar->
getAllCalendars( aLocale );
935 auto pCal = std::find_if(aCals.begin(), aCals.end(),
936 [](
const OUString& rCal) { return rCal !=
"gregorian"; });
937 if (pCal != aCals.end())
947 if ( rEmbeddedEntries[
i].nSourcePos ==
nPos )
965 bool bDateNoDefault =
false;
977 bDateNoDefault =
true;
1007 bDateNoDefault =
true;
1009 nLastType = nElemType;
1013 if ( bDateNoDefault )
1018 eDateDOW, eDateDay, eDateMonth, eDateYear, eDateHours, eDateMins, eDateSecs, bSystemDate ));
1020 return ( eFound == eBuiltIn );
1027 sal_uInt16 nPart,
bool bDefPart )
1036 bool bThousand =
false;
1037 sal_uInt16 nPrecision = 0;
1038 sal_uInt16 nLeading = 0;
1039 rFormat.
GetNumForInfo( nPart, nFmtType, bThousand, nPrecision, nLeading);
1045 nFmtType = SvNumFormatType::NUMBER;
1047 nFmtType = SvNumFormatType::LOGICAL;
1048 else if ( eBuiltIn ==
NF_TEXT )
1049 nFmtType = SvNumFormatType::TEXT;
1061 case SvNumFormatType::UNDEFINED:
1066 case SvNumFormatType::ALL:
1067 case SvNumFormatType::EMPTY:
1068 case SvNumFormatType::NUMBER:
1069 case SvNumFormatType::SCIENTIFIC:
1070 case SvNumFormatType::FRACTION:
1073 case SvNumFormatType::PERCENT:
1076 case SvNumFormatType::CURRENCY:
1079 case SvNumFormatType::DATE:
1080 case SvNumFormatType::DATETIME:
1083 case SvNumFormatType::TIME:
1086 case SvNumFormatType::TEXT:
1089 case SvNumFormatType::LOGICAL:
1096 OUString sAttrValue;
1097 bool bUserDef( rFormat.
GetType() & SvNumFormatType::DEFINED );
1116 if ( !sAttrValue.isEmpty() && bUserDef && bDefPart )
1143 if ( bAutoOrder && ( nFmtType == SvNumFormatType::DATE || nFmtType == SvNumFormatType::DATETIME ) &&
1146 bAutoOrder = bSystemDate = bLongSysDate =
false;
1150 ( nFmtType == SvNumFormatType::CURRENCY || nFmtType == SvNumFormatType::DATE || nFmtType == SvNumFormatType::DATETIME ) )
1159 if ( bSystemDate && bAutoOrder &&
1160 ( nFmtType == SvNumFormatType::DATE || nFmtType == SvNumFormatType::DATETIME ) )
1172 if ( nFmtType == SvNumFormatType::TIME && bThousand )
1179 css::i18n::NativeNumberXmlAttributes2 aAttr;
1181 if ( !aAttr.Format.isEmpty() )
1183 assert(aAttr.Spellout.isEmpty());
1188 OUString aLanguage, aScript, aCountry;
1200 if ( !aAttr.Spellout.isEmpty() )
1202 const bool bWriteSpellout = aAttr.Format.isEmpty();
1203 assert(bWriteSpellout);
1215 OUString aLanguage, aScript, aCountry;
1240 bool bAnyContent =
false;
1261 sal_uInt16
nPos = 0;
1292 bool bDecDashes =
false;
1293 bool bExpFound =
false;
1294 bool bCurrFound =
false;
1295 bool bInInteger =
true;
1296 bool bExpSign =
true;
1297 bool bDecAlign =
false;
1298 sal_Int32 nExpDigits = 0;
1299 sal_Int32 nIntegerSymbols = 0;
1300 sal_Int32 nTrailingThousands = 0;
1301 sal_Int32 nMinDecimals = nPrecision;
1304 bool bImplicitOtherCalendar =
false;
1305 bool bExplicitCalendar =
false;
1306 sal_uInt16
nPos = 0;
1313 switch ( nElemType )
1319 if ( bExpFound && pElemStr )
1320 nExpDigits += pElemStr->getLength();
1321 else if ( !bDecDashes && pElemStr && (*pElemStr)[0] ==
'-' )
1326 else if ( !bInInteger && pElemStr )
1328 for ( sal_Int32
i = pElemStr->getLength()-1;
i >= 0 ;
i-- )
1331 if ( aChar ==
'#' || aChar ==
'?' )
1341 if ( bInInteger && pElemStr )
1342 nIntegerSymbols += pElemStr->getLength();
1343 nTrailingThousands = 0;
1350 nTrailingThousands += pElemStr->getLength();
1355 if ( pElemStr && ( pElemStr->getLength() == 1
1356 || ( pElemStr->getLength() == 2 && (*pElemStr)[1] ==
'-' ) ) )
1364 sCurrExt = *pElemStr;
1373 if (aCalendar.isEmpty())
1376 bImplicitOtherCalendar =
true;
1385 bool bAllowEmbedded = ( nFmtType == SvNumFormatType::ALL || nFmtType == SvNumFormatType::NUMBER ||
1386 nFmtType == SvNumFormatType::CURRENCY ||
1387 nFmtType == SvNumFormatType::PERCENT );
1388 if ( bAllowEmbedded )
1390 sal_Int32 nDigitsPassed = 0;
1398 switch ( nElemType )
1405 nDigitsPassed += pElemStr->getLength();
1410 if ( nDigitsPassed > 0 && nDigitsPassed < nIntegerSymbols && pElemStr )
1414 OUString aEmbeddedStr;
1417 aEmbeddedStr = *pElemStr;
1419 else if (pElemStr->getLength() >= 2)
1423 sal_Int32 nEmbedPos = nIntegerSymbols - nDigitsPassed;
1426 SvXMLEmbeddedTextEntry(
nPos, nEmbedPos, aEmbeddedStr));
1436 bool bNumWritten =
false;
1437 bool bCurrencyWritten =
false;
1438 short nPrevType = 0;
1446 switch ( nElemType )
1474 else if ( nFmtType == SvNumFormatType::CURRENCY && !bCurrFound && !bCurrencyWritten )
1493 if (pElemStr->getLength() >= 2)
1505 if ( bCurrencyWritten )
1515 bCurrencyWritten =
true;
1522 if ( bCurrencyWritten )
1528 bCurrencyWritten =
true;
1539 case SvNumFormatType::ALL:
1540 case SvNumFormatType::NUMBER:
1541 case SvNumFormatType::CURRENCY:
1542 case SvNumFormatType::PERCENT:
1546 sal_Int32 nDecimals = nPrecision;
1556 sal_Int32 nInteger = nLeading;
1563 OUStringBuffer sDashStr;
1564 if (bDecDashes && nPrecision > 0)
1567 if (bDecAlign && nPrecision > 0)
1571 bThousand, nTrailingThousands, aEmbeddedEntries);
1575 case SvNumFormatType::SCIENTIFIC:
1582 case SvNumFormatType::FRACTION:
1584 sal_Int32 nInteger = nLeading;
1603 if ( pElemStr && nPrecision == 0 )
1614 if ( pElemStr && *pElemStr ==
"@" )
1624 aCalendar = *pElemStr;
1625 bExplicitCalendar =
true;
1634 bool bLong = ( nElemType ==
NF_KEY_DD );
1647 OUString aCalAttr = aCalendar;
1651 if (aCalAttr.isEmpty())
1695 ((bImplicitOtherCalendar && !bExplicitCalendar
1697 (bSystemDate ? bLongSysDate : bLong));
1720 bool bLong = ( nElemType ==
NF_KEY_QQ );
1756 if ( pElemStr && pElemStr->getLength() > 1 )
1761 nPrevType = nElemType;
1784 double fLimit1, fLimit2;
1801 double fLimit3 = fLimit2;
1802 sal_uInt16 nLastPart = 2;
1821 if ( fLimit1 == fLimit2 &&
1838 const sal_uInt16 XMLNUM_MAX_PARTS = 4;
1839 bool bParts[XMLNUM_MAX_PARTS] = {
false,
false,
false,
false };
1840 sal_uInt16 nUsedParts = 0;
1841 for (sal_uInt16 nPart=0; nPart<XMLNUM_MAX_PARTS; ++nPart)
1845 bParts[nPart] =
true;
1846 nUsedParts = nPart + 1;
1851 double fLimit1, fLimit2;
1875 for (sal_uInt16 nPart=0; nPart<XMLNUM_MAX_PARTS; ++nPart)
1879 bool bDefault = ( nPart+1 == nUsedParts );
1894 bool bNext(
pUsedList->GetFirstUsed(nKey));
1899 sal_uInt32 nRealKey = nKey;
1907 std::vector<LanguageType> aLanguages;
1909 for (
const auto& nLang : aLanguages)
1911 sal_uInt32 nDefaultIndex = 0;
1913 SvNumFormatType::DEFINED, nDefaultIndex, nLang );
1914 for (
const auto& rTableEntry : rTable)
1916 nKey = rTableEntry.first;
1917 pFormat = rTableEntry.second;
1920 DBG_ASSERT((pFormat->
GetType() & SvNumFormatType::DEFINED),
"a not user defined numberformat found");
1921 sal_uInt32 nRealKey = nKey;
1944 OSL_FAIL(
"There is no written Data-Style");
1958 OSL_FAIL(
"no existing Numberformat found with this key");
1966 return uno::Sequence<sal_Int32>();
1978 return ( pFormatter !=
nullptr ) ? pFormatter->
GetEntry( nKey ) :
nullptr;
1983 sal_uInt32 nRet = nKey;
1986 if( pFormat !=
nullptr )
1995 if( nNewKey != nKey )
2002 sal_Int32 nErrorPos;
2005 nErrorPos,
nType, nNewKey,
2009 if( nErrorPos == 0 )
css::uno::Sequence< OUString > getAllCalendars(const css::lang::Locale &rLocale) const
OUString uppercase(const OUString &rStr, sal_Int32 nPos, sal_Int32 nCount) const
LanguageType getLanguageType(bool bResolveSystem=true) const
static css::lang::Locale convertToLocale(LanguageType nLangID, bool bResolveSystem=true)
void getIsoLanguageScriptCountry(OUString &rLanguage, OUString &rScript, OUString &rCountry) const
static LanguageType getConfiguredSystemLanguage()
const SvXMLEmbeddedTextEntry & operator[](size_t i) const
std::vector< SvXMLEmbeddedTextEntry > DataType
void push_back(SvXMLEmbeddedTextEntry const &r)
void AddAttribute(sal_uInt16 nPrefix, const OUString &rName, const OUString &rValue)
void Characters(const OUString &rChars)
SvtSaveOptions::ODFSaneDefaultVersion getSaneDefaultVersion() const
returns the deterministic version for odf export
OUString EncodeStyleName(const OUString &rName, bool *pEncoded=nullptr) const
const css::uno::Reference< css::uno::XComponentContext > & getComponentContext() const
void AddLanguageTagAttributes(sal_uInt16 nPrefix, sal_uInt16 nPrefixRfc, const css::lang::Locale &rLocale, bool bWriteEmpty)
Add language tag attributes, deciding which are necessary.
static sal_uInt16 GetDefaultDateFormat(SvXMLDateElementAttributes eDOW, SvXMLDateElementAttributes eDay, SvXMLDateElementAttributes eMonth, SvXMLDateElementAttributes eYear, SvXMLDateElementAttributes eHours, SvXMLDateElementAttributes eMins, SvXMLDateElementAttributes eSecs, bool bSystem)
SAL_DLLPRIVATE void WriteHoursElement_Impl(bool bLong)
SAL_DLLPRIVATE void WriteQuarterElement_Impl(const OUString &rCalendar, bool bLong)
SAL_DLLPRIVATE void WriteSecondsElement_Impl(bool bLong, sal_uInt16 nDecimals)
OUStringBuffer sTextContent
SAL_DLLPRIVATE void WriteMinutesElement_Impl(bool bLong)
std::unique_ptr< LocaleDataWrapper > pLocaleData
SAL_DLLPRIVATE void WriteScientificElement_Impl(sal_Int32 nDecimals, sal_Int32 nMinDecimals, sal_Int32 nInteger, bool bGrouping, sal_Int32 nExp, sal_Int32 nExpInterval, bool bExpSign)
css::uno::Sequence< sal_Int32 > GetWasUsed() const
SAL_DLLPRIVATE void AddToTextElement_Impl(std::u16string_view rString)
SAL_DLLPRIVATE void WriteFractionElement_Impl(sal_Int32 nInteger, bool bGrouping, const SvNumberformat &rFormat, sal_uInt16 nPart)
SAL_DLLPRIVATE void ExportPart_Impl(const SvNumberformat &rFormat, sal_uInt32 nKey, sal_uInt32 nRealKey, sal_uInt16 nPart, bool bDefPart)
SvNumberFormatter * pFormatter
SAL_DLLPRIVATE void WriteDayOfWeekElement_Impl(const OUString &rCalendar, bool bLong)
std::unique_ptr< SvXMLNumUsedList_Impl > pUsedList
SAL_DLLPRIVATE void WriteAMPMElement_Impl()
SAL_DLLPRIVATE void WriteCurrencyElement_Impl(const OUString &rString, std::u16string_view rExt)
SAL_DLLPRIVATE void WriteTextContentElement_Impl()
SAL_DLLPRIVATE void AddCalendarAttr_Impl(const OUString &rCalendar)
sal_uInt32 ForceSystemLanguage(sal_uInt32 nKey)
obtain number format with system language for a given key
SAL_DLLPRIVATE void WriteWeekElement_Impl(const OUString &rCalendar)
OUString GetStyleName(sal_uInt32 nKey)
SAL_DLLPRIVATE void WriteColorElement_Impl(const Color &rColor)
SAL_DLLPRIVATE bool WriteTextWithCurrency_Impl(const OUString &rString, const css::lang::Locale &rLocale)
SAL_DLLPRIVATE void WriteMonthElement_Impl(const OUString &rCalendar, bool bLong, bool bText)
SAL_DLLPRIVATE void ExportFormat_Impl(const SvNumberformat &rFormat, sal_uInt32 nKey, sal_uInt32 nRealKey)
SAL_DLLPRIVATE void WriteDayElement_Impl(const OUString &rCalendar, bool bLong)
SAL_DLLPRIVATE void WriteNumberElement_Impl(sal_Int32 nDecimals, sal_Int32 nMinDecimals, sal_Int32 nInteger, const OUString &rDashStr, bool bGrouping, sal_Int32 nTrailingThousands, const SvXMLEmbeddedTextEntryArr &rEmbeddedEntries)
void Export(bool bIsAutoStyle)
SAL_DLLPRIVATE void WriteYearElement_Impl(const OUString &rCalendar, bool bLong)
SAL_DLLPRIVATE void WriteEraElement_Impl(const OUString &rCalendar, bool bLong)
SAL_DLLPRIVATE void FinishTextElement_Impl(bool bUseExtensionNS=false)
SAL_DLLPRIVATE void WriteRepeatedElement_Impl(sal_Unicode ch)
SAL_DLLPRIVATE void AddStyleAttr_Impl(bool bLong)
SvXMLNumFmtExport(SvXMLExport &rExport, const css::uno::Reference< css::util::XNumberFormatsSupplier > &rSupp)
SAL_DLLPRIVATE void AddLanguageAttr_Impl(LanguageType nLang)
SAL_DLLPRIVATE void WriteMapElement_Impl(sal_Int32 nOp, double fLimit, sal_Int32 nKey, sal_Int32 nPart)
void SetUsed(sal_uInt32 nKey)
SAL_DLLPRIVATE void WriteBooleanElement_Impl()
void SetWasUsed(const css::uno::Sequence< sal_Int32 > &rWasUsed)
SvXMLuInt32Set::iterator aCurrentUsedPos
bool GetNextUsed(sal_uInt32 &nKey)
bool GetFirstUsed(sal_uInt32 &nKey)
bool IsWasUsed(sal_uInt32 nKey) const
void SetWasUsed(const uno::Sequence< sal_Int32 > &rWasUsed)
bool IsUsed(sal_uInt32 nKey) const
SvXMLNumUsedList_Impl()
SvXMLNumUsedList_Impl should be optimized!
void SetUsed(sal_uInt32 nKey)
uno::Sequence< sal_Int32 > GetWasUsed() const
static void convertDouble(OUStringBuffer &rBuffer, double fNumber, bool bWriteUnits, sal_Int16 nSourceUnit, sal_Int16 nTargetUnit)
static bool convertColor(sal_Int32 &rColor, std::u16string_view rValue)
#define DBG_ASSERT(sCon, aError)
#define SAL_WARN_IF(condition, area, stream)
#define SAL_WARN(area, stream)
OStringBuffer & padToLength(OStringBuffer &rBuffer, sal_Int32 nLength, char cFill='\0')
sal_Int32 toInt32(std::u16string_view str, sal_Int16 radix=10)
NF_SYMBOLTYPE_TIME100SECSEP
Handling of tokens in XML:
XMLTokenEnum
The enumeration of all XML tokens.
@ XML_DECIMAL_REPLACEMENT
@ XML_INTEGER_FRACTION_DELIMITER
@ XML_FORCED_EXPONENT_SIGN
@ XML_ZEROS_NUMERATOR_DIGITS
@ XML_MAX_NUMERATOR_DIGITS
@ XML_TRUNCATE_ON_OVERFLOW
@ XML_MAX_DENOMINATOR_VALUE
@ XML_TRANSLITERATION_STYLE
@ XML_ZEROS_DENOMINATOR_DIGITS
@ XML_TRANSLITERATION_FORMAT
@ XML_TRANSLITERATION_COUNTRY
@ XML_MIN_NUMERATOR_DIGITS
@ XML_TRANSLITERATION_SPELLOUT
@ XML_MIN_EXPONENT_DIGITS
@ XML_MIN_DENOMINATOR_DIGITS
@ XML_TRANSLITERATION_LANGUAGE
constexpr sal_uInt16 XML_NAMESPACE_LO_EXT
constexpr sal_uInt16 XML_NAMESPACE_STYLE
constexpr sal_uInt16 XML_NAMESPACE_FO
constexpr sal_uInt16 XML_NAMESPACE_NUMBER
std::set< sal_uInt32 > SvXMLuInt32Set
static bool lcl_IsDefaultDateFormat(const SvNumberformat &rFormat, bool bSystemDate, NfIndexTableOffset eBuiltIn)
static const SvNumberformat * lcl_GetFormat(SvNumberFormatter const *pFormatter, sal_uInt32 nKey)
static OUString lcl_GetDefaultCalendar(SvNumberFormatter const *pFormatter, LanguageType nLang)
static OUString lcl_CreateStyleName(sal_Int32 nKey, sal_Int32 nPart, bool bDefPart, std::u16string_view rPrefix)
static bool lcl_IsInEmbedded(const SvXMLEmbeddedTextEntryArr &rEmbeddedEntries, sal_uInt16 nPos)
static sal_Int32 lcl_FindSymbol(const OUString &sUpperStr, std::u16string_view sCurString)
SvXMLDateElementAttributes
std::unordered_map< sal_uInt32, SvNumberformat * > SvNumberFormatTable
NF_DATETIME_SYS_DDMMYYYY_HHMMSS
NF_CURRENCY_1000DEC2_DASHED
NF_DATE_SYS_NNNNDMMMMYYYY
NF_DATETIME_SYS_DDMMYYYY_HHMM
NF_DATETIME_SYSTEM_SHORT_HHMM