make State global
parent
434a4e74db
commit
5b9b7889c6
|
@ -16,8 +16,8 @@ OnInitialize :: proc "c" (plugin: Plugin) {
|
||||||
context = runtime.default_context();
|
context = runtime.default_context();
|
||||||
fmt.println("builtin highlighter plugin initialized!");
|
fmt.println("builtin highlighter plugin initialized!");
|
||||||
|
|
||||||
plugin.register_highlighter(plugin.state, ".odin", color_buffer_odin);
|
plugin.register_highlighter(".odin", color_buffer_odin);
|
||||||
plugin.register_highlighter(plugin.state, ".rs", color_buffer_rust);
|
plugin.register_highlighter(".rs", color_buffer_rust);
|
||||||
}
|
}
|
||||||
|
|
||||||
@export
|
@export
|
||||||
|
@ -31,24 +31,24 @@ OnDraw :: proc "c" (plugin: Plugin) {
|
||||||
context = runtime.default_context();
|
context = runtime.default_context();
|
||||||
}
|
}
|
||||||
|
|
||||||
iterate_buffer :: proc(state: rawptr, iter_funcs: Iterator, it: ^BufferIter) -> (character: u8, idx: BufferIndex, cond: bool) {
|
iterate_buffer :: proc(iter_funcs: Iterator, it: ^BufferIter) -> (character: u8, idx: BufferIndex, cond: bool) {
|
||||||
result := iter_funcs.iterate_buffer(state, it);
|
result := iter_funcs.iterate_buffer(it);
|
||||||
|
|
||||||
return result.char, it.cursor.index, result.should_stop;
|
return result.char, it.cursor.index, result.should_stop;
|
||||||
}
|
}
|
||||||
|
|
||||||
iterate_buffer_reverse :: proc(state: rawptr, iter_funcs: Iterator, it: ^BufferIter) -> (character: u8, idx: BufferIndex, cond: bool) {
|
iterate_buffer_reverse :: proc(iter_funcs: Iterator, it: ^BufferIter) -> (character: u8, idx: BufferIndex, cond: bool) {
|
||||||
result := iter_funcs.iterate_buffer_reverse(state, it);
|
result := iter_funcs.iterate_buffer_reverse(it);
|
||||||
|
|
||||||
return result.char, it.cursor.index, result.should_stop;
|
return result.char, it.cursor.index, result.should_stop;
|
||||||
}
|
}
|
||||||
|
|
||||||
iterate_buffer_until :: proc(plugin: Plugin, it: ^BufferIter, until_proc: rawptr) {
|
iterate_buffer_until :: proc(plugin: Plugin, it: ^BufferIter, until_proc: rawptr) {
|
||||||
plugin.iter.iterate_buffer_until(plugin.state, it, until_proc);
|
plugin.iter.iterate_buffer_until(it, until_proc);
|
||||||
}
|
}
|
||||||
|
|
||||||
iterate_buffer_peek :: proc(plugin: Plugin, it: ^BufferIter) -> (character: u8, idx: BufferIndex, cond: bool) {
|
iterate_buffer_peek :: proc(plugin: Plugin, it: ^BufferIter) -> (character: u8, idx: BufferIndex, cond: bool) {
|
||||||
result := plugin.iter.iterate_buffer_peek(plugin.state, it);
|
result := plugin.iter.iterate_buffer_peek(it);
|
||||||
|
|
||||||
return result.char, it.cursor.index, result.should_stop;
|
return result.char, it.cursor.index, result.should_stop;
|
||||||
}
|
}
|
||||||
|
@ -165,14 +165,14 @@ is_odin_keyword :: proc(plugin: Plugin, start: BufferIter, end: BufferIter) -> (
|
||||||
it := start;
|
it := start;
|
||||||
keyword_index := 0;
|
keyword_index := 0;
|
||||||
|
|
||||||
for character in iterate_buffer(plugin.state, plugin.iter, &it) {
|
for character in iterate_buffer(plugin.iter, &it) {
|
||||||
if character != keyword[keyword_index] {
|
if character != keyword[keyword_index] {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
keyword_index += 1;
|
keyword_index += 1;
|
||||||
if keyword_index >= len(keyword)-1 && it == end {
|
if keyword_index >= len(keyword)-1 && it == end {
|
||||||
if plugin.iter.get_char_at_iter(plugin.state, &it) == keyword[keyword_index] {
|
if plugin.iter.get_char_at_iter(&it) == keyword[keyword_index] {
|
||||||
matches = true;
|
matches = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -250,14 +250,14 @@ is_rust_keyword :: proc(plugin: Plugin, start: BufferIter, end: BufferIter) -> (
|
||||||
it := start;
|
it := start;
|
||||||
keyword_index := 0;
|
keyword_index := 0;
|
||||||
|
|
||||||
for character in iterate_buffer(plugin.state, plugin.iter, &it) {
|
for character in iterate_buffer(plugin.iter, &it) {
|
||||||
if character != keyword[keyword_index] {
|
if character != keyword[keyword_index] {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
keyword_index += 1;
|
keyword_index += 1;
|
||||||
if keyword_index >= len(keyword)-1 && it == end {
|
if keyword_index >= len(keyword)-1 && it == end {
|
||||||
if plugin.iter.get_char_at_iter(plugin.state, &it) == keyword[keyword_index] {
|
if plugin.iter.get_char_at_iter(&it) == keyword[keyword_index] {
|
||||||
matches = true;
|
matches = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -280,12 +280,12 @@ is_rust_keyword :: proc(plugin: Plugin, start: BufferIter, end: BufferIter) -> (
|
||||||
color_buffer_odin :: proc "c" (plugin: Plugin, buffer: rawptr) {
|
color_buffer_odin :: proc "c" (plugin: Plugin, buffer: rawptr) {
|
||||||
context = runtime.default_context();
|
context = runtime.default_context();
|
||||||
|
|
||||||
start_it := plugin.iter.get_buffer_iterator(plugin.state, buffer);
|
start_it := plugin.iter.get_buffer_iterator(buffer);
|
||||||
it := plugin.iter.get_buffer_iterator(plugin.state, buffer);
|
it := plugin.iter.get_buffer_iterator(buffer);
|
||||||
|
|
||||||
buffer := plugin.buffer.get_buffer_info(plugin.state);
|
buffer := plugin.buffer.get_buffer_info();
|
||||||
|
|
||||||
for character in iterate_buffer(plugin.state, plugin.iter, &it) {
|
for character in iterate_buffer(plugin.iter, &it) {
|
||||||
if it.cursor.line > buffer.glyph_buffer_height && (it.cursor.line - buffer.top_line) > buffer.glyph_buffer_height {
|
if it.cursor.line > buffer.glyph_buffer_height && (it.cursor.line - buffer.top_line) > buffer.glyph_buffer_height {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -293,56 +293,56 @@ color_buffer_odin :: proc "c" (plugin: Plugin, buffer: rawptr) {
|
||||||
if character == '/' {
|
if character == '/' {
|
||||||
start_it = it;
|
start_it = it;
|
||||||
// need to go back one character because `it` is on the next character
|
// need to go back one character because `it` is on the next character
|
||||||
iterate_buffer_reverse(plugin.state, plugin.iter, &start_it);
|
iterate_buffer_reverse(plugin.iter, &start_it);
|
||||||
|
|
||||||
character, _, succ := iterate_buffer(plugin.state, plugin.iter, &it);
|
character, _, succ := iterate_buffer(plugin.iter, &it);
|
||||||
if !succ { break; }
|
if !succ { break; }
|
||||||
|
|
||||||
if character == '/' {
|
if character == '/' {
|
||||||
iterate_buffer_until(plugin, &it, plugin.iter.until_line_break);
|
iterate_buffer_until(plugin, &it, plugin.iter.until_line_break);
|
||||||
plugin.buffer.color_char_at(plugin.state, it.buffer, start_it.cursor, it.cursor, 9);
|
plugin.buffer.color_char_at(it.buffer, start_it.cursor, it.cursor, 9);
|
||||||
} else if character == '*' {
|
} else if character == '*' {
|
||||||
// TODO: block comments
|
// TODO: block comments
|
||||||
}
|
}
|
||||||
} else if character == '\'' {
|
} else if character == '\'' {
|
||||||
start_it = it;
|
start_it = it;
|
||||||
// need to go back one character because `it` is on the next character
|
// need to go back one character because `it` is on the next character
|
||||||
iterate_buffer_reverse(plugin.state, plugin.iter, &start_it);
|
iterate_buffer_reverse(plugin.iter, &start_it);
|
||||||
|
|
||||||
// jump into the quoted text
|
// jump into the quoted text
|
||||||
iterate_buffer_until(plugin, &it, plugin.iter.until_single_quote);
|
iterate_buffer_until(plugin, &it, plugin.iter.until_single_quote);
|
||||||
plugin.buffer.color_char_at(plugin.state, it.buffer, start_it.cursor, it.cursor, 12);
|
plugin.buffer.color_char_at(it.buffer, start_it.cursor, it.cursor, 12);
|
||||||
|
|
||||||
iterate_buffer(plugin.state, plugin.iter, &it);
|
iterate_buffer(plugin.iter, &it);
|
||||||
} else if character == '"' {
|
} else if character == '"' {
|
||||||
start_it = it;
|
start_it = it;
|
||||||
// need to go back one character because `it` is on the next character
|
// need to go back one character because `it` is on the next character
|
||||||
iterate_buffer_reverse(plugin.state, plugin.iter, &start_it);
|
iterate_buffer_reverse(plugin.iter, &start_it);
|
||||||
|
|
||||||
// jump into the quoted text
|
// jump into the quoted text
|
||||||
iterate_buffer_until(plugin, &it, plugin.iter.until_double_quote);
|
iterate_buffer_until(plugin, &it, plugin.iter.until_double_quote);
|
||||||
plugin.buffer.color_char_at(plugin.state, it.buffer, start_it.cursor, it.cursor, 12);
|
plugin.buffer.color_char_at(it.buffer, start_it.cursor, it.cursor, 12);
|
||||||
|
|
||||||
iterate_buffer(plugin.state, plugin.iter, &it);
|
iterate_buffer(plugin.iter, &it);
|
||||||
} else if (character >= 'a' && character <= 'z') || (character >= 'A' && character <= 'Z') || character == '_' {
|
} else if (character >= 'a' && character <= 'z') || (character >= 'A' && character <= 'Z') || character == '_' {
|
||||||
start_it = it;
|
start_it = it;
|
||||||
// need to go back one character because `it` is on the next character
|
// need to go back one character because `it` is on the next character
|
||||||
iterate_buffer_reverse(plugin.state, plugin.iter, &start_it);
|
iterate_buffer_reverse(plugin.iter, &start_it);
|
||||||
it = start_it;
|
it = start_it;
|
||||||
|
|
||||||
iterate_buffer_until(plugin, &it, plugin.iter.until_end_of_word);
|
iterate_buffer_until(plugin, &it, plugin.iter.until_end_of_word);
|
||||||
|
|
||||||
if is_odin_keyword(plugin, start_it, it) {
|
if is_odin_keyword(plugin, start_it, it) {
|
||||||
plugin.buffer.color_char_at(plugin.state, it.buffer, start_it.cursor, it.cursor, 13);
|
plugin.buffer.color_char_at(it.buffer, start_it.cursor, it.cursor, 13);
|
||||||
} else if character, _, cond := iterate_buffer_peek(plugin, &it); cond {
|
} else if character, _, cond := iterate_buffer_peek(plugin, &it); cond {
|
||||||
if character == '(' {
|
if character == '(' {
|
||||||
plugin.buffer.color_char_at(plugin.state, it.buffer, start_it.cursor, it.cursor, 11);
|
plugin.buffer.color_char_at(it.buffer, start_it.cursor, it.cursor, 11);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
iterate_buffer(plugin.state, plugin.iter, &it);
|
iterate_buffer(plugin.iter, &it);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -350,12 +350,12 @@ color_buffer_odin :: proc "c" (plugin: Plugin, buffer: rawptr) {
|
||||||
color_buffer_rust :: proc "c" (plugin: Plugin, buffer: rawptr) {
|
color_buffer_rust :: proc "c" (plugin: Plugin, buffer: rawptr) {
|
||||||
context = runtime.default_context();
|
context = runtime.default_context();
|
||||||
|
|
||||||
start_it := plugin.iter.get_buffer_iterator(plugin.state, buffer);
|
start_it := plugin.iter.get_buffer_iterator(buffer);
|
||||||
it := plugin.iter.get_buffer_iterator(plugin.state, buffer);
|
it := plugin.iter.get_buffer_iterator(buffer);
|
||||||
|
|
||||||
buffer := plugin.buffer.get_buffer_info(plugin.state);
|
buffer := plugin.buffer.get_buffer_info();
|
||||||
|
|
||||||
for character in iterate_buffer(plugin.state, plugin.iter, &it) {
|
for character in iterate_buffer(plugin.iter, &it) {
|
||||||
if it.cursor.line > buffer.glyph_buffer_height && (it.cursor.line - buffer.top_line) > buffer.glyph_buffer_height {
|
if it.cursor.line > buffer.glyph_buffer_height && (it.cursor.line - buffer.top_line) > buffer.glyph_buffer_height {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -363,56 +363,56 @@ color_buffer_rust :: proc "c" (plugin: Plugin, buffer: rawptr) {
|
||||||
if character == '/' {
|
if character == '/' {
|
||||||
start_it = it;
|
start_it = it;
|
||||||
// need to go back one character because `it` is on the next character
|
// need to go back one character because `it` is on the next character
|
||||||
iterate_buffer_reverse(plugin.state, plugin.iter, &start_it);
|
iterate_buffer_reverse(plugin.iter, &start_it);
|
||||||
|
|
||||||
character, _, succ := iterate_buffer(plugin.state, plugin.iter, &it);
|
character, _, succ := iterate_buffer(plugin.iter, &it);
|
||||||
if !succ { break; }
|
if !succ { break; }
|
||||||
|
|
||||||
if character == '/' {
|
if character == '/' {
|
||||||
iterate_buffer_until(plugin, &it, plugin.iter.until_line_break);
|
iterate_buffer_until(plugin, &it, plugin.iter.until_line_break);
|
||||||
plugin.buffer.color_char_at(plugin.state, it.buffer, start_it.cursor, it.cursor, 9);
|
plugin.buffer.color_char_at(it.buffer, start_it.cursor, it.cursor, 9);
|
||||||
} else if character == '*' {
|
} else if character == '*' {
|
||||||
// TODO: block comments
|
// TODO: block comments
|
||||||
}
|
}
|
||||||
} else if character == '\'' && false {
|
} else if character == '\'' && false {
|
||||||
start_it = it;
|
start_it = it;
|
||||||
// need to go back one character because `it` is on the next character
|
// need to go back one character because `it` is on the next character
|
||||||
iterate_buffer_reverse(plugin.state, plugin.iter, &start_it);
|
iterate_buffer_reverse(plugin.iter, &start_it);
|
||||||
|
|
||||||
// jump into the quoted text
|
// jump into the quoted text
|
||||||
iterate_buffer_until(plugin, &it, plugin.iter.until_single_quote);
|
iterate_buffer_until(plugin, &it, plugin.iter.until_single_quote);
|
||||||
plugin.buffer.color_char_at(plugin.state, it.buffer, start_it.cursor, it.cursor, 12);
|
plugin.buffer.color_char_at(it.buffer, start_it.cursor, it.cursor, 12);
|
||||||
|
|
||||||
iterate_buffer(plugin.state, plugin.iter, &it);
|
iterate_buffer(plugin.iter, &it);
|
||||||
} else if character == '"' {
|
} else if character == '"' {
|
||||||
start_it = it;
|
start_it = it;
|
||||||
// need to go back one character because `it` is on the next character
|
// need to go back one character because `it` is on the next character
|
||||||
iterate_buffer_reverse(plugin.state, plugin.iter, &start_it);
|
iterate_buffer_reverse(plugin.iter, &start_it);
|
||||||
|
|
||||||
// jump into the quoted text
|
// jump into the quoted text
|
||||||
iterate_buffer_until(plugin, &it, plugin.iter.until_double_quote);
|
iterate_buffer_until(plugin, &it, plugin.iter.until_double_quote);
|
||||||
plugin.buffer.color_char_at(plugin.state, it.buffer, start_it.cursor, it.cursor, 12);
|
plugin.buffer.color_char_at(it.buffer, start_it.cursor, it.cursor, 12);
|
||||||
|
|
||||||
iterate_buffer(plugin.state, plugin.iter, &it);
|
iterate_buffer(plugin.iter, &it);
|
||||||
} else if (character >= 'a' && character <= 'z') || (character >= 'A' && character <= 'Z') || character == '_' {
|
} else if (character >= 'a' && character <= 'z') || (character >= 'A' && character <= 'Z') || character == '_' {
|
||||||
start_it = it;
|
start_it = it;
|
||||||
// need to go back one character because `it` is on the next character
|
// need to go back one character because `it` is on the next character
|
||||||
iterate_buffer_reverse(plugin.state, plugin.iter, &start_it);
|
iterate_buffer_reverse(plugin.iter, &start_it);
|
||||||
it = start_it;
|
it = start_it;
|
||||||
|
|
||||||
iterate_buffer_until(plugin, &it, plugin.iter.until_end_of_word);
|
iterate_buffer_until(plugin, &it, plugin.iter.until_end_of_word);
|
||||||
|
|
||||||
if is_rust_keyword(plugin, start_it, it) {
|
if is_rust_keyword(plugin, start_it, it) {
|
||||||
plugin.buffer.color_char_at(plugin.state, it.buffer, start_it.cursor, it.cursor, 13);
|
plugin.buffer.color_char_at(it.buffer, start_it.cursor, it.cursor, 13);
|
||||||
} else if character, _, cond := iterate_buffer_peek(plugin, &it); cond {
|
} else if character, _, cond := iterate_buffer_peek(plugin, &it); cond {
|
||||||
if character == '(' || character == '<' {
|
if character == '(' || character == '<' {
|
||||||
plugin.buffer.color_char_at(plugin.state, it.buffer, start_it.cursor, it.cursor, 11);
|
plugin.buffer.color_char_at(it.buffer, start_it.cursor, it.cursor, 11);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
iterate_buffer(plugin.state, plugin.iter, &it);
|
iterate_buffer(plugin.iter, &it);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,8 @@ import "plugin"
|
||||||
State :: core.State;
|
State :: core.State;
|
||||||
FileBuffer :: core.FileBuffer;
|
FileBuffer :: core.FileBuffer;
|
||||||
|
|
||||||
|
state := core.State {};
|
||||||
|
|
||||||
// TODO: use buffer list in state
|
// TODO: use buffer list in state
|
||||||
do_normal_mode :: proc(state: ^State, buffer: ^FileBuffer) {
|
do_normal_mode :: proc(state: ^State, buffer: ^FileBuffer) {
|
||||||
if state.current_input_map != nil {
|
if state.current_input_map != nil {
|
||||||
|
@ -208,7 +210,7 @@ load_plugin :: proc(info: os.File_Info, in_err: os.Errno, state: rawptr) -> (err
|
||||||
}
|
}
|
||||||
|
|
||||||
main :: proc() {
|
main :: proc() {
|
||||||
state := State {
|
state = State {
|
||||||
ctx = context,
|
ctx = context,
|
||||||
source_font_width = 8,
|
source_font_width = 8,
|
||||||
source_font_height = 16,
|
source_font_height = 16,
|
||||||
|
@ -220,8 +222,7 @@ main :: proc() {
|
||||||
};
|
};
|
||||||
state.plugin_vtable = plugin.Plugin {
|
state.plugin_vtable = plugin.Plugin {
|
||||||
state = cast(rawptr)&state,
|
state = cast(rawptr)&state,
|
||||||
register_highlighter = proc "c" (state: rawptr, extension: cstring, on_color_buffer: plugin.OnColorBufferProc) {
|
register_highlighter = proc "c" (extension: cstring, on_color_buffer: plugin.OnColorBufferProc) {
|
||||||
state := cast(^State)state;
|
|
||||||
context = state.ctx;
|
context = state.ctx;
|
||||||
|
|
||||||
extension := strings.clone(string(extension));
|
extension := strings.clone(string(extension));
|
||||||
|
@ -233,8 +234,7 @@ main :: proc() {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
iter = plugin.Iterator {
|
iter = plugin.Iterator {
|
||||||
get_current_buffer_iterator = proc "c" (state: rawptr) -> plugin.BufferIter {
|
get_current_buffer_iterator = proc "c" () -> plugin.BufferIter {
|
||||||
state := cast(^State)state;
|
|
||||||
context = state.ctx;
|
context = state.ctx;
|
||||||
|
|
||||||
it := core.new_file_buffer_iter(&state.buffers[state.current_buffer]);
|
it := core.new_file_buffer_iter(&state.buffers[state.current_buffer]);
|
||||||
|
@ -253,8 +253,7 @@ main :: proc() {
|
||||||
hit_end = it.hit_end,
|
hit_end = it.hit_end,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
get_buffer_iterator = proc "c" (state: rawptr, buffer: rawptr) -> plugin.BufferIter {
|
get_buffer_iterator = proc "c" (buffer: rawptr) -> plugin.BufferIter {
|
||||||
state := cast(^State)state;
|
|
||||||
buffer := cast(^core.FileBuffer)buffer;
|
buffer := cast(^core.FileBuffer)buffer;
|
||||||
context = state.ctx;
|
context = state.ctx;
|
||||||
|
|
||||||
|
@ -274,8 +273,7 @@ main :: proc() {
|
||||||
hit_end = it.hit_end,
|
hit_end = it.hit_end,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
get_char_at_iter = proc "c" (state: rawptr, it: ^plugin.BufferIter) -> u8 {
|
get_char_at_iter = proc "c" (it: ^plugin.BufferIter) -> u8 {
|
||||||
state := cast(^State)state;
|
|
||||||
context = state.ctx;
|
context = state.ctx;
|
||||||
|
|
||||||
internal_it := core.FileBufferIter {
|
internal_it := core.FileBufferIter {
|
||||||
|
@ -293,8 +291,7 @@ main :: proc() {
|
||||||
|
|
||||||
return core.get_character_at_iter(internal_it);
|
return core.get_character_at_iter(internal_it);
|
||||||
},
|
},
|
||||||
iterate_buffer = proc "c" (state: rawptr, it: ^plugin.BufferIter) -> plugin.IterateResult {
|
iterate_buffer = proc "c" (it: ^plugin.BufferIter) -> plugin.IterateResult {
|
||||||
state := cast(^State)state;
|
|
||||||
context = state.ctx;
|
context = state.ctx;
|
||||||
|
|
||||||
// TODO: make this into a function
|
// TODO: make this into a function
|
||||||
|
@ -331,8 +328,7 @@ main :: proc() {
|
||||||
should_stop = cond,
|
should_stop = cond,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
iterate_buffer_reverse = proc "c" (state: rawptr, it: ^plugin.BufferIter) -> plugin.IterateResult {
|
iterate_buffer_reverse = proc "c" (it: ^plugin.BufferIter) -> plugin.IterateResult {
|
||||||
state := cast(^State)state;
|
|
||||||
context = state.ctx;
|
context = state.ctx;
|
||||||
|
|
||||||
// TODO: make this into a function
|
// TODO: make this into a function
|
||||||
|
@ -369,8 +365,7 @@ main :: proc() {
|
||||||
should_stop = cond,
|
should_stop = cond,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
iterate_buffer_until = proc "c" (state: rawptr, it: ^plugin.BufferIter, until_proc: rawptr) {
|
iterate_buffer_until = proc "c" (it: ^plugin.BufferIter, until_proc: rawptr) {
|
||||||
state := cast(^State)state;
|
|
||||||
context = state.ctx;
|
context = state.ctx;
|
||||||
|
|
||||||
// TODO: make this into a function
|
// TODO: make this into a function
|
||||||
|
@ -402,8 +397,7 @@ main :: proc() {
|
||||||
hit_end = internal_it.hit_end,
|
hit_end = internal_it.hit_end,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
iterate_buffer_peek = proc "c" (state: rawptr, it: ^plugin.BufferIter) -> plugin.IterateResult {
|
iterate_buffer_peek = proc "c" (it: ^plugin.BufferIter) -> plugin.IterateResult {
|
||||||
state := cast(^State)state;
|
|
||||||
context = state.ctx;
|
context = state.ctx;
|
||||||
|
|
||||||
// TODO: make this into a function
|
// TODO: make this into a function
|
||||||
|
@ -446,8 +440,7 @@ main :: proc() {
|
||||||
until_end_of_word = transmute(rawptr)core.until_end_of_word,
|
until_end_of_word = transmute(rawptr)core.until_end_of_word,
|
||||||
},
|
},
|
||||||
buffer = plugin.Buffer {
|
buffer = plugin.Buffer {
|
||||||
get_buffer_info = proc "c" (state: rawptr) -> plugin.BufferInfo {
|
get_buffer_info = proc "c" () -> plugin.BufferInfo {
|
||||||
state := cast(^State)state;
|
|
||||||
context = state.ctx;
|
context = state.ctx;
|
||||||
|
|
||||||
buffer := &state.buffers[state.current_buffer];
|
buffer := &state.buffers[state.current_buffer];
|
||||||
|
@ -458,8 +451,7 @@ main :: proc() {
|
||||||
top_line = buffer.top_line,
|
top_line = buffer.top_line,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
color_char_at = proc "c" (state: rawptr, buffer: rawptr, start_cursor: plugin.Cursor, end_cursor: plugin.Cursor, palette_index: i32) {
|
color_char_at = proc "c" (buffer: rawptr, start_cursor: plugin.Cursor, end_cursor: plugin.Cursor, palette_index: i32) {
|
||||||
state := cast(^State)state;
|
|
||||||
buffer := cast(^core.FileBuffer)buffer;
|
buffer := cast(^core.FileBuffer)buffer;
|
||||||
context = state.ctx;
|
context = state.ctx;
|
||||||
|
|
||||||
|
|
|
@ -43,20 +43,20 @@ BufferInfo :: struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
Buffer :: struct {
|
Buffer :: struct {
|
||||||
get_buffer_info: proc "c" (state: rawptr) -> BufferInfo,
|
get_buffer_info: proc "c" () -> BufferInfo,
|
||||||
color_char_at: proc "c" (state: rawptr, buffer: rawptr, start_cursor: Cursor, end_cursor: Cursor, palette_index: i32),
|
color_char_at: proc "c" (buffer: rawptr, start_cursor: Cursor, end_cursor: Cursor, palette_index: i32),
|
||||||
}
|
}
|
||||||
|
|
||||||
Iterator :: struct {
|
Iterator :: struct {
|
||||||
get_current_buffer_iterator: proc "c" (state: rawptr) -> BufferIter,
|
get_current_buffer_iterator: proc "c" () -> BufferIter,
|
||||||
get_buffer_iterator: proc "c" (state: rawptr, buffer: rawptr) -> BufferIter,
|
get_buffer_iterator: proc "c" (buffer: rawptr) -> BufferIter,
|
||||||
get_char_at_iter: proc "c" (state: rawptr, it: ^BufferIter) -> u8,
|
get_char_at_iter: proc "c" (it: ^BufferIter) -> u8,
|
||||||
|
|
||||||
iterate_buffer: proc "c" (state: rawptr, it: ^BufferIter) -> IterateResult,
|
iterate_buffer: proc "c" (it: ^BufferIter) -> IterateResult,
|
||||||
iterate_buffer_reverse: proc "c" (state: rawptr, it: ^BufferIter) -> IterateResult,
|
iterate_buffer_reverse: proc "c" (it: ^BufferIter) -> IterateResult,
|
||||||
iterate_buffer_until: proc "c" (state: rawptr, it: ^BufferIter, until_proc: rawptr),
|
iterate_buffer_until: proc "c" (it: ^BufferIter, until_proc: rawptr),
|
||||||
iterate_buffer_until_reverse: proc "c" (state: rawptr, it: ^BufferIter, until_proc: rawptr),
|
iterate_buffer_until_reverse: proc "c" (it: ^BufferIter, until_proc: rawptr),
|
||||||
iterate_buffer_peek: proc "c" (state: rawptr, it: ^BufferIter) -> IterateResult,
|
iterate_buffer_peek: proc "c" (it: ^BufferIter) -> IterateResult,
|
||||||
|
|
||||||
until_line_break: rawptr,
|
until_line_break: rawptr,
|
||||||
until_single_quote: rawptr,
|
until_single_quote: rawptr,
|
||||||
|
@ -69,7 +69,7 @@ Plugin :: struct {
|
||||||
iter: Iterator,
|
iter: Iterator,
|
||||||
buffer: Buffer,
|
buffer: Buffer,
|
||||||
|
|
||||||
register_highlighter: proc "c" (state: rawptr, extension: cstring, on_color_buffer: OnColorBufferProc),
|
register_highlighter: proc "c" (extension: cstring, on_color_buffer: OnColorBufferProc),
|
||||||
}
|
}
|
||||||
|
|
||||||
load_proc_address :: proc(lib_path: string, library: dynlib.Library, symbol: string, $ProcType: typeid) -> ProcType
|
load_proc_address :: proc(lib_path: string, library: dynlib.Library, symbol: string, $ProcType: typeid) -> ProcType
|
||||||
|
|
Loading…
Reference in New Issue