Inja 3.4.0
A Template Engine for Modern C++
Loading...
Searching...
No Matches
token.hpp
1#ifndef INCLUDE_INJA_TOKEN_HPP_
2#define INCLUDE_INJA_TOKEN_HPP_
3
4#include <string>
5#include <string_view>
6
7namespace inja {
8
12struct Token {
13 enum class Kind {
14 Text,
15 ExpressionOpen, // {{
16 ExpressionClose, // }}
17 LineStatementOpen, // ##
18 LineStatementClose, // \n
19 StatementOpen, // {%
20 StatementClose, // %}
21 CommentOpen, // {#
22 CommentClose, // #}
23 Id, // this, this.foo
24 Number, // 1, 2, -1, 5.2, -5.3
25 String, // "this"
26 Plus, // +
27 Minus, // -
28 Times, // *
29 Slash, // /
30 Percent, // %
31 Power, // ^
32 Comma, // ,
33 Dot, // .
34 Colon, // :
35 LeftParen, // (
36 RightParen, // )
37 LeftBracket, // [
38 RightBracket, // ]
39 LeftBrace, // {
40 RightBrace, // }
41 Equal, // ==
42 NotEqual, // !=
43 GreaterThan, // >
44 GreaterEqual, // >=
45 LessThan, // <
46 LessEqual, // <=
47 Unknown,
48 Eof,
49 };
50
51 Kind kind {Kind::Unknown};
52 std::string_view text;
53
54 explicit constexpr Token() = default;
55 explicit constexpr Token(Kind kind, std::string_view text): kind(kind), text(text) {}
56
57 std::string describe() const {
58 switch (kind) {
59 case Kind::Text:
60 return "<text>";
61 case Kind::LineStatementClose:
62 return "<eol>";
63 case Kind::Eof:
64 return "<eof>";
65 default:
66 return static_cast<std::string>(text);
67 }
68 }
69};
70
71} // namespace inja
72
73#endif // INCLUDE_INJA_TOKEN_HPP_
Helper-class for the inja Lexer.
Definition: token.hpp:12