Update ooo320-m1
[ooovba.git] / svtools / source / numbers / zforscan.hxx
blobdf243f10bad6c12d326f0aca741861aa6180f323
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: zforscan.hxx,v $
10 * $Revision: 1.24.136.1 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
30 #ifndef _ZFORSCAN_HXX
31 #define _ZFORSCAN_HXX
33 #include <tools/string.hxx>
34 #include <tools/date.hxx>
35 #include <i18npool/lang.h>
36 #include <tools/color.hxx>
37 #include <svtools/nfkeytab.hxx>
38 #include "nfsymbol.hxx"
40 class SvNumberFormatter;
41 struct ImpSvNumberformatInfo;
44 const size_t NF_MAX_FORMAT_SYMBOLS = 100;
45 const size_t NF_MAX_DEFAULT_COLORS = 10;
47 // Hack: nThousand==1000 => "Default" occurs in format string
48 const USHORT FLAG_STANDARD_IN_FORMAT = 1000;
50 class ImpSvNumberformatScan
52 public:
54 ImpSvNumberformatScan( SvNumberFormatter* pFormatter );
55 ~ImpSvNumberformatScan();
56 void ChangeIntl(); // tauscht Keywords aus
58 void ChangeNullDate(USHORT nDay, USHORT nMonth, USHORT nYear);
59 // tauscht Referenzdatum aus
60 void ChangeStandardPrec(short nPrec); // tauscht Standardprecision aus
62 xub_StrLen ScanFormat( String& rString, String& rComment ); // Aufruf der Scan-Analyse
64 void CopyInfo(ImpSvNumberformatInfo* pInfo,
65 USHORT nAnz); // Kopiert die FormatInfo
66 USHORT GetAnzResStrings() const { return nAnzResStrings; }
68 const CharClass& GetChrCls() const { return *pFormatter->GetCharClass(); }
69 const LocaleDataWrapper& GetLoc() const { return *pFormatter->GetLocaleData(); }
70 CalendarWrapper& GetCal() const { return *pFormatter->GetCalendar(); }
72 const String* GetKeywords() const
74 if ( bKeywordsNeedInit )
75 InitKeywords();
76 return sKeyword;
78 // Keywords used in output like TRUE and FALSE
79 const String& GetSpecialKeyword( NfKeywordIndex eIdx ) const
81 if ( !sKeyword[eIdx].Len() )
82 InitSpecialKeyword( eIdx );
83 return sKeyword[eIdx];
85 const String& GetTrueString() const { return GetSpecialKeyword( NF_KEY_TRUE ); }
86 const String& GetFalseString() const { return GetSpecialKeyword( NF_KEY_FALSE ); }
87 const String& GetColorString() const { return GetKeywords()[NF_KEY_COLOR]; }
88 const String& GetRedString() const { return GetKeywords()[NF_KEY_RED]; }
89 const String& GetBooleanString() const { return GetKeywords()[NF_KEY_BOOLEAN]; }
90 const String& GetErrorString() const { return sErrStr; }
92 Date* GetNullDate() const { return pNullDate; }
93 const String& GetStandardName() const
95 if ( bKeywordsNeedInit )
96 InitKeywords();
97 return sNameStandardFormat;
99 short GetStandardPrec() const { return nStandardPrec; }
100 const Color& GetRedColor() const { return StandardColor[4]; }
101 Color* GetColor(String& sStr); // Setzt Hauptfarben oder
102 // definierte Farben
104 // the compatibility currency symbol for old automatic currency formats
105 const String& GetCurSymbol() const
107 if ( bCompatCurNeedInit )
108 InitCompatCur();
109 return sCurSymbol;
112 // the compatibility currency abbreviation for CCC format code
113 const String& GetCurAbbrev() const
115 if ( bCompatCurNeedInit )
116 InitCompatCur();
117 return sCurAbbrev;
120 // the compatibility currency symbol upper case for old automatic currency formats
121 const String& GetCurString() const
123 if ( bCompatCurNeedInit )
124 InitCompatCur();
125 return sCurString;
128 void SetConvertMode(LanguageType eTmpLge, LanguageType eNewLge,
129 BOOL bSystemToSystem = FALSE )
131 bConvertMode = TRUE;
132 eNewLnge = eNewLge;
133 eTmpLnge = eTmpLge;
134 bConvertSystemToSystem = bSystemToSystem;
136 void SetConvertMode(BOOL bMode) { bConvertMode = bMode; }
137 // Veraendert nur die Bool-Variable
138 // (zum temporaeren Unterbrechen des
139 // Convert-Modus)
140 BOOL GetConvertMode() const { return bConvertMode; }
141 LanguageType GetNewLnge() const { return eNewLnge; }
142 // Lesezugriff auf ConvertMode
143 // und Konvertierungsland/Spr.
144 LanguageType GetTmpLnge() const { return eTmpLnge; }
145 // Lesezugriff auf
146 // und Ausgangsland/Spr.
148 /// get Thai T speciality
149 BYTE GetNatNumModifier() const { return nNatNumModifier; }
150 /// set Thai T speciality
151 void SetNatNumModifier( BYTE n ) { nNatNumModifier = n; }
153 SvNumberFormatter* GetNumberformatter() { return pFormatter; }
154 // Zugriff auf Formatierer
155 // (fuer zformat.cxx)
158 private: // ---- privater Teil
159 NfKeywordTable sKeyword; // Schluesselworte der Syntax
160 Color StandardColor[NF_MAX_DEFAULT_COLORS];
161 // Array der Standardfarben
162 Date* pNullDate; // 30Dec1899
163 String sNameStandardFormat; // "Standard"
164 short nStandardPrec; // default Precision fuer Standardformat (2)
165 SvNumberFormatter* pFormatter; // Pointer auf die Formatliste
167 String sStrArray[NF_MAX_FORMAT_SYMBOLS]; // Array der Symbole
168 short nTypeArray[NF_MAX_FORMAT_SYMBOLS]; // Array der Infos
169 // externe Infos:
170 USHORT nAnzResStrings; // Anzahl der Ergebnissymbole
171 #if !(defined SOLARIS && defined X86)
172 short eScannedType; // Typ gemaess Scan
173 #else
174 int eScannedType; // wg. Optimierung
175 #endif
176 BOOL bThousand; // Mit Tausenderpunkt
177 USHORT nThousand; // Zaehlt ....-Folgen
178 USHORT nCntPre; // Zaehlt Vorkommastellen
179 USHORT nCntPost; // Zaehlt Nachkommastellen
180 USHORT nCntExp; // Zaehlt Exp.Stellen, AM/PM
181 // interne Infos:
182 USHORT nAnzStrings; // Anzahl der Symbole
183 USHORT nRepPos; // Position eines '*'
184 USHORT nExpPos; // interne Position des E
185 USHORT nBlankPos; // interne Position des Blank
186 short nDecPos; // interne Pos. des ,
187 BOOL bExp; // wird bei Lesen des E gesetzt
188 BOOL bFrac; // wird bei Lesen des / gesetzt
189 BOOL bBlank; // wird bei ' '(Fraction) ges.
190 BOOL bDecSep; // Wird beim ersten , gesetzt
191 mutable BOOL bKeywordsNeedInit; // Locale dependent keywords need to be initialized
192 mutable BOOL bCompatCurNeedInit; // Locale dependent compatibility currency need to be initialized
193 String sCurSymbol; // Currency symbol for compatibility format codes
194 String sCurString; // Currency symbol in upper case
195 String sCurAbbrev; // Currency abbreviation
196 String sErrStr; // String fuer Fehlerausgaben
198 BOOL bConvertMode; // Wird im Convert-Mode gesetzt
199 // Land/Sprache, in die der
200 LanguageType eNewLnge; // gescannte String konvertiert
201 // wird (fuer Excel Filter)
202 // Land/Sprache, aus der der
203 LanguageType eTmpLnge; // gescannte String konvertiert
204 // wird (fuer Excel Filter)
205 BOOL bConvertSystemToSystem; // Whether the conversion is
206 // from one system locale to
207 // another system locale (in
208 // this case the automatic
209 // currency symbol is converted
210 // too).
212 xub_StrLen nCurrPos; // Position des Waehrungssymbols
214 BYTE nNatNumModifier; // Thai T speciality
216 void InitKeywords() const;
217 void InitSpecialKeyword( NfKeywordIndex eIdx ) const;
218 void InitCompatCur() const;
220 #ifdef _ZFORSCAN_CXX // ----- private Methoden -----
221 void SetDependentKeywords();
222 // Setzt die Sprachabh. Keyw.
223 void SkipStrings(USHORT& i,xub_StrLen& nPos);// Ueberspringt StringSymbole
224 USHORT PreviousKeyword(USHORT i); // Gibt Index des vorangeh.
225 // Schluesselworts oder 0
226 USHORT NextKeyword(USHORT i); // Gibt Index des naechsten
227 // Schluesselworts oder 0
228 sal_Unicode PreviousChar(USHORT i); // Gibt letzten Buchstaben
229 // vor der Position,
230 // skipt EMPTY, STRING, STAR, BLANK
231 sal_Unicode NextChar(USHORT i); // Gibt ersten Buchst. danach
232 short PreviousType( USHORT i ); // Gibt Typ vor Position,
233 // skipt EMPTY
234 BOOL IsLastBlankBeforeFrac(USHORT i); // True <=> es kommt kein ' '
235 // mehr bis zum '/'
236 void Reset(); // Reset aller Variablen
237 // vor Analysestart
238 short GetKeyWord( const String& sSymbol, // determine keyword at nPos
239 xub_StrLen nPos ); // return 0 <=> not found
241 inline BOOL IsAmbiguousE( short nKey ) // whether nKey is ambiguous E of NF_KEY_E/NF_KEY_EC
243 return (nKey == NF_KEY_EC || nKey == NF_KEY_E) &&
244 (GetKeywords()[NF_KEY_EC] == GetKeywords()[NF_KEY_E]);
247 // if 0 at strArray[i] is of S,00 or SS,00 or SS"any"00 in ScanType() or FinalScan()
248 BOOL Is100SecZero( USHORT i, BOOL bHadDecSep );
250 short Next_Symbol(const String& rStr,
251 xub_StrLen& nPos,
252 String& sSymbol); // Naechstes Symbol
253 xub_StrLen Symbol_Division(const String& rString);// lexikalische Voranalyse
254 xub_StrLen ScanType(const String& rString); // Analyse des Formattyps
255 xub_StrLen FinalScan( String& rString, String& rComment ); // Endanalyse mit Vorgabe
256 // des Typs
257 // -1:= error, return nPos in FinalScan; 0:= no calendar, 1:= calendar found
258 int FinalScanGetCalendar( xub_StrLen& nPos, USHORT& i, USHORT& nAnzResStrings );
260 /** Insert symbol into nTypeArray and sStrArray, e.g. grouping separator.
261 If at nPos-1 a symbol type NF_SYMBOLTYPE_EMPTY is present, that is
262 reused instead of shifting all one up and nPos is decremented! */
263 bool InsertSymbol( USHORT & nPos, svt::NfSymbolType eType, const String& rStr );
265 static inline BOOL StringEqualsChar( const String& rStr, sal_Unicode ch )
266 { return rStr.GetChar(0) == ch && rStr.Len() == 1; }
267 // Yes, for efficiency get the character first and then compare length
268 // because in most places where this is used the string is one char.
270 // remove "..." and \... quotes from rStr, return how many chars removed
271 static xub_StrLen RemoveQuotes( String& rStr );
273 #endif //_ZFORSCAN_CXX
278 #endif // _ZFORSCAN_HXX