diff options
Diffstat (limited to 'khtml/xml/dom_docimpl.h')
-rw-r--r-- | khtml/xml/dom_docimpl.h | 763 |
1 files changed, 0 insertions, 763 deletions
diff --git a/khtml/xml/dom_docimpl.h b/khtml/xml/dom_docimpl.h deleted file mode 100644 index 5e50c09a4..000000000 --- a/khtml/xml/dom_docimpl.h +++ /dev/null @@ -1,763 +0,0 @@ -/* - * This file is part of the DOM implementation for KDE. - * - * Copyright (C) 1999 Lars Knoll (knoll@kde.org) - * (C) 1999 Antti Koivisto (koivisto@kde.org) - * (C) 2001 Dirk Mueller (mueller@kde.org) - * (C) 2002-2003 Apple Computer, Inc. - * (C) 2006 Allan Sandfeld Jensen(kde@carewolf.com) - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - */ - -#ifndef _DOM_DocumentImpl_h_ -#define _DOM_DocumentImpl_h_ - -#include "xml/dom_elementimpl.h" -#include "xml/dom_textimpl.h" -#include "xml/dom2_traversalimpl.h" -#include "misc/shared.h" -#include "misc/loader.h" -#include "misc/seed.h" - -#include <tqstringlist.h> -#include <tqptrlist.h> -#include <tqobject.h> -#include <tqintcache.h> -#include <tqintdict.h> -#include <tqdict.h> -#include <tqmap.h> - -#include <kurl.h> - -class TQPaintDevice; -class TQTextCodec; -class TQPaintDeviceMetrics; -class KHTMLView; - -namespace khtml { - class Tokenizer; - class CSSStyleSelector; - class DocLoader; - class CSSStyleSelectorList; - class RenderArena; - class RenderObject; - class CounterNode; - class CachedObject; - class CachedCSSStyleSheet; - class DynamicDomRestyler; -} - -namespace DOM { - - class AbstractViewImpl; - class AttrImpl; - class CDATASectionImpl; - class CSSStyleSheetImpl; - class CommentImpl; - class DocumentFragmentImpl; - class DocumentImpl; - class DocumentType; - class DocumentTypeImpl; - class ElementImpl; - class EntityReferenceImpl; - class EventImpl; - class EventListener; - class GenericRONamedNodeMapImpl; - class HTMLDocumentImpl; - class HTMLElementImpl; - class HTMLImageElementImpl; - class NodeFilter; - class NodeFilterImpl; - class NodeIteratorImpl; - class NodeListImpl; - class ProcessingInstructionImpl; - class RangeImpl; - class RegisteredEventListener; - class StyleSheetImpl; - class StyleSheetListImpl; - class TextImpl; - class TreeWalkerImpl; - -class DOMImplementationImpl : public khtml::Shared<DOMImplementationImpl> -{ -public: - DOMImplementationImpl(); - ~DOMImplementationImpl(); - - // DOM methods & attributes for DOMImplementation - bool hasFeature ( const DOMString &feature, const DOMString &version ); - DocumentTypeImpl *createDocumentType( const DOMString &qualifiedName, const DOMString &publicId, - const DOMString &systemId, int &exceptioncode ); - DocumentImpl *createDocument( const DOMString &namespaceURI, const DOMString &qualifiedName, - const DocumentType &doctype, int &exceptioncode ); - - DOMImplementationImpl* getInterface(const DOMString& feature) const; - - // From the DOMImplementationCSS interface - CSSStyleSheetImpl *createCSSStyleSheet(DOMStringImpl *title, DOMStringImpl *media, int &exceptioncode); - - // From the HTMLDOMImplementation interface - HTMLDocumentImpl* createHTMLDocument( const DOMString& title); - - // Other methods (not part of DOM) - DocumentImpl *createDocument( KHTMLView *v = 0 ); - HTMLDocumentImpl *createHTMLDocument( KHTMLView *v = 0 ); - - // Returns the static instance of this class - only one instance of this class should - // ever be present, and is used as a factory method for creating DocumentImpl objects - static DOMImplementationImpl *instance(); - -protected: - static DOMImplementationImpl *m_instance; -}; - -/** - * @internal A cache of element name (or id) to pointer - * ### KDE4, QHash: better to store values here - */ -class ElementMappingCache -{ -public: - /** - For each name, we hold a reference count, and a - pointer. If the item is in the table, which implies - reference count is > 1, the name is a valid key. - If the pointer is non-null, it points to the appropriate - mapping - */ - struct ItemInfo - { - int ref; - ElementImpl* nd; - }; - - ElementMappingCache(); - - /** - Add a pointer as just one of candidates, not neccesserily the proper one - */ - void add(const TQString& id, ElementImpl* nd); - - /** - Set the pointer as the definite mapping; it must have already been added - */ - void set(const TQString& id, ElementImpl* nd); - - /** - Remove the item; it must have already been added. - */ - void remove(const TQString& id, ElementImpl* nd); - - /** - Returns true if the item exists - */ - bool contains(const TQString& id); - - /** - Returns the information for the given ID - */ - ItemInfo* get(const TQString& id); -private: - TQDict<ItemInfo> m_dict; -}; - - -/** - * @internal - */ -class DocumentImpl : public TQObject, private khtml::CachedObjectClient, public NodeBaseImpl -{ - Q_OBJECT -public: - DocumentImpl(DOMImplementationImpl *_implementation, KHTMLView *v); - ~DocumentImpl(); - - // DOM methods & attributes for Document - - DocumentTypeImpl *doctype() const; - - DOMImplementationImpl *implementation() const; - ElementImpl *documentElement() const; - virtual ElementImpl *createElement ( const DOMString &tagName, int* pExceptioncode = 0 ); - virtual AttrImpl *createAttribute( const DOMString &tagName, int* pExceptioncode = 0 ); - DocumentFragmentImpl *createDocumentFragment (); - TextImpl *createTextNode ( DOMStringImpl* data ) { return new TextImpl( docPtr(), data); } - TextImpl *createTextNode ( const TQString& data ) - { return createTextNode(new DOMStringImpl(data.unicode(), data.length())); } - CommentImpl *createComment ( DOMStringImpl* data ); - CDATASectionImpl *createCDATASection ( DOMStringImpl* data ); - ProcessingInstructionImpl *createProcessingInstruction ( const DOMString &target, DOMStringImpl* data ); - EntityReferenceImpl *createEntityReference ( const DOMString &name ); - NodeImpl *importNode( NodeImpl *importedNode, bool deep, int &exceptioncode ); - virtual ElementImpl *createElementNS ( const DOMString &_namespaceURI, const DOMString &_qualifiedName, - int* pExceptioncode = 0 ); - virtual AttrImpl *createAttributeNS( const DOMString &_namespaceURI, const DOMString &_qualifiedName, - int* pExceptioncode = 0 ); - ElementImpl *getElementById ( const DOMString &elementId ) const; - - // Actually part of HTMLDocument, but used for giving XML documents a window title as well - DOMString title() const { return m_title; } - void setTitle(const DOMString& _title); - - // DOM methods overridden from parent classes - - virtual DOMString nodeName() const; - virtual unsigned short nodeType() const; - - virtual DOMStringImpl* textContent() const; - virtual void setTextContent( const DOMString &text, int& exceptioncode ); - - // Other methods (not part of DOM) - virtual bool isDocumentNode() const { return true; } - virtual bool isHTMLDocument() const { return false; } - - virtual ElementImpl *createHTMLElement ( const DOMString &tagName ); - - khtml::CSSStyleSelector *styleSelector() { return m_styleSelector; } - - /** - * Updates the pending sheet count and then calls updateStyleSelector. - */ - void styleSheetLoaded(); - - /** - * This method returns true if all top-level stylesheets have loaded (including - * any \@imports that they may be loading). - */ - bool haveStylesheetsLoaded() { return m_pendingStylesheets <= 0 || m_ignorePendingStylesheets; } - - /** - * Increments the number of pending sheets. The \<link\> elements - * invoke this to add themselves to the loading list. - */ - void addPendingSheet() { m_pendingStylesheets++; } - - /** - * Returns true if the document has pending stylesheets - * loading. - */ - bool hasPendingSheets() const { return m_pendingStylesheets; } - - /** - * Called when one or more stylesheets in the document may have been added, removed or changed. - * - * Creates a new style selector and assign it to this document. This is done by iterating through all nodes in - * document (or those before \<BODY\> in a HTML document), searching for stylesheets. Stylesheets can be contained in - * \<LINK\>, \<STYLE\> or \<BODY\> elements, as well as processing instructions (XML documents only). A list is - * constructed from these which is used to create the a new style selector which collates all of the stylesheets - * found and is used to calculate the derived styles for all rendering objects. - * - * @param shallow If the stylesheet list for the document is unchanged, with only added or removed rules - * in existing sheets, then set this argument to true for efficiency. - */ - void updateStyleSelector(bool shallow=false); - - void recalcStyleSelector(); - void rebuildStyleSelector(); - - TQString nextState(); - - // Query all registered elements for their state - TQStringList docState(); - bool unsubmittedFormChanges(); - void registerMaintainsState(NodeImpl* e) { m_maintainsState.append(e); } - void deregisterMaintainsState(NodeImpl* e) { m_maintainsState.removeRef(e); } - - // Set the state the document should restore to - void setRestoreState( const TQStringList &s) { m_state = s; } - - KHTMLView *view() const { return m_view; } - KHTMLPart* part() const; - - RangeImpl *createRange(); - - NodeIteratorImpl *createNodeIterator(NodeImpl *root, unsigned long whatToShow, - NodeFilter &filter, bool entityReferenceExpansion, int &exceptioncode); - - TreeWalkerImpl *createTreeWalker(NodeImpl *root, unsigned long whatToShow, NodeFilterImpl *filter, - bool entityReferenceExpansion, int &exceptioncode); - - virtual void recalcStyle( StyleChange = NoChange ); - static TQPtrList<DocumentImpl> * changedDocuments; - virtual void updateRendering(); - void updateLayout(); - static void updateDocumentsRendering(); - khtml::DocLoader *docLoader() { return m_docLoader; } - - virtual void attach(); - virtual void detach(); - - khtml::RenderArena* renderArena() { return m_renderArena.get(); } - - // to get visually ordered hebrew and arabic pages right - void setVisuallyOrdered(); - // to get URL decoding right - void setDecoderCodec(const TQTextCodec *codec); - - void setSelection(NodeImpl* s, int sp, NodeImpl* e, int ep); - void clearSelection(); - - void open ( bool clearEventListeners = true ); - virtual void close ( ); - void write ( const DOMString &text ); - void write ( const TQString &text ); - void writeln ( const DOMString &text ); - void finishParsing ( ); - - KURL URL() const { return m_url; } - void setURL(const TQString& url) { m_url = url; } - - KURL baseURL() const { return m_baseURL.isEmpty() ? m_url : m_baseURL; } - void setBaseURL(const KURL& baseURL) { m_baseURL = baseURL; } - - TQString baseTarget() const { return m_baseTarget; } - void setBaseTarget(const TQString& baseTarget) { m_baseTarget = baseTarget; } - - TQString completeURL(const TQString& url) const { return KURL(baseURL(),url,m_decoderMibEnum).url(); }; - DOMString canonURL(const DOMString& url) const { return url.isEmpty() ? url : completeURL(url.string()); } - - void setUserStyleSheet(const TQString& sheet); - TQString userStyleSheet() const { return m_usersheet; } - void setPrintStyleSheet(const TQString& sheet) { m_printSheet = sheet; } - TQString printStyleSheet() const { return m_printSheet; } - - CSSStyleSheetImpl* elementSheet(); - virtual khtml::Tokenizer *createTokenizer(); - khtml::Tokenizer *tokenizer() { return m_tokenizer; } - - TQPaintDeviceMetrics *paintDeviceMetrics() { return m_paintDeviceMetrics; } - TQPaintDevice *paintDevice() const { return m_paintDevice; } - void setPaintDevice( TQPaintDevice *dev ); - - enum HTMLMode { - Html3 = 0, - Html4 = 1, - XHtml = 2 - }; - - enum ParseMode { - Unknown, - Compat, - Transitional, - Strict - }; - virtual void determineParseMode( const TQString &str ); - void setParseMode( ParseMode m ) { pMode = m; } - ParseMode parseMode() const { return pMode; } - - bool inCompatMode() const { return pMode == Compat; } - bool inTransitionalMode() const { return pMode == Transitional; } - bool inStrictMode() const { return pMode == Strict; } - - //void setHTMLMode( HTMLMode m ) { hMode = m; } - HTMLMode htmlMode() const { return hMode; } - - void setParsing(bool b) { m_bParsing = b; } - bool parsing() const { return m_bParsing; } - - void setTextColor( TQColor color ) { m_textColor = color; } - TQColor textColor() const { return m_textColor; } - - void setDesignMode(bool b); - bool designMode() const; - - // internal - bool prepareMouseEvent( bool readonly, int x, int y, MouseEvent *ev ); - - virtual bool childTypeAllowed( unsigned short nodeType ); - virtual NodeImpl *cloneNode ( bool deep ); - - NodeImpl::Id getId( NodeImpl::IdType _type, DOMStringImpl* _nsURI, DOMStringImpl *_localName, - DOMStringImpl *_prefix, bool readonly, bool lookupHTML, int *pExceptioncode = 0); - NodeImpl::Id getId( NodeImpl::IdType _type, DOMStringImpl *_nodeName, bool readonly, bool lookupHTML, - int *pExceptioncode = 0); - DOMString getName( NodeImpl::IdType _type, NodeImpl::Id _id ) const; - - StyleSheetListImpl* styleSheets() { return m_styleSheets; }; - - DOMString preferredStylesheetSet() const { return m_preferredStylesheetSet; } - DOMString selectedStylesheetSet() const; - void setSelectedStylesheetSet(const DOMString&); - void setPreferredStylesheetSet(const DOMString& s) { m_preferredStylesheetSet = s; } - - void addStyleSheet(StyleSheetImpl *, int *exceptioncode = 0); - void removeStyleSheet(StyleSheetImpl *, int *exceptioncode = 0); - - TQStringList availableStyleSheets() const { return m_availableSheets; } - - NodeImpl* hoverNode() const { return m_hoverNode; } - void setHoverNode(NodeImpl *newHoverNode); - NodeImpl *focusNode() const { return m_focusNode; } - void setFocusNode(NodeImpl *newFocusNode); - NodeImpl* activeNode() const { return m_activeNode; } - void setActiveNode(NodeImpl *newActiveNode); - - // Updates for :target (CSS3 selector). - void setCSSTarget(NodeImpl* n); - NodeImpl* getCSSTarget() { return m_cssTarget; } - - bool isDocumentChanged() { return m_docChanged; } - virtual void setDocumentChanged(bool = true); - void attachNodeIterator(NodeIteratorImpl *ni); - void detachNodeIterator(NodeIteratorImpl *ni); - void notifyBeforeNodeRemoval(NodeImpl *n); - AbstractViewImpl *defaultView() const { return m_defaultView; } - EventImpl *createEvent(const DOMString &eventType, int &exceptioncode); - - // keep track of what types of event listeners are registered, so we don't - // dispatch events unnecessarily - enum ListenerType { - DOMSUBTREEMODIFIED_LISTENER = 0x01, - DOMNODEINSERTED_LISTENER = 0x02, - DOMNODEREMOVED_LISTENER = 0x04, - DOMNODEREMOVEDFROMDOCUMENT_LISTENER = 0x08, - DOMNODEINSERTEDINTODOCUMENT_LISTENER = 0x10, - DOMATTRMODIFIED_LISTENER = 0x20, - DOMCHARACTERDATAMODIFIED_LISTENER = 0x40 - }; - - bool hasListenerType(ListenerType listenerType) const { return (m_listenerTypes & listenerType); } - void addListenerType(ListenerType listenerType) { m_listenerTypes = m_listenerTypes | listenerType; } - - CSSStyleDeclarationImpl *getOverrideStyle(ElementImpl *elt, DOMStringImpl *pseudoElt); - - bool async() const { return m_async; } - void setAsync(bool b) { m_async = b; } - void abort(); - void load(const DOMString &uri); - void loadXML(const DOMString &source); - // from cachedObjectClient - void setStyleSheet(const DOM::DOMString &url, const DOM::DOMString &sheet, const DOM::DOMString &charset); - void error(int err, const TQString &text); - - typedef TQMap<TQString, ProcessingInstructionImpl*> LocalStyleRefs; - LocalStyleRefs* localStyleRefs() { return &m_localStyleRefs; } - - virtual void defaultEventHandler(EventImpl *evt); - virtual void setHTMLWindowEventListener(int id, EventListener *listener); - EventListener *getHTMLWindowEventListener(int id); - EventListener *createHTMLEventListener(const TQString& code, const TQString& name, NodeImpl* node); - - void addWindowEventListener(int id, EventListener *listener, const bool useCapture); - void removeWindowEventListener(int id, EventListener *listener, bool useCapture); - bool hasWindowEventListener(int id); - - EventListener *createHTMLEventListener(TQString code); - - /** - * Searches through the document, starting from fromNode, for the next selectable element that comes after fromNode. - * The order followed is as specified in section 17.11.1 of the HTML4 spec, which is elements with tab indexes - * first (from lowest to highest), and then elements without tab indexes (in document order). - * - * @param fromNode The node from which to start searching. The node after this will be focused. May be null. - * - * @return The focus node that comes after fromNode - * - * See http://www.w3.org/TR/html4/interact/forms.html#h-17.11.1 - */ - NodeImpl *nextFocusNode(NodeImpl *fromNode); - - /** - * Searches through the document, starting from fromNode, for the previous selectable element (that comes _before_) - * fromNode. The order followed is as specified in section 17.11.1 of the HTML4 spec, which is elements with tab - * indexes first (from lowest to highest), and then elements without tab indexes (in document order). - * - * @param fromNode The node from which to start searching. The node before this will be focused. May be null. - * - * @return The focus node that comes before fromNode - * - * See http://www.w3.org/TR/html4/interact/forms.html#h-17.11.1 - */ - NodeImpl *previousFocusNode(NodeImpl *fromNode); - - ElementImpl* findAccessKeyElement(TQChar c); - - int nodeAbsIndex(NodeImpl *node); - NodeImpl *nodeWithAbsIndex(int absIndex); - - /** - * Handles a HTTP header equivalent set by a meta tag using <meta http-equiv="..." content="...">. This is called - * when a meta tag is encountered during document parsing, and also when a script dynamically changes or adds a meta - * tag. This enables scripts to use meta tags to perform refreshes and set expiry dates in addition to them being - * specified in a HTML file. - * - * @param equiv The http header name (value of the meta tag's "equiv" attribute) - * @param content The header value (value of the meta tag's "content" attribute) - */ - void processHttpEquiv(const DOMString &equiv, const DOMString &content); - - void dispatchImageLoadEventSoon(HTMLImageElementImpl *); - void dispatchImageLoadEventsNow(); - void removeImage(HTMLImageElementImpl *); - virtual void timerEvent(TQTimerEvent *); - - // Returns the owning element in the parent document. - // Returns 0 if this is the top level document. - ElementImpl *ownerElement() const; - - DOMString domain() const; - void setDomain( const DOMString &newDomain ); // not part of the DOM - - bool isURLAllowed(const TQString& url) const; - - HTMLElementImpl* body(); - - DOMString toString() const; - - void incDOMTreeVersion() { ++m_domtree_version; } - unsigned int domTreeVersion() const { return m_domtree_version; } - - TQDict<khtml::CounterNode>* counters(const khtml::RenderObject* o) { return m_counterDict[(void*)o]; } - void setCounters(const khtml::RenderObject* o, TQDict<khtml::CounterNode> *dict) { m_counterDict.insert((void*)o, dict);} - void removeCounters(const khtml::RenderObject* o) { m_counterDict.remove((void*)o); } - - - ElementMappingCache& underDocNamedCache() { - return m_underDocNamedCache; - } - - NodeListImpl::Cache* acquireCachedNodeListInfo(NodeListImpl::CacheFactory* fact, - NodeImpl* base, int type); - void releaseCachedNodeListInfo(NodeListImpl::Cache* cache); - - ElementMappingCache& getElementByIdCache() const { - return m_getElementByIdCache; - } - - TQString contentLanguage() const { return m_contentLanguage; } - void setContentLanguage(const TQString& cl) { m_contentLanguage = cl; } - - khtml::DynamicDomRestyler& dynamicDomRestyler() { return *m_dynamicDomRestyler; } - const khtml::DynamicDomRestyler& dynamicDomRestyler() const { return *m_dynamicDomRestyler; } - -signals: - void finishedParsing(); - -protected: - khtml::CSSStyleSelector *m_styleSelector; - KHTMLView *m_view; - TQStringList m_state; - - khtml::DocLoader *m_docLoader; - khtml::Tokenizer *m_tokenizer; - KURL m_url; - KURL m_baseURL; - TQString m_baseTarget; - - DocumentTypeImpl *m_doctype; - DOMImplementationImpl *m_implementation; - - TQString m_usersheet; - TQString m_printSheet; - TQStringList m_availableSheets; - - TQString m_contentLanguage; - - // Track the number of currently loading top-level stylesheets. Sheets - // loaded using the @import directive are not included in this count. - // We use this count of pending sheets to detect when we can begin attaching - // elements. - int m_pendingStylesheets; - bool m_ignorePendingStylesheets; - - CSSStyleSheetImpl *m_elemSheet; - - TQPaintDevice *m_paintDevice; - TQPaintDeviceMetrics *m_paintDeviceMetrics; - ParseMode pMode; - HTMLMode hMode; - - TQColor m_textColor; - NodeImpl *m_hoverNode; - NodeImpl *m_focusNode; - NodeImpl *m_activeNode; - NodeImpl *m_cssTarget; - - unsigned int m_domtree_version; - - struct IdNameMapping { - IdNameMapping(unsigned short _start) - : idStart(_start), count(0) {} - ~IdNameMapping() { - TQIntDictIterator<DOM::DOMStringImpl> it(names); - for (; it.current() ; ++it) - it.current()->deref(); - } - unsigned short idStart; - unsigned short count; - TQIntDict<DOM::DOMStringImpl> names; - TQDict<void> ids; - - void expandIfNeeded() { - if (ids.size() <= ids.count() && ids.size() != khtml_MaxSeed) - ids.resize( khtml::nextSeed(ids.count()) ); - if (names.size() <= names.count() && names.size() != khtml_MaxSeed) - names.resize( khtml::nextSeed(names.count()) ); - } - - void addAlias(DOMStringImpl* _prefix, DOMStringImpl* _name, bool cs, NodeImpl::Id id) { - if(_prefix && _prefix->l) { - TQConstString n(_name->s, _name->l); - TQConstString px( _prefix->s, _prefix->l ); - TQString name = cs ? n.string() : n.string().upper(); - TQString qn("aliases: " + (cs ? px.string() : px.string().upper()) + ":" + name); - if (!ids.find( qn )) { - ids.insert( qn, (void*)id ); - } - } - expandIfNeeded(); - } - - }; - - IdNameMapping *m_attrMap; - IdNameMapping *m_elementMap; - IdNameMapping *m_namespaceMap; - - TQPtrList<NodeIteratorImpl> m_nodeIterators; - AbstractViewImpl *m_defaultView; - - unsigned short m_listenerTypes; - StyleSheetListImpl* m_styleSheets; - StyleSheetListImpl *m_addedStyleSheets; // programmatically added style sheets - LocalStyleRefs m_localStyleRefs; // references to inlined style elements - RegisteredListenerList m_windowEventListeners; - TQPtrList<NodeImpl> m_maintainsState; - - // ### evaluate for placement in RenderStyle - TQPtrDict<TQDict<khtml::CounterNode> > m_counterDict; - - khtml::DynamicDomRestyler *m_dynamicDomRestyler; - - bool visuallyOrdered; - bool m_bParsing; - bool m_docChanged; - bool m_styleSelectorDirty; - bool m_inStyleRecalc; - bool m_async; - bool m_hadLoadError; - bool m_docLoading; - bool m_inSyncLoad; - - DOMString m_title; - DOMString m_preferredStylesheetSet; - khtml::CachedCSSStyleSheet *m_loadingXMLDoc; - - int m_decoderMibEnum; - - //Forms, images, etc., must be quickly accessible via document.name. - ElementMappingCache m_underDocNamedCache; - - //Cache for nodelists and collections. - TQIntDict<NodeListImpl::Cache> m_nodeListCache; - - TQPtrList<HTMLImageElementImpl> m_imageLoadEventDispatchSoonList; - TQPtrList<HTMLImageElementImpl> m_imageLoadEventDispatchingList; - int m_imageLoadEventTimer; - - //Cache for getElementById - mutable ElementMappingCache m_getElementByIdCache; - - khtml::SharedPtr<khtml::RenderArena> m_renderArena; -private: - mutable DOMString m_domain; - int m_selfOnlyRefCount; -public: - // Nodes belonging to this document hold "self-only" references - - // these are enough to keep the document from being destroyed, but - // not enough to keep it from removing its children. This allows a - // node that outlives its document to still have a valid document - // pointer without introducing reference cycles - - void selfOnlyRef() { ++m_selfOnlyRefCount; } - void selfOnlyDeref() { - --m_selfOnlyRefCount; - if (!m_selfOnlyRefCount && !refCount()) - delete this; - } - - // This is called when our last outside reference dies - virtual void removedLastRef(); -}; - -class DocumentFragmentImpl : public NodeBaseImpl -{ -public: - DocumentFragmentImpl(DocumentImpl *doc); - DocumentFragmentImpl(const DocumentFragmentImpl &other); - - // DOM methods overridden from parent classes - virtual DOMString nodeName() const; - virtual unsigned short nodeType() const; - virtual NodeImpl *cloneNode ( bool deep ); - - // Other methods (not part of DOM) - virtual bool childTypeAllowed( unsigned short type ); - - virtual DOMString toString() const; -}; - - -class DocumentTypeImpl : public NodeImpl -{ -public: - DocumentTypeImpl(DOMImplementationImpl *_implementation, DocumentImpl *doc, - const DOMString &qualifiedName, const DOMString &publicId, - const DOMString &systemId); - ~DocumentTypeImpl(); - - // DOM methods & attributes for DocumentType - NamedNodeMapImpl *entities() const; - NamedNodeMapImpl *notations() const; - - DOMString name() const { return m_qualifiedName; } - DOMString publicId() const { return m_publicId; } - DOMString systemId() const { return m_systemId; } - DOMString internalSubset() const { return m_subset; } - - // DOM methods overridden from parent classes - virtual DOMString nodeName() const; - virtual unsigned short nodeType() const; - virtual bool childTypeAllowed( unsigned short type ); - virtual NodeImpl *cloneNode ( bool deep ); - - virtual DOMStringImpl* textContent() const; - virtual void setTextContent( const DOMString &text, int& exceptioncode ); - - // Other methods (not part of DOM) - void setName(const DOMString& n) { m_qualifiedName = n; } - void setPublicId(const DOMString& publicId) { m_publicId = publicId; } - void setSystemId(const DOMString& systemId) { m_systemId = systemId; } - DOMImplementationImpl *implementation() const { return m_implementation; } - void copyFrom(const DocumentTypeImpl&); - - virtual DOMString toString() const; - -protected: - DOMImplementationImpl *m_implementation; - mutable NamedNodeMapImpl* m_entities; - mutable NamedNodeMapImpl* m_notations; - - DOMString m_qualifiedName; - DOMString m_publicId; - DOMString m_systemId; - DOMString m_subset; -}; - -} //namespace -#endif |