summaryrefslogtreecommitdiff
path: root/svtools/source/numbers
diff options
context:
space:
mode:
authorEike Rathke <er@openoffice.org>2000-10-17 17:46:13 +0000
committerEike Rathke <er@openoffice.org>2000-10-17 17:46:13 +0000
commit77a1225b55bdb2dd07a08c85f1a08b81e022d988 (patch)
treeae0274b444ac5055d60413b252a5d2df095016ed /svtools/source/numbers
parent3a7225b07d321de290a96a606b4cf04eaf9f2849 (diff)
using LocaleData, second wave
Diffstat (limited to 'svtools/source/numbers')
-rw-r--r--svtools/source/numbers/zforfind.cxx252
-rw-r--r--svtools/source/numbers/zforlist.cxx16
-rw-r--r--svtools/source/numbers/zformat.cxx49
-rw-r--r--svtools/source/numbers/zforscan.cxx170
-rw-r--r--svtools/source/numbers/zforscan.hxx18
5 files changed, 259 insertions, 246 deletions
diff --git a/svtools/source/numbers/zforfind.cxx b/svtools/source/numbers/zforfind.cxx
index 20290422f49a..b6a5b9963ecb 100644
--- a/svtools/source/numbers/zforfind.cxx
+++ b/svtools/source/numbers/zforfind.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: zforfind.cxx,v $
*
- * $Revision: 1.3 $
+ * $Revision: 1.4 $
*
- * last change: $Author: er $ $Date: 2000-10-16 18:24:30 $
+ * last change: $Author: er $ $Date: 2000-10-17 18:46:12 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -80,6 +80,9 @@
#ifndef _UNOTOOLS_CHARCLASS_HXX
#include <unotools/charclass.hxx>
#endif
+#ifndef _UNOTOOLS_LOCALEDATAWRAPPER_HXX
+#include <unotools/localedatawrapper.hxx>
+#endif
#include "zforlist.hxx" // NUMBERFORMAT_XXX
#include "zforscan.hxx"
@@ -288,9 +291,10 @@ BOOL ImpSvNumberInputScan::SkipThousands(
{
BOOL res = FALSE;
sal_Unicode cToken;
+ const String& rThSep = pFormatter->GetLocaleData()->getNumThousandSep();
register const sal_Unicode* pHere = pStr;
ScanState eState = SsStart;
- xub_StrLen nCounter; // zaehlt 3er Paare
+ xub_StrLen nCounter; // counts 3 digits
while ( ((cToken = *pHere) != 0) && eState != SsStop)
{
@@ -298,10 +302,11 @@ BOOL ImpSvNumberInputScan::SkipThousands(
switch (eState)
{
case SsStart:
- if (cToken == pFormatter->GetInternational()->GetNumThousandSep())
+ if ( StringPtrContains( rThSep, pHere-1, 0 ) )
{
nCounter = 0;
eState = SsGetValue;
+ pHere += rThSep.Len()-1;
}
else
{
@@ -317,7 +322,7 @@ BOOL ImpSvNumberInputScan::SkipThousands(
if (nCounter == 3)
{
eState = SsStart;
- res = TRUE; // .000 Kombination gef.
+ res = TRUE; // .000 combination found
}
}
else
@@ -331,11 +336,11 @@ BOOL ImpSvNumberInputScan::SkipThousands(
} // switch
} // while
- if (eState == SsGetValue) // Abbruch mit weniger als 3 St.
+ if (eState == SsGetValue) // break witth less than 3 digits
{
if ( nCounter )
rSymbol.Erase( rSymbol.Len() - nCounter, nCounter );
- pHere -= nCounter + 1; // auch . mit zurueck
+ pHere -= nCounter + rThSep.Len(); // put back ThSep also
}
pStr = pHere;
@@ -372,9 +377,9 @@ void ImpSvNumberInputScan::NumberStringDivision( const String& rString )
//---------------------------------------------------------------------------
-// if rString contains rWhat at nPos
+// Whether rString contains rWhat at nPos
-BOOL ImpSvNumberInputScan::StringContains( const String& rWhat,
+BOOL ImpSvNumberInputScan::StringContainsImpl( const String& rWhat,
const String& rString, xub_StrLen nPos )
{
if ( nPos + rWhat.Len() <= rString.Len() )
@@ -396,6 +401,28 @@ BOOL ImpSvNumberInputScan::StringContains( const String& rWhat,
//---------------------------------------------------------------------------
+// Whether pString contains rWhat at nPos
+
+BOOL ImpSvNumberInputScan::StringPtrContainsImpl( const String& rWhat,
+ const sal_Unicode* pString, xub_StrLen nPos )
+{
+ if ( rWhat.Len() == 0 )
+ return FALSE;
+ register const sal_Unicode* pWhat = rWhat.GetBuffer();
+ register const sal_Unicode* const pEnd = pWhat + rWhat.Len();
+ register const sal_Unicode* pStr = pString + nPos;
+ while ( pWhat < pEnd )
+ {
+ if ( *pWhat != *pStr )
+ return FALSE;
+ pWhat++;
+ pStr++;
+ }
+ return TRUE;
+}
+
+
+//---------------------------------------------------------------------------
// SkipChar
//
// ueberspringt genau das angegebene Zeichen
@@ -459,15 +486,14 @@ inline BOOL ImpSvNumberInputScan::GetThousandSep(
xub_StrLen& nPos,
USHORT nStringPos )
{
- if ( rString.Len() == 1 // keine Blanks
- && nPos == 0 // safety first!
- && rString.GetChar(nPos) == pFormatter->GetInternational()->GetNumThousandSep() // '.'
+ const String& rSep = pFormatter->GetLocaleData()->getNumThousandSep();
+ if ( rString == rSep // nothing else
&& nStringPos < nAnzStrings - 1 // safety first!
- && IsNum[nStringPos+1] // Zahl folgt
- && ( sStrArray[nStringPos+1].Len() == 3 // mit 3 Stellen
- || nPosThousandString == nStringPos+1 ) ) // oder bereits zusammengefasst
+ && IsNum[nStringPos+1] // number follows
+ && ( sStrArray[nStringPos+1].Len() == 3 // with 3 digits
+ || nPosThousandString == nStringPos+1 ) ) // or concatenated
{
- nPos++;
+ nPos += rSep.Len();
return TRUE;
}
return FALSE;
@@ -1222,22 +1248,21 @@ BOOL ImpSvNumberInputScan::ScanMidString(
const String& rString,
USHORT nStringPos )
{
- const International* pIntl = pFormatter->GetInternational();
xub_StrLen nPos = 0;
SkipBlanks(rString, nPos);
- if (GetDecSep(rString, nPos)) // Dezimaltrenner?
+ if (GetDecSep(rString, nPos)) // decimal separator?
{
- if (nDecPos == 1 || nDecPos == 3) // ,12,4 oder 1,E2,1
+ if (nDecPos == 1 || nDecPos == 3) // ,12,4 or 1,E2,1
return FALSE;
- else if (nDecPos == 2) // , doppelt 12,4,
+ else if (nDecPos == 2) // , dup: 12,4,
{
- if (bDecSepInDateSeps) // , auch Date Sep
+ if (bDecSepInDateSeps) // , also date separator
{
if (eScannedType != NUMBERFORMAT_UNDEFINED &&
- eScannedType != NUMBERFORMAT_DATE) // schon anderer Typ
+ eScannedType != NUMBERFORMAT_DATE) // already another type
return FALSE;
- eScannedType = NUMBERFORMAT_DATE; // !!! Es ist ein Datum !!!
+ eScannedType = NUMBERFORMAT_DATE; // !!! it IS a date
SkipBlanks(rString, nPos);
}
else
@@ -1245,76 +1270,79 @@ BOOL ImpSvNumberInputScan::ScanMidString(
}
else
{
- nDecPos = 2; // , im Mittelstring
+ nDecPos = 2; // , in mid string
SkipBlanks(rString, nPos);
}
}
- if (SkipChar('/', rString, nPos)) // Bruch?
+ if (SkipChar('/', rString, nPos)) // fraction?
{
- if ( eScannedType != NUMBERFORMAT_UNDEFINED // schon anderes Format
- && eScannedType != NUMBERFORMAT_DATE) // ausser Datum
- return FALSE; // => jan/31/1994
- else if ( eScannedType != NUMBERFORMAT_DATE // bisher als Datum analysiert
- && ( eSetType == NUMBERFORMAT_FRACTION // und Vorgabe war Bruch
- || (nAnzNums == 3 // oder 3 Zahlen
- && nStringPos > 2) ) ) // und ???
+ if ( eScannedType != NUMBERFORMAT_UNDEFINED // already another type
+ && eScannedType != NUMBERFORMAT_DATE) // except date
+ return FALSE; // => jan/31/1994
+ else if ( eScannedType != NUMBERFORMAT_DATE // analyzed date until now
+ && ( eSetType == NUMBERFORMAT_FRACTION // and preset was fraction
+ || (nAnzNums == 3 // or 3 numbers
+ && nStringPos > 2) ) ) // and what ???
{
SkipBlanks(rString, nPos);
- eScannedType = NUMBERFORMAT_FRACTION; // !!! es ist ein Bruch
+ eScannedType = NUMBERFORMAT_FRACTION; // !!! it IS a fraction
}
else
- nPos--; // '/' zurueck
+ nPos--; // put '/' back
}
- if (GetThousandSep(rString, nPos, nStringPos)) // 1.000
+ if (GetThousandSep(rString, nPos, nStringPos)) // 1,000
{
- if ( eScannedType != NUMBERFORMAT_UNDEFINED // schon anderes Format
- && eScannedType != NUMBERFORMAT_CURRENCY) // ausser Waehrung
+ if ( eScannedType != NUMBERFORMAT_UNDEFINED // already another type
+ && eScannedType != NUMBERFORMAT_CURRENCY) // except currency
return FALSE;
nThousand++;
}
+ const International* pIntl = pFormatter->GetInternational();
+ const LocaleDataWrapper* pLoc = pFormatter->GetLocaleData();
+ const String& rDate = pLoc->getDateSep();
+ const String& rTime = pLoc->getTimeSep();
+ sal_Unicode cTime = rTime.GetChar(0);
SkipBlanks(rString, nPos);
- sal_Unicode cDate = pIntl->GetDateSep();
- sal_Unicode cTime = pIntl->GetTimeSep();
- if ( SkipChar(cDate, rString, nPos) // 10., 10-, 10/
+ if ( SkipString(rDate, rString, nPos) // 10., 10-, 10/
|| ((cTime != '.') && SkipChar('.', rString, nPos)) // TRICKY:
|| ((cTime != '/') && SkipChar('/', rString, nPos)) // short boolean
|| ((cTime != '-') && SkipChar('-', rString, nPos)) ) // evaluation!
{
- if ( eScannedType != NUMBERFORMAT_UNDEFINED // schon anderes Format
- && eScannedType != NUMBERFORMAT_DATE) // ausser Datum
+ if ( eScannedType != NUMBERFORMAT_UNDEFINED // already another type
+ && eScannedType != NUMBERFORMAT_DATE) // except date
return FALSE;
SkipBlanks(rString, nPos);
- eScannedType = NUMBERFORMAT_DATE; // !!! es ist ein Datum
+ eScannedType = NUMBERFORMAT_DATE; // !!! it IS a date
short nTmpMonth = GetMonth(rString, nPos); // 10. Jan 94
- if (nMonth && nTmpMonth) // Monat doppelt
+ if (nMonth && nTmpMonth) // month dup
return FALSE;
if (nTmpMonth)
{
nMonth = nTmpMonth;
- nMonthPos = 2; // Monat in der Mitte
+ nMonthPos = 2; // month in the middle
if ( nMonth < 0 )
- SkipChar( '.', rString, nPos ); // abgekuerzt
+ SkipChar( '.', rString, nPos ); // abbreviated
SkipString( pIntl->GetLongDateMonthSep(), rString, nPos );
SkipBlanks(rString, nPos);
}
}
- short nTempMonth = GetMonth(rString, nPos); // Monat in der Mitte (10 Jan 94)
+ short nTempMonth = GetMonth(rString, nPos); // month in the middle (10 Jan 94)
if (nTempMonth)
{
- if (nMonth != 0) // Monat doppelt
+ if (nMonth != 0) // month dup
return FALSE;
- if ( eScannedType != NUMBERFORMAT_UNDEFINED // schon anderes Format
- && eScannedType != NUMBERFORMAT_DATE) // ausser Datum
+ if ( eScannedType != NUMBERFORMAT_UNDEFINED // already another type
+ && eScannedType != NUMBERFORMAT_DATE) // except date
return FALSE;
- eScannedType = NUMBERFORMAT_DATE; // !!! es ist ein Datum
+ eScannedType = NUMBERFORMAT_DATE; // !!! it IS a date
nMonth = nTempMonth;
- nMonthPos = 2; // Monat in der Mitte
+ nMonthPos = 2; // month in the middle
if ( nMonth < 0 )
- SkipChar( '.', rString, nPos ); // abgekuerzt
+ SkipChar( '.', rString, nPos ); // abbreviated
SkipString( pIntl->GetLongDateMonthSep(), rString, nPos );
SkipBlanks(rString, nPos);
}
@@ -1322,38 +1350,38 @@ BOOL ImpSvNumberInputScan::ScanMidString(
if ( SkipChar('E', rString, nPos) // 10E, 10e, 10,Ee
|| SkipChar('e', rString, nPos) )
{
- if (eScannedType != NUMBERFORMAT_UNDEFINED) // schon anderes Format
+ if (eScannedType != NUMBERFORMAT_UNDEFINED) // already another type
return FALSE;
else
{
SkipBlanks(rString, nPos);
- eScannedType = NUMBERFORMAT_SCIENTIFIC; // !!! es ist eine Zahl im E-Format
- if ( nThousand+2 == nAnzNums // Sonderfall 1,E2
+ eScannedType = NUMBERFORMAT_SCIENTIFIC; // !!! it IS scientific
+ if ( nThousand+2 == nAnzNums // special case 1.E2
&& nDecPos == 2 )
- nDecPos = 3; // 1.100,E2 1.100.100,E3
+ nDecPos = 3; // 1,100.E2 1,100,100.E3
}
- nESign = GetESign(rString, nPos); // Vorzeichen vom Exponent?
+ nESign = GetESign(rString, nPos); // signed exponent?
SkipBlanks(rString, nPos);
}
- if ( SkipChar(cTime, rString, nPos) ) // Zeittrenner?
+ if ( SkipString(rTime, rString, nPos) ) // time separator?
{
- if (nDecPos) // schon , => Fehler
+ if (nDecPos) // already , => error
return FALSE;
- if ( ( eScannedType == NUMBERFORMAT_DATE // bereits Datumsformat
- || eScannedType == NUMBERFORMAT_DATETIME) // erkannt und
- && nAnzNums > 3) // mehr als 3 Zahlen? (31.Dez.94 8:23)
+ if ( ( eScannedType == NUMBERFORMAT_DATE // already date type
+ || eScannedType == NUMBERFORMAT_DATETIME) // or date time
+ && nAnzNums > 3) // and more than 3 numbers? (31.Dez.94 8:23)
{
SkipBlanks(rString, nPos);
- eScannedType = NUMBERFORMAT_DATETIME; // !!! es ist Datum mit Uhrzeit
+ eScannedType = NUMBERFORMAT_DATETIME; // !!! it IS date with time
}
- else if ( eScannedType != NUMBERFORMAT_UNDEFINED // schon anderes Format
- && eScannedType != NUMBERFORMAT_TIME) // ausser Zeit
+ else if ( eScannedType != NUMBERFORMAT_UNDEFINED // already another type
+ && eScannedType != NUMBERFORMAT_TIME) // except time
return FALSE;
else
{
SkipBlanks(rString, nPos);
- eScannedType = NUMBERFORMAT_TIME; // !!! es ist eine Zeit
+ eScannedType = NUMBERFORMAT_TIME; // !!! it IS a time
}
if ( !nTimePos )
nTimePos = nStringPos + 1;
@@ -1367,7 +1395,7 @@ BOOL ImpSvNumberInputScan::ScanMidString(
SkipBlanks( rString, nPos );
}
- if (nPos < rString.Len()) // noch nicht alles weg?
+ if (nPos < rString.Len()) // not everything consumed?
return FALSE;
return TRUE;
@@ -1384,22 +1412,21 @@ BOOL ImpSvNumberInputScan::ScanMidString(
BOOL ImpSvNumberInputScan::ScanEndString( const String& rString,
const SvNumberformat* pFormat )
{
- const International* pIntl = pFormatter->GetInternational();
xub_StrLen nPos = 0;
SkipBlanks(rString, nPos);
- if (GetDecSep(rString, nPos)) // Dezimaltrenner?
+ if (GetDecSep(rString, nPos)) // decimal separator?
{
- if (nDecPos == 1 || nDecPos == 3) // ,12,4 oder 12,E4,
+ if (nDecPos == 1 || nDecPos == 3) // ,12,4 or 12,E4,
return FALSE;
- else if (nDecPos == 2) // , doppelt 12,4,
+ else if (nDecPos == 2) // , dup: 12,4,
{
- if (bDecSepInDateSeps) // , auch Date Sep
+ if (bDecSepInDateSeps) // , also date sep
{
if (eScannedType != NUMBERFORMAT_UNDEFINED &&
- eScannedType != NUMBERFORMAT_DATE) // schon anderer Typ
+ eScannedType != NUMBERFORMAT_DATE) // already another type
return FALSE;
- eScannedType = NUMBERFORMAT_DATE; // !!! es ist ein Datum
+ eScannedType = NUMBERFORMAT_DATE; // !!! it IS a date
SkipBlanks(rString, nPos);
}
else
@@ -1407,37 +1434,37 @@ BOOL ImpSvNumberInputScan::ScanEndString( const String& rString,
}
else
{
- nDecPos = 3; // , im Endstring
+ nDecPos = 3; // , in end string
SkipBlanks(rString, nPos);
}
}
- if ( nSign == 0 // Konflikt - kein Vorzeichen
- && eScannedType != NUMBERFORMAT_DATE) // und nicht Datum
-//? Uhrzeit auch abfangen ?
- { // noch kein Vorzeichen
+ if ( nSign == 0 // conflict - not signed
+ && eScannedType != NUMBERFORMAT_DATE) // and not date
+//!? catch time too?
+ { // not signed yet
nSign = GetSign(rString, nPos); // 1- DM
- if (nNegCheck) // '(' als Vorzeichen
+ if (nNegCheck) // '(' as sign
return FALSE;
}
SkipBlanks(rString, nPos);
- if (nNegCheck && SkipChar(')', rString, nPos)) // ggf. ')' ueberlesen
+ if (nNegCheck && SkipChar(')', rString, nPos)) // skip ')' if appropriate
{
nNegCheck = 0;
SkipBlanks(rString, nPos);
}
- if ( GetCurrency(rString, nPos, pFormat) ) // Waehrungssymbol?
+ if ( GetCurrency(rString, nPos, pFormat) ) // currency symbol?
{
- if (eScannedType != NUMBERFORMAT_UNDEFINED) // DM doppelt oder
+ if (eScannedType != NUMBERFORMAT_UNDEFINED) // currency dup
return FALSE;
else
{
SkipBlanks(rString, nPos);
eScannedType = NUMBERFORMAT_CURRENCY;
- } // hinter DM - erlaubt
- if (nSign == 0) // noch kein Vorzeichen
+ } // behind currency a '-' is allowed
+ if (nSign == 0) // not signed yet
{
nSign = GetSign(rString, nPos); // DM -
SkipBlanks(rString, nPos);
@@ -1447,23 +1474,25 @@ BOOL ImpSvNumberInputScan::ScanEndString( const String& rString,
if ( nNegCheck && eScannedType == NUMBERFORMAT_CURRENCY
&& SkipChar(')', rString, nPos) )
{
- nNegCheck = 0; // ggf. ')' ueberlesen
- SkipBlanks(rString, nPos); // nur bei Waehrung
+ nNegCheck = 0; // ')' skipped
+ SkipBlanks(rString, nPos); // only if currency
}
}
if ( SkipChar('%', rString, nPos) ) // 1 %
{
- if (eScannedType != NUMBERFORMAT_UNDEFINED) // schon anderes Format
+ if (eScannedType != NUMBERFORMAT_UNDEFINED) // already another type
return FALSE;
SkipBlanks(rString, nPos);
eScannedType = NUMBERFORMAT_PERCENT;
}
- sal_Unicode cTime = pIntl->GetTimeSep();
- if ( SkipChar(cTime, rString, nPos) ) // 10:
+ const LocaleDataWrapper* pLoc = pFormatter->GetLocaleData();
+ const String& rDate = pLoc->getDateSep();
+ const String& rTime = pLoc->getTimeSep();
+ if ( SkipString(rTime, rString, nPos) ) // 10:
{
- if (nDecPos) // schon , => Fehler
+ if (nDecPos) // already , => error
return FALSE;
if (eScannedType == NUMBERFORMAT_DATE && nAnzNums > 2) // 31.Dez.94 8:
{
@@ -1471,7 +1500,7 @@ BOOL ImpSvNumberInputScan::ScanEndString( const String& rString,
eScannedType = NUMBERFORMAT_DATETIME;
}
else if (eScannedType != NUMBERFORMAT_UNDEFINED &&
- eScannedType != NUMBERFORMAT_TIME) // schon anderes Format
+ eScannedType != NUMBERFORMAT_TIME) // already another type
return FALSE;
else
{
@@ -1480,14 +1509,14 @@ BOOL ImpSvNumberInputScan::ScanEndString( const String& rString,
}
}
- sal_Unicode cDate = pIntl->GetDateSep();
- if ( SkipChar(cDate, rString, nPos) // 10., 10-, 10/
+ sal_Unicode cTime = rTime.GetChar(0);
+ if ( SkipString(rDate, rString, nPos) // 10., 10-, 10/
|| ((cTime != '.') && SkipChar('.', rString, nPos)) // TRICKY:
|| ((cTime != '/') && SkipChar('/', rString, nPos)) // short boolean
|| ((cTime != '-') && SkipChar('-', rString, nPos)) ) // evaluation!
{
if (eScannedType != NUMBERFORMAT_UNDEFINED &&
- eScannedType != NUMBERFORMAT_DATE) // schon anderes Format
+ eScannedType != NUMBERFORMAT_DATE) // already another type
return FALSE;
else
{
@@ -1495,14 +1524,14 @@ BOOL ImpSvNumberInputScan::ScanEndString( const String& rString,
eScannedType = NUMBERFORMAT_DATE;
}
short nTmpMonth = GetMonth(rString, nPos); // 10. Jan
- if (nMonth && nTmpMonth) // Monat doppelt
+ if (nMonth && nTmpMonth) // month dup
return FALSE;
if (nTmpMonth)
{
nMonth = nTmpMonth;
- nMonthPos = 3; // Monat hinten
+ nMonthPos = 3; // month at end
if ( nMonth < 0 )
- SkipChar( '.', rString, nPos ); // abgekuerzt
+ SkipChar( '.', rString, nPos ); // abbreviated
SkipBlanks(rString, nPos);
}
}
@@ -1510,16 +1539,16 @@ BOOL ImpSvNumberInputScan::ScanEndString( const String& rString,
short nTempMonth = GetMonth(rString, nPos); // 10 Jan
if (nTempMonth)
{
- if (nMonth) // Monat doppelt
+ if (nMonth) // month dup
return FALSE;
if (eScannedType != NUMBERFORMAT_UNDEFINED &&
- eScannedType != NUMBERFORMAT_DATE) // schon anderes Format
+ eScannedType != NUMBERFORMAT_DATE) // already another type
return FALSE;
eScannedType = NUMBERFORMAT_DATE;
nMonth = nTempMonth;
- nMonthPos = 3; // Monat hinten
+ nMonthPos = 3; // month at end
if ( nMonth < 0 )
- SkipChar( '.', rString, nPos ); // abgekuerzt
+ SkipChar( '.', rString, nPos ); // abbreviated
SkipBlanks(rString, nPos);
}
@@ -1527,7 +1556,7 @@ BOOL ImpSvNumberInputScan::ScanEndString( const String& rString,
{
if (eScannedType != NUMBERFORMAT_UNDEFINED &&
eScannedType != NUMBERFORMAT_TIME &&
- eScannedType != NUMBERFORMAT_DATETIME) // schon anderes Format
+ eScannedType != NUMBERFORMAT_DATETIME) // already another type
return FALSE;
else
{
@@ -1539,9 +1568,9 @@ BOOL ImpSvNumberInputScan::ScanEndString( const String& rString,
if ( nNegCheck && SkipChar(')', rString, nPos) )
{
- if (eScannedType == NUMBERFORMAT_CURRENCY) // nur bei Waehrung
+ if (eScannedType == NUMBERFORMAT_CURRENCY) // only if currency
{
- nNegCheck = 0; // ggf. ')' ueberlesen
+ nNegCheck = 0; // skip ')'
SkipBlanks(rString, nPos);
}
else
@@ -1551,8 +1580,9 @@ BOOL ImpSvNumberInputScan::ScanEndString( const String& rString,
if ( nPos < rString.Len() &&
(eScannedType == NUMBERFORMAT_DATE
|| eScannedType == NUMBERFORMAT_DATETIME) )
- { // Wochentag wird nur weggeparst
+ { // day of week is just parsed away
xub_StrLen nOldPos = nPos;
+ const International* pIntl = pFormatter->GetInternational();
const String& rSep = pIntl->GetLongDateDayOfWeekSep();
if ( StringContains( rSep, rString, nPos ) )
{
@@ -1565,7 +1595,7 @@ BOOL ImpSvNumberInputScan::ScanEndString( const String& rString,
if ( nPos < rString.Len() )
{
if ( nDayOfWeek < 0 )
- { // kurz
+ { // short
if ( rString.GetChar( nPos ) == '.' )
++nPos;
}
@@ -1576,9 +1606,9 @@ BOOL ImpSvNumberInputScan::ScanEndString( const String& rString,
nPos = nOldPos;
}
- if (nPos < rString.Len()) // alles weg?
+ if (nPos < rString.Len()) // everything consumed?
{
- // eingegebener EndString gleich EndString im Format?
+ // does input EndString equal EndString in Format?
if ( !ScanStringNumFor( rString, nPos, pFormat, 0xFFFF ) )
return FALSE;
}
@@ -1929,7 +1959,7 @@ void ImpSvNumberInputScan::ChangeIntl()
bDecSepInDateSeps = ( cDecSep == '-' ||
cDecSep == '/' ||
cDecSep == '.' ||
- cDecSep == pFormatter->GetInternational()->GetDateSep());
+ cDecSep == pFormatter->GetLocaleData()->getDateSep().GetChar(0) );
bTextInitialized = FALSE;
}
diff --git a/svtools/source/numbers/zforlist.cxx b/svtools/source/numbers/zforlist.cxx
index 1aabfad2cc8b..f0be3daf9767 100644
--- a/svtools/source/numbers/zforlist.cxx
+++ b/svtools/source/numbers/zforlist.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: zforlist.cxx,v $
*
- * $Revision: 1.3 $
+ * $Revision: 1.4 $
*
- * last change: $Author: er $ $Date: 2000-10-16 18:24:30 $
+ * last change: $Author: er $ $Date: 2000-10-17 18:46:13 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -1509,9 +1509,6 @@ void SvNumberFormatter::ImpGenerateFormats(ULONG CLOffset)
pNewFormat))
delete pNewFormat;
- sal_Unicode cDecSep = pIntl->GetNumDecimalSep();
- sal_Unicode cThousandSep = pIntl->GetNumThousandSep();
-
// Number
@@ -1890,6 +1887,7 @@ void SvNumberFormatter::GenerateFormat(String& sString,
// formate anlegen
sString.Erase();
+ const String& rThSep = pLocaleData->getNumThousandSep();
if (nAnzLeading == 0)
{
if (!bThousand)
@@ -1897,7 +1895,7 @@ void SvNumberFormatter::GenerateFormat(String& sString,
else
{
sString += '#';
- sString += pIntl->GetNumThousandSep();
+ sString += rThSep;
sString += '#';
sString += '#';
sString += '#';
@@ -1908,7 +1906,7 @@ void SvNumberFormatter::GenerateFormat(String& sString,
for (i = 0; i < nAnzLeading; i++)
{
if (bThousand && i%3 == 0 && i > 0)
- sString.Insert(pIntl->GetNumThousandSep(),0);
+ sString.Insert( rThSep, 0 );
sString.Insert('0',0);
}
if (bThousand && nAnzLeading < 4)
@@ -1916,14 +1914,14 @@ void SvNumberFormatter::GenerateFormat(String& sString,
for (i = nAnzLeading; i < 4; i++)
{
if (bThousand && i%3 == 0)
- sString.Insert(pIntl->GetNumThousandSep(),0);
+ sString.Insert( rThSep, 0 );
sString.Insert('#',0);
}
}
}
if (nPrecision > 0)
{
- sString += pIntl->GetNumDecimalSep();
+ sString += pLocaleData->getNumDecimalSep();
for (i = 0; i < nPrecision; i++)
sString += '0';
}
diff --git a/svtools/source/numbers/zformat.cxx b/svtools/source/numbers/zformat.cxx
index a0473d95b0f6..c0d7b4d5e8e4 100644
--- a/svtools/source/numbers/zformat.cxx
+++ b/svtools/source/numbers/zformat.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: zformat.cxx,v $
*
- * $Revision: 1.3 $
+ * $Revision: 1.4 $
*
- * last change: $Author: er $ $Date: 2000-10-16 18:24:30 $
+ * last change: $Author: er $ $Date: 2000-10-17 18:46:13 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -411,12 +411,12 @@ SvNumberformat::SvNumberformat(String& rString,
bStarFlag( FALSE ),
nNewStandardDefined(0)
{
- // Wenn der Tausender-Trenner ein Non-Breaking Space ist (franzoesisch),
- // alle Vorkommen auf einfaches Space aendern:
- // (Die Tokens werden hinterher wieder auf das Zeichen vom International gesetzt)
-
+ // If the group (AKA thousand) separator is a Non-Breaking Space (French)
+ // replace all occurences by a simple space.
+ // The tokens will be changed to the LocaleData separator again later on.
const sal_Unicode cNBSp = 0xA0;
- if ( pSc->GetIntl().GetNumThousandSep() == cNBSp )
+ const String& rThSep = pSc->GetLoc().getNumThousandSep();
+ if ( rThSep.GetChar(0) == cNBSp && rThSep.Len() == 1 )
{
xub_StrLen nIndex = 0;
do
@@ -1468,12 +1468,12 @@ BOOL SvNumberformat::GetOutputString(double fNumber,
if (nHour < 10)
OutString += '0';
OutString += String::CreateFromInt32(nHour);
- OutString += rIntl().GetTimeSep();
+ OutString += rLoc().getTimeSep();
ULONG nMin = (nTime%3600) / 60;
if (nMin < 10)
OutString += '0';
OutString += String::CreateFromInt32(nMin);
- OutString += rIntl().GetTimeSep();
+ OutString += rLoc().getTimeSep();
ULONG nSec = (nTime%60);
if (nSec < 10)
OutString += '0';
@@ -1498,7 +1498,7 @@ BOOL SvNumberformat::GetOutputString(double fNumber,
if (nHour < 10)
OutString += '0';
OutString += String::CreateFromInt32(nHour);
- OutString += rIntl().GetTimeSep();
+ OutString += rLoc().getTimeSep();
ULONG nMin = (nTime%3600) / 60;
if (nMin < 10)
OutString += '0';
@@ -2725,7 +2725,7 @@ BOOL SvNumberformat::ImpNumberFillWithThousands(
USHORT nDigitCount = 0; // Zaehlt Vorkommaziffern
BOOL bStop = FALSE;
const ImpSvNumberformatInfo& rInfo = NumFor[nIx].Info();
- const sal_Unicode cThousandSep = rIntl().GetNumThousandSep();
+ const String& rThousandSep = rLoc().getNumThousandSep();
while (!bStop) // rueckwaerts
{
if (j == 0)
@@ -2768,7 +2768,8 @@ BOOL SvNumberformat::ImpNumberFillWithThousands(
{
nDigitCount++;
const sal_Unicode c = *p;
- if (c == cThousandSep)
+//! TODO: what if rThousandSep is more than one charater? => change this damned backward loop
+ if ( c == rThousandSep.GetChar(0) && rThousandSep.Len() == 1 )
{
nDigitCount--;
if (k > 0)
@@ -2824,22 +2825,6 @@ BOOL SvNumberformat::ImpNumberFillWithThousands(
k += nLeadingStringChars + nAnzLeadingChars;
if (k > nLeadingStringChars)
ImpDigitFill(sStr, nLeadingStringChars, k, nIx, nThousandCnt);
-/*
- if (k > 0 && rInfo.bThousand) // noch Ziffern da
- { // Aufuellen mit .
- while (k > 0)
- {
- if (nThousandCnt > 2)
- { // hier muss . dazwischen
- sStr.Insert(rIntl().GetNumThousandSep(),k);
- nThousandCnt = 1;
- }
- else
- nThousandCnt++;
- k--;
- }
- }
-*/
return bRes;
}
@@ -2852,11 +2837,12 @@ void SvNumberformat::ImpDigitFill(
{
if (NumFor[nIx].Info().bThousand) // noch Ziffern da
{ // Aufuellen mit .
+ const String& rThousandSep = rLoc().getNumThousandSep();
while (k > nStart)
{
if (nThousandCnt > 2)
{ // hier muss . dazwischen
- sStr.Insert(rIntl().GetNumThousandSep(),k);
+ sStr.Insert( rThousandSep, k );
nThousandCnt = 1;
}
else
@@ -2879,7 +2865,7 @@ BOOL SvNumberformat::ImpNumberFill(String& sStr, // Zahlstring
k = sStr.Len(); // hinter letzter Ziffer
BOOL bLeading = FALSE; // fuehrende ? oder 0
const ImpSvNumberformatInfo& rInfo = NumFor[nIx].Info();
- const sal_Unicode cThousandSep = rIntl().GetNumThousandSep();
+ const String& rThousandSep = rLoc().getNumThousandSep();
short nType;
while (j > 0 && (nType = rInfo.nTypeArray[j]) != eSymbolType )
{ // rueckwaerts:
@@ -2904,7 +2890,8 @@ BOOL SvNumberformat::ImpNumberFill(String& sStr, // Zahlstring
while ( p1 < p-- )
{
const sal_Unicode c = *p;
- if (c == cThousandSep)
+//! TODO: what if rThousandSep is more than one charater? => change this damned backward loop
+ if ( c == rThousandSep.GetChar(0) && rThousandSep.Len() == 1 )
{
if (k > 0)
sStr.Insert(c,k);
diff --git a/svtools/source/numbers/zforscan.cxx b/svtools/source/numbers/zforscan.cxx
index fc262e4fc227..91ff62abbb63 100644
--- a/svtools/source/numbers/zforscan.cxx
+++ b/svtools/source/numbers/zforscan.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: zforscan.cxx,v $
*
- * $Revision: 1.3 $
+ * $Revision: 1.4 $
*
- * last change: $Author: er $ $Date: 2000-10-16 18:24:30 $
+ * last change: $Author: er $ $Date: 2000-10-17 18:46:13 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -770,19 +770,18 @@ xub_StrLen ImpSvNumberformatScan::Symbol_Division(const String& rString)
nAnzStrings = 0;
BOOL bStar = FALSE; // wird bei '*'Detektion gesetzt
Reset();
- const International* pIntl = pFormatter->GetInternational();
- cOldDecSep = pIntl->GetNumDecimalSep();
- cOldThousandSep = pIntl->GetNumThousandSep();
- cOldDateSep = pIntl->GetDateSep();
- cOldTimeSep = pIntl->GetTimeSep();
-
- // Wenn der Tausender-Trenner ein Non-Breaking Space ist (franzoesisch), mit
- // einfachem Space weiterarbeiten, damit die Abfragen auf Space funktionieren.
- // Der Format-String wird angepasst, so dass beides erlaubt ist.
- // Fuer die Ausgabe des Format-Strings wird das Zeichen vom International genommen.
+ const LocaleDataWrapper* pLoc = pFormatter->GetLocaleData();
+ sOldDecSep = pLoc->getNumDecimalSep();
+ sOldThousandSep = pLoc->getNumThousandSep();
+ sOldDateSep = pLoc->getDateSep();
+ sOldTimeSep = pLoc->getTimeSep();
- if ( cOldThousandSep == 0xA0 )
- cOldThousandSep = ' ';
+ // If the group separator is a Non-Breaking Space (French) continue with a
+ // normal space instead so queries on space work correctly.
+ // The format string is adjusted to allow both.
+ // For output of the format code string the LocaleData characters are used.
+ if ( sOldThousandSep.GetChar(0) == 0xA0 && sOldThousandSep.Len() == 1 )
+ sOldThousandSep = ' ';
xub_StrLen nPos = 0;
const xub_StrLen nLen = rString.Len();
@@ -1122,7 +1121,7 @@ xub_StrLen ImpSvNumberformatScan::ScanType(const String& rString)
{
if (nCurrPos != STRING_NOTFOUND)
eScannedType = NUMBERFORMAT_UNDEFINED;
- else if ( sStrArray[i].GetChar(0) != cOldDateSep )
+ else if ( sStrArray[i] != sOldDateSep )
return nPos;
}
}
@@ -1141,7 +1140,7 @@ xub_StrLen ImpSvNumberformatScan::ScanType(const String& rString)
{
if (nCurrPos != STRING_NOTFOUND)
eScannedType = NUMBERFORMAT_UNDEFINED;
- else if ( sStrArray[i].GetChar(0) != cOldTimeSep )
+ else if ( sStrArray[i] != sOldTimeSep )
return nPos;
}
}
@@ -1160,8 +1159,8 @@ xub_StrLen ImpSvNumberformatScan::ScanType(const String& rString)
{
if (nCurrPos != STRING_NOTFOUND)
eScannedType = NUMBERFORMAT_UNDEFINED;
- else if ( sStrArray[i].GetChar(0) != cOldDateSep
- && sStrArray[i].GetChar(0) != cOldTimeSep )
+ else if ( sStrArray[i] != sOldDateSep
+ && sStrArray[i] != sOldTimeSep )
return nPos;
}
}
@@ -1265,6 +1264,7 @@ xub_StrLen ImpSvNumberformatScan::ScanType(const String& rString)
xub_StrLen ImpSvNumberformatScan::FinalScan( String& rString, String& rComment )
{
const International* pIntl = pFormatter->GetInternational();
+ const LocaleDataWrapper* pLoc = pFormatter->GetLocaleData();
xub_StrLen nPos = 0; // Korrekturposition
USHORT i = 0; // durchlaeuft die Symbole
@@ -1318,10 +1318,10 @@ xub_StrLen ImpSvNumberformatScan::FinalScan( String& rString, String& rComment )
sal_Unicode cThousandFill = ' ';
while (i < nAnzStrings)
{
- if (eScannedType == NUMBERFORMAT_FRACTION && // Sonderfall
+ if (eScannedType == NUMBERFORMAT_FRACTION && // special case
nTypeArray[i] == SYMBOLTYPE_DEL && // # ### #/#
- cOldThousandSep == ' ' && // Frankreich
- sStrArray[i].GetChar(0) == ' ' && // Schweden
+ StringEqualsChar( sOldThousandSep, ' ' ) && // e.g. France or Sweden
+ StringEqualsChar( sStrArray[i], ' ' ) &&
!bFrac &&
IsLastBlankBeforeFrac(i) )
{
@@ -1446,25 +1446,24 @@ xub_StrLen ImpSvNumberformatScan::FinalScan( String& rString, String& rComment )
case '\'':
case ' ':
{
- sal_Unicode cSep = cHere; // merken
- if ( cSep == cOldThousandSep)
+ sal_Unicode cSep = cHere; // remember
+ if ( StringEqualsChar( sOldThousandSep, cSep ) )
{
if (bConvertMode)
{
- cSep = pIntl->GetNumThousandSep();
- sStrArray[i].SetChar( 0, cSep );
+ sStrArray[i].Replace( 0, 1, pLoc->getNumThousandSep() );
}
- sal_Unicode cPre = PreviousChar(i); // letzter Buchst.
- // vorher (skipt empty)
+ // previous char with skip empty
+ sal_Unicode cPre = PreviousChar(i);
sal_Unicode cNext;
if (bExp || bBlank || bFrac)
- { // hinter E, / oder ' '
- if (cOldThousandSep != ' ')
+ { // after E, / or ' '
+ if ( !StringEqualsChar( sOldThousandSep, ' ' ) )
{
nPos += sStrArray[i].Len();
nTypeArray[i] = SYMBOLTYPE_EMPTY;
nAnzResStrings--;
- i++; // weg damit
+ i++; // eat it
}
else
nTypeArray[i] = SYMBOLTYPE_STRING;
@@ -1475,15 +1474,14 @@ xub_StrLen ImpSvNumberformatScan::FinalScan( String& rString, String& rComment )
) // #.#
{
nPos += sStrArray[i].Len();
- if (!bThousand) // nur einmal
- {
- // hart setzen, falls Non-Breaking Space
- sStrArray[i].Replace( 0, 1, pIntl->GetNumThousandSep() );
+ if (!bThousand) // only once
+ { // set hard, in case of Non-Breaking Space
+ sStrArray[i].Replace( 0, 1, pLoc->getNumThousandSep() );
nTypeArray[i] = SYMBOLTYPE_THSEP;
bThousand = TRUE;
cThousandFill = sStrArray[i+1].GetChar(0);
}
- else // weg damit
+ else // eat it
{
nTypeArray[i] = SYMBOLTYPE_EMPTY;
nAnzResStrings--;
@@ -1494,28 +1492,27 @@ xub_StrLen ImpSvNumberformatScan::FinalScan( String& rString, String& rComment )
&& PreviousType(i) == SYMBOLTYPE_DIGIT
&& nThousand < FLAG_STANDARD_IN_FORMAT )
{ // #....
- if ( cOldThousandSep == ' ' )
- { // die spinnen, die Franzosen..
+ if ( StringEqualsChar( sOldThousandSep, ' ' ) )
+ { // strange, those French..
BOOL bFirst = TRUE;
String& rStr = sStrArray[i];
- // hart setzen, Non-Breaking Space
- sal_Unicode cSepF = pIntl->GetNumThousandSep();
+ // set a hard Non-Breaking Space
+ const String& rSepF = pLoc->getNumThousandSep();
while ( i < nAnzStrings
- && sStrArray[i].GetChar(0) ==
- cOldThousandSep
- && NextChar(i) == cOldThousandSep )
- { // letzter ist Space oder es folgt
- // noch ein Space => TausenderSep
+ && sStrArray[i] == sOldThousandSep
+ && StringEqualsChar( sOldThousandSep, NextChar(i) ) )
+ { // last was a space or another space
+ // is following => separator
nPos += sStrArray[i].Len();
if ( bFirst )
{
bFirst = FALSE;
- rStr.Replace( 0, 1, cSepF );
+ rStr.Replace( 0, 1, rSepF );
nTypeArray[i] = SYMBOLTYPE_THSEP;
}
else
{
- rStr += cSepF;
+ rStr += rSepF;
nTypeArray[i] = SYMBOLTYPE_EMPTY;
nAnzResStrings--;
}
@@ -1523,11 +1520,10 @@ xub_StrLen ImpSvNumberformatScan::FinalScan( String& rString, String& rComment )
i++;
}
if ( i < nAnzStrings-1
- && sStrArray[i].GetChar(0) ==
- cOldThousandSep )
- { // hinter letztem Space ist was
- // => Space wenn Waehrung enthalten,
- // sonst TausenderSep
+ && sStrArray[i] == sOldThousandSep )
+ { // something following last space
+ // => space if currency contained,
+ // else separator
nPos += sStrArray[i].Len();
if ( (nPos <= nCurrPos &&
nCurrPos < nPos + sStrArray[i+1].Len())
@@ -1543,12 +1539,12 @@ xub_StrLen ImpSvNumberformatScan::FinalScan( String& rString, String& rComment )
if ( bFirst )
{
bFirst = FALSE;
- rStr.Replace( 0, 1, cSepF );
+ rStr.Replace( 0, 1, rSepF );
nTypeArray[i] = SYMBOLTYPE_THSEP;
}
else
{
- rStr += cSepF;
+ rStr += rSepF;
nTypeArray[i] = SYMBOLTYPE_EMPTY;
nAnzResStrings--;
}
@@ -1564,9 +1560,8 @@ xub_StrLen ImpSvNumberformatScan::FinalScan( String& rString, String& rComment )
nPos += rStr.Len();
i++;
nThousand++;
- while (i < nAnzStrings &&
- sStrArray[i].GetChar(0) ==
- cOldThousandSep)
+ while ( i < nAnzStrings &&
+ sStrArray[i] == sOldThousandSep )
{
nThousand++;
rStr += cSep;
@@ -1577,15 +1572,14 @@ xub_StrLen ImpSvNumberformatScan::FinalScan( String& rString, String& rComment )
}
}
}
- else // irgendwelche .
+ else // any grsep
{
nTypeArray[i] = SYMBOLTYPE_STRING;
String& rStr = sStrArray[i];
nPos += rStr.Len();
i++;
- while (i < nAnzStrings &&
- sStrArray[i].GetChar(0) ==
- cOldThousandSep)
+ while ( i < nAnzStrings &&
+ sStrArray[i] == sOldThousandSep )
{
rStr += sStrArray[i];
nPos += sStrArray[i].Len();
@@ -1595,31 +1589,29 @@ xub_StrLen ImpSvNumberformatScan::FinalScan( String& rString, String& rComment )
}
}
}
- else if ( cSep == cOldDecSep)
- { // Dezimalzeichen
+ else if ( StringEqualsChar( sOldDecSep, cSep ) )
+ {
if (bConvertMode)
{
- cSep = pIntl->GetNumDecimalSep();
- sStrArray[i].Replace( 0, 1, cSep );
+ sStrArray[i].Replace( 0, 1, pLoc->getNumDecimalSep() );
}
- if (bBlank || bFrac) // , hinter /, ' '
- return nPos; // Fehler
- else if (bExp) // hinter dem E
+ if (bBlank || bFrac) // , behind /, ' '
+ return nPos; // error
+ else if (bExp) // behind E
{
nPos += sStrArray[i].Len();
nTypeArray[i] = SYMBOLTYPE_EMPTY;
nAnzResStrings--;
- i++; // weg damit
+ i++; // eat it
}
- else if (bDecSep) // irgendwelche ,
+ else if (bDecSep) // any ,
{
nTypeArray[i] = SYMBOLTYPE_STRING;
String& rStr = sStrArray[i];
nPos += rStr.Len();
i++;
- while (i < nAnzStrings &&
- sStrArray[i].GetChar(0) ==
- cOldDecSep)
+ while ( i < nAnzStrings &&
+ sStrArray[i] == sOldDecSep )
{
rStr += sStrArray[i];
nPos += sStrArray[i].Len();
@@ -1639,16 +1631,16 @@ xub_StrLen ImpSvNumberformatScan::FinalScan( String& rString, String& rComment )
i++;
}
} // of else = DecSep
- else // . ohne Bedeutung
+ else // . without meaning
{
if (cSep == ' ' &&
eScannedType == NUMBERFORMAT_FRACTION &&
- sStrArray[i].GetChar(0) == ' ')
+ StringEqualsChar( sStrArray[i], ' ' ) )
{
- if (!bBlank && !bFrac) // nicht doppelt
- { // oder hinter /
- if (bDecSep && nCounter > 0)// Nachkom.
- return nPos; // Fehler
+ if (!bBlank && !bFrac) // no dups
+ { // or behind /
+ if (bDecSep && nCounter > 0)// dec.
+ return nPos; // error
bBlank = TRUE;
nBlankPos = i;
nCntPre = nCounter;
@@ -1664,7 +1656,7 @@ xub_StrLen ImpSvNumberformatScan::FinalScan( String& rString, String& rComment )
nPos += rStr.Len();
i++;
while (i < nAnzStrings &&
- sStrArray[i].GetChar(0) == cSep)
+ StringEqualsChar( sStrArray[i], cSep ) )
{
rStr += sStrArray[i];
nPos += sStrArray[i].Len();
@@ -1865,7 +1857,7 @@ xub_StrLen ImpSvNumberformatScan::FinalScan( String& rString, String& rComment )
for (xub_StrLen k = 0; k < nAnz; k++)
{
sStrArray[i].Insert(
- pIntl->GetNumThousandSep(),InPos);
+ pLoc->getNumThousandSep(),InPos);
InPos += 4;
}
nCount = sStrArray[i].Len() - InPos + 3;
@@ -1890,7 +1882,7 @@ xub_StrLen ImpSvNumberformatScan::FinalScan( String& rString, String& rComment )
for (xub_StrLen k = 0; k < nAnz; k++)
{
sStrArray[i].Insert(
- pIntl->GetNumThousandSep(),InPos);
+ pLoc->getNumThousandSep(),InPos);
InPos -= 3;
}
nCount = InPos + 3;
@@ -1924,8 +1916,8 @@ xub_StrLen ImpSvNumberformatScan::FinalScan( String& rString, String& rComment )
break;
case SYMBOLTYPE_DEL:
{
- if (bConvertMode && sStrArray[i].GetChar(0) == cOldDateSep)
- sStrArray[i].Replace( 0, 1, pIntl->GetDateSep() );
+ if (bConvertMode && sStrArray[i] == sOldDateSep)
+ sStrArray[i].Replace( 0, 1, pLoc->getDateSep() );
nTypeArray[i] = SYMBOLTYPE_STRING;
}
break;
@@ -2038,8 +2030,8 @@ xub_StrLen ImpSvNumberformatScan::FinalScan( String& rString, String& rComment )
default:
{
if (bConvertMode &&
- sStrArray[i].GetChar(0) == cOldTimeSep)
- sStrArray[i].Replace( 0, 1, pIntl->GetTimeSep() );
+ sStrArray[i] == sOldTimeSep)
+ sStrArray[i].Replace( 0, 1, pLoc->getTimeSep() );
nTypeArray[i] = SYMBOLTYPE_STRING;
nPos += sStrArray[i].Len();
i++;
@@ -2122,10 +2114,10 @@ xub_StrLen ImpSvNumberformatScan::FinalScan( String& rString, String& rComment )
break;
case SYMBOLTYPE_DEL:
{
- if (bConvertMode && sStrArray[i].GetChar(0) == cOldDateSep)
- sStrArray[i].Replace( 0, 1, pIntl->GetDateSep() );
- if (bConvertMode && sStrArray[i].GetChar(0) == cOldTimeSep)
- sStrArray[i].Replace( 0, 1, pIntl->GetTimeSep() );
+ if (bConvertMode && sStrArray[i] == sOldDateSep)
+ sStrArray[i].Replace( 0, 1, pLoc->getDateSep() );
+ if (bConvertMode && sStrArray[i] == sOldTimeSep)
+ sStrArray[i].Replace( 0, 1, pLoc->getTimeSep() );
nTypeArray[i] = SYMBOLTYPE_STRING;
}
break;
diff --git a/svtools/source/numbers/zforscan.hxx b/svtools/source/numbers/zforscan.hxx
index db331dfb2153..773bee17a880 100644
--- a/svtools/source/numbers/zforscan.hxx
+++ b/svtools/source/numbers/zforscan.hxx
@@ -2,9 +2,9 @@
*
* $RCSfile: zforscan.hxx,v $
*
- * $Revision: 1.3 $
+ * $Revision: 1.4 $
*
- * last change: $Author: er $ $Date: 2000-10-16 18:24:30 $
+ * last change: $Author: er $ $Date: 2000-10-17 18:46:13 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -128,6 +128,7 @@ public:
const International& GetIntl() const { return *pFormatter->GetInternational(); }
const CharClass& GetChrCls() const { return *pFormatter->GetCharClass(); }
+ const LocaleDataWrapper& GetLoc() const { return *pFormatter->GetLocaleData(); }
const String& GetQuartalString() const { return sKeyword[NF_KEY_QUARTER]; }
const String& GetTrueString() const { return sKeyword[NF_KEY_TRUE]; }
@@ -210,10 +211,10 @@ private: // ---- privater Teil
// Land/Sprache, aus der der
LanguageType eTmpLnge; // gescannte String konvertiert
// wird (fuer Excel Filter)
- sal_Unicode cOldDecSep; // Dezimalsymbol der Ausgangs-
- sal_Unicode cOldThousandSep; // spr., analog Tausenderpunkt
- sal_Unicode cOldDateSep; // Datums- und Zeitsymbol
- sal_Unicode cOldTimeSep;
+ String sOldDecSep; // Dezimalsymbol der Ausgangs-
+ String sOldThousandSep; // spr., analog Tausenderpunkt
+ String sOldDateSep; // Datums- und Zeitsymbol
+ String sOldTimeSep;
xub_StrLen nCurrPos; // Position des Waehrungssymbols
#ifdef _ZFORSCAN_CXX // ----- private Methoden -----
@@ -244,6 +245,11 @@ private: // ---- privater Teil
xub_StrLen FinalScan( String& rString, String& rComment ); // Endanalyse mit Vorgabe
// des Typs
+ static inline BOOL StringEqualsChar( const String& rStr, sal_Unicode ch )
+ { return rStr.GetChar(0) == ch && rStr.Len() == 1; }
+ // Yes, for efficiency get the character first and then compare length
+ // because in most places where this is used the string is one char.
+
#endif //_ZFORSCAN_CXX
};