⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dom_elementimpl.h

📁 khtml在gtk上的移植版本
💻 H
字号:
/* * 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 Peter Kelly (pmk@post.com) *           (C) 2001 Dirk Mueller (mueller@kde.org) * Copyright (C) 2003 Apple Computer, Inc. * * 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., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * */#ifndef _DOM_ELEMENTImpl_h_#define _DOM_ELEMENTImpl_h_#include "dom_nodeimpl.h"#include "dom/dom_element.h"#include "xml/dom_stringimpl.h"#include "misc/shared.h"#if APPLE_CHANGES && !KWIQ#ifdef __OBJC__#define id id_AVOID_KEYWORD#endif#endifnamespace khtml {    class CSSStyleSelector;}namespace DOM {class ElementImpl;class DocumentImpl;class NamedAttrMapImpl;class AtomicStringList;// this has no counterpart in DOM, purely internal// representation of the nodevalue of an Attr.// the actual Attr (AttrImpl) with its value as textchild// is only allocated on demand by the DOM bindings.// Any use of AttrImpl inside khtml should be avoided.class AttributeImpl : public khtml::Shared<AttributeImpl>{    friend class NamedAttrMapImpl;    friend class ElementImpl;    friend class AttrImpl;public:    // null value is forbidden !    AttributeImpl(NodeImpl::Id id, const AtomicString& value)        : m_id(id), _value(value), _impl(0)        { };    virtual ~AttributeImpl() {};        const AtomicString& value() const { return _value; }    const AtomicString& prefix() const { return _prefix; }    NodeImpl::Id id() const { return m_id; }    AttrImpl* attrImpl() const { return _impl; }    bool isNull() const { return _value.isNull(); }    bool isEmpty() const { return _value.isEmpty(); }        virtual AttributeImpl* clone(bool preserveDecl=true) const;private:    void setValue(const AtomicString& value) {        _value = value;    }    void setPrefix(const AtomicString& prefix) {        _prefix = prefix;    }    void allocateImpl(ElementImpl* e);protected:    NodeImpl::Id m_id;    AtomicString _prefix;    AtomicString _value;    AttrImpl* _impl;};// Attr can have Text and EntityReference children// therefore it has to be a fullblown Node. The plan// is to dynamically allocate a textchild and store the// resulting nodevalue in the AttributeImpl upon// destruction. however, this is not yet implemented.class AttrImpl : public NodeBaseImpl{    friend class ElementImpl;    friend class NamedAttrMapImpl;public:    AttrImpl(ElementImpl* element, DocumentPtr* docPtr, AttributeImpl* a);    ~AttrImpl();private:    AttrImpl(const AttrImpl &other);    AttrImpl &operator = (const AttrImpl &other);public:    // DOM methods & attributes for Attr    bool specified() const { return m_specified; }    ElementImpl* ownerElement() const { return m_element; }    AttributeImpl* attrImpl() const { return m_attribute; }    //DOMString value() const;    void setValue( const DOMString &v, int &exceptioncode );    // DOM methods overridden from  parent classes    virtual DOMString nodeName() const;    virtual unsigned short nodeType() const;    virtual DOMString prefix() const;    virtual void setPrefix(const DOMString &_prefix, int &exceptioncode );    virtual DOMString nodeValue() const;    virtual void setNodeValue( const DOMString &, int &exceptioncode );    virtual NodeImpl *cloneNode ( bool deep );    // Other methods (not part of DOM)    virtual bool isAttributeNode() const { return true; }    virtual bool childAllowed( NodeImpl *newChild );    virtual bool childTypeAllowed( unsigned short type );    virtual DOMString toString() const;#if APPLE_CHANGES    static Attr createInstance(AttrImpl *impl);#endifprotected:    ElementImpl* m_element;    AttributeImpl* m_attribute;};class ElementImpl : public NodeBaseImpl{    friend class DocumentImpl;    friend class NamedAttrMapImpl;    friend class AttrImpl;    friend class NodeImpl;    friend class khtml::CSSStyleSelector;public:    ElementImpl(DocumentPtr *doc);    ~ElementImpl();    // Used to quickly determine whether or not an element has a given CSS class.    virtual const AtomicStringList* getClassList() const;    const AtomicString& getIDAttribute() const;    const AtomicString& getAttribute( NodeImpl::Id id ) const;    const AtomicString& getAttribute(const DOMString& localName) const { return getAttributeNS(QString::null, localName); }    const AtomicString& getAttributeNS(const DOMString &namespaceURI,                                       const DOMString &localName) const;    void setAttribute( NodeImpl::Id id, DOMStringImpl* value, int &exceptioncode );    void removeAttribute( NodeImpl::Id id, int &exceptioncode );    bool hasAttributes() const;        DOMString prefix() const { return m_prefix; }    void setPrefix(const DOMString &_prefix, int &exceptioncode );    // DOM methods overridden from  parent classes    virtual DOMString tagName() const;    virtual unsigned short nodeType() const;    virtual NodeImpl *cloneNode ( bool deep );    virtual DOMString nodeName() const;    virtual bool isElementNode() const { return true; }    // convenience methods which ignore exceptions    void setAttribute (NodeImpl::Id id, const DOMString &value);    NamedAttrMapImpl* attributes(bool readonly = false) const    {        if (!readonly && !namedAttrMap) createAttributeMap();        return namedAttrMap;    }    // This method is called whenever an attribute is added, changed or removed.    virtual void attributeChanged(AttributeImpl* attr, bool preserveDecls = false) {}    // not part of the DOM    void setAttributeMap ( NamedAttrMapImpl* list );    // State of the element.    virtual QString state() { return QString::null; }    virtual void attach();    virtual void detach();    virtual khtml::RenderStyle *styleForRenderer(khtml::RenderObject *parent);    virtual khtml::RenderObject *createRenderer(RenderArena *, khtml::RenderStyle *);    virtual void recalcStyle( StyleChange = NoChange );    virtual void mouseEventHandler( MouseEvent */*ev*/, bool /*inside*/ ) {};    virtual bool childAllowed( NodeImpl *newChild );    virtual bool childTypeAllowed( unsigned short type );     virtual AttributeImpl* createAttribute(NodeImpl::Id id, DOMStringImpl* value);        void dispatchAttrRemovalEvent(AttributeImpl *attr);    void dispatchAttrAdditionEvent(AttributeImpl *attr);    virtual void accessKeyAction() {};    virtual DOMString toString() const;    virtual void defaultEventHandler(EventImpl *evt);        virtual bool isURLAttribute(AttributeImpl *attr) const;    #ifndef NDEBUG    virtual void dump(QTextStream *stream, QString ind = "") const;#endif#if APPLE_CHANGES    static Element createInstance(ElementImpl *impl);#endifprotected:    virtual void createAttributeMap() const;    DOMString openTagStartToString() const;private:    void updateId(const AtomicString& oldId, const AtomicString& newId);protected: // member variables    mutable NamedAttrMapImpl *namedAttrMap;    DOMStringImpl *m_prefix;};class XMLElementImpl : public ElementImpl{public:    XMLElementImpl(DocumentPtr *doc, DOMStringImpl *_tagName);    XMLElementImpl(DocumentPtr *doc, DOMStringImpl *_qualifiedName, DOMStringImpl *_namespaceURI);    ~XMLElementImpl();    // DOM methods overridden from  parent classes    virtual DOMString localName() const;    virtual NodeImpl *cloneNode ( bool deep );    // Other methods (not part of DOM)    virtual bool isXMLElementNode() const { return true; }    virtual Id id() const { return m_id; }protected:    Id m_id;};// the map of attributes of an elementclass NamedAttrMapImpl : public NamedNodeMapImpl{    friend class ElementImpl;public:    NamedAttrMapImpl(ElementImpl *e);    virtual ~NamedAttrMapImpl();    NamedAttrMapImpl(const NamedAttrMapImpl&);    NamedAttrMapImpl &operator =(const NamedAttrMapImpl &other);    // DOM methods & attributes for NamedNodeMap#if __VC32__ //VC gets error C2555; VC BUG?    virtual NodeImpl *getNamedItem ( NodeImpl::Id id ) const;#else    virtual AttrImpl *getNamedItem ( NodeImpl::Id id ) const;#endif    virtual Node removeNamedItem ( NodeImpl::Id id, int &exceptioncode );    virtual Node setNamedItem ( NodeImpl* arg, int &exceptioncode );    virtual AttrImpl *item ( unsigned long index ) const;    virtual unsigned long length() const { return len;}    // Other methods (not part of DOM)    virtual NodeImpl::Id mapId(const DOMString& namespaceURI,  const DOMString& localName,  bool readonly);    AttributeImpl* attributeItem(unsigned long index) const { return attrs ? attrs[index] : 0; }    AttributeImpl* getAttributeItem(NodeImpl::Id id) const;    virtual bool isReadOnly() { return element ? element->isReadOnly() : false; }    // used during parsing: only inserts if not already there    // no error checking!    void insertAttribute(AttributeImpl* newAttribute) {        if (!getAttributeItem(newAttribute->id()))            addAttribute(newAttribute);        else            newAttribute->deref();    }    virtual bool isHTMLAttributeMap() const;    const AtomicString& id() const { return m_id; }    void setID(const AtomicString& _id) { m_id = _id; }    protected:    // this method is internal, does no error checking at all    void addAttribute(AttributeImpl* newAttribute);    // this method is internal, does no error checking at all    void removeAttribute(NodeImpl::Id id);    virtual void clearAttributes();    void detachFromElement();protected:    ElementImpl *element;    AttributeImpl **attrs;    uint len;    AtomicString m_id;};}; //namespace#if APPLE_CHANGES && !KWIQ#undef id#endif#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -