24 #include "exception.h" 28 RangeNodeFactory::RangeNodeFactory() {}
36 auto numArgs = expr.size();
41 QStringLiteral(
"'range' tag requires at least three arguments"));
44 if (expr.at(numArgs - 2) != QStringLiteral(
"as")) {
46 TagSyntaxError, QStringLiteral(
"Invalid arguments to 'range' tag"));
50 const auto name = (numArgs > 2) ? expr.at(numArgs - 1) :
QString();
74 auto list = p->
parse(n, QStringLiteral(
"endrange"));
81 RangeNode::RangeNode(
const QString &name,
84 :
Node(parent), m_name(name), m_startExpression(startExpression),
85 m_stopExpression(stopExpression)
89 RangeNode::RangeNode(
const QString &name,
93 :
Node(parent), m_name(name), m_startExpression(startExpression),
94 m_stopExpression(stopExpression), m_stepExpression(stepExpression)
98 void RangeNode::setNodeList(
const NodeList &list) { m_list = list; }
109 if (m_stepExpression.
isValid()) {
115 const auto insertContext = !m_name.
isEmpty();
117 Q_ASSERT(start < stop);
119 for (
auto i = start; i < stop; i += step) {
NodeList parse(Node *parent, const QStringList &stopAt={})
Node * getNode(const QString &tagContent, Parser *p) const override
The Context class holds the context to render a Template with.
bool isEmpty() const const
Base class for all nodes.
Utility functions used throughout Cutelee.
The OutputStream class is used to render templates to a QTextStream.
QVariant resolve(OutputStream *stream, Context *c) const
The Parser class processes a string template into a tree of nodes.
A list of Nodes with some convenience API for rendering them.
void render(OutputStream *stream, Context *c) const override
A FilterExpression object represents a filter expression in a template.
Q_INVOKABLE QStringList smartSplit(const QString &str) const
void insert(const QString &name, QObject *object)
void render(OutputStream *stream, Context *c) const
An exception for use when implementing template tags.