diff -r 000000000000 -r d46562c3d99d svgtopt/SVG/SVGImpl/src/SVGTestsImpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVG/SVGImpl/src/SVGTestsImpl.cpp Thu Jan 07 16:19:02 2010 +0200 @@ -0,0 +1,473 @@ +/* +* Copyright (c) 2003 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: SVG Implementation source file + * +*/ + + +#include "SVGTestsImpl.h" + + +// --------------------------------------------------------------------------- +// Two phase construction: +// - Implements the SVGTests DOM interface. +// - Partially implemented, only those required +// for passing SVG Test Suite. +// --------------------------------------------------------------------------- +CSvgTestsImpl* CSvgTestsImpl::NewL() + { + CSvgTestsImpl* self = new ( ELeave ) CSvgTestsImpl(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +CSvgTestsImpl* CSvgTestsImpl::NewLC() + { + CSvgTestsImpl* self = new ( ELeave ) CSvgTestsImpl(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +CSvgTestsImpl::~CSvgTestsImpl() + { + if ( iRequiredFeatures ) + { + delete iRequiredFeatures; + iRequiredFeatures = NULL; + } + if ( iRequiredExtensions ) + { + delete iRequiredExtensions; + iRequiredExtensions = NULL; + } + if ( iSystemLanguage ) + { + delete iSystemLanguage; + iSystemLanguage = NULL; + } + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +void CSvgTestsImpl::ConstructL() + { + iRequiredFeatures = new ( ELeave ) CDesCArrayFlat( 1 ); + iRequiredFeatures->Reset(); + iRequiredExtensions = new ( ELeave ) CDesCArrayFlat( 1 ); + iRequiredExtensions->Reset(); + iSystemLanguage = new ( ELeave ) CDesCArrayFlat( 1 ); + iSystemLanguage->Reset(); + + iSystemLanguageEmpty = EFalse; + } + + +// From MSvgTests + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +void CSvgTestsImpl::GetRequiredFeatures( const CDesCArrayFlat*& aRequiredFeatures ) + { + aRequiredFeatures = iRequiredFeatures; + } + +// --------------------------------------------------------------------------- +// function for decoding +// --------------------------------------------------------------------------- +void CSvgTestsImpl::SetRequiredFeatures( CDesCArrayFlat*& aRequiredFeatures ) + { + if(iRequiredFeatures) + { + iRequiredFeatures->Reset(); + delete iRequiredFeatures; + iRequiredFeatures= NULL; + } + iRequiredFeatures= aRequiredFeatures; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +void CSvgTestsImpl::GetRequiredExtensions( const CDesCArrayFlat*& aRequiredExtensions ) + { + aRequiredExtensions = iRequiredExtensions; + } + +// --------------------------------------------------------------------------- +// function for decoding +// --------------------------------------------------------------------------- +void CSvgTestsImpl::SetRequiredExtensions( CDesCArrayFlat*& aRequiredExtensions ) + { + if(iRequiredExtensions) + { + iRequiredExtensions->Reset(); + delete iRequiredExtensions; + iRequiredExtensions= NULL; + } + iRequiredExtensions= aRequiredExtensions; + } + +// --------------------------------------------------------------------------- +// returns false if there was an empty string system language true otherwise +// --------------------------------------------------------------------------- +TBool CSvgTestsImpl::GetSystemLanguage( const CDesCArrayFlat*& aSystemLanguage ) + { + aSystemLanguage = iSystemLanguage; + + if (iSystemLanguageEmpty) + { + return EFalse; + } + + return ETrue; + + } + +// --------------------------------------------------------------------------- +// function for decoding +// --------------------------------------------------------------------------- +void CSvgTestsImpl::SetSystemLanguage( CDesCArrayFlat*& aSystemLanguage ) + { + if(iSystemLanguage) + { + iSystemLanguage->Reset(); + delete iSystemLanguage; + iSystemLanguage= NULL; + } + iSystemLanguage= aSystemLanguage; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +TBool CSvgTestsImpl::HasExtension( const TDesC& /* aExtension */ ) + { + return EFalse; + } + +// For use in requiredFeatures +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +TBool CSvgTestsImpl::HasFeature( const TDesC& aFeature ) + { + // SVG Tiny Feature List + _LIT( KTiny, "http://www.w3.org/TR/SVGMobile/Tiny/feature#" ); + _LIT( KBase, "base" ); + _LIT( KInteractivity, "interactivity" ); + _LIT( KAll, "all" ); + + // SVG 1.1 Feature List + _LIT( KSVG11, "http://www.w3.org/TR/SVG11/feature#" ); + _LIT( KCoreAttr, "CoreAttribute" ); + _LIT( KBasicStr, "BasicStructure" ); + _LIT( KStyle, "Style" ); + _LIT( KPaintAttr, "PaintAttribute" ); + _LIT( KGraphicsAttr, "BasicGraphicsAttribute" ); + _LIT( KHyperlink, "Hyperlinking" ); + _LIT( KXlinkAttr, "XlinkAttribute" ); + _LIT( KCond, "ConditionalProcessing" ); + _LIT( KShape, "Shape" ); + _LIT( KImage, "Image" ); + _LIT( KBasicTest, "BasicText" ); + _LIT( KBasicFont, "BasicFont" ); + _LIT( KDocAttr,"DocumentEventsAttribute" ); + _LIT( KGraphEvt,"GraphicalEventsAttribute" ); + _LIT( KAnimEvt,"AnimationEventsAttribute" ); + _LIT( KScript, "Scripting" ); + _LIT( KView, "View" ); + _LIT( KAnim, "SVG-animation" ); + _LIT( KExt, "Extensibility" ); + + _LIT( KSVG12, "http://www.w3.org/TR/SVG12/feature#" ); + _LIT( KAudio, "Audio"); + + // SVG 1.2 Feature List + // SVG Feature List + _LIT( KStatic, "org.w3c.svg.static" ); + _LIT( KDynamic, "org.w3c.svg.dynamic" ); + + TPtrC tinybase( KTiny ); + if( (aFeature.Length()-tinybase.Length()) > 1 ) + { + TPtrC rightTiny= aFeature.Right(aFeature.Length()-tinybase.Length() ); + if ( rightTiny.Match(KBase) != KErrNotFound) + return ETrue; + if ( rightTiny.Match(KInteractivity) != KErrNotFound) + return ETrue; + if ( rightTiny.Match(KAll) != KErrNotFound ) + return ETrue; + } + + TPtrC svg11base( KSVG11 ); + if( (aFeature.Length()-svg11base.Length()) > 1 ) + { + TPtrC rightSvg11= aFeature.Right(aFeature.Length()-svg11base.Length() ); + if ( rightSvg11.Match(KAnim) != KErrNotFound ) + return ETrue; + if ( rightSvg11.Match(KCoreAttr) != KErrNotFound ) + return ETrue; + if ( rightSvg11.Match(KBasicStr) != KErrNotFound ) + return ETrue; + if ( rightSvg11.Match(KStyle) != KErrNotFound ) + return ETrue; + if ( rightSvg11.Match(KPaintAttr) != KErrNotFound ) + return ETrue; + if ( rightSvg11.Match(KGraphicsAttr) != KErrNotFound ) + return ETrue; + if ( rightSvg11.Match(KHyperlink) != KErrNotFound ) + return ETrue; + if ( rightSvg11.Match(KXlinkAttr) != KErrNotFound ) + return ETrue; + if (rightSvg11.Match(KCond) != KErrNotFound ) + return ETrue; + if ( rightSvg11.Match(KShape) != KErrNotFound ) + return ETrue; + if ( rightSvg11.Match(KImage) != KErrNotFound ) + return ETrue; + if ( rightSvg11.Match(KBasicTest) != KErrNotFound ) + return ETrue; + if (rightSvg11.Match(KBasicFont) != KErrNotFound ) + return ETrue; + if ( rightSvg11.Match(KDocAttr) != KErrNotFound ) + return ETrue; + if ( rightSvg11.Match(KGraphEvt) != KErrNotFound ) + return ETrue; + if ( rightSvg11.Match(KAnimEvt) != KErrNotFound ) + return ETrue; + if ( rightSvg11.Match(KScript)!= KErrNotFound ) + return EFalse; // Scripting is not supported. + if ( rightSvg11.Match(KView) != KErrNotFound ) + return ETrue; + if ( rightSvg11.Match(KAnim) != KErrNotFound ) + return ETrue; + if ( rightSvg11.Match(KExt) != KErrNotFound ) + return ETrue; + } + + TPtrC svg12base( KSVG12 ); + if( (aFeature.Length()-svg12base.Length()) > 1 ) + { + TPtrC rightSvg12= aFeature.Right(aFeature.Length()-svg12base.Length() ); + if ( rightSvg12.Match(KAudio) != KErrNotFound ) + { + return ETrue; + } + } + + if ( aFeature == KStatic ) + return ETrue; + if ( aFeature == KDynamic ) + return EFalse; + else + return FALSE; + } + +TBool CSvgTestsImpl::HasAnyTests() +{ + const CDesCArrayFlat* tempTestArray = NULL; + + GetRequiredFeatures(tempTestArray); + if (tempTestArray && tempTestArray->Count() > 0) + { + return ETrue; + } + + GetSystemLanguage(tempTestArray); + if (tempTestArray && tempTestArray->Count() > 0) + { + return ETrue; + } + + GetRequiredExtensions(tempTestArray); + if (tempTestArray && tempTestArray->Count() > 0) + { + return ETrue; + } + + if (iSystemLanguageEmpty) + { + return ETrue; + } + + return EFalse; +} + +// Implementation + +TBool CSvgTestsImpl::SetRequiredFeatureAttribute( const TDesC& aValue ) +{ + TLex input( aValue ); + + while ( !( input.Eos() ) ) + { + input.SkipSpace(); + input.Mark(); + input.SkipCharacters(); + TPtrC token = input.MarkedToken(); // then extract token + TRAPD(error,iRequiredFeatures->AppendL( token )); + + if (error != KErrNone) + { + //Error Processing + return EFalse; + } + } + + return ETrue; +} + +TBool CSvgTestsImpl::SetRequiredExtensionAttribute( const TDesC& aValue ) +{ + TLex input( aValue ); + + if ( aValue.Length() == 0 ) + { + TRAPD(error1,iRequiredExtensions->AppendL( aValue )); + + if (error1 != KErrNone) + { + //Error Processing + return EFalse; + } + } + else + { + while ( !( input.Eos() ) ) + { + input.SkipSpace(); + input.Mark(); + input.SkipCharacters(); + TPtrC token = input.MarkedToken(); // then extract token + TRAPD(error,iRequiredExtensions->AppendL( token )); + + if (error != KErrNone) + { + //Error Processing + return EFalse; + } + } + } + return ETrue; +} + +TBool CSvgTestsImpl::SetSystemLanguageAttribute( const TDesC& aValue ) +{ + TLex input( aValue ); + + iSystemLanguageEmpty = EFalse; + + if ( input.Eos() ) + { + iSystemLanguageEmpty = ETrue; + } + else + { + while ( !( input.Eos() ) ) + { + input.SkipSpace(); + input.Mark(); + input.SkipCharacters(); + TPtrC token = input.MarkedToken(); // then extract token + TRAPD(error,iSystemLanguage->AppendL( token )); + + if (error != KErrNone) + { + //Error Processing + return EFalse; + } + } + } + + return ETrue; + +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +TBool CSvgTestsImpl::SetTestAttributeL( const TDesC& aPropertyName, + const TDesC& aValue ) +{ + + _LIT( KRequiredFeatures, "requiredFeatures" ); + _LIT( KRequiredExtensions, "requiredExtensions" ); + _LIT( KSystemLanguage, "systemLanguage" ); + + if (aPropertyName == KRequiredFeatures) + { + return SetRequiredFeatureAttribute(aValue); + } + else if (aPropertyName == KRequiredExtensions) + { + return SetRequiredExtensionAttribute(aValue); + } + else if (aPropertyName == KSystemLanguage) + { + return SetSystemLanguageAttribute(aValue); + } + else + { + return EFalse; + } +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +CSvgTestsImpl* CSvgTestsImpl::CloneL() + { + CSvgTestsImpl* retValue = CSvgTestsImpl::NewL(); + + CleanupStack::PushL(retValue); + // no need to call Reset() on any of these arrays because + // that already happened in the call to NewL above + int i; + + // *** copy required features + TInt requiredFeaturesCnt = this->iRequiredFeatures->Count(); + for (i=0; i< requiredFeaturesCnt; i++) + { + retValue->iRequiredFeatures->AppendL(this->iRequiredFeatures->operator[](i)); + } + + // *** copy required extensions + TInt requiredExtensionsCnt = this->iRequiredExtensions->Count(); + for (i=0; i< requiredExtensionsCnt; i++) + { + retValue->iRequiredExtensions->AppendL(this->iRequiredExtensions->operator[](i)); + } + + // *** copy system language + TInt systemLanguageCnt = this->iSystemLanguage->Count(); + for (i=0; i< systemLanguageCnt; i++) + { + retValue->iSystemLanguage->AppendL(this->iSystemLanguage->operator[](i)); + } + CleanupStack::Pop(); + return retValue; + }