diff options
Diffstat (limited to 'src/xmlpatterns/type/qbuiltintypes.cpp')
-rw-r--r-- | src/xmlpatterns/type/qbuiltintypes.cpp | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/src/xmlpatterns/type/qbuiltintypes.cpp b/src/xmlpatterns/type/qbuiltintypes.cpp new file mode 100644 index 0000000..7c350ae --- /dev/null +++ b/src/xmlpatterns/type/qbuiltintypes.cpp @@ -0,0 +1,161 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qanyitemtype_p.h" +#include "qderivedinteger_p.h" + +#include "qbuiltinatomictypes_p.h" +#include "qbuiltinnodetype_p.h" +#include "qbuiltintypes_p.h" +#include "qxsltnodetest_p.h" + +/* Included here to avoid the static initialization failure. */ +#include "qatomiccasterlocators.cpp" +#include "qatomiccomparatorlocators.cpp" +#include "qatomicmathematicianlocators.cpp" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +// STATIC DATA +/* Special cases. */ +#define initType(var, cls) const cls::Ptr BuiltinTypes::var(new cls()) +initType(item, AnyItemType); +initType(node, AnyNodeType); +#undef initType + +#define initSType(var, cls) const SchemaType::Ptr BuiltinTypes::var(new cls()) +initSType(xsAnyType, AnyType); +initSType(xsAnySimpleType, AnySimpleType); +initSType(xsUntyped, Untyped); +#undef initSType + +/* The primitive atomic types. */ +#define at(className, varName) const AtomicType::Ptr BuiltinTypes::varName(new className()); +at(AnyAtomicType, xsAnyAtomicType) +at(UntypedAtomicType, xsUntypedAtomic) +at(DateTimeType, xsDateTime) +at(DateType, xsDate) +at(SchemaTimeType, xsTime) +at(DurationType, xsDuration) +at(YearMonthDurationType, xsYearMonthDuration) +at(DayTimeDurationType, xsDayTimeDuration) + +at(NumericType, numeric) +at(DecimalType, xsDecimal) +at(GYearMonthType, xsGYearMonth) +at(GYearType, xsGYear) +at(GMonthDayType, xsGMonthDay) +at(GDayType, xsGDay) +at(GMonthType, xsGMonth) + +at(BooleanType, xsBoolean) +at(Base64BinaryType, xsBase64Binary) +at(AnyURIType, xsAnyURI) + +#define it(className, varName) const ItemType::Ptr BuiltinTypes::varName(new className()); +at(QNameType, xsQName) +at(HexBinaryType, xsHexBinary) +at(FloatType, xsFloat) +at(DoubleType, xsDouble) +#undef it + +const AtomicType::Ptr BuiltinTypes::xsString(new StringType(BuiltinTypes::xsAnyAtomicType, + AtomicCasterLocator::Ptr(new ToStringCasterLocator()))); + +#define dsType(varName, parent) \ + const AtomicType::Ptr BuiltinTypes::xs ## varName \ + (new DerivedStringType<Type ## varName>(BuiltinTypes::parent, \ + AtomicCasterLocator::Ptr(new ToDerivedStringCasterLocator<Type ## varName>()))) + +dsType(NormalizedString, xsString); +dsType(Token, xsNormalizedString); +dsType(Language, xsToken); +dsType(NMTOKEN, xsToken); +dsType(Name, xsToken); +dsType(NCName, xsName); +dsType(ID, xsNCName); +dsType(IDREF, xsNCName); +dsType(ENTITY, xsNCName); +#undef sType + +const AtomicType::Ptr BuiltinTypes::xsInteger(new IntegerType(BuiltinTypes::xsDecimal, + AtomicCasterLocator::Ptr(new ToIntegerCasterLocator()))); + +#define iType(varName, parent) \ + const AtomicType::Ptr BuiltinTypes::xs ## varName \ + (new DerivedIntegerType<Type ## varName>(parent, \ + AtomicCasterLocator::Ptr(new ToDerivedIntegerCasterLocator<Type ## varName>()))) + +/* Initialize derived integers. The order of initialization is significant. */ +iType(NonPositiveInteger, xsInteger); +iType(NegativeInteger, xsNonPositiveInteger); +iType(Long, xsInteger); +iType(Int, xsLong); +iType(Short, xsInt); +iType(Byte, xsShort); +iType(NonNegativeInteger, xsInteger); +iType(UnsignedLong, xsNonNegativeInteger); +iType(UnsignedInt, xsUnsignedLong); +iType(UnsignedShort, xsUnsignedInt); +iType(UnsignedByte, xsUnsignedShort); +iType(PositiveInteger, xsNonNegativeInteger); +#undef iType + +at(NOTATIONType, xsNOTATION) +#undef at + +/* QXmlNodeModelIndex types */ +#define nt(var, enu) const ItemType::Ptr BuiltinTypes::var = \ + ItemType::Ptr(new BuiltinNodeType<QXmlNodeModelIndex::enu>()) + +nt(comment, Comment); +nt(attribute, Attribute); +nt(document, Document); +nt(element, Element); +nt(text, Text); +nt(pi, ProcessingInstruction); +#undef nt + +const ItemType::Ptr BuiltinTypes::xsltNodeTest(new XSLTNodeTest()); + +QT_END_NAMESPACE |