1*724893d4SAndrew Rist /**************************************************************
2*724893d4SAndrew Rist *
3*724893d4SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*724893d4SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*724893d4SAndrew Rist * distributed with this work for additional information
6*724893d4SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*724893d4SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*724893d4SAndrew Rist * "License"); you may not use this file except in compliance
9*724893d4SAndrew Rist * with the License. You may obtain a copy of the License at
10*724893d4SAndrew Rist *
11*724893d4SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
13*724893d4SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*724893d4SAndrew Rist * software distributed under the License is distributed on an
15*724893d4SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*724893d4SAndrew Rist * KIND, either express or implied. See the License for the
17*724893d4SAndrew Rist * specific language governing permissions and limitations
18*724893d4SAndrew Rist * under the License.
19*724893d4SAndrew Rist *
20*724893d4SAndrew Rist *************************************************************/
21*724893d4SAndrew Rist
22*724893d4SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_idl.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir
28cdf0e10cSrcweir #include <ctype.h>
29cdf0e10cSrcweir #include <stdio.h>
30cdf0e10cSrcweir
31cdf0e10cSrcweir #include <char.hxx>
32cdf0e10cSrcweir #include <hash.hxx>
33cdf0e10cSrcweir #include <lex.hxx>
34cdf0e10cSrcweir #include <globals.hxx>
35cdf0e10cSrcweir #include <tools/bigint.hxx>
36cdf0e10cSrcweir
37cdf0e10cSrcweir /****************** SvToken **********************************************/
38cdf0e10cSrcweir /*************************************************************************
39cdf0e10cSrcweir |*
40cdf0e10cSrcweir |* SvToken::Print()
41cdf0e10cSrcweir |*
42cdf0e10cSrcweir |* Beschreibung
43cdf0e10cSrcweir |*
44cdf0e10cSrcweir *************************************************************************/
GetTokenAsString() const45cdf0e10cSrcweir ByteString SvToken::GetTokenAsString() const
46cdf0e10cSrcweir {
47cdf0e10cSrcweir ByteString aStr;
48cdf0e10cSrcweir switch( nType )
49cdf0e10cSrcweir {
50cdf0e10cSrcweir case SVTOKEN_EMPTY:
51cdf0e10cSrcweir break;
52cdf0e10cSrcweir case SVTOKEN_COMMENT:
53cdf0e10cSrcweir aStr = aString;
54cdf0e10cSrcweir break;
55cdf0e10cSrcweir case SVTOKEN_INTEGER:
56cdf0e10cSrcweir aStr = ByteString::CreateFromInt64(nLong);
57cdf0e10cSrcweir break;
58cdf0e10cSrcweir case SVTOKEN_STRING:
59cdf0e10cSrcweir aStr = aString;
60cdf0e10cSrcweir break;
61cdf0e10cSrcweir case SVTOKEN_BOOL:
62cdf0e10cSrcweir aStr = bBool ? "TRUE" : "FALSE";
63cdf0e10cSrcweir break;
64cdf0e10cSrcweir case SVTOKEN_IDENTIFIER:
65cdf0e10cSrcweir aStr = aString;
66cdf0e10cSrcweir break;
67cdf0e10cSrcweir case SVTOKEN_CHAR:
68cdf0e10cSrcweir aStr = cChar;
69cdf0e10cSrcweir break;
70cdf0e10cSrcweir case SVTOKEN_RTTIBASE:
71cdf0e10cSrcweir aStr = "RTTIBASE";//(ULONG)pComplexObj;
72cdf0e10cSrcweir break;
73cdf0e10cSrcweir case SVTOKEN_EOF:
74cdf0e10cSrcweir case SVTOKEN_HASHID:
75cdf0e10cSrcweir break;
76cdf0e10cSrcweir }
77cdf0e10cSrcweir
78cdf0e10cSrcweir return aStr;
79cdf0e10cSrcweir }
80cdf0e10cSrcweir
81cdf0e10cSrcweir /*************************************************************************
82cdf0e10cSrcweir |*
83cdf0e10cSrcweir |* SvToken::SvToken()
84cdf0e10cSrcweir |*
85cdf0e10cSrcweir |* Beschreibung
86cdf0e10cSrcweir |*
87cdf0e10cSrcweir *************************************************************************/
SvToken(const SvToken & rObj)88cdf0e10cSrcweir SvToken::SvToken( const SvToken & rObj )
89cdf0e10cSrcweir {
90cdf0e10cSrcweir nLine = rObj.nLine;
91cdf0e10cSrcweir nColumn = rObj.nColumn;
92cdf0e10cSrcweir nType = rObj.nType;
93cdf0e10cSrcweir aString = rObj.aString;
94cdf0e10cSrcweir /*
95cdf0e10cSrcweir if( SVTOKEN_RTTIBASE = nType )
96cdf0e10cSrcweir {
97cdf0e10cSrcweir pComplexObj = rObj.pComplexObj;
98cdf0e10cSrcweir pComplexObj->AddRef();
99cdf0e10cSrcweir }
100cdf0e10cSrcweir else
101cdf0e10cSrcweir */
102cdf0e10cSrcweir nLong = rObj.nLong;
103cdf0e10cSrcweir }
104cdf0e10cSrcweir
105cdf0e10cSrcweir /*************************************************************************
106cdf0e10cSrcweir |*
107cdf0e10cSrcweir |* SvToken::operator = ()
108cdf0e10cSrcweir |*
109cdf0e10cSrcweir |* Beschreibung
110cdf0e10cSrcweir |*
111cdf0e10cSrcweir *************************************************************************/
operator =(const SvToken & rObj)112cdf0e10cSrcweir SvToken & SvToken::operator = ( const SvToken & rObj )
113cdf0e10cSrcweir {
114cdf0e10cSrcweir if( this != &rObj )
115cdf0e10cSrcweir {
116cdf0e10cSrcweir /*
117cdf0e10cSrcweir if( SVTOKEN_RTTIBASE = nType )
118cdf0e10cSrcweir pComplexObj->ReleaseRef();
119cdf0e10cSrcweir */
120cdf0e10cSrcweir nLine = rObj.nLine;
121cdf0e10cSrcweir nColumn = rObj.nColumn;
122cdf0e10cSrcweir nType = rObj.nType;
123cdf0e10cSrcweir aString = rObj.aString;
124cdf0e10cSrcweir /*
125cdf0e10cSrcweir if( SVTOKEN_RTTIBASE = nType )
126cdf0e10cSrcweir {
127cdf0e10cSrcweir pComplexObj = rObj.pComplexObj;
128cdf0e10cSrcweir pComplexObj->AddRef();
129cdf0e10cSrcweir }
130cdf0e10cSrcweir else
131cdf0e10cSrcweir */
132cdf0e10cSrcweir nLong = rObj.nLong;
133cdf0e10cSrcweir }
134cdf0e10cSrcweir return *this;
135cdf0e10cSrcweir }
136cdf0e10cSrcweir
137cdf0e10cSrcweir /****************** SvTokenStream ****************************************/
138cdf0e10cSrcweir /*************************************************************************
139cdf0e10cSrcweir |* SvTokenStream::InitCtor()
140cdf0e10cSrcweir |*
141cdf0e10cSrcweir |* Beschreibung
142cdf0e10cSrcweir *************************************************************************/
InitCtor()143cdf0e10cSrcweir void SvTokenStream::InitCtor()
144cdf0e10cSrcweir {
145cdf0e10cSrcweir SetCharSet( gsl_getSystemTextEncoding() );
146cdf0e10cSrcweir aStrTrue = "TRUE";
147cdf0e10cSrcweir aStrFalse = "FALSE";
148cdf0e10cSrcweir nLine = nColumn = 0;
149cdf0e10cSrcweir nBufPos = 0;
150cdf0e10cSrcweir nTabSize = 4;
151cdf0e10cSrcweir pCurToken = NULL;
152cdf0e10cSrcweir nMaxPos = 0;
153cdf0e10cSrcweir c = GetNextChar();
154cdf0e10cSrcweir FillTokenList();
155cdf0e10cSrcweir }
156cdf0e10cSrcweir
157cdf0e10cSrcweir /*************************************************************************
158cdf0e10cSrcweir |* SvTokenStream::SvTokenStream()
159cdf0e10cSrcweir |*
160cdf0e10cSrcweir |* Beschreibung
161cdf0e10cSrcweir *************************************************************************/
SvTokenStream(const String & rFileName)162cdf0e10cSrcweir SvTokenStream::SvTokenStream( const String & rFileName )
163cdf0e10cSrcweir : pInStream( new SvFileStream( rFileName, STREAM_STD_READ | STREAM_NOCREATE ) )
164cdf0e10cSrcweir , rInStream( *pInStream )
165cdf0e10cSrcweir , aFileName( rFileName )
166cdf0e10cSrcweir , aTokList( 0x8000, 0x8000 )
167cdf0e10cSrcweir {
168cdf0e10cSrcweir InitCtor();
169cdf0e10cSrcweir }
170cdf0e10cSrcweir
171cdf0e10cSrcweir /*************************************************************************
172cdf0e10cSrcweir |* SvTokenStream::SvTokenStream()
173cdf0e10cSrcweir |*
174cdf0e10cSrcweir |* Beschreibung
175cdf0e10cSrcweir *************************************************************************/
SvTokenStream(SvStream & rStream,const String & rFileName)176cdf0e10cSrcweir SvTokenStream::SvTokenStream( SvStream & rStream, const String & rFileName )
177cdf0e10cSrcweir : pInStream( NULL )
178cdf0e10cSrcweir , rInStream( rStream )
179cdf0e10cSrcweir , aFileName( rFileName )
180cdf0e10cSrcweir , aTokList( 0x8000, 0x8000 )
181cdf0e10cSrcweir {
182cdf0e10cSrcweir InitCtor();
183cdf0e10cSrcweir }
184cdf0e10cSrcweir
185cdf0e10cSrcweir /*************************************************************************
186cdf0e10cSrcweir |* SvTokenStream::~SvTokenStream()
187cdf0e10cSrcweir |*
188cdf0e10cSrcweir |* Beschreibung
189cdf0e10cSrcweir *************************************************************************/
~SvTokenStream()190cdf0e10cSrcweir SvTokenStream::~SvTokenStream()
191cdf0e10cSrcweir {
192cdf0e10cSrcweir delete pInStream;
193cdf0e10cSrcweir SvToken * pTok = aTokList.Last();
194cdf0e10cSrcweir while( pTok )
195cdf0e10cSrcweir {
196cdf0e10cSrcweir delete pTok;
197cdf0e10cSrcweir pTok = aTokList.Prev();
198cdf0e10cSrcweir }
199cdf0e10cSrcweir }
200cdf0e10cSrcweir
201cdf0e10cSrcweir /*************************************************************************
202cdf0e10cSrcweir |* SvTokenStream::FillTokenList()
203cdf0e10cSrcweir |*
204cdf0e10cSrcweir |* Beschreibung
205cdf0e10cSrcweir *************************************************************************/
FillTokenList()206cdf0e10cSrcweir void SvTokenStream::FillTokenList()
207cdf0e10cSrcweir {
208cdf0e10cSrcweir SvToken * pToken = new SvToken();
209cdf0e10cSrcweir aTokList.Insert( pToken, LIST_APPEND );
210cdf0e10cSrcweir do
211cdf0e10cSrcweir {
212cdf0e10cSrcweir if( !MakeToken( *pToken ) )
213cdf0e10cSrcweir {
214cdf0e10cSrcweir SvToken * p = aTokList.Prev();
215cdf0e10cSrcweir *pToken = SvToken();
216cdf0e10cSrcweir if( p )
217cdf0e10cSrcweir {
218cdf0e10cSrcweir pToken->SetLine( p->GetLine() );
219cdf0e10cSrcweir pToken->SetColumn( p->GetColumn() );
220cdf0e10cSrcweir }
221cdf0e10cSrcweir break;
222cdf0e10cSrcweir }
223cdf0e10cSrcweir else if( pToken->IsComment() )
224cdf0e10cSrcweir *pToken = SvToken();
225cdf0e10cSrcweir else if( pToken->IsEof() )
226cdf0e10cSrcweir break;
227cdf0e10cSrcweir else
228cdf0e10cSrcweir {
229cdf0e10cSrcweir pToken = new SvToken();
230cdf0e10cSrcweir aTokList.Insert( pToken, LIST_APPEND );
231cdf0e10cSrcweir }
232cdf0e10cSrcweir }
233cdf0e10cSrcweir while( !pToken->IsEof() );
234cdf0e10cSrcweir pCurToken = aTokList.First();
235cdf0e10cSrcweir }
236cdf0e10cSrcweir
237cdf0e10cSrcweir /*************************************************************************
238cdf0e10cSrcweir |* SvTokenStrem::SetCharSet()
239cdf0e10cSrcweir |*
240cdf0e10cSrcweir |* Beschreibung
241cdf0e10cSrcweir *************************************************************************/
SetCharSet(CharSet nSet)242cdf0e10cSrcweir void SvTokenStream::SetCharSet( CharSet nSet )
243cdf0e10cSrcweir {
244cdf0e10cSrcweir nCharSet = nSet;
245cdf0e10cSrcweir
246cdf0e10cSrcweir pCharTab = SvChar::GetTable( nSet, gsl_getSystemTextEncoding() );
247cdf0e10cSrcweir }
248cdf0e10cSrcweir
249cdf0e10cSrcweir /*************************************************************************
250cdf0e10cSrcweir |* SvTokeStream::GetNextChar()
251cdf0e10cSrcweir |*
252cdf0e10cSrcweir |* Beschreibung
253cdf0e10cSrcweir *************************************************************************/
GetNextChar()254cdf0e10cSrcweir int SvTokenStream::GetNextChar()
255cdf0e10cSrcweir {
256cdf0e10cSrcweir int nChar;
257cdf0e10cSrcweir if( (int)aBufStr.Len() < nBufPos )
258cdf0e10cSrcweir {
259cdf0e10cSrcweir if( rInStream.ReadLine( aBufStr ) )
260cdf0e10cSrcweir {
261cdf0e10cSrcweir nLine++;
262cdf0e10cSrcweir nColumn = 0;
263cdf0e10cSrcweir nBufPos = 0;
264cdf0e10cSrcweir }
265cdf0e10cSrcweir else
266cdf0e10cSrcweir {
267cdf0e10cSrcweir aBufStr.Erase();
268cdf0e10cSrcweir nColumn = 0;
269cdf0e10cSrcweir nBufPos = 0;
270cdf0e10cSrcweir return '\0';
271cdf0e10cSrcweir }
272cdf0e10cSrcweir }
273cdf0e10cSrcweir nChar = aBufStr.GetChar( (sal_uInt16)nBufPos++ );
274cdf0e10cSrcweir nColumn += nChar == '\t' ? nTabSize : 1;
275cdf0e10cSrcweir return nChar;
276cdf0e10cSrcweir }
277cdf0e10cSrcweir
278cdf0e10cSrcweir /*************************************************************************
279cdf0e10cSrcweir |* SvTokenStrem::GetNumber()
280cdf0e10cSrcweir |*
281cdf0e10cSrcweir |* Beschreibung
282cdf0e10cSrcweir *************************************************************************/
GetNumber()283cdf0e10cSrcweir sal_uLong SvTokenStream::GetNumber()
284cdf0e10cSrcweir {
285cdf0e10cSrcweir sal_uLong l = 0;
286cdf0e10cSrcweir short nLog = 10;
287cdf0e10cSrcweir
288cdf0e10cSrcweir if( '0' == c )
289cdf0e10cSrcweir {
290cdf0e10cSrcweir c = GetFastNextChar();
291cdf0e10cSrcweir if( 'x' == c )
292cdf0e10cSrcweir {
293cdf0e10cSrcweir nLog = 16;
294cdf0e10cSrcweir c = GetFastNextChar();
295cdf0e10cSrcweir }
296cdf0e10cSrcweir };
297cdf0e10cSrcweir
298cdf0e10cSrcweir if( nLog == 16 )
299cdf0e10cSrcweir {
300cdf0e10cSrcweir while( isxdigit( c ) )
301cdf0e10cSrcweir {
302cdf0e10cSrcweir if( isdigit( c ) )
303cdf0e10cSrcweir l = l * nLog + (c - '0');
304cdf0e10cSrcweir else
305cdf0e10cSrcweir l = l * nLog + (toupper( c ) - 'A' + 10 );
306cdf0e10cSrcweir c = GetFastNextChar();
307cdf0e10cSrcweir }
308cdf0e10cSrcweir }
309cdf0e10cSrcweir else
310cdf0e10cSrcweir {
311cdf0e10cSrcweir while( isdigit( c ) || 'x' == c )
312cdf0e10cSrcweir {
313cdf0e10cSrcweir l = l * nLog + (c - '0');
314cdf0e10cSrcweir c = GetFastNextChar();
315cdf0e10cSrcweir }
316cdf0e10cSrcweir }
317cdf0e10cSrcweir
318cdf0e10cSrcweir return( l );
319cdf0e10cSrcweir }
320cdf0e10cSrcweir
321cdf0e10cSrcweir /*************************************************************************
322cdf0e10cSrcweir |* SvTokenStream::MakeToken()
323cdf0e10cSrcweir |*
324cdf0e10cSrcweir |* Beschreibung
325cdf0e10cSrcweir *************************************************************************/
MakeToken(SvToken & rToken)326cdf0e10cSrcweir sal_Bool SvTokenStream::MakeToken( SvToken & rToken )
327cdf0e10cSrcweir {
328cdf0e10cSrcweir int c1;
329cdf0e10cSrcweir sal_uInt16 i;
330cdf0e10cSrcweir
331cdf0e10cSrcweir do
332cdf0e10cSrcweir {
333cdf0e10cSrcweir if( 0 == c )
334cdf0e10cSrcweir c = GetNextChar();
335cdf0e10cSrcweir // Leerzeichen ueberlesen
336cdf0e10cSrcweir while( isspace( c ) || 26 == c )
337cdf0e10cSrcweir {
338cdf0e10cSrcweir c = GetFastNextChar();
339cdf0e10cSrcweir nColumn += c == '\t' ? nTabSize : 1;
340cdf0e10cSrcweir }
341cdf0e10cSrcweir }
342cdf0e10cSrcweir while( 0 == c && !IsEof() && ( SVSTREAM_OK == rInStream.GetError() ) );
343cdf0e10cSrcweir
344cdf0e10cSrcweir sal_uLong nLastLine = nLine;
345cdf0e10cSrcweir sal_uLong nLastColumn = nColumn;
346cdf0e10cSrcweir // Kommentar
347cdf0e10cSrcweir if( '/' == c )
348cdf0e10cSrcweir {
349cdf0e10cSrcweir // Zeit Optimierung, keine Kommentare
350cdf0e10cSrcweir //ByteString aComment( (char)c );
351cdf0e10cSrcweir c1 = c;
352cdf0e10cSrcweir c = GetFastNextChar();
353cdf0e10cSrcweir if( '/' == c )
354cdf0e10cSrcweir {
355cdf0e10cSrcweir while( '\0' != c )
356cdf0e10cSrcweir {
357cdf0e10cSrcweir //aComment += (char)c;
358cdf0e10cSrcweir c = GetFastNextChar();
359cdf0e10cSrcweir }
360cdf0e10cSrcweir c = GetNextChar();
361cdf0e10cSrcweir rToken.nType = SVTOKEN_COMMENT;
362cdf0e10cSrcweir //rToken.aString = aComment;
363cdf0e10cSrcweir }
364cdf0e10cSrcweir else if( '*' == c )
365cdf0e10cSrcweir {
366cdf0e10cSrcweir //aComment += (char)c;
367cdf0e10cSrcweir c = GetFastNextChar();
368cdf0e10cSrcweir do
369cdf0e10cSrcweir {
370cdf0e10cSrcweir //aComment += (char)c;
371cdf0e10cSrcweir while( '*' != c )
372cdf0e10cSrcweir {
373cdf0e10cSrcweir if( '\0' == c )
374cdf0e10cSrcweir {
375cdf0e10cSrcweir c = GetNextChar();
376cdf0e10cSrcweir if( IsEof() )
377cdf0e10cSrcweir return sal_False;
378cdf0e10cSrcweir }
379cdf0e10cSrcweir else
380cdf0e10cSrcweir c = GetFastNextChar();
381cdf0e10cSrcweir //aComment += (char)c;
382cdf0e10cSrcweir }
383cdf0e10cSrcweir c = GetFastNextChar();
384cdf0e10cSrcweir }
385cdf0e10cSrcweir while( '/' != c && !IsEof() && ( SVSTREAM_OK == rInStream.GetError() ) );
386cdf0e10cSrcweir if( IsEof() || ( SVSTREAM_OK != rInStream.GetError() ) )
387cdf0e10cSrcweir return sal_False;
388cdf0e10cSrcweir //aComment += (char)c;
389cdf0e10cSrcweir c = GetNextChar();
390cdf0e10cSrcweir rToken.nType = SVTOKEN_COMMENT;
391cdf0e10cSrcweir //rToken.aString = aComment;
392cdf0e10cSrcweir CalcColumn();
393cdf0e10cSrcweir }
394cdf0e10cSrcweir else
395cdf0e10cSrcweir {
396cdf0e10cSrcweir rToken.nType = SVTOKEN_CHAR;
397cdf0e10cSrcweir rToken.cChar = (char)c1;
398cdf0e10cSrcweir }
399cdf0e10cSrcweir }
400cdf0e10cSrcweir else if( c == '"' )
401cdf0e10cSrcweir {
402cdf0e10cSrcweir ByteString aStr;
403cdf0e10cSrcweir i = 0;
404cdf0e10cSrcweir sal_Bool bDone = sal_False;
405cdf0e10cSrcweir while( !bDone && !IsEof() && c )
406cdf0e10cSrcweir {
407cdf0e10cSrcweir c = GetFastNextChar();
408cdf0e10cSrcweir if( '\0' == c )
409cdf0e10cSrcweir {
410cdf0e10cSrcweir // Strings auch "uber das Zeilenende hinauslesen
411cdf0e10cSrcweir aStr += '\n';
412cdf0e10cSrcweir c = GetNextChar();
413cdf0e10cSrcweir if( IsEof() )
414cdf0e10cSrcweir return sal_False;
415cdf0e10cSrcweir }
416cdf0e10cSrcweir if( c == '"' )
417cdf0e10cSrcweir {
418cdf0e10cSrcweir c = GetFastNextChar();
419cdf0e10cSrcweir if( c == '"' )
420cdf0e10cSrcweir {
421cdf0e10cSrcweir aStr += '"';
422cdf0e10cSrcweir aStr += '"';
423cdf0e10cSrcweir }
424cdf0e10cSrcweir else
425cdf0e10cSrcweir bDone = sal_True;
426cdf0e10cSrcweir }
427cdf0e10cSrcweir else if( c == '\\' )
428cdf0e10cSrcweir {
429cdf0e10cSrcweir aStr += '\\';
430cdf0e10cSrcweir c = GetFastNextChar();
431cdf0e10cSrcweir if( c )
432cdf0e10cSrcweir aStr += (char)c;
433cdf0e10cSrcweir }
434cdf0e10cSrcweir else
435cdf0e10cSrcweir aStr += (char)c;
436cdf0e10cSrcweir }
437cdf0e10cSrcweir if( IsEof() || ( SVSTREAM_OK != rInStream.GetError() ) )
438cdf0e10cSrcweir return sal_False;
439cdf0e10cSrcweir char * pStr = (char *)aStr.GetBuffer();
440cdf0e10cSrcweir while( *pStr )
441cdf0e10cSrcweir {
442cdf0e10cSrcweir *pStr = pCharTab[ (unsigned char)*pStr ];
443cdf0e10cSrcweir pStr++;
444cdf0e10cSrcweir };
445cdf0e10cSrcweir rToken.nType = SVTOKEN_STRING;
446cdf0e10cSrcweir rToken.aString = aStr;
447cdf0e10cSrcweir }
448cdf0e10cSrcweir else if( isdigit( c ) )
449cdf0e10cSrcweir {
450cdf0e10cSrcweir rToken.nType = SVTOKEN_INTEGER;
451cdf0e10cSrcweir rToken.nLong = GetNumber();
452cdf0e10cSrcweir
453cdf0e10cSrcweir }
454cdf0e10cSrcweir else if( isalpha (c) || (c == '_') )
455cdf0e10cSrcweir {
456cdf0e10cSrcweir ByteString aStr;
457cdf0e10cSrcweir
458cdf0e10cSrcweir while( isalnum( c ) || c == '_' )
459cdf0e10cSrcweir {
460cdf0e10cSrcweir aStr += (char)c;
461cdf0e10cSrcweir c = GetFastNextChar();
462cdf0e10cSrcweir }
463cdf0e10cSrcweir if( aStr.EqualsIgnoreCaseAscii( aStrTrue ) )
464cdf0e10cSrcweir {
465cdf0e10cSrcweir rToken.nType = SVTOKEN_BOOL;
466cdf0e10cSrcweir rToken.bBool = sal_True;
467cdf0e10cSrcweir }
468cdf0e10cSrcweir else if( aStr.EqualsIgnoreCaseAscii( aStrFalse ) )
469cdf0e10cSrcweir {
470cdf0e10cSrcweir rToken.nType = SVTOKEN_BOOL;
471cdf0e10cSrcweir rToken.bBool = sal_False;
472cdf0e10cSrcweir }
473cdf0e10cSrcweir else
474cdf0e10cSrcweir {
475cdf0e10cSrcweir sal_uInt32 nHashId;
476cdf0e10cSrcweir if( IDLAPP->pHashTable->Test( aStr, &nHashId ) )
477cdf0e10cSrcweir rToken.SetHash( IDLAPP->pHashTable->Get( nHashId ) );
478cdf0e10cSrcweir else
479cdf0e10cSrcweir {
480cdf0e10cSrcweir rToken.nType = SVTOKEN_IDENTIFIER;
481cdf0e10cSrcweir rToken.aString = aStr;
482cdf0e10cSrcweir }
483cdf0e10cSrcweir }
484cdf0e10cSrcweir }
485cdf0e10cSrcweir else if( IsEof() )
486cdf0e10cSrcweir {
487cdf0e10cSrcweir rToken.nType = SVTOKEN_EOF;
488cdf0e10cSrcweir }
489cdf0e10cSrcweir else
490cdf0e10cSrcweir {
491cdf0e10cSrcweir rToken.nType = SVTOKEN_CHAR;
492cdf0e10cSrcweir rToken.cChar = (char)c;
493cdf0e10cSrcweir c = GetFastNextChar();
494cdf0e10cSrcweir }
495cdf0e10cSrcweir rToken.SetLine( nLastLine );
496cdf0e10cSrcweir rToken.SetColumn( nLastColumn );
497cdf0e10cSrcweir return rInStream.GetError() == SVSTREAM_OK;
498cdf0e10cSrcweir }
499cdf0e10cSrcweir
500