/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_idl.hxx" #include #include #include #include #include #include #include #include /****************** SvMetaObject *****************************************/ SV_IMPL_META_FACTORY1( SvMetaObject, SvRttiBase ) /************************************************************************* |* SvMetaObject::SvMetaObject() |* |* Beschreibung *************************************************************************/ SvMetaObject::SvMetaObject() { } void SvMetaObject::Load( SvPersistStream & ) { } void SvMetaObject::Save( SvPersistStream & ) { } /************************************************************************* |* SvMetaObject::WriteTab() |* |* Beschreibung *************************************************************************/ #ifdef IDL_COMPILER void SvMetaObject::WriteTab( SvStream & rOutStm, sal_uInt16 nTab ) { while( nTab-- ) rOutStm << " "; // rOutStm << '\t'; } /************************************************************************* |* SvMetaObject::WriteStart() |* |* Beschreibung *************************************************************************/ void SvMetaObject::WriteStars( SvStream & rOutStm ) { rOutStm << '/'; for( int i = 6; i > 0; i-- ) rOutStm << "**********"; rOutStm << '/' << endl; } /************************************************************************* |* SvMetaObject::TestAndSeekSpaceOnly() |* |* Beschreibung *************************************************************************/ sal_Bool SvMetaObject::TestAndSeekSpaceOnly( SvStream & rOutStm, sal_uLong nBegPos ) { // keine leeren Klammern schreiben sal_uLong nPos = rOutStm.Tell(); rOutStm.Seek( nBegPos ); sal_Bool bOnlySpace = sal_True; while( bOnlySpace && rOutStm.Tell() < nPos ) { char c; rOutStm >> c; if( !isspace( c ) ) bOnlySpace = sal_False; } if( bOnlySpace ) // nichts geschrieben rOutStm.Seek( nBegPos ); else rOutStm.Seek( nPos ); return bOnlySpace; } /************************************************************************* |* SvMetaObject::Back2Delemitter() |* |* Beschreibung *************************************************************************/ void SvMetaObject::Back2Delemitter( SvStream & rOutStm ) { // keine leeren Klammern schreiben sal_uLong nPos = rOutStm.Tell(); rOutStm.SeekRel( -1 ); char c = 0; rOutStm >> c; while( isspace( c ) && rOutStm.Tell() != 1 ) { rOutStm.SeekRel( -2 ); rOutStm >> c; } if( c == ';' || c == ',' ) rOutStm.SeekRel( -1 ); else rOutStm.Seek( nPos ); } /************************************************************************* |* SvMetaObject::ReadSvIdl() |* |* Beschreibung *************************************************************************/ sal_Bool SvMetaObject::ReadSvIdl( SvIdlDataBase &, SvTokenStream & ) { return sal_False; } /************************************************************************* |* SvMetaObject::WriteSvIdl() |* |* Beschreibung *************************************************************************/ void SvMetaObject::WriteSvIdl( SvIdlDataBase &, SvStream &, sal_uInt16 /*nTab */ ) { } /************************************************************************* |* SvMetaObject::Write() |* |* Beschreibung *************************************************************************/ void SvMetaObject::Write( SvIdlDataBase &, SvStream &, sal_uInt16 /*nTab */, WriteType, WriteAttribute ) { } /************************************************************************* |* SvMetaObject::WriteCxx() |* |* Beschreibung *************************************************************************/ void SvMetaObject::WriteCxx( SvIdlDataBase &, SvStream &, sal_uInt16 /*nTab */ ) { } /************************************************************************* |* SvMetaObject::WriteHxx() |* |* Beschreibung *************************************************************************/ void SvMetaObject::WriteHxx( SvIdlDataBase &, SvStream &, sal_uInt16 /*nTab */ ) { } #endif /****************** SvMetaName *****************************************/ SV_IMPL_META_FACTORY1( SvMetaName, SvMetaObject ); /************************************************************************* |* SvMetaName::SvMetaName() |* |* Beschreibung *************************************************************************/ SvMetaName::SvMetaName() { } void SvMetaName::Load( SvPersistStream & rStm ) { SvMetaObject::Load( rStm ); sal_uInt8 nMask; rStm >> nMask; if( nMask >= 0x20 ) { rStm.SetError( SVSTREAM_FILEFORMAT_ERROR ); DBG_ERROR( "wrong format" ); return; } if( nMask & 0x01 ) rStm >> aName; if( nMask & 0x02 ) rStm >> aHelpContext; if( nMask & 0x04 ) rStm >> aHelpText; if( nMask & 0x08 ) rStm >> aConfigName; if( nMask & 0x10 ) rStm >> aDescription; } void SvMetaName::Save( SvPersistStream & rStm ) { SvMetaObject::Save( rStm ); sal_uInt8 nMask = 0; if( aName.IsSet() ) nMask |= 0x01; if( aHelpContext.IsSet() ) nMask |= 0x02; if( aHelpText.IsSet() ) nMask |= 0x04; if( aConfigName.IsSet() ) nMask |= 0x08; if( aDescription.IsSet() ) nMask |= 0x10; rStm << nMask; if( nMask & 0x01 ) rStm << aName; if( nMask & 0x02 ) rStm << aHelpContext; if( nMask & 0x04 ) rStm << aHelpText; if( nMask & 0x08 ) rStm << aConfigName; if( nMask & 0x10 ) rStm << aDescription; } /************************************************************************* |* |* |* Beschreibung *************************************************************************/ sal_Bool SvMetaName::SetName( const ByteString & rName, SvIdlDataBase * ) { aName = rName; return sal_True; } #ifdef IDL_COMPILER /************************************************************************* |* SvMetaName::ReadNameSvIdl() |* |* Beschreibung *************************************************************************/ sal_Bool SvMetaName::ReadNameSvIdl( SvIdlDataBase & rBase, SvTokenStream & rInStm ) { sal_uInt32 nTokPos = rInStm.Tell(); SvToken * pTok = rInStm.GetToken_Next(); // Modulnamen lesen if( pTok->IsIdentifier() ) if( SetName( pTok->GetString(), &rBase ) ) return sal_True; rInStm.Seek( nTokPos ); return sal_False; } /************************************************************************* |* SvMetaName::ReadSvIdl() |* |* Beschreibung *************************************************************************/ void SvMetaName::ReadAttributesSvIdl( SvIdlDataBase & rBase, SvTokenStream & rInStm ) { sal_uInt32 nTokPos = rInStm.Tell(); if( aName.ReadSvIdl( SvHash_Name(), rInStm ) ) { if( !SetName( aName, &rBase ) ) rInStm.Seek( nTokPos ); } aHelpContext.ReadSvIdl( rBase, SvHash_HelpContext(), rInStm ); aHelpText.ReadSvIdl( rBase, rInStm ); aConfigName.ReadSvIdl( SvHash_ConfigName(), rInStm ); aDescription.ReadSvIdl( SvHash_Description(), rInStm ); /* aHelpContext.ReadSvIdl( GetModule()->GetInfo()->GetHelpContextContainer(), rInStm ); */ } /************************************************************************* |* SvMetaName::DoReadContextSvIdl() |* |* Beschreibung *************************************************************************/ void SvMetaName::DoReadContextSvIdl( SvIdlDataBase & rBase, SvTokenStream & rInStm, char cDel ) { sal_uInt32 nBeginPos = 0; // kann mit Tell nicht vorkommen while( nBeginPos != rInStm.Tell() ) { nBeginPos = rInStm.Tell(); ReadContextSvIdl( rBase, rInStm ); if( cDel == '\0' ) rInStm.ReadDelemiter(); else rInStm.Read( cDel ); } } /************************************************************************* |* SvMetaName::ReadSvIdl() |* |* Beschreibung *************************************************************************/ void SvMetaName::ReadContextSvIdl( SvIdlDataBase &, SvTokenStream & ) { } /************************************************************************* |* SvMetaName::Test() |* |* Beschreibung *************************************************************************/ sal_Bool SvMetaName::Test( SvIdlDataBase &, SvTokenStream & ) { return sal_True; } /************************************************************************* |* SvMetaName::WriteContextSvIdl() |* |* Beschreibung *************************************************************************/ void SvMetaName::WriteContextSvIdl( SvIdlDataBase &, SvStream &, sal_uInt16 ) { } /************************************************************************* |* SvMetaName::WriteDescription() |* |* Beschreibung *************************************************************************/ void SvMetaName::WriteDescription( SvStream & rOutStm ) { rOutStm << "" << endl; ByteString aDesc( GetDescription() ); sal_uInt16 nPos = aDesc.Search( '\n' ); while ( nPos != STRING_NOTFOUND ) { rOutStm << aDesc.Copy( 0, nPos ).GetBuffer() << endl; aDesc.Erase(0,nPos+1); nPos = aDesc.Search( '\n' ); } rOutStm << aDesc.GetBuffer() << endl << "" << endl; } /************************************************************************* |* SvMetaName::WriteAttributesIdl() |* |* Beschreibung *************************************************************************/ void SvMetaName::WriteAttributesSvIdl( SvIdlDataBase & rBase, SvStream & rOutStm, sal_uInt16 nTab ) { if( aHelpContext.IsSet() || aHelpText.IsSet() || aConfigName.IsSet() ) { WriteTab( rOutStm, nTab ); rOutStm << "// class SvMetaName" << endl; } if( aHelpContext.IsSet() ) { WriteTab( rOutStm, nTab ); aHelpContext.WriteSvIdl( SvHash_HelpContext(), rOutStm, nTab ); rOutStm << ';' << endl; } if( aHelpText.IsSet() ) { WriteTab( rOutStm, nTab ); aHelpText.WriteSvIdl( rBase, rOutStm, nTab ); rOutStm << ';' << endl; } if( aConfigName.IsSet() ) { WriteTab( rOutStm, nTab ); aConfigName.WriteSvIdl( SvHash_ConfigName(), rOutStm, nTab ); rOutStm << ';' << endl; } } /************************************************************************* |* SvMetaName::ReadSvIdl() |* |* Beschreibung *************************************************************************/ sal_Bool SvMetaName::ReadSvIdl( SvIdlDataBase & rBase, SvTokenStream & rInStm ) { sal_uInt32 nTokPos = rInStm.Tell(); sal_Bool bOk = sal_True; if( rInStm.Read( '[' ) ) { sal_uInt32 nBeginPos = 0; // kann mit Tell nicht vorkommen while( nBeginPos != rInStm.Tell() ) { nBeginPos = rInStm.Tell(); ReadAttributesSvIdl( rBase, rInStm ); rInStm.ReadDelemiter(); } bOk = rInStm.Read( ']' ); } if( bOk ) { if( rInStm.Read( '{' ) ) { DoReadContextSvIdl( rBase, rInStm ); bOk = rInStm.Read( '}' ); } } if( !bOk ) rInStm.Seek( nTokPos ); return bOk; } /************************************************************************* |* SvMetaName::WriteSvIdl() |* |* Beschreibung *************************************************************************/ void SvMetaName::WriteSvIdl( SvIdlDataBase & rBase, SvStream & rOutStm, sal_uInt16 nTab ) { sal_uLong nBeginPos = rOutStm.Tell(); WriteTab( rOutStm, nTab ); rOutStm << '[' << endl; sal_uLong nOldPos = rOutStm.Tell(); WriteAttributesSvIdl( rBase, rOutStm, nTab +1 ); // keine leeren Klammern schreiben if( TestAndSeekSpaceOnly( rOutStm, nOldPos ) ) // nichts geschrieben rOutStm.Seek( nBeginPos ); else { WriteTab( rOutStm, nTab ); rOutStm << ']'; nBeginPos = rOutStm.Tell(); rOutStm << endl; } WriteTab( rOutStm, nTab ); rOutStm << '{' << endl; nOldPos = rOutStm.Tell(); WriteContextSvIdl( rBase, rOutStm, nTab +1 ); // keine leeren Klammern schreiben if( TestAndSeekSpaceOnly( rOutStm, nOldPos ) ) // nichts geschrieben rOutStm.Seek( nBeginPos ); else { WriteTab( rOutStm, nTab ); rOutStm << '}'; } } /************************************************************************* |* SvMetaName::Write() |* |* Beschreibung *************************************************************************/ void SvMetaName::Write( SvIdlDataBase & rBase, SvStream & rOutStm, sal_uInt16 nTab, WriteType nT, WriteAttribute nA ) { sal_uLong nBeginPos = rOutStm.Tell(); WriteTab( rOutStm, nTab ); rOutStm << '[' << endl; sal_uLong nOldPos = rOutStm.Tell(); WriteAttributes( rBase, rOutStm, nTab +1, nT, nA ); // keine leeren Klammern schreiben sal_uLong nPos = rOutStm.Tell(); rOutStm.Seek( nOldPos ); sal_Bool bOnlySpace = sal_True; while( bOnlySpace && rOutStm.Tell() < nPos ) { char c; rOutStm >> c; if( !isspace( c ) ) bOnlySpace = sal_False; } if( bOnlySpace ) // nichts geschrieben rOutStm.Seek( nBeginPos ); else { rOutStm.Seek( nPos ); WriteTab( rOutStm, nTab ); rOutStm << ']' << endl; } } /************************************************************************* |* SvMetaName::WriteAttributes() |* |* Beschreibung *************************************************************************/ void SvMetaName::WriteAttributes( SvIdlDataBase &, SvStream & rOutStm, sal_uInt16 nTab, WriteType, WriteAttribute ) { if( GetHelpText().IsSet() || GetHelpContext().IsSet() ) { WriteTab( rOutStm, nTab ); rOutStm << "// class SvMetaName" << endl; } if( GetHelpText().IsSet() ) { WriteTab( rOutStm, nTab ); rOutStm << "helpstring(\"" << GetHelpText().GetBuffer() << "\")," << endl; } if( GetHelpContext().IsSet() ) { WriteTab( rOutStm, nTab ); rOutStm << "helpcontext(" << ByteString::CreateFromInt64( GetHelpContext().GetValue() ).GetBuffer() << ")," << endl; } } /************************************************************************* |* SvMetaName::WriteContext() |* |* Beschreibung *************************************************************************/ void SvMetaName::WriteContext( SvIdlDataBase &, SvStream &, sal_uInt16, WriteType, WriteAttribute ) { } #endif // IDL_COMPILER /****************** SvMetaReference *****************************************/ SV_IMPL_META_FACTORY1( SvMetaReference, SvMetaName ); /************************************************************************* |* SvMetaReference::SvMetaReference() |* |* Beschreibung *************************************************************************/ SvMetaReference::SvMetaReference() { } void SvMetaReference::Load( SvPersistStream & rStm ) { SvMetaName::Load( rStm ); sal_uInt8 nMask; rStm >> nMask; if( nMask >= 0x2 ) { rStm.SetError( SVSTREAM_FILEFORMAT_ERROR ); DBG_ERROR( "wrong format" ); return; } if( nMask & 0x01 ) { SvMetaReference * pRef; rStm >> pRef; aRef = pRef; } } void SvMetaReference::Save( SvPersistStream & rStm ) { SvMetaName::Save( rStm ); // Maske erstellen sal_uInt8 nMask = 0; if( aRef.Is() ) nMask |= 0x01; // Daten schreiben rStm << nMask; if( nMask & 0x01 ) rStm << aRef; } /**************************************************************************/ /****************** SvMetaExtern ******************************************/ SV_IMPL_META_FACTORY1( SvMetaExtern, SvMetaReference ); /************************************************************************* |* SvMetaExtern::SvMetaExtern() |* |* Beschreibung *************************************************************************/ SvMetaExtern::SvMetaExtern() : pModule( NULL ) , bReadUUId( sal_False ) , bReadVersion( sal_False ) { } void SvMetaExtern::Load( SvPersistStream & rStm ) { SvMetaReference::Load( rStm ); sal_uInt8 nMask; rStm >> nMask; if( nMask >= 0x20 ) { rStm.SetError( SVSTREAM_FILEFORMAT_ERROR ); DBG_ERROR( "wrong format" ); return; } if( nMask & 0x01 ) rStm >> pModule; if( nMask & 0x02 ) rStm >> aUUId; if( nMask & 0x04 ) rStm >> aVersion; if( nMask & 0x08 ) bReadUUId = sal_True; if( nMask & 0x10 ) bReadVersion = sal_True; } void SvMetaExtern::Save( SvPersistStream & rStm ) { SvMetaReference::Save( rStm ); // Maske erstellen sal_uInt8 nMask = 0; if( pModule ) nMask |= 0x01; if( aUUId != SvGlobalName() ) nMask |= 0x02; if( aVersion != SvVersion() ) nMask |= 0x04; if( bReadUUId ) nMask |= 0x08; if( bReadVersion ) nMask |= 0x10; // Daten schreiben rStm << nMask; if( nMask & 0x01 ) rStm << pModule; if( nMask & 0x02 ) rStm << aUUId; if( nMask & 0x04 ) rStm << aVersion; } /************************************************************************* |* SvMetaExtern::GetModule() |* |* Beschreibung *************************************************************************/ SvMetaModule * SvMetaExtern::GetModule() const { DBG_ASSERT( pModule != NULL, "module not set" ); return pModule; } /************************************************************************* |* SvMetaExtern::GetUUId() |* |* Beschreibung *************************************************************************/ const SvGlobalName & SvMetaExtern::GetUUId() const { #ifdef IDL_COMPILER if( aUUId == SvGlobalName() ) GetModule()->FillNextName( &((SvMetaExtern *)this)->aUUId ); #endif return aUUId; } #ifdef IDL_COMPILER /************************************************************************* |* SvMetaExtern::SetModule() |* |* Beschreibung *************************************************************************/ void SvMetaExtern::SetModule( SvIdlDataBase & rBase ) { pModule = (SvMetaModule *)rBase.GetStack().Get( TYPE( SvMetaModule ) ); } /************************************************************************* |* SvMetaExtern::ReadAttributesSvIdl() |* |* Beschreibung *************************************************************************/ void SvMetaExtern::ReadAttributesSvIdl( SvIdlDataBase & rBase, SvTokenStream & rInStm ) { SvMetaReference::ReadAttributesSvIdl( rBase, rInStm ); if( aUUId.ReadSvIdl( rBase, rInStm ) ) bReadUUId = sal_True; if( aVersion.ReadSvIdl( rInStm ) ) bReadVersion = sal_True; } /************************************************************************* |* SvMetaExtern::WriteAttributesSvIdl() |* |* Beschreibung *************************************************************************/ void SvMetaExtern::WriteAttributesSvIdl( SvIdlDataBase & rBase, SvStream & rOutStm, sal_uInt16 nTab ) { SvMetaReference::WriteAttributesSvIdl( rBase, rOutStm, nTab ); if( bReadUUId || bReadVersion ) { WriteTab( rOutStm, nTab ); rOutStm << "// class SvMetaExtern" << endl; if( bReadUUId ) { WriteTab( rOutStm, nTab ); aUUId.WriteSvIdl( rOutStm ); rOutStm << ';' << endl; } if( bReadVersion ) { WriteTab( rOutStm, nTab ); aVersion.WriteSvIdl( rOutStm ); rOutStm << ';' << endl; } } } /************************************************************************* |* SvMetaExtern::ReadSvIdl() |* |* Beschreibung *************************************************************************/ sal_Bool SvMetaExtern::ReadSvIdl( SvIdlDataBase & rBase, SvTokenStream & rInStm ) { SetModule( rBase ); GetUUId(); // Id wird angelegt return SvMetaReference::ReadSvIdl( rBase, rInStm ); } /************************************************************************* |* SvMetaExtern::WriteSvIdl() |* |* Beschreibung *************************************************************************/ void SvMetaExtern::WriteSvIdl( SvIdlDataBase & rBase, SvStream & rOutStm, sal_uInt16 nTab ) { SvMetaReference::WriteSvIdl( rBase, rOutStm, nTab ); } /************************************************************************* |* SvMetaExtern::Write() |* |* Beschreibung *************************************************************************/ void SvMetaExtern::Write( SvIdlDataBase & rBase, SvStream & rOutStm, sal_uInt16 nTab, WriteType nT, WriteAttribute nA ) { SvMetaReference::Write( rBase, rOutStm, nTab, nT, nA ); } /************************************************************************* |* SvMetaExtern::WriteAttributes() |* |* Beschreibung *************************************************************************/ void SvMetaExtern::WriteAttributes( SvIdlDataBase & rBase, SvStream & rOutStm, sal_uInt16 nTab, WriteType nT, WriteAttribute nA ) { SvMetaReference::WriteAttributes( rBase, rOutStm, nTab, nT, nA ); WriteTab( rOutStm, nTab ); rOutStm << "// class SvMetaExtern" << endl; WriteTab( rOutStm, nTab ); rOutStm << "uuid(" << ByteString( GetUUId().GetHexName(), RTL_TEXTENCODING_UTF8 ).GetBuffer() << ")," << endl; WriteTab( rOutStm, nTab ); rOutStm << "version(" << ByteString::CreateFromInt32( aVersion.GetMajorVersion() ).GetBuffer() << '.' << ByteString::CreateFromInt32( aVersion.GetMinorVersion() ).GetBuffer() << ")," << endl; } #endif // IDL_COMPILER