Coverage Report

Created: 2025-12-31 07:23

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/qtbase/src/xml/sax/qxml.h
Line
Count
Source
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
73
QT_BEGIN_NAMESPACE
74
75
QT_WARNING_PUSH
76
QT_WARNING_DISABLE_DEPRECATED
77
78
class QXmlNamespaceSupport;
79
class QXmlAttributes;
80
class QXmlContentHandler;
81
class QXmlDefaultHandler;
82
class QXmlDTDHandler;
83
class QXmlEntityResolver;
84
class QXmlErrorHandler;
85
class QXmlLexicalHandler;
86
class QXmlDeclHandler;
87
class QXmlInputSource;
88
class QXmlLocator;
89
class QXmlNamespaceSupport;
90
class QXmlParseException;
91
92
class QXmlReader;
93
class QXmlSimpleReader;
94
95
class QXmlSimpleReaderPrivate;
96
class QXmlNamespaceSupportPrivate;
97
class QXmlAttributesPrivate;
98
class QXmlInputSourcePrivate;
99
class QXmlParseExceptionPrivate;
100
class QXmlLocatorPrivate;
101
class QXmlDefaultHandlerPrivate;
102
103
//
104
// SAX Namespace Support
105
//
106
107
class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlNamespaceSupport
108
{
109
public:
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
126
private:
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.
143
class Q_XML_EXPORT QXmlAttributes
144
{
145
public:
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
0
    {
156
0
        qSwap(attList, other.attList);
157
0
        qSwap(d, other.d);
158
0
    }
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
179
private:
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
190
Q_DECLARE_TYPEINFO(QXmlAttributes::Attribute, Q_MOVABLE_TYPE);
191
Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QXmlAttributes)
192
193
//
194
// SAX Input Source
195
//
196
197
class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlInputSource
198
{
199
public:
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
214
protected:
215
    virtual QString fromRawData(const QByteArray &data, bool beginning = false);
216
217
private:
218
    void init();
219
    QXmlInputSourcePrivate *d;
220
};
221
222
//
223
// SAX Exception Classes
224
//
225
226
class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlParseException
227
{
228
public:
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
240
private:
241
    QScopedPointer<QXmlParseExceptionPrivate> d;
242
};
243
244
245
//
246
// XML Reader
247
//
248
249
class QT_DEPRECATED_VERSION_X(5, 15, "Use QXmlStreamReader") Q_XML_EXPORT QXmlReader
250
{
251
public:
252
0
    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
275
class QT_DEPRECATED_VERSION_X(5, 15, "Use QXmlStreamReader") Q_XML_EXPORT QXmlSimpleReader
276
    : public QXmlReader
277
{
278
public:
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
308
private:
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
321
class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlLocator
322
{
323
public:
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
337
class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlContentHandler
338
{
339
public:
340
0
    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
355
class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlErrorHandler
356
{
357
public:
358
0
    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
365
class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlDTDHandler
366
{
367
public:
368
0
    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
374
class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlEntityResolver
375
{
376
public:
377
0
    virtual ~QXmlEntityResolver() {}
378
    virtual bool resolveEntity(const QString& publicId, const QString& systemId, QXmlInputSource*& ret) = 0;
379
    virtual QString errorString() const = 0;
380
};
381
382
class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlLexicalHandler
383
{
384
public:
385
0
    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
396
class QT_DEPRECATED_VERSION(5, 15) Q_XML_EXPORT QXmlDeclHandler
397
{
398
public:
399
0
    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
407
class 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
{
414
public:
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
453
private:
454
    QXmlDefaultHandlerPrivate *d;
455
    Q_DISABLE_COPY(QXmlDefaultHandler)
456
};
457
458
// inlines
459
460
inline int QXmlAttributes::count() const
461
0
{ return length(); }
462
463
QT_WARNING_POP
464
465
QT_END_NAMESPACE
466
467
#endif // QT_DEPRECATED_SINCE(5, 15)
468
469
#endif // QXML_H