summaryrefslogtreecommitdiff
path: root/svl/source/numbers/zforscan.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'svl/source/numbers/zforscan.cxx')
-rw-r--r--svl/source/numbers/zforscan.cxx56
1 files changed, 30 insertions, 26 deletions
diff --git a/svl/source/numbers/zforscan.cxx b/svl/source/numbers/zforscan.cxx
index 83dbd512a4e2..9eee6a55c823 100644
--- a/svl/source/numbers/zforscan.cxx
+++ b/svl/source/numbers/zforscan.cxx
@@ -1,3 +1,4 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -27,8 +28,6 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svl.hxx"
-#ifndef GCC
-#endif
#include <stdlib.h>
#include <tools/debug.hxx>
@@ -124,7 +123,6 @@ ImpSvNumberformatScan::~ImpSvNumberformatScan()
Reset();
}
-
void ImpSvNumberformatScan::ChangeIntl()
{
bKeywordsNeedInit = sal_True;
@@ -134,7 +132,6 @@ void ImpSvNumberformatScan::ChangeIntl()
sKeyword[NF_KEY_FALSE].Erase();
}
-
void ImpSvNumberformatScan::InitSpecialKeyword( NfKeywordIndex eIdx ) const
{
switch ( eIdx )
@@ -146,7 +143,7 @@ void ImpSvNumberformatScan::InitSpecialKeyword( NfKeywordIndex eIdx ) const
if ( !sKeyword[NF_KEY_TRUE].Len() )
{
DBG_ERRORFILE( "InitSpecialKeyword: TRUE_WORD?" );
- ((ImpSvNumberformatScan*)this)->sKeyword[NF_KEY_TRUE].AssignAscii( RTL_CONSTASCII_STRINGPARAM( "sal_True" ) );
+ ((ImpSvNumberformatScan*)this)->sKeyword[NF_KEY_TRUE].AssignAscii( RTL_CONSTASCII_STRINGPARAM( "TRUE" ) );
}
break;
case NF_KEY_FALSE :
@@ -156,7 +153,7 @@ void ImpSvNumberformatScan::InitSpecialKeyword( NfKeywordIndex eIdx ) const
if ( !sKeyword[NF_KEY_FALSE].Len() )
{
DBG_ERRORFILE( "InitSpecialKeyword: FALSE_WORD?" );
- ((ImpSvNumberformatScan*)this)->sKeyword[NF_KEY_FALSE].AssignAscii( RTL_CONSTASCII_STRINGPARAM( "sal_False" ) );
+ ((ImpSvNumberformatScan*)this)->sKeyword[NF_KEY_FALSE].AssignAscii( RTL_CONSTASCII_STRINGPARAM( "FALSE" ) );
}
break;
default:
@@ -164,7 +161,6 @@ void ImpSvNumberformatScan::InitSpecialKeyword( NfKeywordIndex eIdx ) const
}
}
-
void ImpSvNumberformatScan::InitCompatCur() const
{
ImpSvNumberformatScan* pThis = (ImpSvNumberformatScan*)this;
@@ -175,7 +171,6 @@ void ImpSvNumberformatScan::InitCompatCur() const
bCompatCurNeedInit = sal_False;
}
-
void ImpSvNumberformatScan::InitKeywords() const
{
if ( !bKeywordsNeedInit )
@@ -184,7 +179,6 @@ void ImpSvNumberformatScan::InitKeywords() const
bKeywordsNeedInit = sal_False;
}
-
/** Extract the name of General, Standard, Whatever, ignoring leading modifiers
such as [NatNum1]. */
static String lcl_extractStandardGeneralName( const ::rtl::OUString & rCode )
@@ -228,7 +222,6 @@ static String lcl_extractStandardGeneralName( const ::rtl::OUString & rCode )
return aStr;
}
-
void ImpSvNumberformatScan::SetDependentKeywords()
{
using namespace ::com::sun::star;
@@ -456,7 +449,6 @@ void ImpSvNumberformatScan::SetDependentKeywords()
InitCompatCur();
}
-
void ImpSvNumberformatScan::ChangeNullDate(sal_uInt16 nDay, sal_uInt16 nMonth, sal_uInt16 nYear)
{
if ( pNullDate )
@@ -536,7 +528,6 @@ Color* ImpSvNumberformatScan::GetColor(String& sStr)
return pResult;
}
-
short ImpSvNumberformatScan::GetKeyWord( const String& sSymbol, xub_StrLen nPos )
{
String sString = pFormatter->GetCharClass()->toUpper( sSymbol, nPos, sSymbol.Len() - nPos );
@@ -957,7 +948,6 @@ void ImpSvNumberformatScan::SkipStrings(sal_uInt16& i, xub_StrLen& nPos)
}
}
-
sal_uInt16 ImpSvNumberformatScan::PreviousKeyword(sal_uInt16 i)
{
short res = 0;
@@ -1089,7 +1079,6 @@ void ImpSvNumberformatScan::Reset()
nNatNumModifier = 0;
}
-
sal_Bool ImpSvNumberformatScan::Is100SecZero( sal_uInt16 i, sal_Bool bHadDecSep )
{
sal_uInt16 nIndexPre = PreviousKeyword( i );
@@ -1099,7 +1088,6 @@ sal_Bool ImpSvNumberformatScan::Is100SecZero( sal_uInt16 i, sal_Bool bHadDecSep
// SS"any"00 take "any" as a valid decimal separator
}
-
xub_StrLen ImpSvNumberformatScan::ScanType(const String&)
{
const LocaleDataWrapper* pLoc = pFormatter->GetLocaleData();
@@ -1408,16 +1396,16 @@ xub_StrLen ImpSvNumberformatScan::ScanType(const String&)
return 0; // Alles ok
}
-
bool ImpSvNumberformatScan::InsertSymbol( sal_uInt16 & nPos, svt::NfSymbolType eType, const String& rStr )
{
if (nAnzStrings >= NF_MAX_FORMAT_SYMBOLS || nPos > nAnzStrings)
return false;
- ++nAnzResStrings;
if (nPos > 0 && nTypeArray[nPos-1] == NF_SYMBOLTYPE_EMPTY)
--nPos; // reuse position
else
{
+ if ((size_t) (nAnzStrings + 1) >= NF_MAX_FORMAT_SYMBOLS)
+ return false;
++nAnzStrings;
for (size_t i = nAnzStrings; i > nPos; --i)
{
@@ -1425,12 +1413,12 @@ bool ImpSvNumberformatScan::InsertSymbol( sal_uInt16 & nPos, svt::NfSymbolType e
sStrArray[i] = sStrArray[i-1];
}
}
+ ++nAnzResStrings;
nTypeArray[nPos] = static_cast<short>(eType);
sStrArray[nPos] = rStr;
return true;
}
-
int ImpSvNumberformatScan::FinalScanGetCalendar( xub_StrLen& nPos, sal_uInt16& i,
sal_uInt16& rAnzResStrings )
{
@@ -1559,9 +1547,10 @@ xub_StrLen ImpSvNumberformatScan::FinalScan( String& rString, String& rComment )
case NUMBERFORMAT_SCIENTIFIC:
case NUMBERFORMAT_FRACTION:
{
- sal_Unicode cThousandFill = ' ';
while (i < nAnzStrings)
{
+ // TODO: rechecking eScannedType is unnecessary.
+ // This switch-case is for eScannedType == NUMBERFORMAT_FRACTION anyway
if (eScannedType == NUMBERFORMAT_FRACTION && // special case
nTypeArray[i] == NF_SYMBOLTYPE_DEL && // # ### #/#
StringEqualsChar( sOldThousandSep, ' ' ) && // e.g. France or Sweden
@@ -1572,7 +1561,6 @@ xub_StrLen ImpSvNumberformatScan::FinalScan( String& rString, String& rComment )
nTypeArray[i] = NF_SYMBOLTYPE_STRING; // del->string
} // kein Taus.p.
-
if (nTypeArray[i] == NF_SYMBOLTYPE_BLANK ||
nTypeArray[i] == NF_SYMBOLTYPE_STAR ||
nTypeArray[i] == NF_KEY_CCC || // CCC
@@ -1623,6 +1611,27 @@ xub_StrLen ImpSvNumberformatScan::FinalScan( String& rString, String& rComment )
bThaiT = true;
sStrArray[i] = sKeyword[nTypeArray[i]];
}
+ else if (sStrArray[i].GetChar(0) >= '0' &&
+ sStrArray[i].GetChar(0) <= '9')
+ {
+ rtl::OUString sDiv;
+ sal_uInt16 j = i;
+ while(j < nAnzStrings)
+ sDiv += sStrArray[j++];
+ if (rtl::OUString::valueOf(sDiv.toInt32()) == sDiv)
+ {
+ /* Found a Divisor */
+ while (i < j)
+ nTypeArray[i++] = NF_SYMBOLTYPE_FRAC_FDIV;
+ i = j - 1; // Stop the loop
+ if (nCntPost)
+ nCounter = nCntPost;
+ else if (nCntPre)
+ nCounter = nCntPre;
+ if (!nCntPre)
+ nCntPre++;
+ }
+ }
else
nTypeArray[i] = NF_SYMBOLTYPE_STRING;
nPos = nPos + sStrArray[i].Len();
@@ -1735,10 +1744,7 @@ xub_StrLen ImpSvNumberformatScan::FinalScan( String& rString, String& rComment )
{
nPos = nPos + sStrArray[i].Len();
if (!bThousand) // only once
- {
bThousand = sal_True;
- cThousandFill = sStrArray[i+1].GetChar(0);
- }
// Eat it, will be reinserted at proper
// grouping positions further down.
nTypeArray[i] = NF_SYMBOLTYPE_EMPTY;
@@ -2749,7 +2755,6 @@ xub_StrLen ImpSvNumberformatScan::FinalScan( String& rString, String& rComment )
return 0;
}
-
xub_StrLen ImpSvNumberformatScan::RemoveQuotes( String& rStr )
{
if ( rStr.Len() > 1 )
@@ -2771,7 +2776,6 @@ xub_StrLen ImpSvNumberformatScan::RemoveQuotes( String& rStr )
return 0;
}
-
xub_StrLen ImpSvNumberformatScan::ScanFormat( String& rString, String& rComment )
{
xub_StrLen res = Symbol_Division(rString); //lexikalische Analyse
@@ -2806,4 +2810,4 @@ void ImpSvNumberformatScan::CopyInfo(ImpSvNumberformatInfo* pInfo, sal_uInt16 nA
pInfo->nCntExp = nCntExp;
}
-
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */