You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
977 B
C++
33 lines
977 B
C++
9 years ago
|
#include "outside_section.hpp"
|
||
|
|
||
|
#include "visitor/render_node.hpp"
|
||
|
#include "in_section.hpp"
|
||
|
#include "render_context.hpp"
|
||
|
|
||
|
using namespace mstch;
|
||
|
|
||
|
std::string outside_section::render(
|
||
|
render_context& ctx, const token& token)
|
||
|
{
|
||
|
using flag = render_node::flag;
|
||
|
switch (token.token_type()) {
|
||
|
case token::type::section_open:
|
||
|
ctx.set_state<in_section>(in_section::type::normal, token);
|
||
|
break;
|
||
|
case token::type::inverted_section_open:
|
||
|
ctx.set_state<in_section>(in_section::type::inverted, token);
|
||
|
break;
|
||
|
case token::type::variable:
|
||
|
return visit(render_node(ctx, flag::escape_html), ctx.get_node(token.name()));
|
||
|
case token::type::unescaped_variable:
|
||
|
return visit(render_node(ctx, flag::none), ctx.get_node(token.name()));
|
||
|
case token::type::text:
|
||
|
return token.raw();
|
||
|
case token::type::partial:
|
||
|
return ctx.render_partial(token.name(), token.partial_prefix());
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
return "";
|
||
|
}
|