diff options
author | Eike Rathke <er@openoffice.org> | 2000-10-17 17:46:13 +0000 |
---|---|---|
committer | Eike Rathke <er@openoffice.org> | 2000-10-17 17:46:13 +0000 |
commit | 77a1225b55bdb2dd07a08c85f1a08b81e022d988 (patch) | |
tree | ae0274b444ac5055d60413b252a5d2df095016ed /svtools/source/numbers | |
parent | 3a7225b07d321de290a96a606b4cf04eaf9f2849 (diff) |
using LocaleData, second wave
Diffstat (limited to 'svtools/source/numbers')
-rw-r--r-- | svtools/source/numbers/zforfind.cxx | 252 | ||||
-rw-r--r-- | svtools/source/numbers/zforlist.cxx | 16 | ||||
-rw-r--r-- | svtools/source/numbers/zformat.cxx | 49 | ||||
-rw-r--r-- | svtools/source/numbers/zforscan.cxx | 170 | ||||
-rw-r--r-- | svtools/source/numbers/zforscan.hxx | 18 |
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 }; |