/************************************************************** * * 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 #ifdef IDL_COMPILER /************************************************************************/ static sal_Bool ReadRangeSvIdl( SvStringHashEntry * pName, SvTokenStream & rInStm, sal_uLong nMin, sal_uLong nMax, sal_uLong* pValue ) { sal_uInt32 nTokPos = rInStm.Tell(); SvToken * pTok = rInStm.GetToken_Next(); if( pTok->Is( pName ) ) { sal_Bool bOk = sal_False; if( rInStm.Read( '=' ) ) { pTok = rInStm.GetToken_Next(); if( pTok->IsInteger() ) { sal_uLong n = pTok->GetNumber(); if ( n >= nMin && n <= nMax ) { *pValue = n; bOk = sal_True; } } } if( bOk ) return sal_True; } rInStm.Seek( nTokPos ); return sal_False; } #endif /************************************************************************* |* |* SvUINT32::Read() |* SvUINT32::Write() |* |* Beschreibung |* Ersterstellung MM 12.12.94 |* Letzte Aenderung MM 12.12.94 |* *************************************************************************/ sal_uInt32 SvUINT32::Read( SvStream & rStm ) { return SvPersistStream::ReadCompressed( rStm ); } void SvUINT32::Write( SvStream & rStm, sal_uInt32 nVal ) { SvPersistStream::WriteCompressed( rStm, nVal ); } /************************************************************************* |* |* SvStream& operator << ( SvBOOL ) |* SvStream& operator >> ( SvBOOL ) |* |* Beschreibung |* Ersterstellung MM 12.12.94 |* Letzte Aenderung MM 12.12.94 |* *************************************************************************/ SvStream& operator << (SvStream & rStm, const SvBOOL & rb ) { sal_uInt8 n = rb.nVal; if( rb.bSet ) n |= 0x02; rStm << n; return rStm; } SvStream& operator >> (SvStream & rStm, SvBOOL & rb ) { sal_uInt8 n; rStm >> n; rb.nVal = (n & 0x01) ? sal_True : sal_False; rb.bSet = (n & 0x02) ? sal_True : sal_False; if( n & ~0x03 ) { rStm.SetError( SVSTREAM_FILEFORMAT_ERROR ); DBG_ERROR( "format error" ); } return rStm; } /************************************************************************* |* |* SvStream& operator << ( SvVersion ) |* SvStream& operator >> ( SvVersion ) |* |* Beschreibung |* Ersterstellung MM 12.12.94 |* Letzte Aenderung MM 12.12.94 |* *************************************************************************/ SvStream& operator << (SvStream & rStm, const SvVersion & r ) { if( (r.GetMajorVersion() || r.GetMinorVersion()) && r.GetMajorVersion() <= 0x0F && r.GetMinorVersion() <= 0x0F ) { // Versionsnummer in 1 Byte komprimieren // Format 4 Bit fuer Major, dann 4 Bit fuer Minor. // 0.0 wird nicht komprimiert int n = r.GetMajorVersion() << 4; n |= r.GetMinorVersion(); rStm << (sal_uInt8)n; } else { rStm << (sal_uInt8)0; rStm << r.GetMajorVersion(); rStm << r.GetMinorVersion(); } return rStm; } SvStream& operator >> (SvStream & rStm, SvVersion & r ) { sal_uInt8 n; rStm >> n; if( n == 0 ) { // nicht komprimiert rStm >> r.nMajorVersion; rStm >> r.nMinorVersion; } else { // komprimiert r.nMajorVersion = (n >> 4) & 0x0F; r.nMinorVersion = n & 0x0F; } return rStm; } #ifdef IDL_COMPILER /************************************************************************/ /************************************************************************* |* |* SvBOOL::ReadSvIdl() |* |* Beschreibung |* Ersterstellung MM 12.12.94 |* Letzte Aenderung MM 12.12.94 |* *************************************************************************/ sal_Bool SvBOOL::ReadSvIdl( SvStringHashEntry * pName, SvTokenStream & rInStm ) { sal_uInt32 nTokPos = rInStm.Tell(); SvToken * pTok = rInStm.GetToken_Next(); if( pTok->Is( pName ) ) { sal_Bool bOk = sal_True; sal_Bool bBraket = rInStm.Read( '(' ); if( bBraket || rInStm.Read( '=' ) ) { pTok = rInStm.GetToken(); if( pTok->IsBool() ) { *this = pTok->GetBool(); rInStm.GetToken_Next(); } if( bOk && bBraket ) bOk = rInStm.Read( ')' ); } else *this = sal_True; //Defaultaktion ist auf sal_True setzen if( bOk ) return sal_True; } rInStm.Seek( nTokPos ); return sal_False; } /************************************************************************* |* |* SvBOOL::WriteSvIdl() |* |* Beschreibung |* *************************************************************************/ sal_Bool SvBOOL::WriteSvIdl( SvStringHashEntry * pName, SvStream & rOutStm ) { if( nVal ) rOutStm << pName->GetName().GetBuffer(); else rOutStm << pName->GetName().GetBuffer() << "(FALSE)"; return sal_True; } /************************************************************************* |* |* SvBOOL::WriteSvIdl() |* |* Beschreibung |* *************************************************************************/ ByteString SvBOOL::GetSvIdlString( SvStringHashEntry * pName ) { if( nVal ) return pName->GetName(); else { ByteString aTmp( pName->GetName() ); aTmp += "(FALSE)"; return aTmp; } } /************************************************************************/ /************************************************************************* |* |* SvIdentifier::ReadSvIdl() |* |* Beschreibung |* *************************************************************************/ sal_Bool SvIdentifier::ReadSvIdl( SvStringHashEntry * pName, SvTokenStream & rInStm ) { sal_uInt32 nTokPos = rInStm.Tell(); SvToken * pTok = rInStm.GetToken_Next(); if( pTok->Is( pName ) ) { sal_Bool bOk = sal_True; sal_Bool bBraket = rInStm.Read( '(' ); if( bBraket || rInStm.Read( '=' ) ) { pTok = rInStm.GetToken(); if( pTok->IsIdentifier() ) { *(ByteString *)this = pTok->GetString(); rInStm.GetToken_Next(); } if( bOk && bBraket ) bOk = rInStm.Read( ')' ); } if( bOk ) return sal_True; } rInStm.Seek( nTokPos ); return sal_False; } /************************************************************************* |* |* SvIdentifier::WriteSvIdl() |* |* Beschreibung |* *************************************************************************/ sal_Bool SvIdentifier::WriteSvIdl( SvStringHashEntry * pName, SvStream & rOutStm, sal_uInt16 /*nTab */ ) { rOutStm << pName->GetName().GetBuffer() << '('; rOutStm << GetBuffer() << ')'; return sal_True; } SvStream& operator << (SvStream & rStm, const SvIdentifier & r ) { rStm.WriteByteString( r ); return rStm; } SvStream& operator >> (SvStream & rStm, SvIdentifier & r ) { rStm.ReadByteString( r ); return rStm; } /************************************************************************/ /************************************************************************* |* |* SvNumberIdentifier::ReadSvIdl() |* |* Beschreibung |* *************************************************************************/ sal_Bool SvNumberIdentifier::ReadSvIdl( SvIdlDataBase & rBase, SvStringHashEntry * pName, SvTokenStream & rInStm ) { if( SvIdentifier::ReadSvIdl( pName, rInStm ) ) { sal_uLong n; if( rBase.FindId( *this, &n ) ) { nValue = n; return sal_True; } else { ByteString aStr ("no value for identifier <"); aStr += *this; aStr += "> "; rBase.SetError( aStr, rInStm.GetToken() ); rBase.WriteError( rInStm ); } } return sal_False; } /************************************************************************* |* |* SvNumberIdentifier::ReadSvIdl() |* |* Beschreibung |* *************************************************************************/ sal_Bool SvNumberIdentifier::ReadSvIdl( SvIdlDataBase & rBase, SvTokenStream & rInStm ) { sal_uInt32 nTokPos = rInStm.Tell(); SvToken * pTok = rInStm.GetToken_Next(); if( pTok->IsIdentifier() ) { sal_uLong n; if( rBase.FindId( pTok->GetString(), &n ) ) { *(ByteString *)this = pTok->GetString(); nValue = n; return sal_True; } else { ByteString aStr ("no value for identifier <"); aStr += *this; aStr += "> "; rBase.SetError( aStr, rInStm.GetToken() ); rBase.WriteError( rInStm ); } } rInStm.Seek( nTokPos ); return sal_False; } /************************************************************************* |* |* SvStream& operator << ( SvNumberIdentifier ) |* SvStream& operator >> ( SvNumberIdentifier ) |* |* Beschreibung |* Ersterstellung MM 12.12.94 |* Letzte Aenderung MM 12.12.94 |* *************************************************************************/ SvStream& operator << (SvStream & rStm, const SvNumberIdentifier & r ) { rStm << (SvIdentifier &)r; SvPersistStream::WriteCompressed( rStm, r.nValue ); return rStm; } SvStream& operator >> (SvStream & rStm, SvNumberIdentifier & r ) { rStm >> (SvIdentifier &)r; r.nValue = SvPersistStream::ReadCompressed( rStm ); return rStm; } /************************************************************************/ /************************************************************************* |* |* SvString::ReadSvIdl() |* |* Beschreibung |* Ersterstellung MM 12.12.94 |* Letzte Aenderung MM 12.12.94 |* *************************************************************************/ sal_Bool SvString::ReadSvIdl( SvStringHashEntry * pName, SvTokenStream & rInStm ) { sal_uInt32 nTokPos = rInStm.Tell(); SvToken * pTok = rInStm.GetToken_Next(); if( pTok->Is( pName ) ) { sal_Bool bOk = sal_True; sal_Bool bBraket = rInStm.Read( '(' ); if( bBraket || rInStm.Read( '=' ) ) { pTok = rInStm.GetToken(); if( pTok->IsString() ) { *(ByteString *)this = pTok->GetString(); rInStm.GetToken_Next(); } if( bOk && bBraket ) bOk = rInStm.Read( ')' ); } if( bOk ) return sal_True; } rInStm.Seek( nTokPos ); return sal_False; } /************************************************************************* |* |* SvString::WriteSvIdl() |* |* Beschreibung |* Ersterstellung MM 12.12.94 |* Letzte Aenderung MM 12.12.94 |* *************************************************************************/ sal_Bool SvString::WriteSvIdl( SvStringHashEntry * pName, SvStream & rOutStm, sal_uInt16 /*nTab */ ) { rOutStm << pName->GetName().GetBuffer() << "(\""; rOutStm << GetBuffer() << "\")"; return sal_True; } SvStream& operator << (SvStream & rStm, const SvString & r ) { rStm.WriteByteString( r ); return rStm; } SvStream& operator >> (SvStream & rStm, SvString & r ) { rStm.ReadByteString( r ); return rStm; } /************************************************************************* |* |* SvHelpText::ReadSvIdl() |* |* Beschreibung |* Ersterstellung MM 12.12.94 |* Letzte Aenderung MM 12.12.94 |* *************************************************************************/ sal_Bool SvHelpText::ReadSvIdl( SvIdlDataBase &, SvTokenStream & rInStm ) { return SvString::ReadSvIdl( SvHash_HelpText(), rInStm ); } /************************************************************************* |* |* SvHelpText::WriteSvIdl() |* |* Beschreibung |* Ersterstellung MM 12.12.94 |* Letzte Aenderung MM 12.12.94 |* *************************************************************************/ sal_Bool SvHelpText::WriteSvIdl( SvIdlDataBase &, SvStream & rOutStm, sal_uInt16 nTab ) { return SvString::WriteSvIdl( SvHash_HelpText(), rOutStm, nTab ); } /************************************************************************/ /************************************************************************* |* |* SvUUId::ReadSvIdl() |* |* Beschreibung |* Ersterstellung MM 12.12.94 |* Letzte Aenderung MM 12.12.94 |* *************************************************************************/ sal_Bool SvUUId::ReadSvIdl( SvIdlDataBase &, SvTokenStream & rInStm ) { sal_uInt32 nTokPos = rInStm.Tell(); SvToken * pTok = rInStm.GetToken_Next(); if( pTok->Is( SvHash_uuid() ) ) { sal_Bool bOk = sal_True; sal_Bool bBraket = rInStm.Read( '(' ); if( bBraket || rInStm.Read( '=' ) ) { pTok = rInStm.GetToken(); if( pTok->IsString() ) { pTok = rInStm.GetToken_Next(); bOk = MakeId( String::CreateFromAscii( pTok->GetString().GetBuffer() ) ); } if( bOk && bBraket ) bOk = rInStm.Read( ')' ); } if( bOk ) return sal_True; } rInStm.Seek( nTokPos ); return sal_False; } /************************************************************************* |* |* SvMetaObject::WriteSvIdl() |* |* Beschreibung |* Ersterstellung MM 12.12.94 |* Letzte Aenderung MM 12.12.94 |* *************************************************************************/ sal_Bool SvUUId::WriteSvIdl( SvStream & rOutStm ) { // Global Id schreiben rOutStm << SvHash_uuid()->GetName().GetBuffer() << "(\""; rOutStm << ByteString( GetHexName(), RTL_TEXTENCODING_UTF8 ).GetBuffer() << "\")"; return sal_True; } /************************************************************************/ /************************************************************************* |* |* SvVersion::ReadSvIdl() |* |* Beschreibung |* Ersterstellung MM 12.12.94 |* Letzte Aenderung MM 12.12.94 |* *************************************************************************/ sal_Bool SvVersion::ReadSvIdl( SvTokenStream & rInStm ) { sal_uLong n = 0; sal_uInt32 nTokPos = rInStm.Tell(); if( ReadRangeSvIdl( SvHash_Version(), rInStm, 0 , 0xFFFF, &n ) ) { nMajorVersion = (sal_uInt16)n; if( rInStm.Read( '.' ) ) { SvToken * pTok = rInStm.GetToken_Next(); if( pTok->IsInteger() && pTok->GetNumber() <= 0xFFFF ) { nMinorVersion = (sal_uInt16)pTok->GetNumber(); return sal_True; } } else return sal_True; } rInStm.Seek( nTokPos ); return sal_False; } /************************************************************************* |* |* SvVersion::WriteSvIdl() |* |* Beschreibung |* Ersterstellung MM 12.12.94 |* Letzte Aenderung MM 12.12.94 |* *************************************************************************/ sal_Bool SvVersion::WriteSvIdl( SvStream & rOutStm ) { rOutStm << SvHash_Version()->GetName().GetBuffer() << '(' << ByteString::CreateFromInt32( nMajorVersion ).GetBuffer() << '.' << ByteString::CreateFromInt32( nMinorVersion ).GetBuffer() << ')'; return sal_True; } #endif //IDL_COMPILER