xml/legacyminidomparser/XMLDom/SRC/GMXMLDocument.cpp
changeset 0 e35f40988205
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/legacyminidomparser/XMLDom/SRC/GMXMLDocument.cpp	Thu Dec 17 09:29:21 2009 +0200
@@ -0,0 +1,238 @@
+// Copyright (c) 2001-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:
+// MDXMLDocument.CPP
+// @file
+// This file contains the implementation of the CMDXMLDocument class which
+// is the root class for a Mini-DOM tree.
+// 
+//
+
+#include <gmxmldomconstants.h>
+#include <gmxmlnode.h>
+#include <gmxmlelement.h>
+#include <gmxmldocument.h>
+#include <gmxmldocumentelement.h>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS 
+#include "gmxmldummydtd.h"
+#endif
+//
+// Global functions					//
+//
+
+
+CMDXMLDocument::CMDXMLDocument(MXMLDtd& aDtdRepresentation) : iDtdRepresentation(&aDtdRepresentation)
+//
+// Constructor
+//
+	{
+	}
+
+CMDXMLDocument::CMDXMLDocument()
+//
+// Constructor
+//
+	{
+	}
+
+
+EXPORT_C CMDXMLDocument::~CMDXMLDocument()
+ 	{
+ 	delete iRootElement;
+ 	delete iVersionTag;
+ 	delete iDocTypeTag;
+
+	if (iOwnsDtd)
+		// If the DTD is a dummy DTD created by this document then it should be deleted.
+		{
+		delete iDtdRepresentation;
+		}
+ 	}
+
+EXPORT_C CMDXMLDocument* CMDXMLDocument::NewL(MXMLDtd& aDtdRepresentation)
+//
+// Factory function
+// @return Returns the created CMDXMLDocument
+// @leave Can Leave due to OOM
+//
+ 	{
+ 	CMDXMLDocument* self = CMDXMLDocument::NewLC(aDtdRepresentation);
+ 	CleanupStack::Pop(self); 
+ 	return self;
+ 	}
+ 
+
+EXPORT_C CMDXMLDocument* CMDXMLDocument::NewLC(MXMLDtd& aDtdRepresentation)
+//
+// Factory function
+// @return Returns the created CMDXMLDocument
+// @leave Can Leave due to OOM
+//
+ 	{
+ 	CMDXMLDocument* self = new(ELeave) CMDXMLDocument(aDtdRepresentation);
+ 	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+/**
+ * Factory function - Without taking a DTD
+ * Documents created using this function will not be able to validate the XML.
+ * @return Returns the created CMDXMLDocument
+ * @leave Can Leave due to OOM
+ */
+EXPORT_C CMDXMLDocument* CMDXMLDocument::NewL()
+	{
+	CMDXMLDocument* self = CMDXMLDocument::NewLC();
+ 	CleanupStack::Pop(self); 
+ 	return self;
+	}
+
+
+/**
+ * Factory function - Without taking a DTD
+ * Documents created using this function will not be able to validate the XML.
+ * @return Returns the created CMDXMLDocument
+ * @leave Can Leave due to OOM
+ */
+EXPORT_C CMDXMLDocument* CMDXMLDocument::NewLC()
+	{
+	CMDXMLDocument* self = new(ELeave) CMDXMLDocument();
+ 	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+
+void CMDXMLDocument::ConstructL()
+	{
+// Default XML Version & Doc tags being set 
+// Can be reset externally
+	iVersionTag = TPtrC(KXMLDefaultVersionTag).AllocL();
+	iDocTypeTag = TPtrC(KXMLDefaultDocTypeTag).AllocL();
+
+	iRootElement = CMDXMLDocumentElement::NewL(this);
+
+	if (iDtdRepresentation == NULL)
+		// If no DTD has been provided then use the dummy DTD
+		{
+		iDtdRepresentation = new (ELeave) CMDXMLDummyDtd;
+		iOwnsDtd = ETrue;
+		}
+	}
+
+
+EXPORT_C TBool CMDXMLDocument::SetVersionTagL(const TDesC& aVersionTag)
+//
+// @param replacement tag, this must be complete, starting <?xml and finishing >
+// @return ETrue if operation succeeds, EFalse if formal parameter does not 
+// begin with <?xml or does not end with an >
+// @leave can Leave due to OOM
+//
+	{
+	TBool returnValue = EFalse;
+
+	// if correct tag frame
+	if(aVersionTag.Left(TPtrC(KXMLVersion).Length()) == KXMLVersion
+			&& aVersionTag.Right(TPtrC(KXMLEndTag).Length()) == KXMLEndTag)
+		{
+		delete iVersionTag;
+		iVersionTag = NULL;
+		iVersionTag = aVersionTag.AllocL();
+		returnValue = ETrue;
+		}
+
+	return returnValue;
+ 	}
+ 
+EXPORT_C TBool CMDXMLDocument::SetDocTypeTagL(const TDesC& aDocTypeTag)
+//
+// @param replacement tag, this must be complete, starting <!DOCTYPE and finishing >
+// @return ETrue if operation succeeds, EFalse if formal parameter does not 
+// begin with <!DOCTYPE or does not end with an angle bracket
+// @leave can Leave due to OOM
+//
+	{	
+	TBool returnValue = EFalse;
+
+	// if correct tag frame
+	if(aDocTypeTag.Left(TPtrC(KXMLDocumentTypes).Length()) == KXMLDocumentTypes
+			&& aDocTypeTag.Right(TPtrC(KXMLEndTag).Length()) == KXMLEndTag)
+		{
+		delete iDocTypeTag;
+		iDocTypeTag = NULL;
+		iDocTypeTag = aDocTypeTag.AllocL();
+		returnValue = ETrue;
+		}
+
+	return returnValue;
+	}
+
+
+
+EXPORT_C TBool CMDXMLDocument::ValidElementNameL(const TDesC& aElement) const
+//
+// Function to determine whether an Element name is valid for Document
+// @return ETrue the if element name valid - else EFalse
+// @param aElement the element name to be tested
+// @leave can leave due to OOM
+//
+	{
+	return iDtdRepresentation->IsValidElementL(aElement);
+	}
+
+
+EXPORT_C TBool CMDXMLDocument::CanElementHaveChildren(const TDesC& aElement) const
+	{
+	return iDtdRepresentation->CanElementHaveChildren(aElement);
+	}
+
+EXPORT_C void CMDXMLDocument::PlaceholderForRemovedExport1(MXMLDtd& /*aDtdRepresentation*/)
+	{
+	User::Panic(KLDRIMPORT, KLdrImportedOrdinalDoesNotExist);
+	}
+
+EXPORT_C void CMDXMLDocument::PlaceholderForRemovedExport2()
+	{
+	User::Panic(KLDRIMPORT, KLdrImportedOrdinalDoesNotExist);
+	}
+
+const MXMLDtd& CMDXMLDocument::DtdRepresentation() const
+// Returns a reference to the dtd class responsible for validation 
+// @return Returns a reference to MXMLDtd class that should be used for Dtd validation checking
+	{
+	return *iDtdRepresentation;
+	}
+
+
+TBool CMDXMLDummyDtd::IsValidElementL(const TDesC& /*aElement*/) const
+	{
+	return ETrue;
+	}
+
+TInt CMDXMLDummyDtd::IsValidAttributeForElementL(const TDesC& /*aElement*/, const TDesC& /*aAttribute*/, const TDesC& /*aAttributeValue*/) const
+	{
+	return KErrNone;
+	}
+
+TBool CMDXMLDummyDtd::AreValidChildElementsL(const TDesC& /*aParentElement*/, const CDesCArray& /*aChildElements*/) const
+	{
+	return ETrue;
+	}
+
+TBool CMDXMLDummyDtd::CanElementHaveChildren(const TDesC& /*aElement*/) const
+	{
+	return ETrue;
+	}
+
+// End Of File