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#include "qxsdschematypesfactory_p.h"
41
42#include "qbasictypesfactory_p.h"
43#include "qbuiltintypes_p.h"
44#include "qderivedinteger_p.h"
45#include "qderivedstring_p.h"
46#include "qcommonnamespaces_p.h"
47#include "qxsdschematoken_p.h"
48#include "qxsdsimpletype_p.h"
49
50QT_BEGIN_NAMESPACE
51
52using namespace QPatternist;
53
54XsdSchemaTypesFactory::XsdSchemaTypesFactory(const NamePool::Ptr &namePool)
55 : m_namePool(namePool)
56{
57 m_types.reserve(asize: 3);
58
59 const XsdFacet::Ptr whiteSpaceFacet(new XsdFacet());
60 whiteSpaceFacet->setType(XsdFacet::WhiteSpace);
61 whiteSpaceFacet->setFixed(true);
62 whiteSpaceFacet->setValue(DerivedString<TypeString>::fromLexical(np: m_namePool, lexical: XsdSchemaToken::toString(token: XsdSchemaToken::Collapse)));
63
64 const XsdFacet::Ptr minLengthFacet(new XsdFacet());
65 minLengthFacet->setType(XsdFacet::MinimumLength);
66 minLengthFacet->setValue(DerivedInteger<TypeNonNegativeInteger>::fromLexical(np: namePool, strNumeric: QLatin1String("1")));
67
68 XsdFacet::Hash facets;
69 facets.insert(akey: whiteSpaceFacet->type(), avalue: whiteSpaceFacet);
70 facets.insert(akey: minLengthFacet->type(), avalue: minLengthFacet);
71
72 {
73 const QXmlName typeName = m_namePool->allocateQName(uri: CommonNamespaces::WXS, localName: QLatin1String("NMTOKENS"));
74 const XsdSimpleType::Ptr type(new XsdSimpleType());
75 type->setName(typeName);
76 type->setWxsSuperType(BuiltinTypes::xsAnySimpleType);
77 type->setCategory(XsdSimpleType::SimpleTypeList);
78 type->setItemType(BuiltinTypes::xsNMTOKEN);
79 type->setDerivationMethod(XsdSimpleType::DerivationRestriction);
80 type->setFacets(facets);
81 m_types.insert(akey: typeName, avalue: type);
82 }
83 {
84 const QXmlName typeName = m_namePool->allocateQName(uri: CommonNamespaces::WXS, localName: QLatin1String("IDREFS"));
85 const XsdSimpleType::Ptr type(new XsdSimpleType());
86 type->setName(typeName);
87 type->setWxsSuperType(BuiltinTypes::xsAnySimpleType);
88 type->setCategory(XsdSimpleType::SimpleTypeList);
89 type->setItemType(BuiltinTypes::xsIDREF);
90 type->setDerivationMethod(XsdSimpleType::DerivationRestriction);
91 type->setFacets(facets);
92 m_types.insert(akey: typeName, avalue: type);
93 }
94 {
95 const QXmlName typeName = m_namePool->allocateQName(uri: CommonNamespaces::WXS, localName: QLatin1String("ENTITIES"));
96 const XsdSimpleType::Ptr type(new XsdSimpleType());
97 type->setName(typeName);
98 type->setWxsSuperType(BuiltinTypes::xsAnySimpleType);
99 type->setCategory(XsdSimpleType::SimpleTypeList);
100 type->setItemType(BuiltinTypes::xsENTITY);
101 type->setDerivationMethod(XsdSimpleType::DerivationRestriction);
102 type->setFacets(facets);
103 m_types.insert(akey: typeName, avalue: type);
104 }
105}
106
107SchemaType::Ptr XsdSchemaTypesFactory::createSchemaType(const QXmlName name) const
108{
109 if (m_types.contains(akey: name)) {
110 return m_types.value(akey: name);
111 } else {
112 if (!m_basicTypesFactory)
113 m_basicTypesFactory = BasicTypesFactory::self(np: m_namePool);
114
115 return m_basicTypesFactory->createSchemaType(name);
116 }
117}
118
119SchemaType::Hash XsdSchemaTypesFactory::types() const
120{
121 return m_types;
122}
123
124QT_END_NAMESPACE
125

source code of qtxmlpatterns/src/xmlpatterns/schema/qxsdschematypesfactory.cpp