}
else {
flags |= css_parser_token::flag_bad_dimension;
- msg_err("hui: %*s", (int)sv.size(), sv.begin());
return false;
}
*/
auto css_tokeniser::next_token(void) -> struct css_parser_token
{
+ /* Check pushback queue */
+ if (!backlog.empty()) {
+ auto &tok = backlog.front();
+ backlog.pop_front();
+
+ return std::move(tok);
+ }
/* Helpers */
/*
#include <string_view>
#include <utility>
#include <variant>
+#include <list>
#include "mem_pool.h"
namespace rspamd::css {
explicit css_parser_token(token_type type, const value_type &value) :
value(value), type(type) {}
css_parser_token(css_parser_token &&other) = default;
+ auto operator=(css_parser_token &&other) -> css_parser_token& = default;
auto adjust_dim(const css_parser_token &dim_token) -> bool;
/* Debugging routines */
auto next_token(void) -> struct css_parser_token;
auto get_offset(void) const { return offset; }
+ auto pushback_token(struct css_parser_token &&t) const -> void {
+ backlog.push_back(std::forward<css_parser_token>(t));
+ }
private:
std::string_view input;
std::size_t offset;
rspamd_mempool_t *pool;
+ mutable std::list<css_parser_token> backlog;
auto consume_number() -> struct css_parser_token;
auto consume_ident() -> struct css_parser_token;