#ifndef SYNTAX_PARSER_H #define SYNTAX_PARSER_H #include "ruby/decl.h" #include "syntax/decl.h" #include "syntax/line_map.h" struct Parser { struct Editor *editor = nullptr; std::string lang; std::unique_ptr (*parse_func)(std::vector *tokens, StateBase *in_state, const char *text, uint32_t len, uint32_t line_num); bool (*state_match_func)(StateBase *state_1, StateBase *state_2); mrb_value parser_block = mrb_nil_value(); mrb_value match_block = mrb_nil_value(); bool is_custom{false}; std::atomic scroll_max{0}; std::atomic scroll_dirty{false}; LineMap line_map = LineMap(); Parser(Editor *editor, std::string n_lang, uint32_t n_scroll_max); void edit(uint32_t start_line, uint32_t removed_rows, uint32_t inserted_rows); void work(); void scroll(uint32_t line); }; #endif