diff -r 238255e8b033 -r 84d9eb65b26f messagingapp/msgutils/unidatamodel/unimmsdataplugin/src/UniSmilUtils.cpp --- a/messagingapp/msgutils/unidatamodel/unimmsdataplugin/src/UniSmilUtils.cpp Fri Apr 16 14:56:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,366 +0,0 @@ -/* -* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* Static utility class for manipulating SMIL DOM -* -* -*/ - - -#include -#include - -#include -#include -#include - -#include -#include "UniSmilUtils.h" - - -// --------------------------------------------------------- -// UniSmilUtils::StringToIntValue -// Convert a descriptor to TInt -// --------------------------------------------------------- -// -TInt UniSmilUtils::StringToIntValue( const TDesC& aString, - TInt aDefault ) - { - TInt value = aDefault; - if( aString.Length() != 0 ) - { - TChar c = aString[0]; - if( c.IsDigit() ) - { - TLex luthor( aString ); - luthor.Val( value ); - } - else - { - value = aDefault; - } - } - return value; - } - - -// --------------------------------------------------------- -// UniSmilUtils::IsMediaElem -// --------------------------------------------------------- - -TBool UniSmilUtils::IsMediaElem( CMDXMLNode* aNodePtr ) -{ - TBool ret = EFalse; - - if ( aNodePtr->NodeType() == CMDXMLNode::EElementNode && - UniSmilUtils::MediaElemType( aNodePtr) != EMsgMediaUnknown ) - { - ret = ETrue; - } - - return ret; -} - -// --------------------------------------------------------- -// UniSmilUtils::NextNode -// --------------------------------------------------------- - -CMDXMLNode* UniSmilUtils::NextNode(CMDXMLNode* aRefNode) -{ - if( aRefNode->FirstChild() ) - { - aRefNode = aRefNode->FirstChild(); - } - else - { - if( aRefNode->NextSibling() ) - { - // move to the next sibling if exists - aRefNode = aRefNode->NextSibling(); - } - else - { - // No siblings at this level. Go up to parent. - // might need to go up several layers so WHILE rather than IF - while ( aRefNode && !aRefNode->NextSibling() ) - { - // no siblings, move back to parent. - aRefNode = aRefNode->ParentNode(); - } - - // Check if we stopped because node has siblings. - if ( aRefNode && aRefNode->NextSibling() ) - { - aRefNode = aRefNode->NextSibling(); - } - } - } - - return aRefNode; -} - -// --------------------------------------------------------- -// UniSmilUtils::RemoveChilds -// --------------------------------------------------------- - -void UniSmilUtils::RemoveChilds( - CMDXMLNode* aParent ) - { - CMDXMLNode* child = NULL; - - if ( aParent ) - { - child = aParent->FirstChild(); - } - - while ( child ) - { - if ( child->HasChildNodes() ) - { - UniSmilUtils::RemoveChilds( child ); - } - else - { - CMDXMLNode* n = child; - child = child->NextSibling(); - aParent->RemoveChild( n ); - delete n; - } - } - } - - -// --------------------------------------------------------- -// UniSmilUtils::ElemType -// --------------------------------------------------------- - -TMsgMediaType UniSmilUtils::MediaElemType(CMDXMLNode* aNodePtr) -{ - TMsgMediaType type(EMsgMediaUnknown); - - if ( aNodePtr ) - { - TPtrC nName; - nName.Set(aNodePtr->NodeName()); - - if ( nName.Compare(KSMILWREleAnimation) == 0 ) - { - type = EMsgMediaAnimation; - } - else if (nName.Compare(KSMILWREleAudio) == 0 ) - { - type = EMsgMediaAudio; - } - // SVG included. No special SVG element tag exist. - else if (nName.Compare(KSMILWREleImg) == 0 ) - { - type = EMsgMediaImage; - } - else if (nName.Compare(KSMILWREleRef) == 0 ) - { - type = EMsgMediaRef; - } - else if ( nName.Compare(KSMILWREleText) == 0 ) - { - type = EMsgMediaText; - } - else if ( nName.Compare(KSMILWREleTextstream) == 0 ) - { - type = EMsgMediaTextStream; - } - else if ( nName.Compare(KSMILWREleVideo) == 0 ) - { - type = EMsgMediaVideo; - } - } - - return type; -} - -// --------------------------------------------------------- -// UniSmilUtils::GetId -// --------------------------------------------------------- - -TInt UniSmilUtils::GetId( CMDXMLNode* aNodePtr, TPtrC& aId ) - { - TInt ret = KErrNotSupported; - - if( aNodePtr && aNodePtr->NodeType() == CMDXMLNode::EElementNode ) - { - CMDXMLElement* e =(CMDXMLElement*) aNodePtr; - if ( e->IsAttributeSpecified( KSMILWRParaId )) - { - e->GetAttribute(KSMILWRParaId, aId); - ret = KErrNone; - } - else - { - ret = KErrNotFound; - } - } - return ret; - } - -// --------------------------------------------------------- -// UniSmilUtils::GetMetaTag -// --------------------------------------------------------- - -TInt UniSmilUtils::GetMetaTag( CMDXMLNode* aNodePtr, - TPtrC& aName, - TPtrC& aContent ) - { - TInt ret = KErrNotFound; - - if( aNodePtr && - aNodePtr->NodeType() == CMDXMLNode::EElementNode && - aNodePtr->NodeName().Compare(KSMILWREleMeta) == 0) - { - CMDXMLElement* e = (CMDXMLElement*) aNodePtr; - - if ( e->IsAttributeSpecified( KSMILWRParaName ) && - e->IsAttributeSpecified( KSMILWRParaContent )) - { - if (!e->GetAttribute(KSMILWRParaName, aName) && - !e->GetAttribute(KSMILWRParaContent, aContent)) - { - ret = KErrNone; - } - } - } - return ret; - } - -// --------------------------------------------------------- -// UniSmilUtils::RegionId -// --------------------------------------------------------- - -TInt UniSmilUtils::GetRegionId( CMDXMLNode* aNodePtr, TPtrC& aId ) - { - TInt ret = KErrNotSupported; - - if ( aNodePtr ) - { - if ( UniSmilUtils::IsMediaElem( aNodePtr ) ) - { - ret = ((CMDXMLElement*)aNodePtr)->GetAttribute(KSMILWRParaRegion, aId); - } - } - return ret; - } - -// --------------------------------------------------------- -// UniSmilUtils::GetSrc -// --------------------------------------------------------- - -TPtrC UniSmilUtils::GetSrcL( CMDXMLNode* aNodePtr ) -{ - TPtrC src = TPtrC(); - if ( aNodePtr ) - { - CMDXMLElement* e = (CMDXMLElement*) aNodePtr; - - if ( e && e->IsAttributeSpecified(KSMILWRParaSrc) ) - { - User::LeaveIfError( e->GetAttribute(KSMILWRParaSrc, src) ); - } - else - { - // Ok not to have src i.e. no default content. - } - } - - return src; -} - - -// --------------------------------------------------------- -// UniSmilUtils::GetSmilTypeL -// -// --------------------------------------------------------- -TUniSmilType UniSmilUtils::GetSmilTypeL( CMDXMLDocument* aDom ) - { - - if ( UniSmilUtils::IsTemplateSmil( aDom ) ) - { - return ETemplateSmil; - } - else if ( !aDom || - !aDom->DocumentElement() || - !aDom->DocumentElement()->FirstChild() ) - { - return ENoSmil; - } - else - { - CConformanceChecker* checker = CConformanceChecker::NewL(); - CleanupStack::PushL( checker ); - TBool isConf( EFalse ); - - isConf = checker->Check( aDom, EMmsSmil_v2_0, - EAllowVideoTag | - EAllowNonMilliseconds | - EAllowAllAttributes | - EAllowMixedRegionDimensions | - EAllowAnyRegionNames ); - - CleanupStack::PopAndDestroy( checker ); - - if( isConf ) - { - return EMmsSmil; - } - - } - return E3GPPSmil; - } - - -// --------------------------------------------------------- -// UniSmilUtils::IsTemplateSmil -// -// --------------------------------------------------------- - -TBool UniSmilUtils::IsTemplateSmil( CMDXMLDocument* aDom ) - { - TBool ret( EFalse ); - - CMDXMLNode* n = aDom->DocumentElement()->FirstChild(); - - while ( n ) - { - if ( n->NodeName().Compare( KSMILWREleMeta ) == 0) - { - TPtrC v1, v2; - if ( !UniSmilUtils::GetMetaTag( n, v1, v2 ) ) - { - if ( v1.Compare( KSMILMetaSmilProfile ) == 0 && - v2.Compare( KSMILMetaSmilProfileValue ) == 0) - { - ret = ETrue; - break; - } - } - } - else if ( n->NodeName().Compare( KSMILWREleBody ) == 0 ) - { - // Cannot anymore have metatags - break; - } - n = UniSmilUtils::NextNode( n ); - } - return ret; - } - - -// EOF