1 /****************************************************************************
3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
7 ** This file is part of the QtXml module of the Qt Toolkit.
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** GNU Lesser General Public License Usage
11 ** This file may be used under the terms of the GNU Lesser General Public
12 ** License version 2.1 as published by the Free Software Foundation and
13 ** appearing in the file LICENSE.LGPL included in the packaging of this
14 ** file. Please review the following information to ensure the GNU Lesser
15 ** General Public License version 2.1 requirements will be met:
16 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
18 ** In addition, as a special exception, Nokia gives you certain additional
19 ** rights. These rights are described in the Nokia Qt LGPL Exception
20 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
22 ** GNU General Public License Usage
23 ** Alternatively, this file may be used under the terms of the GNU General
24 ** Public License version 3.0 as published by the Free Software Foundation
25 ** and appearing in the file LICENSE.GPL included in the packaging of this
26 ** file. Please review the following information to ensure the GNU General
27 ** Public License version 3.0 requirements will be met:
28 ** http://www.gnu.org/copyleft/gpl.html.
31 ** Alternatively, this file may be used in accordance with the terms and
32 ** conditions contained in a signed written agreement between you and Nokia.
40 ****************************************************************************/
45 #include <QtCore/qtextstream.h>
46 #include <QtCore/qfile.h>
47 #include <QtCore/qstring.h>
48 #include <QtCore/qstringlist.h>
49 #include <QtCore/qlist.h>
50 #include <QtCore/qscopedpointer.h>
58 class QXmlNamespaceSupport;
60 class QXmlContentHandler;
61 class QXmlDefaultHandler;
63 class QXmlEntityResolver;
64 class QXmlErrorHandler;
65 class QXmlLexicalHandler;
66 class QXmlDeclHandler;
67 class QXmlInputSource;
69 class QXmlNamespaceSupport;
70 class QXmlParseException;
73 class QXmlSimpleReader;
75 class QXmlSimpleReaderPrivate;
76 class QXmlNamespaceSupportPrivate;
77 class QXmlAttributesPrivate;
78 class QXmlInputSourcePrivate;
79 class QXmlParseExceptionPrivate;
80 class QXmlLocatorPrivate;
81 class QXmlDefaultHandlerPrivate;
85 // SAX Namespace Support
88 class Q_XML_EXPORT QXmlNamespaceSupport
91 QXmlNamespaceSupport();
92 ~QXmlNamespaceSupport();
94 void setPrefix(const QString&, const QString&);
96 QString prefix(const QString&) const;
97 QString uri(const QString&) const;
98 void splitName(const QString&, QString&, QString&) const;
99 void processName(const QString&, bool, QString&, QString&) const;
100 QStringList prefixes() const;
101 QStringList prefixes(const QString&) const;
108 QXmlNamespaceSupportPrivate *d;
110 friend class QXmlSimpleReaderPrivate;
111 Q_DISABLE_COPY(QXmlNamespaceSupport)
119 class Q_XML_EXPORT QXmlAttributes
123 virtual ~QXmlAttributes() {}
125 int index(const QString& qName) const;
126 int index(const QLatin1String& qName) const;
127 int index(const QString& uri, const QString& localPart) const;
130 QString localName(int index) const;
131 QString qName(int index) const;
132 QString uri(int index) const;
133 QString type(int index) const;
134 QString type(const QString& qName) const;
135 QString type(const QString& uri, const QString& localName) const;
136 QString value(int index) const;
137 QString value(const QString& qName) const;
138 QString value(const QLatin1String& qName) const;
139 QString value(const QString& uri, const QString& localName) const;
142 void append(const QString &qName, const QString &uri, const QString &localPart, const QString &value);
146 QString qname, uri, localname, value;
148 typedef QList<Attribute> AttributeList;
149 AttributeList attList;
151 QXmlAttributesPrivate *d;
158 class Q_XML_EXPORT QXmlInputSource
162 QXmlInputSource(QIODevice *dev);
163 virtual ~QXmlInputSource();
165 virtual void setData(const QString& dat);
166 virtual void setData(const QByteArray& dat);
167 virtual void fetchData();
168 virtual QString data() const;
169 virtual QChar next();
170 virtual void reset();
172 static const ushort EndOfData;
173 static const ushort EndOfDocument;
176 virtual QString fromRawData(const QByteArray &data, bool beginning = false);
180 QXmlInputSourcePrivate *d;
184 // SAX Exception Classes
187 class Q_XML_EXPORT QXmlParseException
190 explicit QXmlParseException(const QString &name = QString(), int c = -1, int l = -1,
191 const QString &p = QString(), const QString &s = QString());
192 QXmlParseException(const QXmlParseException &other);
193 ~QXmlParseException();
195 int columnNumber() const;
196 int lineNumber() const;
197 QString publicId() const;
198 QString systemId() const;
199 QString message() const;
202 QScopedPointer<QXmlParseExceptionPrivate> d;
210 class Q_XML_EXPORT QXmlReader
213 virtual ~QXmlReader() {}
214 virtual bool feature(const QString& name, bool *ok = 0) const = 0;
215 virtual void setFeature(const QString& name, bool value) = 0;
216 virtual bool hasFeature(const QString& name) const = 0;
217 virtual void* property(const QString& name, bool *ok = 0) const = 0;
218 virtual void setProperty(const QString& name, void* value) = 0;
219 virtual bool hasProperty(const QString& name) const = 0;
220 virtual void setEntityResolver(QXmlEntityResolver* handler) = 0;
221 virtual QXmlEntityResolver* entityResolver() const = 0;
222 virtual void setDTDHandler(QXmlDTDHandler* handler) = 0;
223 virtual QXmlDTDHandler* DTDHandler() const = 0;
224 virtual void setContentHandler(QXmlContentHandler* handler) = 0;
225 virtual QXmlContentHandler* contentHandler() const = 0;
226 virtual void setErrorHandler(QXmlErrorHandler* handler) = 0;
227 virtual QXmlErrorHandler* errorHandler() const = 0;
228 virtual void setLexicalHandler(QXmlLexicalHandler* handler) = 0;
229 virtual QXmlLexicalHandler* lexicalHandler() const = 0;
230 virtual void setDeclHandler(QXmlDeclHandler* handler) = 0;
231 virtual QXmlDeclHandler* declHandler() const = 0;
232 virtual bool parse(const QXmlInputSource& input) = 0;
233 virtual bool parse(const QXmlInputSource* input) = 0;
236 class Q_XML_EXPORT QXmlSimpleReader : public QXmlReader
240 virtual ~QXmlSimpleReader();
242 bool feature(const QString& name, bool *ok = 0) const;
243 void setFeature(const QString& name, bool value);
244 bool hasFeature(const QString& name) const;
246 void* property(const QString& name, bool *ok = 0) const;
247 void setProperty(const QString& name, void* value);
248 bool hasProperty(const QString& name) const;
250 void setEntityResolver(QXmlEntityResolver* handler);
251 QXmlEntityResolver* entityResolver() const;
252 void setDTDHandler(QXmlDTDHandler* handler);
253 QXmlDTDHandler* DTDHandler() const;
254 void setContentHandler(QXmlContentHandler* handler);
255 QXmlContentHandler* contentHandler() const;
256 void setErrorHandler(QXmlErrorHandler* handler);
257 QXmlErrorHandler* errorHandler() const;
258 void setLexicalHandler(QXmlLexicalHandler* handler);
259 QXmlLexicalHandler* lexicalHandler() const;
260 void setDeclHandler(QXmlDeclHandler* handler);
261 QXmlDeclHandler* declHandler() const;
263 bool parse(const QXmlInputSource& input);
264 bool parse(const QXmlInputSource* input);
265 virtual bool parse(const QXmlInputSource* input, bool incremental);
266 virtual bool parseContinue();
269 Q_DISABLE_COPY(QXmlSimpleReader)
270 Q_DECLARE_PRIVATE(QXmlSimpleReader)
271 QScopedPointer<QXmlSimpleReaderPrivate> d_ptr;
273 friend class QXmlSimpleReaderLocator;
280 class Q_XML_EXPORT QXmlLocator
284 virtual ~QXmlLocator();
286 virtual int columnNumber() const = 0;
287 virtual int lineNumber() const = 0;
288 // QString getPublicId() const
289 // QString getSystemId() const
293 // SAX handler classes
296 class Q_XML_EXPORT QXmlContentHandler
299 virtual ~QXmlContentHandler() {}
300 virtual void setDocumentLocator(QXmlLocator* locator) = 0;
301 virtual bool startDocument() = 0;
302 virtual bool endDocument() = 0;
303 virtual bool startPrefixMapping(const QString& prefix, const QString& uri) = 0;
304 virtual bool endPrefixMapping(const QString& prefix) = 0;
305 virtual bool startElement(const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts) = 0;
306 virtual bool endElement(const QString& namespaceURI, const QString& localName, const QString& qName) = 0;
307 virtual bool characters(const QString& ch) = 0;
308 virtual bool ignorableWhitespace(const QString& ch) = 0;
309 virtual bool processingInstruction(const QString& target, const QString& data) = 0;
310 virtual bool skippedEntity(const QString& name) = 0;
311 virtual QString errorString() const = 0;
314 class Q_XML_EXPORT QXmlErrorHandler
317 virtual ~QXmlErrorHandler() {}
318 virtual bool warning(const QXmlParseException& exception) = 0;
319 virtual bool error(const QXmlParseException& exception) = 0;
320 virtual bool fatalError(const QXmlParseException& exception) = 0;
321 virtual QString errorString() const = 0;
324 class Q_XML_EXPORT QXmlDTDHandler
327 virtual ~QXmlDTDHandler() {}
328 virtual bool notationDecl(const QString& name, const QString& publicId, const QString& systemId) = 0;
329 virtual bool unparsedEntityDecl(const QString& name, const QString& publicId, const QString& systemId, const QString& notationName) = 0;
330 virtual QString errorString() const = 0;
333 class Q_XML_EXPORT QXmlEntityResolver
336 virtual ~QXmlEntityResolver() {}
337 virtual bool resolveEntity(const QString& publicId, const QString& systemId, QXmlInputSource*& ret) = 0;
338 virtual QString errorString() const = 0;
341 class Q_XML_EXPORT QXmlLexicalHandler
344 virtual ~QXmlLexicalHandler() {}
345 virtual bool startDTD(const QString& name, const QString& publicId, const QString& systemId) = 0;
346 virtual bool endDTD() = 0;
347 virtual bool startEntity(const QString& name) = 0;
348 virtual bool endEntity(const QString& name) = 0;
349 virtual bool startCDATA() = 0;
350 virtual bool endCDATA() = 0;
351 virtual bool comment(const QString& ch) = 0;
352 virtual QString errorString() const = 0;
355 class Q_XML_EXPORT QXmlDeclHandler
358 virtual ~QXmlDeclHandler() {}
359 virtual bool attributeDecl(const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value) = 0;
360 virtual bool internalEntityDecl(const QString& name, const QString& value) = 0;
361 virtual bool externalEntityDecl(const QString& name, const QString& publicId, const QString& systemId) = 0;
362 virtual QString errorString() const = 0;
363 // ### Qt 5: Conform to SAX by adding elementDecl
367 class Q_XML_EXPORT QXmlDefaultHandler : public QXmlContentHandler, public QXmlErrorHandler, public QXmlDTDHandler, public QXmlEntityResolver, public QXmlLexicalHandler, public QXmlDeclHandler
370 QXmlDefaultHandler() { }
371 virtual ~QXmlDefaultHandler() { }
373 void setDocumentLocator(QXmlLocator* locator);
374 bool startDocument();
376 bool startPrefixMapping(const QString& prefix, const QString& uri);
377 bool endPrefixMapping(const QString& prefix);
378 bool startElement(const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts);
379 bool endElement(const QString& namespaceURI, const QString& localName, const QString& qName);
380 bool characters(const QString& ch);
381 bool ignorableWhitespace(const QString& ch);
382 bool processingInstruction(const QString& target, const QString& data);
383 bool skippedEntity(const QString& name);
385 bool warning(const QXmlParseException& exception);
386 bool error(const QXmlParseException& exception);
387 bool fatalError(const QXmlParseException& exception);
389 bool notationDecl(const QString& name, const QString& publicId, const QString& systemId);
390 bool unparsedEntityDecl(const QString& name, const QString& publicId, const QString& systemId, const QString& notationName);
392 bool resolveEntity(const QString& publicId, const QString& systemId, QXmlInputSource*& ret);
394 bool startDTD(const QString& name, const QString& publicId, const QString& systemId);
396 bool startEntity(const QString& name);
397 bool endEntity(const QString& name);
400 bool comment(const QString& ch);
402 bool attributeDecl(const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value);
403 bool internalEntityDecl(const QString& name, const QString& value);
404 bool externalEntityDecl(const QString& name, const QString& publicId, const QString& systemId);
406 QString errorString() const;
409 QXmlDefaultHandlerPrivate *d;
410 Q_DISABLE_COPY(QXmlDefaultHandler)
415 inline int QXmlAttributes::count() const