- switched to a sparse delta based map - true lazy-loading to avoid any unneccessary allocations - fixed windows management api
30 lines
970 B
C++
30 lines
970 B
C++
#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<StateBase> (*parse_func)(std::vector<Token> *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<uint32_t> scroll_max{0};
|
|
std::atomic<bool> 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
|