/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * 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 . */ #include #include #include #include #include #include #include void SvMetaObject::WriteTab( SvStream & rOutStm, sal_uInt16 nTab ) { while( nTab-- ) rOutStm.WriteCharPtr( " " ); } void SvMetaObject::WriteStars( SvStream & rOutStm ) { rOutStm.WriteChar( '/' ); for( int i = 6; i > 0; i-- ) rOutStm.WriteCharPtr( "**********" ); rOutStm.WriteChar( '/' ) << endl; } void SvMetaObject::Back2Delemitter( SvStream & rOutStm ) { // write no empty brackets sal_uLong nPos = rOutStm.Tell(); rOutStm.SeekRel( -1 ); char c = 0; rOutStm.ReadChar( c ); while( isspace( c ) && rOutStm.Tell() != 1 ) { rOutStm.SeekRel( -2 ); rOutStm.ReadChar( c ); } if( c == ';' || c == ',' ) rOutStm.SeekRel( -1 ); else rOutStm.Seek( nPos ); } SvMetaObject::SvMetaObject() { } bool SvMetaObject::SetName( const OString& rName, SvIdlDataBase * ) { aName.setString(rName); return true; } bool SvMetaObject::ReadNameSvIdl( SvIdlDataBase & rBase, SvTokenStream & rInStm ) { sal_uInt32 nTokPos = rInStm.Tell(); SvToken * pTok = rInStm.GetToken_Next(); // read module name if( pTok->IsIdentifier() ) if( SetName( pTok->GetString(), &rBase ) ) return true; rInStm.Seek( nTokPos ); return false; } void SvMetaObject::ReadAttributesSvIdl( SvIdlDataBase & rBase, SvTokenStream & rInStm ) { sal_uInt32 nTokPos = rInStm.Tell(); if( aName.ReadSvIdl( SvHash_Name(), rInStm ) ) { if( !SetName( aName.getString(), &rBase ) ) rInStm.Seek( nTokPos ); } aHelpContext.ReadSvIdl( rBase, SvHash_HelpContext(), rInStm ); aHelpText.ReadSvIdl( rBase, rInStm ); aConfigName.ReadSvIdl( SvHash_ConfigName(), rInStm ); aDescription.ReadSvIdl( SvHash_Description(), rInStm ); } void SvMetaObject::DoReadContextSvIdl( SvIdlDataBase & rBase, SvTokenStream & rInStm, char cDel ) { sal_uInt32 nBeginPos = 0; // can not happen with Tell while( nBeginPos != rInStm.Tell() ) { nBeginPos = rInStm.Tell(); ReadContextSvIdl( rBase, rInStm ); if( cDel == '\0' ) rInStm.ReadDelemiter(); else (void)rInStm.Read( cDel ); } } void SvMetaObject::ReadContextSvIdl( SvIdlDataBase &, SvTokenStream & ) { } bool SvMetaObject::Test( SvIdlDataBase &, SvTokenStream & ) { return true; } bool SvMetaObject::ReadSvIdl( SvIdlDataBase & rBase, SvTokenStream & rInStm ) { sal_uInt32 nTokPos = rInStm.Tell(); bool bOk = true; if( rInStm.Read( '[' ) ) { sal_uInt32 nBeginPos = 0; // can not happen with Tell 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; } SvMetaReference::SvMetaReference() { } SvMetaExtern::SvMetaExtern() : pModule( nullptr ) , bReadUUId( false ) , bReadVersion( false ) { } SvMetaModule * SvMetaExtern::GetModule() const { DBG_ASSERT( pModule != nullptr, "module not set" ); return pModule; } const SvGlobalName & SvMetaExtern::GetUUId() const { if( aUUId == SvGlobalName() ) GetModule()->FillNextName( &const_cast(this)->aUUId ); return aUUId; } void SvMetaExtern::SetModule( SvIdlDataBase & rBase ) { pModule = static_cast(rBase.GetStack().Get( checkSvMetaObject )); } void SvMetaExtern::ReadAttributesSvIdl( SvIdlDataBase & rBase, SvTokenStream & rInStm ) { SvMetaReference::ReadAttributesSvIdl( rBase, rInStm ); if( aUUId.ReadSvIdl( rBase, rInStm ) ) bReadUUId = true; if( aVersion.ReadSvIdl( rInStm ) ) bReadVersion = true; } bool SvMetaExtern::ReadSvIdl( SvIdlDataBase & rBase, SvTokenStream & rInStm ) { SetModule( rBase ); GetUUId(); // id gets created return SvMetaReference::ReadSvIdl( rBase, rInStm ); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */