msg_plat/smil_engine_api/inc/smilparser.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:44:11 +0200
changeset 0 72b543305e3a
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* 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: smilparser  declaration
*
*/



#ifndef SMILPARSER_H
#define SMILPARSER_H


#include <e32base.h>
#include <s32strm.h>
#include <gdi.h>

class CSmilTimeContainer;
class CSmilMedia;
class CSmilRegion;
class CSmilPresentation;
class CSmilAnchor;
class CSmilArea;
class CSmilTransition;
class CSmilObject;
class MSmilPlayer;

class CMDXMLDocument;

template <class T> class CLinkedList;

/**
 * SMIL2 semantical parser class
 */

class CSmilParser : public CBase
	{	
	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. 
        */
        IMPORT_C static CSmilParser* NewL(MSmilPlayer* aPlayer);
       
        /**
        * Destructor.
        */
        virtual ~CSmilParser();

		/**
		* Parses the given SMIL source, constructing the presentation object. 
		* The given base URL is used for resolving the URLs in the presentation. 
		* 
		* Verbose parse error messages are available through the MSmilPlayer interface.
		*/
		IMPORT_C CSmilPresentation* ParseL(const TDesC& aSmil, const TDesC& aBaseUrl);

		/**
		* Parses the given SMIL document, constructing the presentation object. 
		* The given base URL is used for resolving the URLs in the presentation. 
		*/
		IMPORT_C CSmilPresentation* ParseL(const CMDXMLDocument* aSmilDoc, const TDesC& aBaseUrl);

		/**
		* Parses a CSS2 style color value ("red", "green", "#ffcc44", ...)
		* The aTransparent flag is set if the parsing fails
		*/
		IMPORT_C 
		static TRgb ParseColor( const TDesC& aString, TBool& aTransparent );
		
		/**
		* Enables the layout scaling. This functionality shrinks the layout 
		* so that it fits the screensize while maintaining the original aspect
		* ratio. Images and other media is not scaled unless scaling is
		* is enabled by the fit attribute of the region element of the source
		* document.
		*/
		//inline void SetLayoutScalingEnabled(TBool aScale);
		IMPORT_C void SetMaxDownUpScaling( TReal32 aDown, TReal32 aUp );

	public:

		void BeginElementL(const TDesC& aName);

		void EndElementL(const TDesC& aName);

		void AttributeValueL(const TDesC& aName, const TDesC& aValue);

		void AttributesEndL(TInt aCount);

		TBool CheckSystemAttribute(const TDesC& aName, const TDesC& aValue);

	private:
	
		virtual void ConstructL(MSmilPlayer* aPlayer);

		void Init();

		void ParseTimeListL( const TDesC& aString, TBool aBegin );

		static TReal32 StringToRealValue( const TDesC& aString, TReal32 aDefault );
		static TInt StringToIntValue( const TDesC& aString, TInt aDefault );		

		enum TParseState 
			{
			EInitial, ESmil, EHead, ELayout, ELayoutFinished, EHeadFinished, EBody, EBodyFinished, ESmilFinished
			};


		CSmilParser();

		CSmilObject* iCurrent;		
		CSmilTimeContainer* iTimeContainer;
		CSmilRegion* iCurrentRegion;
		CSmilTransition* iCurrentTransition;
		CSmilAnchor* iAnchor;
		CSmilArea* iArea;

		TParseState iState;

		MSmilPlayer* iPlayer;
		CSmilPresentation* iPresentation;

		TPtrC iTag;

		struct Switch { TInt depth; TBool done; };

		CLinkedList<Switch>* iSwitchStack;

		TInt iDepth;
		TInt iIgnoreDepth;
		TBool iSkipContent;
		TBool iUnknownElement;

		struct Namespace { HBufC* name; HBufC* uri;};

		CLinkedList<Namespace>* iNamespaces;

		TPtrC iParamName;
		TPtrC iParamValue;

		TBool iScalingEnabled;

		TInt iTimegraphSize;
		
		TReal iDown;
		TReal iUp;

	};


#include <smilparser.inl>
#include <smilplayerinterface.h>
#endif