svgtopt/SVG/SVGEngine/inc/SVGContentHandler.h
changeset 0 d46562c3d99d
child 2 0c844a8549ae
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtopt/SVG/SVGEngine/inc/SVGContentHandler.h	Thu Jan 07 16:19:02 2010 +0200
@@ -0,0 +1,563 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  SVG Engine header file
+ *
+*/
+
+
+#ifndef CSVGCONTENTHANDLER_H
+#define CSVGCONTENTHANDLER_H
+
+
+#include <e32base.h>
+#include <s32strm.h>
+
+#include "GfxColor.h"
+#include "SVGEngineInterfaceImpl.h"
+#include "SVGAttributeVerifier.h"
+#include "SVGErrorImpl.h"
+
+#include "MXMLAttributes.h"
+#include "MXMLContentHandler.h"
+
+#include "SVGSchemaData.h"
+#include "SVGDocumentImpl.h"
+
+/**
+ * SMIL2 parser class
+ */
+class   CSvgElementImpl;
+class CSvgScriptElementImpl;
+class CSvgImageElementImpl;
+
+
+/**
+ * Class description goes here.
+ *
+ *  @lib SVGEngine.lib
+ *  @since 1.0
+ */
+class CSvgContentHandler : public CBase, public MXMLContentHandler
+    {
+    public:
+        /**
+        * Parser phase one constructor
+        *
+        * Takes the player interface object as a parameter. This interface
+        * is used by the parser for reporting parse errors and for getting values
+        * of the content control attributes. It is also passed to the created
+        * presentation object.
+        */
+
+        /**
+         * Two phase constructor
+         *
+         * @since 1.0
+         * @param None
+         * @return An isntance of this class
+         */
+        static CSvgContentHandler*  NewL( TBool aRemoveFalseSwitchElements = ETrue );
+
+        /**
+         * Two phase constructor
+         *
+         * @since 1.0
+         * @param None
+         * @return An instance of this class
+         */
+        static CSvgContentHandler*  NewLC();
+
+
+        /**
+         * Part of two phase construction
+         *
+         * @since 1.0
+         * @param None
+         * @return None
+         */
+        virtual void            ConstructL( TBool aRemoveFalseSwitchElements = ETrue );
+
+        /**
+        * Destructor.
+        */
+
+        /**
+         * Destructor
+         *
+         * @since 1.0
+         * @param None
+         * @return None
+         */
+        virtual                 ~CSvgContentHandler();
+
+
+
+
+        /**
+         *
+         * Parses the given encrypted SVG source, constructing the presentation objects.
+         * This is a variant of ParseL and processes encrypted SVG sources.
+         *
+         * @since 1.0
+         * @param aDocument - The document object to which this document is constructed
+         * @param aSvgFileName - The URI to the encrypted SVG source
+         * @param aSuccess - An error code that signals successful/unsuccessful parsing
+         * @return Instance of the root element of the SVG document.
+         */
+        CSvgElementImpl* ParseByteData( CSvgDocumentImpl* aDocument,
+                                        const TDesC8& aByteData,
+                                        CSvgErrorImpl& aError );
+
+		/*
+		* Parse the given 16 bit string of SVG
+		* This method is used primarily for JSR226 to avoid conversion of strings
+		*
+		*/
+		CSvgElementImpl* Parse16BitData( CSvgDocumentImpl* aDocument,
+                                        const TDesC16& aSvgString,
+                                        CSvgErrorImpl& aError );
+                                        
+		
+		
+        CSvgElementImpl* ParseFile( CSvgDocumentImpl* aDocument,
+                                    const TDesC& aFileName,
+                                    CSvgErrorImpl& aError );
+        /*************** MXMLContentHandler interface methods **************/
+
+        /**
+         * A callback that signals start of a document
+         *
+         * @since 1.0
+         * @param
+         * @return A value that indicates success/failure
+         */
+        TInt StartDocument();
+
+        /**
+         * A callback that signals end of a document
+         *
+         * @since 1.0
+         * @param
+         * @return A value that indicates success/failure
+         */
+        TInt EndDocument();
+
+        /**
+        * Returns reader index
+        * @since Series60 3.1
+        * @param aIndex - reader index
+        */
+	    void ReaderIndex(NW_Uint32 aIndex);
+
+        /**
+         * A callback that signals beginning of an element
+         *
+         * @since 1.0
+         * @param aURI -
+         * @param aLocalName -
+         * @param aName - Name of the element
+         * @param aAttributeList - a list that keeps track of the attributes found for this element
+         * @return A value that indicates success/failure
+         */
+        TInt StartElement( TDesC& aURI, TDesC& aLocalName,
+                           TDesC& aName, MXMLAttributes* aAttributeList );
+        /**
+         * A callback that signals end of an element
+         *
+         * @since 1.0
+         * @param aURI -
+         * @param aLocalName -
+         * @param aName - Name of the element
+         * @return A value that indicates success/failure
+         */
+        TInt EndElement( TDesC& aURI, TDesC& aLocalName, TDesC& aName );
+
+        /**
+         * Callback that signals characters inside an XML document
+         *
+         * @since 1.0
+         * @param aBuf - A string buffer that will contain the characters
+         * @param aStart - An index indicating the starting position of the characters
+         * @param aLenght - AN offset indicating the terminal position of the characters
+         * @return A value that indicates success/failure
+         */
+        TInt Charecters( TDesC& aBuf, TInt aStart, TInt aLength );
+
+        /**
+         * A callback that signals a XML comment
+         *
+         * @since 1.0
+         * @param aComment - A string buffer that cintains the comment
+         * @return A value that indicates success/failure
+         */
+
+        TInt Comment( TDesC& aComment );
+
+        /**
+         * Need method description
+         *
+         * @since 1.0
+         * @param
+         * @return A value that indicates success/failure
+         */
+        TInt ProcessingInstructions( TDesC& aTarget, TDesC& aData );
+
+        /**
+         * Need method description
+         *
+         * @since 1.0
+         * @param
+         * @return A value that indicates success/failure
+         */
+        TInt IgnoreWhiteSpace( TDesC& aString );
+
+        /**
+         * A callback that signals beginning of an entity element
+         *
+         * @since 1.0
+         * @param aName - A string buffer that will contain the entity name
+         * @return A value that indicates success/failure
+         */
+        TInt StartEntity( TDesC& aName );
+
+        /**
+         * A callback that signals end of an entity element
+         *
+         * @since 1.0
+         * @param aName - A string buffer that will contain the entity name
+         * @return A value that indicates success/failure
+         */
+        TInt EndEntity( TDesC& aName );
+
+        /**
+         * Need method description
+         *
+         * @since 1.0
+         * @param
+         * @return A value that indicates success/failure
+         */
+        TInt SkippedEntity( TDesC& aName );
+
+        /**
+         * A callback that signals beginning of a CDATA section
+         *
+         * @since 1.0
+         * @param
+         * @return A value that indicates success/failure
+         */
+        TInt StartCDATA();
+
+        /**
+         * A callback that signals end of a CDATA section
+         *
+         * @since 1.0
+         * @param
+         * @return A value that indicates success/failure
+         */
+        TInt EndCDATA();
+
+        /**
+         * Need method description
+         *
+         * @since 1.0
+         * @param
+         * @return A value that indicates success/failure
+         */
+        TInt Error( TInt aErrorCode, TInt aSeverity );
+        
+        void DataBuffer(const TDesC16& aBuf);
+
+        /**
+         * Request to cancel parsing.
+         */
+        void CancelParsing();
+
+    protected:
+
+
+        /**
+         * Method to verify the value of the attribute based on its type. If the value is
+         * valid then this method sets the value to the corresponding attribtue in the
+         * current element
+         * @since 1.0
+         * @aAttrName   - name of the attribute
+         * @aAttrValue  - value of the attribute
+         * @return
+         */
+
+        TBool ProcessNConvertAttrL( const TDesC& aName, const TDesC& aAttrName, const TDesC& aAttrValue );
+
+
+
+        /**
+         * Parse for a color from the given string.
+         *
+         * @since 1.0
+         * @param aString : color string to parse for color value
+         * @param aTransparent : transparent flag.
+         * @return parsed color.
+         */
+        TGfxColor               ParseColor( const TDesC& aString,
+                                            TBool& aTransparent );
+        /**
+         * Process for a color from the given attribute name and value.
+         *
+         * @since 1.0
+         * @param aName : attribute name
+         * @param aValue : attribute value.
+         * @return true if attribute is processes as a color attribute.
+         */
+        TBool                   ProcessColorAttributeL( const TDesC& aName,
+             const TDesC& aValue );
+
+
+        /**
+         * Process a for style info.
+         *
+         * @since 1.0
+         * @param aName : attribute name
+         * @param aValue : attribute value
+         * @return true if a style info is processed.
+         */
+        TBool                   ProcessStyleL( const TDesC& aValue );
+
+        /**
+         * Process a for transform info.
+         *
+         * @since 1.0
+         * @param aName : attribute name
+         * @param aValue : attribute value
+         * @return true if a transform info is processed.
+         */
+        TBool                   ProcessTransformL( const TDesC& aName,
+                                                  const TDesC& aValue );
+
+        /**
+         * Process a for unit info.
+         *
+         * @since 1.0
+         * @param aName : attribute name
+         * @param aValue : attribute value
+         * @return true if a unit info is processed.
+         */
+        TBool                   ProcessUnitsL( const TDesC& aName,
+                                               const TDesC& aValue );
+
+        /**
+         * Convert any xml entity characters in the given string list to unicode characters.
+         *
+         * @since 1.0
+         * @param aArray : array of strings to search for xml entities characters.
+         * @return
+         */
+        void   ConvertEntitiesToCharsL( CDesCArrayFlat& aArray );
+
+        /**
+         * Convert any xml entity characters in the given string to unicode characters.
+         *
+         * @since 1.0
+         * @param aString : string to search for xml entities characters.
+         * @return non-NULL if at least one entity character is encountered.
+         */
+        HBufC* ConvertEntitiesToCharsL( const TDesC& aString );
+
+        /**
+         * Find the given character in the given string at the starting index.
+         *
+         * @since 1.0
+         * @param aString : string to find character.
+         * @param aStartIndex : starting index.
+         * @param aChar : character to search.
+         * @return index of first character encounterd, if found, -1 otherwise.
+         */
+        TInt   Find( const TDesC& aString, TInt aStartIndex, TChar aChar );
+
+        /**
+         * Create a substring from the given string.
+         *
+         * @since 1.0
+         * @param aString : string to create a substring.
+         * @param aStartIndex : starting index.
+         * @param aEndIndex : endind index.
+         * @return substring from starting and ending indices.
+         */
+        HBufC* SubstringL( const TDesC& aString, TInt aStartIndex, TInt aEndIndex );
+
+        /**
+         * Convert the given string (xml entity character) to an unicode character.
+         *
+         * @since 1.0
+         * @param aChar : character object to store unicode character.
+         * @param aString : xml entity character string.
+         * @return true if there was a conversion.
+         */
+        TBool  ConvertEntityToChar( TChar& aChar, const TDesC& aString );
+
+        /**
+         * Append a substring to the given string at given indices.
+         *
+         * @since 1.0
+         * @param aDest : string to append substring to.
+         * @param aSource : string to append substring from.
+         * @param aStartIndex : starting index for substring.
+         * @param aEndIndex : ending index for substring.
+         * @return
+         */
+        void   Append( TDes& aDest, const TDesC& aSource, TInt aStartIndex, TInt aEndIndex );
+
+        /**
+         * Convert the given string (xml entity character) an unicode character.
+         *
+         * @since 1.0
+         * @param aChar : character object to store unicode character.
+         * @param aString : xml decimal entity character string.
+         * @return true if a conversion was made.
+         */
+        TBool  ConvertDecimalStringToChar( TChar& aChar, const TDesC& aString );
+
+        /**
+         * Convert the given string (xml entity character) an unicode character.
+         *
+         * @since 1.0
+         * @param aChar : character object to store unicode character.
+         * @param aString : xml hexadecimal entity character string.
+         * @return true if a conversion was made.
+         */
+        TBool  ConvertHexStringToChar( TChar& aChar, const TDesC& aString );
+
+
+        void FilterCharactersL( TDesC& aString );
+
+        // Leaveable StartElementL function called by StartElement
+        TInt StartElementL( TDesC& aURI, TDesC& aLocalName,
+                           TDesC& aName, MXMLAttributes* aAttributeList );
+
+
+        void AppendToCData( const TDesC& aText );
+
+        TBool ExtractStyleValuePair( const TDesC& aString, TPtrC& aName, TPtrC& aValue );
+
+        void SetForwardReferences(CSvgErrorImpl& aError);
+
+        void RemoveFalseSwitchCasesOrMakeInvisible();
+        void RemoveFalseElementsOrMakeInvisible();
+        TBool VerifyReqExReqFtrSysL( CSvgElementImpl* aElement );
+
+        // Initiate image loading for <image> elements
+        void LoadImages();
+
+        /**
+         * Find out the system language for the client environment  based on
+         * SVG source hint
+         *
+         * @since 1.0
+         * @param aValue - A string buffer that contains the System Language hint
+         * @return  None
+         */
+        void SystemLanguage( TPtr aValue );
+
+        /**
+         * Private constructor
+         *
+         * @since 1.0
+         * @param
+         * @return
+         */
+                        CSvgContentHandler();
+
+        /**
+         * Check for possible svg elements placed inside entity references.
+         * If so, attempt to parse as part of the document.
+         * If parsing was successful, return ETrue, otherwise return EFalse.
+         *
+         * @since 1.0
+         * @param
+         * @return If parsing was successful
+         */
+        TBool ParseEntity( const TDesC& aEntity );
+
+        /**
+         * Post parsing processing, such as removing false switch elements.
+         *
+         * @since 1.0
+         * @param
+         * @return none
+         */
+        void PostParseProcessing();
+
+        /**
+         * Removes references of element. Usually called before the element is
+         * deleted.
+         *
+         * @since s60 3.2
+         * @param aElement Pointer of element that is about to be deleted.
+         * @return none
+         */
+        void RemoveInternalReferences( CSvgElementImpl* aElement );
+
+    private:
+
+        CSvgElementImpl*iRootElement; // SVG Element
+        CSvgElementImpl*iCurrentElement; // Latest discovered element
+        CSvgElementImpl*iCurrentParentElement; // Parent element for the current depth
+        CSvgDocumentImpl* iDocument; // The document object to which this SVG source is processed
+
+
+
+        // Various booleans that indicate success/failure or true/false for various attributes
+        TBool       iIsColorAnim;
+        // Indicating begin or end attribute.
+        TBool       iBeginEndAtr;
+
+
+        // Various buffers that hold animation time values
+        TPtrC       iFromVal;
+        TPtrC       iToVal;
+        TPtrC       iByVal;
+        TPtrC       iValues;
+        TPtrC       iTimes;
+        TPtrC       iSplines;
+
+        HBufC*      iSystemLanguage;
+
+        // Various attributes that hold document "depth" information
+        TInt        iIgnoreDepth;
+        TBool       iIsSvgElement;
+
+        CSvgErrorImpl*  iSvgError;
+
+        /*Added to support forward references in Use and animtion elements */
+        RPointerArray<CSvgElementImpl>*    iUseElementArray;
+        RPointerArray<CSvgElementImpl>*     iAnimRefElementArray;
+
+        //array to keep track of switch elements
+        //so we can go back at the end of parsing and remove the elements
+        //that dont evaluate to true from memory
+        RPointerArray<CSvgElementImpl>*    iSwitchElementArray;
+        RPointerArray<CSvgElementImpl>*    iReqFetAttSysArray;
+        RPointerArray<CSvgElementImpl>*    iAnimationElementArray;
+        // CData container -- used to append pieces of cdata from XML parser
+        // callbacks: Charecters & StartEntity
+        HBufC* iCData;
+
+        // Reference to loading listeners
+        const RPointerArray<MSvgLoadingListener>* iLoadingListeners;
+
+        TBool iCancelRequested;
+
+        RPointerArray<CSvgImageElementImpl>    iImageElements;
+				TBool iRemoveFalseSwitchElements;
+    };
+
+#endif