mirror of
https://github.com/pret/pokeheartgold.git
synced 2024-12-13 07:46:33 +00:00
75 lines
1.7 KiB
C++
75 lines
1.7 KiB
C++
#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, // ,
|
|
Dot, // .
|
|
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_
|