1 /*
2  * This file is part of the DOM implementation for KDE.
3  *
4  * Copyright (C) 2000 Peter Kelly (pmk@post.com)
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public License
17  * along with this library; see the file COPYING.LIB.  If not, write to
18  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19  * Boston, MA 02110-1301, USA.
20  *
21  */
22 
23 #ifndef _DOM_XmlImpl_h_
24 #define _DOM_XmlImpl_h_
25 
26 #include "xml/dom_nodeimpl.h"
27 #include "misc/loader_client.h"
28 
29 #include <qxml.h>
30 
31 namespace khtml
32 {
33 class CachedCSSStyleSheet;
34 }
35 
36 namespace DOM
37 {
38 
39 class DocumentImpl;
40 class CSSStyleSheetImpl;
41 class StyleSheetImpl;
42 class DOMString;
43 
44 class EntityImpl : public NodeBaseImpl
45 {
46 public:
47     EntityImpl(DocumentImpl *doc);
48     EntityImpl(DocumentImpl *doc, DOMString _name);
49     EntityImpl(DocumentImpl *doc, DOMString _publicId, DOMString _systemId, DOMString _notationName);
50     virtual ~EntityImpl();
51 
52     // DOM methods & attributes for Entity
53 
54     virtual DOMString publicId() const;
55     virtual DOMString systemId() const;
56     virtual DOMString notationName() const;
57 
58     // DOM methods overridden from  parent classes
59 
60     DOMString nodeName() const override;
61     unsigned short nodeType() const override;
62     WTF::PassRefPtr<NodeImpl> cloneNode(bool deep) override;
63 
64     // Other methods (not part of DOM)
65 
66     bool childTypeAllowed(unsigned short type) override;
67 
68     DOMString toString() const override;
69 
70 protected:
71     DOMStringImpl *m_publicId;
72     DOMStringImpl *m_systemId;
73     DOMStringImpl *m_notationName;
74     DOMStringImpl *m_name;
75 };
76 
77 class EntityReferenceImpl : public NodeBaseImpl
78 {
79 public:
80     EntityReferenceImpl(DocumentImpl *doc);
81     EntityReferenceImpl(DocumentImpl *doc, DOMStringImpl *_entityName);
82     virtual ~EntityReferenceImpl();
83 
84     // DOM methods overridden from  parent classes
85 
86     DOMString nodeName() const override;
87     unsigned short nodeType() const override;
88     WTF::PassRefPtr<NodeImpl> cloneNode(bool deep) override;
89 
90     // Other methods (not part of DOM)
91 
92     bool childTypeAllowed(unsigned short type) override;
93 
94     DOMString toString() const override;
95 protected:
96     DOMStringImpl *m_entityName;
97 };
98 
99 class NotationImpl : public NodeBaseImpl
100 {
101 public:
102     NotationImpl(DocumentImpl *doc);
103     NotationImpl(DocumentImpl *doc, DOMString _name, DOMString _publicId, DOMString _systemId);
104     virtual ~NotationImpl();
105 
106     // DOM methods & attributes for Notation
107 
108     virtual DOMString publicId() const;
109     virtual DOMString systemId() const;
110 
111     // DOM methods overridden from  parent classes
112 
113     DOMString nodeName() const override;
114     unsigned short nodeType() const override;
115     WTF::PassRefPtr<NodeImpl> cloneNode(bool deep) override;
116 
117     // Other methods (not part of DOM)
118 
119     bool childTypeAllowed(unsigned short type) override;
120 protected:
121     DOMStringImpl *m_name;
122     DOMStringImpl *m_publicId;
123     DOMStringImpl *m_systemId;
124 };
125 
126 class ProcessingInstructionImpl : public NodeBaseImpl, private khtml::CachedObjectClient
127 {
128 public:
129     ProcessingInstructionImpl(DocumentImpl *doc);
130     ProcessingInstructionImpl(DocumentImpl *doc, DOMString _target, DOMString _data);
131     virtual ~ProcessingInstructionImpl();
132 
133     // DOM methods & attributes for Notation
134 
135     virtual DOMString target() const;
data()136     DOMString data() const
137     {
138         return m_data;
139     }
140     virtual void setData(const DOMString &_data, int &exceptioncode);
141 
142     // DOM methods overridden from  parent classes
143 
144     DOMString nodeName() const override;
145     unsigned short nodeType() const override;
146     DOMString nodeValue() const override;
147     void setNodeValue(const DOMString &_nodeValue, int &exceptioncode) override;
148     WTF::PassRefPtr<NodeImpl> cloneNode(bool deep) override;
149 
150     // Other methods (not part of DOM)
151 
152     virtual DOMString localHref() const;
153     bool childTypeAllowed(unsigned short type) override;
154     StyleSheetImpl *sheet() const;
155     void checkStyleSheet();
156     void setStyleSheet(const DOM::DOMString &url, const DOM::DOMString &sheet, const DOM::DOMString &charset, const DOM::DOMString &mimetype) override;
157     virtual void setStyleSheet(CSSStyleSheetImpl *sheet);
158 
159     DOMString toString() const override;
160 
offsetInCharacters()161     bool offsetInCharacters() const override
162     {
163         return true;
164     }
165     int maxCharacterOffset() const override;
166 
isAlternate()167     bool isAlternate() const
168     {
169         return m_alternate;
170     }
171 protected:
172     DOMStringImpl *m_target;
173     DOMStringImpl *m_data;
174     DOMStringImpl *m_localHref;
175     DOMStringImpl *m_title;
176     DOMStringImpl *m_media;
177     bool m_alternate;
178     khtml::CachedCSSStyleSheet *m_cachedSheet;
179     CSSStyleSheetImpl *m_sheet;
180 };
181 
182 class XMLAttributeReader : public QXmlDefaultHandler
183 {
184 public:
185     XMLAttributeReader(const QString &_attrString);
186     virtual ~XMLAttributeReader();
187     QXmlAttributes readAttrs(bool &ok);
188     bool startElement(const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &atts) override;
189 
190 protected:
191     QXmlAttributes attrs;
192     QString m_attrString;
193 };
194 
195 } //namespace
196 
197 #endif
198