#ifndef INCLUDE_INJA_TOKEN_HPP_ #define INCLUDE_INJA_TOKEN_HPP_ #include #include 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 ""; case Kind::LineStatementClose: return ""; case Kind::Eof: return ""; default: return static_cast(text); } } }; } // namespace inja #endif // INCLUDE_INJA_TOKEN_HPP_