xml/xmlfw/src/xmlframework/parserimpl.h
changeset 0 e35f40988205
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/xmlfw/src/xmlframework/parserimpl.h	Thu Dec 17 09:29:21 2009 +0200
@@ -0,0 +1,110 @@
+// Copyright (c) 2003-2009 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:
+//
+
+#ifndef __PARSERIMPL_H__
+#define __PARSERIMPL_H__
+
+#include <xml/contentprocessoruids.h> // needed for the typedef
+#include <xml/plugins/elementstack.h> // needed for the typedef
+#include <xml/matchdata.h>
+
+class RFs;
+
+namespace Xml
+{
+class MContentHandler;
+class MContentProcessor;
+class MParser;
+class CCharSetConverter;
+class RStringDictionaryCollection;
+
+
+class TParserImpl
+/** The TParserImpl class hides the implementation of the CParser.
+It is responsible for building and maintaining the list of plugins
+in the parsing chain, and has ownership of several key objects within
+the framework. */
+	{
+public:
+
+	TParserImpl();
+
+	void OpenL(const CMatchData& aMatchData, MContentHandler& aCallback);
+	void Close();
+
+
+	void ParseFileL(RFs& aFs, const TDesC& aFilename);
+	
+	void ParseChunkL(const TDesC8& aChunk);
+	void ParseLastChunkL(const TDesC8& aFinalChunk);
+
+	void SetContentHandler(MContentHandler& aCallback);
+	void SetProcessorChainL(const RContentProcessorUids& aPlugins);
+	void SetMimeTypeL(const CMatchData& aCriteria);
+	void ResetMimeTypeL();
+
+	TInt EnableFeature(TInt aParserFeature);
+	TInt DisableFeature(TInt aParserFeature);
+	TBool IsFeatureEnabled(TInt aParserFeature) const;
+
+	void AddPreloadedDictionaryL(const TDesC8& aPublicId);
+
+	RStringPool& StringPool();
+	RStringDictionaryCollection& StringDictionaryCollection();
+	
+private:
+
+	TParserImpl(const TParserImpl& aOriginal);
+	TParserImpl& operator=(const TParserImpl& aRhs);
+
+	MContentHandler* BuildChainL(MContentHandler& aCallback,
+								 const RContentProcessorUids& aPlugins);
+
+	void DestroyChain();
+	
+	MParser* ConstructParserL(const CMatchData& aMatchData, MContentHandler& aCallback);
+
+	MContentProcessor* ConstructPluginInReverseL(const TUid& aImplementationUid, 
+												 MContentHandler& aCallback);
+
+private:
+
+	/** The common element stack for this collection of plugins. */
+	RElementStack iElementStack; 
+
+	struct TDtorContentProcessorPtrMapping
+		{
+		TUid				iDtorKey;
+		MContentProcessor*	iContentProcessor;
+		};
+
+	static void DestroyContentProcessorPtrMapping(TAny* aPtr);
+
+	/** The collection of MContentProcessor pointers and Dtor keys that make up the chain of command.
+    The chain order is determined by the the index, 0 being the first plugin in the chain. */
+	RPointerArray<TDtorContentProcessorPtrMapping>	iDtorKeyAndPluginList;
+	
+	TUid						 iParserDtorKey;
+	MParser*					 iParser;
+	CCharSetConverter*  		 iCharSetConverter;
+	RStringDictionaryCollection* iStringDictionaryCollection;
+	MContentHandler*			 iClient;
+	CMatchData                       iDefParserMatchData;
+	CMatchData                       iCurrentParserMatchData;
+	};
+
+}
+
+#endif //__PARSERIMPL_H__