diff -r 000000000000 -r 88edb906c587 svgtopt/SVG/SVGEngine/inc/SVGContentHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/svgtopt/SVG/SVGEngine/inc/SVGContentHandler.h Wed Nov 03 18:56:10 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 +#include + +#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 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* iUseElementArray; + RPointerArray* 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* iSwitchElementArray; + RPointerArray* iReqFetAttSysArray; + RPointerArray* iAnimationElementArray; + // CData container -- used to append pieces of cdata from XML parser + // callbacks: Charecters & StartEntity + HBufC* iCData; + + // Reference to loading listeners + const RPointerArray* iLoadingListeners; + + TBool iCancelRequested; + + RPointerArray iImageElements; + TBool iRemoveFalseSwitchElements; + }; + +#endif