1*724893d4SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*724893d4SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*724893d4SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*724893d4SAndrew Rist * distributed with this work for additional information 6*724893d4SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*724893d4SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*724893d4SAndrew Rist * "License"); you may not use this file except in compliance 9*724893d4SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*724893d4SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*724893d4SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*724893d4SAndrew Rist * software distributed under the License is distributed on an 15*724893d4SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*724893d4SAndrew Rist * KIND, either express or implied. See the License for the 17*724893d4SAndrew Rist * specific language governing permissions and limitations 18*724893d4SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*724893d4SAndrew Rist *************************************************************/ 21*724893d4SAndrew Rist 22*724893d4SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_idl.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include <ctype.h> 28cdf0e10cSrcweir #include <stdio.h> 29cdf0e10cSrcweir 30cdf0e10cSrcweir #include <attrib.hxx> 31cdf0e10cSrcweir #include <module.hxx> 32cdf0e10cSrcweir #include <globals.hxx> 33cdf0e10cSrcweir #include <database.hxx> 34cdf0e10cSrcweir #include <tools/fsys.hxx> 35cdf0e10cSrcweir #include <tools/debug.hxx> 36cdf0e10cSrcweir 37cdf0e10cSrcweir /****************** SvMetaModule ******************************************/ 38cdf0e10cSrcweir SV_IMPL_META_FACTORY1( SvMetaModule, SvMetaExtern ); 39cdf0e10cSrcweir 40cdf0e10cSrcweir /************************************************************************* 41cdf0e10cSrcweir |* 42cdf0e10cSrcweir |* SvMetaModule::SvMetaModule() 43cdf0e10cSrcweir |* 44cdf0e10cSrcweir |* Beschreibung 45cdf0e10cSrcweir |* Ersterstellung MM 12.12.94 46cdf0e10cSrcweir |* Letzte Aenderung MM 12.12.94 47cdf0e10cSrcweir |* 48cdf0e10cSrcweir *************************************************************************/ 49cdf0e10cSrcweir SvMetaModule::SvMetaModule() 50cdf0e10cSrcweir #ifdef IDL_COMPILER 51cdf0e10cSrcweir : bImported( sal_False ) 52cdf0e10cSrcweir , bIsModified( sal_False ) 53cdf0e10cSrcweir #endif 54cdf0e10cSrcweir { 55cdf0e10cSrcweir } 56cdf0e10cSrcweir 57cdf0e10cSrcweir #ifdef IDL_COMPILER 58cdf0e10cSrcweir SvMetaModule::SvMetaModule( const String & rIdlFileName, sal_Bool bImp ) 59cdf0e10cSrcweir : aIdlFileName( rIdlFileName ) 60cdf0e10cSrcweir , bImported( bImp ), bIsModified( sal_False ) 61cdf0e10cSrcweir { 62cdf0e10cSrcweir } 63cdf0e10cSrcweir #endif 64cdf0e10cSrcweir 65cdf0e10cSrcweir /************************************************************************* 66cdf0e10cSrcweir |* 67cdf0e10cSrcweir |* SvMetaModule::Load() 68cdf0e10cSrcweir |* 69cdf0e10cSrcweir |* Beschreibung 70cdf0e10cSrcweir |* Ersterstellung MM 12.12.94 71cdf0e10cSrcweir |* Letzte Aenderung MM 12.12.94 72cdf0e10cSrcweir |* 73cdf0e10cSrcweir *************************************************************************/ 74cdf0e10cSrcweir #define MODULE_VER 0x0001 75cdf0e10cSrcweir void SvMetaModule::Load( SvPersistStream & rStm ) 76cdf0e10cSrcweir { 77cdf0e10cSrcweir bImported = sal_True; // immer importiert 78cdf0e10cSrcweir SvMetaExtern::Load( rStm ); 79cdf0e10cSrcweir 80cdf0e10cSrcweir sal_uInt16 nVer; 81cdf0e10cSrcweir 82cdf0e10cSrcweir rStm >> nVer; // Version 83cdf0e10cSrcweir DBG_ASSERT( (nVer & ~IDL_WRITE_MASK) == MODULE_VER, "false version" ); 84cdf0e10cSrcweir 85cdf0e10cSrcweir rStm >> aClassList; 86cdf0e10cSrcweir rStm >> aTypeList; 87cdf0e10cSrcweir rStm >> aAttrList; 88cdf0e10cSrcweir // Browser 89cdf0e10cSrcweir rStm.ReadByteString( aIdlFileName ); 90cdf0e10cSrcweir rStm.ReadByteString( aHelpFileName ); 91cdf0e10cSrcweir rStm.ReadByteString( aSlotIdFile ); 92cdf0e10cSrcweir rStm.ReadByteString( aModulePrefix ); 93cdf0e10cSrcweir 94cdf0e10cSrcweir // Compiler Daten lesen 95cdf0e10cSrcweir sal_uInt16 nCmpLen; 96cdf0e10cSrcweir rStm >> nCmpLen; 97cdf0e10cSrcweir #ifdef IDL_COMPILER 98cdf0e10cSrcweir DBG_ASSERT( (nVer & IDL_WRITE_MASK) == IDL_WRITE_COMPILER, 99cdf0e10cSrcweir "no idl compiler format" ); 100cdf0e10cSrcweir rStm >> aBeginName; 101cdf0e10cSrcweir rStm >> aEndName; 102cdf0e10cSrcweir rStm >> aNextName; 103cdf0e10cSrcweir #else 104cdf0e10cSrcweir rStm->SeekRel( nCmpLen ); 105cdf0e10cSrcweir #endif 106cdf0e10cSrcweir } 107cdf0e10cSrcweir 108cdf0e10cSrcweir /************************************************************************* 109cdf0e10cSrcweir |* 110cdf0e10cSrcweir |* SvMetaModule::Save() 111cdf0e10cSrcweir |* 112cdf0e10cSrcweir |* Beschreibung 113cdf0e10cSrcweir |* Ersterstellung MM 12.12.94 114cdf0e10cSrcweir |* Letzte Aenderung MM 12.12.94 115cdf0e10cSrcweir |* 116cdf0e10cSrcweir *************************************************************************/ 117cdf0e10cSrcweir void SvMetaModule::Save( SvPersistStream & rStm ) 118cdf0e10cSrcweir { 119cdf0e10cSrcweir SvMetaExtern::Save( rStm ); 120cdf0e10cSrcweir 121cdf0e10cSrcweir rStm << (sal_uInt16)(MODULE_VER | IDL_WRITE_COMPILER); // Version 122cdf0e10cSrcweir 123cdf0e10cSrcweir rStm << aClassList; 124cdf0e10cSrcweir rStm << aTypeList; 125cdf0e10cSrcweir rStm << aAttrList; 126cdf0e10cSrcweir // Browser 127cdf0e10cSrcweir rStm.WriteByteString( aIdlFileName ); 128cdf0e10cSrcweir rStm.WriteByteString( aHelpFileName ); 129cdf0e10cSrcweir rStm.WriteByteString( aSlotIdFile ); 130cdf0e10cSrcweir rStm.WriteByteString( aModulePrefix ); 131cdf0e10cSrcweir 132cdf0e10cSrcweir // Compiler Daten schreiben 133cdf0e10cSrcweir sal_uInt16 nCmpLen = 0; 134cdf0e10cSrcweir sal_uLong nLenPos = rStm.Tell(); 135cdf0e10cSrcweir rStm << nCmpLen; 136cdf0e10cSrcweir #ifdef IDL_COMPILER 137cdf0e10cSrcweir rStm << aBeginName; 138cdf0e10cSrcweir rStm << aEndName; 139cdf0e10cSrcweir rStm << aNextName; 140cdf0e10cSrcweir // Laenge der Compiler Daten schreiben 141cdf0e10cSrcweir sal_uLong nPos = rStm.Tell(); 142cdf0e10cSrcweir rStm.Seek( nLenPos ); 143cdf0e10cSrcweir rStm << (sal_uInt16)( nPos - nLenPos - sizeof( sal_uInt16 ) ); 144cdf0e10cSrcweir rStm.Seek( nPos ); 145cdf0e10cSrcweir #endif 146cdf0e10cSrcweir } 147cdf0e10cSrcweir 148cdf0e10cSrcweir /************************************************************************* 149cdf0e10cSrcweir |* 150cdf0e10cSrcweir |* SvMetaModule::SetName() 151cdf0e10cSrcweir |* 152cdf0e10cSrcweir |* Beschreibung 153cdf0e10cSrcweir |* Ersterstellung MM 12.12.94 154cdf0e10cSrcweir |* Letzte Aenderung MM 12.12.94 155cdf0e10cSrcweir |* 156cdf0e10cSrcweir *************************************************************************/ 157cdf0e10cSrcweir sal_Bool SvMetaModule::SetName( const ByteString & rName, SvIdlDataBase * pBase ) 158cdf0e10cSrcweir { 159cdf0e10cSrcweir if( pBase ) 160cdf0e10cSrcweir { 161cdf0e10cSrcweir if( pBase->GetModule( rName ) ) 162cdf0e10cSrcweir return sal_False; 163cdf0e10cSrcweir } 164cdf0e10cSrcweir return SvMetaExtern::SetName( rName ); 165cdf0e10cSrcweir } 166cdf0e10cSrcweir 167cdf0e10cSrcweir #ifdef IDL_COMPILER 168cdf0e10cSrcweir /************************************************************************* 169cdf0e10cSrcweir |* SvMetaModule::GetNextName() 170cdf0e10cSrcweir |* 171cdf0e10cSrcweir |* Beschreibung 172cdf0e10cSrcweir *************************************************************************/ 173cdf0e10cSrcweir sal_Bool SvMetaModule::FillNextName( SvGlobalName * pName ) 174cdf0e10cSrcweir { 175cdf0e10cSrcweir *pName = aNextName; 176cdf0e10cSrcweir 177cdf0e10cSrcweir if( aNextName < aEndName ) 178cdf0e10cSrcweir { 179cdf0e10cSrcweir ++aNextName; 180cdf0e10cSrcweir bIsModified = sal_True; 181cdf0e10cSrcweir return sal_True; 182cdf0e10cSrcweir } 183cdf0e10cSrcweir return sal_False; 184cdf0e10cSrcweir } 185cdf0e10cSrcweir 186cdf0e10cSrcweir /************************************************************************* 187cdf0e10cSrcweir |* SvMetaModule::ReadSvIdl() 188cdf0e10cSrcweir |* 189cdf0e10cSrcweir |* Beschreibung 190cdf0e10cSrcweir *************************************************************************/ 191cdf0e10cSrcweir void SvMetaModule::ReadAttributesSvIdl( SvIdlDataBase & rBase, 192cdf0e10cSrcweir SvTokenStream & rInStm ) 193cdf0e10cSrcweir { 194cdf0e10cSrcweir SvMetaExtern::ReadAttributesSvIdl( rBase, rInStm ); 195cdf0e10cSrcweir 196cdf0e10cSrcweir aHelpFileName.ReadSvIdl( SvHash_HelpFile(), rInStm ); 197cdf0e10cSrcweir if( aSlotIdFile.ReadSvIdl( SvHash_SlotIdFile(), rInStm ) ) 198cdf0e10cSrcweir { 199cdf0e10cSrcweir sal_uInt32 nTokPos = rInStm.Tell(); 200cdf0e10cSrcweir if( !rBase.ReadIdFile( String::CreateFromAscii( aSlotIdFile.GetBuffer() ) ) ) 201cdf0e10cSrcweir { 202cdf0e10cSrcweir ByteString aStr = "cannot read file: "; 203cdf0e10cSrcweir aStr += aSlotIdFile; 204cdf0e10cSrcweir rBase.SetError( aStr, rInStm.GetToken() ); 205cdf0e10cSrcweir rBase.WriteError( rInStm ); 206cdf0e10cSrcweir 207cdf0e10cSrcweir rInStm.Seek( nTokPos ); 208cdf0e10cSrcweir } 209cdf0e10cSrcweir } 210cdf0e10cSrcweir aTypeLibFile.ReadSvIdl( SvHash_TypeLibFile(), rInStm ); 211cdf0e10cSrcweir aModulePrefix.ReadSvIdl( SvHash_ModulePrefix(), rInStm ); 212cdf0e10cSrcweir } 213cdf0e10cSrcweir 214cdf0e10cSrcweir /************************************************************************* 215cdf0e10cSrcweir |* SvMetaModule::WriteAttributesSvIdl() 216cdf0e10cSrcweir |* 217cdf0e10cSrcweir |* Beschreibung 218cdf0e10cSrcweir *************************************************************************/ 219cdf0e10cSrcweir void SvMetaModule::WriteAttributesSvIdl( SvIdlDataBase & rBase, 220cdf0e10cSrcweir SvStream & rOutStm, 221cdf0e10cSrcweir sal_uInt16 nTab ) 222cdf0e10cSrcweir { 223cdf0e10cSrcweir SvMetaExtern::WriteAttributesSvIdl( rBase, rOutStm, nTab ); 224cdf0e10cSrcweir if( aTypeLibFile.Len() || aSlotIdFile.Len() || aTypeLibFile.Len() ) 225cdf0e10cSrcweir { 226cdf0e10cSrcweir if( aHelpFileName.Len() ) 227cdf0e10cSrcweir { 228cdf0e10cSrcweir WriteTab( rOutStm, nTab ); 229cdf0e10cSrcweir aHelpFileName.WriteSvIdl( SvHash_HelpFile(), rOutStm, nTab +1 ); 230cdf0e10cSrcweir rOutStm << ';' << endl; 231cdf0e10cSrcweir } 232cdf0e10cSrcweir if( aSlotIdFile.Len() ) 233cdf0e10cSrcweir { 234cdf0e10cSrcweir WriteTab( rOutStm, nTab ); 235cdf0e10cSrcweir aSlotIdFile.WriteSvIdl( SvHash_SlotIdFile(), rOutStm, nTab +1 ); 236cdf0e10cSrcweir rOutStm << ';' << endl; 237cdf0e10cSrcweir } 238cdf0e10cSrcweir if( aTypeLibFile.Len() ) 239cdf0e10cSrcweir { 240cdf0e10cSrcweir WriteTab( rOutStm, nTab ); 241cdf0e10cSrcweir aTypeLibFile.WriteSvIdl( SvHash_TypeLibFile(), rOutStm, nTab +1 ); 242cdf0e10cSrcweir rOutStm << ';' << endl; 243cdf0e10cSrcweir } 244cdf0e10cSrcweir } 245cdf0e10cSrcweir } 246cdf0e10cSrcweir 247cdf0e10cSrcweir /************************************************************************* 248cdf0e10cSrcweir |* SvMetaModule::ReadContextSvIdl() 249cdf0e10cSrcweir |* 250cdf0e10cSrcweir |* Beschreibung 251cdf0e10cSrcweir *************************************************************************/ 252cdf0e10cSrcweir void SvMetaModule::ReadContextSvIdl( SvIdlDataBase & rBase, 253cdf0e10cSrcweir SvTokenStream & rInStm ) 254cdf0e10cSrcweir { 255cdf0e10cSrcweir sal_uInt32 nTokPos = rInStm.Tell(); 256cdf0e10cSrcweir if( rInStm.GetToken()->Is( SvHash_interface() ) 257cdf0e10cSrcweir || rInStm.GetToken()->Is( SvHash_shell() ) ) 258cdf0e10cSrcweir { 259cdf0e10cSrcweir SvMetaClassRef aClass = new SvMetaClass(); 260cdf0e10cSrcweir if( aClass->ReadSvIdl( rBase, rInStm ) ) 261cdf0e10cSrcweir { 262cdf0e10cSrcweir aClassList.Append( aClass ); 263cdf0e10cSrcweir // Global bekanntgeben 264cdf0e10cSrcweir rBase.GetClassList().Append( aClass ); 265cdf0e10cSrcweir } 266cdf0e10cSrcweir } 267cdf0e10cSrcweir else if( rInStm.GetToken()->Is( SvHash_enum() ) ) 268cdf0e10cSrcweir { 269cdf0e10cSrcweir SvMetaTypeEnumRef aEnum = new SvMetaTypeEnum(); 270cdf0e10cSrcweir 271cdf0e10cSrcweir if( aEnum->ReadSvIdl( rBase, rInStm ) ) 272cdf0e10cSrcweir { 273cdf0e10cSrcweir // Im Modul deklariert 274cdf0e10cSrcweir aTypeList.Append( aEnum ); 275cdf0e10cSrcweir // Global bekanntgeben 276cdf0e10cSrcweir rBase.GetTypeList().Append( aEnum ); 277cdf0e10cSrcweir } 278cdf0e10cSrcweir } 279cdf0e10cSrcweir else if( rInStm.GetToken()->Is( SvHash_item() ) 280cdf0e10cSrcweir || rInStm.GetToken()->Is( SvHash_struct() ) 281cdf0e10cSrcweir || rInStm.GetToken()->Is( SvHash_typedef() ) ) 282cdf0e10cSrcweir { 283cdf0e10cSrcweir SvMetaTypeRef xItem = new SvMetaType(); 284cdf0e10cSrcweir 285cdf0e10cSrcweir if( xItem->ReadSvIdl( rBase, rInStm ) ) 286cdf0e10cSrcweir { 287cdf0e10cSrcweir // Im Modul deklariert 288cdf0e10cSrcweir aTypeList.Append( xItem ); 289cdf0e10cSrcweir // Global bekanntgeben 290cdf0e10cSrcweir rBase.GetTypeList().Append( xItem ); 291cdf0e10cSrcweir } 292cdf0e10cSrcweir } 293cdf0e10cSrcweir else if( rInStm.GetToken()->Is( SvHash_include() ) ) 294cdf0e10cSrcweir { 295cdf0e10cSrcweir sal_Bool bOk = sal_False; 296cdf0e10cSrcweir rInStm.GetToken_Next(); 297cdf0e10cSrcweir SvToken * pTok = rInStm.GetToken_Next(); 298cdf0e10cSrcweir if( pTok->IsString() ) 299cdf0e10cSrcweir { 300cdf0e10cSrcweir DirEntry aFullName( String::CreateFromAscii( pTok->GetString().GetBuffer() ) ); 301cdf0e10cSrcweir rBase.StartNewFile( aFullName.GetFull() ); 302cdf0e10cSrcweir if( aFullName.Find( rBase.GetPath() ) ) 303cdf0e10cSrcweir { 304cdf0e10cSrcweir SvTokenStream aTokStm( aFullName.GetFull() ); 305cdf0e10cSrcweir if( SVSTREAM_OK == aTokStm.GetStream().GetError() ) 306cdf0e10cSrcweir { 307cdf0e10cSrcweir // Fehler aus alter Datei retten 308cdf0e10cSrcweir SvIdlError aOldErr = rBase.GetError(); 309cdf0e10cSrcweir // Fehler zuruecksetzen 310cdf0e10cSrcweir rBase.SetError( SvIdlError() ); 311cdf0e10cSrcweir 312cdf0e10cSrcweir sal_uInt32 nBeginPos = 0xFFFFFFFF; // kann mit Tell nicht vorkommen 313cdf0e10cSrcweir while( nBeginPos != aTokStm.Tell() ) 314cdf0e10cSrcweir { 315cdf0e10cSrcweir nBeginPos = aTokStm.Tell(); 316cdf0e10cSrcweir ReadContextSvIdl( rBase, aTokStm ); 317cdf0e10cSrcweir aTokStm.ReadDelemiter(); 318cdf0e10cSrcweir } 319cdf0e10cSrcweir bOk = aTokStm.GetToken()->IsEof(); 320cdf0e10cSrcweir if( !bOk ) 321cdf0e10cSrcweir { 322cdf0e10cSrcweir rBase.WriteError( aTokStm ); 323cdf0e10cSrcweir } 324cdf0e10cSrcweir // Fehler aus alter Datei wieder herstellen 325cdf0e10cSrcweir rBase.SetError( aOldErr ); 326cdf0e10cSrcweir } 327cdf0e10cSrcweir else 328cdf0e10cSrcweir { 329cdf0e10cSrcweir ByteString aStr = "cannot open file: "; 330cdf0e10cSrcweir aStr += ByteString( aFullName.GetFull(), RTL_TEXTENCODING_UTF8 ); 331cdf0e10cSrcweir rBase.SetError( aStr, pTok ); 332cdf0e10cSrcweir } 333cdf0e10cSrcweir } 334cdf0e10cSrcweir else 335cdf0e10cSrcweir { 336cdf0e10cSrcweir ByteString aStr = "cannot find file: "; 337cdf0e10cSrcweir aStr += ByteString( aFullName.GetFull(), RTL_TEXTENCODING_UTF8 ); 338cdf0e10cSrcweir rBase.SetError( aStr, pTok ); 339cdf0e10cSrcweir } 340cdf0e10cSrcweir } 341cdf0e10cSrcweir if( !bOk ) 342cdf0e10cSrcweir rInStm.Seek( nTokPos ); 343cdf0e10cSrcweir } 344cdf0e10cSrcweir else 345cdf0e10cSrcweir { 346cdf0e10cSrcweir SvMetaSlotRef xSlot = new SvMetaSlot(); 347cdf0e10cSrcweir 348cdf0e10cSrcweir if( xSlot->ReadSvIdl( rBase, rInStm ) ) 349cdf0e10cSrcweir { 350cdf0e10cSrcweir if( xSlot->Test( rBase, rInStm ) ) 351cdf0e10cSrcweir { 352cdf0e10cSrcweir // Im Modul deklariert 353cdf0e10cSrcweir aAttrList.Append( xSlot ); 354cdf0e10cSrcweir // Global bekanntgeben 355cdf0e10cSrcweir rBase.AppendAttr( xSlot ); 356cdf0e10cSrcweir } 357cdf0e10cSrcweir } 358cdf0e10cSrcweir } 359cdf0e10cSrcweir } 360cdf0e10cSrcweir 361cdf0e10cSrcweir /************************************************************************* 362cdf0e10cSrcweir |* SvMetaModule::WriteContextSvIdl() 363cdf0e10cSrcweir |* 364cdf0e10cSrcweir |* Beschreibung 365cdf0e10cSrcweir *************************************************************************/ 366cdf0e10cSrcweir void SvMetaModule::WriteContextSvIdl( SvIdlDataBase & rBase, 367cdf0e10cSrcweir SvStream & rOutStm, 368cdf0e10cSrcweir sal_uInt16 nTab ) 369cdf0e10cSrcweir { 370cdf0e10cSrcweir SvMetaExtern::WriteContextSvIdl( rBase, rOutStm, nTab ); 371cdf0e10cSrcweir sal_uLong n; 372cdf0e10cSrcweir for( n = 0; n < aTypeList.Count(); n++ ) 373cdf0e10cSrcweir { 374cdf0e10cSrcweir WriteTab( rOutStm, nTab ); 375cdf0e10cSrcweir aTypeList.GetObject( n )->WriteSvIdl( rBase, rOutStm, nTab ); 376cdf0e10cSrcweir } 377cdf0e10cSrcweir rOutStm << endl; 378cdf0e10cSrcweir for( n = 0; n < aAttrList.Count(); n++ ) 379cdf0e10cSrcweir { 380cdf0e10cSrcweir WriteTab( rOutStm, nTab ); 381cdf0e10cSrcweir aAttrList.GetObject( n )->WriteSvIdl( rBase, rOutStm, nTab ); 382cdf0e10cSrcweir } 383cdf0e10cSrcweir rOutStm << endl; 384cdf0e10cSrcweir for( n = 0; n < aClassList.Count(); n++ ) 385cdf0e10cSrcweir { 386cdf0e10cSrcweir WriteTab( rOutStm, nTab ); 387cdf0e10cSrcweir aClassList.GetObject( n )->WriteSvIdl( rBase, rOutStm, nTab ); 388cdf0e10cSrcweir } 389cdf0e10cSrcweir } 390cdf0e10cSrcweir 391cdf0e10cSrcweir /************************************************************************* 392cdf0e10cSrcweir |* 393cdf0e10cSrcweir |* SvMetaModule::ReadSvIdl() 394cdf0e10cSrcweir |* 395cdf0e10cSrcweir |* Beschreibung 396cdf0e10cSrcweir |* 397cdf0e10cSrcweir *************************************************************************/ 398cdf0e10cSrcweir sal_Bool SvMetaModule::ReadSvIdl( SvIdlDataBase & rBase, SvTokenStream & rInStm ) 399cdf0e10cSrcweir { 400cdf0e10cSrcweir bIsModified = sal_True; // bisher immer wenn Compiler laueft 401cdf0e10cSrcweir 402cdf0e10cSrcweir sal_uInt32 nTokPos = rInStm.Tell(); 403cdf0e10cSrcweir SvToken * pTok = rInStm.GetToken_Next(); 404cdf0e10cSrcweir sal_Bool bOk = sal_False; 405cdf0e10cSrcweir bOk = pTok->Is( SvHash_module() ); 406cdf0e10cSrcweir if( bOk ) 407cdf0e10cSrcweir { 408cdf0e10cSrcweir pTok = rInStm.GetToken_Next(); 409cdf0e10cSrcweir if( pTok->IsString() ) 410cdf0e10cSrcweir bOk = aBeginName.MakeId( String::CreateFromAscii( pTok->GetString().GetBuffer() ) ); 411cdf0e10cSrcweir } 412cdf0e10cSrcweir rInStm.ReadDelemiter(); 413cdf0e10cSrcweir if( bOk ) 414cdf0e10cSrcweir { 415cdf0e10cSrcweir pTok = rInStm.GetToken_Next(); 416cdf0e10cSrcweir if( pTok->IsString() ) 417cdf0e10cSrcweir bOk = aEndName.MakeId( String::CreateFromAscii( pTok->GetString().GetBuffer() ) ); 418cdf0e10cSrcweir } 419cdf0e10cSrcweir rInStm.ReadDelemiter(); 420cdf0e10cSrcweir if( bOk ) 421cdf0e10cSrcweir { 422cdf0e10cSrcweir aNextName = aBeginName; 423cdf0e10cSrcweir 424cdf0e10cSrcweir rBase.Push( this ); // auf den Context Stack 425cdf0e10cSrcweir 426cdf0e10cSrcweir if( ReadNameSvIdl( rBase, rInStm ) ) 427cdf0e10cSrcweir { 428cdf0e10cSrcweir // Zeiger auf sich selbst setzen 429cdf0e10cSrcweir SetModule( rBase ); 430cdf0e10cSrcweir bOk = SvMetaName::ReadSvIdl( rBase, rInStm ); 431cdf0e10cSrcweir } 432cdf0e10cSrcweir rBase.GetStack().Pop(); // und runter 433cdf0e10cSrcweir } 434cdf0e10cSrcweir if( !bOk ) 435cdf0e10cSrcweir rInStm.Seek( nTokPos ); 436cdf0e10cSrcweir return bOk; 437cdf0e10cSrcweir } 438cdf0e10cSrcweir 439cdf0e10cSrcweir /************************************************************************* 440cdf0e10cSrcweir |* 441cdf0e10cSrcweir |* SvMetaModule::WriteSvIdl() 442cdf0e10cSrcweir |* 443cdf0e10cSrcweir |* Beschreibung 444cdf0e10cSrcweir |* 445cdf0e10cSrcweir *************************************************************************/ 446cdf0e10cSrcweir void SvMetaModule::WriteSvIdl( SvIdlDataBase & rBase, SvStream & rOutStm, 447cdf0e10cSrcweir sal_uInt16 nTab ) 448cdf0e10cSrcweir { 449cdf0e10cSrcweir rOutStm << SvHash_module()->GetName().GetBuffer() << endl 450cdf0e10cSrcweir << '\"'; 451cdf0e10cSrcweir rOutStm.WriteByteString( aBeginName.GetHexName() ); 452cdf0e10cSrcweir rOutStm << '\"' << endl << '\"'; 453cdf0e10cSrcweir rOutStm.WriteByteString( aEndName.GetHexName() ); 454cdf0e10cSrcweir rOutStm << '\"' << endl; 455cdf0e10cSrcweir SvMetaExtern::WriteSvIdl( rBase, rOutStm, nTab ); 456cdf0e10cSrcweir } 457cdf0e10cSrcweir 458cdf0e10cSrcweir /************************************************************************* 459cdf0e10cSrcweir |* SvMetaModule::WriteSfx() 460cdf0e10cSrcweir *************************************************************************/ 461cdf0e10cSrcweir void SvMetaModule::WriteSfx( SvIdlDataBase & rBase, SvStream & rOutStm ) 462cdf0e10cSrcweir { 463cdf0e10cSrcweir for( sal_uLong n = 0; n < aClassList.Count(); n++ ) 464cdf0e10cSrcweir { 465cdf0e10cSrcweir SvMetaClass * pClass = aClassList.GetObject( n ); 466cdf0e10cSrcweir pClass->WriteSfx( rBase, rOutStm ); 467cdf0e10cSrcweir } 468cdf0e10cSrcweir } 469cdf0e10cSrcweir 470cdf0e10cSrcweir void SvMetaModule::WriteHelpIds( SvIdlDataBase & rBase, SvStream & rOutStm, 471cdf0e10cSrcweir Table* pTable ) 472cdf0e10cSrcweir { 473cdf0e10cSrcweir for( sal_uLong n = 0; n < aClassList.Count(); n++ ) 474cdf0e10cSrcweir { 475cdf0e10cSrcweir SvMetaClass * pClass = aClassList.GetObject( n ); 476cdf0e10cSrcweir pClass->WriteHelpIds( rBase, rOutStm, pTable ); 477cdf0e10cSrcweir } 478cdf0e10cSrcweir } 479cdf0e10cSrcweir 480cdf0e10cSrcweir /************************************************************************* 481cdf0e10cSrcweir |* SvMetaModule::WriteAttributes() 482cdf0e10cSrcweir *************************************************************************/ 483cdf0e10cSrcweir void SvMetaModule::WriteAttributes( SvIdlDataBase & rBase, 484cdf0e10cSrcweir SvStream & rOutStm, 485cdf0e10cSrcweir sal_uInt16 nTab, 486cdf0e10cSrcweir WriteType nT, WriteAttribute nA ) 487cdf0e10cSrcweir { 488cdf0e10cSrcweir SvMetaExtern::WriteAttributes( rBase, rOutStm, nTab, nT, nA ); 489cdf0e10cSrcweir if( aHelpFileName.Len() ) 490cdf0e10cSrcweir { 491cdf0e10cSrcweir WriteTab( rOutStm, nTab ); 492cdf0e10cSrcweir rOutStm << "// class SvMetaModule" << endl; 493cdf0e10cSrcweir WriteTab( rOutStm, nTab ); 494cdf0e10cSrcweir rOutStm << "helpfile(\"" << aHelpFileName.GetBuffer() << "\");" << endl; 495cdf0e10cSrcweir } 496cdf0e10cSrcweir } 497cdf0e10cSrcweir 498cdf0e10cSrcweir /************************************************************************* 499cdf0e10cSrcweir |* SvMetaModule::WriteSbx() 500cdf0e10cSrcweir *************************************************************************/ 501cdf0e10cSrcweir /* 502cdf0e10cSrcweir void SvMetaModule::WriteSbx( SvIdlDataBase & rBase, SvStream & rOutStm, 503cdf0e10cSrcweir SvNamePosList & rList ) 504cdf0e10cSrcweir { 505cdf0e10cSrcweir for( sal_uLong n = 0; n < aClassList.Count(); n++ ) 506cdf0e10cSrcweir { 507cdf0e10cSrcweir SvMetaClass * pClass = aClassList.GetObject( n ); 508cdf0e10cSrcweir if( !pClass->IsShell() && pClass->GetAutomation() ) 509cdf0e10cSrcweir { 510cdf0e10cSrcweir rList.Insert( new SvNamePos( pClass->GetUUId(), rOutStm.Tell() ), 511cdf0e10cSrcweir LIST_APPEND ); 512cdf0e10cSrcweir SbxObjectRef xSbxObj = new SbxObject( pClass->GetName() ); 513cdf0e10cSrcweir pClass->FillSbxObject( rBase, xSbxObj ); 514cdf0e10cSrcweir xSbxObj->Store( rOutStm ); 515cdf0e10cSrcweir } 516cdf0e10cSrcweir } 517cdf0e10cSrcweir } 518cdf0e10cSrcweir */ 519cdf0e10cSrcweir 520cdf0e10cSrcweir /************************************************************************* 521cdf0e10cSrcweir |* SvMetaModule::Write() 522cdf0e10cSrcweir *************************************************************************/ 523cdf0e10cSrcweir void SvMetaModule::Write( SvIdlDataBase & rBase, SvStream & rOutStm, 524cdf0e10cSrcweir sal_uInt16 nTab, 525cdf0e10cSrcweir WriteType nT, WriteAttribute nA ) 526cdf0e10cSrcweir { 527cdf0e10cSrcweir switch ( nT ) 528cdf0e10cSrcweir { 529cdf0e10cSrcweir case WRITE_ODL: 530cdf0e10cSrcweir { 531cdf0e10cSrcweir if( aSlotIdFile.Len() ) 532cdf0e10cSrcweir { 533cdf0e10cSrcweir WriteTab( rOutStm, nTab ); 534cdf0e10cSrcweir rOutStm << "#include \"" << aSlotIdFile.GetBuffer() << '"' << endl << endl; 535cdf0e10cSrcweir } 536cdf0e10cSrcweir SvMetaExtern::Write( rBase, rOutStm, nTab, nT, nA ); 537cdf0e10cSrcweir rOutStm << endl; 538cdf0e10cSrcweir WriteTab( rOutStm, nTab ); 539cdf0e10cSrcweir rOutStm << "library " << GetName().GetBuffer() << endl; 540cdf0e10cSrcweir WriteTab( rOutStm, nTab ); 541cdf0e10cSrcweir rOutStm << '{' << endl; 542cdf0e10cSrcweir WriteTab( rOutStm, nTab ); 543cdf0e10cSrcweir rOutStm << "importlib(\"STDOLE.TLB\");" << endl; 544cdf0e10cSrcweir 545cdf0e10cSrcweir /* 546cdf0e10cSrcweir for( sal_uLong n = 0; n < aTypeList.Count(); n++ ) 547cdf0e10cSrcweir { 548cdf0e10cSrcweir SvMetaType * pType = aTypeList.GetObject( n ); 549cdf0e10cSrcweir if( !pType ->Write( rBase, rOutStm, nTab +1, nT, nA ) ) 550cdf0e10cSrcweir return sal_False; 551cdf0e10cSrcweir } 552cdf0e10cSrcweir */ 553cdf0e10cSrcweir /* 554cdf0e10cSrcweir for( sal_uLong n = 0; n < rBase.GetModuleList().Count(); n++ ) 555cdf0e10cSrcweir { 556cdf0e10cSrcweir SvMetaModule * pModule = rBase.GetModuleList().GetObject( n ); 557cdf0e10cSrcweir const SvMetaTypeMemberList &rTypeList = pModule->GetTypeList(); 558cdf0e10cSrcweir for( sal_uLong n = 0; n < rTypeList.Count(); n++ ) 559cdf0e10cSrcweir { 560cdf0e10cSrcweir SvMetaType * pType = rTypeList.GetObject( n ); 561cdf0e10cSrcweir pType->Write( rBase, rOutStm, nTab +1, nT, nA ); 562cdf0e10cSrcweir } 563cdf0e10cSrcweir } 564cdf0e10cSrcweir */ 565cdf0e10cSrcweir 566cdf0e10cSrcweir for( sal_uLong n = 0; n < aClassList.Count(); n++ ) 567cdf0e10cSrcweir { 568cdf0e10cSrcweir SvMetaClass * pClass = aClassList.GetObject( n ); 569cdf0e10cSrcweir if( !pClass->IsShell() && pClass->GetAutomation() ) 570cdf0e10cSrcweir { 571cdf0e10cSrcweir WriteTab( rOutStm, nTab ); 572cdf0e10cSrcweir WriteStars( rOutStm ); 573cdf0e10cSrcweir pClass->Write( rBase, rOutStm, nTab +1, nT, nA ); 574cdf0e10cSrcweir if( n +1 < aClassList.Count() ) 575cdf0e10cSrcweir rOutStm << endl; 576cdf0e10cSrcweir } 577cdf0e10cSrcweir } 578cdf0e10cSrcweir 579cdf0e10cSrcweir rOutStm << '}' << endl; 580cdf0e10cSrcweir } 581cdf0e10cSrcweir break; 582cdf0e10cSrcweir case WRITE_DOCU: 583cdf0e10cSrcweir { 584cdf0e10cSrcweir rOutStm << "SvIDL interface documentation" << endl << endl; 585cdf0e10cSrcweir rOutStm << "<MODULE>" << endl << GetName().GetBuffer() << endl; 586cdf0e10cSrcweir WriteDescription( rOutStm ); 587cdf0e10cSrcweir rOutStm << "</MODULE>" << endl << endl; 588cdf0e10cSrcweir 589cdf0e10cSrcweir rOutStm << "<CLASSES>" << endl; 590cdf0e10cSrcweir for( sal_uLong n = 0; n < aClassList.Count(); n++ ) 591cdf0e10cSrcweir { 592cdf0e10cSrcweir SvMetaClass * pClass = aClassList.GetObject( n ); 593cdf0e10cSrcweir if( !pClass->IsShell() ) 594cdf0e10cSrcweir { 595cdf0e10cSrcweir rOutStm << pClass->GetName().GetBuffer(); 596cdf0e10cSrcweir SvMetaClass* pSC = pClass->GetSuperClass(); 597cdf0e10cSrcweir if( pSC ) 598cdf0e10cSrcweir rOutStm << " : " << pSC->GetName().GetBuffer(); 599cdf0e10cSrcweir 600cdf0e10cSrcweir // Importierte Klassen 601cdf0e10cSrcweir const SvClassElementMemberList& rClassList = pClass->GetClassList(); 602cdf0e10cSrcweir if ( rClassList.Count() ) 603cdf0e10cSrcweir { 604cdf0e10cSrcweir rOutStm << " ( "; 605cdf0e10cSrcweir 606cdf0e10cSrcweir for( sal_uLong m=0; m<rClassList.Count(); m++ ) 607cdf0e10cSrcweir { 608cdf0e10cSrcweir SvClassElement *pEle = rClassList.GetObject(m); 609cdf0e10cSrcweir SvMetaClass *pCl = pEle->GetClass(); 610cdf0e10cSrcweir rOutStm << pCl->GetName().GetBuffer(); 611cdf0e10cSrcweir if ( m+1 == rClassList.Count() ) 612cdf0e10cSrcweir rOutStm << " )"; 613cdf0e10cSrcweir else 614cdf0e10cSrcweir rOutStm << " , "; 615cdf0e10cSrcweir } 616cdf0e10cSrcweir } 617cdf0e10cSrcweir 618cdf0e10cSrcweir rOutStm << endl; 619cdf0e10cSrcweir } 620cdf0e10cSrcweir } 621cdf0e10cSrcweir rOutStm << "</CLASSES>" << endl << endl; 622cdf0e10cSrcweir // kein Break! 623cdf0e10cSrcweir } 624cdf0e10cSrcweir 625cdf0e10cSrcweir case WRITE_C_SOURCE: 626cdf0e10cSrcweir case WRITE_C_HEADER: 627cdf0e10cSrcweir { 628cdf0e10cSrcweir for( sal_uLong n = 0; n < aClassList.Count(); n++ ) 629cdf0e10cSrcweir { 630cdf0e10cSrcweir SvMetaClass * pClass = aClassList.GetObject( n ); 631cdf0e10cSrcweir if( !pClass->IsShell() /* && pClass->GetAutomation() */ ) 632cdf0e10cSrcweir pClass->Write( rBase, rOutStm, nTab, nT, nA ); 633cdf0e10cSrcweir } 634cdf0e10cSrcweir } 635cdf0e10cSrcweir break; 636cdf0e10cSrcweir 637cdf0e10cSrcweir default: 638cdf0e10cSrcweir break; 639cdf0e10cSrcweir } 640cdf0e10cSrcweir } 641cdf0e10cSrcweir 642cdf0e10cSrcweir /************************************************************************* 643cdf0e10cSrcweir |* SvMetaModule::WriteSrc() 644cdf0e10cSrcweir *************************************************************************/ 645cdf0e10cSrcweir void SvMetaModule::WriteSrc( SvIdlDataBase & rBase, SvStream & rOutStm, 646cdf0e10cSrcweir Table * pTable ) 647cdf0e10cSrcweir { 648cdf0e10cSrcweir // rOutStm << "#pragma CHARSET IBMPC" << endl; 649cdf0e10cSrcweir if( aSlotIdFile.Len() ) 650cdf0e10cSrcweir rOutStm << "//#include <" << aSlotIdFile.GetBuffer() << '>' << endl; 651cdf0e10cSrcweir for( sal_uLong n = 0; n < aClassList.Count(); n++ ) 652cdf0e10cSrcweir { 653cdf0e10cSrcweir aClassList.GetObject( n )->WriteSrc( rBase, rOutStm, pTable ); 654cdf0e10cSrcweir } 655cdf0e10cSrcweir } 656cdf0e10cSrcweir 657cdf0e10cSrcweir /************************************************************************* 658cdf0e10cSrcweir |* SvMetaModule::WriteHxx() 659cdf0e10cSrcweir *************************************************************************/ 660cdf0e10cSrcweir void SvMetaModule::WriteHxx( SvIdlDataBase & rBase, SvStream & rOutStm, 661cdf0e10cSrcweir sal_uInt16 nTab ) 662cdf0e10cSrcweir { 663cdf0e10cSrcweir for( sal_uLong n = 0; n < aClassList.Count(); n++ ) 664cdf0e10cSrcweir { 665cdf0e10cSrcweir SvMetaClass * pClass = aClassList.GetObject( n ); 666cdf0e10cSrcweir pClass->WriteHxx( rBase, rOutStm, nTab ); 667cdf0e10cSrcweir } 668cdf0e10cSrcweir } 669cdf0e10cSrcweir 670cdf0e10cSrcweir /************************************************************************* 671cdf0e10cSrcweir |* SvMetaModule::WriteCxx() 672cdf0e10cSrcweir *************************************************************************/ 673cdf0e10cSrcweir void SvMetaModule::WriteCxx( SvIdlDataBase & rBase, SvStream & rOutStm, 674cdf0e10cSrcweir sal_uInt16 nTab ) 675cdf0e10cSrcweir { 676cdf0e10cSrcweir for( sal_uLong n = 0; n < aClassList.Count(); n++ ) 677cdf0e10cSrcweir { 678cdf0e10cSrcweir SvMetaClass * pClass = aClassList.GetObject( n ); 679cdf0e10cSrcweir pClass->WriteCxx( rBase, rOutStm, nTab ); 680cdf0e10cSrcweir } 681cdf0e10cSrcweir } 682cdf0e10cSrcweir 683cdf0e10cSrcweir #endif // IDL_COMPILER 684cdf0e10cSrcweir 685