summaryrefslogtreecommitdiff
path: root/svl
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2018-05-03 13:59:31 +0200
committerEike Rathke <erack@redhat.com>2018-05-04 00:29:20 +0200
commita5e0fda3c1375f312ba8d3f0f5ce80d16649c4f5 (patch)
tree94d552daa4271fb184a694396baebcf55b433412 /svl
parent657668c378a9405c9978c553be52346b250e8d99 (diff)
Revert "Revert "Resolves: tdf#116579 consider both work locale and format...""
This reverts commit f5a56c367fba1c42b4f9719b10ff3e86ad5e2ab1. Now that Basic is fixed to set the proper NfEvalDateFormat ... Change-Id: I448edd733b0370b22ff5d8c27fe2c993597c9f8f Reviewed-on: https://gerrit.libreoffice.org/53788 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Eike Rathke <erack@redhat.com>
Diffstat (limited to 'svl')
-rw-r--r--svl/source/numbers/zforfind.cxx164
-rw-r--r--svl/source/numbers/zforfind.hxx19
2 files changed, 107 insertions, 76 deletions
diff --git a/svl/source/numbers/zforfind.cxx b/svl/source/numbers/zforfind.cxx
index 85b27797d204..e55786ea9d17 100644
--- a/svl/source/numbers/zforfind.cxx
+++ b/svl/source/numbers/zforfind.cxx
@@ -30,6 +30,7 @@
#include <com/sun/star/i18n/CalendarFieldIndex.hpp>
#include <com/sun/star/i18n/LocaleCalendar2.hpp>
#include <unotools/digitgroupingiterator.hxx>
+#include <comphelper/sequence.hxx>
#include <svl/zforlist.hxx>
#include "zforscan.hxx"
@@ -98,6 +99,7 @@ ImpSvNumberInputScan::~ImpSvNumberInputScan()
void ImpSvNumberInputScan::Reset()
{
+ mpFormat = nullptr;
nMonth = 0;
nMonthPos = 0;
nDayOfWeek = 0;
@@ -702,14 +704,13 @@ int ImpSvNumberInputScan::GetDayOfWeek( const OUString& rString, sal_Int32& nPos
* '$' => true
* else => false
*/
-bool ImpSvNumberInputScan::GetCurrency( const OUString& rString, sal_Int32& nPos,
- const SvNumberformat* pFormat )
+bool ImpSvNumberInputScan::GetCurrency( const OUString& rString, sal_Int32& nPos )
{
if ( rString.getLength() > nPos )
{
if ( !aUpperCurrSymbol.getLength() )
{ // if no format specified the currency of the initialized formatter
- LanguageType eLang = (pFormat ? pFormat->GetLanguage() : pFormatter->GetLanguage());
+ LanguageType eLang = (mpFormat ? mpFormat->GetLanguage() : pFormatter->GetLanguage());
aUpperCurrSymbol = pFormatter->GetCharClass()->uppercase(
SvNumberFormatter::GetCurrencyEntry( eLang ).GetSymbol() );
}
@@ -718,10 +719,10 @@ bool ImpSvNumberInputScan::GetCurrency( const OUString& rString, sal_Int32& nPos
nPos = nPos + aUpperCurrSymbol.getLength();
return true;
}
- if ( pFormat )
+ if ( mpFormat )
{
OUString aSymbol, aExtension;
- if ( pFormat->GetNewCurrencySymbol( aSymbol, aExtension ) )
+ if ( mpFormat->GetNewCurrencySymbol( aSymbol, aExtension ) )
{
if ( aSymbol.getLength() <= rString.getLength() - nPos )
{
@@ -1100,18 +1101,18 @@ bool ImpSvNumberInputScan::CanForceToIso8601( DateOrder eDateOrder )
}
-bool ImpSvNumberInputScan::IsAcceptableIso8601( const SvNumberformat* pFormat )
+bool ImpSvNumberInputScan::IsAcceptableIso8601()
{
- if (pFormat && (pFormat->GetType() & SvNumFormatType::DATE))
+ if (mpFormat && (mpFormat->GetType() & SvNumFormatType::DATE))
{
switch (pFormatter->GetEvalDateFormat())
{
case NF_EVALDATEFORMAT_INTL:
return CanForceToIso8601( GetDateOrder());
case NF_EVALDATEFORMAT_FORMAT:
- return CanForceToIso8601( pFormat->GetDateOrder());
+ return CanForceToIso8601( mpFormat->GetDateOrder());
default:
- return CanForceToIso8601( GetDateOrder()) || CanForceToIso8601( pFormat->GetDateOrder());
+ return CanForceToIso8601( GetDateOrder()) || CanForceToIso8601( mpFormat->GetDateOrder());
}
}
return CanForceToIso8601( GetDateOrder());
@@ -1191,7 +1192,46 @@ bool ImpSvNumberInputScan::IsAcceptedDatePattern( sal_uInt16 nStartPatternAt )
}
else if (!sDateAcceptancePatterns.getLength())
{
- sDateAcceptancePatterns = pFormatter->GetLocaleData()->getDateAcceptancePatterns();
+ // The current locale is the format's locale, if a format is present.
+ const NfEvalDateFormat eEDF = pFormatter->GetEvalDateFormat();
+ if (!mpFormat || eEDF == NF_EVALDATEFORMAT_FORMAT || mpFormat->GetLanguage() == pFormatter->GetLanguage())
+ {
+ sDateAcceptancePatterns = pFormatter->GetLocaleData()->getDateAcceptancePatterns();
+ }
+ else
+ {
+ OnDemandLocaleDataWrapper& xLocaleData = pFormatter->GetOnDemandLocaleDataWrapper(
+ SvNumberFormatter::InputScannerPrivateAccess());
+ const LanguageTag aSaveLocale( xLocaleData->getLanguageTag() );
+ assert(mpFormat->GetLanguage() == aSaveLocale.getLanguageType()); // prerequisite
+ // Obtain formatter's locale's (e.g. system) patterns.
+ xLocaleData.changeLocale( LanguageTag( pFormatter->GetLanguage()));
+ const css::uno::Sequence<OUString> aLocalePatterns( xLocaleData->getDateAcceptancePatterns());
+ // Reset to format's locale.
+ xLocaleData.changeLocale( aSaveLocale);
+ // When concatenating don't care about duplicates, combining
+ // weeding those out reallocs yet another time and probably doesn't
+ // take less time than looping over two additional patterns below..
+ switch (eEDF)
+ {
+ case NF_EVALDATEFORMAT_FORMAT:
+ assert(!"shouldn't reach here");
+ break;
+ case NF_EVALDATEFORMAT_INTL:
+ sDateAcceptancePatterns = aLocalePatterns;
+ break;
+ case NF_EVALDATEFORMAT_INTL_FORMAT:
+ sDateAcceptancePatterns = comphelper::concatSequences(
+ aLocalePatterns,
+ xLocaleData->getDateAcceptancePatterns());
+ break;
+ case NF_EVALDATEFORMAT_FORMAT_INTL:
+ sDateAcceptancePatterns = comphelper::concatSequences(
+ xLocaleData->getDateAcceptancePatterns(),
+ aLocalePatterns);
+ break;
+ }
+ }
SAL_WARN_IF( !sDateAcceptancePatterns.getLength(), "svl.numbers", "ImpSvNumberInputScan::IsAcceptedDatePattern: no date acceptance patterns");
nAcceptedDatePattern = (sDateAcceptancePatterns.getLength() ? -2 : -1);
}
@@ -1546,13 +1586,12 @@ DateOrder ImpSvNumberInputScan::GetDateOrder()
return pFormatter->GetLocaleData()->getDateOrder();
}
-bool ImpSvNumberInputScan::GetDateRef( double& fDays, sal_uInt16& nCounter,
- const SvNumberformat* pFormat )
+bool ImpSvNumberInputScan::GetDateRef( double& fDays, sal_uInt16& nCounter )
{
using namespace ::com::sun::star::i18n;
NfEvalDateFormat eEDF;
int nFormatOrder;
- if ( pFormat && (pFormat->GetType() & SvNumFormatType::DATE) )
+ if ( mpFormat && (mpFormat->GetType() & SvNumFormatType::DATE) )
{
eEDF = pFormatter->GetEvalDateFormat();
switch ( eEDF )
@@ -1593,7 +1632,7 @@ bool ImpSvNumberInputScan::GetDateRef( double& fDays, sal_uInt16& nCounter,
break;
case NF_EVALDATEFORMAT_FORMAT :
bFormatTurn = true;
- DateFmt = pFormat->GetDateOrder();
+ DateFmt = mpFormat->GetDateOrder();
break;
case NF_EVALDATEFORMAT_INTL_FORMAT :
if ( nTryOrder == 1 )
@@ -1604,7 +1643,7 @@ bool ImpSvNumberInputScan::GetDateRef( double& fDays, sal_uInt16& nCounter,
else
{
bFormatTurn = true;
- DateFmt = pFormat->GetDateOrder();
+ DateFmt = mpFormat->GetDateOrder();
}
break;
case NF_EVALDATEFORMAT_FORMAT_INTL :
@@ -1616,7 +1655,7 @@ bool ImpSvNumberInputScan::GetDateRef( double& fDays, sal_uInt16& nCounter,
else
{
bFormatTurn = true;
- DateFmt = pFormat->GetDateOrder();
+ DateFmt = mpFormat->GetDateOrder();
}
break;
default:
@@ -1653,13 +1692,13 @@ input for the following reasons:
*/
#ifdef THE_FUTURE
- if ( pFormat->IsOtherCalendar( nStringScanNumFor ) )
+ if ( mpFormat->IsOtherCalendar( nStringScanNumFor ) )
{
- pFormat->SwitchToOtherCalendar( aOrgCalendar, fOrgDateTime );
+ mpFormat->SwitchToOtherCalendar( aOrgCalendar, fOrgDateTime );
}
else
{
- pFormat->SwitchToSpecifiedCalendar( aOrgCalendar, fOrgDateTime,
+ mpFormat->SwitchToSpecifiedCalendar( aOrgCalendar, fOrgDateTime,
nStringScanNumFor );
}
#endif
@@ -1695,7 +1734,7 @@ input for the following reasons:
// 'D-', 'M-' or 'Y-'. If input did not match a
// pattern assume the usual day of current month.
sal_uInt32 nDateOrder = (bFormatTurn ?
- pFormat->GetExactDateOrder() :
+ mpFormat->GetExactDateOrder() :
GetDatePatternOrder());
switch (nDateOrder)
{
@@ -1767,7 +1806,7 @@ input for the following reasons:
case 0: // not found
{
sal_uInt32 nExactDateOrder = (bFormatTurn ?
- pFormat->GetExactDateOrder() :
+ mpFormat->GetExactDateOrder() :
GetDatePatternOrder());
bool bIsExact = (0xff < nExactDateOrder && nExactDateOrder <= 0xffff);
if (!bIsExact && bFormatTurn && IsAcceptedDatePattern( nNums[0]))
@@ -1876,7 +1915,7 @@ input for the following reasons:
// constellation, there is no date order (M)YD except if
// set in a format applied.
pCal->setValue( CalendarFieldIndex::MONTH, std::abs(nMonth)-1 );
- sal_uInt32 nExactDateOrder = (bFormatTurn ? pFormat->GetExactDateOrder() : 0);
+ sal_uInt32 nExactDateOrder = (bFormatTurn ? mpFormat->GetExactDateOrder() : 0);
if ((((nExactDateOrder >> 8) & 0xff) == 'Y') && ((nExactDateOrder & 0xff) == 'D'))
{
pCal->setValue( CalendarFieldIndex::DAY_OF_MONTH, ImplGetDay(1) );
@@ -2108,8 +2147,7 @@ input for the following reasons:
* All gone => true
* else => false
*/
-bool ImpSvNumberInputScan::ScanStartString( const OUString& rString,
- const SvNumberformat* pFormat )
+bool ImpSvNumberInputScan::ScanStartString( const OUString& rString )
{
sal_Int32 nPos = 0;
@@ -2128,7 +2166,7 @@ bool ImpSvNumberInputScan::ScanStartString( const OUString& rString,
// Match against format in any case, so later on for a "x1-2-3" input
// we may distinguish between a xy-m-d (or similar) date and a x0-0-0
// format. No sign detection here!
- if ( ScanStringNumFor( rString, nPos, pFormat, 0, true ) )
+ if ( ScanStringNumFor( rString, nPos, 0, true ) )
{
nMatchedAllStrings |= nMatchedStartString;
}
@@ -2147,7 +2185,7 @@ bool ImpSvNumberInputScan::ScanStartString( const OUString& rString,
nDecPos = 1;
SkipBlanks(rString, nPos);
}
- else if ( GetCurrency(rString, nPos, pFormat) ) // currency (DM 1)?
+ else if ( GetCurrency(rString, nPos) ) // currency (DM 1)?
{
eScannedType = SvNumFormatType::CURRENCY; // !!! it IS currency !!!
SkipBlanks(rString, nPos);
@@ -2280,7 +2318,7 @@ bool ImpSvNumberInputScan::ScanStartString( const OUString& rString,
{
// Does input StartString equal StartString of format?
// This time with sign detection!
- if ( !ScanStringNumFor( rString, nPos, pFormat, 0 ) )
+ if ( !ScanStringNumFor( rString, nPos, 0 ) )
{
return MatchedReturn();
}
@@ -2295,8 +2333,7 @@ bool ImpSvNumberInputScan::ScanStartString( const OUString& rString,
* All gone => true
* else => false
*/
-bool ImpSvNumberInputScan::ScanMidString( const OUString& rString,
- sal_uInt16 nStringPos, const SvNumberformat* pFormat )
+bool ImpSvNumberInputScan::ScanMidString( const OUString& rString, sal_uInt16 nStringPos )
{
sal_Int32 nPos = 0;
SvNumFormatType eOldScannedType = eScannedType;
@@ -2305,7 +2342,7 @@ bool ImpSvNumberInputScan::ScanMidString( const OUString& rString,
{ // Match against format in any case, so later on for a "1-2-3-4" input
// we may distinguish between a y-m-d (or similar) date and a 0-0-0-0
// format.
- if ( ScanStringNumFor( rString, 0, pFormat, nStringPos ) )
+ if ( ScanStringNumFor( rString, 0, nStringPos ) )
{
nMatchedAllStrings |= nMatchedMidString;
}
@@ -2653,8 +2690,7 @@ bool ImpSvNumberInputScan::ScanMidString( const OUString& rString,
* All gone => true
* else => false
*/
-bool ImpSvNumberInputScan::ScanEndString( const OUString& rString,
- const SvNumberformat* pFormat )
+bool ImpSvNumberInputScan::ScanEndString( const OUString& rString )
{
sal_Int32 nPos = 0;
@@ -2662,7 +2698,7 @@ bool ImpSvNumberInputScan::ScanEndString( const OUString& rString,
{ // Match against format in any case, so later on for a "1-2-3-4" input
// we may distinguish between a y-m-d (or similar) date and a 0-0-0-0
// format.
- if ( ScanStringNumFor( rString, 0, pFormat, 0xFFFF ) )
+ if ( ScanStringNumFor( rString, 0, 0xFFFF ) )
{
nMatchedAllStrings |= nMatchedEndString;
}
@@ -2732,7 +2768,7 @@ bool ImpSvNumberInputScan::ScanEndString( const OUString& rString,
SkipBlanks(rString, nPos);
}
- if ( GetCurrency(rString, nPos, pFormat) ) // currency symbol?
+ if ( GetCurrency(rString, nPos) ) // currency symbol?
{
if (eScannedType != SvNumFormatType::UNDEFINED) // currency dup
{
@@ -2956,7 +2992,7 @@ bool ImpSvNumberInputScan::ScanEndString( const OUString& rString,
if (nPos < rString.getLength()) // everything consumed?
{
// does input EndString equal EndString in Format?
- if ( !ScanStringNumFor( rString, nPos, pFormat, 0xFFFF ) )
+ if ( !ScanStringNumFor( rString, nPos, 0xFFFF ) )
{
return false;
}
@@ -2968,11 +3004,10 @@ bool ImpSvNumberInputScan::ScanEndString( const OUString& rString,
bool ImpSvNumberInputScan::ScanStringNumFor( const OUString& rString, // String to scan
sal_Int32 nPos, // Position until which was consumed
- const SvNumberformat* pFormat, // The format to match
sal_uInt16 nString, // Substring of format, 0xFFFF => last
bool bDontDetectNegation) // Suppress sign detection
{
- if ( !pFormat )
+ if ( !mpFormat )
{
return false;
}
@@ -2991,7 +3026,7 @@ bool ImpSvNumberInputScan::ScanStringNumFor( const OUString& rString, // S
do
{ // Step through subformats, first positive, then negative, then
// other, but not the last (text) subformat.
- pStr = pFormat->GetNumForString( nSub, nString, true );
+ pStr = mpFormat->GetNumForString( nSub, nString, true );
if ( pStr && pTransliteration->isEqual( aString, *pStr ) )
{
bFound = true;
@@ -3020,7 +3055,7 @@ bool ImpSvNumberInputScan::ScanStringNumFor( const OUString& rString, // S
if ( !bFound )
{
if ( !bDontDetectNegation && (nString == 0) &&
- !bFirst && (nSign < 0) && pFormat->IsSecondSubformatRealNegative() )
+ !bFirst && (nSign < 0) && mpFormat->IsSecondSubformatRealNegative() )
{
// simply negated twice? --1
aString = aString.replaceAll(" ", "");
@@ -3037,7 +3072,7 @@ bool ImpSvNumberInputScan::ScanStringNumFor( const OUString& rString, // S
}
}
else if ( !bDontDetectNegation && (nSub == 1) &&
- pFormat->IsSecondSubformatRealNegative() )
+ mpFormat->IsSecondSubformatRealNegative() )
{
// negative
if ( nStringScanSign < 0 )
@@ -3057,7 +3092,7 @@ bool ImpSvNumberInputScan::ScanStringNumFor( const OUString& rString, // S
{
nStringScanSign = -1; // direct double negation
}
- else if ( pFormat->IsNegativeWithoutSign() )
+ else if ( mpFormat->IsNegativeWithoutSign() )
{
nStringScanSign = -1; // indirect double negation
}
@@ -3085,6 +3120,7 @@ bool ImpSvNumberInputScan::IsNumberFormatMain( const OUString& rString, /
const SvNumberformat* pFormat ) // maybe number format set to match against
{
Reset();
+ mpFormat = pFormat;
NumberStringDivision( rString ); // breakdown into strings and numbers
if (nStringsCnt >= SV_MAX_COUNT_INPUT_STRINGS) // too many elements
{
@@ -3138,7 +3174,7 @@ bool ImpSvNumberInputScan::IsNumberFormatMain( const OUString& rString, /
}
else
{ // Analyze start string
- if (!ScanStartString( sStrArray[i], pFormat )) // i=0
+ if (!ScanStartString( sStrArray[i] )) // i=0
{
return false; // already an error
}
@@ -3159,7 +3195,7 @@ bool ImpSvNumberInputScan::IsNumberFormatMain( const OUString& rString, /
return true;
}
}
- if (i < nStringsCnt && !ScanEndString( sStrArray[i], pFormat ))
+ if (i < nStringsCnt && !ScanEndString( sStrArray[i] ))
{
return false;
}
@@ -3168,18 +3204,18 @@ bool ImpSvNumberInputScan::IsNumberFormatMain( const OUString& rString, /
// nStringsCnt >= 3
if (!GetNextNumber(i,j)) // i=1,0
{ // Analyze start string
- if (!ScanStartString( sStrArray[i], pFormat ))
+ if (!ScanStartString( sStrArray[i] ))
return false; // already an error
i++; // i=1
}
GetNextNumber(i,j); // i=1,2
- if ( !ScanMidString( sStrArray[i], i, pFormat ) )
+ if ( !ScanMidString( sStrArray[i], i ) )
{
return false;
}
i++; // next symbol, i=2,3
GetNextNumber(i,j); // i=3,4
- if (i < nStringsCnt && !ScanEndString( sStrArray[i], pFormat ))
+ if (i < nStringsCnt && !ScanEndString( sStrArray[i] ))
{
return false;
}
@@ -3200,7 +3236,7 @@ bool ImpSvNumberInputScan::IsNumberFormatMain( const OUString& rString, /
// nStringsCnt >= 5
if (!GetNextNumber(i,j)) // i=1,0
{ // Analyze start string
- if (!ScanStartString( sStrArray[i], pFormat ))
+ if (!ScanStartString( sStrArray[i] ))
{
return false; // already an error
}
@@ -3211,7 +3247,7 @@ bool ImpSvNumberInputScan::IsNumberFormatMain( const OUString& rString, /
}
}
GetNextNumber(i,j); // i=1,2
- if ( !ScanMidString( sStrArray[i], i, pFormat ) )
+ if ( !ScanMidString( sStrArray[i], i ) )
{
return false;
}
@@ -3221,13 +3257,13 @@ bool ImpSvNumberInputScan::IsNumberFormatMain( const OUString& rString, /
return false;
}
GetNextNumber(i,j); // i=3,4
- if ( !ScanMidString( sStrArray[i], i, pFormat ) )
+ if ( !ScanMidString( sStrArray[i], i ) )
{
return false;
}
i++; // i=4,5
GetNextNumber(i,j); // i=5,6
- if (i < nStringsCnt && !ScanEndString( sStrArray[i], pFormat ))
+ if (i < nStringsCnt && !ScanEndString( sStrArray[i] ))
{
return false;
}
@@ -3252,14 +3288,14 @@ bool ImpSvNumberInputScan::IsNumberFormatMain( const OUString& rString, /
// nStringsCnt >= 7
if (!GetNextNumber(i,j)) // i=1,0
{ // Analyze startstring
- if (!ScanStartString( sStrArray[i], pFormat ))
+ if (!ScanStartString( sStrArray[i] ))
return false; // already an error
i++; // i=1
if (nDecPos == 1) // decimal separator at start => error
return false;
}
GetNextNumber(i,j); // i=1,2
- if ( !ScanMidString( sStrArray[i], i, pFormat ) )
+ if ( !ScanMidString( sStrArray[i], i ) )
{
return false;
}
@@ -3275,7 +3311,7 @@ bool ImpSvNumberInputScan::IsNumberFormatMain( const OUString& rString, /
return false;
}
GetNextNumber(i,j);
- if ( i < nStringsCnt && !ScanMidString( sStrArray[i], i, pFormat ) )
+ if ( i < nStringsCnt && !ScanMidString( sStrArray[i], i ) )
{
return false;
}
@@ -3293,7 +3329,7 @@ bool ImpSvNumberInputScan::IsNumberFormatMain( const OUString& rString, /
return false;
}
GetNextNumber(i,j);
- if ( i < nStringsCnt && !ScanMidString( sStrArray[i], i, pFormat ) )
+ if ( i < nStringsCnt && !ScanMidString( sStrArray[i], i ) )
{
return false;
}
@@ -3301,7 +3337,7 @@ bool ImpSvNumberInputScan::IsNumberFormatMain( const OUString& rString, /
}
}
GetNextNumber(i,j);
- if (i < nStringsCnt && !ScanEndString( sStrArray[i], pFormat ))
+ if (i < nStringsCnt && !ScanEndString( sStrArray[i] ))
{
return false;
}
@@ -3331,7 +3367,7 @@ bool ImpSvNumberInputScan::IsNumberFormatMain( const OUString& rString, /
bool bDidMatch = (nMatchedAllStrings != 0);
if ( nMatchedAllStrings )
{
- bool bMatch = pFormat && pFormat->IsNumForStringElementCountEqual(
+ bool bMatch = mpFormat && mpFormat->IsNumForStringElementCountEqual(
nStringScanNumFor, nStringsCnt, nNumericsCnt );
if ( !bMatch )
{
@@ -3344,8 +3380,8 @@ bool ImpSvNumberInputScan::IsNumberFormatMain( const OUString& rString, /
// overall format because of mixed type subformats. Use the scan
// matched subformat's type if any.
SvNumFormatType eForType = eSetType;
- if ((eForType == SvNumFormatType::UNDEFINED || eForType == SvNumFormatType::DEFINED) && pFormat)
- eForType = pFormat->GetNumForInfoScannedType( nStringScanNumFor);
+ if ((eForType == SvNumFormatType::UNDEFINED || eForType == SvNumFormatType::DEFINED) && mpFormat)
+ eForType = mpFormat->GetNumForInfoScannedType( nStringScanNumFor);
if (eForType != SvNumFormatType::UNDEFINED && eForType != SvNumFormatType::DEFINED)
eScannedType = eForType;
else
@@ -3368,7 +3404,7 @@ bool ImpSvNumberInputScan::IsNumberFormatMain( const OUString& rString, /
bool bWasReturn = ((nMatchedAllStrings & nMatchedUsedAsReturn) != 0);
if ( nMatchedAllStrings )
{
- bool bMatch = pFormat && pFormat->IsNumForStringElementCountEqual(
+ bool bMatch = mpFormat && mpFormat->IsNumForStringElementCountEqual(
nStringScanNumFor, nStringsCnt, nNumericsCnt );
if ( !bMatch )
{
@@ -3382,8 +3418,8 @@ bool ImpSvNumberInputScan::IsNumberFormatMain( const OUString& rString, /
// the scanned type in this case. Otherwise in IsNumberFormat() the
// first numeric particle would be accepted as number.
SvNumFormatType eForType = eSetType;
- if ((eForType == SvNumFormatType::UNDEFINED || eForType == SvNumFormatType::DEFINED) && pFormat)
- eForType = pFormat->GetNumForInfoScannedType( nStringScanNumFor);
+ if ((eForType == SvNumFormatType::UNDEFINED || eForType == SvNumFormatType::DEFINED) && mpFormat)
+ eForType = mpFormat->GetNumForInfoScannedType( nStringScanNumFor);
if (eForType != SvNumFormatType::UNDEFINED && eForType != SvNumFormatType::DEFINED)
eScannedType = eForType;
}
@@ -3691,7 +3727,7 @@ bool ImpSvNumberInputScan::IsNumberFormat( const OUString& rString, // s
// not. The count of numbers in pattern must match the
// count of numbers in input.
res = (GetDatePatternNumbers() == nNumericsCnt)
- || IsAcceptableIso8601( pFormat) || nMatchedAllStrings;
+ || IsAcceptableIso8601() || nMatchedAllStrings;
}
}
break;
@@ -3947,11 +3983,11 @@ bool ImpSvNumberInputScan::IsNumberFormat( const OUString& rString, // s
break;
case SvNumFormatType::DATE:
- res = GetDateRef( fOutNumber, k, pFormat );
+ res = GetDateRef( fOutNumber, k );
break;
case SvNumFormatType::DATETIME:
- res = GetDateRef( fOutNumber, k, pFormat );
+ res = GetDateRef( fOutNumber, k );
if ( res )
{
double fTime;
diff --git a/svl/source/numbers/zforfind.hxx b/svl/source/numbers/zforfind.hxx
index 17b14edb4c2d..e7ddb7e6f1d9 100644
--- a/svl/source/numbers/zforfind.hxx
+++ b/svl/source/numbers/zforfind.hxx
@@ -70,6 +70,7 @@ public:
private:
SvNumberFormatter* pFormatter;
+ const SvNumberformat* mpFormat; //* The format to compare against, if any
std::unique_ptr<OUString[]> pUpperMonthText; //* Array of month names, uppercase
std::unique_ptr<OUString[]> pUpperAbbrevMonthText; //* Array of month names, abbreviated, uppercase
std::unique_ptr<OUString[]> pUpperGenitiveMonthText; //* Array of genitive month names, uppercase
@@ -283,8 +284,7 @@ private:
// Get currency symbol and advance string position
bool GetCurrency( const OUString& rString,
- sal_Int32& nPos,
- const SvNumberformat* pFormat ); // number format to match against
+ sal_Int32& nPos );
// Get symbol AM or PM and advance string position
bool GetTimeAmPm( const OUString& rString,
@@ -324,28 +324,23 @@ private:
// Conversion of date to number
bool GetDateRef( double& fDays, // OUT: days diff to null date
- sal_uInt16& nCounter, // Count of date substrings
- const SvNumberformat* pFormat ); // number format to match against
+ sal_uInt16& nCounter ); // Count of date substrings
// Analyze start of string
- bool ScanStartString( const OUString& rString,
- const SvNumberformat* pFormat );
+ bool ScanStartString( const OUString& rString );
// Analyze middle substring
bool ScanMidString( const OUString& rString,
- sal_uInt16 nStringPos,
- const SvNumberformat* pFormat );
+ sal_uInt16 nStringPos );
// Analyze end of string
- bool ScanEndString( const OUString& rString,
- const SvNumberformat* pFormat );
+ bool ScanEndString( const OUString& rString );
// Compare rString to substring of array indexed by nString
// nString == 0xFFFF => last substring
bool ScanStringNumFor( const OUString& rString,
sal_Int32 nPos,
- const SvNumberformat* pFormat,
sal_uInt16 nString,
bool bDontDetectNegation = false );
@@ -420,7 +415,7 @@ private:
/** Whether input is acceptable as ISO 8601 date format in the current
NfEvalDateFormat setting.
*/
- bool IsAcceptableIso8601( const SvNumberformat* pFormat );
+ bool IsAcceptableIso8601();
};
#endif // INCLUDED_SVL_SOURCE_NUMBERS_ZFORFIND_HXX