1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the QtXml module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or (at your option) the GNU General
28** Public license version 3 or any later version approved by the KDE Free
29** Qt Foundation. The licenses are as published by the Free Software
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31** included in the packaging of this file. Please review the following
32** information to ensure the GNU General Public License requirements will
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34** https://www.gnu.org/licenses/gpl-3.0.html.
35**
36** $QT_END_LICENSE$
37**
38****************************************************************************/
39
40#ifndef QXML_H
41#define QXML_H
42
43#if 0
44// This is needed because of QTBUG-80347
45#pragma qt_class(QXmlNamespaceSupport)
46#pragma qt_class(QXmlAttributes)
47#pragma qt_class(QXmlInputSource)
48#pragma qt_class(QXmlParseException)
49#pragma qt_class(QXmlReader)
50#pragma qt_class(QXmlSimpleReader)
51#pragma qt_class(QXmlLocator)
52#pragma qt_class(QXmlContentHandler)
53#pragma qt_class(QXmlErrorHandler)
54#pragma qt_class(QXmlDTDHandler)
55#pragma qt_class(QXmlEntityResolver)
56#pragma qt_class(QXmlLexicalHandler)
57#pragma qt_class(QXmlDeclHandler)
58#pragma qt_class(QXmlDefaultHandler)
59#endif
60
61#include <QtCore/qglobal.h>
62
63#include <QtXml/qtxmlglobal.h>
64#include <QtCore/qtextstream.h>
65#include <QtCore/qfile.h>
66#include <QtCore/qstring.h>
67#include <QtCore/qstringlist.h>
68#include <QtCore/qlist.h>
69#include <QtCore/qscopedpointer.h>
70
71#if QT_DEPRECATED_SINCE(5, 15)
72
73QT_BEGIN_NAMESPACE
74
75QT_WARNING_PUSH
76QT_WARNING_DISABLE_DEPRECATED
77
78class QXmlNamespaceSupport;
79class QXmlAttributes;
80class QXmlContentHandler;
81class QXmlDefaultHandler;
82class QXmlDTDHandler;
83class QXmlEntityResolver;
84class QXmlErrorHandler;
85class QXmlLexicalHandler;
86class QXmlDeclHandler;
87class QXmlInputSource;
88class QXmlLocator;
89class QXmlNamespaceSupport;
90class QXmlParseException;
91
92class QXmlReader;
93class QXmlSimpleReader;
94
95class QXmlSimpleReaderPrivate;
96class QXmlNamespaceSupportPrivate;
97class QXmlAttributesPrivate;
98class QXmlInputSourcePrivate;
99class QXmlParseExceptionPrivate;
100class QXmlLocatorPrivate;
101class QXmlDefaultHandlerPrivate;
102
103//
104// SAX Namespace Support
105//
106
107class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlNamespaceSupport
108{
109public:
110 QXmlNamespaceSupport();
111 ~QXmlNamespaceSupport();
112
113 void setPrefix(const QString&, const QString&);
114
115 QString prefix(const QString&) const;
116 QString uri(const QString&) const;
117 void splitName(const QString&, QString&, QString&) const;
118 void processName(const QString&, bool, QString&, QString&) const;
119 QStringList prefixes() const;
120 QStringList prefixes(const QString&) const;
121
122 void pushContext();
123 void popContext();
124 void reset();
125
126private:
127 QXmlNamespaceSupportPrivate *d;
128
129 friend class QXmlSimpleReaderPrivate;
130 Q_DISABLE_COPY(QXmlNamespaceSupport)
131};
132
133
134//
135// SAX Attributes
136//
137
138// Although deprecated warnings are disabled, the intel icc 18 compiler
139// still complains during the instantiation of the templated qSwap() call below
140// (with the parameter QXmlAttributes::AttributeList) when QXmlAttributes is
141// deprecated. This makes the build fail when warnings are treated as errors.
142// To workaround this, deprecated only the constructor.
143class Q_XML_EXPORT QXmlAttributes
144{
145public:
146 QT_DEPRECATED_VERSION(5, 15) QXmlAttributes();
147 QXmlAttributes(const QXmlAttributes &) = default;
148 QXmlAttributes(QXmlAttributes &&) noexcept = default;
149 QXmlAttributes &operator=(const QXmlAttributes &) = default;
150 QXmlAttributes &operator=(QXmlAttributes &&) noexcept = default;
151
152 QT6_NOT_VIRTUAL ~QXmlAttributes();
153
154 void swap(QXmlAttributes &other) noexcept
155 {
156 qSwap(attList, other.attList);
157 qSwap(d, other.d);
158 }
159
160 int index(const QString& qName) const;
161 int index(QLatin1String qName) const;
162 int index(const QString& uri, const QString& localPart) const;
163 int length() const;
164 int count() const;
165 QString localName(int index) const;
166 QString qName(int index) const;
167 QString uri(int index) const;
168 QString type(int index) const;
169 QString type(const QString& qName) const;
170 QString type(const QString& uri, const QString& localName) const;
171 QString value(int index) const;
172 QString value(const QString& qName) const;
173 QString value(QLatin1String qName) const;
174 QString value(const QString& uri, const QString& localName) const;
175
176 void clear();
177 void append(const QString &qName, const QString &uri, const QString &localPart, const QString &value);
178
179private:
180 struct Attribute {
181 QString qname, uri, localname, value;
182 };
183 friend class QTypeInfo<Attribute>;
184 typedef QList<Attribute> AttributeList;
185 AttributeList attList;
186
187 QXmlAttributesPrivate *d;
188};
189
190Q_DECLARE_TYPEINFO(QXmlAttributes::Attribute, Q_MOVABLE_TYPE);
191Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QXmlAttributes)
192
193//
194// SAX Input Source
195//
196
197class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlInputSource
198{
199public:
200 QXmlInputSource();
201 explicit QXmlInputSource(QIODevice *dev);
202 virtual ~QXmlInputSource();
203
204 virtual void setData(const QString& dat);
205 virtual void setData(const QByteArray& dat);
206 virtual void fetchData();
207 virtual QString data() const;
208 virtual QChar next();
209 virtual void reset();
210
211 static const ushort EndOfData;
212 static const ushort EndOfDocument;
213
214protected:
215 virtual QString fromRawData(const QByteArray &data, bool beginning = false);
216
217private:
218 void init();
219 QXmlInputSourcePrivate *d;
220};
221
222//
223// SAX Exception Classes
224//
225
226class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlParseException
227{
228public:
229 explicit QXmlParseException(const QString &name = QString(), int c = -1, int l = -1,
230 const QString &p = QString(), const QString &s = QString());
231 QXmlParseException(const QXmlParseException &other);
232 ~QXmlParseException();
233
234 int columnNumber() const;
235 int lineNumber() const;
236 QString publicId() const;
237 QString systemId() const;
238 QString message() const;
239
240private:
241 QScopedPointer<QXmlParseExceptionPrivate> d;
242};
243
244
245//
246// XML Reader
247//
248
249class QT_DEPRECATED_VERSION_X(5, 15, "Use QXmlStreamReader") Q_XML_EXPORT QXmlReader
250{
251public:
252 virtual ~QXmlReader() {}
253 virtual bool feature(const QString& name, bool *ok = nullptr) const = 0;
254 virtual void setFeature(const QString& name, bool value) = 0;
255 virtual bool hasFeature(const QString& name) const = 0;
256 virtual void* property(const QString& name, bool *ok = nullptr) const = 0;
257 virtual void setProperty(const QString& name, void* value) = 0;
258 virtual bool hasProperty(const QString& name) const = 0;
259 virtual void setEntityResolver(QXmlEntityResolver* handler) = 0;
260 virtual QXmlEntityResolver* entityResolver() const = 0;
261 virtual void setDTDHandler(QXmlDTDHandler* handler) = 0;
262 virtual QXmlDTDHandler* DTDHandler() const = 0;
263 virtual void setContentHandler(QXmlContentHandler* handler) = 0;
264 virtual QXmlContentHandler* contentHandler() const = 0;
265 virtual void setErrorHandler(QXmlErrorHandler* handler) = 0;
266 virtual QXmlErrorHandler* errorHandler() const = 0;
267 virtual void setLexicalHandler(QXmlLexicalHandler* handler) = 0;
268 virtual QXmlLexicalHandler* lexicalHandler() const = 0;
269 virtual void setDeclHandler(QXmlDeclHandler* handler) = 0;
270 virtual QXmlDeclHandler* declHandler() const = 0;
271 virtual bool parse(const QXmlInputSource& input) = 0;
272 virtual bool parse(const QXmlInputSource* input) = 0;
273};
274
275class QT_DEPRECATED_VERSION_X(5, 15, "Use QXmlStreamReader") Q_XML_EXPORT QXmlSimpleReader
276 : public QXmlReader
277{
278public:
279 QXmlSimpleReader();
280 virtual ~QXmlSimpleReader();
281
282 bool feature(const QString& name, bool *ok = nullptr) const override;
283 void setFeature(const QString& name, bool value) override;
284 bool hasFeature(const QString& name) const override;
285
286 void* property(const QString& name, bool *ok = nullptr) const override;
287 void setProperty(const QString& name, void* value) override;
288 bool hasProperty(const QString& name) const override;
289
290 void setEntityResolver(QXmlEntityResolver* handler) override;
291 QXmlEntityResolver* entityResolver() const override;
292 void setDTDHandler(QXmlDTDHandler* handler) override;
293 QXmlDTDHandler* DTDHandler() const override;
294 void setContentHandler(QXmlContentHandler* handler) override;
295 QXmlContentHandler* contentHandler() const override;
296 void setErrorHandler(QXmlErrorHandler* handler) override;
297 QXmlErrorHandler* errorHandler() const override;
298 void setLexicalHandler(QXmlLexicalHandler* handler) override;
299 QXmlLexicalHandler* lexicalHandler() const override;
300 void setDeclHandler(QXmlDeclHandler* handler) override;
301 QXmlDeclHandler* declHandler() const override;
302
303 bool parse(const QXmlInputSource& input) override;
304 bool parse(const QXmlInputSource* input) override;
305 virtual bool parse(const QXmlInputSource* input, bool incremental);
306 virtual bool parseContinue();
307
308private:
309 Q_DISABLE_COPY(QXmlSimpleReader)
310 Q_DECLARE_PRIVATE(QXmlSimpleReader)
311 QScopedPointer<QXmlSimpleReaderPrivate> d_ptr;
312
313 friend class QXmlSimpleReaderLocator;
314 friend class QDomHandler;
315};
316
317//
318// SAX Locator
319//
320
321class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlLocator
322{
323public:
324 QXmlLocator();
325 virtual ~QXmlLocator();
326
327 virtual int columnNumber() const = 0;
328 virtual int lineNumber() const = 0;
329// QString getPublicId() const
330// QString getSystemId() const
331};
332
333//
334// SAX handler classes
335//
336
337class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlContentHandler
338{
339public:
340 virtual ~QXmlContentHandler() {}
341 virtual void setDocumentLocator(QXmlLocator* locator) = 0;
342 virtual bool startDocument() = 0;
343 virtual bool endDocument() = 0;
344 virtual bool startPrefixMapping(const QString& prefix, const QString& uri) = 0;
345 virtual bool endPrefixMapping(const QString& prefix) = 0;
346 virtual bool startElement(const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts) = 0;
347 virtual bool endElement(const QString& namespaceURI, const QString& localName, const QString& qName) = 0;
348 virtual bool characters(const QString& ch) = 0;
349 virtual bool ignorableWhitespace(const QString& ch) = 0;
350 virtual bool processingInstruction(const QString& target, const QString& data) = 0;
351 virtual bool skippedEntity(const QString& name) = 0;
352 virtual QString errorString() const = 0;
353};
354
355class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlErrorHandler
356{
357public:
358 virtual ~QXmlErrorHandler() {}
359 virtual bool warning(const QXmlParseException& exception) = 0;
360 virtual bool error(const QXmlParseException& exception) = 0;
361 virtual bool fatalError(const QXmlParseException& exception) = 0;
362 virtual QString errorString() const = 0;
363};
364
365class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlDTDHandler
366{
367public:
368 virtual ~QXmlDTDHandler() {}
369 virtual bool notationDecl(const QString& name, const QString& publicId, const QString& systemId) = 0;
370 virtual bool unparsedEntityDecl(const QString& name, const QString& publicId, const QString& systemId, const QString& notationName) = 0;
371 virtual QString errorString() const = 0;
372};
373
374class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlEntityResolver
375{
376public:
377 virtual ~QXmlEntityResolver() {}
378 virtual bool resolveEntity(const QString& publicId, const QString& systemId, QXmlInputSource*& ret) = 0;
379 virtual QString errorString() const = 0;
380};
381
382class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlLexicalHandler
383{
384public:
385 virtual ~QXmlLexicalHandler() {}
386 virtual bool startDTD(const QString& name, const QString& publicId, const QString& systemId) = 0;
387 virtual bool endDTD() = 0;
388 virtual bool startEntity(const QString& name) = 0;
389 virtual bool endEntity(const QString& name) = 0;
390 virtual bool startCDATA() = 0;
391 virtual bool endCDATA() = 0;
392 virtual bool comment(const QString& ch) = 0;
393 virtual QString errorString() const = 0;
394};
395
396class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlDeclHandler
397{
398public:
399 virtual ~QXmlDeclHandler() {}
400 virtual bool attributeDecl(const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value) = 0;
401 virtual bool internalEntityDecl(const QString& name, const QString& value) = 0;
402 virtual bool externalEntityDecl(const QString& name, const QString& publicId, const QString& systemId) = 0;
403 virtual QString errorString() const = 0;
404 // ### Conform to SAX by adding elementDecl
405};
406
407class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlDefaultHandler : public QXmlContentHandler,
408 public QXmlErrorHandler,
409 public QXmlDTDHandler,
410 public QXmlEntityResolver,
411 public QXmlLexicalHandler,
412 public QXmlDeclHandler
413{
414public:
415 QXmlDefaultHandler();
416 virtual ~QXmlDefaultHandler();
417
418 void setDocumentLocator(QXmlLocator* locator) override;
419 bool startDocument() override;
420 bool endDocument() override;
421 bool startPrefixMapping(const QString& prefix, const QString& uri) override;
422 bool endPrefixMapping(const QString& prefix) override;
423 bool startElement(const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts) override;
424 bool endElement(const QString& namespaceURI, const QString& localName, const QString& qName) override;
425 bool characters(const QString& ch) override;
426 bool ignorableWhitespace(const QString& ch) override;
427 bool processingInstruction(const QString& target, const QString& data) override;
428 bool skippedEntity(const QString& name) override;
429
430 bool warning(const QXmlParseException& exception) override;
431 bool error(const QXmlParseException& exception) override;
432 bool fatalError(const QXmlParseException& exception) override;
433
434 bool notationDecl(const QString& name, const QString& publicId, const QString& systemId) override;
435 bool unparsedEntityDecl(const QString& name, const QString& publicId, const QString& systemId, const QString& notationName) override;
436
437 bool resolveEntity(const QString& publicId, const QString& systemId, QXmlInputSource*& ret) override;
438
439 bool startDTD(const QString& name, const QString& publicId, const QString& systemId) override;
440 bool endDTD() override;
441 bool startEntity(const QString& name) override;
442 bool endEntity(const QString& name) override;
443 bool startCDATA() override;
444 bool endCDATA() override;
445 bool comment(const QString& ch) override;
446
447 bool attributeDecl(const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value) override;
448 bool internalEntityDecl(const QString& name, const QString& value) override;
449 bool externalEntityDecl(const QString& name, const QString& publicId, const QString& systemId) override;
450
451 QString errorString() const override;
452
453private:
454 QXmlDefaultHandlerPrivate *d;
455 Q_DISABLE_COPY(QXmlDefaultHandler)
456};
457
458// inlines
459
460inline int QXmlAttributes::count() const
461{ return length(); }
462
463QT_WARNING_POP
464
465QT_END_NAMESPACE
466
467#endif // QT_DEPRECATED_SINCE(5, 15)
468
469#endif // QXML_H
470