mirror of https://github.com/PurpleI2P/i2pd.git
I2P: End-to-End encrypted and anonymous Internet
https://i2pd.website/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.7 KiB
74 lines
1.7 KiB
3 years ago
|
#ifndef INCLUDE_INJA_TOKEN_HPP_
|
||
|
#define INCLUDE_INJA_TOKEN_HPP_
|
||
|
|
||
|
#include <string>
|
||
|
#include <string_view>
|
||
|
|
||
|
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, // ,
|
||
|
Dot, // .
|
||
|
Colon, // :
|
||
|
LeftParen, // (
|
||
|
RightParen, // )
|
||
|
LeftBracket, // [
|
||
|
RightBracket, // ]
|
||
|
LeftBrace, // {
|
||
|
RightBrace, // }
|
||
|
Equal, // ==
|
||
|
NotEqual, // !=
|
||
|
GreaterThan, // >
|
||
|
GreaterEqual, // >=
|
||
|
LessThan, // <
|
||
|
LessEqual, // <=
|
||
|
Unknown,
|
||
|
Eof,
|
||
|
};
|
||
|
|
||
|
Kind kind {Kind::Unknown};
|
||
|
std::string_view text;
|
||
|
|
||
|
explicit constexpr Token() = default;
|
||
|
explicit constexpr Token(Kind kind, std::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_
|