1 /****************************************************************************
3 ** Copyright (C) 2009 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 QtXmlPatterns module of the Qt Toolkit.
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** No Commercial Usage
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
16 ** GNU Lesser General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU Lesser
18 ** General Public License version 2.1 as published by the Free Software
19 ** Foundation and appearing in the file LICENSE.LGPL included in the
20 ** packaging of this file. Please review the following information to
21 ** ensure the GNU Lesser General Public License version 2.1 requirements
22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 ** In addition, as a special exception, Nokia gives you certain additional
25 ** rights. These rights are described in the Nokia Qt LGPL Exception
26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 ** If you have questions regarding the use of this file, please contact
29 ** Nokia at qt-info@nokia.com.
40 ****************************************************************************/
42 #include "qbuiltintypes_p.h"
43 #include "qcommonvalues_p.h"
45 #include "qyearmonthduration_p.h"
49 using namespace QPatternist
;
51 YearMonthDuration::YearMonthDuration(const bool isPositiveP
,
52 const YearProperty yearsP
,
53 const MonthProperty monthsP
) : AbstractDuration(isPositiveP
),
57 Q_ASSERT(monthsP
< 32 && monthsP
> -32);
60 YearMonthDuration::Ptr
YearMonthDuration::fromLexical(const QString
&lexical
)
62 static const CaptureTable
captureTable(
63 /* The extra paranthesis is a build fix for GCC 3.3. */
64 (QRegExp(QLatin1String(
65 "^\\s*" /* Any preceding whitespace. */
66 "(-)?" /* Sign, if any. */
68 "(?:(\\d+)Y)?" /* The years part. */
69 "(?:(\\d+)M)?" /* The months part. */
70 "\\s*$" /* Any terminating whitespace. */))),
74 YearProperty years
= 0;
75 MonthProperty months
= 0;
78 const AtomicValue::Ptr
err(create(captureTable
, lexical
, &isPos
, &years
,
79 &months
, 0, 0, 0, 0, 0));
81 return err
? err
: YearMonthDuration::Ptr(new YearMonthDuration(isPos
, years
, months
));
84 YearMonthDuration::Ptr
YearMonthDuration::fromComponents(const bool isPositive
,
85 const YearProperty years
,
86 const MonthProperty months
)
88 return YearMonthDuration::Ptr(new YearMonthDuration(isPositive
, years
, months
));
91 QString
YearMonthDuration::stringValue() const
96 retval
.append(QLatin1Char('-'));
98 retval
.append(QLatin1Char('P'));
100 /* When years == 0 and months == 0, we get "P0M", which
101 * is the correct canonical form. */
104 retval
.append(QString::number(m_years
));
105 retval
.append(QLatin1Char('Y'));
109 retval
.append(QString::number(m_months
));
110 retval
.append(QLatin1Char('M'));
117 retval
.append(QString::number(m_months
));
118 retval
.append(QLatin1Char('M'));
121 return QLatin1String("P0M"); /* Ensure the canonical form. */
127 AbstractDuration::Value
YearMonthDuration::value() const
129 return (m_years
* 12 + m_months
) * (m_isPositive
? 1 : -1);
132 Item
YearMonthDuration::fromValue(const Value val
) const
135 return toItem(CommonValues::YearMonthDurationZero
);
138 const Value absValue
= qAbs(val
);
139 return toItem(YearMonthDuration::fromComponents(val
>= 0,
145 ItemType::Ptr
YearMonthDuration::type() const
147 return BuiltinTypes::xsYearMonthDuration
;
150 YearProperty
YearMonthDuration::years() const
155 MonthProperty
YearMonthDuration::months() const
160 DayCountProperty
YearMonthDuration::days() const
165 HourProperty
YearMonthDuration::hours() const
170 MinuteProperty
YearMonthDuration::minutes() const
175 SecondProperty
YearMonthDuration::seconds() const
180 MSecondProperty
YearMonthDuration::mseconds() const