diff -r 000000000000 -r e35f40988205 xml/xmlfw/test/rtest/tsrc/t_parser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xml/xmlfw/test/rtest/tsrc/t_parser.cpp Thu Dec 17 09:29:21 2009 +0200 @@ -0,0 +1,298 @@ +// 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: +// + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "t_testconstants.h" + +using namespace Xml; + +class CDummyParser : public CBase, public MParser + { +public: + + static MParser* NewL(TAny* aInitParams); + virtual ~CDummyParser(); + + // From MParser + + TInt EnableFeature(TInt /*aParserFeature*/) + { + return KErrNotSupported; + } + TInt DisableFeature(TInt /*aParserFeature*/) + { + return KErrNone; + } + TBool IsFeatureEnabled(TInt /*aParserFeature*/) const + { + return EFalse; + } + void Release(); + void ParseChunkL (const TDesC8& aDescriptor); + void ParseLastChunkL(const TDesC8& aDescriptor); + + // From MContentSouce + + void SetContentSink (MContentHandler& aContentHandler); + + RStringPool& StringPool(); + +private: + + CDummyParser(TParserInitParams* aInitParams); + void DoParseL(); + + inline void OnStartDocumentL(); + inline void OnEndDocumentL(); + inline void OnStartElementL(); + inline void OnEndElementL(); + inline void OnContentL(); + inline void OnStartPrefixMappingL(); + inline void OnEndPrefixMappingL(); + inline void OnIgnorableWhiteSpaceL(); + inline void OnSkippedEntityL(); + inline void OnProcessingInstructionL(); + inline void OnExtensionL(); + inline void OnError(TInt aError); + +private: + MContentHandler* iContentHandler; + RStringDictionaryCollection* iStringDictionaryCollection; + CCharSetConverter* iCharSetConverter; + RElementStack* iElementStack; + }; + +MParser* CDummyParser::NewL(TAny* aInitParams) + { + + CDummyParser* self = new(ELeave) CDummyParser(reinterpret_cast(aInitParams)); + return (static_cast(self)); + } + + + +CDummyParser::CDummyParser(TParserInitParams* aInitParams) +: iContentHandler (reinterpret_cast(aInitParams->iContentHandler)), + iStringDictionaryCollection (reinterpret_cast(aInitParams->iStringDictionaryCollection)), + iCharSetConverter (reinterpret_cast(aInitParams->iCharSetConverter)), + iElementStack (reinterpret_cast(aInitParams->iElementStack)) + { + } + + +void CDummyParser::Release() + { + delete (this); + } + + + +CDummyParser::~CDummyParser() + { + // We don't own this + iContentHandler = NULL; + iStringDictionaryCollection = NULL; + iCharSetConverter = NULL; + iElementStack = NULL; + } + + +void CDummyParser::ParseChunkL (const TDesC8& /*aDescriptor*/) + { + DoParseL(); + } + + +void CDummyParser::ParseLastChunkL(const TDesC8& /*aDescriptor*/) + { + DoParseL(); + } + + +RStringPool& CDummyParser::StringPool() + { + return iStringDictionaryCollection->StringPool(); + } + + + +void CDummyParser::SetContentSink (MContentHandler& aContentHandler) +/** +This method allows for the correct streaming of data to another plugin in the chain. + +@post the next plugin in the chain is set to receive our callbacks. + +*/ + { + iContentHandler = &aContentHandler; + } + + + +void CDummyParser::DoParseL() + { + OnStartDocumentL(); + OnEndDocumentL(); + OnStartElementL(); + OnEndElementL(); + OnContentL(); + OnStartPrefixMappingL(); + OnEndPrefixMappingL(); + OnIgnorableWhiteSpaceL(); + OnSkippedEntityL(); + OnProcessingInstructionL(); + OnExtensionL(); + //OnError(KErrEof); + } + + + +void CDummyParser::OnStartDocumentL() + { + RDocumentParameters documentParameters; + + iContentHandler->OnStartDocumentL(documentParameters, KErrorCodeOnStartDocument); + } + + +void CDummyParser::OnEndDocumentL() + { + iContentHandler->OnEndDocumentL(KErrorCodeOnEndDocument); + } + + + +void CDummyParser::OnStartElementL() + { + RTagInfo element; + RAttributeArray attributes; + + iContentHandler->OnStartElementL(element, attributes, KErrorCodeOnStartElement); + } + + +void CDummyParser::OnEndElementL() + { + RTagInfo element; + + iContentHandler->OnEndElementL(element, KErrorCodeOnEndElement); + } + + + +void CDummyParser::OnContentL() + { + const TBuf8<2> bytes; + + iContentHandler->OnContentL(bytes, KErrorCodeOnContent); + } + + + +void CDummyParser::OnStartPrefixMappingL() + { + RString prefix; + RString uri; + + iContentHandler->OnStartPrefixMappingL(prefix, uri, KErrorCodeOnStartPrefixMapping); + } + + +void CDummyParser::OnEndPrefixMappingL() + { + RString prefix; + + iContentHandler->OnEndPrefixMappingL(prefix, KErrorCodeOnEndPrefixMapping); + } + + + +void CDummyParser::OnIgnorableWhiteSpaceL() + { + const TBuf8<2> bytes; + + iContentHandler->OnIgnorableWhiteSpaceL(bytes, KErrorCodeOnIgnorableWhiteSpace); + } + + + +void CDummyParser::OnSkippedEntityL() + { + RString name; + + iContentHandler->OnSkippedEntityL(name, KErrorCodeOnSkippedEntity); + } + + + +void CDummyParser::OnProcessingInstructionL() + { + TBuf8<2> target; + TBuf8<2> data; + + iContentHandler->OnProcessingInstructionL(target, data, KErrorCodeOnProcessingInstruction); + } + + +void CDummyParser::OnExtensionL() + { + RString data; + TInt token = 0; + + MWbxmlExtensionHandler* ptr = + static_cast + (iContentHandler->GetExtendedInterface(MWbxmlExtensionHandler::EExtInterfaceUid)); + + if (!ptr) + { + User::Leave(KErrXmlUnsupportedExtInterface); + } + + ptr->OnExtensionL(data, token, KErrorCodeOnExtension); + } + + +void CDummyParser::OnError(TInt aError) + { + iContentHandler->OnError(aError); + } + + +// __________________________________________________________________________ +// Exported proxy for instantiation method resolution +// Define the interface UIDs +const TImplementationProxy ImplementationTable[] = { + IMPLEMENTATION_PROXY_ENTRY(0x101FBE53,CDummyParser::NewL) +}; + +EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) + { + aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); + + return ImplementationTable; + } +