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_idl.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #include <ctype.h> 32*cdf0e10cSrcweir #include <stdio.h> 33*cdf0e10cSrcweir #include <stdlib.h> 34*cdf0e10cSrcweir #include <tools/fsys.hxx> 35*cdf0e10cSrcweir #include <tools/debug.hxx> 36*cdf0e10cSrcweir #include <database.hxx> 37*cdf0e10cSrcweir #include <globals.hxx> 38*cdf0e10cSrcweir 39*cdf0e10cSrcweir /****************** SvIdlDataBase ****************************************/ 40*cdf0e10cSrcweir /************************************************************************* 41*cdf0e10cSrcweir |* SvIdlDataBase::SvIdlDataBase() 42*cdf0e10cSrcweir |* 43*cdf0e10cSrcweir |* Beschreibung 44*cdf0e10cSrcweir *************************************************************************/ 45*cdf0e10cSrcweir /* 46*cdf0e10cSrcweir void PrimeNumber(){ 47*cdf0e10cSrcweir sal_uInt16 i, n; 48*cdf0e10cSrcweir for( i = 5001; i < 5500; i += 2 ){ 49*cdf0e10cSrcweir for( n = 2; n < i && ((i % n) != 0); n++ ); 50*cdf0e10cSrcweir if( n == i ){ 51*cdf0e10cSrcweir printf( "\nPrimzahl: %d\n", i ); 52*cdf0e10cSrcweir return; 53*cdf0e10cSrcweir } 54*cdf0e10cSrcweir } 55*cdf0e10cSrcweir } 56*cdf0e10cSrcweir */ 57*cdf0e10cSrcweir 58*cdf0e10cSrcweir SvIdlDataBase::SvIdlDataBase( const SvCommand& rCmd ) 59*cdf0e10cSrcweir : bExport( sal_False ) 60*cdf0e10cSrcweir , nUniqueId( 0 ) 61*cdf0e10cSrcweir , nVerbosity( rCmd.nVerbosity ) 62*cdf0e10cSrcweir , bIsModified( sal_False ) 63*cdf0e10cSrcweir , aPersStream( *IDLAPP->pClassMgr, NULL ) 64*cdf0e10cSrcweir , pIdTable( NULL ) 65*cdf0e10cSrcweir { 66*cdf0e10cSrcweir //PrimeNumber(); 67*cdf0e10cSrcweir } 68*cdf0e10cSrcweir 69*cdf0e10cSrcweir /************************************************************************* 70*cdf0e10cSrcweir |* SvIdlDataBase::~SvIdlDataBase() 71*cdf0e10cSrcweir |* 72*cdf0e10cSrcweir |* Beschreibung 73*cdf0e10cSrcweir *************************************************************************/ 74*cdf0e10cSrcweir SvIdlDataBase::~SvIdlDataBase() 75*cdf0e10cSrcweir { 76*cdf0e10cSrcweir String * pStr = aIdFileList.First(); 77*cdf0e10cSrcweir while( pStr ) 78*cdf0e10cSrcweir { 79*cdf0e10cSrcweir delete pStr; 80*cdf0e10cSrcweir pStr = aIdFileList.Next(); 81*cdf0e10cSrcweir } 82*cdf0e10cSrcweir delete pIdTable; 83*cdf0e10cSrcweir } 84*cdf0e10cSrcweir 85*cdf0e10cSrcweir /************************************************************************* 86*cdf0e10cSrcweir |* SvIdlDataBase::GetTypeList() 87*cdf0e10cSrcweir |* 88*cdf0e10cSrcweir |* Beschreibung 89*cdf0e10cSrcweir *************************************************************************/ 90*cdf0e10cSrcweir #define ADD_TYPE( Name, OdlName, ParserChar, CName, BasName, BasPost ) \ 91*cdf0e10cSrcweir aTypeList.Append( new SvMetaType( SvHash_##Name()->GetName(), \ 92*cdf0e10cSrcweir BasName, OdlName, ParserChar, CName, BasName, BasPost ) ); 93*cdf0e10cSrcweir 94*cdf0e10cSrcweir SvMetaTypeMemberList & SvIdlDataBase::GetTypeList() 95*cdf0e10cSrcweir { 96*cdf0e10cSrcweir if( aTypeList.Count() == 0 ) 97*cdf0e10cSrcweir { // Initial fuellen 98*cdf0e10cSrcweir aTypeList.Append( new SvMetaTypeString() ); 99*cdf0e10cSrcweir aTypeList.Append( new SvMetaTypevoid() ); 100*cdf0e10cSrcweir 101*cdf0e10cSrcweir // MI: IDispatch::Invoke kann keine unsigned 102*cdf0e10cSrcweir ADD_TYPE( UINT16, "long", 'h', "unsigned short", "Long", "&" ); 103*cdf0e10cSrcweir ADD_TYPE( INT16, "short", 'h', "short", "Integer", "%" ); 104*cdf0e10cSrcweir ADD_TYPE( UINT32, "long", 'l', "unsigned long", "Long", "&" ); 105*cdf0e10cSrcweir ADD_TYPE( INT32, "long", 'l', "long", "Long", "&" ); 106*cdf0e10cSrcweir ADD_TYPE( int, "int", 'i', "int", "Integer", "%" ); 107*cdf0e10cSrcweir ADD_TYPE( BOOL, "boolean", 'b', "unsigned char", "Boolean", "" ); 108*cdf0e10cSrcweir ADD_TYPE( char, "char", 'c', "char", "Integer", "%" ); 109*cdf0e10cSrcweir ADD_TYPE( BYTE, "char", 'c', "unsigned char", "Integer", "%" ); 110*cdf0e10cSrcweir ADD_TYPE( float, "float", 'f', "float", "Single", "!" ); 111*cdf0e10cSrcweir ADD_TYPE( double, "double", 'F', "double", "Double", "#" ); 112*cdf0e10cSrcweir ADD_TYPE( SbxObject, "VARIANT", 'o', "C_Object", "Object", "" ); 113*cdf0e10cSrcweir 114*cdf0e10cSrcweir 115*cdf0e10cSrcweir // A c h t u n g !!!, bei hinzufuegen von Typen werden alle 116*cdf0e10cSrcweir // bin�ren Datenbasen inkompatibel 117*cdf0e10cSrcweir 118*cdf0e10cSrcweir /* 119*cdf0e10cSrcweir // So tun als ob die Init-Daten auf einem Stream gelesen wurden 120*cdf0e10cSrcweir SvMemoryStream aStm; 121*cdf0e10cSrcweir aPersStream.SetStream( &aStm ); 122*cdf0e10cSrcweir // Alle Init-Daten Streamen 123*cdf0e10cSrcweir aPersStream << aTypeList; 124*cdf0e10cSrcweir // Nur die Id-Zuordnung merken 125*cdf0e10cSrcweir aPersStream.SetStream( NULL ); 126*cdf0e10cSrcweir */ 127*cdf0e10cSrcweir } 128*cdf0e10cSrcweir return aTypeList; 129*cdf0e10cSrcweir } 130*cdf0e10cSrcweir 131*cdf0e10cSrcweir /************************************************************************* 132*cdf0e10cSrcweir |* 133*cdf0e10cSrcweir |* SvIdlDataBase::GetModuleInfo() 134*cdf0e10cSrcweir |* 135*cdf0e10cSrcweir |* Beschreibung 136*cdf0e10cSrcweir |* Ersterstellung MM 13.12.94 137*cdf0e10cSrcweir |* Letzte Aenderung MM 13.12.94 138*cdf0e10cSrcweir |* 139*cdf0e10cSrcweir *************************************************************************/ 140*cdf0e10cSrcweir SvMetaModule * SvIdlDataBase::GetModule( const ByteString & rName ) 141*cdf0e10cSrcweir { 142*cdf0e10cSrcweir for( sal_uLong n = 0; n < aModuleList.Count(); n++ ) 143*cdf0e10cSrcweir if( aModuleList.GetObject( n )->GetName() == rName ) 144*cdf0e10cSrcweir return aModuleList.GetObject( n ); 145*cdf0e10cSrcweir return NULL; 146*cdf0e10cSrcweir } 147*cdf0e10cSrcweir 148*cdf0e10cSrcweir /************************************************************************* 149*cdf0e10cSrcweir |* 150*cdf0e10cSrcweir |* SvIdlDataBase::IsBinaryFormat() 151*cdf0e10cSrcweir |* 152*cdf0e10cSrcweir |* Beschreibung 153*cdf0e10cSrcweir |* 154*cdf0e10cSrcweir *************************************************************************/ 155*cdf0e10cSrcweir #define DATABASE_SIGNATURE (sal_uInt32)0x13B799F2 156*cdf0e10cSrcweir #define DATABASE_VER 0x0006 157*cdf0e10cSrcweir sal_Bool SvIdlDataBase::IsBinaryFormat( SvStream & rStm ) 158*cdf0e10cSrcweir { 159*cdf0e10cSrcweir sal_uInt32 nSig = 0; 160*cdf0e10cSrcweir sal_uLong nPos = rStm.Tell(); 161*cdf0e10cSrcweir rStm >> nSig; 162*cdf0e10cSrcweir rStm.Seek( nPos ); 163*cdf0e10cSrcweir 164*cdf0e10cSrcweir return nSig == DATABASE_SIGNATURE; 165*cdf0e10cSrcweir } 166*cdf0e10cSrcweir 167*cdf0e10cSrcweir /************************************************************************* 168*cdf0e10cSrcweir |* 169*cdf0e10cSrcweir |* SvIdlDataBase::Load() 170*cdf0e10cSrcweir |* 171*cdf0e10cSrcweir |* Beschreibung 172*cdf0e10cSrcweir |* 173*cdf0e10cSrcweir *************************************************************************/ 174*cdf0e10cSrcweir void SvIdlDataBase::Load( SvStream & rStm ) 175*cdf0e10cSrcweir { 176*cdf0e10cSrcweir DBG_ASSERT( aTypeList.Count() == 0, "type list already initialized" ); 177*cdf0e10cSrcweir SvPersistStream aPStm( *IDLAPP->pClassMgr, &rStm ); 178*cdf0e10cSrcweir 179*cdf0e10cSrcweir sal_uInt16 nVersion = 0; 180*cdf0e10cSrcweir sal_uInt32 nSig = 0; 181*cdf0e10cSrcweir 182*cdf0e10cSrcweir aPStm >> nSig; 183*cdf0e10cSrcweir aPStm >> nVersion; 184*cdf0e10cSrcweir if( nSig != DATABASE_SIGNATURE ) 185*cdf0e10cSrcweir { 186*cdf0e10cSrcweir aPStm.SetError( SVSTREAM_FILEFORMAT_ERROR ); 187*cdf0e10cSrcweir return; 188*cdf0e10cSrcweir } 189*cdf0e10cSrcweir if( nVersion != DATABASE_VER ) 190*cdf0e10cSrcweir { 191*cdf0e10cSrcweir aPStm.SetError( SVSTREAM_WRONGVERSION ); 192*cdf0e10cSrcweir return; 193*cdf0e10cSrcweir } 194*cdf0e10cSrcweir aPStm >> aClassList; 195*cdf0e10cSrcweir aPStm >> aTypeList; 196*cdf0e10cSrcweir aPStm >> aAttrList; 197*cdf0e10cSrcweir aPStm >> aModuleList; 198*cdf0e10cSrcweir aPStm >> nUniqueId; 199*cdf0e10cSrcweir 200*cdf0e10cSrcweir if( aPStm.IsEof() ) 201*cdf0e10cSrcweir aPStm.SetError( SVSTREAM_GENERALERROR ); 202*cdf0e10cSrcweir } 203*cdf0e10cSrcweir 204*cdf0e10cSrcweir /************************************************************************* 205*cdf0e10cSrcweir |* SvIdlDataBase::Save() 206*cdf0e10cSrcweir |* 207*cdf0e10cSrcweir |* Beschreibung 208*cdf0e10cSrcweir *************************************************************************/ 209*cdf0e10cSrcweir void SvIdlDataBase::Save( SvStream & rStm, sal_uInt32 nFlags ) 210*cdf0e10cSrcweir { 211*cdf0e10cSrcweir SvPersistStream aPStm( *IDLAPP->pClassMgr, &rStm ); 212*cdf0e10cSrcweir aPStm.SetContextFlags( nFlags ); 213*cdf0e10cSrcweir 214*cdf0e10cSrcweir aPStm << (sal_uInt32)DATABASE_SIGNATURE; 215*cdf0e10cSrcweir aPStm << (sal_uInt16)DATABASE_VER; 216*cdf0e10cSrcweir 217*cdf0e10cSrcweir sal_Bool bOnlyStreamedObjs = sal_False; 218*cdf0e10cSrcweir if( nFlags & IDL_WRITE_CALLING ) 219*cdf0e10cSrcweir bOnlyStreamedObjs = sal_True; 220*cdf0e10cSrcweir 221*cdf0e10cSrcweir if( bOnlyStreamedObjs ) 222*cdf0e10cSrcweir { 223*cdf0e10cSrcweir SvMetaClassMemberList aList; 224*cdf0e10cSrcweir for( sal_uLong n = 0; n < GetModuleList().Count(); n++ ) 225*cdf0e10cSrcweir { 226*cdf0e10cSrcweir SvMetaModule * pModule = GetModuleList().GetObject( n ); 227*cdf0e10cSrcweir if( !pModule->IsImported() ) 228*cdf0e10cSrcweir aList.Append( pModule->GetClassList() ); 229*cdf0e10cSrcweir } 230*cdf0e10cSrcweir aPStm << aList; 231*cdf0e10cSrcweir } 232*cdf0e10cSrcweir else 233*cdf0e10cSrcweir aPStm << aClassList; 234*cdf0e10cSrcweir 235*cdf0e10cSrcweir //aClassList.WriteObjects( aPStm, bOnlyStreamedObjs ); 236*cdf0e10cSrcweir aTypeList.WriteObjects( aPStm, bOnlyStreamedObjs ); 237*cdf0e10cSrcweir aAttrList.WriteObjects( aPStm, bOnlyStreamedObjs ); 238*cdf0e10cSrcweir aModuleList.WriteObjects( aPStm, bOnlyStreamedObjs ); 239*cdf0e10cSrcweir aPStm << nUniqueId; 240*cdf0e10cSrcweir } 241*cdf0e10cSrcweir 242*cdf0e10cSrcweir /************************************************************************* 243*cdf0e10cSrcweir |* SvIdlDataBase::SetError() 244*cdf0e10cSrcweir |* 245*cdf0e10cSrcweir |* Beschreibung 246*cdf0e10cSrcweir *************************************************************************/ 247*cdf0e10cSrcweir void SvIdlDataBase::SetError( const ByteString & rError, SvToken * pTok ) 248*cdf0e10cSrcweir { 249*cdf0e10cSrcweir if( pTok->GetLine() > 10000 ) 250*cdf0e10cSrcweir aError.SetText( "hgchcg" ); 251*cdf0e10cSrcweir 252*cdf0e10cSrcweir if( aError.nLine < pTok->GetLine() 253*cdf0e10cSrcweir || (aError.nLine == pTok->GetLine() && aError.nColumn < pTok->GetColumn()) ) 254*cdf0e10cSrcweir { 255*cdf0e10cSrcweir aError = SvIdlError( pTok->GetLine(), pTok->GetColumn() ); 256*cdf0e10cSrcweir aError.SetText( rError ); 257*cdf0e10cSrcweir } 258*cdf0e10cSrcweir } 259*cdf0e10cSrcweir 260*cdf0e10cSrcweir /************************************************************************* 261*cdf0e10cSrcweir |* SvIdlDataBase::Push() 262*cdf0e10cSrcweir |* 263*cdf0e10cSrcweir |* Beschreibung 264*cdf0e10cSrcweir *************************************************************************/ 265*cdf0e10cSrcweir void SvIdlDataBase::Push( SvMetaObject * pObj ) 266*cdf0e10cSrcweir { 267*cdf0e10cSrcweir GetStack().Push( pObj ); 268*cdf0e10cSrcweir } 269*cdf0e10cSrcweir 270*cdf0e10cSrcweir #ifdef IDL_COMPILER 271*cdf0e10cSrcweir /************************************************************************* 272*cdf0e10cSrcweir |* 273*cdf0e10cSrcweir |* SvIdlDataBase::FindId() 274*cdf0e10cSrcweir |* 275*cdf0e10cSrcweir |* Beschreibung 276*cdf0e10cSrcweir |* 277*cdf0e10cSrcweir *************************************************************************/ 278*cdf0e10cSrcweir sal_Bool SvIdlDataBase::FindId( const ByteString & rIdName, sal_uLong * pVal ) 279*cdf0e10cSrcweir { 280*cdf0e10cSrcweir if( pIdTable ) 281*cdf0e10cSrcweir { 282*cdf0e10cSrcweir sal_uInt32 nHash; 283*cdf0e10cSrcweir if( pIdTable->Test( rIdName, &nHash ) ) 284*cdf0e10cSrcweir { 285*cdf0e10cSrcweir *pVal = pIdTable->Get( nHash )->GetValue(); 286*cdf0e10cSrcweir return sal_True; 287*cdf0e10cSrcweir } 288*cdf0e10cSrcweir } 289*cdf0e10cSrcweir return sal_False; 290*cdf0e10cSrcweir } 291*cdf0e10cSrcweir 292*cdf0e10cSrcweir /************************************************************************* 293*cdf0e10cSrcweir |* 294*cdf0e10cSrcweir |* SvIdlDataBase::InsertId() 295*cdf0e10cSrcweir |* 296*cdf0e10cSrcweir |* Beschreibung 297*cdf0e10cSrcweir |* 298*cdf0e10cSrcweir *************************************************************************/ 299*cdf0e10cSrcweir sal_Bool SvIdlDataBase::InsertId( const ByteString & rIdName, sal_uLong nVal ) 300*cdf0e10cSrcweir { 301*cdf0e10cSrcweir if( !pIdTable ) 302*cdf0e10cSrcweir pIdTable = new SvStringHashTable( 20003 ); 303*cdf0e10cSrcweir 304*cdf0e10cSrcweir sal_uInt32 nHash; 305*cdf0e10cSrcweir if( pIdTable->Insert( rIdName, &nHash ) ) 306*cdf0e10cSrcweir { 307*cdf0e10cSrcweir pIdTable->Get( nHash )->SetValue( nVal ); 308*cdf0e10cSrcweir return sal_True; 309*cdf0e10cSrcweir } 310*cdf0e10cSrcweir return sal_False; 311*cdf0e10cSrcweir } 312*cdf0e10cSrcweir 313*cdf0e10cSrcweir /************************************************************************* 314*cdf0e10cSrcweir |* SvIdlDataBase::ReadIdFile() 315*cdf0e10cSrcweir |* 316*cdf0e10cSrcweir |* Beschreibung 317*cdf0e10cSrcweir *************************************************************************/ 318*cdf0e10cSrcweir sal_Bool SvIdlDataBase::ReadIdFile( const String & rFileName ) 319*cdf0e10cSrcweir { 320*cdf0e10cSrcweir DirEntry aFullName( rFileName ); 321*cdf0e10cSrcweir aFullName.Find( GetPath() ); 322*cdf0e10cSrcweir 323*cdf0e10cSrcweir String * pIdFile = aIdFileList.First(); 324*cdf0e10cSrcweir while( pIdFile ) 325*cdf0e10cSrcweir { 326*cdf0e10cSrcweir if( *pIdFile == rFileName ) 327*cdf0e10cSrcweir return sal_True; // schon eingelesen 328*cdf0e10cSrcweir pIdFile = aIdFileList.Next(); 329*cdf0e10cSrcweir } 330*cdf0e10cSrcweir 331*cdf0e10cSrcweir aIdFileList.Insert( new String( rFileName ), LIST_APPEND ); 332*cdf0e10cSrcweir 333*cdf0e10cSrcweir SvTokenStream aTokStm( aFullName.GetFull() ); 334*cdf0e10cSrcweir if( aTokStm.GetStream().GetError() == SVSTREAM_OK ) 335*cdf0e10cSrcweir { 336*cdf0e10cSrcweir SvToken * pTok = aTokStm.GetToken_Next(); 337*cdf0e10cSrcweir 338*cdf0e10cSrcweir while( !pTok->IsEof() ) 339*cdf0e10cSrcweir { 340*cdf0e10cSrcweir if( pTok->IsChar() && pTok->GetChar() == '#' ) 341*cdf0e10cSrcweir { 342*cdf0e10cSrcweir pTok = aTokStm.GetToken_Next(); 343*cdf0e10cSrcweir if( pTok->Is( SvHash_define() ) ) 344*cdf0e10cSrcweir { 345*cdf0e10cSrcweir pTok = aTokStm.GetToken_Next(); 346*cdf0e10cSrcweir ByteString aDefName; 347*cdf0e10cSrcweir if( pTok->IsIdentifier() ) 348*cdf0e10cSrcweir aDefName = pTok->GetString(); 349*cdf0e10cSrcweir else 350*cdf0e10cSrcweir { 351*cdf0e10cSrcweir ByteString aStr( "unexpected token after define" ); 352*cdf0e10cSrcweir // Fehler setzen 353*cdf0e10cSrcweir SetError( aStr, pTok ); 354*cdf0e10cSrcweir WriteError( aTokStm ); 355*cdf0e10cSrcweir return sal_False; 356*cdf0e10cSrcweir } 357*cdf0e10cSrcweir 358*cdf0e10cSrcweir sal_uLong nVal = 0; 359*cdf0e10cSrcweir sal_Bool bOk = sal_True; 360*cdf0e10cSrcweir while( bOk ) 361*cdf0e10cSrcweir { 362*cdf0e10cSrcweir pTok = aTokStm.GetToken_Next(); 363*cdf0e10cSrcweir if( pTok->IsIdentifier() ) 364*cdf0e10cSrcweir { 365*cdf0e10cSrcweir sal_uLong n; 366*cdf0e10cSrcweir if( FindId( pTok->GetString(), &n ) ) 367*cdf0e10cSrcweir nVal += n; 368*cdf0e10cSrcweir else 369*cdf0e10cSrcweir bOk = sal_False; 370*cdf0e10cSrcweir } 371*cdf0e10cSrcweir else if( pTok->IsChar() ) 372*cdf0e10cSrcweir { 373*cdf0e10cSrcweir if( pTok->GetChar() == '-' 374*cdf0e10cSrcweir || pTok->GetChar() == '/' 375*cdf0e10cSrcweir || pTok->GetChar() == '*' 376*cdf0e10cSrcweir || pTok->GetChar() == '&' 377*cdf0e10cSrcweir || pTok->GetChar() == '|' 378*cdf0e10cSrcweir || pTok->GetChar() == '^' 379*cdf0e10cSrcweir || pTok->GetChar() == '~' ) 380*cdf0e10cSrcweir { 381*cdf0e10cSrcweir ByteString aStr( "unknown operator '" ); 382*cdf0e10cSrcweir aStr += pTok->GetChar(); 383*cdf0e10cSrcweir aStr += "'in define"; 384*cdf0e10cSrcweir // Fehler setzen 385*cdf0e10cSrcweir SetError( aStr, pTok ); 386*cdf0e10cSrcweir WriteError( aTokStm ); 387*cdf0e10cSrcweir return sal_False; 388*cdf0e10cSrcweir } 389*cdf0e10cSrcweir if( pTok->GetChar() != '+' 390*cdf0e10cSrcweir && pTok->GetChar() != '(' 391*cdf0e10cSrcweir && pTok->GetChar() != ')' ) 392*cdf0e10cSrcweir // nur + erlaubt, Klammern spielen kein Rolle, 393*cdf0e10cSrcweir // da + komutativ ist 394*cdf0e10cSrcweir break; 395*cdf0e10cSrcweir } 396*cdf0e10cSrcweir else if( pTok->IsInteger() ) 397*cdf0e10cSrcweir { 398*cdf0e10cSrcweir nVal += pTok->GetNumber(); 399*cdf0e10cSrcweir } 400*cdf0e10cSrcweir else 401*cdf0e10cSrcweir break; 402*cdf0e10cSrcweir } 403*cdf0e10cSrcweir if( bOk ) 404*cdf0e10cSrcweir { 405*cdf0e10cSrcweir if( !InsertId( aDefName, nVal ) ) 406*cdf0e10cSrcweir { 407*cdf0e10cSrcweir ByteString aStr = "hash table overflow: "; 408*cdf0e10cSrcweir SetError( aStr, pTok ); 409*cdf0e10cSrcweir WriteError( aTokStm ); 410*cdf0e10cSrcweir return sal_False; 411*cdf0e10cSrcweir } 412*cdf0e10cSrcweir } 413*cdf0e10cSrcweir } 414*cdf0e10cSrcweir else if( pTok->Is( SvHash_include() ) ) 415*cdf0e10cSrcweir { 416*cdf0e10cSrcweir pTok = aTokStm.GetToken_Next(); 417*cdf0e10cSrcweir ByteString aName; 418*cdf0e10cSrcweir if( pTok->IsString() ) 419*cdf0e10cSrcweir aName = pTok->GetString(); 420*cdf0e10cSrcweir else if( pTok->IsChar() && pTok->GetChar() == '<' ) 421*cdf0e10cSrcweir { 422*cdf0e10cSrcweir pTok = aTokStm.GetToken_Next(); 423*cdf0e10cSrcweir while( !pTok->IsEof() 424*cdf0e10cSrcweir && !(pTok->IsChar() && pTok->GetChar() == '>') ) 425*cdf0e10cSrcweir { 426*cdf0e10cSrcweir aName += pTok->GetTokenAsString(); 427*cdf0e10cSrcweir pTok = aTokStm.GetToken_Next(); 428*cdf0e10cSrcweir } 429*cdf0e10cSrcweir if( pTok->IsEof() ) 430*cdf0e10cSrcweir { 431*cdf0e10cSrcweir ByteString aStr( "unexpected eof in #include" ); 432*cdf0e10cSrcweir // Fehler setzen 433*cdf0e10cSrcweir SetError( aStr, pTok ); 434*cdf0e10cSrcweir WriteError( aTokStm ); 435*cdf0e10cSrcweir return sal_False; 436*cdf0e10cSrcweir } 437*cdf0e10cSrcweir } 438*cdf0e10cSrcweir if( !ReadIdFile( String::CreateFromAscii(aName.GetBuffer()) ) ) 439*cdf0e10cSrcweir { 440*cdf0e10cSrcweir ByteString aStr = "cannot read file: "; 441*cdf0e10cSrcweir aStr += aName; 442*cdf0e10cSrcweir SetError( aStr, pTok ); 443*cdf0e10cSrcweir WriteError( aTokStm ); 444*cdf0e10cSrcweir return sal_False; 445*cdf0e10cSrcweir } 446*cdf0e10cSrcweir } 447*cdf0e10cSrcweir } 448*cdf0e10cSrcweir else 449*cdf0e10cSrcweir pTok = aTokStm.GetToken_Next(); 450*cdf0e10cSrcweir } 451*cdf0e10cSrcweir } 452*cdf0e10cSrcweir else 453*cdf0e10cSrcweir return sal_False; 454*cdf0e10cSrcweir return sal_True; 455*cdf0e10cSrcweir } 456*cdf0e10cSrcweir 457*cdf0e10cSrcweir /************************************************************************* 458*cdf0e10cSrcweir |* SvIdlDataBase::FindType() 459*cdf0e10cSrcweir |* 460*cdf0e10cSrcweir |* Beschreibung 461*cdf0e10cSrcweir *************************************************************************/ 462*cdf0e10cSrcweir SvMetaType * SvIdlDataBase::FindType( const SvMetaType * pPType, 463*cdf0e10cSrcweir SvMetaTypeMemberList & rList ) 464*cdf0e10cSrcweir { 465*cdf0e10cSrcweir SvMetaType * pType = rList.First(); 466*cdf0e10cSrcweir while( pType && pPType != pType ) 467*cdf0e10cSrcweir pType = rList.Next(); 468*cdf0e10cSrcweir return pType; 469*cdf0e10cSrcweir } 470*cdf0e10cSrcweir 471*cdf0e10cSrcweir SvMetaType * SvIdlDataBase::FindType( const ByteString & rName ) 472*cdf0e10cSrcweir { 473*cdf0e10cSrcweir SvMetaType * pType = aTypeList.First(); 474*cdf0e10cSrcweir while( pType && rName != pType->GetName() ) 475*cdf0e10cSrcweir pType = aTypeList.Next(); 476*cdf0e10cSrcweir return pType; 477*cdf0e10cSrcweir } 478*cdf0e10cSrcweir 479*cdf0e10cSrcweir /************************************************************************* 480*cdf0e10cSrcweir |* SvIdlDataBase::ReadKnownType() 481*cdf0e10cSrcweir |* 482*cdf0e10cSrcweir |* Beschreibung 483*cdf0e10cSrcweir *************************************************************************/ 484*cdf0e10cSrcweir SvMetaType * SvIdlDataBase::ReadKnownType( SvTokenStream & rInStm ) 485*cdf0e10cSrcweir { 486*cdf0e10cSrcweir sal_Bool bIn = sal_False; 487*cdf0e10cSrcweir sal_Bool bOut = sal_False; 488*cdf0e10cSrcweir int nCall0 = CALL_VALUE; 489*cdf0e10cSrcweir int nCall1 = CALL_VALUE; 490*cdf0e10cSrcweir sal_Bool bSet = sal_False; //irgent ein Attribut gesetzt 491*cdf0e10cSrcweir 492*cdf0e10cSrcweir sal_uInt32 nTokPos = rInStm.Tell(); 493*cdf0e10cSrcweir SvToken * pTok = rInStm.GetToken_Next(); 494*cdf0e10cSrcweir 495*cdf0e10cSrcweir if( pTok->HasHash() ) 496*cdf0e10cSrcweir { 497*cdf0e10cSrcweir sal_uInt32 nBeginPos = 0; // kann mit Tell nicht vorkommen 498*cdf0e10cSrcweir while( nBeginPos != rInStm.Tell() ) 499*cdf0e10cSrcweir { 500*cdf0e10cSrcweir nBeginPos = rInStm.Tell(); 501*cdf0e10cSrcweir if( pTok->Is( SvHash_in() ) ) 502*cdf0e10cSrcweir { 503*cdf0e10cSrcweir bIn = sal_True; 504*cdf0e10cSrcweir pTok = rInStm.GetToken_Next(); 505*cdf0e10cSrcweir bSet = sal_True; 506*cdf0e10cSrcweir } 507*cdf0e10cSrcweir if( pTok->Is( SvHash_out() ) ) 508*cdf0e10cSrcweir { 509*cdf0e10cSrcweir bOut = sal_True; 510*cdf0e10cSrcweir pTok = rInStm.GetToken_Next(); 511*cdf0e10cSrcweir bSet = sal_True; 512*cdf0e10cSrcweir } 513*cdf0e10cSrcweir if( pTok->Is( SvHash_inout() ) ) 514*cdf0e10cSrcweir { 515*cdf0e10cSrcweir bIn = sal_True; 516*cdf0e10cSrcweir bOut = sal_True; 517*cdf0e10cSrcweir pTok = rInStm.GetToken_Next(); 518*cdf0e10cSrcweir bSet = sal_True; 519*cdf0e10cSrcweir } 520*cdf0e10cSrcweir } 521*cdf0e10cSrcweir } 522*cdf0e10cSrcweir /* 523*cdf0e10cSrcweir SvMetaTypeList aTmpTypeList; 524*cdf0e10cSrcweir if( FillTypeList( aTmpTypeList, pTok ) ) 525*cdf0e10cSrcweir */ 526*cdf0e10cSrcweir if( pTok->IsIdentifier() ) 527*cdf0e10cSrcweir { 528*cdf0e10cSrcweir ByteString aName = pTok->GetString(); 529*cdf0e10cSrcweir SvMetaTypeMemberList & rList = GetTypeList(); 530*cdf0e10cSrcweir SvMetaType * pType = rList.First(); 531*cdf0e10cSrcweir while( pType ) 532*cdf0e10cSrcweir { 533*cdf0e10cSrcweir if( pType->GetName() == aName ) 534*cdf0e10cSrcweir break; 535*cdf0e10cSrcweir pType = rList.Next(); 536*cdf0e10cSrcweir } 537*cdf0e10cSrcweir if( pType ) 538*cdf0e10cSrcweir { 539*cdf0e10cSrcweir pTok = rInStm.GetToken(); 540*cdf0e10cSrcweir if( pTok->IsChar() ) 541*cdf0e10cSrcweir { 542*cdf0e10cSrcweir if( pTok->GetChar() == '&' || pTok->GetChar() == '*' ) 543*cdf0e10cSrcweir { 544*cdf0e10cSrcweir nCall0 = (pTok->GetChar() == '&') ? CALL_REFERENCE : 545*cdf0e10cSrcweir CALL_POINTER; 546*cdf0e10cSrcweir rInStm.GetToken_Next(); 547*cdf0e10cSrcweir pTok = rInStm.GetToken(); 548*cdf0e10cSrcweir if( pTok->GetChar() == '&' || pTok->GetChar() == '*' ) 549*cdf0e10cSrcweir { 550*cdf0e10cSrcweir nCall1 = (pTok->GetChar() == '&') ? CALL_REFERENCE : 551*cdf0e10cSrcweir CALL_POINTER; 552*cdf0e10cSrcweir rInStm.GetToken_Next(); 553*cdf0e10cSrcweir } 554*cdf0e10cSrcweir bSet = sal_True; 555*cdf0e10cSrcweir } 556*cdf0e10cSrcweir } 557*cdf0e10cSrcweir /* 558*cdf0e10cSrcweir SvMetaType * pMetaType = aTmpTypeList.First(); 559*cdf0e10cSrcweir while( pMetaType ) 560*cdf0e10cSrcweir { 561*cdf0e10cSrcweir if( pMetaType->GetIn() == bIn 562*cdf0e10cSrcweir && pMetaType->GetOut() == bOut 563*cdf0e10cSrcweir && pMetaType->GetCall0() == nCall0 564*cdf0e10cSrcweir && pMetaType->GetCall1() == nCall1 ) 565*cdf0e10cSrcweir { 566*cdf0e10cSrcweir return pMetaType; 567*cdf0e10cSrcweir } 568*cdf0e10cSrcweir pMetaType = aTmpTypeList.Next(); 569*cdf0e10cSrcweir } 570*cdf0e10cSrcweir */ 571*cdf0e10cSrcweir //SvMetaType * pType = aTmpTypeList.First(); 572*cdf0e10cSrcweir if( !bSet ) 573*cdf0e10cSrcweir // Ist genau dieser Typ 574*cdf0e10cSrcweir return pType; 575*cdf0e10cSrcweir 576*cdf0e10cSrcweir DBG_ASSERT( aTmpTypeList.First(), "mindestens ein Element" ); 577*cdf0e10cSrcweir SvMetaTypeRef xType = new SvMetaType( pType->GetName(), 'h', "dummy" ); 578*cdf0e10cSrcweir xType->SetRef( pType ); 579*cdf0e10cSrcweir xType->SetIn( bIn ); 580*cdf0e10cSrcweir xType->SetOut( bOut ); 581*cdf0e10cSrcweir xType->SetCall0( nCall0 ); 582*cdf0e10cSrcweir xType->SetCall1( nCall1 ); 583*cdf0e10cSrcweir 584*cdf0e10cSrcweir aTmpTypeList.Append( xType ); 585*cdf0e10cSrcweir return xType; 586*cdf0e10cSrcweir } 587*cdf0e10cSrcweir } 588*cdf0e10cSrcweir rInStm.Seek( nTokPos ); 589*cdf0e10cSrcweir return NULL; 590*cdf0e10cSrcweir } 591*cdf0e10cSrcweir 592*cdf0e10cSrcweir /************************************************************************* 593*cdf0e10cSrcweir |* 594*cdf0e10cSrcweir |* SvIdlDataBase::ReadKnownAttr() 595*cdf0e10cSrcweir |* 596*cdf0e10cSrcweir |* Beschreibung 597*cdf0e10cSrcweir |* 598*cdf0e10cSrcweir *************************************************************************/ 599*cdf0e10cSrcweir SvMetaAttribute * SvIdlDataBase::ReadKnownAttr 600*cdf0e10cSrcweir ( 601*cdf0e10cSrcweir SvTokenStream & rInStm, 602*cdf0e10cSrcweir SvMetaType * pType /* Wenn der pType == NULL, dann muss der Typ 603*cdf0e10cSrcweir noch gelesen werden. */ 604*cdf0e10cSrcweir ) 605*cdf0e10cSrcweir { 606*cdf0e10cSrcweir sal_uInt32 nTokPos = rInStm.Tell(); 607*cdf0e10cSrcweir 608*cdf0e10cSrcweir if( !pType ) 609*cdf0e10cSrcweir pType = ReadKnownType( rInStm ); 610*cdf0e10cSrcweir 611*cdf0e10cSrcweir if( pType ) 612*cdf0e10cSrcweir { 613*cdf0e10cSrcweir // Wenn wir Slots auf die Wiese stellen, d"urfen wir nicht voraussetzen, 614*cdf0e10cSrcweir // da\s jeder Slot einen anderen Namen hat! 615*cdf0e10cSrcweir /* 616*cdf0e10cSrcweir SvToken * pTok = rInStm.GetToken_Next(); 617*cdf0e10cSrcweir if( pTok->IsIdentifier() ) 618*cdf0e10cSrcweir for( sal_uLong n = 0; n < aAttrList.Count(); n++ ) 619*cdf0e10cSrcweir { 620*cdf0e10cSrcweir SvMetaAttribute * pAttr = aAttrList.GetObject( n ); 621*cdf0e10cSrcweir if( pAttr->GetName() == pTok->GetString() ) 622*cdf0e10cSrcweir return pAttr; 623*cdf0e10cSrcweir } 624*cdf0e10cSrcweir */ 625*cdf0e10cSrcweir } 626*cdf0e10cSrcweir else 627*cdf0e10cSrcweir { 628*cdf0e10cSrcweir // sonst SlotId? 629*cdf0e10cSrcweir SvToken * pTok = rInStm.GetToken_Next(); 630*cdf0e10cSrcweir if( pTok->IsIdentifier() ) 631*cdf0e10cSrcweir { 632*cdf0e10cSrcweir sal_uLong n; 633*cdf0e10cSrcweir if( FindId( pTok->GetString(), &n ) ) 634*cdf0e10cSrcweir { 635*cdf0e10cSrcweir for( sal_uLong i = 0; i < aAttrList.Count(); i++ ) 636*cdf0e10cSrcweir { 637*cdf0e10cSrcweir SvMetaAttribute * pAttr = aAttrList.GetObject( i ); 638*cdf0e10cSrcweir if( pAttr->GetSlotId() == pTok->GetString() ) 639*cdf0e10cSrcweir return pAttr; 640*cdf0e10cSrcweir } 641*cdf0e10cSrcweir } 642*cdf0e10cSrcweir 643*cdf0e10cSrcweir ByteString aStr( "Nicht gefunden : " ); 644*cdf0e10cSrcweir aStr += pTok->GetString(); 645*cdf0e10cSrcweir DBG_ERROR( aStr.GetBuffer() ); 646*cdf0e10cSrcweir } 647*cdf0e10cSrcweir } 648*cdf0e10cSrcweir 649*cdf0e10cSrcweir rInStm.Seek( nTokPos ); 650*cdf0e10cSrcweir return NULL; 651*cdf0e10cSrcweir } 652*cdf0e10cSrcweir 653*cdf0e10cSrcweir SvMetaAttribute* SvIdlDataBase::SearchKnownAttr 654*cdf0e10cSrcweir ( 655*cdf0e10cSrcweir const SvNumberIdentifier& rId 656*cdf0e10cSrcweir ) 657*cdf0e10cSrcweir { 658*cdf0e10cSrcweir sal_uLong n; 659*cdf0e10cSrcweir if( FindId( rId, &n ) ) 660*cdf0e10cSrcweir { 661*cdf0e10cSrcweir for( sal_uLong i = 0; i < aAttrList.Count(); i++ ) 662*cdf0e10cSrcweir { 663*cdf0e10cSrcweir SvMetaAttribute * pAttr = aAttrList.GetObject( i ); 664*cdf0e10cSrcweir if( pAttr->GetSlotId() == rId ) 665*cdf0e10cSrcweir return pAttr; 666*cdf0e10cSrcweir } 667*cdf0e10cSrcweir } 668*cdf0e10cSrcweir 669*cdf0e10cSrcweir return NULL; 670*cdf0e10cSrcweir } 671*cdf0e10cSrcweir 672*cdf0e10cSrcweir /************************************************************************* 673*cdf0e10cSrcweir |* SvIdlDataBase::ReadKnownClass() 674*cdf0e10cSrcweir |* 675*cdf0e10cSrcweir |* Beschreibung 676*cdf0e10cSrcweir *************************************************************************/ 677*cdf0e10cSrcweir SvMetaClass * SvIdlDataBase::ReadKnownClass( SvTokenStream & rInStm ) 678*cdf0e10cSrcweir { 679*cdf0e10cSrcweir sal_uInt32 nTokPos = rInStm.Tell(); 680*cdf0e10cSrcweir SvToken * pTok = rInStm.GetToken_Next(); 681*cdf0e10cSrcweir 682*cdf0e10cSrcweir if( pTok->IsIdentifier() ) 683*cdf0e10cSrcweir for( sal_uLong n = 0; n < aClassList.Count(); n++ ) 684*cdf0e10cSrcweir { 685*cdf0e10cSrcweir SvMetaClass * pClass = aClassList.GetObject( n ); 686*cdf0e10cSrcweir if( pClass->GetName() == pTok->GetString() ) 687*cdf0e10cSrcweir return pClass; 688*cdf0e10cSrcweir } 689*cdf0e10cSrcweir 690*cdf0e10cSrcweir rInStm.Seek( nTokPos ); 691*cdf0e10cSrcweir return NULL; 692*cdf0e10cSrcweir } 693*cdf0e10cSrcweir 694*cdf0e10cSrcweir /************************************************************************* 695*cdf0e10cSrcweir |* SvIdlDataBase::Write() 696*cdf0e10cSrcweir |* 697*cdf0e10cSrcweir |* Beschreibung 698*cdf0e10cSrcweir *************************************************************************/ 699*cdf0e10cSrcweir void SvIdlDataBase::Write( const ByteString & rText ) 700*cdf0e10cSrcweir { 701*cdf0e10cSrcweir if( nVerbosity != 0 ) 702*cdf0e10cSrcweir fprintf( stdout, "%s", rText.GetBuffer() ); 703*cdf0e10cSrcweir } 704*cdf0e10cSrcweir 705*cdf0e10cSrcweir /************************************************************************* 706*cdf0e10cSrcweir |* SvIdlDataBase::WriteError() 707*cdf0e10cSrcweir |* 708*cdf0e10cSrcweir |* Beschreibung 709*cdf0e10cSrcweir *************************************************************************/ 710*cdf0e10cSrcweir void SvIdlDataBase::WriteError( const ByteString & rErrWrn, 711*cdf0e10cSrcweir const ByteString & rFileName, 712*cdf0e10cSrcweir const ByteString & rErrorText, 713*cdf0e10cSrcweir sal_uLong nRow, sal_uLong nColumn ) const 714*cdf0e10cSrcweir { 715*cdf0e10cSrcweir //Fehlerbehandlung 716*cdf0e10cSrcweir fprintf( stderr, "\n%s --- %s: ( %ld, %ld )\n", 717*cdf0e10cSrcweir rFileName.GetBuffer(), rErrWrn.GetBuffer(), nRow, nColumn ); 718*cdf0e10cSrcweir 719*cdf0e10cSrcweir if( rErrorText.Len() ) 720*cdf0e10cSrcweir { // Fehler gesetzt 721*cdf0e10cSrcweir fprintf( stderr, "\t%s\n", rErrorText.GetBuffer() ); 722*cdf0e10cSrcweir } 723*cdf0e10cSrcweir } 724*cdf0e10cSrcweir 725*cdf0e10cSrcweir /************************************************************************* 726*cdf0e10cSrcweir |* SvIdlDataBase::WriteError() 727*cdf0e10cSrcweir |* 728*cdf0e10cSrcweir |* Beschreibung 729*cdf0e10cSrcweir *************************************************************************/ 730*cdf0e10cSrcweir void SvIdlDataBase::WriteError( SvTokenStream & rInStm ) 731*cdf0e10cSrcweir { 732*cdf0e10cSrcweir //Fehlerbehandlung 733*cdf0e10cSrcweir String aFileName( rInStm.GetFileName() ); 734*cdf0e10cSrcweir ByteString aErrorText; 735*cdf0e10cSrcweir sal_uLong nRow = 0, nColumn = 0; 736*cdf0e10cSrcweir 737*cdf0e10cSrcweir rInStm.SeekEnd(); 738*cdf0e10cSrcweir SvToken *pTok = rInStm.GetToken(); 739*cdf0e10cSrcweir 740*cdf0e10cSrcweir // Fehlerposition 741*cdf0e10cSrcweir nRow = pTok->GetLine(); 742*cdf0e10cSrcweir nColumn = pTok->GetColumn(); 743*cdf0e10cSrcweir 744*cdf0e10cSrcweir if( aError.IsError() ) 745*cdf0e10cSrcweir { // Fehler gesetzt 746*cdf0e10cSrcweir // Fehler Token suchen 747*cdf0e10cSrcweir // Fehlertext 748*cdf0e10cSrcweir if( aError.GetText().Len() ) 749*cdf0e10cSrcweir { 750*cdf0e10cSrcweir aErrorText = "may be <"; 751*cdf0e10cSrcweir aErrorText += aError.GetText(); 752*cdf0e10cSrcweir } 753*cdf0e10cSrcweir SvToken * pPrevTok = NULL; 754*cdf0e10cSrcweir while( pTok != pPrevTok ) 755*cdf0e10cSrcweir { 756*cdf0e10cSrcweir pPrevTok = pTok; 757*cdf0e10cSrcweir if( pTok->GetLine() == aError.nLine 758*cdf0e10cSrcweir && pTok->GetColumn() == aError.nColumn ) 759*cdf0e10cSrcweir break; 760*cdf0e10cSrcweir pTok = rInStm.GetToken_PrevAll(); 761*cdf0e10cSrcweir } 762*cdf0e10cSrcweir 763*cdf0e10cSrcweir // Fehlerposition 764*cdf0e10cSrcweir aErrorText += "> at ( "; 765*cdf0e10cSrcweir aErrorText += ByteString::CreateFromInt64(aError.nLine); 766*cdf0e10cSrcweir aErrorText += ", "; 767*cdf0e10cSrcweir aErrorText += ByteString::CreateFromInt64(aError.nColumn); 768*cdf0e10cSrcweir aErrorText += " )"; 769*cdf0e10cSrcweir 770*cdf0e10cSrcweir // Fehler zuruecksetzen 771*cdf0e10cSrcweir aError = SvIdlError(); 772*cdf0e10cSrcweir } 773*cdf0e10cSrcweir 774*cdf0e10cSrcweir WriteError( "error", ByteString( aFileName, RTL_TEXTENCODING_UTF8 ), aErrorText, nRow, nColumn ); 775*cdf0e10cSrcweir 776*cdf0e10cSrcweir DBG_ASSERT( pTok, "token must be found" ); 777*cdf0e10cSrcweir if( !pTok ) 778*cdf0e10cSrcweir return; 779*cdf0e10cSrcweir 780*cdf0e10cSrcweir // Identifier in der Naehe suchen 781*cdf0e10cSrcweir if( !pTok->IsIdentifier() ) 782*cdf0e10cSrcweir { 783*cdf0e10cSrcweir rInStm.GetToken_PrevAll(); 784*cdf0e10cSrcweir pTok = rInStm.GetToken(); 785*cdf0e10cSrcweir } 786*cdf0e10cSrcweir if( pTok && pTok->IsIdentifier() ) 787*cdf0e10cSrcweir { 788*cdf0e10cSrcweir ByteString aN = IDLAPP->pHashTable->GetNearString( pTok->GetString() ); 789*cdf0e10cSrcweir if( aN.Len() ) 790*cdf0e10cSrcweir fprintf( stderr, "%s versus %s\n", pTok->GetString().GetBuffer(), aN.GetBuffer() ); 791*cdf0e10cSrcweir } 792*cdf0e10cSrcweir } 793*cdf0e10cSrcweir 794*cdf0e10cSrcweir /****************** SvIdlWorkingBase ****************************************/ 795*cdf0e10cSrcweir /************************************************************************* 796*cdf0e10cSrcweir |* SvIdlWorkingBase::SvIdlWorkingBase() 797*cdf0e10cSrcweir |* 798*cdf0e10cSrcweir |* Beschreibung 799*cdf0e10cSrcweir *************************************************************************/ 800*cdf0e10cSrcweir SvIdlWorkingBase::SvIdlWorkingBase(const SvCommand& rCmd) : SvIdlDataBase(rCmd) 801*cdf0e10cSrcweir { 802*cdf0e10cSrcweir } 803*cdf0e10cSrcweir 804*cdf0e10cSrcweir /************************************************************************* 805*cdf0e10cSrcweir |* SvIdlWorkingBase::ReadSvIdl() 806*cdf0e10cSrcweir |* 807*cdf0e10cSrcweir |* Beschreibung 808*cdf0e10cSrcweir *************************************************************************/ 809*cdf0e10cSrcweir sal_Bool SvIdlWorkingBase::ReadSvIdl( SvTokenStream & rInStm, sal_Bool bImported, const String & rPath ) 810*cdf0e10cSrcweir { 811*cdf0e10cSrcweir aPath = rPath; // nur fuer den durchlauf gueltig 812*cdf0e10cSrcweir SvToken * pTok; 813*cdf0e10cSrcweir sal_Bool bOk = sal_True; 814*cdf0e10cSrcweir pTok = rInStm.GetToken(); 815*cdf0e10cSrcweir // nur ein import ganz am Anfang 816*cdf0e10cSrcweir if( pTok->Is( SvHash_import() ) ) 817*cdf0e10cSrcweir { 818*cdf0e10cSrcweir rInStm.GetToken_Next(); 819*cdf0e10cSrcweir rInStm.Read( '(' ); // optional 820*cdf0e10cSrcweir pTok = rInStm.GetToken_Next(); 821*cdf0e10cSrcweir if( pTok->IsString() ) 822*cdf0e10cSrcweir { 823*cdf0e10cSrcweir DirEntry aFullName( String::CreateFromAscii( pTok->GetString().GetBuffer() ) ); 824*cdf0e10cSrcweir if( aFullName.Find( rPath ) ) 825*cdf0e10cSrcweir { 826*cdf0e10cSrcweir SvFileStream aStm( aFullName.GetFull(), 827*cdf0e10cSrcweir STREAM_STD_READ | STREAM_NOCREATE ); 828*cdf0e10cSrcweir Load( aStm ); 829*cdf0e10cSrcweir if( aStm.GetError() != SVSTREAM_OK ) 830*cdf0e10cSrcweir { 831*cdf0e10cSrcweir if( aStm.GetError() == SVSTREAM_WRONGVERSION ) 832*cdf0e10cSrcweir { 833*cdf0e10cSrcweir ByteString aStr( "wrong version, file " ); 834*cdf0e10cSrcweir aStr += ByteString( aFullName.GetFull(), RTL_TEXTENCODING_UTF8 ); 835*cdf0e10cSrcweir SetError( aStr, pTok ); 836*cdf0e10cSrcweir WriteError( rInStm ); 837*cdf0e10cSrcweir bOk = sal_False; 838*cdf0e10cSrcweir } 839*cdf0e10cSrcweir else 840*cdf0e10cSrcweir { 841*cdf0e10cSrcweir aStm.Seek( 0 ); 842*cdf0e10cSrcweir aStm.ResetError(); 843*cdf0e10cSrcweir SvTokenStream aTokStm( aStm, aFullName.GetFull() ); 844*cdf0e10cSrcweir bOk = ReadSvIdl( aTokStm, sal_True, rPath ); 845*cdf0e10cSrcweir } 846*cdf0e10cSrcweir } 847*cdf0e10cSrcweir } 848*cdf0e10cSrcweir else 849*cdf0e10cSrcweir bOk = sal_False; 850*cdf0e10cSrcweir } 851*cdf0e10cSrcweir else 852*cdf0e10cSrcweir bOk = sal_False; 853*cdf0e10cSrcweir } 854*cdf0e10cSrcweir 855*cdf0e10cSrcweir sal_uInt32 nBeginPos = 0xFFFFFFFF; // kann mit Tell nicht vorkommen 856*cdf0e10cSrcweir 857*cdf0e10cSrcweir while( bOk && nBeginPos != rInStm.Tell() ) 858*cdf0e10cSrcweir { 859*cdf0e10cSrcweir nBeginPos = rInStm.Tell(); 860*cdf0e10cSrcweir pTok = rInStm.GetToken(); 861*cdf0e10cSrcweir if( pTok->IsEof() ) 862*cdf0e10cSrcweir return sal_True; 863*cdf0e10cSrcweir if( pTok->IsEmpty() ) 864*cdf0e10cSrcweir bOk = sal_False; 865*cdf0e10cSrcweir 866*cdf0e10cSrcweir // nur ein import ganz am Anfang 867*cdf0e10cSrcweir /*else */if( pTok->Is( SvHash_module() ) ) 868*cdf0e10cSrcweir { 869*cdf0e10cSrcweir SvMetaModuleRef aModule = new SvMetaModule( rInStm.GetFileName(), bImported ); 870*cdf0e10cSrcweir if( aModule->ReadSvIdl( *this, rInStm ) ) 871*cdf0e10cSrcweir GetModuleList().Append( aModule ); 872*cdf0e10cSrcweir else 873*cdf0e10cSrcweir bOk = sal_False; 874*cdf0e10cSrcweir } 875*cdf0e10cSrcweir else 876*cdf0e10cSrcweir bOk = sal_False; 877*cdf0e10cSrcweir } 878*cdf0e10cSrcweir if( !bOk || !pTok->IsEof() ) 879*cdf0e10cSrcweir { 880*cdf0e10cSrcweir //Fehlerbehandlung 881*cdf0e10cSrcweir WriteError( rInStm ); 882*cdf0e10cSrcweir return sal_False; 883*cdf0e10cSrcweir } 884*cdf0e10cSrcweir return sal_True; 885*cdf0e10cSrcweir } 886*cdf0e10cSrcweir 887*cdf0e10cSrcweir /************************************************************************* 888*cdf0e10cSrcweir |* SvIdlWorkingBase::WriteSvIdl() 889*cdf0e10cSrcweir |* 890*cdf0e10cSrcweir |* Beschreibung 891*cdf0e10cSrcweir *************************************************************************/ 892*cdf0e10cSrcweir sal_Bool SvIdlWorkingBase::WriteSvIdl( SvStream & rOutStm ) 893*cdf0e10cSrcweir { 894*cdf0e10cSrcweir if( rOutStm.GetError() != SVSTREAM_OK ) 895*cdf0e10cSrcweir return sal_False; 896*cdf0e10cSrcweir 897*cdf0e10cSrcweir SvStringHashList aList; 898*cdf0e10cSrcweir if( GetIdTable() ) 899*cdf0e10cSrcweir { 900*cdf0e10cSrcweir GetIdTable()->FillHashList( &aList ); 901*cdf0e10cSrcweir SvStringHashEntry * pEntry = aList.First(); 902*cdf0e10cSrcweir while( pEntry ) 903*cdf0e10cSrcweir { 904*cdf0e10cSrcweir rOutStm << "#define " << pEntry->GetName().GetBuffer() 905*cdf0e10cSrcweir << '\t' 906*cdf0e10cSrcweir << ByteString::CreateFromInt64( 907*cdf0e10cSrcweir pEntry->GetValue() ).GetBuffer() 908*cdf0e10cSrcweir << endl; 909*cdf0e10cSrcweir pEntry = aList.Next(); 910*cdf0e10cSrcweir } 911*cdf0e10cSrcweir } 912*cdf0e10cSrcweir 913*cdf0e10cSrcweir for( sal_uLong n = 0; n < GetModuleList().Count(); n++ ) 914*cdf0e10cSrcweir { 915*cdf0e10cSrcweir SvMetaModule * pModule = GetModuleList().GetObject( n ); 916*cdf0e10cSrcweir //if( !pModule->IsImported() ) 917*cdf0e10cSrcweir pModule->WriteSvIdl( *this, rOutStm, 0 ); 918*cdf0e10cSrcweir } 919*cdf0e10cSrcweir return sal_True; 920*cdf0e10cSrcweir } 921*cdf0e10cSrcweir 922*cdf0e10cSrcweir /************************************************************************* 923*cdf0e10cSrcweir |* SvIdlWorkingBase::WriteSfx() 924*cdf0e10cSrcweir |* 925*cdf0e10cSrcweir |* Beschreibung 926*cdf0e10cSrcweir *************************************************************************/ 927*cdf0e10cSrcweir sal_Bool SvIdlWorkingBase::WriteSfx( SvStream & rOutStm ) 928*cdf0e10cSrcweir { 929*cdf0e10cSrcweir if( rOutStm.GetError() != SVSTREAM_OK ) 930*cdf0e10cSrcweir return sal_False; 931*cdf0e10cSrcweir 932*cdf0e10cSrcweir // alle Tmp-Variablen fuer das Schreiben zuruecksetzen 933*cdf0e10cSrcweir WriteReset(); 934*cdf0e10cSrcweir SvMemoryStream aTmpStm( 256000, 256000 ); 935*cdf0e10cSrcweir sal_uLong n; 936*cdf0e10cSrcweir for( n = 0; n < GetModuleList().Count(); n++ ) 937*cdf0e10cSrcweir { 938*cdf0e10cSrcweir SvMetaModule * pModule = GetModuleList().GetObject( n ); 939*cdf0e10cSrcweir if( !pModule->IsImported() ) 940*cdf0e10cSrcweir pModule->WriteSfx( *this, aTmpStm ); 941*cdf0e10cSrcweir aTmpStm.Seek( 0 ); 942*cdf0e10cSrcweir } 943*cdf0e10cSrcweir for( n = 0; n < aUsedTypes.Count(); n++ ) 944*cdf0e10cSrcweir { 945*cdf0e10cSrcweir SvMetaType * pType = aUsedTypes.GetObject( n ); 946*cdf0e10cSrcweir pType->WriteSfx( *this, rOutStm ); 947*cdf0e10cSrcweir } 948*cdf0e10cSrcweir aUsedTypes.Clear(); 949*cdf0e10cSrcweir rOutStm << aTmpStm; 950*cdf0e10cSrcweir return sal_True; 951*cdf0e10cSrcweir } 952*cdf0e10cSrcweir 953*cdf0e10cSrcweir sal_Bool SvIdlWorkingBase::WriteHelpIds( SvStream& rOutStm ) 954*cdf0e10cSrcweir { 955*cdf0e10cSrcweir if( rOutStm.GetError() != SVSTREAM_OK ) 956*cdf0e10cSrcweir return sal_False; 957*cdf0e10cSrcweir 958*cdf0e10cSrcweir Table aIdTable; 959*cdf0e10cSrcweir sal_uLong n; 960*cdf0e10cSrcweir for( n = 0; n < GetModuleList().Count(); n++ ) 961*cdf0e10cSrcweir { 962*cdf0e10cSrcweir SvMetaModule * pModule = GetModuleList().GetObject( n ); 963*cdf0e10cSrcweir //if( !pModule->IsImported() ) 964*cdf0e10cSrcweir pModule->WriteHelpIds( *this, rOutStm, &aIdTable ); 965*cdf0e10cSrcweir } 966*cdf0e10cSrcweir 967*cdf0e10cSrcweir const SvMetaAttributeMemberList & rAttrList = GetAttrList(); 968*cdf0e10cSrcweir for( n = 0; n < rAttrList.Count(); n++ ) 969*cdf0e10cSrcweir { 970*cdf0e10cSrcweir SvMetaAttribute * pAttr = rAttrList.GetObject( n ); 971*cdf0e10cSrcweir pAttr->WriteHelpId( *this, rOutStm, &aIdTable ); 972*cdf0e10cSrcweir } 973*cdf0e10cSrcweir 974*cdf0e10cSrcweir return sal_True; 975*cdf0e10cSrcweir } 976*cdf0e10cSrcweir 977*cdf0e10cSrcweir /************************************************************************* 978*cdf0e10cSrcweir |* SvIdlWorkingBase::WriteSfxItem() 979*cdf0e10cSrcweir |* 980*cdf0e10cSrcweir |* Beschreibung 981*cdf0e10cSrcweir *************************************************************************/ 982*cdf0e10cSrcweir sal_Bool SvIdlWorkingBase::WriteSfxItem( SvStream & ) 983*cdf0e10cSrcweir { 984*cdf0e10cSrcweir return sal_False; 985*cdf0e10cSrcweir } 986*cdf0e10cSrcweir 987*cdf0e10cSrcweir void SvIdlDataBase::StartNewFile( const String& rName ) 988*cdf0e10cSrcweir { 989*cdf0e10cSrcweir bExport = ( aExportFile.EqualsIgnoreCaseAscii( rName ) ); 990*cdf0e10cSrcweir } 991*cdf0e10cSrcweir 992*cdf0e10cSrcweir void SvIdlDataBase::AppendAttr( SvMetaAttribute *pAttr ) 993*cdf0e10cSrcweir { 994*cdf0e10cSrcweir aAttrList.Append( pAttr ); 995*cdf0e10cSrcweir if ( bExport ) 996*cdf0e10cSrcweir pAttr->SetNewAttribute( sal_True ); 997*cdf0e10cSrcweir } 998*cdf0e10cSrcweir 999*cdf0e10cSrcweir sal_Bool SvIdlWorkingBase::WriteCSV( SvStream& rStrm ) 1000*cdf0e10cSrcweir { 1001*cdf0e10cSrcweir SvMetaAttributeMemberList &rList = GetAttrList(); 1002*cdf0e10cSrcweir sal_uLong nCount = rList.Count(); 1003*cdf0e10cSrcweir for ( sal_uLong n=0; n<nCount; n++ ) 1004*cdf0e10cSrcweir { 1005*cdf0e10cSrcweir if ( rList.GetObject(n)->IsNewAttribute() ) 1006*cdf0e10cSrcweir { 1007*cdf0e10cSrcweir rList.GetObject(n)->WriteCSV( *this, rStrm ); 1008*cdf0e10cSrcweir } 1009*cdf0e10cSrcweir } 1010*cdf0e10cSrcweir 1011*cdf0e10cSrcweir if ( rStrm.GetError() != SVSTREAM_OK ) 1012*cdf0e10cSrcweir return sal_False; 1013*cdf0e10cSrcweir else 1014*cdf0e10cSrcweir return sal_True; 1015*cdf0e10cSrcweir } 1016*cdf0e10cSrcweir 1017*cdf0e10cSrcweir /************************************************************************* 1018*cdf0e10cSrcweir |* SvIdlWorkingBase::WriteDocumentation() 1019*cdf0e10cSrcweir |* 1020*cdf0e10cSrcweir |* Beschreibung 1021*cdf0e10cSrcweir *************************************************************************/ 1022*cdf0e10cSrcweir sal_Bool SvIdlWorkingBase::WriteDocumentation( SvStream & rOutStm ) 1023*cdf0e10cSrcweir { 1024*cdf0e10cSrcweir if( rOutStm.GetError() != SVSTREAM_OK ) 1025*cdf0e10cSrcweir return sal_False; 1026*cdf0e10cSrcweir 1027*cdf0e10cSrcweir for( sal_uLong n = 0; n < GetModuleList().Count(); n++ ) 1028*cdf0e10cSrcweir { 1029*cdf0e10cSrcweir SvMetaModule * pModule = GetModuleList().GetObject( n ); 1030*cdf0e10cSrcweir if( !pModule->IsImported() ) 1031*cdf0e10cSrcweir pModule->Write( *this, rOutStm, 0, WRITE_DOCU ); 1032*cdf0e10cSrcweir } 1033*cdf0e10cSrcweir return sal_True; 1034*cdf0e10cSrcweir } 1035*cdf0e10cSrcweir 1036*cdf0e10cSrcweir 1037*cdf0e10cSrcweir 1038*cdf0e10cSrcweir #endif // IDL_COMPILER 1039*cdf0e10cSrcweir 1040