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 QtXmlPatterns 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 QXMLNAME_H
41#define QXMLNAME_H
42
43#include <QtCore/QString>
44#include <QtCore/QMetaType>
45#include <QtXmlPatterns/qtxmlpatternsglobal.h>
46
47QT_BEGIN_NAMESPACE
48
49
50class QXmlName;
51class QXmlNamePool;
52Q_XMLPATTERNS_EXPORT uint qHash(const QXmlName &name);
53
54class Q_XMLPATTERNS_EXPORT QXmlName
55{
56private:
57 enum Constant
58 {
59 LocalNameOffset = 0,
60 LocalNameLength = 12,
61 NamespaceOffset = LocalNameLength,
62 NamespaceLength = 9,
63 PrefixLength = 9,
64 InvalidCode = 1 << 31,
65 NamespaceMask = ((1 << ((NamespaceOffset + NamespaceLength) - NamespaceOffset)) - 1) << NamespaceOffset,
66 LocalNameMask = ((1 << ((LocalNameOffset + LocalNameLength) - LocalNameOffset)) - 1) << LocalNameOffset,
67 PrefixOffset = LocalNameLength + NamespaceLength,
68 PrefixMask = ((1 << ((PrefixOffset + PrefixLength) - PrefixOffset)) - 1) << PrefixOffset,
69 MaximumPrefixes = (PrefixMask >> PrefixOffset) - 1,
70 MaximumLocalNames = (LocalNameMask >> LocalNameOffset) - 1,
71 MaximumNamespaces = (NamespaceMask >> NamespaceOffset) - 1,
72 ExpandedNameMask = LocalNameMask | NamespaceMask,
73 LexicalQNameMask = LocalNameMask | PrefixMask
74 };
75
76public:
77
78 typedef qint16 NamespaceCode;
79 typedef NamespaceCode PrefixCode;
80 typedef NamespaceCode LocalNameCode;
81
82 QXmlName();
83
84 QXmlName(QXmlNamePool &namePool,
85 const QString &localName,
86 const QString &namespaceURI = QString(),
87 const QString &prefix = QString());
88
89 QString namespaceUri(const QXmlNamePool &query) const;
90 QString prefix(const QXmlNamePool &query) const;
91 QString localName(const QXmlNamePool &query) const;
92 QString toClarkName(const QXmlNamePool &query) const;
93 bool operator==(const QXmlName &other) const;
94 bool operator!=(const QXmlName &other) const;
95 QXmlName(const QXmlName &other);
96 QXmlName &operator=(const QXmlName &other);
97 bool isNull() const;
98 static bool isNCName(const QString &candidate);
99 static QXmlName fromClarkName(const QString &clarkName,
100 const QXmlNamePool &namePool);
101
102 /* The members below are internal, not part of the public API, and
103 * unsupported. Using them leads to undefined behavior. */
104 typedef qint64 Code;
105
106 inline QXmlName(const NamespaceCode uri,
107 const LocalNameCode ln,
108 const PrefixCode p = 0);
109 /* The implementation for these functions are in utils/qnamepool_p.h. */
110 inline LocalNameCode localName() const;
111 inline PrefixCode prefix() const;
112 inline bool hasPrefix() const;
113 inline bool hasNamespace() const;
114 inline NamespaceCode namespaceURI() const;
115 inline bool isLexicallyEqual(const QXmlName &other) const;
116 inline void setPrefix(const PrefixCode c);
117 inline void setNamespaceURI(const NamespaceCode c);
118 inline void setLocalName(const LocalNameCode c);
119 inline Code code() const;
120
121 friend Q_XMLPATTERNS_EXPORT uint qHash(const QXmlName &);
122
123private:
124 inline QXmlName(const int c) : m_qNameCode(c)
125 {
126 }
127
128 Code m_qNameCode;
129};
130
131Q_DECLARE_TYPEINFO(QXmlName, Q_MOVABLE_TYPE);
132
133QT_END_NAMESPACE
134
135Q_DECLARE_METATYPE(QXmlName) /* This macro must appear after QT_END_NAMESPACE. */
136
137#endif
138

source code of qtxmlpatterns/src/xmlpatterns/api/qxmlname.h