27#include <QSequentialIterable>
28#include <QtCore/QDateTime>
31 bool autoescape)
const
39 for (
auto it = iter.begin(); it != iter.end(); ++it) {
46 if ((it + 1) != iter.end()) {
55 bool autoescape)
const
62 if (input.
userType() == qMetaTypeId<SafeString>()
63 || input.
userType() == qMetaTypeId<QString>())
71 bool autoescape)
const
75 || (input.
userType() == qMetaTypeId<QDateTime>()))
81 else if (input.
userType() == qMetaTypeId<SafeString>()
82 || input.
userType() == qMetaTypeId<QString>())
91 return size == argInt;
95 bool autoescape)
const
105 if (iter.size() == 0)
108 return *iter.begin();
112 bool autoescape)
const
122 if (iter.size() == 0)
125 return *(iter.end() - 1);
129 bool autoescape)
const
137 auto varList = input.
value<QVariantList>();
139 if (varList.isEmpty())
143 auto rnd = rand() % varList.size();
144 return varList.at(rnd);
148 bool autoescape)
const
152 auto splitterIndex = argString.get().indexOf(
QLatin1Char(
':'));
157 if (splitterIndex >= 0) {
158 auto left = argString.get().left(splitterIndex).get().toInt();
159 auto right = argString.get().right(splitterIndex).get().toInt();
161 right = inputString.
size() + right;
163 return inputString.
mid(left, right);
171 bool autoescape)
const
175 if (_input.
userType() == qMetaTypeId<QVariantList>())
178 return _input.
value<QVariantList>();
182 if (input.userType() == qMetaTypeId<int>()) {
186 if (input.userType() == qMetaTypeId<SafeString>()
187 || input.userType() == qMetaTypeId<QString>()) {
190 for (
const auto &var : parts) {
200 bool autoescape)
const
207 return markSafe(processList(input.
value<QVariantList>(), 1, autoescape));
210SafeString UnorderedListFilter::processList(
const QVariantList &list,
int tabs,
211 bool autoescape)
const
214 for (
auto i = 0; i < tabs; ++i)
219 auto listSize = list.
size();
220 while (i < listSize) {
221 auto titleObject = list.at(i);
226 if (titleObject.userType() == qMetaTypeId<QVariantList>()) {
227 sublistItem = titleObject;
229 }
else if (i < listSize - 1) {
230 auto nextItem = list.at(i + 1);
231 if (nextItem.userType() == qMetaTypeId<QVariantList>()) {
232 sublistItem = nextItem;
237 sublist = processList(sublistItem.
value<QVariantList>(), tabs + 1,
239 sublist = QStringLiteral(
"\n%1<ul>\n%2\n%3</ul>\n%4")
240 .
arg(indent, sublist, indent, indent);
242 output.
append(QStringLiteral(
"%1<li>%2%3</li>")
254 bool operator()(
const std::pair<QVariant, QVariant> &lp,
255 const std::pair<QVariant, QVariant> &rp)
const
257 const auto l = lp.first;
258 const auto r = rp.first;
259 switch (l.userType()) {
261 return (r.isValid());
263 return l.value<
int>() < r.value<
int>();
265 return l.value<uint>() < r.value<uint>();
267 return l.value<
long long>() < r.value<
long long>();
269 return l.value<
unsigned long long>() < r.value<
unsigned long long>();
271 return l.value<
float>() < r.value<
float>();
273 return l.value<
double>() < r.value<
double>();
275 return l.toChar() < r.toChar();
277 return l.toDate() < r.toDate();
279 return l.toTime() < r.toTime();
281 return l.toDateTime() < r.toDateTime();
285 if (l.userType() == qMetaTypeId<Cutelee::SafeString>()) {
286 if (r.userType() == qMetaTypeId<Cutelee::SafeString>()) {
289 }
else if (r.userType() == qMetaTypeId<QString>()) {
292 }
else if (r.userType() == qMetaTypeId<Cutelee::SafeString>()) {
293 if (l.userType() == qMetaTypeId<QString>()) {
296 }
else if (l.userType() == qMetaTypeId<QString>()) {
297 if (r.userType() == qMetaTypeId<QString>()) {
298 return l.toString() < r.toString();
307 bool autoescape)
const
316 for (
const QVariant &item : inList) {
324 const auto lookups = v.
lookups();
325 Q_FOREACH (
const QString &lookup, lookups) {
326 var = MetaType::lookup(var, lookup);
333 std::stable_sort(keyList.
begin(), keyList.
end(), lt);
335 QVariantList outList;
337 const auto end = keyList.
constEnd();
338 for (; it != end; ++it) {
339 outList << it->second;
SafeString conditionalEscape(const SafeString &input) const
A QString wrapper class for containing whether a string is safe or needs to be escaped.
const NestedString & get() const
A container for static variables defined in Templates.
QStringList lookups() const
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
Cutelee::SafeString getSafeString(const QVariant &input)
Cutelee::SafeString markSafe(const Cutelee::SafeString &input)
qint64 currentMSecsSinceEpoch()
void append(QList< T > &&value)
QList< T >::iterator begin()
QList< T >::const_iterator constBegin() const const
QList< T >::const_iterator constEnd() const const
QList< T >::iterator end()
void push_back(QList< T >::parameter_type value)
qsizetype size() const const
QString & append(QChar ch)
QString arg(Args &&... args) const const
const QChar at(qsizetype position) const const
bool isEmpty() const const
QString mid(qsizetype position, qsizetype n) &&
qsizetype size() const const
QStringList split(QChar sep, Qt::SplitBehavior behavior, Qt::CaseSensitivity cs) const const
int toInt(bool *ok, int base) const const
QString join(QChar separator) const const
bool canConvert() const const
bool isValid() const const
QString toString() const const
int userType() const const
Utility functions used throughout Cutelee.