--- /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