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

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 "logic.h"
0011 
0012 #include "util.h"
0013 
0014 QVariant DefaultFilter::doFilter(const QVariant &input, const QVariant &argument, bool autoescape) const
0015 {
0016     Q_UNUSED(autoescape)
0017     if (!input.isValid() || getSafeString(input).get().isEmpty())
0018         return argument;
0019     return getSafeString(input);
0020 }
0021 
0022 QVariant DefaultIfNoneFilter::doFilter(const QVariant &input, const QVariant &argument, bool autoescape) const
0023 {
0024     Q_UNUSED(autoescape)
0025     if (!input.isValid())
0026         return argument;
0027     return getSafeString(input);
0028 }
0029 
0030 QVariant DivisibleByFilter::doFilter(const QVariant &input, const QVariant &argument, bool autoescape) const
0031 {
0032     Q_UNUSED(autoescape)
0033     return (getSafeString(input).get().toInt() % QVariant(argument).value<int>() == 0) ? QStringLiteral("true") : QString();
0034 }
0035 
0036 QVariant YesNoFilter::doFilter(const QVariant &input, const QVariant &argument, bool autoescape) const
0037 {
0038     Q_UNUSED(autoescape)
0039     auto arg = getSafeString(argument);
0040     QString yes;
0041     QString no;
0042     QString maybe;
0043     if (arg.get().isEmpty()) {
0044         yes = QStringLiteral("yes");
0045         no = QStringLiteral("no");
0046         maybe = QStringLiteral("maybe");
0047     } else {
0048         auto argList = arg.get().split(QLatin1Char(','));
0049         auto numArgs = argList.size();
0050         if ((numArgs < 2) || (numArgs > 3)) {
0051             return input.value<QString>();
0052         }
0053         if (numArgs == 2) {
0054             yes = argList.first();
0055             no = argList.at(1);
0056             maybe = argList.at(1);
0057         } else if (numArgs == 3) {
0058             yes = argList.first();
0059             no = argList.at(1);
0060             maybe = argList.at(2);
0061         }
0062     }
0063     if (!input.isValid())
0064         return maybe;
0065     if (!getSafeString(input).get().isEmpty())
0066         return yes;
0067     return no;
0068 }