mirror of
https://github.com/pantor/inja.git
synced 2026-05-02 11:55:23 +00:00
6eb71dd3ea
* test * improve ast * add if statement * shunting-yard start * renderer as node visitor * improve ast * improve ast further * first functions * improve ast v3 * improve ast v4 * fix parser error location * nested ifs * fix comma, activate more tests * fix line statements * fix some more tests * fix callbacks without arguments * add json literal array and object * use switch in expression * fix default function * fix loop data * improved tests and benchmark * fix minus numbers * improve all * fix warnings, optimizations * fix callbacks argument order * dont move loop parent * a few more test * fix clang-3 * fix pointers * clean * update single include
76 lines
1.7 KiB
C++
76 lines
1.7 KiB
C++
// Copyright (c) 2020 Pantor. All rights reserved.
|
|
|
|
#ifndef INCLUDE_INJA_TOKEN_HPP_
|
|
#define INCLUDE_INJA_TOKEN_HPP_
|
|
|
|
#include <string>
|
|
|
|
#include "string_view.hpp"
|
|
|
|
namespace inja {
|
|
|
|
/*!
|
|
* \brief Helper-class for the inja Lexer.
|
|
*/
|
|
struct Token {
|
|
enum class Kind {
|
|
Text,
|
|
ExpressionOpen, // {{
|
|
ExpressionClose, // }}
|
|
LineStatementOpen, // ##
|
|
LineStatementClose, // \n
|
|
StatementOpen, // {%
|
|
StatementClose, // %}
|
|
CommentOpen, // {#
|
|
CommentClose, // #}
|
|
Id, // this, this.foo
|
|
Number, // 1, 2, -1, 5.2, -5.3
|
|
String, // "this"
|
|
Plus, // +
|
|
Minus, // -
|
|
Times, // *
|
|
Slash, // /
|
|
Percent, // %
|
|
Power, // ^
|
|
Comma, // ,
|
|
Colon, // :
|
|
LeftParen, // (
|
|
RightParen, // )
|
|
LeftBracket, // [
|
|
RightBracket, // ]
|
|
LeftBrace, // {
|
|
RightBrace, // }
|
|
Equal, // ==
|
|
NotEqual, // !=
|
|
GreaterThan, // >
|
|
GreaterEqual, // >=
|
|
LessThan, // <
|
|
LessEqual, // <=
|
|
Unknown,
|
|
Eof,
|
|
};
|
|
|
|
Kind kind {Kind::Unknown};
|
|
nonstd::string_view text;
|
|
|
|
explicit constexpr Token() = default;
|
|
explicit constexpr Token(Kind kind, nonstd::string_view text) : kind(kind), text(text) {}
|
|
|
|
std::string describe() const {
|
|
switch (kind) {
|
|
case Kind::Text:
|
|
return "<text>";
|
|
case Kind::LineStatementClose:
|
|
return "<eol>";
|
|
case Kind::Eof:
|
|
return "<eof>";
|
|
default:
|
|
return static_cast<std::string>(text);
|
|
}
|
|
}
|
|
};
|
|
|
|
} // namespace inja
|
|
|
|
#endif // INCLUDE_INJA_TOKEN_HPP_
|