Cutelee
6.1.0
filtertag.cpp
1
/*
2
This file is part of the Cutelee template system.
3
4
Copyright (c) 2009,2010 Stephen Kelly <steveire@gmail.com>
5
6
This library is free software; you can redistribute it and/or
7
modify it under the terms of the GNU Lesser General Public
8
License as published by the Free Software Foundation; either version
9
2.1 of the Licence, or (at your option) any later version.
10
11
This library is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
Lesser General Public License for more details.
15
16
You should have received a copy of the GNU Lesser General Public
17
License along with this library. If not, see <http://www.gnu.org/licenses/>.
18
19
*/
20
21
#include "filtertag.h"
22
23
#include "../lib/exception.h"
24
#include "filterexpression.h"
25
#include "parser.h"
26
#include "
util.h
"
27
28
FilterNodeFactory::FilterNodeFactory() {}
29
30
Cutelee::Node
*
FilterNodeFactory::getNode
(
const
QString
&tagContent,
31
Cutelee::Parser
*p)
const
32
{
33
#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
34
auto
expr = tagContent.
split
(
QLatin1Char
(
' '
),
QString::SkipEmptyParts
);
35
#else
36
auto
expr = tagContent.
split
(
QLatin1Char
(
' '
),
Qt::SkipEmptyParts
);
37
#endif
38
39
expr.
removeFirst
();
40
41
auto
expression = expr.join(
QChar::fromLatin1
(
' '
));
42
FilterExpression
fe(QStringLiteral(
"var|%1"
).arg(expression), p);
43
44
auto
filters = fe.filters();
45
if
(filters.contains(QStringLiteral(
"safe"
))
46
|| filters.contains(QStringLiteral(
"escape"
))) {
47
throw
Cutelee::Exception
(
48
TagSyntaxError, QStringLiteral(
"Use the \"autoescape\" tag instead."
));
49
}
50
51
auto
n =
new
FilterNode
(fe, p);
52
53
auto
filterNodes = p->
parse
(n, QStringLiteral(
"endfilter"
));
54
p->
removeNextToken
();
55
56
n->setNodeList(filterNodes);
57
return
n;
58
}
59
60
FilterNode::FilterNode(
const
FilterExpression
&fe,
QObject
*parent)
61
:
Node
(parent), m_fe(fe)
62
{
63
}
64
65
void
FilterNode::setNodeList(
const
NodeList
&filterList)
66
{
67
m_filterList = filterList;
68
}
69
70
void
FilterNode::render
(
OutputStream
*stream,
Context
*c)
const
71
{
72
QString
output;
73
QTextStream
textStream(&output);
74
auto
temp = stream->
clone
(&textStream);
75
m_filterList.render(temp.get(), c);
76
c->
push
();
77
c->
insert
(QStringLiteral(
"var"
), output);
78
m_fe.resolve(stream, c);
79
c->
pop
();
80
}
Cutelee::Context
The Context class holds the context to render a Template with.
Definition
context.h:119
Cutelee::Context::pop
void pop()
Definition
context.cpp:131
Cutelee::Context::push
void push()
Definition
context.cpp:123
Cutelee::Context::insert
void insert(const QString &name, QObject *object)
Definition
context.cpp:145
Cutelee::Exception
An exception for use when implementing template tags.
Definition
exception.h:85
Cutelee::FilterExpression
A FilterExpression object represents a filter expression in a template.
Definition
filterexpression.h:120
Cutelee::NodeList
A list of Nodes with some convenience API for rendering them.
Definition
node.h:148
Cutelee::Node
Base class for all nodes.
Definition
node.h:78
Cutelee::OutputStream
The OutputStream class is used to render templates to a QTextStream.
Definition
outputstream.h:81
Cutelee::OutputStream::clone
virtual std::shared_ptr< OutputStream > clone(QTextStream *stream) const
Definition
outputstream.cpp:71
Cutelee::Parser
The Parser class processes a string template into a tree of nodes.
Definition
parser.h:49
Cutelee::Parser::parse
NodeList parse(Node *parent, const QStringList &stopAt={})
Definition
parser.cpp:180
Cutelee::Parser::removeNextToken
void removeNextToken()
Definition
parser.cpp:297
FilterNodeFactory::getNode
Node * getNode(const QString &tagContent, Parser *p) const override
Definition
filtertag.cpp:30
FilterNode
Definition
filtertag.h:37
FilterNode::render
void render(OutputStream *stream, Context *c) const override
Definition
filtertag.cpp:70
QChar::fromLatin1
QChar fromLatin1(char c)
QLatin1Char
QList::removeFirst
void removeFirst()
QObject
QString::SkipEmptyParts
SkipEmptyParts
QString::split
QStringList split(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs) const const
QString
Qt::SkipEmptyParts
SkipEmptyParts
QTextStream
util.h
Utility functions used throughout Cutelee.
templates
defaulttags
filtertag.cpp
Generated by
1.16.1