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>
64struct SvXMLEmbeddedTextEntry
66 sal_uInt16 nSourcePos;
70 SvXMLEmbeddedTextEntry( sal_uInt16 nSP, sal_Int32 nFP, OUString aT ) :
71 nSourcePos(nSP), nFormatPos(nFP), aText(std::move(aT)) {}
78 typedef std::vector<SvXMLEmbeddedTextEntry>
DataType;
88 const SvXMLEmbeddedTextEntry&
operator[] (
size_t i )
const
110 void SetUsed( sal_uInt32 nKey );
111 bool IsUsed( sal_uInt32 nKey )
const;
119 void SetWasUsed(
const uno::Sequence<sal_Int32>& rWasUsed);
134 std::pair<SvXMLuInt32Set::iterator, bool> aPair =
aUsed.insert( nKey );
142 SvXMLuInt32Set::const_iterator aItr =
aUsed.find(nKey);
143 return (aItr !=
aUsed.end());
148 SvXMLuInt32Set::const_iterator aItr =
aWasUsed.find(nKey);
154 SvXMLuInt32Set::const_iterator aItr =
aUsed.begin();
155 while (aItr !=
aUsed.end())
157 std::pair<SvXMLuInt32Set::const_iterator, bool> aPair =
aWasUsed.insert( *aItr );
196 return comphelper::containerToSequence<sal_Int32>(
aWasUsed);
202 for (
const auto nWasUsed : rWasUsed)
204 std::pair<SvXMLuInt32Set::const_iterator, bool> aPair =
aWasUsed.insert( nWasUsed );
212 const uno::Reference< util::XNumberFormatsSupplier >& rSupp ) :
214 m_sPrefix( OUString(
"N") ),
215 m_pFormatter( nullptr ),
220 comphelper::getFromUnoTunnel<SvNumberFormatsSupplierObj>( rSupp );
227 m_pFormatter->GetLanguageTag() ) );
233 m_pLocaleData.reset(
new LocaleDataWrapper( m_rExport.getComponentContext(), std::move(aLanguageTag) ) );
241 const css::uno::Reference< css::util::XNumberFormatsSupplier >& rSupp,
244 m_sPrefix(
std::move( aPrefix )),
245 m_pFormatter( nullptr ),
250 comphelper::getFromUnoTunnel<SvNumberFormatsSupplierObj>( rSupp );
275static OUString
lcl_CreateStyleName( sal_Int32 nKey, sal_Int32 nPart,
bool bDefPart, std::u16string_view rPrefix )
278 return rPrefix + OUString::number(nKey);
280 return rPrefix + OUString::number(nKey) +
"P" + OUString::number( nPart );
285 if ( !rCalendar.isEmpty() )
338 OUStringBuffer aColStr( 7 );
341 aColStr.makeStringAndClear() );
348 std::u16string_view rExt )
360 SAL_WARN_IF(nLang > 0xFFFF,
"xmloff.style",
"Out of range Lang Id: " << nLang <<
" from input string: " << OUString(rExt));
513 OUString::number( nDecimals ) );
531 sal_Int32 nInteger, sal_Int32 nBlankInteger,
bool bGrouping )
537 OUString::number( nInteger ) );
544 OUString::number( nBlankInteger ) );
555 auto nEntryCount = rEmbeddedEntries.
size();
556 for (
decltype(nEntryCount) nEntry=0; nEntry < nEntryCount; ++nEntry)
558 const SvXMLEmbeddedTextEntry *
const pObj = &rEmbeddedEntries[nEntry];
564 OUString::number( pObj->nFormatPos ) );
569 OUStringBuffer aContent( pObj->aText );
570 while ( nEntry+1 < nEntryCount && rEmbeddedEntries[nEntry+1].nFormatPos == pObj->nFormatPos )
575 aContent.append(rEmbeddedEntries[nEntry+1].aText);
583 sal_Int32 nDecimals, sal_Int32 nMinDecimals,
584 sal_Int32 nInteger, sal_Int32 nBlankInteger,
const OUString& rDashStr,
585 bool bGrouping, sal_Int32 nTrailingThousands,
591 if ( nDecimals >= 0 )
594 OUString::number( nDecimals ) );
597 if ( nMinDecimals >= 0 )
607 OUString::number( nMinDecimals ) );
611 if ( !rDashStr.isEmpty() || nMinDecimals < nDecimals )
621 if ( nTrailingThousands )
624 double fFactor = ::rtl::math::pow10Exp( 1.0, 3 * nTrailingThousands );
626 OUStringBuffer aFactStr;
639 sal_Int32 nDecimals, sal_Int32 nMinDecimals, sal_Int32 nInteger, sal_Int32 nBlankInteger,
640 bool bGrouping, sal_Int32 nExp, sal_Int32 nExpInterval,
bool bExpSign,
646 if ( nDecimals >= 0 )
649 OUString::number( nDecimals ) );
653 if ( nMinDecimals >= 0 )
662 OUString::number( nMinDecimals ) );
672 OUString::number( nExp ) );
676 if ( nExpInterval >= 0 )
710 sal_Int32 nInteger, sal_Int32 nBlankInteger,
bool bGrouping,
719 sal_Int32 nMaxNumeratorDigits = aNumeratorString.getLength();
721 sal_Int32 nMinNumeratorDigits = aNumeratorString.replaceAll(
"0",
"?").indexOf(
'?');
722 sal_Int32 nZerosNumeratorDigits = aNumeratorString.indexOf(
'0');
723 if ( nMinNumeratorDigits >= 0 )
724 nMinNumeratorDigits = nMaxNumeratorDigits - nMinNumeratorDigits;
726 nMinNumeratorDigits = 0;
727 if ( nZerosNumeratorDigits >= 0 )
728 nZerosNumeratorDigits = nMaxNumeratorDigits - nZerosNumeratorDigits;
730 nZerosNumeratorDigits = 0;
731 sal_Int32 nMaxDenominatorDigits = aDenominatorString.getLength();
732 sal_Int32 nMinDenominatorDigits = aDenominatorString.replaceAll(
"0",
"?").indexOf(
'?');
733 sal_Int32 nZerosDenominatorDigits = aDenominatorString.indexOf(
'0');
734 if ( nMinDenominatorDigits >= 0 )
735 nMinDenominatorDigits = nMaxDenominatorDigits - nMinDenominatorDigits;
737 nMinDenominatorDigits = 0;
738 if ( nZerosDenominatorDigits >= 0 )
739 nZerosDenominatorDigits = nMaxDenominatorDigits - nZerosDenominatorDigits;
741 nZerosDenominatorDigits = 0;
742 sal_Int32 nDenominator = aDenominatorString.toInt32();
747 if ( !aIntegerFractionDelimiterString.isEmpty() && aIntegerFractionDelimiterString !=
" "
751 aIntegerFractionDelimiterString );
755 if ( nMinNumeratorDigits == 0 )
756 nMinNumeratorDigits++;
758 OUString::number( nMinNumeratorDigits ) );
764 OUString::number( nMaxNumeratorDigits ) );
768 OUString::number( nZerosNumeratorDigits ) );
773 OUString::number( nDenominator) );
779 if ( nMinDenominatorDigits == 0 )
780 nMinDenominatorDigits++;
782 OUString::number( nMinDenominatorDigits ) );
789 OUString::number( pow ( 10.0, nMaxDenominatorDigits ) - 1 ) );
793 OUString::number( nZerosDenominatorDigits ) );
803 sal_Int32 nKey, sal_Int32 nPart )
812 OUStringBuffer aCondStr(20);
813 aCondStr.append(
"value()" );
823 OSL_FAIL(
"unknown operator");
825 ::rtl::math::doubleToUStringBuffer( aCondStr, fLimit,
826 rtl_math_StringFormat_Automatic, rtl_math_DecimalPlaces_Max,
830 aCondStr.makeStringAndClear() );
842static sal_Int32
lcl_FindSymbol(
const OUString& sUpperStr, std::u16string_view sCurString )
850 nCPos = sUpperStr.indexOf( sCurString, nCPos );
861 c = sUpperStr[nCPos-1];
862 if ( c !=
'"' && c !=
'\\')
881 const css::lang::Locale& rLocale )
889 OUString sCurString, sDummy;
896 sal_Int32
nLength = rString.getLength();
897 sal_Int32 nCurLen = sCurString.getLength();
898 sal_Int32 nCont =
nPos + nCurLen;
933 const uno::Sequence<OUString> aCals = pCalendar->
getAllCalendars( aLocale );
934 auto pCal = std::find_if(aCals.begin(), aCals.end(),
935 [](
const OUString& rCal) { return rCal !=
"gregorian"; });
936 if (pCal != aCals.end())
946 if ( rEmbeddedEntries[
i].nSourcePos ==
nPos )
964 bool bDateNoDefault =
false;
976 bDateNoDefault =
true;
1006 bDateNoDefault =
true;
1008 nLastType = nElemType;
1012 if ( bDateNoDefault )
1017 eDateDOW, eDateDay, eDateMonth, eDateYear, eDateHours, eDateMins, eDateSecs, bSystemDate ));
1019 return ( eFound == eBuiltIn );
1026 sal_uInt16 nPart,
bool bDefPart )
1035 bool bThousand =
false;
1036 sal_uInt16 nPrecision = 0;
1037 sal_uInt16 nLeading = 0;
1038 rFormat.
GetNumForInfo( nPart, nFmtType, bThousand, nPrecision, nLeading);
1044 nFmtType = SvNumFormatType::NUMBER;
1046 nFmtType = SvNumFormatType::LOGICAL;
1047 else if ( eBuiltIn ==
NF_TEXT )
1048 nFmtType = SvNumFormatType::TEXT;
1060 case SvNumFormatType::UNDEFINED:
1065 case SvNumFormatType::ALL:
1066 case SvNumFormatType::EMPTY:
1067 case SvNumFormatType::NUMBER:
1068 case SvNumFormatType::SCIENTIFIC:
1069 case SvNumFormatType::FRACTION:
1072 case SvNumFormatType::PERCENT:
1075 case SvNumFormatType::CURRENCY:
1078 case SvNumFormatType::DATE:
1079 case SvNumFormatType::DATETIME:
1082 case SvNumFormatType::TIME:
1085 case SvNumFormatType::TEXT:
1088 case SvNumFormatType::LOGICAL:
1095 OUString sAttrValue;
1096 bool bUserDef( rFormat.
GetType() & SvNumFormatType::DEFINED );
1115 if ( !sAttrValue.isEmpty() && bUserDef && bDefPart )
1142 if ( bAutoOrder && ( nFmtType == SvNumFormatType::DATE || nFmtType == SvNumFormatType::DATETIME ) &&
1145 bAutoOrder = bSystemDate = bLongSysDate =
false;
1149 ( nFmtType == SvNumFormatType::CURRENCY || nFmtType == SvNumFormatType::DATE || nFmtType == SvNumFormatType::DATETIME ) )
1158 if ( bSystemDate && bAutoOrder &&
1159 ( nFmtType == SvNumFormatType::DATE || nFmtType == SvNumFormatType::DATETIME ) )
1171 if ( nFmtType == SvNumFormatType::TIME && bThousand )
1178 css::i18n::NativeNumberXmlAttributes2 aAttr;
1180 if ( !aAttr.Format.isEmpty() )
1182 assert(aAttr.Spellout.isEmpty());
1187 OUString aLanguage, aScript, aCountry;
1199 if ( !aAttr.Spellout.isEmpty() )
1201 const bool bWriteSpellout = aAttr.Format.isEmpty();
1202 assert(bWriteSpellout);
1214 OUString aLanguage, aScript, aCountry;
1239 bool bAnyContent =
false;
1260 sal_uInt16
nPos = 0;
1291 bool bDecDashes =
false;
1292 bool bExpFound =
false;
1293 bool bCurrFound =
false;
1294 bool bInInteger =
true;
1295 bool bExpSign =
true;
1296 bool bDecAlign =
false;
1297 sal_Int32 nExpDigits = 0;
1298 sal_Int32 nIntegerSymbols = 0;
1299 sal_Int32 nTrailingThousands = 0;
1300 sal_Int32 nMinDecimals = nPrecision;
1301 sal_Int32 nBlankInteger = 0;
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 ( nFmtType != SvNumFormatType::FRACTION && !bInInteger && pElemStr )
1328 for ( sal_Int32
i = pElemStr->getLength()-1;
i >= 0 ;
i-- )
1331 if ( aChar ==
'#' || aChar ==
'?' )
1341 if ( bInInteger && pElemStr )
1343 nIntegerSymbols += pElemStr->getLength();
1344 for ( sal_Int32
i = pElemStr->getLength()-1;
i >= 0 ;
i-- )
1346 if ( (*pElemStr)[
i] ==
'?' )
1350 nTrailingThousands = 0;
1358 nTrailingThousands += pElemStr->getLength();
1363 if ( pElemStr && ( pElemStr->getLength() == 1
1364 || ( pElemStr->getLength() == 2 && (*pElemStr)[1] ==
'-' ) ) )
1372 sCurrExt = *pElemStr;
1381 if (aCalendar.isEmpty())
1384 bImplicitOtherCalendar =
true;
1393 bool bAllowEmbedded = ( nFmtType == SvNumFormatType::ALL || nFmtType == SvNumFormatType::NUMBER ||
1394 nFmtType == SvNumFormatType::CURRENCY ||
1397 nFmtType == SvNumFormatType::PERCENT );
1398 if ( bAllowEmbedded )
1400 sal_Int32 nDigitsPassed = 0;
1401 sal_Int32 nEmbeddedPositionsMax = nIntegerSymbols;
1404 nEmbeddedPositionsMax += nPrecision + 1;
1412 switch ( nElemType )
1419 nDigitsPassed += pElemStr->getLength();
1427 if ( 0 < nDigitsPassed && nDigitsPassed < nEmbeddedPositionsMax && pElemStr )
1431 OUString aEmbeddedStr;
1434 aEmbeddedStr = *pElemStr;
1436 else if (pElemStr->getLength() >= 2)
1440 sal_Int32 nEmbedPos = nIntegerSymbols - nDigitsPassed;
1443 SvXMLEmbeddedTextEntry(
nPos, nEmbedPos, aEmbeddedStr));
1453 bool bNumWritten =
false;
1454 bool bCurrencyWritten =
false;
1455 short nPrevType = 0;
1463 switch ( nElemType )
1480 ( nFmtType == SvNumFormatType::TIME || nFmtType == SvNumFormatType::DATETIME ) ) ) &&
1493 else if ( nFmtType == SvNumFormatType::CURRENCY && !bCurrFound && !bCurrencyWritten )
1512 if (pElemStr->getLength() >= 2)
1524 if ( bCurrencyWritten )
1534 bCurrencyWritten =
true;
1541 if ( bCurrencyWritten )
1547 bCurrencyWritten =
true;
1558 case SvNumFormatType::ALL:
1559 case SvNumFormatType::NUMBER:
1560 case SvNumFormatType::CURRENCY:
1561 case SvNumFormatType::PERCENT:
1565 sal_Int32 nDecimals = nPrecision;
1575 sal_Int32 nInteger = nLeading;
1585 OUStringBuffer sDashStr;
1586 if (bDecDashes && nPrecision > 0)
1589 if (bDecAlign && nPrecision > 0)
1593 bThousand, nTrailingThousands, aEmbeddedEntries);
1597 case SvNumFormatType::SCIENTIFIC:
1605 case SvNumFormatType::FRACTION:
1607 sal_Int32 nInteger = nLeading;
1627 if ( pElemStr && nPrecision == 0 )
1638 if ( pElemStr && *pElemStr ==
"@" )
1648 aCalendar = *pElemStr;
1649 bExplicitCalendar =
true;
1658 bool bLong = ( nElemType ==
NF_KEY_DD );
1671 OUString aCalAttr = aCalendar;
1675 if (aCalAttr.isEmpty())
1719 ((bImplicitOtherCalendar && !bExplicitCalendar
1721 (bSystemDate ? bLongSysDate : bLong));
1744 bool bLong = ( nElemType ==
NF_KEY_QQ );
1780 if ( pElemStr && pElemStr->getLength() > 1 )
1785 nPrevType = nElemType;
1808 double fLimit1, fLimit2;
1825 double fLimit3 = fLimit2;
1826 sal_uInt16 nLastPart = 2;
1845 if ( fLimit1 == fLimit2 &&
1862 const sal_uInt16 XMLNUM_MAX_PARTS = 4;
1863 bool bParts[XMLNUM_MAX_PARTS] = {
false,
false,
false,
false };
1864 sal_uInt16 nUsedParts = 0;
1865 for (sal_uInt16 nPart=0; nPart<XMLNUM_MAX_PARTS; ++nPart)
1869 bParts[nPart] =
true;
1870 nUsedParts = nPart + 1;
1875 double fLimit1, fLimit2;
1899 for (sal_uInt16 nPart=0; nPart<XMLNUM_MAX_PARTS; ++nPart)
1903 bool bDefault = ( nPart+1 == nUsedParts );
1923 sal_uInt32 nRealKey = nKey;
1931 std::vector<LanguageType> aLanguages;
1933 for (
const auto& nLang : aLanguages)
1935 sal_uInt32 nDefaultIndex = 0;
1937 SvNumFormatType::DEFINED, nDefaultIndex, nLang );
1938 for (
const auto& rTableEntry : rTable)
1940 nKey = rTableEntry.first;
1941 pFormat = rTableEntry.second;
1944 DBG_ASSERT((pFormat->
GetType() & SvNumFormatType::DEFINED),
"a not user defined numberformat found");
1945 sal_uInt32 nRealKey = nKey;
1968 OSL_FAIL(
"There is no written Data-Style");
1982 OSL_FAIL(
"no existing Numberformat found with this key");
1990 return uno::Sequence<sal_Int32>();
2002 return ( pFormatter !=
nullptr ) ? pFormatter->
GetEntry( nKey ) :
nullptr;
2007 sal_uInt32 nRet = nKey;
2010 if( pFormat !=
nullptr )
2019 if( nNewKey != nKey )
2026 sal_Int32 nErrorPos;
2029 nErrorPos,
nType, nNewKey,
2033 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)
SAL_DLLPRIVATE void WriteEmbeddedEntries_Impl(const SvXMLEmbeddedTextEntryArr &rEmbeddedEntries)
SAL_DLLPRIVATE void WriteMinutesElement_Impl(bool bLong)
css::uno::Sequence< sal_Int32 > GetWasUsed() const
SAL_DLLPRIVATE void WriteIntegerElement_Impl(sal_Int32 nInteger, sal_Int32 nBlankInteger, bool bGrouping)
SAL_DLLPRIVATE void AddToTextElement_Impl(std::u16string_view rString)
SAL_DLLPRIVATE void ExportPart_Impl(const SvNumberformat &rFormat, sal_uInt32 nKey, sal_uInt32 nRealKey, sal_uInt16 nPart, bool bDefPart)
SAL_DLLPRIVATE void WriteNumberElement_Impl(sal_Int32 nDecimals, sal_Int32 nMinDecimals, sal_Int32 nInteger, sal_Int32 nBlankInteger, const OUString &rDashStr, bool bGrouping, sal_Int32 nTrailingThousands, const SvXMLEmbeddedTextEntryArr &rEmbeddedEntries)
SAL_DLLPRIVATE void WriteDayOfWeekElement_Impl(const OUString &rCalendar, bool bLong)
OUStringBuffer m_sTextContent
std::unique_ptr< LocaleDataWrapper > m_pLocaleData
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 WriteFractionElement_Impl(sal_Int32 nInteger, sal_Int32 nBlankInteger, bool bGrouping, const SvNumberformat &rFormat, sal_uInt16 nPart)
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)
std::unique_ptr< SvXMLNumUsedList_Impl > m_pUsedList
SAL_DLLPRIVATE void ExportFormat_Impl(const SvNumberformat &rFormat, sal_uInt32 nKey, sal_uInt32 nRealKey)
SAL_DLLPRIVATE void WriteDayElement_Impl(const OUString &rCalendar, bool bLong)
void Export(bool bIsAutoStyle)
SAL_DLLPRIVATE void WriteYearElement_Impl(const OUString &rCalendar, bool bLong)
SAL_DLLPRIVATE void WriteScientificElement_Impl(sal_Int32 nDecimals, sal_Int32 nMinDecimals, sal_Int32 nInteger, sal_Int32 nBlankInteger, bool bGrouping, sal_Int32 nExp, sal_Int32 nExpInterval, bool bExpSign, const SvXMLEmbeddedTextEntryArr &rEmbeddedEntries)
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)
SvNumberFormatter * m_pFormatter
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_MAX_BLANK_INTEGER_DIGITS
@ 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::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