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