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>()) {
183 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) 190 if (input.userType() == qMetaTypeId<SafeString>()
191 || input.userType() == qMetaTypeId<QString>()) {
193 #if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) 198 for (
const auto &var : parts) {
208 bool autoescape)
const 215 return markSafe(processList(input.
value<QVariantList>(), 1, autoescape));
218 SafeString UnorderedListFilter::processList(
const QVariantList &list,
int tabs,
219 bool autoescape)
const 222 for (
auto i = 0; i < tabs; ++i)
227 auto listSize = list.
size();
228 while (i < listSize) {
229 auto titleObject = list.at(i);
234 if (titleObject.userType() == qMetaTypeId<QVariantList>()) {
235 sublistItem = titleObject;
237 }
else if (i < listSize - 1) {
238 auto nextItem = list.at(i + 1);
239 if (nextItem.userType() == qMetaTypeId<QVariantList>()) {
240 sublistItem = nextItem;
245 sublist = processList(sublistItem.
value<QVariantList>(), tabs + 1,
247 sublist = QStringLiteral(
"\n%1<ul>\n%2\n%3</ul>\n%4")
248 .
arg(indent, sublist, indent, indent);
250 output.
append(QStringLiteral(
"%1<li>%2%3</li>")
262 bool operator()(
const std::pair<QVariant, QVariant> &lp,
263 const std::pair<QVariant, QVariant> &rp)
const 265 const auto l = lp.first;
266 const auto r = rp.first;
267 switch (l.userType()) {
269 return (r.isValid());
271 return l.value<
int>() < r.value<
int>();
273 return l.value<uint>() < r.value<uint>();
275 return l.value<
long long>() < r.value<
long long>();
277 return l.value<
unsigned long long>() < r.value<
unsigned long long>();
279 return l.value<
float>() < r.value<
float>();
281 return l.value<
double>() < r.value<
double>();
283 return l.toChar() < r.toChar();
285 return l.toDate() < r.toDate();
287 return l.toTime() < r.toTime();
289 return l.toDateTime() < r.toDateTime();
293 if (l.userType() == qMetaTypeId<Cutelee::SafeString>()) {
294 if (r.userType() == qMetaTypeId<Cutelee::SafeString>()) {
297 }
else if (r.userType() == qMetaTypeId<QString>()) {
300 }
else if (r.userType() == qMetaTypeId<Cutelee::SafeString>()) {
301 if (l.userType() == qMetaTypeId<QString>()) {
304 }
else if (l.userType() == qMetaTypeId<QString>()) {
305 if (r.userType() == qMetaTypeId<QString>()) {
306 return l.toString() < r.toString();
315 bool autoescape)
const 324 for (
const QVariant &item : inList) {
332 const auto lookups = v.
lookups();
333 Q_FOREACH (
const QString &lookup, lookups) {
334 var = MetaType::lookup(var, lookup);
341 std::stable_sort(keyList.
begin(), keyList.
end(), lt);
343 QVariantList outList;
345 const auto end = keyList.
constEnd();
346 for (; it != end; ++it) {
347 outList << it->second;
bool canConvert(int targetTypeId) const const
QString & append(QChar ch)
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
void push_back(const T &value)
QStringList lookups() const
Cutelee::SafeString markSafe(const Cutelee::SafeString &input)
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
A container for static variables defined in Templates.
QString join(const QString &separator) const const
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
SafeString conditionalEscape(const SafeString &input) const
void append(const T &value)
int toInt(bool *ok, int base) const const
bool isEmpty() const const
QStringList split(const QString &sep, QString::SplitBehavior behavior, Qt::CaseSensitivity cs) const const
Utility functions used throughout Cutelee.
A QString wrapper class for containing whether a string is safe or needs to be escaped.
int userType() const const
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
QString mid(int position, int n) const const
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const const
const QChar at(int position) const const
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
bool isValid() const const
QList::const_iterator constEnd() const const
QString::iterator begin()
QList::const_iterator constBegin() const const
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
bool convert(int targetTypeId)
QString toString() const const
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
QDateTime currentDateTimeUtc()
const NestedString & get() const
QVariant doFilter(const QVariant &input, const QVariant &argument={}, bool autoescape={}) const override
Cutelee::SafeString getSafeString(const QVariant &input)