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