File indexing completed on 2025-02-09 04:28:32

0001 /*
0002   This file is part of the KTextTemplate library
0003 
0004   SPDX-FileCopyrightText: 2009, 2010 Stephen Kelly <steveire@gmail.com>
0005 
0006   SPDX-License-Identifier: LGPL-2.1-or-later
0007 
0008 */
0009 
0010 #include "integers.h"
0011 
0012 #include "util.h"
0013 
0014 QVariant AddFilter::doFilter(const QVariant &input, const QVariant &argument, bool autoescape) const
0015 {
0016     Q_UNUSED(autoescape)
0017 
0018     if (isSafeString(input)) {
0019         if (isSafeString(argument))
0020             return getSafeString(input) + getSafeString(argument);
0021         return input;
0022     }
0023 
0024     if (input.userType() == qMetaTypeId<QVariantList>()) {
0025         if (argument.userType() == qMetaTypeId<QVariantList>())
0026             return input.value<QVariantList>() + argument.value<QVariantList>();
0027         return input;
0028     }
0029 
0030     if (input.userType() == qMetaTypeId<QStringList>()) {
0031         if (argument.userType() == QMetaType::QStringList)
0032             return input.value<QStringList>() + argument.value<QStringList>();
0033         return input;
0034     }
0035 
0036     if (input.userType() == qMetaTypeId<int>()) {
0037         if (argument.userType() == qMetaTypeId<int>())
0038             return input.value<int>() + argument.value<int>();
0039         return input;
0040     }
0041 
0042     if (input.userType() == qMetaTypeId<uint>()) {
0043         if (argument.userType() == qMetaTypeId<uint>())
0044             return input.value<uint>() + argument.value<uint>();
0045         return input;
0046     }
0047 
0048     if (input.canConvert<double>()) {
0049         if (argument.canConvert<double>())
0050             return input.value<double>() + argument.value<double>();
0051         return input;
0052     }
0053 
0054     if (input.userType() == qMetaTypeId<long long>()) {
0055         if (argument.userType() == qMetaTypeId<long long>())
0056             return input.value<long long>() + argument.value<long long>();
0057         return input;
0058     }
0059 
0060     if (input.userType() == qMetaTypeId<unsigned long long>()) {
0061         if (input.userType() == qMetaTypeId<unsigned long long>())
0062             return input.value<unsigned long long>() + argument.value<unsigned long long>();
0063         return input;
0064     }
0065     return input;
0066 }
0067 
0068 QVariant GetDigitFilter::doFilter(const QVariant &input, const QVariant &argument, bool autoescape) const
0069 {
0070     Q_UNUSED(autoescape)
0071     auto value = getSafeString(input);
0072 
0073     bool ok;
0074     (void)value.get().toInt(&ok);
0075     if (!ok)
0076         return QString();
0077 
0078     if (value.get().size() < 1)
0079         return value;
0080 
0081     auto arg = getSafeString(argument).get().toInt();
0082 
0083     if (value.get().size() < arg)
0084         return value;
0085 
0086     return SafeString(value.get().at(value.get().size() - arg));
0087 }