2
This file is part of the Grantlee template system.
4
Copyright (c) 2009,2010 Stephen Kelly <steveire@gmail.com>
6
This library is free software; you can redistribute it and/or
7
modify it under the terms of the GNU Lesser General Public
8
License as published by the Free Software Foundation; either version
9
2 of the Licence, or (at your option) any later version.
11
This library is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
Library General Public License for more details.
16
You should have received a copy of the GNU Lesser General Public
17
License along with this library. If not, see <http://www.gnu.org/licenses/>.
23
QString Grantlee::unescapeStringLiteral( const QString &input )
25
return input.mid( 1, input.size() - 2 )
26
.replace( "\\\'", QChar( '\'' ) )
27
.replace( "\\\"", QChar( '"' ) )
28
.replace( "\\\\", QChar( '\\' ) );
31
bool Grantlee::variantIsTrue( const QVariant &variant )
34
if ( !variant.isValid() )
36
switch ( variant.userType() ) {
37
case QVariant::Bool: {
38
return variant.toBool();
41
return ( variant.toInt() > 0 );
43
case QVariant::Double: {
44
return ( variant.toDouble() > 0 );
46
case QMetaType::QObjectStar: {
47
QObject *obj = variant.value<QObject *>();
51
if ( obj->property( "__true__" ).isValid() ) {
52
return obj->property( "__true__" ).toBool();
56
case QVariant::List: {
57
return ( variant.toList().size() > 0 );
59
case QVariant::Hash: {
60
return ( variant.toHash().size() > 0 );
64
Grantlee::SafeString str = getSafeString( variant );
65
return !str.get().isEmpty();
68
QVariantList Grantlee::variantToList( const QVariant &var )
72
return QVariantList();
74
if ( var.type() == QVariant::List ) {
78
if ( var.type() == QVariant::Hash ) {
79
QVariantHash varHash = var.toHash();
82
QVariantHash::const_iterator it = varHash.constBegin();
83
for ( ; it != varHash.constEnd(); ++it )
89
if ( var.userType() == QMetaType::QObjectStar ) {
90
QObject *obj = var.value<QObject*>();
91
if ( obj->property( "__list__" ).isValid() ) {
92
return obj->property( "__list__" ).toList();
95
return QVariantList() << var;
97
return QVariantList();
100
Grantlee::SafeString Grantlee::markSafe( const Grantlee::SafeString &input )
102
Grantlee::SafeString sret = input;
103
sret.setSafety( Grantlee::SafeString::IsSafe );
107
Grantlee::SafeString Grantlee::markForEscaping( const Grantlee::SafeString &input )
109
Grantlee::SafeString temp = input;
110
if ( input.isSafe() || input.needsEscape() )
113
temp.setNeedsEscape( true );
117
Grantlee::SafeString Grantlee::getSafeString( const QVariant &input )
119
if ( input.userType() == qMetaTypeId<Grantlee::SafeString>() ) {
120
return input.value<Grantlee::SafeString>();
122
return input.toString();
126
bool Grantlee::isSafeString( const QVariant &input )
128
int type = input.userType();
129
return (( type == qMetaTypeId<Grantlee::SafeString>() )
130
|| type == QVariant::String );
133
bool Grantlee::supportedOutputType( const QVariant &input )
135
QList<int> primitives;
136
primitives << qMetaTypeId<Grantlee::SafeString>()
140
<< QVariant::DateTime;
141
return primitives.contains( input.userType() );
145
bool Grantlee::equals( const QVariant &lhs, const QVariant &rhs )
148
// QVariant doesn't use operator== to compare its held data, so we do it manually instead for SafeString.
150
if ( lhs.userType() == qMetaTypeId<Grantlee::SafeString>() ) {
151
if ( rhs.userType() == qMetaTypeId<Grantlee::SafeString>() ) {
152
equal = ( lhs.value<Grantlee::SafeString>() == rhs.value<Grantlee::SafeString>() );
153
} else if ( rhs.userType() == QVariant::String ) {
154
equal = ( lhs.value<Grantlee::SafeString>() == rhs.toString() );
156
} else if ( rhs.userType() == qMetaTypeId<Grantlee::SafeString>() && lhs.userType() == QVariant::String ) {
157
equal = ( rhs.value<Grantlee::SafeString>() == lhs.toString() );
159
equal = (( lhs == rhs ) && ( lhs.userType() == rhs.userType() ) );
164
Grantlee::SafeString Grantlee::toString( const QVariantList &list )
166
QString output( '[' );
167
QVariantList::const_iterator it = list.constBegin();
168
const QVariantList::const_iterator end = list.constEnd();
169
while ( it != end ) {
171
if ( isSafeString( item ) ) {
172
output.append( "u\'" );
173
output.append( getSafeString( item ) );
174
output.append( '\'' );
175
if (( it + 1 ) != end )
176
output.append( ", " );
178
if ( item.type() == QVariant::List ) {
179
output.append( toString( item.toList() ) );
180
output.append( ", " );
185
return output.append( ']' );