xref: /aoo41x/main/tools/source/communi/parser.cxx (revision 89b56da7)
1*89b56da7SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*89b56da7SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*89b56da7SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*89b56da7SAndrew Rist  * distributed with this work for additional information
6*89b56da7SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*89b56da7SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*89b56da7SAndrew Rist  * "License"); you may not use this file except in compliance
9*89b56da7SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*89b56da7SAndrew Rist  *
11*89b56da7SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*89b56da7SAndrew Rist  *
13*89b56da7SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*89b56da7SAndrew Rist  * software distributed under the License is distributed on an
15*89b56da7SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*89b56da7SAndrew Rist  * KIND, either express or implied.  See the License for the
17*89b56da7SAndrew Rist  * specific language governing permissions and limitations
18*89b56da7SAndrew Rist  * under the License.
19*89b56da7SAndrew Rist  *
20*89b56da7SAndrew Rist  *************************************************************/
21*89b56da7SAndrew Rist 
22*89b56da7SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_tools.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include <stdio.h>
28cdf0e10cSrcweir #include <tools/stream.hxx>
29cdf0e10cSrcweir #include <tools/fsys.hxx>
30cdf0e10cSrcweir 
31cdf0e10cSrcweir #include "tools/iparser.hxx"
32cdf0e10cSrcweir #include "tools/geninfo.hxx"
33cdf0e10cSrcweir 
34cdf0e10cSrcweir 
35cdf0e10cSrcweir 
36cdf0e10cSrcweir //
37cdf0e10cSrcweir // class InformationParser
38cdf0e10cSrcweir //
39cdf0e10cSrcweir 
40cdf0e10cSrcweir #define cKeyLevelChar '\t'
41cdf0e10cSrcweir 
42cdf0e10cSrcweir /*****************************************************************************/
InformationParser(sal_Bool bReplace)43cdf0e10cSrcweir InformationParser::InformationParser( sal_Bool bReplace )
44cdf0e10cSrcweir /*****************************************************************************/
45cdf0e10cSrcweir 				: bRecover( sal_False ),
46cdf0e10cSrcweir 				sOldLine( "" ),
47cdf0e10cSrcweir 				bReplaceVariables( bReplace ),
48cdf0e10cSrcweir 				nLevel( 0 ),
49cdf0e10cSrcweir 				sUPD( "" ),
50cdf0e10cSrcweir 				sVersion( "" ),
51cdf0e10cSrcweir 				pActStream( NULL ),
52cdf0e10cSrcweir 				nErrorCode( 0 ),
53cdf0e10cSrcweir 				nErrorLine( 0 ),
54cdf0e10cSrcweir 				sErrorText( "" ),
55cdf0e10cSrcweir 				nActLine( 0 )
56cdf0e10cSrcweir {
57cdf0e10cSrcweir }
58cdf0e10cSrcweir 
59cdf0e10cSrcweir /*****************************************************************************/
~InformationParser()60cdf0e10cSrcweir InformationParser::~InformationParser()
61cdf0e10cSrcweir /*****************************************************************************/
62cdf0e10cSrcweir {
63cdf0e10cSrcweir }
64cdf0e10cSrcweir 
65cdf0e10cSrcweir /*****************************************************************************/
ReadLine()66cdf0e10cSrcweir ByteString &InformationParser::ReadLine()
67cdf0e10cSrcweir /*****************************************************************************/
68cdf0e10cSrcweir {
69cdf0e10cSrcweir 	ByteString sLine;
70cdf0e10cSrcweir 
71cdf0e10cSrcweir 	if ( bRecover ) {
72cdf0e10cSrcweir 		bRecover = sal_False;
73cdf0e10cSrcweir 	}
74cdf0e10cSrcweir 	else {
75cdf0e10cSrcweir 		 if ( !pActStream->IsEof()) {
76cdf0e10cSrcweir 			pActStream->ReadLine( sLine );
77cdf0e10cSrcweir             xub_StrLen nStart = 0;
78cdf0e10cSrcweir             xub_StrLen nEnd = sLine.Len();
79cdf0e10cSrcweir             sal_Bool bCopy = sal_False;
80cdf0e10cSrcweir             while ( nStart < nEnd && ( sLine.GetChar( nStart ) == ' ' || sLine.GetChar( nStart ) == 0x09 ) )
81cdf0e10cSrcweir             {
82cdf0e10cSrcweir                 nStart++;
83cdf0e10cSrcweir                 bCopy = sal_True;
84cdf0e10cSrcweir             }
85cdf0e10cSrcweir 
86cdf0e10cSrcweir             while ( nStart < nEnd && ( sLine.GetChar( nEnd-1 ) == ' ' || sLine.GetChar( nEnd-1 ) == 0x09 ) )
87cdf0e10cSrcweir             {
88cdf0e10cSrcweir                 nEnd--;
89cdf0e10cSrcweir                 bCopy = sal_True;
90cdf0e10cSrcweir             }
91cdf0e10cSrcweir 
92cdf0e10cSrcweir             if ( bCopy )
93cdf0e10cSrcweir                 sLine = sLine.Copy( nStart, nEnd - nStart );
94cdf0e10cSrcweir 
95cdf0e10cSrcweir 			if (( sLine.GetChar( 0 ) == '#' ) || ( !sLine.Len())) {
96cdf0e10cSrcweir 				if ( sCurrentComment.Len())
97cdf0e10cSrcweir 					sCurrentComment += "\n";
98cdf0e10cSrcweir 				sCurrentComment += sLine;
99cdf0e10cSrcweir 				return ReadLine();
100cdf0e10cSrcweir 			}
101cdf0e10cSrcweir 			else {
102cdf0e10cSrcweir 				if ( bReplaceVariables ) {
103cdf0e10cSrcweir 					sLine.SearchAndReplaceAll( "%UPD", sUPD );
104cdf0e10cSrcweir 					sLine.SearchAndReplaceAll( "%VERSION", sVersion );
105cdf0e10cSrcweir 				}
106cdf0e10cSrcweir 			}
107cdf0e10cSrcweir 		}
108cdf0e10cSrcweir         else {
109cdf0e10cSrcweir 			if ( nLevel ) {
110cdf0e10cSrcweir             	sLine = "}";
111cdf0e10cSrcweir 	            fprintf( stdout, "Reached EOF parsing %s. Suplying extra '}'\n",ByteString( sStreamName, gsl_getSystemTextEncoding()).GetBuffer() );
112cdf0e10cSrcweir 	//	        nErrorCode = IP_UNEXPECTED_EOF;
113cdf0e10cSrcweir 	//	        nErrorLine = nActLine;
114cdf0e10cSrcweir 			}
115cdf0e10cSrcweir 			else
116cdf0e10cSrcweir 				sLine = "";
117cdf0e10cSrcweir         }
118cdf0e10cSrcweir 
119cdf0e10cSrcweir 		sOldLine = sLine;
120cdf0e10cSrcweir 		nActLine++;
121cdf0e10cSrcweir 	}
122cdf0e10cSrcweir 
123cdf0e10cSrcweir 	return sOldLine;
124cdf0e10cSrcweir }
125cdf0e10cSrcweir 
126cdf0e10cSrcweir /*****************************************************************************/
ReadKey(GenericInformationList * pExistingList)127cdf0e10cSrcweir GenericInformation *InformationParser::ReadKey(
128cdf0e10cSrcweir 									GenericInformationList *pExistingList )
129cdf0e10cSrcweir /*****************************************************************************/
130cdf0e10cSrcweir {
131cdf0e10cSrcweir 	// this method has no error handling yet, but it works very fast.
132cdf0e10cSrcweir 	// it is used to create whole informations and sub informations in
133cdf0e10cSrcweir 	// a simple data format in memory, readed in a configuration file with
134cdf0e10cSrcweir 	// following format:
135cdf0e10cSrcweir 
136cdf0e10cSrcweir 	/*
137cdf0e10cSrcweir 
138cdf0e10cSrcweir 	key [value]
139cdf0e10cSrcweir 	{
140cdf0e10cSrcweir 		key [value]
141cdf0e10cSrcweir 		key [value]
142cdf0e10cSrcweir 		{
143cdf0e10cSrcweir 			key [value]
144cdf0e10cSrcweir 			...
145cdf0e10cSrcweir 			...
146cdf0e10cSrcweir 		}
147cdf0e10cSrcweir 	}
148cdf0e10cSrcweir 	key [value]
149cdf0e10cSrcweir 	...
150cdf0e10cSrcweir 	...
151cdf0e10cSrcweir 
152cdf0e10cSrcweir 	*/
153cdf0e10cSrcweir 
154cdf0e10cSrcweir 	GenericInformation *pInfo = NULL;
155cdf0e10cSrcweir 
156cdf0e10cSrcweir 	ByteString sLine( ReadLine());
157cdf0e10cSrcweir 	ByteString sKey;
158cdf0e10cSrcweir 	ByteString sValue;
159cdf0e10cSrcweir 	ByteString sComment( sCurrentComment );
160cdf0e10cSrcweir 	sCurrentComment = "";
161cdf0e10cSrcweir 
162cdf0e10cSrcweir 	// key separated from value by tab?
163cdf0e10cSrcweir 	sal_uInt16 nWSPos = sLine.Search( ' ' );
164cdf0e10cSrcweir 	if ( sLine.Search( '\t' ) < nWSPos ) {
165cdf0e10cSrcweir 		nWSPos = sLine.Search( '\t' );
166cdf0e10cSrcweir 		sLine.SearchAndReplace( "\t", " " );
167cdf0e10cSrcweir 	}
168cdf0e10cSrcweir 
169cdf0e10cSrcweir 	if ( sLine.GetTokenCount( ' ' ) > 1 ) {
170cdf0e10cSrcweir 		sKey = sLine.GetToken( 0, ' ' );
171cdf0e10cSrcweir 		sValue = sLine.Copy( sKey.Len() + 1 );
172cdf0e10cSrcweir 		while (( sValue.Search( ' ' ) == 0 ) || ( sValue.Search( '\t' ) == 0 )) {
173cdf0e10cSrcweir 			sValue.Erase( 0, 1 );
174cdf0e10cSrcweir 		}
175cdf0e10cSrcweir 	}
176cdf0e10cSrcweir 	else
177cdf0e10cSrcweir 		sKey=sLine;
178cdf0e10cSrcweir 
179cdf0e10cSrcweir 	if ( bReplaceVariables && !nLevel ) {
180cdf0e10cSrcweir 		sUPD = sKey.Copy( sKey.Len() - 3 );
181cdf0e10cSrcweir 		sVersion = sKey;
182cdf0e10cSrcweir 	}
183cdf0e10cSrcweir 
184cdf0e10cSrcweir 	if ( ReadLine() == "{" ) {
185cdf0e10cSrcweir 		nLevel++;
186cdf0e10cSrcweir 		GenericInformationList *pSubList = new GenericInformationList();
187cdf0e10cSrcweir 		while ( ReadLine() != "}" ) {
188cdf0e10cSrcweir 			Recover();
189cdf0e10cSrcweir 			ReadKey( pSubList );
190cdf0e10cSrcweir 		}
191cdf0e10cSrcweir 		nLevel--;
192cdf0e10cSrcweir 		pInfo = new GenericInformation( sKey, sValue,
193cdf0e10cSrcweir 						pExistingList, pSubList );
194cdf0e10cSrcweir 		pInfo->SetComment( sComment );
195cdf0e10cSrcweir 	}
196cdf0e10cSrcweir 	else {
197cdf0e10cSrcweir 		Recover();
198cdf0e10cSrcweir         if ( !sKey.Equals( "}" ) && !sKey.Equals( "{" ) )
199cdf0e10cSrcweir         {
200cdf0e10cSrcweir 		    pInfo = new GenericInformation( sKey, sValue, pExistingList );
201cdf0e10cSrcweir 		    pInfo->SetComment( sComment );
202cdf0e10cSrcweir         }
203cdf0e10cSrcweir 	}
204cdf0e10cSrcweir 
205cdf0e10cSrcweir 	return pInfo;
206cdf0e10cSrcweir }
207cdf0e10cSrcweir 
208cdf0e10cSrcweir /*****************************************************************************/
Recover()209cdf0e10cSrcweir void InformationParser::Recover()
210cdf0e10cSrcweir /*****************************************************************************/
211cdf0e10cSrcweir {
212cdf0e10cSrcweir 	bRecover = sal_True;
213cdf0e10cSrcweir }
214cdf0e10cSrcweir 
215cdf0e10cSrcweir /*****************************************************************************/
Save(SvStream & rOutStream,const GenericInformationList * pSaveList,sal_uInt16 level,sal_Bool bStripped)216cdf0e10cSrcweir sal_Bool InformationParser::Save( SvStream &rOutStream,
217cdf0e10cSrcweir 			      const GenericInformationList *pSaveList,
218cdf0e10cSrcweir 			      sal_uInt16 level, sal_Bool bStripped )
219cdf0e10cSrcweir /*****************************************************************************/
220cdf0e10cSrcweir {
221cdf0e10cSrcweir 	sal_uInt16 i;
222cdf0e10cSrcweir 	sal_uIntPtr nInfoListCount;
223cdf0e10cSrcweir 	ByteString sTmpStr;
224cdf0e10cSrcweir 	GenericInformation *pGenericInfo;
225cdf0e10cSrcweir 	GenericInformationList *pGenericInfoList;
226cdf0e10cSrcweir 
227cdf0e10cSrcweir  	static ByteString aKeyLevel;
228cdf0e10cSrcweir     aKeyLevel.Expand( level, cKeyLevelChar );
229cdf0e10cSrcweir 
230cdf0e10cSrcweir 	for ( nInfoListCount = 0; nInfoListCount < pSaveList->Count(); nInfoListCount++) {
231cdf0e10cSrcweir 	    // Key-Value Paare schreiben
232cdf0e10cSrcweir     	pGenericInfo = pSaveList->GetObject( nInfoListCount );
233cdf0e10cSrcweir     	sTmpStr = "";
234cdf0e10cSrcweir         if ( !bStripped && level )
235cdf0e10cSrcweir         	sTmpStr.Append( aKeyLevel.GetBuffer(), level );
236cdf0e10cSrcweir 
237cdf0e10cSrcweir         if ( !bStripped )
238cdf0e10cSrcweir 		    for ( i = 0; i < pGenericInfo->GetComment().GetTokenCount( '\n' ); i++ ) {
239cdf0e10cSrcweir 			    sTmpStr += pGenericInfo->GetComment().GetToken( i, '\n' );
240cdf0e10cSrcweir 			    sTmpStr += "\n";
241cdf0e10cSrcweir                 if ( level )
242cdf0e10cSrcweir         	        sTmpStr.Append( aKeyLevel.GetBuffer(), level );
243cdf0e10cSrcweir 		    }
244cdf0e10cSrcweir 
245cdf0e10cSrcweir     	sTmpStr += pGenericInfo->GetBuffer();
246cdf0e10cSrcweir     	sTmpStr += ' ';
247cdf0e10cSrcweir     	sTmpStr += pGenericInfo->GetValue();
248cdf0e10cSrcweir     	if ( !rOutStream.WriteLine( sTmpStr ) )
249cdf0e10cSrcweir       		return sal_False;
250cdf0e10cSrcweir 
251cdf0e10cSrcweir     	// wenn vorhanden, bearbeite recursive die Sublisten
252cdf0e10cSrcweir     	if (( pGenericInfoList = pGenericInfo->GetSubList() ) != NULL ) {
253cdf0e10cSrcweir       		// oeffnende Klammer
254cdf0e10cSrcweir       		sTmpStr = "";
255cdf0e10cSrcweir             if ( !bStripped && level )
256cdf0e10cSrcweir         	    sTmpStr.Append( aKeyLevel.GetBuffer(), level );
257cdf0e10cSrcweir       		sTmpStr += '{';
258cdf0e10cSrcweir       		if ( !rOutStream.WriteLine( sTmpStr ) )
259cdf0e10cSrcweir 				return sal_False;
260cdf0e10cSrcweir       		// recursiv die sublist abarbeiten
261cdf0e10cSrcweir       		if ( !Save( rOutStream, pGenericInfoList, level+1, bStripped ) )
262cdf0e10cSrcweir     			return sal_False;
263cdf0e10cSrcweir       			// schliessende Klammer
264cdf0e10cSrcweir       		sTmpStr = "";
265cdf0e10cSrcweir             if ( !bStripped && level )
266cdf0e10cSrcweir         	    sTmpStr.Append( aKeyLevel.GetBuffer(), level );
267cdf0e10cSrcweir       		sTmpStr += '}';
268cdf0e10cSrcweir       		if ( !rOutStream.WriteLine( sTmpStr ) )
269cdf0e10cSrcweir 				return sal_False;
270cdf0e10cSrcweir     	}
271cdf0e10cSrcweir   	}
272cdf0e10cSrcweir   	return sal_True;
273cdf0e10cSrcweir }
274cdf0e10cSrcweir 
275cdf0e10cSrcweir /*****************************************************************************/
Execute(SvStream & rSourceStream,GenericInformationList * pExistingList)276cdf0e10cSrcweir GenericInformationList *InformationParser::Execute(
277cdf0e10cSrcweir 								SvStream &rSourceStream,
278cdf0e10cSrcweir 								GenericInformationList *pExistingList )
279cdf0e10cSrcweir /*****************************************************************************/
280cdf0e10cSrcweir {
281cdf0e10cSrcweir 	GenericInformationList *pList;
282cdf0e10cSrcweir 	if ( pExistingList )
283cdf0e10cSrcweir 		pList = pExistingList;
284cdf0e10cSrcweir 	else
285cdf0e10cSrcweir 		pList = new GenericInformationList();
286cdf0e10cSrcweir 
287cdf0e10cSrcweir 	pActStream = &rSourceStream;
288cdf0e10cSrcweir 
289cdf0e10cSrcweir 	// read all infos out of current file
290cdf0e10cSrcweir 	while( !rSourceStream.IsEof()) {
291cdf0e10cSrcweir 		nLevel = 0;
292cdf0e10cSrcweir 		ReadKey( pList );
293cdf0e10cSrcweir 	}
294cdf0e10cSrcweir 
295cdf0e10cSrcweir 	return pList;
296cdf0e10cSrcweir }
297cdf0e10cSrcweir 
298cdf0e10cSrcweir /*****************************************************************************/
Execute(SvMemoryStream & rSourceStream,GenericInformationList * pExistingList)299cdf0e10cSrcweir GenericInformationList *InformationParser::Execute( SvMemoryStream &rSourceStream,
300cdf0e10cSrcweir 						    GenericInformationList *pExistingList )
301cdf0e10cSrcweir /*****************************************************************************/
302cdf0e10cSrcweir {
303cdf0e10cSrcweir   	sStreamName = UniString( "Memory", gsl_getSystemTextEncoding());
304cdf0e10cSrcweir   	return Execute( (SvStream &)rSourceStream, pExistingList );
305cdf0e10cSrcweir }
306cdf0e10cSrcweir 
307cdf0e10cSrcweir /*****************************************************************************/
Execute(SvFileStream & rSourceStream,GenericInformationList * pExistingList)308cdf0e10cSrcweir GenericInformationList *InformationParser::Execute(
309cdf0e10cSrcweir 								SvFileStream &rSourceStream,
310cdf0e10cSrcweir 								GenericInformationList *pExistingList )
311cdf0e10cSrcweir /*****************************************************************************/
312cdf0e10cSrcweir {
313cdf0e10cSrcweir 	if ( !rSourceStream.IsOpen())
314cdf0e10cSrcweir 		return NULL;
315cdf0e10cSrcweir 	sStreamName = rSourceStream.GetFileName();
316cdf0e10cSrcweir 	return Execute( (SvStream &)rSourceStream, pExistingList );
317cdf0e10cSrcweir }
318cdf0e10cSrcweir 
319cdf0e10cSrcweir /*****************************************************************************/
Execute(UniString & rSourceFile,GenericInformationList * pExistingList)320cdf0e10cSrcweir GenericInformationList *InformationParser::Execute( UniString &rSourceFile,
321cdf0e10cSrcweir 								GenericInformationList *pExistingList )
322cdf0e10cSrcweir /*****************************************************************************/
323cdf0e10cSrcweir {
324cdf0e10cSrcweir 	DirEntry aDirEntry( rSourceFile );
325cdf0e10cSrcweir 	if ( !aDirEntry.Exists())
326cdf0e10cSrcweir 		return NULL;
327cdf0e10cSrcweir 
328cdf0e10cSrcweir 	GenericInformationList *pList;
329cdf0e10cSrcweir 	if ( pExistingList )
330cdf0e10cSrcweir 		pList = pExistingList;
331cdf0e10cSrcweir 	else
332cdf0e10cSrcweir 		pList = new GenericInformationList();
333cdf0e10cSrcweir 
334cdf0e10cSrcweir 	// reset status
335cdf0e10cSrcweir 	nErrorCode = 0;
336cdf0e10cSrcweir 	nErrorLine = 0;
337cdf0e10cSrcweir 	nActLine = 0;
338cdf0e10cSrcweir 
339cdf0e10cSrcweir 	SvFileStream aActStream;
340cdf0e10cSrcweir 	aActStream.Open( rSourceFile, STREAM_READ );
341cdf0e10cSrcweir 	if( aActStream.GetError())
342cdf0e10cSrcweir 		return NULL;
343cdf0e10cSrcweir 
344cdf0e10cSrcweir 	pActStream = &aActStream;
345cdf0e10cSrcweir 	if ( !Execute( aActStream, pList )) {
346cdf0e10cSrcweir 		delete pList;
347cdf0e10cSrcweir 		pList = NULL;
348cdf0e10cSrcweir 	}
349cdf0e10cSrcweir 
350cdf0e10cSrcweir 	// close the stream
351cdf0e10cSrcweir 	aActStream.Close();
352cdf0e10cSrcweir  	pActStream = NULL;
353cdf0e10cSrcweir 
354cdf0e10cSrcweir 	if ( !nErrorCode )
355cdf0e10cSrcweir 		return pList;
356cdf0e10cSrcweir 
357cdf0e10cSrcweir 	return NULL;
358cdf0e10cSrcweir }
359cdf0e10cSrcweir 
360cdf0e10cSrcweir /*****************************************************************************/
Execute(Dir & rDir,GenericInformationList * pExistingList)361cdf0e10cSrcweir GenericInformationList *InformationParser::Execute( Dir &rDir,
362cdf0e10cSrcweir 								GenericInformationList *pExistingList )
363cdf0e10cSrcweir /*****************************************************************************/
364cdf0e10cSrcweir {
365cdf0e10cSrcweir 	GenericInformationList *pList;
366cdf0e10cSrcweir 
367cdf0e10cSrcweir 	if ( pExistingList )
368cdf0e10cSrcweir 		pList = pExistingList;
369cdf0e10cSrcweir 	else
370cdf0e10cSrcweir 		pList = new GenericInformationList();
371cdf0e10cSrcweir 
372cdf0e10cSrcweir 	for ( sal_uInt16 i = 0; i < rDir.Count(); i++ ) {
373cdf0e10cSrcweir 
374cdf0e10cSrcweir 		// execute this dir
375cdf0e10cSrcweir 		UniString sNextFile( rDir[i].GetFull());
376cdf0e10cSrcweir 		GenericInformationList *pSubList = Execute( sNextFile );
377cdf0e10cSrcweir 
378cdf0e10cSrcweir 		if ( !pSubList ) {
379cdf0e10cSrcweir 			// any errors ?
380cdf0e10cSrcweir 			delete pList;
381cdf0e10cSrcweir 			return NULL;
382cdf0e10cSrcweir 		}
383cdf0e10cSrcweir 
384cdf0e10cSrcweir 		// create new info and insert it into list
385cdf0e10cSrcweir 		ByteString sFileKey( rDir[i].GetName(), RTL_TEXTENCODING_UTF8 );
386cdf0e10cSrcweir 		new GenericInformation(
387cdf0e10cSrcweir 											sFileKey,
388cdf0e10cSrcweir 											ByteString( "" ),
389cdf0e10cSrcweir 											pList, pSubList );
390cdf0e10cSrcweir 	}
391cdf0e10cSrcweir 
392cdf0e10cSrcweir 	return pList;
393cdf0e10cSrcweir }
394cdf0e10cSrcweir 
395cdf0e10cSrcweir /*****************************************************************************/
Save(SvFileStream & rSourceStream,const GenericInformationList * pSaveList)396cdf0e10cSrcweir sal_Bool InformationParser::Save( SvFileStream &rSourceStream,
397cdf0e10cSrcweir 			      const GenericInformationList *pSaveList )
398cdf0e10cSrcweir /*****************************************************************************/
399cdf0e10cSrcweir {
400cdf0e10cSrcweir 	if ( !rSourceStream.IsOpen() || !Save( (SvStream &)rSourceStream, pSaveList, 0, sal_False ))
401cdf0e10cSrcweir     {
402cdf0e10cSrcweir         printf( "ERROR saving file \"%s\"\n",ByteString( rSourceStream.GetFileName(), gsl_getSystemTextEncoding()).GetBuffer() );
403cdf0e10cSrcweir 		return sal_False;
404cdf0e10cSrcweir     }
405cdf0e10cSrcweir 
406cdf0e10cSrcweir 	return sal_True;
407cdf0e10cSrcweir }
408cdf0e10cSrcweir 
409cdf0e10cSrcweir /*****************************************************************************/
Save(SvMemoryStream & rSourceStream,const GenericInformationList * pSaveList)410cdf0e10cSrcweir sal_Bool InformationParser::Save( SvMemoryStream &rSourceStream,
411cdf0e10cSrcweir 			      const GenericInformationList *pSaveList )
412cdf0e10cSrcweir /*****************************************************************************/
413cdf0e10cSrcweir {
414cdf0e10cSrcweir     Time a;
415cdf0e10cSrcweir     sal_Bool bRet = Save( (SvStream &)rSourceStream, pSaveList, 0, sal_True );
416cdf0e10cSrcweir     Time b;
417cdf0e10cSrcweir     b = b - a;
418cdf0e10cSrcweir     return bRet;
419cdf0e10cSrcweir }
420cdf0e10cSrcweir 
421cdf0e10cSrcweir /*****************************************************************************/
Save(const UniString & rSourceFile,const GenericInformationList * pSaveList)422cdf0e10cSrcweir sal_Bool InformationParser::Save( const UniString &rSourceFile,
423cdf0e10cSrcweir 			      const GenericInformationList *pSaveList )
424cdf0e10cSrcweir /*****************************************************************************/
425cdf0e10cSrcweir {
426cdf0e10cSrcweir   SvFileStream *pOutFile = new SvFileStream( rSourceFile, STREAM_STD_WRITE | STREAM_TRUNC );
427cdf0e10cSrcweir 
428cdf0e10cSrcweir   if ( !Save( *pOutFile, pSaveList )) {
429cdf0e10cSrcweir     delete pOutFile;
430cdf0e10cSrcweir     return sal_False;
431cdf0e10cSrcweir   }
432cdf0e10cSrcweir   delete pOutFile;
433cdf0e10cSrcweir   return sal_True;
434cdf0e10cSrcweir }
435cdf0e10cSrcweir 
436cdf0e10cSrcweir /*****************************************************************************/
GetErrorCode()437cdf0e10cSrcweir sal_uInt16 InformationParser::GetErrorCode()
438cdf0e10cSrcweir /*****************************************************************************/
439cdf0e10cSrcweir {
440cdf0e10cSrcweir 	return nErrorCode;
441cdf0e10cSrcweir }
442cdf0e10cSrcweir 
443cdf0e10cSrcweir /*****************************************************************************/
GetErrorText()444cdf0e10cSrcweir ByteString &InformationParser::GetErrorText()
445cdf0e10cSrcweir /*****************************************************************************/
446cdf0e10cSrcweir {
447cdf0e10cSrcweir   //	sErrorText = pActStream->GetFileName();
448cdf0e10cSrcweir     sErrorText = ByteString( sStreamName, gsl_getSystemTextEncoding());
449cdf0e10cSrcweir 	sErrorText += ByteString( " (" );
450cdf0e10cSrcweir 	sErrorText += ByteString::CreateFromInt64(nErrorLine);
451cdf0e10cSrcweir 	sErrorText += ByteString( "): " );
452cdf0e10cSrcweir 
453cdf0e10cSrcweir 	switch ( nErrorCode ) {
454cdf0e10cSrcweir 	case IP_NO_ERROR:
455cdf0e10cSrcweir 		sErrorText += ByteString( "Keine Fehler aufgetereten" );
456cdf0e10cSrcweir 		break;
457cdf0e10cSrcweir 	case IP_UNEXPECTED_EOF:
458cdf0e10cSrcweir 		sErrorText += ByteString( "Ung�ltiges Dateiende!" );
459cdf0e10cSrcweir 		break;
460cdf0e10cSrcweir 	}
461cdf0e10cSrcweir 
462cdf0e10cSrcweir 	return sErrorText;
463cdf0e10cSrcweir }
464cdf0e10cSrcweir 
465cdf0e10cSrcweir 
466