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#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
169 static const QMetaObject *_smo() {
return &QObject::staticQtMetaObject; }
171 static const QMetaObject *_smo() {
return &QObject::staticMetaObject; }
179 if (!d->m_lookups.isEmpty()) {
181 if (d->m_lookups.at(i) == QStringLiteral(
"Qt")) {
183 if (d->m_lookups.size() <= i)
186 const auto nextPart = d->m_lookups.at(i);
189 static auto globalMetaObject = StaticQtMetaObject::_smo();
191 auto breakout =
false;
192 for (
auto j = 0; j < globalMetaObject->enumeratorCount(); ++j) {
193 const auto me = globalMetaObject->enumerator(j);
196 const MetaEnumVariable mev(me);
201 for (
auto k = 0; k < me.keyCount(); ++k) {
203 const MetaEnumVariable mev(me, k);
216 var = c->
lookup(d->m_lookups.at(i++));
219 if (jsonDoc.isArray()) {
220 var = jsonDoc.array().toVariantList();
221 }
else if (jsonDoc.isObject()) {
222 var = jsonDoc.object().toVariantHash();
229 switch(jsonVal.type()) {
241 var = jsonVal.toVariant();
252 while (i < d->m_lookups.size()) {
253 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(const QString &s, bool *ok) const const
int toInt(const QString &s, bool *ok) const const
bool endsWith(const QString &s, Qt::CaseSensitivity cs) const const
QString mid(int position, int n) const const
bool startsWith(const QString &s, Qt::CaseSensitivity cs) const const
QVariant fromValue(const 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.