svgtopt/SVGEngineJI/src/SvgJavaInterfaceImpl.cpp
changeset 0 d46562c3d99d
child 8 baacd33d915b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtopt/SVGEngineJI/src/SvgJavaInterfaceImpl.cpp	Thu Jan 07 16:19:02 2010 +0200
@@ -0,0 +1,2987 @@
+/*
+* Copyright (c) 2004 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 Engine source file
+ *
+*/
+
+#include <SvgJavaInterfaceImpl.h>
+#include "SVGErrorImpl.h"
+#include "SVGjsrconstants.h"
+
+//utility classes only can be removed in final version
+#include <hal.h>
+#include <hal_data.h>
+#include <imageconversion.h>
+
+// ***********************************************************************
+// Java error
+// ***********************************************************************
+
+// ==========================================================================
+// Two-phase constructor
+// ==========================================================================
+TInt CJavaError::NewL( CSvgErrorImpl& aError )
+    {
+    CJavaError* self = new ( ELeave ) CJavaError();
+    CleanupStack::PushL( self );
+    self->ConstructL( aError );
+    CleanupStack::Pop();
+    MJavaError* selfInterface = self;
+	return ( reinterpret_cast<TUint>( selfInterface ) >> 2 );
+    }
+
+// ==========================================================================
+// Destructor
+// ==========================================================================
+CJavaError::~CJavaError()
+    {
+    if(iDescription)
+		{
+		delete iDescription;
+		iDescription = NULL;
+		}
+    }
+
+// ==========================================================================
+// return Etrue if an error is indicated by this object.
+// ==========================================================================
+TBool CJavaError::HasError() const
+{
+    return iErrorCode != KErrNone;
+}
+
+// ==========================================================================
+// return Etrue if the error indicated by this object is only a warning.
+// ==========================================================================
+TBool CJavaError::IsWarning() const
+{
+    return iIsWarning;
+}
+
+// ==========================================================================
+// Get the error code.
+// ==========================================================================
+TInt CJavaError::ErrorCode() const
+{
+    return iErrorCode;
+}
+
+// ==========================================================================
+// Get the error description.
+// ==========================================================================
+TDesC8& CJavaError::Description()
+{
+    return *iDescription;
+}
+
+// ==========================================================================
+// Second phase of construction
+// ==========================================================================
+void CJavaError::ConstructL( CSvgErrorImpl& aError )
+{
+	// Error code
+    switch( aError.ErrorCode() )
+    	{
+    	case ESvgInvalidAttributeValue:
+		case ESvgUnknown:
+    		{
+    		iErrorCode = KJavaIOException;
+    		break;
+			}
+    	case KErrNoMemory:
+    		{
+    		iErrorCode = KErrNoMemory;
+    		break;
+    		}
+    	default: iErrorCode = KJavaIOException;
+    	}
+	// Warning
+	iIsWarning = aError.IsWarning();
+	// Description
+    iDescription = HBufC8::NewL( aError.Description().Length() + 1);
+    TPtr8 ptr = iDescription->Des();
+	ptr.Copy( aError.Description() );
+    ptr.ZeroTerminate();
+	}
+
+// ==========================================================================
+// Constructor
+// ==========================================================================
+CJavaError::CJavaError()
+: iErrorCode( KErrNone ),
+  iIsWarning( EFalse ),
+  iDescription( NULL )
+{
+}
+// ***********************************************************************
+// SVG Engine
+// ***********************************************************************
+
+EXPORT_C CSvgJavaInterfaceImpl::CSvgJavaInterfaceImpl(): iTempDoc( NULL )
+{
+}
+
+EXPORT_C CSvgJavaInterfaceImpl* CSvgJavaInterfaceImpl::NewL( TFontSpec& aFontSpec )
+{
+    CSvgJavaInterfaceImpl* self = new ( ELeave ) CSvgJavaInterfaceImpl();
+    CleanupStack::PushL( self );
+    self->ConstructL(aFontSpec);
+    CleanupStack::Pop();
+    return self;
+}
+
+EXPORT_C CSvgJavaInterfaceImpl* CSvgJavaInterfaceImpl::NewL()
+{
+    CSvgJavaInterfaceImpl* self = new ( ELeave ) CSvgJavaInterfaceImpl();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+}
+
+void CSvgJavaInterfaceImpl::ConstructL( TFontSpec& aFontSpec )
+{
+    CSvgEngineInterfaceImpl::ConstructL(aFontSpec);
+    iTempDoc = (CSvgDocumentImpl*)SvgDocumentCreateEmpty();
+
+    AddListener( (MSvgMouseListener*)this, ESvgMouseListener );
+
+    //TO BE ADDED IN THE FUTURE FOR TEXT AREA AND PROGRESSIVE RENDERING
+    //AddListener( (MSvgTextAreaListener*)this, ESvgTextAreaListener );
+    //AddListener( (MSvgTextListener*)this, ESvgTextListener );
+    //AddListener( (MSvgLoadingListener*)this, ESvgLoadingListener );
+}
+
+void CSvgJavaInterfaceImpl::ConstructL()
+{
+    CSvgEngineInterfaceImpl::ConstructL();
+    iTempDoc = (CSvgDocumentImpl*)SvgDocumentCreateEmpty();
+
+    AddListener( (MSvgMouseListener*)this, ESvgMouseListener );
+
+    //TO BE ADDED IN THE FUTURE FOR TEXT AREA AND PROGRESSIVE RENDERING
+    //AddListener( (MSvgTextAreaListener*)this, ESvgTextAreaListener );
+    //AddListener( (MSvgTextListener*)this, ESvgTextListener );
+    //AddListener( (MSvgLoadingListener*)this, ESvgLoadingListener );
+}
+
+EXPORT_C CSvgJavaInterfaceImpl::~CSvgJavaInterfaceImpl()
+{
+	if (iTempDoc)
+	{
+		DestroyDocument( iTempDoc );
+		iTempDoc = NULL;
+	}
+}
+
+/**
+ * Create an SvgEngine instance.
+ */
+EXPORT_C SvgEngineHandle CSvgJavaInterfaceImpl::SvgEngineCreate()
+{
+    CSvgEngineImpl *lSvgEngine = NULL;
+    TRAPD(error,lSvgEngine = SvgEngineNewL());
+    if(error == KErrNone)
+        {
+        return (SvgEngineHandle)lSvgEngine;
+        }
+    return 0;
+}
+/**
+ * Request to set render quality.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgEngineSetRenderQuality( SvgEngineHandle aEngineHandle, TInt aQuality )
+{
+	SetRenderQuality( aQuality, aEngineHandle );	
+}
+
+/**
+ * Request to render the SVG document.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgEngineRenderDocument( SvgEngineHandle aEngineHandle, SvgDocumentHandle aDocumentHandle, TInt aSurfaceHandle, TInt aSurfaceMaskHandle, TReal32 aCurrentTime )
+{
+    CSvgEngineInterfaceImpl::iFileIsLoaded = ETrue;
+
+    SetDocument( (CSvgEngineImpl*)aEngineHandle, (CSvgDocumentImpl*)aDocumentHandle );
+
+    // GfxContext creation
+    TRAPD(error, SetGdiContextL( (CSvgEngineImpl*)aEngineHandle, (CFbsBitmap*)aSurfaceHandle ) );
+    if ( error != KErrNone )
+       {
+       // ignore trap error
+       }
+
+	//this udpates things like Viewport with whatever preserveAspectRatio and widths are set
+	//InitializeEngine((CSvgEngineImpl*)aEngineHandle);
+
+	if ( ((CFbsBitmap*)aSurfaceMaskHandle) != NULL)
+	GenerateMask((CFbsBitmap*)aSurfaceMaskHandle);
+
+    RenderFrame( (CSvgEngineImpl*)aEngineHandle, (TUint)(aCurrentTime * 1000) );
+
+	//utility functions   
+    /*//TDisplayMode lDisplay = ((CFbsBitmap*)aSurfaceHandle)->DisplayMode();
+    
+   	//call it like this:
+	TBuf<KMaxName> myText;
+	myText.Copy(_L("Andrew's Test Bitmap"));
+
+	ConvertBitmapToFileL((CFbsBitmap*)aSurfaceHandle, myText);
+	*/
+}
+
+/**
+ *
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgEngineRenderDocumentL( 
+		SvgEngineHandle aEngineHandle, SvgDocumentHandle aDocumentHandle, 
+		TInt aSurfaceHandle, const TPoint& aAnchor, const TRect& aRenderArea, TReal32 aCurrentTime, TReal32 aAlpha ) __SOFTFP
+	{
+    CSvgEngineInterfaceImpl::iFileIsLoaded = ETrue;
+    SetDocument( (CSvgEngineImpl*)aEngineHandle, (CSvgDocumentImpl*)aDocumentHandle );
+
+	CFbsBitmap* target = reinterpret_cast<CFbsBitmap*>( aSurfaceHandle );	
+	CFbsBitmap* source = new ( ELeave ) CFbsBitmap();
+
+	User::LeaveIfError( source->Create( 
+		TSize( SvgDocumentGetViewportWidth( aDocumentHandle ), 
+		       SvgDocumentGetViewportHeight( aDocumentHandle ) ),
+			   EColor16MA ) ); 
+	
+    // GfxContext creation
+    TRAPD(error, SetGdiContextL( (CSvgEngineImpl*)aEngineHandle, source ) );
+    if ( error != KErrNone )
+       {
+       // ignore trap error
+       }
+
+    RenderFrame( (CSvgEngineImpl*)aEngineHandle, (TUint)(aCurrentTime * 1000) );
+
+	source->LockHeap();
+	target->LockHeap();
+
+	// Source 
+	TUint32* sourceBuffer = source->DataAddress();
+	const TInt sourceBufferWidth( source->SizeInPixels().iWidth );
+	
+	// Target 
+	TUint32* targetBuffer = target->DataAddress();
+	const TInt targetBufferWidth( target->SizeInPixels().iWidth );
+
+	// Set source buffer x position
+	if( aAnchor.iX < aRenderArea.iTl.iX ) 
+		{ 
+		sourceBuffer += ( aRenderArea.iTl.iX - aAnchor.iX ); 
+		}
+	// Set source buffer y position
+	if( aAnchor.iY < aRenderArea.iTl.iY ) 
+		{ 
+		sourceBuffer += sourceBufferWidth * ( aAnchor.iY - aRenderArea.iTl.iY ); 
+		}
+
+	// Set target buffer x position
+	targetBuffer += aRenderArea.iTl.iX;
+	// Set target buffer y position
+	targetBuffer += targetBufferWidth * aRenderArea.iTl.iY;
+
+	TInt heightIndex = 0;
+	TInt widthIndex = 0;
+	// If fully opaque
+	if( aAlpha == 1.0f )
+		{
+		// Line loop
+		for( heightIndex = 0; heightIndex < aRenderArea.Height(); heightIndex++ )
+			{
+			// Pixel loop
+			for( widthIndex = 0; widthIndex < aRenderArea.Width(); widthIndex++ )
+				{
+				// If alpha channel is not zero then do pixel coping
+				if( ( 0xff000000 & *sourceBuffer ) != 0x0 ) 
+					{ 
+					*targetBuffer = *sourceBuffer;
+					// Set the alpha value 0xFF 	
+					*targetBuffer |= 0xff000000;
+					}
+				// Next pixel
+				sourceBuffer++;
+				targetBuffer++;
+				}
+			sourceBuffer = sourceBuffer - aRenderArea.Width() + sourceBufferWidth;
+			targetBuffer = targetBuffer - aRenderArea.Width() + targetBufferWidth;
+			}
+		}
+	// Partly opaque
+	else
+		{
+
+		TUint alpha = STATIC_CAST( TUint8, ( aAlpha * 255 ) );
+		TUint antiAlpha = 255 - alpha;
+
+		TUint8* sourcePtr = NULL;
+		TUint8* targetPtr = NULL;
+		for( heightIndex = 0; heightIndex < aRenderArea.Height(); heightIndex++ )
+			{
+			// Pixel loop
+			for( widthIndex = 0; widthIndex < aRenderArea.Width(); widthIndex++ )
+				{
+				// If alpha channel is not zero then do alpha plending
+				if( ( 0xff000000 & *sourceBuffer ) != 0x0 ) 
+					{ 
+					targetPtr = REINTERPRET_CAST( TUint8*, targetBuffer );
+					sourcePtr = REINTERPRET_CAST( TUint8*, sourceBuffer );
+					// Blue component
+					*targetPtr = ( TUint8 )( ( ( TUint )( *sourcePtr ) * alpha + 
+											   ( TUint )( *targetPtr ) * antiAlpha ) / 255 ); 
+     				sourcePtr++;
+					targetPtr++;
+					// Green component
+					*targetPtr = ( TUint8 )( ( ( TUint )( *sourcePtr ) * alpha + 
+											   ( TUint )( *targetPtr ) * antiAlpha ) / 255 ); 
+     				sourcePtr++;
+					targetPtr++;
+					// Red component
+					*targetPtr = ( TUint8 )( ( ( TUint )( *sourcePtr ) * alpha + 
+											   ( TUint )( *targetPtr ) * antiAlpha ) / 255 ); 
+     				// Alpha component
+					sourcePtr++;
+					targetPtr++;
+					*targetPtr = *sourcePtr;
+					// Set the alpha value 0xFF	
+					*targetPtr |= 0xff000000;
+					}
+				// Next pixel
+				sourceBuffer++;
+				targetBuffer++;
+				}
+			// Next line
+			sourceBuffer = sourceBuffer - aRenderArea.Width() + sourceBufferWidth;
+			targetBuffer = targetBuffer - aRenderArea.Width() + targetBufferWidth;
+			}
+		}
+		source->UnlockHeap();
+		target->UnlockHeap();
+		delete source;
+
+	}
+
+/**
+ * Request to destroy the given engine by handle.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgEngineDestroy( SvgEngineHandle aEngineHandle )
+
+{
+    DestroyEngine( (CSvgEngineImpl *)aEngineHandle );
+}
+
+/*
+* Sets the animation back to time 0 and then starts the internal engine timer
+*/
+EXPORT_C void CSvgJavaInterfaceImpl::SvgEngineStart( SvgEngineHandle aEngineHandle )
+{
+	Start((CSvgEngineImpl*)aEngineHandle);
+}
+
+/*
+* Stops the internal SVG engine timer
+*/
+EXPORT_C void CSvgJavaInterfaceImpl::SvgEngineStop( SvgEngineHandle aEngineHandle )
+{
+	Stop((CSvgEngineImpl*)aEngineHandle);
+}
+
+/*
+* Resumes the internal SVG engine timer
+*/
+EXPORT_C void CSvgJavaInterfaceImpl::SvgEngineResume( SvgEngineHandle aEngineHandle )
+{
+	Resume((CSvgEngineImpl*)aEngineHandle);
+}
+
+
+// *****************************************************************************
+// *** SVG Rendering Surface Functions
+// *****************************************************************************
+/**
+ * Create a Svg Rendering Surface.
+ */
+
+ // SVG Engine creates the buffer for the surface according width and height. Currently, application gives us the buffer.
+
+EXPORT_C SvgSurfaceHandle CSvgJavaInterfaceImpl::SvgRenderingSurfaceCreate( TInt aWidth, TInt aHeight )
+{
+    // First create the frame buffer with aWidth and aHeight
+    TSize size(aWidth, aHeight);
+
+    // Can't use ELeave because this function can't leave
+    // Using ELeave but didn't handle (no trap or propagate to parents) causes more confusing.
+    // Check for NULL is good enough.
+    // Ignore CodeScanner error (Code Review Guide)
+    CFbsBitmap *lFrameBuffer = new CFbsBitmap();
+
+    // Has same effect as using ELeave
+    if ( !lFrameBuffer )
+        {
+        return NULL;
+        }
+
+    TInt lErrorCode = KErrNone;
+	TInt displayColors = 256*256;
+	HAL::Get( HALData::EDisplayColors, displayColors );
+	if ( displayColors == 256*256*256 )
+    	{
+   		lErrorCode = lFrameBuffer->Create( size, EColor16MU );
+	    }
+	else
+	    {
+   	 	lErrorCode = lFrameBuffer->Create( size, EColor64K );
+	    }
+
+    if(lErrorCode != KErrNone)
+        {
+        return NULL;
+        }
+
+    return (SvgSurfaceHandle) lFrameBuffer;
+
+}
+/**
+ * Destroy a Svg Rendering Surface.
+ */
+
+EXPORT_C  void CSvgJavaInterfaceImpl::SvgRenderingSurfaceDestroy( SvgSurfaceHandle aSurface )
+{
+    if(aSurface)
+        {
+        delete (CFbsBitmap*)aSurface;
+        return;
+        }
+}
+/**
+ * Get a pointer to the Svg Rendering surface.
+ */
+
+EXPORT_C TUint* CSvgJavaInterfaceImpl::SvgRenderingSurfaceGetBuffer( SvgSurfaceHandle aSurface )
+{
+    return (TUint*)aSurface;
+}
+/**
+ * Get the width of the Svg Rendering Surface.
+ */
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgRenderingSurfaceGetWidth( SvgSurfaceHandle aSurface )
+{
+    if(aSurface)
+        {
+        return ((CFbsBitmap *)aSurface)->SizeInPixels().iWidth;
+        }
+    else
+        {
+        return 0;
+        }
+}
+/**
+ * Get the height of the Svg Rendering Surface
+ */
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgRenderingSurfaceGetHeight( SvgSurfaceHandle aSurface )
+{
+    if(aSurface)
+        {
+        return ((CFbsBitmap *)aSurface)->SizeInPixels().iHeight;
+        }
+    else
+        {
+        return 0;
+        }
+}
+
+// ***********************************************************************
+// SVG Document
+// ***********************************************************************
+
+/**
+ * Create an empty svg document.
+ */
+EXPORT_C SvgDocumentHandle CSvgJavaInterfaceImpl::SvgDocumentCreateEmpty()
+{
+    CSvgDocumentImpl *lSvgDoc = NULL;
+    TRAPD(error,lSvgDoc = SvgDocumentNewL());
+    if(error == KErrNone)
+        {
+        }
+
+     //sets up the root element
+    InitRootElement(lSvgDoc);
+
+    return ((SvgDocumentHandle)lSvgDoc);
+}
+
+/**
+ * Create a svg document by parsing the given STRING (not file).
+ */
+EXPORT_C SvgDocumentHandle CSvgJavaInterfaceImpl::SvgDocumentCreateL( const TPtrC16& aString )
+{
+    CSvgDocumentImpl *lSvgDoc = NULL;
+    TRAPD(error ,lSvgDoc = SvgDocumentNewL());
+    if(error != KErrNone)
+        {
+        	#ifdef _DEBUG
+        	RDebug::Printf("JavaInterfaceImpl: Document Failed to Create");
+        	#endif
+
+        return NULL;
+        }
+
+    TRAPD( error2, FillDocumentL( lSvgDoc, aString ) );
+    if(error2 != KErrNone)
+        {
+        // error is set in iSvgError
+        }
+
+    if( iSvgError && iSvgError->HasError() )
+    	{
+    		if( lSvgDoc != NULL )
+        	{
+				DestroyDocument(lSvgDoc);
+				lSvgDoc = NULL;
+        	}
+
+		User::Leave( CJavaError::NewL( *iSvgError ) );
+    	}
+
+    return  ((SvgDocumentHandle)lSvgDoc);
+}
+
+/**
+ * Destroy the given svg document (by handle).
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgDocumentDestroy( SvgDocumentHandle aDocumentHandle )
+{
+    DestroyDocument( (CSvgDocumentImpl*)aDocumentHandle );
+}
+
+/**
+ * Svg Document RequestCompleted
+ */
+ // Returns the data from a resource handler to be attached to
+ // the elements with the corresponding uri
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgDocumentRequestCompleted( SvgDocumentHandle aDocument, const TPtrC16& aUri, const TPtrC8& aData)
+{
+    if ( aUri.Length() > 0 && aDocument != NULL)
+    {
+        AddExternalData((CSvgDocumentImpl*)aDocument, aUri, aData, ETrue, aData.Size());
+       
+        return 1;
+    }
+    return 0;
+}
+
+/**
+ * Svg Document GetExternalListItem.
+ */
+ // Returns a character ptr to a URI for the element at (index) in
+ // the external elements list (any item that has a uri or image link)
+
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgDocumentGetExternalListItem(SvgDocumentHandle aDocumentHandle, TInt aIndex, TPtrC16& aItem)
+{
+    //returns the uri associated with the element(at index) that is requires an external resource
+
+    if (aIndex < GetExternalListSize( reinterpret_cast< CSvgDocumentImpl* >( aDocumentHandle ) ) )
+    {
+	  TRAPD(error1, GetExternalListItemL( 
+				( reinterpret_cast< CSvgDocumentImpl* >( aDocumentHandle ) ), aIndex, aItem ));
+		
+      return error1; 	    
+    }
+    
+	return KErrNotFound;		
+}
+
+/**
+ * Svg Document get external list item.
+ */
+ // What is the purpose of this api
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgDocumentGetExternalListSize( SvgDocumentHandle aDocumentHandle )
+{
+    //the total number of external elements requested in the document i.e. the number of uris
+
+    return (GetExternalListSize((CSvgDocumentImpl*)aDocumentHandle));
+}
+
+/**
+ * Set Media time for the specified document.
+ */
+EXPORT_C  void CSvgJavaInterfaceImpl::SvgDocumentSetMediaTime( SvgDocumentHandle aDocumentHandle, TReal32 seconds ) __SOFTFP
+{
+    if(aDocumentHandle)
+        {
+        // this means that the current time for the document needs to be changed.
+        TUint32 lTimeInMilliSeconds = (TUint32)(seconds * 1000);
+        SvgSetMediaTime((CSvgDocumentImpl*)aDocumentHandle , lTimeInMilliSeconds);
+        }
+}
+
+/**
+ * Get Media time for the specified document.
+ */
+EXPORT_C TReal32 CSvgJavaInterfaceImpl::SvgDocumentGetMediaTime( SvgDocumentHandle aDocumentHandle ) __SOFTFP
+{
+    if(aDocumentHandle)
+        {
+        TReal32 ltime = SvgGetMediaTime((CSvgDocumentImpl*) aDocumentHandle );
+        // convert in to seconds.
+        if(ltime)
+            {
+            return (ltime / 1000);
+            }
+         // media time is 0
+        }
+    return 0;
+}
+
+/**
+ * Get the viewport width for the given document.
+ */
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgDocumentGetViewportWidth( SvgDocumentHandle aDocumentHandle)
+{
+    return ( aDocumentHandle) ? GetViewportWidth( (CSvgDocumentImpl*)aDocumentHandle ) : 0;
+}
+
+/**
+ * Get the viewport height for the given document.
+ */
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgDocumentGetViewportHeight( SvgDocumentHandle aDocumentHandle )
+{
+    return ( aDocumentHandle) ? GetViewportHeight( (CSvgDocumentImpl*)aDocumentHandle ) : 0;
+}
+
+/**
+ * Set the viewport width for the given document.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgDocumentSetViewportWidth( SvgDocumentHandle aDocumentHandle, TInt aWidth )
+{
+    if ( aDocumentHandle ) SetViewportWidth( (CSvgDocumentImpl*)aDocumentHandle, aWidth );
+}
+
+/**
+ * Set the viewport height for the given document.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgDocumentSetViewportHeight( SvgDocumentHandle aDocumentHandle, TInt aHeight )
+{
+    if ( aDocumentHandle ) SetViewportHeight( (CSvgDocumentImpl*)aDocumentHandle, aHeight );
+}
+
+EXPORT_C void CSvgJavaInterfaceImpl::SvgDocumentViewportInit( SvgDocumentHandle aDocumentHandle )
+{
+    if ( aDocumentHandle ) ViewportInit( (CSvgDocumentImpl*)aDocumentHandle );
+}
+
+/**
+ * Get the viewport width units for the given document.
+ */
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgDocumentGetViewportWidthUnits( SvgDocumentHandle aDocumentHandle )
+{
+   return ( aDocumentHandle ) ? GetViewportUnits( (CSvgDocumentImpl*)aDocumentHandle ) : 0;
+}
+
+/**
+ * Get the viewport height units for the given document.
+ */
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgDocumentGetViewportHeightUnits( SvgDocumentHandle aDocumentHandle)
+{
+    return ( aDocumentHandle) ? GetViewportUnits( (CSvgDocumentImpl*)aDocumentHandle ) : 0;
+}
+
+/**
+ * Get the root element for the given document.
+ */
+EXPORT_C SvgElementHandle CSvgJavaInterfaceImpl::SvgDocumentGetRootElement( SvgDocumentHandle aDocumentHandle )
+{
+    return (SvgElementHandle)GetRootElement( (CSvgDocumentImpl*)aDocumentHandle );
+}
+
+/**
+ * Get the svg element identified by the given id-string.
+ */
+EXPORT_C SvgElementHandle CSvgJavaInterfaceImpl::SvgDocumentGetElementById( SvgDocumentHandle aDocumentHandle, const TPtrC16& aID )
+{
+    if ( aID.Length() > 0 )
+    {
+        SvgElementHandle elementHandle =
+            (SvgElementHandle)GetElementById( (CSvgDocumentImpl*)aDocumentHandle, aID );
+
+        return elementHandle;
+    }
+    else
+    {
+        return 0;
+    }
+}
+
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgDocumentGetNumberOfIds(SvgDocumentHandle aDocumentHandle )
+{
+    return GetNumberOfIds((CSvgDocumentImpl*)aDocumentHandle);
+}
+
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgDocumentGetId(SvgDocumentHandle aDocumentHandle, TInt index, TPtrC16& aId)
+{
+    TDesC* myId = GetId((CSvgDocumentImpl*)aDocumentHandle, (TInt)index);
+    if ( myId == NULL )
+        return NULL;
+    
+    aId.Set( *myId );
+	
+	return KErrNone;
+}
+
+/**
+ * Set the begin animation time for the given element.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgDocumentBeginElementAt( SvgDocumentHandle aDocumentHandle,
+                                    SvgElementHandle aElementHandle,
+                                    TReal32 aOffsetTime ) __SOFTFP
+{
+    if(aDocumentHandle)
+        {
+        if(aElementHandle)
+            {
+            // should their be any conversion between the time. ie possible
+            // multiplication. The below conversion is done thinking that the
+            // aOffsetTime value represents the time in seconds.
+            TUint32 lTime = (TUint32)(aOffsetTime * 1000);
+            SvgBeginElementAt( (CXmlElementImpl*)aElementHandle , lTime, (CSvgDocumentImpl*)aDocumentHandle );
+            }
+        }
+}
+/**
+ * Set the end animation time for the given element.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgDocumentEndElementAt( SvgDocumentHandle aDocumentHandle,
+                                  SvgElementHandle aElementHandle,
+                                  TReal32 aOffsetTime ) __SOFTFP
+{
+    if(aDocumentHandle)
+        {
+        if(aElementHandle)
+            {
+            // should their be any conversion between the time. ie possible
+            // multiplication. The below conversion is done thinking that the
+            // aOffsetTime value represents the time in seconds.
+            TUint32 lTime = (TUint32)(aOffsetTime * 1000);
+            SvgEndElementAt((CXmlElementImpl*)aElementHandle , lTime, (CSvgDocumentImpl*)aDocumentHandle );
+            }
+        }
+}
+
+/**
+ * Set the given element to have the focus.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgDocumentFocusOn( SvgDocumentHandle aDocumentHandle,
+                             SvgElementHandle aElementHandle )
+ {
+    if(aDocumentHandle && aElementHandle)
+        {
+        SetFocusElement((CXmlElementImpl*)aElementHandle,(CSvgDocumentImpl*)aDocumentHandle);
+        DispatchFocusInEvent((CSvgDocumentImpl*)aDocumentHandle,(CSvgElementImpl *)aElementHandle);
+        }
+ }
+ 
+ 
+ /**
+ * Unset the focus from the given element passed as parameter.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgDocumentFocusOut( SvgDocumentHandle aDocumentHandle,
+                             SvgElementHandle aElementHandle)
+ {
+    if(aDocumentHandle && aElementHandle)
+        {
+       	DispatchFocusOutEvent((CSvgDocumentImpl*)aDocumentHandle,(CSvgElementImpl *)aElementHandle);
+        }
+ }
+
+/**
+ * Get the element having the focus.
+ */
+EXPORT_C SvgElementHandle CSvgJavaInterfaceImpl::SvgDocumentGetFocus( SvgDocumentHandle aDocumentHandle )
+{
+    if(aDocumentHandle)
+        {
+        return (SvgElementHandle)GetFocusedElement((CSvgDocumentImpl*)aDocumentHandle);
+        }
+    else
+        {
+        return 0;
+        }
+}
+
+/**
+ * Activate the element that has the focus.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgDocumentActivate( SvgDocumentHandle aDocumentHandle )
+{
+    if(aDocumentHandle)
+        {
+        SvgActivateAnimation((CSvgDocumentImpl*)aDocumentHandle);
+        }
+}
+
+/**
+ * Request a mouse event at the given coordinate.
+ */
+EXPORT_C SvgElementHandle CSvgJavaInterfaceImpl::SvgDocumentDispatchMouseEvent( SvgDocumentHandle aDocumentHandle,
+                                         TInt aMouseX, TInt aMouseY )
+{
+    if(aDocumentHandle)
+        {
+        // Dispatch of all mouse events.
+        return (DispatchMouseEventsAt((CSvgDocumentImpl*)aDocumentHandle, aMouseX, aMouseY, (MSvgMouseListener*)this));
+        }
+
+        return 0;
+}
+
+/**
+ * Check if document has animation.
+ */
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgDocumentHasAnimation( SvgDocumentHandle aDocumentHandle )
+{
+    if(aDocumentHandle)
+        {
+       	 	TBool lValue = SvgHasAnimation((CSvgDocumentImpl*)aDocumentHandle);
+
+        	if(lValue)
+        	{
+        		return 1;
+        	}
+        }
+        
+    return 0;
+}
+
+/**
+ * Check if element has animation.
+ */
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgElementHasAnimation( SvgElementHandle aElementHandle )
+{
+    if(aElementHandle)
+        {
+       	 	SvgElementHandle aFirstChildElement = SvgElementGetFirstElementChild(aElementHandle);
+					
+					while (aFirstChildElement)
+					{
+						if ( IsAnimationElemId( GetElementType((CXmlElementImpl*)aFirstChildElement)) )
+						{
+							return 1;
+						}
+						
+						aFirstChildElement = SvgElementGetNextElementSibling( aFirstChildElement );
+					}
+        }
+
+    return 0;
+}
+
+// ***********************************************************************
+// SVG Element
+// ***********************************************************************
+
+/**
+ * Create a new svg element of the given tag string and append to the given
+ * svg element parent.
+ */
+
+
+EXPORT_C SvgElementHandle CSvgJavaInterfaceImpl::SvgElementCreate( SvgAttrType aType )
+{
+	TInt lElementId = SvgGetElementTypeMappingJSRtoSVG(aType);
+
+    CXmlElementImpl* newChild = NULL;
+
+        TRAPD( error, newChild = CreateElementL( iTempDoc, lElementId ) );
+        if(error != KErrNone)
+        {
+           return 0;
+        }
+
+        //AppendChild( GetRootElement( iTempDoc ), newChild);
+        // Alan
+        TRAPD(err3, InitSvgStylePropertiesWithNullL((CSvgElementImpl*)newChild));
+        if ( err3 != KErrNone )
+        {
+           return NULL;
+        }
+
+        return (SvgElementHandle)newChild;
+}
+
+/**
+ * Destroy svg element of the given handle.
+ */
+EXPORT_C void  CSvgJavaInterfaceImpl::SvgElementDestroy( SvgElementHandle aElementHandle )
+{
+		if(aElementHandle )
+    {
+    CXmlElementImpl *lParentNode =
+        (CXmlElementImpl*)GetParentElement( (CXmlElementImpl*)aElementHandle );
+    if(lParentNode)
+        {
+        RemoveChild( (CXmlElementImpl*)lParentNode, (CXmlElementImpl*)aElementHandle );
+        }
+    DestroyElement( (CXmlElementImpl*)aElementHandle );
+    }
+}
+
+/**
+ * Get the parent element for the given svg element.
+ */
+EXPORT_C SvgElementHandle CSvgJavaInterfaceImpl::SvgElementGetParent( SvgElementHandle aElementHandle )
+{
+    return ( aElementHandle ) ? (SvgElementHandle)GetParentElement( (CXmlElementImpl*)aElementHandle ) : NULL;
+}
+/**
+ * Get the first child element for the given svg element.
+ */
+EXPORT_C SvgElementHandle CSvgJavaInterfaceImpl::SvgElementGetFirstElementChild( SvgElementHandle aElementHandle )
+{
+    return ( aElementHandle ) ? (SvgElementHandle)GetFirstChild( (CXmlElementImpl*)aElementHandle ) : NULL;
+}
+
+/**
+ * Get the next sibling element for the given svg element.
+ */
+EXPORT_C SvgElementHandle CSvgJavaInterfaceImpl::SvgElementGetNextElementSibling( SvgElementHandle aElementHandle )
+{
+    return ( aElementHandle ) ? (SvgElementHandle)GetNextSibling( (CXmlElementImpl*)aElementHandle ) : NULL;
+}
+
+/**
+ * Append the given child element to the given svg element.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgElementAppendChild( SvgElementHandle aElementHandle,
+                             SvgElementHandle aChildElementHandle )
+{
+    if ( aElementHandle )
+        {
+        AppendChild( (CXmlElementImpl*)aElementHandle,
+                                  (CXmlElementImpl*)aChildElementHandle, ETrue );
+        }
+}
+/**
+ * Remove the given child element from the given svg element.
+ */
+EXPORT_C SvgElementHandle CSvgJavaInterfaceImpl::SvgElementRemoveChild( SvgElementHandle aElementHandle,
+                                 SvgElementHandle aChildElementHandle )
+{
+    if(aElementHandle)
+        {
+        RemoveChild( (CXmlElementImpl*)aElementHandle,
+                     (CXmlElementImpl*)aChildElementHandle );
+        }
+     return aChildElementHandle;
+}
+/**
+ * Add the given child element to the given svg element, before
+ * the given reference element.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgElementInsertBefore( SvgElementHandle aElementHandle,
+                              SvgElementHandle aChildElementHandle,
+                              SvgElementHandle aReferenceElementHandle )
+{
+    if ( aReferenceElementHandle )
+    {
+        CXmlElementImpl* lTempChild = GetFirstChild( (CXmlElementImpl*)aElementHandle );
+
+    	if (lTempChild == (CXmlElementImpl*)aReferenceElementHandle)
+    	{
+    		//the first child happens to be the reference child to insert before
+
+    		//set the parent up for the new child
+    		SetParentElement( (CXmlElementImpl*)aChildElementHandle,
+                              (CXmlElementImpl*)aElementHandle );
+
+           	SetFirstChildElement( (CXmlElementImpl*)aChildElementHandle,
+           							(CXmlElementImpl*)aElementHandle );
+
+           	//set the new child up in front of the reference sibling
+            SetNextSibling( (CXmlElementImpl*)aChildElementHandle, lTempChild  );
+
+            return;
+    	}
+
+        while ( lTempChild && GetNextSibling( lTempChild ) !=
+                (CXmlElementImpl*)aReferenceElementHandle )
+        {
+            lTempChild = GetNextSibling( lTempChild );
+        }
+        if ( lTempChild != NULL )
+        {
+            SetParentElement( (CXmlElementImpl*)aChildElementHandle,
+                              (CXmlElementImpl*)aElementHandle );
+            SetNextSibling( lTempChild, (CXmlElementImpl*)aChildElementHandle );
+            SetNextSibling( (CXmlElementImpl*)aChildElementHandle,
+                            (CXmlElementImpl*)aReferenceElementHandle );
+        }
+    }
+}
+
+/**
+ * Request element type.
+ */
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgElementGetType( SvgElementHandle aElementHandle )
+{
+    return ( !aElementHandle ) ? 0 :
+        SvgGetElementTypeMappingSVGtoJSR( GetElementType( (CXmlElementImpl*)aElementHandle ) );
+}
+
+/**
+ * Get a string attribute from the given element.
+ * returning 16 bit characters now instead of 8 bit ones that the original JSR used...
+ */
+
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgElementGetStringAttribute( SvgElementHandle aElementHandle,
+                                        SvgAttrType aAttributeName, TPtrC16& aStrAttribute )
+{
+	 if(aElementHandle)
+   {
+	   		TInt lSvgAttrId =
+				SvgGetAttributeTypeMappingJSRtoSVG(aAttributeName);
+	  		if(lSvgAttrId != KSvgUnknownAttribute)
+      		{
+	        		return ( GetElementDesAttribute( ( CSvgElementImpl* )aElementHandle, lSvgAttrId, aStrAttribute ) );
+      		}
+		}
+   	return KErrNotFound;
+}
+
+/**
+ * Set a string attribute on the given element.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgElementSetStringAttribute( SvgElementHandle aElementHandle,
+                                        SvgAttrType aAttributeName,
+                                        const TPtrC16& aAttributeValue )
+{
+
+if(aElementHandle)
+    {
+    TInt lSvgAttrId = SvgGetAttributeTypeMappingJSRtoSVG(aAttributeName);
+    if(lSvgAttrId != KSvgUnknownAttribute)
+        {
+        // This will not work with the animation elements.
+            SetElementDesAttribute((CSvgElementImpl*)aElementHandle,lSvgAttrId, aAttributeValue);
+        }
+    }
+return ;
+}
+
+/**
+ * Get a color attribute from the given element.
+ * The values are copied into the color object given.
+ */
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgElementGetColorAttribute( SvgElementHandle aElementHandle,
+                                   SvgAttrType aAttribute,
+                                   TInt* aRedValue, TInt* aGreenValue, TInt* aBlueValue )
+{
+    if(aElementHandle)
+    {
+        TInt lSvgAttrId = SvgGetAttributeTypeMappingJSRtoSVG(aAttribute);
+        // find if it is a valid attribute.
+        if(lSvgAttrId != KSvgUnknownAttribute)
+        {
+            TInt32 lColorValue;
+
+            // now the rgb values need to be fused. for this we take the
+            // least significant 8 bits of each integer.
+
+            lColorValue = GetElementColorAttribute((CSvgElementImpl*) aElementHandle,lSvgAttrId);
+
+            // extract the 8-bits corressponding to the specific color attribute.
+            // the color is in BGR format so
+
+			//KGfxColorNull == 0x1ffffff
+            if (lColorValue == 0x1ffffff)
+            {
+            	  *aBlueValue = -1; //Initialize BGR values
+            	  *aGreenValue = -1;
+            	  *aRedValue = -1;
+            }
+
+			//KSvgCurrentColor = 0x2ffffff
+						else if (lColorValue == 0x2ffffff)
+						{
+							*aBlueValue = 0; //Initialize BGR values
+            	*aGreenValue = 0;
+            	*aRedValue = 0;
+						}
+
+			//KErrNoAttribute
+			else if (lColorValue == -10 && (aAttribute == AT_FILL)  )
+			{
+				*aBlueValue = 0;
+				*aGreenValue = 0;
+				*aRedValue = 0;
+			}
+			else if (lColorValue == -10 && (aAttribute == AT_STROKE) )
+			{
+				*aBlueValue = -1;
+				*aGreenValue = -1;
+				*aRedValue = -1;
+			}
+
+			else if (lColorValue == -10 && (aAttribute == AT_COLOR) )
+			{
+				*aBlueValue = 0;
+				*aGreenValue = 0;
+				*aRedValue = 0;
+			}
+            else if (lColorValue != KInvalidEnumAttribute)
+            {
+                *aRedValue = ( lColorValue >> 16 ) & 0x0000ff;
+                *aGreenValue = ( lColorValue >> 8 ) & 0x0000ff;
+                *aBlueValue = lColorValue & 0x0000ff;
+            }
+            return 0;
+        }
+    }
+    return -1;
+}
+
+/**
+ * Set a color attribute for the given element.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgElementSetColorAttribute( SvgElementHandle aElementHandle,
+                                   SvgAttrType aAttribute,
+                                   TInt aRedValue, TInt aGreenValue, TInt aBlueValue )
+
+{
+    if(aElementHandle)
+        {
+        TInt lSvgAttrId = SvgGetAttributeTypeMappingJSRtoSVG(aAttribute);
+        // find if it is a valid attribute.
+        if(lSvgAttrId != KSvgUnknownAttribute)
+            {
+            TInt32 lColorValue;
+
+            // now the rgb values need to be fused. for this we take the
+            // least significant 8 bits of each integer.
+
+            TInt32 red = aRedValue & 0x0000ff;
+            TInt32 green = aGreenValue & 0x0000ff;
+            TInt32 blue = aBlueValue & 0x0000ff;
+
+            lColorValue = (((red << 16) | green << 8) | blue);
+
+
+            SetElementColorAttribute((CSvgElementImpl*) aElementHandle,lSvgAttrId,lColorValue);
+            }
+        }
+}
+
+/**
+ * Get a float attribute value.
+ */
+EXPORT_C TReal32 CSvgJavaInterfaceImpl::SvgElementGetFloatAttribute( SvgElementHandle aElementHandle,
+                                    SvgAttrType aAttribute ) __SOFTFP
+
+{
+	if(aElementHandle)
+    {
+     TInt lSvgAttrId = SvgGetAttributeTypeMappingJSRtoSVG(aAttribute);
+     // The following function can not be called for the animation elements
+     		if(lSvgAttrId != KSvgUnknownAttribute)
+     		{
+        	TReal32 lValue = GetElementFloatAttribute((CSvgElementImpl*)aElementHandle,lSvgAttrId);
+
+        	return lValue;
+      	}
+    }
+	return KInvalidFloatAttribute;
+}
+
+/**
+ * Set a float attribute value.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgElementSetFloatAttribute( SvgElementHandle aElementHandle,
+                                   SvgAttrType aAttribute,
+                                   TReal32 aFloatValue ) __SOFTFP
+{
+	if(aElementHandle)
+    {
+     TInt lSvgAttrId = SvgGetAttributeTypeMappingJSRtoSVG(aAttribute);
+     // The following function can not be called for the animation elements
+     if(lSvgAttrId != KSvgUnknownAttribute)
+        {
+        SetElementFloatAttribute((CSvgElementImpl*)aElementHandle,lSvgAttrId, aFloatValue);
+        }
+    }
+	return;
+}
+
+/**
+ * Set enum attribute value.
+ */
+EXPORT_C void  CSvgJavaInterfaceImpl::SvgElementSetEnumAttribute( SvgElementHandle aElementHandle,
+                                     SvgAttrType aAttribute, short aValue)
+{
+   /**********************************************************
+    // this function needs mapping of the enumeration values.
+    // preserve aspect ratio
+    // Zoom And Pan
+    // Paint ? is it fill or stroke.
+    // Fonts
+    // Font_Style
+    // Font_weight
+    // Font_stretch
+    // Text_Anchor
+    // Font_Size
+    // Fill_Rule
+    // Display
+    // Visibility
+    // Color-rendering          // This is not supported in the SVGEngine.
+    // Strokes
+    // accumulate
+    // additive
+    // calc_mode
+    // fill
+    // restart
+    // type (animate Transform)
+    // attributeType
+    ********************************************************/
+    if(aElementHandle)
+        {
+        TInt32 lValue = 0;
+        TInt lSvgAttrId = SvgGetAttributeTypeMappingJSRtoSVG(aAttribute);
+        if(lSvgAttrId != KSvgUnknownAttribute)
+            {
+
+            lValue = SvgEnumerationMappingJSRtoSVG(lSvgAttrId , (TInt)aValue);
+            
+            if ( lValue == KErrNotFound && aValue == ATTRIBUTE_INHERIT ) 
+                lValue = KSVGAttributeInherit;
+            if(lSvgAttrId == KCSS_ATTR_FONTSIZE)
+                {
+                if(lValue != KErrNotFound)
+                    {
+                    // font is internally considered to be a float.
+
+                    SetElementFloatAttribute((CSvgElementImpl*)aElementHandle,lSvgAttrId, (TReal32)lValue);
+                    return;
+                    }
+                return;
+                }
+            if(lValue == KErrNotFound)
+                {
+                TBuf<40> lValueDes;
+                TInt lResult = SvgEnumerationtoStringMappingJSRtoSVG(lSvgAttrId , aValue ,lValueDes);
+                if(lResult == KErrNotFound)
+                    {
+                    // this is not valid Attribute.
+                    return;
+                    }
+                else
+                    {
+                    SetElementDesAttribute((CSvgElementImpl*)aElementHandle,lSvgAttrId,lValueDes );
+                    return;
+                    }
+                // Call for the string Attribute.
+                }
+            SetEnumAttribute((CSvgElementImpl*)aElementHandle,lSvgAttrId,lValue);
+            }
+        }
+}
+
+/**
+ * Get enum attribute value.
+ */
+EXPORT_C short CSvgJavaInterfaceImpl::SvgElementGetEnumAttribute( SvgElementHandle aElementHandle,
+                                     SvgAttrType aAttribute )
+{
+        if(aElementHandle)
+        {
+        TInt lSvgAttrId = SvgGetAttributeTypeMappingJSRtoSVG(aAttribute);
+        if(lSvgAttrId != KSvgUnknownAttribute)
+            {
+            // following swicth is for all the attributes for which constants
+            // are specified in Svgjsrconstants.h
+            TInt32 lValue = KErrNone;
+            if( lSvgAttrId == KCSS_ATTR_FILLRULE ||
+            lSvgAttrId == KCSS_ATTR_STROKE_LINECAP ||
+            lSvgAttrId == KCSS_ATTR_STROKE_LINEJOIN )
+                {
+                TPtrC16 lValue;
+                GetElementDesAttribute((CSvgElementImpl*)aElementHandle,lSvgAttrId,lValue);
+                TInt lResult = SvgStringtoEnumerationMappingSVGtoJSR(lSvgAttrId , lValue );
+                return ( short )lResult;
+                }
+            else
+                {
+                if(lSvgAttrId == KCSS_ATTR_FONTSIZE)
+                    {
+                    if(lValue != KErrNotFound)
+                        {
+                        // font is internally considered to be a float.
+                        TReal32 lValue = GetElementFloatAttribute((CSvgElementImpl*)aElementHandle,lSvgAttrId);
+                        return short (lValue) ;
+                        }
+                    return KInvalidEnumAttribute;
+                    }
+                TInt lResult = GetEnumAttribute((CSvgElementImpl*)aElementHandle, lSvgAttrId , lValue);
+                if(lResult == KErrNotFound)
+                    {
+                    return KInvalidEnumAttribute;
+                    }
+                else
+                    {
+                     TInt value = SvgEnumerationMappingSVGtoJSR(lSvgAttrId , lValue);
+                    return (short) value;
+                    }
+                }
+            }
+        }
+        return 0;
+}
+
+/**
+ * Get the rectangle attribute value.
+ */
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgElementGetRectAttribute( SvgElementHandle aElementHandle,
+                                  SvgAttrType /*aRectAttribute*/,
+                                  TReal32* aX, TReal32* aY, TReal32* aWidth, TReal32* aHeight ) __SOFTFP
+{
+   if ( aElementHandle )
+   {
+        if (!GetRectAttribute( (CXmlElementImpl*) aElementHandle, aX,
+                                                    aY, aWidth, aHeight ))
+        {
+					return -1;
+				}
+				
+        if ( aX != NULL )
+        {
+            return 1;
+        }
+    }
+   return -1;
+}
+
+/**
+ * Set the rectangle attribute value.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgElementSetRectAttribute( SvgElementHandle aElementHandle,
+                                  SvgAttrType /*aRectAttribute*/,
+                                  TReal32 aX, TReal32 aY, TReal32 aWidth, TReal32 aHeight ) __SOFTFP
+{
+   if ( aElementHandle ) SetRectAttribute( (CXmlElementImpl*) aElementHandle, aX,
+                                                     aY, aWidth, aHeight );
+}
+
+/**
+ * Get the matrix attribute value.
+ */
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgElementGetMatrixAttribute( SvgElementHandle aElementHandle,
+                                    SvgAttrType aMatrixAttribute,
+                                    TReal32* aAVal, TReal32* aBVal, TReal32* aCVal,
+                                    TReal32* aDVal, TReal32* aEVal, TReal32* aFVal ) __SOFTFP
+{
+   if ( aElementHandle == NULL )
+   {
+       return -1;
+   }
+   
+   if( aMatrixAttribute == AT_TRANSFORM) // request to get transform for the element
+   {
+      aMatrixAttribute = SvgGetAttributeTypeMappingJSRtoSVG(aMatrixAttribute);
+   	  GetMatrixAttribute( (CXmlElementImpl*) aElementHandle, aMatrixAttribute, aAVal,
+                           aBVal, aCVal, aDVal, aEVal, aFVal );
+   }
+   else // request for CTM
+   {
+       GetMatrixAttribute( (CXmlElementImpl*) aElementHandle, aAVal,
+                           aBVal, aCVal, aDVal, aEVal, aFVal );
+   }
+   
+
+   return 0;
+}
+
+/**
+ * Set the matrix attribute value.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgElementSetMatrixAttribute( SvgElementHandle aElementHandle,
+                                    SvgAttrType /*aMatrixAttribute*/,
+                                    TReal32 aAVal, TReal32 aBVal, TReal32 aCVal,
+                                    TReal32 aDVal, TReal32 aEVal, TReal32 aFVal ) __SOFTFP
+{
+   if ( aElementHandle ) SetMatrixAttribute( (CXmlElementImpl*) aElementHandle, aAVal,
+                                                      aBVal, aCVal, aDVal, aEVal, aFVal );
+}
+
+/**
+ * Get the path attribute value.
+ */
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgElementGetPathAttribute( SvgElementHandle aElementHandle,
+                                                        SvgAttrType aPathAttribute )
+{
+    //  The attributeId must be one of the following.
+    //  KAtrD, KAtrTo, KAtrFrom, KAtrBy, KAtrPath
+    TInt lSvgAttrId = SvgGetAttributeTypeMappingJSRtoSVG(aPathAttribute);
+
+    return (TInt)GetPathAttribute((CXmlElementImpl*) aElementHandle, lSvgAttrId);
+}
+
+/**
+ * Get the bounding box rectangle attribute value.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgElementGetBBox( SvgElementHandle aElementHandle,
+                            SvgAttrType /*aAttributeType*/,
+                            TReal32* aX, TReal32* aY, TReal32* aWidth, TReal32* aHeight ) __SOFTFP
+{
+    if(aElementHandle)
+        {
+        TReal32 lX ,lY,lWidth,lHeight;
+        GetElementUnScaledBoundingBox((CSvgElementImpl*)aElementHandle,lX ,lY,lWidth,lHeight);
+        *aX = lX;
+        *aY = lY;
+        *aWidth = lWidth;
+        *aHeight = lHeight;
+        }
+}
+
+/**
+ * Add event listener to the given element.
+ * Note: need to replace void* with specific class
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgElementAddEventListener( SvgElementHandle aElementHandle,
+                                        TInt /*aListener*/, SvgAttrType /*aType*/ )
+{
+    if(aElementHandle)
+        {
+        // by default we have added the KEventExternalUI as the mask type.
+
+        // aListener how do you convert this to the SVGEngien's event Mask.
+        const TUint8 aEventMask = KSvgEventMaskExternalUI;
+        AddToEventReceiverList((CXmlElementImpl*) aElementHandle, aEventMask);
+        }
+}
+
+/**
+ * Remove event listener from the given element.
+ * Note: need to replace void* with specific class
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgElementRemoveEventListener( SvgElementHandle aElementHandle,
+                                        TInt /*aListener*/, SvgAttrType /*aType*/ )
+{
+    if(aElementHandle)
+        {
+        RemoveFromEventReceiverList((CXmlElementImpl*)aElementHandle);
+        }
+}
+
+/**
+ * Check if element is active.
+ */
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgElementIsActive( SvgElementHandle aElementHandle )
+{
+    CSvgElementImpl* hElement = (CSvgElementImpl*)aElementHandle;
+
+    return (IsElementActive( hElement ));
+}
+
+/**
+ * Check removable element.
+ * any element that doesnt have an id and its children dont have ids
+*/
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgElementCheckRemoveable( SvgElementHandle aElementHandle )
+{
+    CSvgElementImpl* hElement = (CSvgElementImpl*)aElementHandle;
+
+    return (IsRemoveable(hElement));
+}
+
+// ***********************************************************************
+// SVG Path
+// ***********************************************************************
+
+/**
+ * Create an empty path
+ */
+EXPORT_C SvgPathHandle CSvgJavaInterfaceImpl::SvgPathCreate()
+{
+    return (SvgPathHandle) SvgCreatePath();
+}
+
+/**
+ * Destroy the specified path path
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgPathDestroy( SvgPathHandle aPathHandle )
+{
+ 	if(aPathHandle)
+    {
+    SvgDestroyPath((CGfxGeneralPath*)aPathHandle);
+    }
+}
+
+/**
+ * Get the segment count for the given path.
+ */
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgPathGetSegmentCount( SvgPathHandle aPathHandle )
+{
+    if(aPathHandle)
+        {
+        return GetSegmentCount((CGfxGeneralPath*)aPathHandle);
+        }
+    return 0;
+}
+
+/**
+ * Get the segment type for the given path.
+ */
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgPathGetSegmentType(SvgPathHandle aPathHandle, TInt aSegmentIndex )
+{
+    if(aPathHandle)
+        {
+
+        TInt segmenttype = GetSegmentType((CGfxGeneralPath*)aPathHandle, aSegmentIndex + 1);
+        // map this to the corressponding segment type for the jsr.
+
+        return MapSegmentType(segmenttype );
+        }
+    return 0;
+}
+
+/**
+ * Get the segment parameter for the given path.
+ */
+EXPORT_C TReal32 CSvgJavaInterfaceImpl::SvgPathGetSegmentParameter( SvgPathHandle aPathHandle,
+                                   TInt aSegmentIndex,
+                                   TInt aSegmentParameterIndex ) __SOFTFP
+{
+    if(aPathHandle)
+        {
+        return (TReal32)GetSegmentParameter((CGfxGeneralPath*)aPathHandle,aSegmentIndex + 1,aSegmentParameterIndex + 1);
+        }
+    return 0;
+}
+
+ /**
+ * Add a move-to command to the given path.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgPathAddMoveTo( SvgPathHandle aPathHandle, TReal32 aX, TReal32 aY ) __SOFTFP
+{
+    if(aPathHandle)
+        {
+         ADDMoveTo((CGfxGeneralPath*)aPathHandle,aX,aY);
+        }
+}
+
+/**
+ * Add a line-to command to the given path.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgPathAddLineTo( SvgPathHandle aPathHandle, TReal32 aX, TReal32 aY ) __SOFTFP
+{
+    if(aPathHandle)
+        {
+         ADDLineTo((CGfxGeneralPath*)aPathHandle, aX, aY);
+        }
+}
+
+/**
+ * Add a quad-to command to the given path.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgPathAddQuadTo( SvgPathHandle aPathHandle,
+                        TReal32 aX1, TReal32 aY1,
+                        TReal32 aX2, TReal32 aY2) __SOFTFP
+{
+    if(aPathHandle)
+        {
+         ADDQuadTo((CGfxGeneralPath*)aPathHandle, aX1, aY1, aX2, aY2);
+        }
+}
+
+/**
+ * Add a curve-to command to the given path.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgPathAddCurveTo( SvgPathHandle aPathHandle,
+                        TReal32 aX1, TReal32 aY1,
+                        TReal32 aX2, TReal32 aY2,
+                        TReal32 aX3, TReal32 aY3 ) __SOFTFP
+{
+  if(aPathHandle)
+        {
+         ADDCurveTo((CGfxGeneralPath*)aPathHandle, aX1, aY1, aX2, aY2, aX3, aY3);
+        }
+}
+
+/**
+ * Send a close-path command to the given path.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgPathAddClose( SvgPathHandle aPathHandle )
+{
+    ADDCloseTo((CGfxGeneralPath*)aPathHandle);
+}
+
+/**
+ * Update path info.
+ */
+EXPORT_C void CSvgJavaInterfaceImpl::SvgElementUpdatePath( SvgElementHandle aElementHandle, SvgPathHandle aPathHandle )
+{
+    //this element handle may not be necessary
+    CSvgElementImpl* myPathElement = (CSvgElementImpl*)aElementHandle;
+
+    UpdatePath(aPathHandle, myPathElement);
+}
+
+EXPORT_C TInt  CSvgJavaInterfaceImpl::SvgElementElementInDOM ( TInt hDocument, TInt
+                                        hElement )
+{
+		if(hDocument && hElement)
+    {
+    	TBool aresult= SVGElementInDom((CSvgDocumentImpl*)hDocument, (CXmlElementImpl*)hElement);
+    
+    	if(aresult)
+        {
+        return 1;
+        }
+    }
+    
+return 0;
+}
+
+/*
+* This functions checks if the element is  child of a useElement.
+*
+*/
+
+EXPORT_C TInt  CSvgJavaInterfaceImpl::SvgElementIsUsed ( TInt hElement )
+{
+    if(hElement)
+        {
+        if( GetElementType( GetParentElement( (CXmlElementImpl*) hElement )) == KSvgUseElement)
+            {
+            return 1;
+            }
+        return 0;
+        }
+    else
+        {
+        return 0;
+        }
+}
+
+/*
+* This functions returns the pointer to the element which uses the current element.
+*
+*/
+EXPORT_C TInt CSvgJavaInterfaceImpl::SvgElementGetUsedFromElement ( TInt hElement )
+{
+    // this function gets the actual element which was cloned so that it can
+    // be used in a use element.
+    if(hElement)
+        {
+        // get the parent <use> elements xlink:href
+        return (int) SVGElementGetUsedElement((CXmlElementImpl*)hElement);
+        }
+    return 0;
+}
+/*
+* This functions returns the pointer to the element which uses the current element.
+*
+*/
+EXPORT_C void CSvgJavaInterfaceImpl::SvgElementGetScreenBBox( TInt aElementHandle, TReal32* x,
+                                                            TReal32* y, TReal32* w, TReal32* h ) __SOFTFP
+    {
+    if(aElementHandle)
+        {
+        TReal32 lX ,lY,lWidth,lHeight;
+        GetElementBoundingbox((CSvgElementImpl*)aElementHandle,lX ,lY,lWidth,lHeight);
+        *x = lX;
+        *y = lY;
+        *w = lWidth;
+        *h = lHeight;
+        }
+    }
+
+EXPORT_C void CSvgJavaInterfaceImpl::SvgElementSetPathAttribute( SvgElementHandle aElementHandle,
+                                      SvgAttrType aPathAttribute , SvgPathHandle aPathHandle)
+{
+    if(aElementHandle)
+        {
+        if(aPathHandle)
+            {
+            TInt lSvgAttrId = SvgGetAttributeTypeMappingJSRtoSVG(aPathAttribute);
+            SetPathAttribute((CSvgElementImpl*)(CXmlElementImpl*)aElementHandle,  lSvgAttrId, (CGfxGeneralPath*)aPathHandle);
+            }
+        }
+}
+
+TBool CSvgJavaInterfaceImpl::MouseEntered( RPointerArray<CSvgElementImpl>& /*aElements*/, TInt /*aX*/, TInt /*aY*/ )
+{
+	return ETrue;
+}
+
+TBool CSvgJavaInterfaceImpl::MouseExited( RPointerArray<CSvgElementImpl>& /*aElements*/, TInt /*aX*/, TInt /*aY*/ )
+{
+	return ETrue;
+}
+
+TBool CSvgJavaInterfaceImpl::MouseMoved( RPointerArray<CSvgElementImpl>& /*aElements*/, TInt /*aX*/, TInt /*aY*/ )
+{
+	return ETrue;
+}
+
+TBool CSvgJavaInterfaceImpl::MousePressed( RPointerArray<CSvgElementImpl>& /*aElements*/, TInt /*aX*/, TInt /*aY*/ )
+{
+	return ETrue;
+}
+
+TBool CSvgJavaInterfaceImpl::MouseReleased( RPointerArray<CSvgElementImpl>& /*aElements*/, TInt /*aX*/, TInt /*aY*/ )
+{
+	return ETrue;
+}
+
+/**
+* This maps the element ids form JSR specific to SVG specific
+*/
+TInt CSvgJavaInterfaceImpl::SvgGetElementTypeMappingJSRtoSVG( SvgAttrType aType )
+{
+
+switch(aType)
+    {
+    case 0: return KSvgAElement;
+
+    case 1: return KSvgAnimateElement;
+
+    case 2: return KSvgAnimateColorElement;
+
+    case 3: return KSvgAnimateMotionElement;
+
+    case 4: return KSvgAnimateTransformElement;
+
+    case 5: return KSvgCircleElement;
+
+    case 6: return KSvgDefsElement;
+
+    case 7: return KSvgDescElement;
+
+    case 8: return KSvgEllipseElement;
+
+    case 9: return KSvgFontElement;
+
+    case 10: return KSvgFontfaceElement;
+
+    case 11: return KSvgFontfacenameElement;
+
+    case 12: return KSvgFontfacesrcElement;
+
+    case 13: return KSvgForeignObjectElement;
+
+    case 14: return KSvgGElement;
+
+    case 15: return KSvgGlyphElement;
+
+    case 16: return KSvgHkernElement;
+
+    case 17: return KSvgImageElement;
+
+    case 18: return KSvgLineElement;
+
+    case 19: return KSvgMetadataElement;
+
+    case 20: return KSvgMissingglyphElement;
+
+    case 21: return KSvgMpathElement;
+
+    case 22: return KSvgPathElement;
+
+    case 23: return KSvgPolygonElement;
+
+    case 24: return KSvgPolylineElement;
+
+    case 25: return KSvgRectElement;
+
+    case 26: return KSvgSetElement;
+
+    case 27: return KSvgSvgElement;
+
+    case 28: return KSvgSwitchElement;
+
+    case 29: return KSvgTextElement;
+
+    case 30: return KSvgTitleElement;
+
+    case 31: return KSvgUseElement;
+
+    default: return KSvgUnknownElement;
+    }
+}
+
+/**
+* Tells if the element id is an animation or not.
+*/
+TBool CSvgJavaInterfaceImpl::IsAnimationElemId( const TInt aElementId )
+{
+	if ( aElementId == KSvgAnimateElement || 
+			 aElementId == KSvgAnimateColorElement ||
+			 aElementId == KSvgAnimateMotionElement ||
+			 aElementId == KSvgAnimateTransformElement)
+	{
+		return ETrue;
+	}		 	
+	
+	return EFalse;
+}
+
+/**
+* This maps the element ids form SVG specific to JSR specific
+*/
+SvgAttrType  CSvgJavaInterfaceImpl::SvgGetElementTypeMappingSVGtoJSR( const TInt aElementId)
+{
+    switch(aElementId)
+    {
+    case KSvgAElement: return 0;
+
+    case KSvgAnimateElement: return 1;
+
+    case KSvgAnimateColorElement: return 2;
+
+    case KSvgAnimateMotionElement: return 3;
+
+    case KSvgAnimateTransformElement: return 4;
+
+    case KSvgCircleElement: return 5;
+
+    case KSvgDefsElement: return 6;
+
+    case KSvgDescElement: return 7;
+
+    case KSvgEllipseElement: return 8;
+
+    case KSvgFontElement: return 9;
+
+    case KSvgFontfaceElement: return 10;
+
+    case KSvgFontfacenameElement: return 11;
+
+    case KSvgFontfacesrcElement: return 12;
+
+    case KSvgForeignObjectElement: return 13;
+
+    case KSvgGElement: return 14;
+
+    case KSvgGlyphElement: return 15;
+
+    case KSvgHkernElement: return 16;
+
+    case KSvgImageElement: return 17;
+
+    case KSvgLineElement: return 18;
+
+    case KSvgMetadataElement: return 19;
+
+    case KSvgMissingglyphElement: return 20;
+
+    case KSvgMpathElement: return 21;
+
+    case KSvgPathElement: return 22;
+
+    case KSvgPolygonElement: return 23;
+
+    case KSvgPolylineElement: return 24;
+
+    case KSvgRectElement: return 25;
+
+    case KSvgSetElement: return 26;
+
+    case KSvgSvgElement: return 27;
+
+    case KSvgSwitchElement: return 28;
+
+    case KSvgTextElement: return 29;
+
+    case KSvgTitleElement: return 30;
+
+    case KSvgUseElement: return 31;
+
+    default: return KSvgUnknownElement;
+    }
+}
+
+/**
+* This maps the Attribute ids form SVG specific to JSR specific
+*/
+
+SvgAttrType  CSvgJavaInterfaceImpl::SvgGetAttributeTypeMappingSVGtoJSR( const TInt aElementId)
+{
+    switch(aElementId)
+    {
+    case KAtrAccumulate:return AT_ACCUMULATE;
+    case KAtrAdditive:return AT_ADDITIVE;
+    case KAtrAlphabetic:return AT_ALPHABETIC;
+    case KAtrAscent:return AT_ASCENT;
+    case KAtrAttributeName:return AT_ATTRIBUTENAME;
+    case KAtrBaseProfile:return AT_BASEPROFILE;
+    case KAtrBegin:return AT_BEGIN;
+    case KAtrBy:return AT_BY;
+    case KAtrCalcMode:return AT_CALCMODE;
+    case KCSS_ATTR_COLOR:return AT_COLOR;
+    case KCSS_ATTR_COLORRENDERING:return AT_COLORRENDERING;
+    case KAtrCx:return AT_CX;
+    case KAtrCy:return AT_CY;
+    case KAtrD:return AT_D;
+    case KAtrDescent:return AT_DESCENT ;
+    case KCSS_ATTR_DISPLAY:return AT_DISPLAY;
+    case KAtrDur:return AT_DUR;
+    case KAtrEnd:return AT_END;
+    case KCSS_ATTR_FILL:return AT_FILL;
+    case KCSS_ATTR_FILLRULE:return AT_FILLRULE;
+    case KCSS_ATTR_FONTFAMILY:return AT_FONTFAMILY;
+    case KCSS_ATTR_FONTSIZE:return AT_FONTSIZE;
+    case KCSS_ATTR_FONTSTYLE:return AT_FONTSTYLE;
+    case KCSS_ATTR_FONTWEIGHT:return AT_FONTWEIGHT;
+    case KAtrFrom:return AT_FROM;
+    case KAtrG1:return AT_G1;
+    case KAtrG2:return AT_G2;
+    case KAtrGlyphName:return AT_GLYPHNAME;
+    case KAtrHeight:return AT_HEIGHT;
+    case KAtrHorizAdvX:return AT_HORIZADVX;
+    case KAtrHorizOriginX:return AT_HORIZORIGINX;
+    case KAtrId:return AT_ID;
+    case KAtrK:return AT_K;
+    case KAtrKeySplines:return AT_KEYSPLINES;
+    case KAtrKeyTimes:return AT_KEYTIMES;
+    case KAtrLang:return AT_LANG;
+    case KAtrOverlinePosition:return AT_OVERLINEPOSITION;
+    case KAtrOverlineThickness:return AT_OVERLINETHICKNESS;
+    case KAtrPath:return AT_PATH;
+    case KAtrPathLength:return AT_PATHLENGTH;
+    case KAtrPoints:return AT_POINTS;
+    case KAtrPreserveAspectRatio:return AT_PRESERVEASPECTRATIO;
+    case KAtrR:return AT_R;
+    case KAtrRepeatCount:return AT_REPEATCOUNT;
+    case KAtrRepeatDur:return AT_REPEATDUR;
+    case KAtrRequiredExtensions:return AT_REQUIREDEXTENSIONS;
+    case KAtrRequiredFeatures:return AT_REQUIREDFEATURES;
+    case KAtrRestart:return AT_RESTART;
+    case KAtrRotate:return AT_ROTATE;
+    case KAtrRx :return AT_RX;
+    case KAtrRy:return AT_RY;
+    case KAtrStrikethroughPosition:return AT_STRIKETHROUGHPOSITION;
+    case KAtrStrikethroughThickness:return AT_STRIKETHROUGHTHICKNESS;
+    case KCSS_ATTR_STROKE:return AT_STROKE;
+    case KCSS_ATTR_STROKE_DASHARRAY:return AT_STROKEDASHARRAY;
+    case KCSS_ATTR_STROKE_DASHOFFSET:return AT_STROKEDASHOFFSET;
+    case KCSS_ATTR_STROKE_LINECAP:return AT_STROKELINECAP;
+    case KCSS_ATTR_STROKE_LINEJOIN:return AT_STROKELINEJOIN;
+    case KCSS_ATTR_STROKE_MITERLIMIT:return AT_STROKEMITERLIMIT;
+    case KCSS_ATTR_STROKEWIDTH:return AT_STROKEWIDTH;
+    case KAtrStyle:return AT_STYLE;
+    case KAtrCdata:return AT_STRING;
+    case KAtrSystemLanguage:return AT_SYSTEMLANGUAGE;
+    case KCSS_ATTR_TEXTANCHOR:return AT_TEXTANCHOR;
+    case KCSS_ATTR_TEXTDECORATION:return AT_TEXTDECORATION;
+    case KAtrTo:return AT_TO;
+    case KAtrTransform :return AT_TRANSFORM;
+    case KAtrType: return AT_TYPE;
+    case KAtrU1:return AT_U1;
+    case KAtrU2:return AT_U2;
+    case KAtrUnderlinePosition:return AT_UNDERLINEPOSITION;
+    case KAtrUnderlineThickness:return AT_UNDERLINETHICKNESS;
+    case KAtrUnicode:return AT_UNICODE;
+    case KAtrUnicodeRange:return AT_UNICODERANGE;
+    case KAtrUnitsPerEm:return AT_UNITSPEREM;
+    case KAtrValues:return AT_VALUES;
+    case KAtrVersion:return AT_VERSION;
+    case KAtrViewBox:return AT_VIEWBOX;
+    case KCSS_ATTR_VISIBILITY:return  AT_VISIBILITY;
+    case KAtrWidth: return AT_WIDTH;
+    case KAtrX: return AT_X;
+    case KAtrX1:return AT_X1;
+    case KAtrX2:return AT_X2;
+    case KAtrXlinkactuate:return AT_XLINKACTUATE;
+    case KAtrXlinkarcrole:return AT_XLINKARCROLE;
+    case KAtrXlinkhref: return AT_XLINKHREF;
+    case KAtrXlinkrole: return AT_XLINKROLE;
+    case KAtrXlinkshow: return AT_XLINKSHOW;
+    case KAtrXlinktitle:return AT_XLINKTITLE;
+    case KAtrXlinktype:return AT_XLINKTYPE;
+    case KAtrXmlLang: return AT_XMLLANG;
+    case KAtrXmlBase: return AT_XMLBASE;
+    case KAtrXmlSpace:return AT_XMLSPACE;
+    case KAtrY: return AT_Y;
+    case KAtrY1:return AT_Y1;
+    case KAtrY2:return AT_Y2;
+    case KAtrZoomAndPan: return AT_ZOOMANDPAN;
+    default: return KSvgUnknownAttribute;
+    }
+}
+
+/**
+* This maps the Attribute ids form JSR specific to SVG specific
+*/
+TInt CSvgJavaInterfaceImpl::SvgGetAttributeTypeMappingJSRtoSVG( SvgAttrType aType )
+{
+    switch(aType)
+    {
+    case AT_ACCENTHEIGHT: return KSvgUnknownAttribute;
+
+    case AT_ACCUMULATE: return KAtrAccumulate;
+
+    case AT_ADDITIVE: return KAtrAdditive;
+
+    case AT_ALPHABETIC: return KAtrAlphabetic;
+
+    case AT_ARABICFORM: return KSvgUnknownAttribute;
+
+    case AT_ASCENT: return KAtrAscent;
+
+    case AT_ATTRIBUTENAME: return KAtrAttributeName;
+
+    case AT_ATTRIBUTETYPE: return KSvgUnknownAttribute;
+
+    case AT_BASEPROFILE: return KAtrBaseProfile;
+
+    case AT_BBOX: return KSvgUnknownAttribute;
+
+    case AT_BEGIN: return KAtrBegin;
+
+    case AT_BY: return KAtrBy;
+
+    case AT_CALCMODE: return KAtrCalcMode;
+
+    case AT_CAPHEIGHT: return KSvgUnknownAttribute;
+
+    case AT_COLOR: return KCSS_ATTR_COLOR;
+
+    case AT_COLORRENDERING: return KCSS_ATTR_COLORRENDERING;
+
+    case AT_CX: return KAtrCx;
+
+    case AT_CY: return KAtrCy;
+
+    case AT_D: return KAtrD;
+
+    case AT_DESCENT: return KAtrDescent;
+
+    case AT_DISPLAY: return KCSS_ATTR_DISPLAY;
+
+    case AT_DUR: return KAtrDur;
+
+    case AT_END: return KAtrEnd;
+
+   // it can be the fill corressponding to animation how to handle that.
+    case AT_FILL: return KCSS_ATTR_FILL;
+
+    case AT_FILLRULE: return KCSS_ATTR_FILLRULE;
+
+    case AT_FONTFAMILY: return KCSS_ATTR_FONTFAMILY;
+
+    case AT_FONTSIZE: return KCSS_ATTR_FONTSIZE;
+
+    case AT_FONTSTRETCH: return KSvgUnknownAttribute;
+
+    case AT_FONTSTYLE: return KCSS_ATTR_FONTSTYLE;
+
+    case AT_FONTVARIANT: return KSvgUnknownAttribute;
+
+    case AT_FONTWEIGHT: return KCSS_ATTR_FONTWEIGHT;
+
+    case AT_FROM: return KAtrFrom;
+
+    case AT_G1: return KAtrG1;
+
+    case AT_G2: return KAtrG2;
+
+    case AT_GLYPHNAME: return KAtrGlyphName;
+
+    case AT_HANGING: return KSvgUnknownAttribute;
+
+    case AT_HEIGHT: return KAtrHeight;
+
+    case AT_HORIZADVX: return KAtrHorizAdvX;
+
+    case AT_HORIZORIGINX: return KAtrHorizOriginX;
+
+    case AT_ID: return KAtrId;
+
+    case AT_IDEOGRAPHIC: return KSvgUnknownAttribute;
+
+    case AT_K: return KAtrK;
+
+    case AT_KEYPOINTS: return KSvgUnknownAttribute;
+
+    case AT_KEYSPLINES: return KAtrKeySplines;
+
+    case AT_KEYTIMES: return KAtrKeyTimes;
+
+    case AT_LANG: return KAtrLang;
+
+    case AT_MATHEMATICAL: return KSvgUnknownAttribute;
+
+    case AT_MAX: return KSvgUnknownAttribute;
+
+    case AT_MIN: return KSvgUnknownAttribute;
+
+    case AT_NAME: return KSvgUnknownAttribute;
+
+    case AT_ORIGIN: return KSvgUnknownAttribute;
+
+    case AT_OVERLINEPOSITION: return KAtrOverlinePosition;
+
+    case AT_OVERLINETHICKNESS: return KAtrOverlineThickness;
+
+    case AT_PANOSE1: return KSvgUnknownAttribute;
+
+    case AT_PATH: return KAtrPath;
+
+    case AT_PATHLENGTH: return KAtrPathLength;
+
+    case AT_POINTS: return KAtrPoints;
+
+    case AT_PRESERVEASPECTRATIO: return KAtrPreserveAspectRatio;
+
+    case AT_R: return KAtrR;
+
+    case AT_REPEATCOUNT: return KAtrRepeatCount;
+
+    case AT_REPEATDUR:return KAtrRepeatDur;
+
+    case AT_REQUIREDEXTENSIONS: return KAtrRequiredExtensions;
+
+    case AT_REQUIREDFEATURES: return KAtrRequiredFeatures;
+
+    case AT_RESTART: return KAtrRestart;
+
+    case AT_ROTATE: return KAtrRotate;
+
+    case AT_RX: return KAtrRx;
+
+    case AT_RY: return KAtrRy;
+
+    case AT_SLOPE: return KSvgUnknownAttribute;
+
+    case AT_STEMH: return KSvgUnknownAttribute;
+
+    case AT_STEMV: return KSvgUnknownAttribute;
+
+    case AT_STRIKETHROUGHPOSITION: return KAtrStrikethroughPosition;
+
+    case AT_STRIKETHROUGHTHICKNESS: return KAtrStrikethroughThickness;
+
+    case AT_STROKE: return KCSS_ATTR_STROKE;
+
+    case AT_STROKEDASHARRAY: return KCSS_ATTR_STROKE_DASHARRAY;
+
+    case AT_STROKEDASHOFFSET: return KCSS_ATTR_STROKE_DASHOFFSET;
+
+    case AT_STROKELINECAP: return KCSS_ATTR_STROKE_LINECAP;
+
+    case AT_STROKELINEJOIN: return KCSS_ATTR_STROKE_LINEJOIN;
+
+    case AT_STROKEMITERLIMIT: return KCSS_ATTR_STROKE_MITERLIMIT;
+
+    case AT_STROKEWIDTH: return KCSS_ATTR_STROKEWIDTH;
+
+    case AT_STYLE: return KAtrStyle;
+
+		case AT_STRING: return KAtrCdata;
+
+    case AT_SYSTEMLANGUAGE: return KAtrSystemLanguage;
+
+    case AT_TARGET: return KAtrTarget;
+
+    case AT_TEXTANCHOR: return KCSS_ATTR_TEXTANCHOR;
+    case AT_TEXTDECORATION: return KCSS_ATTR_TEXTDECORATION;
+    case AT_TO: return KAtrTo;
+
+    case AT_TRANSFORM: return KAtrTransform;
+
+    case AT_TYPE: return KAtrType;
+
+    case AT_U1: return KAtrU1;
+
+    case AT_U2: return KAtrU2;
+
+    case AT_UNDERLINEPOSITION: return KAtrUnderlinePosition;
+
+    case AT_UNDERLINETHICKNESS: return KAtrUnderlineThickness;
+
+    case AT_UNICODE: return KAtrUnicode;
+
+    case AT_UNICODERANGE:return KAtrUnicodeRange;
+
+    case AT_UNITSPEREM: return KAtrUnitsPerEm;
+
+    case AT_VALUES: return KAtrValues;
+
+    case AT_VERSION: return KAtrVersion;
+
+    case AT_VIEWBOX: return KAtrViewBox;
+
+    case AT_VISIBILITY: return KCSS_ATTR_VISIBILITY;
+
+    case AT_WIDTH: return KAtrWidth;
+
+    case AT_WIDTHS: return KSvgUnknownAttribute;
+
+    case AT_X: return KAtrX;
+
+    case AT_XHEIGHT: return KSvgUnknownAttribute;
+
+    case AT_X1: return KAtrX1;
+
+    case AT_X2:return KAtrX2;
+
+    case AT_XLINKACTUATE: return KAtrXlinkactuate;
+
+    case AT_XLINKARCROLE: return KAtrXlinkarcrole;
+
+    case AT_XLINKHREF: return KAtrXlinkhref;
+
+    case AT_XLINKROLE: return KAtrXlinkrole;
+
+    case AT_XLINKSHOW: return KAtrXlinkshow;
+
+    case AT_XLINKTITLE: return KAtrXlinktitle;
+
+    case AT_XLINKTYPE: return KAtrXlinktype;
+
+    case AT_XMLLANG: return KAtrXmlLang;
+
+    case AT_XMLBASE: return KAtrXmlBase;
+
+    case AT_XMLSPACE: return KAtrXmlSpace;
+
+    case AT_Y: return KAtrY;
+
+    case AT_Y1: return KAtrY1;
+
+    case AT_Y2: return KAtrY2;
+
+    case AT_ZOOMANDPAN: return KAtrZoomAndPan;
+
+    default: return KSvgUnknownAttribute;
+    }
+}
+/**
+* This maps the Enumeration  Mapping form JSR specific to SVG specific
+*/
+TInt  CSvgJavaInterfaceImpl::SvgEnumerationMappingJSRtoSVG(const TInt aAttributeId, const TInt aJsrEnumValue)
+{
+    // Most of these are style properties.
+    // COLOR_Rendering. this is not supported.
+            switch(aAttributeId)
+                {
+                    // Text Anchor
+                case KAtrRotate:
+                    {
+                        switch(aJsrEnumValue)
+                        {
+                            // these are defined in animateMotion.cpp
+                        case ROTATE_AUTO: return -100;
+                        case ROTATE_AUTOREVERSE: return -200;
+                        default:
+                            return KErrNotFound;
+                        }
+                    }
+
+                case KAtrType:
+                    {
+                        switch(aJsrEnumValue)
+                        {
+                        // these are defined in SchemaData.cpp
+                        case TYPE_TRANSLATE: return KSvgTypeTranslate;
+                        case TYPE_SCALE: return KSvgTypeScale;
+                        case TYPE_ROTATE:return KSvgTypeRotate;
+                        case TYPE_SKEWX:return KSvgTypeSkewX;
+                        case TYPE_SKEWY: return KSvgTypeSkewY;
+                        default:
+                            return KErrNotFound;
+                        }
+                    }
+
+                case KCSS_ATTR_FONTSIZE:
+                    {
+                        switch(aJsrEnumValue)
+                        {
+                        case FONT_SIZE_XXSMALL: return 2;
+                        case FONT_SIZE_XSMALL: return 4;
+                        case FONT_SIZE_SMALL:return 6;
+                        case FONT_SIZE_MEDIUM:return 10;
+                        case FONT_SIZE_LARGE: return 16;
+                        case FONT_SIZE_XLARGE:return 20;
+                        case FONT_SIZE_XXLARGE:return 24;
+                        default:
+                            return KErrNotFound;
+                        }
+                    }
+
+                case KCSS_ATTR_TEXTANCHOR:
+                    {
+                        switch(aJsrEnumValue)
+                        {
+                        case TEXT_ANCHOR_START:
+                        // these constants are taken from schemaData.cpp any change will need
+                        // to be propagated to here
+                            return 0;
+                        case TEXT_ANCHOR_MIDDLE:
+                            return 1;
+                        case TEXT_ANCHOR_END:
+                            return 2;
+                        default:
+                         return KErrNotFound;
+                        }
+
+                    }
+                    // Font Weight
+                case KCSS_ATTR_FONTWEIGHT:
+                    {
+                        switch(aJsrEnumValue)
+                        {
+                        case FONT_NORMAL:
+                        return 0;
+                        case FONT_WEIGHT_BOLD:
+                        return 1;
+                        case FONT_WEIGHT_BOLDER:
+                        return 2;
+                        case FONT_WEIGHT_LIGHTER:
+                        return 3;
+                        case FONT_WEIGHT_100:
+                        return 4;
+                        case FONT_WEIGHT_200:
+                        return 5;
+                        case FONT_WEIGHT_300:
+                        return 6;
+                        case FONT_WEIGHT_400:
+                        return 7;
+                        case FONT_WEIGHT_500:
+                        return 8;
+                        case FONT_WEIGHT_600:
+                        return 9;
+                        case FONT_WEIGHT_700:
+                        return 10;
+                        case FONT_WEIGHT_800:
+                        return 11;
+                        case FONT_WEIGHT_900:
+                        return 12;
+                        default:
+                        return KErrNotFound;
+                        }
+
+                    }
+                    // Font Style
+                case KCSS_ATTR_FONTSTYLE:
+                        {
+                        switch(aJsrEnumValue)
+                            {
+                            case FONT_NORMAL:
+                            return 0;
+                            case FONT_STYLE_ITALIC  :
+                            return 1;
+                            case FONT_STYLE_OBLIQUE  :
+                            return 2;
+                            default:
+                            return KErrNotFound;
+                            }
+
+                        }
+                    // Spread Method not given in defines.h so probably spreadmethod won't be used.
+                case KAtrPreserveAspectRatio:
+
+                        {
+                            switch(aJsrEnumValue)
+                            {
+                            case PAR_NONE:
+                            return 0;
+                            case PAR_XMIDYMID:
+                            return 6;
+                            default:
+                            return KErrNotFound;
+
+                            }
+
+                        }
+                    // TextDecoration
+                case KAtrZoomAndPan:
+                    {
+                        switch(aJsrEnumValue)
+                        {
+                        case ZPN_MAGNIFY:
+                        return 1;
+
+                        case ZPN_DISABLE:
+                        return 0;
+                        default:
+                            return KErrNotFound;
+                        }
+
+                    }
+                    // Display
+                case KCSS_ATTR_DISPLAY:
+                    {
+                        switch(aJsrEnumValue)
+                    {
+                    case DISPLAY_NONE:
+                    return 16;
+
+                    case DISPLAY_OTHER:
+                    return 0;
+
+                    default:
+                    return KErrNotFound;
+
+                    }
+
+                    }
+                    // VIsibility
+                case KCSS_ATTR_VISIBILITY:
+                    {
+                        switch(aJsrEnumValue)
+                        {
+                        case VISIBILITY_VISIBLE:
+                        return 0;
+                        case VISIBILITY_OTHER:
+                        return 1;
+                        default:
+                        return KErrNotFound;
+
+                        }
+
+                    }
+                case KAtrAdditive:
+                        {
+                        switch(aJsrEnumValue)
+                            {
+                        case ADDITIVE_REPLACE:
+                        return 0;
+                        case ADDITIVE_SUM:
+                        return 1;
+                        default : return KErrNotFound;
+
+                            }
+
+                        }
+                    case KAtrAccumulate:
+                        {
+                            switch(aJsrEnumValue)
+                            {
+                        case ACCUMULATE_NONE:
+                        return 0;
+                        case ACCUMULATE_SUM:
+                        return 1;
+                        default : return KErrNotFound;
+
+                            }
+
+                        }
+                    case KAtrCalcMode:
+                        {
+                            switch(aJsrEnumValue)
+                            {
+                        case CALC_MODE_DISCRETE:
+                        return 0;
+                        case CALC_MODE_LINEAR:
+                        return 1;
+                        case CALC_MODE_PACED:
+                        return 2;
+                        case CALC_MODE_SPLINE:
+                        return 3;
+                        default: return KErrNotFound;
+
+                            }
+
+                        }
+                        // it can not be this attribute.
+                        // This fill corresponds to animation.
+                    case KCSS_ATTR_FILL:
+                            {
+                            switch(aJsrEnumValue)
+                                {
+                                // these are for animation
+                                case FILL_REMOVE:
+                                return 0;
+                                case FILL_FREEZE:
+                                return 1;
+                                // following is the attribute value for fill "color"
+                                // these are for fill - style attributes.
+                                case PAINT_NONE:
+                                return KSVGColorNone;
+                                case PAINT_CURRENT:
+                                return KSVGCurrentColor;
+                                case PAINT_INHERIT:
+                                return KSVGColorInherit;
+                                default: return KErrNotFound;
+                                }
+
+                        }
+                    case KCSS_ATTR_STROKE:
+                            {
+                            switch(aJsrEnumValue)
+                                {
+                                // following is the attribute value for fill "color"
+                                // these are for fill - style attributes.
+                                case PAINT_NONE:
+                                return KSVGColorNone;
+                                case PAINT_CURRENT:
+                                return KSVGCurrentColor;
+                                case PAINT_INHERIT:
+                                return KSVGColorInherit;
+                                default: return KErrNotFound;
+                                }
+
+                            }
+                    case KAtrRestart:
+                        {
+                        switch(aJsrEnumValue)
+                        {
+                        case RESTART_ALWAYS:
+                        return 0;
+                        case RESTART_NEVER:
+                        return 2;
+                        case RESTART_WHENNOTACTIVE:
+                        return 1;
+                        default :
+                        return KErrNotFound;
+                        }
+
+                        }
+                    case KCSS_ATTR_TEXTDECORATION:
+                        {
+                        switch(aJsrEnumValue)
+                            {
+                        case TEXT_UNDER_LINE:
+                        return 1;
+                        case TEXT_OVER_LINE:
+                        return 2;
+                        case TEXT_LINE_THROUGH:
+                        return 3;
+                        default:
+                        return KErrNotFound;
+                            }
+
+                        }
+                    default:
+                    return KErrNotFound;
+
+                    }
+}
+
+/**
+* This maps the Enumeration from JSR to SVG. SVG enumerated value here is string type.
+*/
+TInt  CSvgJavaInterfaceImpl::SvgEnumerationtoStringMappingJSRtoSVG(const TInt aAttributeId, short aJsrEnumValue, TDes& aValue)
+{
+    // all of these are style properties.
+    switch(aAttributeId)
+    {
+    case KCSS_ATTR_FILLRULE:
+        switch(aJsrEnumValue)
+            {
+            case FILL_RULE_EVENODD:
+                {
+                aValue = _L("evenodd");
+                }
+            break;
+            case FILL_RULE_NONZERO:
+                {
+                    aValue = _L("nonzero");
+                }
+            break;
+            default:
+                return KErrNotFound;
+
+            }
+        break;
+        case KCSS_ATTR_STROKE_LINECAP:
+            switch(aJsrEnumValue)
+            {
+            case STROKE_LINECAP_BUTT:
+                {
+                    aValue = _L("butt");
+                }
+                break;
+            case STROKE_LINECAP_ROUND:
+                {
+                    aValue = _L("round");
+                }
+                break;
+            case STROKE_LINECAP_SQUARE:
+                {
+                    aValue = _L("square");
+                }
+                break;
+            default : return KErrNotFound;
+            }
+        break;
+        case KCSS_ATTR_STROKE_LINEJOIN:
+            switch(aJsrEnumValue)
+            {
+            case STROKE_LINEJOIN_MITER:
+                {
+                    aValue = _L("miter");
+                }
+                break;
+            case STROKE_LINEJOIN_ROUND:
+                {
+                    aValue = _L("round");
+                }
+                break;
+            case STROKE_LINEJOIN_BEVEL:
+                {
+                    aValue = _L("bevel");
+                }
+                break;
+            default : return KErrNotFound;
+            }
+            break;
+            default: return KErrNotFound;
+
+    }
+    return KErrNone;
+}
+/**
+* This maps the Enumeration from SVG to JSR. SVG enumerated value here is string type.
+*/
+TInt CSvgJavaInterfaceImpl::SvgStringtoEnumerationMappingSVGtoJSR(const TInt aAttributeId , TPtrC16 aValue)
+{
+    switch(aAttributeId)
+    {
+    case KCSS_ATTR_FILLRULE:
+            {
+            if(aValue == _L("evenodd"))
+            return FILL_RULE_EVENODD;
+            if(aValue == _L("nonzero"))
+            return FILL_RULE_NONZERO;
+            }
+    case KCSS_ATTR_STROKE_LINECAP:
+            {
+            if(aValue == _L("butt"))
+            return STROKE_LINECAP_BUTT;
+            if(aValue == _L("round"))
+            return STROKE_LINECAP_ROUND;
+            if(aValue == _L("square"))
+            return STROKE_LINECAP_SQUARE;
+            }
+
+        case KCSS_ATTR_STROKE_LINEJOIN:
+
+            {
+            if(aValue == _L("miter"))
+            return STROKE_LINEJOIN_MITER;
+            if(aValue == _L("round"))
+            return STROKE_LINEJOIN_ROUND;
+            if(aValue == _L("bevel"))
+            return STROKE_LINEJOIN_BEVEL;
+            }
+        default: return KErrNotFound;
+    }
+}
+/**
+* This maps the Enumeration from SVG to JSR.
+*/
+TInt  CSvgJavaInterfaceImpl::SvgEnumerationMappingSVGtoJSR(const TInt aAttributeId, TInt32 aSvgEnumValue)
+{
+            switch(aAttributeId)
+                {
+
+                case KAtrRotate:
+                    {
+                        switch(aSvgEnumValue)
+                        {
+                        case -100: return ROTATE_AUTO;
+                        case -200: return ROTATE_AUTOREVERSE;
+                        default:
+                            return KErrNotFound;
+                        }
+                    }
+
+                case KAtrType:
+                    {
+                        switch(aSvgEnumValue)
+                {
+                        case KSvgTypeTranslate: return TYPE_TRANSLATE;
+                        case KSvgTypeScale: return TYPE_SCALE;
+                        case KSvgTypeRotate:return TYPE_ROTATE;
+                        case KSvgTypeSkewX:return TYPE_SKEWX;
+                        case KSvgTypeSkewY: return TYPE_SKEWY;
+                        default:
+                            return KErrNotFound;
+                        }
+                    }
+
+                case KCSS_ATTR_TEXTANCHOR:
+                    {
+                        switch(aSvgEnumValue)
+                        {
+                        case 0:
+                        // these constants are taken from schemaData.cpp any change will need
+                        // to be propagated to here
+                        return TEXT_ANCHOR_START;
+                        case 1:
+                            return TEXT_ANCHOR_MIDDLE;
+                        case 2:
+                            return TEXT_ANCHOR_END;
+                        default:
+                         return KErrNotFound;
+                        }
+
+                    }
+                    // Font Weight
+                case KCSS_ATTR_FONTWEIGHT:
+                    {
+                        switch(aSvgEnumValue)
+                        {
+                        case 0:
+                        return FONT_NORMAL;
+                        case 1:
+                        return FONT_WEIGHT_BOLD;
+                        case 2:
+                        return FONT_WEIGHT_BOLDER;
+                        case 3:
+                        return FONT_WEIGHT_LIGHTER;
+                        case 4:
+                        return FONT_WEIGHT_100;
+                        case 5:
+                        return FONT_WEIGHT_200;
+                        case 6:
+                        return FONT_WEIGHT_300;
+                        case 7:
+                        return FONT_WEIGHT_400;
+                        case 8:
+                        return FONT_WEIGHT_500;
+                        case 9:
+                        return FONT_WEIGHT_600;
+                        case 10:
+                        return FONT_WEIGHT_700;
+                        case 11:
+                        return FONT_WEIGHT_800;
+                        case 12:
+                        return FONT_WEIGHT_900;
+                        default:
+                        return KErrNotFound;
+                        }
+
+                    }
+                    // Font Style
+                case KCSS_ATTR_FONTSTYLE:
+                    {
+                    switch(aSvgEnumValue)
+                        {
+                        case 0:
+                        return FONT_NORMAL;
+                        case 1:
+                        return FONT_STYLE_ITALIC;
+                        case 2:
+                        return FONT_STYLE_OBLIQUE  ;
+                        default:
+                        return KErrNotFound;
+                        }
+
+                    }
+                // preserve aspect ratio
+                case KAtrPreserveAspectRatio:
+
+                    {
+                        switch(aSvgEnumValue)
+                        {
+                        case 0:
+                        return PAR_NONE;
+                        case 6:
+                        return PAR_XMIDYMID;
+                        }
+
+                    }
+                    // Zoom and Pan
+                case KAtrZoomAndPan:
+                    {
+                        switch(aSvgEnumValue)
+                        {
+                        case 1:
+                        return ZPN_MAGNIFY;
+
+                        case 0:
+                        return ZPN_DISABLE;
+                        }
+
+                    }
+                    // Display
+                case KCSS_ATTR_DISPLAY:
+                    {
+                        switch(aSvgEnumValue)
+                    {
+                    case 16:
+                    return DISPLAY_NONE;
+
+                    case 0:
+                    return DISPLAY_OTHER;
+
+                    default:
+                    return KErrNotFound;
+
+                    }
+
+                    }
+                    // VIsibility
+                case KCSS_ATTR_VISIBILITY:
+                    {
+                        switch(aSvgEnumValue)
+                        {
+                        case 0:
+                        return VISIBILITY_VISIBLE;
+                        case 1:
+                        return VISIBILITY_OTHER;
+                        default:
+                        return KErrNotFound;
+
+                        }
+
+                    }
+                    // additive
+                case KAtrAdditive:
+                        {
+                        switch(aSvgEnumValue)
+                            {
+                            case 1:
+                            return ADDITIVE_SUM;
+                                default : return ADDITIVE_REPLACE;
+
+                            }
+
+                        }
+                    // accumulate
+                    case KAtrAccumulate:
+                        {
+                            switch(aSvgEnumValue)
+                            {
+                        case 0:
+                        return ACCUMULATE_NONE;
+                        case 1:
+                        return ACCUMULATE_SUM;
+                        default : return KErrNotFound;
+
+                            }
+
+                        }
+                // calc-mode
+                    case KAtrCalcMode:
+                        {
+                            switch(aSvgEnumValue)
+                            {
+                        case 0:
+                        return CALC_MODE_DISCRETE;
+                        case 1:
+                        return CALC_MODE_LINEAR;
+                        case 2:
+                        return CALC_MODE_PACED;
+                        case 3:
+                        return CALC_MODE_SPLINE;
+                        default: return KErrNotFound;
+
+                            }
+
+                        }
+                        // it can not be this attribute.
+                        // This fill corresponds to animation.
+                // fill attribute
+                    case KCSS_ATTR_FILL:
+                        {
+                            switch(aSvgEnumValue)
+                            {
+                        case 0:
+                        return FILL_REMOVE;
+                        case 1:
+                        return FILL_FREEZE;
+                        default: return KErrNotFound;
+                            }
+
+                        }
+                // restart attribute.
+                    case KAtrRestart:
+                        {
+                            switch(aSvgEnumValue)
+                            {
+                        case 0:
+                        return RESTART_ALWAYS;
+                        case 2:
+                        return RESTART_NEVER;
+                        case 1:
+                        return RESTART_WHENNOTACTIVE;
+                        default :
+                        return KErrNotFound;
+                            }
+
+                        }
+                // text decoration.
+                    case KCSS_ATTR_TEXTDECORATION:
+                        {
+                        switch(aSvgEnumValue)
+                            {
+                        case 1:
+                        return TEXT_UNDER_LINE;
+                        case 2:
+                        return TEXT_OVER_LINE;
+                        case 3:
+                        return TEXT_LINE_THROUGH;
+                        default:
+                        return KErrNotFound;
+                            }
+
+                        }
+                    default:
+                    return KErrNotFound;
+
+                    }
+}
+
+/*
+* This functions checks if an element is in a specified document.
+*
+*/
+
+TInt CSvgJavaInterfaceImpl::MapSegmentType(TInt aSvgSegmentType)
+{
+    // the following is a limitation since in GFx2d.dll we do not store the
+    // relative or absolute nature of a command.
+    // currently we return the absolute.
+
+    switch(aSvgSegmentType)
+        {
+        case KSvgSegClose:
+                {
+                return PATH_COMMAND_Z;
+                }
+        case KSvgSegLineTo:
+                {
+                    return PATH_COMMAND_L;
+                }
+        case KSvgSegQuadTo:
+                {
+                    return PATH_COMMAND_Q;
+                }
+        case KSvgSegCubicTo:
+                {
+                    return PATH_COMMAND_C;
+                }
+        case KSvgSegMoveTo:
+                {
+                    return PATH_COMMAND_M;
+                }
+        case KSvgVertical:
+                {
+                    return PATH_COMMAND_V;
+                }
+        case KSvgHorizontal:
+                {
+                    return PATH_COMMAND_H;
+                }
+        default :
+            return 0;
+        }
+}