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; }
106 start = m_startExpression.
resolve(c).value<
int>();
107 stop = m_stopExpression.
resolve(c).value<
int>();
109 if (m_stepExpression.
isValid()) {
110 step = m_stepExpression.
resolve(c).value<
int>();
115 const auto insertContext = !m_name.isEmpty();
117 Q_ASSERT(start < stop);
119 for (
auto i = start; i < stop; i += step) {
Q_INVOKABLE QStringList smartSplit(const QString &str) const
The Context class holds the context to render a Template with.
void insert(const QString &name, QObject *object)
An exception for use when implementing template tags.
A FilterExpression object represents a filter expression in a template.
QVariant resolve(OutputStream *stream, Context *c) const
A list of Nodes with some convenience API for rendering them.
void render(OutputStream *stream, Context *c) const
Base class for all nodes.
The OutputStream class is used to render templates to a QTextStream.
The Parser class processes a string template into a tree of nodes.
NodeList parse(Node *parent, const QStringList &stopAt={})
Node * getNode(const QString &tagContent, Parser *p) const override
void render(OutputStream *stream, Context *c) const override
Utility functions used throughout Cutelee.