[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: branches/KDE/4.0/kdelibs/khtml/xml
From: Harri Porten <porten () kde ! org>
Date: 2008-04-05 15:23:19
Message-ID: 1207408999.841994.24574.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 793896 by porten:
Make createDocument() work as specified in DOM Level 2: Use the
user-supplied doctype and set its Node.ownerDocument attribute
to the document being created.
M +11 -5 dom_docimpl.cpp
M +20 -0 dom_nodeimpl.cpp
M +1 -0 dom_nodeimpl.h
--- branches/KDE/4.0/kdelibs/khtml/xml/dom_docimpl.cpp #793895:793896
@@ -176,11 +176,15 @@
// ### this is completely broken.. without a view it will not work (Dirk)
DocumentImpl *doc = new DocumentImpl(this, 0);
- // ### this should be created during parsing a <!DOCTYPE>
- doc->setDocType(new DocumentTypeImpl(this, doc,
- DOMString() /* qualifiedName */,
- DOMString() /* publicId */,
- DOMString() /* systemId */));
+ if (dtype) {
+ doc->setDocType(dtype);
+ } else {
+ // ### this should be created during parsing a <!DOCTYPE>
+ doc->setDocType(new DocumentTypeImpl(this, doc,
+ DOMString() /* qualifiedName */,
+ DOMString() /* publicId */,
+ DOMString() /* systemId */));
+ }
// now get the interesting parts of the doctype
// ### create new one if not there (currently always there)
@@ -510,8 +514,10 @@
void DocumentImpl::setDocType(DocumentTypeImpl* dt)
{
+ assert(m_doctype == 0 && dt != 0);
m_doctype = dt;
m_doctype->ref();
+ m_doctype->setDocument(this);
}
DOMImplementationImpl *DocumentImpl::implementation() const
--- branches/KDE/4.0/kdelibs/khtml/xml/dom_nodeimpl.cpp #793895:793896
@@ -1125,7 +1125,27 @@
return doc;
}
+void NodeImpl::setDocument(DocumentImpl* doc)
+{
+ if (m_document == doc)
+ return;
+#if 1 // implemented for one special case only so far
+ assert(m_document == 0 && doc != 0 &&
+ nodeType() == Node::DOCUMENT_TYPE_NODE);
+ m_document = doc;
+#else // for general use do something like this
+ m_document = 0;
+ if (inDocument())
+ removedFromDocument();
+
+ ScriptInterpreter::updateDOMNodeDocument(this, m_document, doc);
+
+ m_document = doc;
+ insertedIntoDocument();
+#endif
+}
+
//-------------------------------------------------------------------------
NodeBaseImpl::~NodeBaseImpl()
--- branches/KDE/4.0/kdelibs/khtml/xml/dom_nodeimpl.h #793895:793896
@@ -277,6 +277,7 @@
// Returns the document that this node is associated with. This is guaranteed to \
always be non-null, as opposed to
// DOM's ownerDocument() which is null for Document nodes (and sometimes \
DocumentType nodes). DocumentImpl* getDocument() const { return m_document.get(); }
+ void setDocument(DocumentImpl* doc);
void addEventListener(int id, EventListener *listener, const bool useCapture);
void removeEventListener(int id, EventListener *listener, bool useCapture);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic