23#include "abstractlocalizer.h"
26#include "metaenumvariable_p.h"
30#include <QtCore/QMetaEnum>
31#include <QtCore/QStringList>
33#include <QJsonDocument>
45 VariablePrivate(
Variable *variable) : q_ptr(variable), m_localize(
false) {}
70 d_ptr->m_varString = other.d_ptr->m_varString;
71 d_ptr->m_literal = other.d_ptr->m_literal;
72 d_ptr->m_lookups = other.d_ptr->m_lookups;
73 d_ptr->m_localize = other.d_ptr->m_localize;
87 localVar = var.
mid(2, var.
size() - 3);
93 QStringLiteral(
"Variable may not end with a dot: %1").arg(localVar));
96 auto processedNumber =
false;
99 if (processedNumber) {
100 d->m_literal = intResult;
102 const auto doubleResult
104 if (processedNumber) {
105 d->m_literal = doubleResult;
109 if (!processedNumber) {
119 if (localVar.contains(QStringLiteral(
"._"))
125 "Variables and attributes may not begin with underscores: %1")
136 return !d->m_varString.isEmpty();
142 return !d->m_literal.isNull();
150 return d->m_localize;
168 static const QMetaObject *_smo() {
return &QObject::staticMetaObject; }
175 if (!d->m_lookups.isEmpty()) {
177 if (d->m_lookups.at(i) == QStringLiteral(
"Qt")) {
179 if (d->m_lookups.size() <= i)
182 const auto nextPart = d->m_lookups.at(i);
185 static auto globalMetaObject = StaticQtMetaObject::_smo();
187 auto breakout =
false;
188 for (
auto j = 0; j < globalMetaObject->enumeratorCount(); ++j) {
189 const auto me = globalMetaObject->enumerator(j);
192 const MetaEnumVariable mev(me);
197 for (
auto k = 0; k < me.keyCount(); ++k) {
199 const MetaEnumVariable mev(me, k);
212 var = c->
lookup(d->m_lookups.at(i++));
215 if (jsonDoc.isArray()) {
216 var = jsonDoc.array().toVariantList();
217 }
else if (jsonDoc.isObject()) {
218 var = jsonDoc.object().toVariantHash();
225 switch(jsonVal.type()) {
237 var = jsonVal.toVariant();
248 while (i < d->m_lookups.size()) {
249 var = MetaType::lookup(var, d->m_lookups.at(i++));
The Context class holds the context to render a Template with.
std::shared_ptr< AbstractLocalizer > localizer() const
virtual QVariant lookup(const QString &str) const
An exception for use when implementing template tags.
A container for static variables defined in Templates.
QStringList lookups() const
QVariant resolve(Context *c) const
bool isTrue(Context *c) const
Variable & operator=(const Variable &other)
The Cutelee namespace holds all public Cutelee API.
QString unescapeStringLiteral(const QString &input)
bool isSafeString(const QVariant &input)
Cutelee::SafeString getSafeString(const QVariant &input)
Cutelee::SafeString markSafe(const Cutelee::SafeString &input)
bool variantIsTrue(const QVariant &variant)
QVariantList toVariantList() const const
QVariantHash toVariantHash() const const
double toDouble(QStringView s, bool *ok) const const
int toInt(QStringView s, bool *ok) const const
bool endsWith(QChar c, Qt::CaseSensitivity cs) const const
QString mid(qsizetype position, qsizetype n) &&
qsizetype size() const const
bool startsWith(QChar c, Qt::CaseSensitivity cs) const const
QVariant fromValue(T &&value)
bool isValid() const const
bool toBool() const const
double toDouble(bool *ok) const const
QJsonArray toJsonArray() const const
QJsonDocument toJsonDocument() const const
QJsonObject toJsonObject() const const
QJsonValue toJsonValue() const const
QString toString() const const
int userType() const const
Utility functions used throughout Cutelee.