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 <caolan.mcnamara@collabora.com>
This commit is contained in:
+14
-10
@@ -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;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user