include/svl/zformat.hxx | 24 ++++---- svl/source/numbers/zformat.cxx | 119 ++++++++++++++++++++++------------------- 2 files changed, 78 insertions(+), 65 deletions(-)
New commits: commit 3ddada1c3ec4155632b7a0eeaf0707961c4703e0 Author: Caolán McNamara <[email protected]> AuthorDate: Tue Feb 17 09:46:35 2026 +0000 Commit: Caolán McNamara <[email protected]> CommitDate: Sat Feb 21 17:22:43 2026 +0100 bubble explicit SvNFLanguageData through calendar switching, etc Change-Id: Ia43293806e43803301086d00ce3fee4a000ebf94 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199836 Tested-by: Jenkins Reviewed-by: Caolán McNamara <[email protected]> diff --git a/include/svl/zformat.hxx b/include/svl/zformat.hxx index 0e9bcfc8190c..5aaa99d37033 100644 --- a/include/svl/zformat.hxx +++ b/include/svl/zformat.hxx @@ -474,13 +474,13 @@ public: /** Switches to the first non-"gregorian" calendar, but only if the current calendar is "gregorian"; original calendar name and date/time returned, but only if calendar switched and rOrgCalendar was empty. */ - void SwitchToOtherCalendar( OUString& rOrgCalendar, double& fOrgDateTime, CalendarWrapper& rCal ) const; + static void SwitchToOtherCalendar( const SvNFLanguageData& rCurrentLang, OUString& rOrgCalendar, double& fOrgDateTime, CalendarWrapper& rCal ); /** Switches to the "gregorian" calendar, but only if the current calendar is non-"gregorian" and rOrgCalendar is not empty. Thus a preceding ImpSwitchToOtherCalendar() call should have been placed prior to calling this method. */ - void SwitchToGregorianCalendar( std::u16string_view rOrgCalendar, double fOrgDateTime, CalendarWrapper& rCal ) const; + static void SwitchToGregorianCalendar( const SvNFLanguageData& rCurrentLang, std::u16string_view rOrgCalendar, double fOrgDateTime, CalendarWrapper& rCal ); #ifdef THE_FUTURE /** Switches to the first specified calendar, if any, in subformat nNumFor @@ -491,11 +491,11 @@ public: <TRUE/> if a calendar was specified and switched to, <FALSE/> else. */ - bool SwitchToSpecifiedCalendar( OUString& rOrgCalendar, double& fOrgDateTime, + bool SwitchToSpecifiedCalendar( const SvNFLanguageData& rCurrentLang, OUString& rOrgCalendar, double& fOrgDateTime, sal_uInt16 nNumFor ) const { if ( nNumFor < 4 ) - return ImpSwitchToSpecifiedCalendar( rOrgCalendar, + return ImpSwitchToSpecifiedCalendar( rCurrentLang, rOrgCalendar, fOrgDateTime, NumFor[nNumFor] ); return false; } @@ -527,7 +527,8 @@ private: SVL_DLLPRIVATE sal_uInt16 ImpGetNumForStringElementCount( sal_uInt16 nNumFor ) const; #ifdef THE_FUTURE - SVL_DLLPRIVATE bool ImpSwitchToSpecifiedCalendar( OUString& rOrgCalendar, + SVL_DLLPRIVATE bool ImpSwitchToSpecifiedCalendar( const SvNFLanguageData& rCurrentLang, + OUString& rOrgCalendar, double& fOrgDateTime, const ImpSvNumFor& rNumFor ) const; #endif @@ -729,9 +730,10 @@ private: // know a "before" era (like zh_TW ROC or ja_JP Gengou). If switched and // rOrgCalendar was "gregorian" the string is emptied. If rOrgCalendar was // empty the previous calendar name and date/time are returned. - SVL_DLLPRIVATE bool ImpFallBackToGregorianCalendar(OUString& rOrgCalendar, + SVL_DLLPRIVATE static bool ImpFallBackToGregorianCalendar(const SvNFLanguageData& rCurrentLang, + OUString& rOrgCalendar, double& fOrgDateTime, - CalendarWrapper& rCal) const; + CalendarWrapper& rCal); // Append a "G" short era string of the given calendar. In the case of a // Gengou calendar this is a one character abbreviation, for other @@ -780,11 +782,13 @@ private: const NativeNumberWrapper& rNatNum) const; // transliterate according to NativeNumber - SVL_DLLPRIVATE OUString impTransliterateImpl(const OUString& rStr, const SvNumberNatNum& rNum, sal_uInt16 nDateKey, const NativeNumberWrapper& rNatNum) const; + SVL_DLLPRIVATE static OUString impTransliterateImpl(const OUString& rStr, const SvNumberNatNum& rNum, sal_uInt16 nDateKey, + const NativeNumberWrapper& rNatNum, const SvNFLanguageData& rCurrentLang); - OUString impTransliterate(const OUString& rStr, const SvNumberNatNum& rNum, sal_uInt16 nDateKey, const NativeNumberWrapper& rNatNum) const + OUString static impTransliterate(const OUString& rStr, const SvNumberNatNum& rNum, sal_uInt16 nDateKey, + const NativeNumberWrapper& rNatNum, const SvNFLanguageData& rCurrentLang) { - return rNum.IsComplete() ? impTransliterateImpl(rStr, rNum, nDateKey, rNatNum) : rStr; + return rNum.IsComplete() ? impTransliterateImpl(rStr, rNum, nDateKey, rNatNum, rCurrentLang) : rStr; } }; diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx index 6ae372d51978..84da3b98c50e 100644 --- a/svl/source/numbers/zformat.cxx +++ b/svl/source/numbers/zformat.cxx @@ -3142,7 +3142,7 @@ bool SvNumberformat::ImpGetTimeOutput(double fNumber, const ImpSvNumberformatInfo& rInfo = NumFor[nIx].Info(); bool bInputLine; sal_Int32 nCntPost; - if ( rScan.GetStandardPrec() == SvNumberFormatter::INPUTSTRING_PRECISION && + if ( rCurrentLang.GetStandardPrec() == SvNumberFormatter::INPUTSTRING_PRECISION && 0 < rInfo.nCntPost && rInfo.nCntPost < kTimeSignificantRound ) { bInputLine = true; @@ -3272,7 +3272,7 @@ bool SvNumberformat::ImpGetTimeOutput(double fNumber, CalendarWrapper& rCal = *rCurrentLang.GetCalendar(); if ( !bCalendarSet ) { - double fDiff = DateTime::Sub( DateTime(rScan.GetNullDate()), rCal.getEpochStart()); + double fDiff = DateTime::Sub( DateTime(rCurrentLang.GetNullDate()), rCal.getEpochStart()); fDiff += fNumberOrig; rCal.setLocalDateTime( fDiff ); bCalendarSet = true; @@ -3481,16 +3481,18 @@ bool ImpIsOtherCalendar( const ImpSvNumFor& rNumFor, const CalendarWrapper& rCal } -void SvNumberformat::SwitchToOtherCalendar( OUString& rOrgCalendar, +//static +void SvNumberformat::SwitchToOtherCalendar( const SvNFLanguageData& rCurrentLang, + OUString& rOrgCalendar, double& fOrgDateTime, - CalendarWrapper& rCal ) const + CalendarWrapper& rCal ) { if ( rCal.getUniqueID() != GREGORIAN ) return; using namespace ::com::sun::star::i18n; const css::uno::Sequence< OUString > xCals = rCal.getAllCalendars( - rLoc().getLanguageTag().getLocale() ); + rCurrentLang.GetLocaleData()->getLanguageTag().getLocale() ); sal_Int32 nCnt = xCals.getLength(); if ( nCnt <= 1 ) return; @@ -3505,24 +3507,28 @@ void SvNumberformat::SwitchToOtherCalendar( OUString& rOrgCalendar, rOrgCalendar = rCal.getUniqueID(); fOrgDateTime = rCal.getDateTime(); } - rCal.loadCalendar( *pCal, rLoc().getLanguageTag().getLocale() ); + rCal.loadCalendar( *pCal, rCurrentLang.GetLocaleData()->getLanguageTag().getLocale() ); rCal.setDateTime( fOrgDateTime ); } -void SvNumberformat::SwitchToGregorianCalendar( std::u16string_view rOrgCalendar, +//static +void SvNumberformat::SwitchToGregorianCalendar( const SvNFLanguageData& rCurrentLang, + std::u16string_view rOrgCalendar, double fOrgDateTime, - CalendarWrapper& rCal ) const + CalendarWrapper& rCal ) { if ( rOrgCalendar.size() && rCal.getUniqueID() != GREGORIAN ) { - rCal.loadCalendar( GREGORIAN, rLoc().getLanguageTag().getLocale() ); + rCal.loadCalendar( GREGORIAN, rCurrentLang.GetLocaleData()->getLanguageTag().getLocale() ); rCal.setDateTime( fOrgDateTime ); } } -bool SvNumberformat::ImpFallBackToGregorianCalendar( OUString& rOrgCalendar, +//static +bool SvNumberformat::ImpFallBackToGregorianCalendar( const SvNFLanguageData& rCurrentLang, + OUString& rOrgCalendar, double& fOrgDateTime, - CalendarWrapper& rCal ) const + CalendarWrapper& rCal ) { using namespace ::com::sun::star::i18n; if ( rCal.getUniqueID() != GREGORIAN ) @@ -3539,7 +3545,7 @@ bool SvNumberformat::ImpFallBackToGregorianCalendar( OUString& rOrgCalendar, { rOrgCalendar.clear(); } - rCal.loadCalendar( GREGORIAN, rLoc().getLanguageTag().getLocale() ); + rCal.loadCalendar( GREGORIAN, rCurrentLang.GetLocaleData()->getLanguageTag().getLocale() ); rCal.setDateTime( fOrgDateTime ); return true; } @@ -3554,7 +3560,8 @@ bool SvNumberformat::ImpFallBackToGregorianCalendar( OUString& rOrgCalendar, * SwitchToSpecifiedCalendar(), see comment in * ImpSvNumberInputScan::GetDateRef() */ -bool SvNumberformat::ImpSwitchToSpecifiedCalendar( OUString& rOrgCalendar, +bool SvNumberformat::ImpSwitchToSpecifiedCalendar( const SvNFLanguageData& rCurrentLang, + OUString& rOrgCalendar, double& fOrgDateTime, const ImpSvNumFor& rNumFor ) const { @@ -3570,7 +3577,7 @@ bool SvNumberformat::ImpSwitchToSpecifiedCalendar( OUString& rOrgCalendar, rOrgCalendar = rCal.getUniqueID(); fOrgDateTime = rCal.getDateTime(); } - rCal.loadCalendar( rInfo.sStrArray[i], rLoc().getLocale() ); + rCal.loadCalendar( rInfo.sStrArray[i], rCurrentLang.GetLocaleData()->getLocale() ); rCal.setDateTime( fOrgDateTime ); return true; } @@ -3759,7 +3766,7 @@ bool SvNumberformat::ImpGetDateOutput(double fNumber, bool bRes = false; CalendarWrapper& rCal = *rCurrentLang.GetCalendar(); - if (!lcl_getValidDate( DateTime( rScan.GetNullDate() ), rCal.getEpochStart(), fNumber)) + if (!lcl_getValidDate( DateTime( rCurrentLang.GetNullDate() ), rCal.getEpochStart(), fNumber)) { sBuff = ImpSvNumberformatScan::sErrStr; return false; @@ -3772,9 +3779,9 @@ bool SvNumberformat::ImpGetDateOutput(double fNumber, bool bOtherCalendar = ImpIsOtherCalendar( NumFor[nIx], *rCurrentLang.GetCalendar() ); if ( bOtherCalendar ) { - SwitchToOtherCalendar( aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); + SwitchToOtherCalendar( rCurrentLang, aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); } - if ( ImpFallBackToGregorianCalendar( aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ) ) + if ( ImpFallBackToGregorianCalendar( rCurrentLang, aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ) ) { bOtherCalendar = false; } @@ -3811,9 +3818,9 @@ bool SvNumberformat::ImpGetDateOutput(double fNumber, aOrgCalendar = rCal.getUniqueID(); fOrgDateTime = rCal.getDateTime(); } - rCal.loadCalendar( rInfo.sStrArray[i], rLoc().getLanguageTag().getLocale() ); + rCal.loadCalendar( rInfo.sStrArray[i], rCurrentLang.GetLocaleData()->getLanguageTag().getLocale() ); rCal.setDateTime( fOrgDateTime ); - ImpFallBackToGregorianCalendar( aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); + ImpFallBackToGregorianCalendar( rCurrentLang, aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); break; case NF_SYMBOLTYPE_STAR: if( bStarFlag ) @@ -3838,7 +3845,7 @@ bool SvNumberformat::ImpGetDateOutput(double fNumber, // for example, Catalan "de març", but "d'abril" etc. if ( bUseSpellout ) { - aStr = impTransliterate(aStr, NumFor[nIx].GetNatNum(), rInfo.nTypeArray[i], rNatNum); + aStr = impTransliterate(aStr, NumFor[nIx].GetNatNum(), rInfo.nTypeArray[i], rNatNum, rCurrentLang); } sBuff.append(aStr); break; @@ -3859,7 +3866,7 @@ bool SvNumberformat::ImpGetDateOutput(double fNumber, nNatNum); if ( bUseSpellout ) { - aStr = impTransliterate(aStr, NumFor[nIx].GetNatNum(), rInfo.nTypeArray[i], rNatNum); + aStr = impTransliterate(aStr, NumFor[nIx].GetNatNum(), rInfo.nTypeArray[i], rNatNum, rCurrentLang); } sBuff.append(aStr); break; @@ -3874,7 +3881,7 @@ bool SvNumberformat::ImpGetDateOutput(double fNumber, // NatNum12: support variants of preposition, suffixation or article if ( bUseSpellout ) { - aStr = impTransliterate(aStr, NumFor[nIx].GetNatNum(), rInfo.nTypeArray[i], rNatNum); + aStr = impTransliterate(aStr, NumFor[nIx].GetNatNum(), rInfo.nTypeArray[i], rNatNum, rCurrentLang); } sBuff.append(aStr); break; @@ -3884,41 +3891,41 @@ bool SvNumberformat::ImpGetDateOutput(double fNumber, case NF_KEY_DDD: // DDD if ( bOtherCalendar ) { - SwitchToGregorianCalendar( aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); + SwitchToGregorianCalendar( rCurrentLang, aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); } aStr = rCal.getDisplayString( CalendarDisplayCode::SHORT_DAY_NAME, nNatNum ); // NatNum12: support at least capitalize, upper, lower, title if ( bUseSpellout ) { - aStr = impTransliterate(aStr, NumFor[nIx].GetNatNum(), rInfo.nTypeArray[i], rNatNum); + aStr = impTransliterate(aStr, NumFor[nIx].GetNatNum(), rInfo.nTypeArray[i], rNatNum, rCurrentLang); } sBuff.append(aStr); if ( bOtherCalendar ) { - SwitchToOtherCalendar( aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); + SwitchToOtherCalendar( rCurrentLang, aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); } break; case NF_KEY_DDDD: // DDDD if ( bOtherCalendar ) { - SwitchToGregorianCalendar( aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); + SwitchToGregorianCalendar( rCurrentLang, aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); } aStr = rCal.getDisplayString( CalendarDisplayCode::LONG_DAY_NAME, nNatNum ); // NatNum12: support variants of preposition, suffixation or article if ( bUseSpellout ) { - aStr = impTransliterate(aStr, NumFor[nIx].GetNatNum(), rInfo.nTypeArray[i], rNatNum); + aStr = impTransliterate(aStr, NumFor[nIx].GetNatNum(), rInfo.nTypeArray[i], rNatNum, rCurrentLang); } sBuff.append(aStr); if ( bOtherCalendar ) { - SwitchToOtherCalendar( aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); + SwitchToOtherCalendar( rCurrentLang, aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); } break; case NF_KEY_YY: // YY if ( bOtherCalendar ) { - SwitchToGregorianCalendar( aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); + SwitchToGregorianCalendar( rCurrentLang, aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); } // Prepend a minus sign if Gregorian BCE and era is not displayed. if (lcl_isSignedYear( rCal, NumFor[nIx] )) @@ -3928,13 +3935,13 @@ bool SvNumberformat::ImpGetDateOutput(double fNumber, sBuff.append(rCal.getDisplayString( CalendarDisplayCode::SHORT_YEAR, nNatNum )); if ( bOtherCalendar ) { - SwitchToOtherCalendar( aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); + SwitchToOtherCalendar( rCurrentLang, aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); } break; case NF_KEY_YYYY: // YYYY if ( bOtherCalendar ) { - SwitchToGregorianCalendar( aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); + SwitchToGregorianCalendar( rCurrentLang, aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); } // Prepend a minus sign if Gregorian BCE and era is not displayed. if (lcl_isSignedYear( rCal, NumFor[nIx] )) @@ -3957,12 +3964,12 @@ bool SvNumberformat::ImpGetDateOutput(double fNumber, // NatNum12: support variants of preposition, suffixation or article if ( bUseSpellout ) { - aStr = impTransliterate(aStr, NumFor[nIx].GetNatNum(), rInfo.nTypeArray[i], rNatNum); + aStr = impTransliterate(aStr, NumFor[nIx].GetNatNum(), rInfo.nTypeArray[i], rNatNum, rCurrentLang); } sBuff.append(aStr); if ( bOtherCalendar ) { - SwitchToOtherCalendar( aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); + SwitchToOtherCalendar( rCurrentLang, aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); } break; case NF_KEY_EC: // E @@ -3978,7 +3985,7 @@ bool SvNumberformat::ImpGetDateOutput(double fNumber, // NatNum12: support at least capitalize, upper, lower, title if ( bUseSpellout ) { - aStr = impTransliterate(aStr, NumFor[nIx].GetNatNum(), rInfo.nTypeArray[i], rNatNum); + aStr = impTransliterate(aStr, NumFor[nIx].GetNatNum(), rInfo.nTypeArray[i], rNatNum, rCurrentLang); } sBuff.append(aStr); break; @@ -3988,13 +3995,13 @@ bool SvNumberformat::ImpGetDateOutput(double fNumber, // NatNum12: support variants of preposition, suffixation or article if ( bUseSpellout ) { - aStr = impTransliterate(aStr, NumFor[nIx].GetNatNum(), rInfo.nTypeArray[i], rNatNum); + aStr = impTransliterate(aStr, NumFor[nIx].GetNatNum(), rInfo.nTypeArray[i], rNatNum, rCurrentLang); } sBuff.append(aStr); break; case NF_KEY_NNNN: // NNNN sBuff.append(rCal.getDisplayString( CalendarDisplayCode::LONG_DAY_NAME, nNatNum )); - sBuff.append(rLoc().getLongDateDayOfWeekSep()); + sBuff.append(rCurrentLang.GetLocaleData()->getLongDateDayOfWeekSep()); break; case NF_KEY_WW : // WW sBuff.append(ImpIntToString(rNatNum, nIx, @@ -4016,7 +4023,7 @@ bool SvNumberformat::ImpGetDateOutput(double fNumber, } if ( aOrgCalendar.getLength() ) { - rCal.loadCalendar( aOrgCalendar, rLoc().getLanguageTag().getLocale() ); // restore calendar + rCal.loadCalendar( aOrgCalendar, rCurrentLang.GetLocaleData()->getLanguageTag().getLocale() ); // restore calendar } return bRes; } @@ -4032,7 +4039,7 @@ bool SvNumberformat::ImpGetDateTimeOutput(double fNumber, bool bRes = false; CalendarWrapper& rCal = *rCurrentLang.GetCalendar(); - if (!lcl_getValidDate( DateTime( rScan.GetNullDate() ), rCal.getEpochStart(), fNumber)) + if (!lcl_getValidDate( DateTime( rCurrentLang.GetNullDate() ), rCal.getEpochStart(), fNumber)) { sBuff = ImpSvNumberformatScan::sErrStr; return false; @@ -4041,7 +4048,7 @@ bool SvNumberformat::ImpGetDateTimeOutput(double fNumber, const ImpSvNumberformatInfo& rInfo = NumFor[nIx].Info(); bool bInputLine; sal_Int32 nCntPost, nFirstRounding; - if ( rScan.GetStandardPrec() == SvNumberFormatter::INPUTSTRING_PRECISION && + if ( rCurrentLang.GetStandardPrec() == SvNumberFormatter::INPUTSTRING_PRECISION && 0 < rInfo.nCntPost && rInfo.nCntPost < kTimeSignificantRound ) { bInputLine = true; @@ -4070,9 +4077,9 @@ bool SvNumberformat::ImpGetDateTimeOutput(double fNumber, bool bOtherCalendar = ImpIsOtherCalendar( NumFor[nIx], *rCurrentLang.GetCalendar() ); if ( bOtherCalendar ) { - SwitchToOtherCalendar( aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); + SwitchToOtherCalendar( rCurrentLang, aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); } - if ( ImpFallBackToGregorianCalendar( aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ) ) + if ( ImpFallBackToGregorianCalendar( rCurrentLang, aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ) ) { bOtherCalendar = false; } @@ -4158,9 +4165,9 @@ bool SvNumberformat::ImpGetDateTimeOutput(double fNumber, aOrgCalendar = rCal.getUniqueID(); fOrgDateTime = rCal.getDateTime(); } - rCal.loadCalendar( rInfo.sStrArray[i], rLoc().getLanguageTag().getLocale() ); + rCal.loadCalendar( rInfo.sStrArray[i], rCurrentLang.GetLocaleData()->getLanguageTag().getLocale() ); rCal.setDateTime( fOrgDateTime ); - ImpFallBackToGregorianCalendar( aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); + ImpFallBackToGregorianCalendar( rCurrentLang, aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); break; case NF_SYMBOLTYPE_STAR: if( bStarFlag ) @@ -4268,29 +4275,29 @@ bool SvNumberformat::ImpGetDateTimeOutput(double fNumber, case NF_KEY_DDD: // DDD if ( bOtherCalendar ) { - SwitchToGregorianCalendar( aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); + SwitchToGregorianCalendar( rCurrentLang, aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); } sBuff.append(rCal.getDisplayString( CalendarDisplayCode::SHORT_DAY_NAME, nNatNum )); if ( bOtherCalendar ) { - SwitchToOtherCalendar( aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); + SwitchToOtherCalendar( rCurrentLang, aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); } break; case NF_KEY_DDDD: // DDDD if ( bOtherCalendar ) { - SwitchToGregorianCalendar( aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); + SwitchToGregorianCalendar( rCurrentLang, aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); } sBuff.append(rCal.getDisplayString( CalendarDisplayCode::LONG_DAY_NAME, nNatNum )); if ( bOtherCalendar ) { - SwitchToOtherCalendar( aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); + SwitchToOtherCalendar( rCurrentLang, aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); } break; case NF_KEY_YY: // YY if ( bOtherCalendar ) { - SwitchToGregorianCalendar( aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); + SwitchToGregorianCalendar( rCurrentLang, aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); } // Prepend a minus sign if Gregorian BCE and era is not displayed. if (lcl_isSignedYear( rCal, NumFor[nIx] )) @@ -4300,13 +4307,13 @@ bool SvNumberformat::ImpGetDateTimeOutput(double fNumber, sBuff.append(rCal.getDisplayString( CalendarDisplayCode::SHORT_YEAR, nNatNum )); if ( bOtherCalendar ) { - SwitchToOtherCalendar( aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); + SwitchToOtherCalendar( rCurrentLang, aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); } break; case NF_KEY_YYYY: // YYYY if ( bOtherCalendar ) { - SwitchToGregorianCalendar( aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); + SwitchToGregorianCalendar( rCurrentLang, aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); } // Prepend a minus sign if Gregorian BCE and era is not displayed. if (lcl_isSignedYear( rCal, NumFor[nIx] )) @@ -4332,7 +4339,7 @@ bool SvNumberformat::ImpGetDateTimeOutput(double fNumber, } if ( bOtherCalendar ) { - SwitchToOtherCalendar( aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); + SwitchToOtherCalendar( rCurrentLang, aOrgCalendar, fOrgDateTime, *rCurrentLang.GetCalendar() ); } break; case NF_KEY_EC: // E @@ -4352,7 +4359,7 @@ bool SvNumberformat::ImpGetDateTimeOutput(double fNumber, break; case NF_KEY_NNNN: // NNNN sBuff.append(rCal.getDisplayString( CalendarDisplayCode::LONG_DAY_NAME, nNatNum )); - sBuff.append(rLoc().getLongDateDayOfWeekSep()); + sBuff.append(rCurrentLang.GetLocaleData()->getLongDateDayOfWeekSep()); break; case NF_KEY_WW : // WW sBuff.append(ImpIntToString(rNatNum, nIx, rCal.getValue( CalendarFieldIndex::WEEK_OF_YEAR ))); @@ -4373,7 +4380,7 @@ bool SvNumberformat::ImpGetDateTimeOutput(double fNumber, } if ( aOrgCalendar.getLength() ) { - rCal.loadCalendar( aOrgCalendar, rLoc().getLanguageTag().getLocale() ); // restore calendar + rCal.loadCalendar( aOrgCalendar, rCurrentLang.GetLocaleData()->getLanguageTag().getLocale() ); // restore calendar } return bRes; } @@ -5739,16 +5746,18 @@ OUString SvNumberformat::ImpGetNatNumString(const SvNumberNatNum& rNum, return ::impTransliterate(aStr, rNum, rNatNum); } +//static OUString SvNumberformat::impTransliterateImpl(const OUString& rStr, const SvNumberNatNum& rNum, const sal_uInt16 nDateKey, - const NativeNumberWrapper& rNatNum) const + const NativeNumberWrapper& rNatNum, + const SvNFLanguageData& rCurrentLang) { // no KEYWORD=argument list in NatNum12 if (rNum.GetParams().indexOf('=') == -1) return ::impTransliterateImpl( rStr, rNum, rNatNum); - const NfKeywordTable & rKeywords = rScan.GetKeywords(); + const NfKeywordTable & rKeywords = rCurrentLang.GetKeywords(); // Format: KEYWORD=numbertext_prefix, ..., for example: // [NatNum12 YYYY=title ordinal,MMMM=article, D=ordinal-number]
