/* * Copyright 1999-2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * $Id: DocumentTypeImpl.cpp 176026 2004-09-08 13:57:07Z peiyongz $ */ #include "DocumentTypeImpl.hpp" #include "DOM_Node.hpp" #include "NamedNodeMapImpl.hpp" #include "DOM_DOMException.hpp" #include "DocumentImpl.hpp" XERCES_CPP_NAMESPACE_BEGIN DocumentTypeImpl::DocumentTypeImpl(DocumentImpl *ownerDoc, const DOMString &dtName) : ParentNode(ownerDoc), publicId(null), systemId(null), internalSubset(null) //DOM Level 2 , intSubsetReading(false) { name = dtName.clone(); entities = new NamedNodeMapImpl(this); notations = new NamedNodeMapImpl(this); elements = new NamedNodeMapImpl(this); }; //Introduced in DOM Level 2 DocumentTypeImpl::DocumentTypeImpl(DocumentImpl *ownerDoc, const DOMString &qualifiedName, const DOMString &pubId, const DOMString &sysId) : ParentNode(ownerDoc), publicId(pubId), systemId(sysId), internalSubset(null) , intSubsetReading(false) { name = qualifiedName.clone(); if (DocumentImpl::indexofQualifiedName(qualifiedName) < 0) throw DOM_DOMException(DOM_DOMException::NAMESPACE_ERR, null); entities = new NamedNodeMapImpl(this); notations= new NamedNodeMapImpl(this); elements = new NamedNodeMapImpl(this); }; DocumentTypeImpl::DocumentTypeImpl(const DocumentTypeImpl &other, bool deep) : ParentNode(other) { name = other.name.clone(); if (deep) cloneChildren(other); entities = other.entities->cloneMap(this); notations= other.notations->cloneMap(this); elements = other.elements->cloneMap(this); //DOM Level 2 publicId = other.publicId.clone(); systemId = other.systemId.clone(); internalSubset = other.internalSubset.clone(); intSubsetReading = other.intSubsetReading; }; DocumentTypeImpl::~DocumentTypeImpl() { if (entities != null) { entities->removeAll(); NamedNodeMapImpl::removeRef(entities); } if (notations != null) { notations->removeAll(); NamedNodeMapImpl::removeRef(notations); } if (elements != null) { elements->removeAll(); NamedNodeMapImpl::removeRef(elements); } }; NodeImpl *DocumentTypeImpl::cloneNode(bool deep) { return new DocumentTypeImpl(*this, deep); }; /** * NON-DOM * set the ownerDocument of this node and its children */ void DocumentTypeImpl::setOwnerDocument(DocumentImpl *doc) { ParentNode::setOwnerDocument(doc); entities->setOwnerDocument(doc); notations->setOwnerDocument(doc); // elements->setOwnerDocument(doc); } DOMString DocumentTypeImpl::getNodeName() { return name; }; short DocumentTypeImpl::getNodeType() { return DOM_Node::DOCUMENT_TYPE_NODE; }; NamedNodeMapImpl *DocumentTypeImpl::getEntities() { return entities; }; NamedNodeMapImpl *DocumentTypeImpl::getElements() { return elements; }; DOMString DocumentTypeImpl::getName() { return name; }; NamedNodeMapImpl *DocumentTypeImpl::getNotations() { return notations; }; bool DocumentTypeImpl::isDocumentTypeImpl() { return true; }; void DocumentTypeImpl::setReadOnly(bool readOnl, bool deep) { ParentNode::setReadOnly(readOnl,deep); entities->setReadOnly(readOnl,true); notations->setReadOnly(readOnl,true); }; //Introduced in DOM Level 2 DOMString DocumentTypeImpl::getPublicId() { return publicId; } DOMString DocumentTypeImpl::getSystemId() { return systemId; } DOMString DocumentTypeImpl::getInternalSubset() { return internalSubset; } bool DocumentTypeImpl::isIntSubsetReading() { return intSubsetReading; } //set functions void DocumentTypeImpl::setPublicId(const DOMString& value) { if (value == 0) return; publicId = value.clone(); } void DocumentTypeImpl::setSystemId(const DOMString& value) { if (value == 0) return; systemId = value.clone(); } void DocumentTypeImpl::setInternalSubset(const DOMString &value) { if (value == 0) return; internalSubset = value.clone(); } XERCES_CPP_NAMESPACE_END