Inja  3.4.0
A Template Engine for Modern C++
token.hpp
1 #ifndef INCLUDE_INJA_TOKEN_HPP_
2 #define INCLUDE_INJA_TOKEN_HPP_
3 
4 #include <string>
5 #include <string_view>
6 
7 namespace inja {
8 
12 struct 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