Upgraded virtual whitespace layout
parent
b5e3812014
commit
c4664e8ed5
|
@ -732,6 +732,19 @@ CUSTOM_DOC("Toggles the left margin line numbers.")
|
|||
global_config.show_line_number_margins = !global_config.show_line_number_margins;
|
||||
}
|
||||
|
||||
CUSTOM_COMMAND_SIG(toggle_line_wrap)
|
||||
CUSTOM_DOC("Toggles the line wrap setting on this buffer.")
|
||||
{
|
||||
View_ID view = get_active_view(app, Access_ReadVisible);
|
||||
Buffer_ID buffer = view_get_buffer(app, view, Access_Always);
|
||||
Managed_Scope scope = buffer_get_managed_scope(app, buffer);
|
||||
b32 *wrap_lines_ptr = scope_attachment(app, scope, buffer_wrap_lines, b32);
|
||||
if (wrap_lines_ptr != 0){
|
||||
*wrap_lines_ptr = !(*wrap_lines_ptr);
|
||||
buffer_clear_layout_cache(app, buffer);
|
||||
}
|
||||
}
|
||||
|
||||
CUSTOM_COMMAND_SIG(exit_4coder)
|
||||
CUSTOM_DOC("Attempts to close 4coder.")
|
||||
{
|
||||
|
|
|
@ -10,8 +10,7 @@ function void
|
|||
code_index_init(void){
|
||||
global_code_index.mutex = system_mutex_make();
|
||||
global_code_index.node_arena = make_arena_system(KB(4));
|
||||
global_code_index.buffer_to_index_file =
|
||||
make_table_u64_u64(global_code_index.node_arena.base_allocator, 500);
|
||||
global_code_index.buffer_to_index_file = make_table_u64_u64(global_code_index.node_arena.base_allocator, 500);
|
||||
}
|
||||
|
||||
function Code_Index_File_Storage*
|
||||
|
@ -547,8 +546,7 @@ generic_parse_full_input_breaks(Code_Index_File *index, Generic_Parse_State *sta
|
|||
////////////////////////////////
|
||||
|
||||
function void
|
||||
default_comment_index(Application_Links *app, Arena *arena, Code_Index_File *index,
|
||||
Token *token, String_Const_u8 contents){
|
||||
default_comment_index(Application_Links *app, Arena *arena, Code_Index_File *index, Token *token, String_Const_u8 contents){
|
||||
|
||||
}
|
||||
|
||||
|
@ -559,16 +557,35 @@ generic_parse_init(Application_Links *app, Arena *arena, String_Const_u8 content
|
|||
|
||||
////////////////////////////////
|
||||
|
||||
function Token_Pair
|
||||
layout_token_pair(Token_Array *tokens, i64 pos){
|
||||
Token_Iterator_Array it = token_iterator_pos(0, tokens, pos);
|
||||
Token *b = token_it_read(&it);
|
||||
if (b->kind == TokenBaseKind_Whitespace){
|
||||
token_it_inc_non_whitespace(&it);
|
||||
b = token_it_read(&it);
|
||||
}
|
||||
token_it_dec_non_whitespace(&it);
|
||||
Token *a = token_it_read(&it);
|
||||
Token_Pair result = {};
|
||||
if (a != 0){
|
||||
result.a = *a;
|
||||
}
|
||||
if (b != 0){
|
||||
result.b = *b;
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
function f32
|
||||
layout_index_x_shift(Application_Links *app, Layout_Reflex *reflex, Code_Index_Nest *nest, i64 pos, f32 space_advance){
|
||||
layout_index_x_shift(Application_Links *app, Layout_Reflex *reflex, Code_Index_Nest *nest, i64 pos, f32 space_advance, b32 *unresolved_dependence){
|
||||
f32 result = 0.f;
|
||||
if (nest != 0){
|
||||
switch (nest->kind){
|
||||
case CodeIndexNest_Scope:
|
||||
case CodeIndexNest_Preprocessor:
|
||||
{
|
||||
|
||||
result = layout_index_x_shift(app, reflex, nest->parent, pos, space_advance);
|
||||
result = layout_index_x_shift(app, reflex, nest->parent, pos, space_advance, unresolved_dependence);
|
||||
if (nest->open.min < pos && nest->open.max <= pos &&
|
||||
(!nest->is_closed || pos < nest->close.min)){
|
||||
result += 4.f*space_advance;
|
||||
|
@ -577,7 +594,7 @@ layout_index_x_shift(Application_Links *app, Layout_Reflex *reflex, Code_Index_N
|
|||
|
||||
case CodeIndexNest_Statement:
|
||||
{
|
||||
result = layout_index_x_shift(app, reflex, nest->parent, pos, space_advance);
|
||||
result = layout_index_x_shift(app, reflex, nest->parent, pos, space_advance, unresolved_dependence);
|
||||
if (nest->open.min < pos && nest->open.max <= pos &&
|
||||
(!nest->is_closed || pos < nest->close.min)){
|
||||
result += 4.f*space_advance;
|
||||
|
@ -586,7 +603,7 @@ layout_index_x_shift(Application_Links *app, Layout_Reflex *reflex, Code_Index_N
|
|||
|
||||
case CodeIndexNest_Paren:
|
||||
{
|
||||
Rect_f32 box = layout_reflex_get_rect(app, reflex, nest->open.max - 1);
|
||||
Rect_f32 box = layout_reflex_get_rect(app, reflex, nest->open.max - 1, unresolved_dependence);
|
||||
result = box.x1;
|
||||
}break;
|
||||
}
|
||||
|
@ -595,19 +612,63 @@ layout_index_x_shift(Application_Links *app, Layout_Reflex *reflex, Code_Index_N
|
|||
}
|
||||
|
||||
function f32
|
||||
layout_index_x_shift(Application_Links *app, Layout_Reflex *reflex, Code_Index_File *file, i64 pos, f32 space_advance){
|
||||
layout_index_x_shift(Application_Links *app, Layout_Reflex *reflex, Code_Index_Nest *nest, i64 pos, f32 space_advance){
|
||||
b32 ignore;
|
||||
return(layout_index_x_shift(app, reflex, nest, pos, space_advance, &ignore));
|
||||
}
|
||||
|
||||
function f32
|
||||
layout_index_x_shift(Application_Links *app, Layout_Reflex *reflex, Code_Index_File *file, i64 pos, f32 space_advance, b32 *unresolved_dependence){
|
||||
f32 indent = 0;
|
||||
Code_Index_Nest *nest = code_index_get_nest(file, pos);
|
||||
if (nest != 0){
|
||||
indent = layout_index_x_shift(app, reflex, nest, pos, space_advance);
|
||||
indent = layout_index_x_shift(app, reflex, nest, pos, space_advance, unresolved_dependence);
|
||||
}
|
||||
return(indent);
|
||||
}
|
||||
|
||||
function f32
|
||||
layout_index_x_shift(Application_Links *app, Layout_Reflex *reflex, Code_Index_File *file, i64 pos, f32 space_advance){
|
||||
b32 ignore;
|
||||
return(layout_index_x_shift(app, reflex, file, pos, space_advance, &ignore));
|
||||
}
|
||||
|
||||
function void
|
||||
layout_index__emit_chunk(LefRig_TopBot_Layout_Vars *pos_vars, Arena *arena, u8 *text_str, i64 range_first, u8 *ptr, u8 *end, Layout_Item_List *list){
|
||||
for (;ptr < end;){
|
||||
Character_Consume_Result consume = utf8_consume(ptr, (umem)(end - ptr));
|
||||
if (consume.codepoint != '\r'){
|
||||
i64 index = layout_index_from_ptr(ptr, text_str, range_first);
|
||||
if (consume.codepoint != max_u32){
|
||||
lr_tb_write(pos_vars, arena, list, index, consume.codepoint);
|
||||
}
|
||||
else{
|
||||
lr_tb_write_byte(pos_vars, arena, list, index, *ptr);
|
||||
}
|
||||
}
|
||||
ptr += consume.inc;
|
||||
}
|
||||
}
|
||||
|
||||
function i32
|
||||
layout_token_score_wrap_token(Token_Pair *pair, Token_Cpp_Kind kind){
|
||||
i32 result = 0;
|
||||
if (pair->a.sub_kind != kind && pair->b.sub_kind == kind){
|
||||
result -= 1;
|
||||
}
|
||||
else if (pair->a.sub_kind == kind && pair->b.sub_kind != kind){
|
||||
result += 1;
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
function Layout_Item_List
|
||||
layout_index_unwrapped__inner(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width, Code_Index_File *file){
|
||||
layout_index__inner(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width, Code_Index_File *file, Layout_Wrap_Kind kind){
|
||||
Scratch_Block scratch(app);
|
||||
|
||||
Managed_Scope scope = buffer_get_managed_scope(app, buffer);
|
||||
Token_Array *tokens_ptr = scope_attachment(app, scope, attachment_tokens, Token_Array);
|
||||
|
||||
Layout_Item_List list = get_empty_item_list(range);
|
||||
String_Const_u8 text = push_buffer_range(app, scratch, buffer, range);
|
||||
|
||||
|
@ -630,92 +691,173 @@ layout_index_unwrapped__inner(Application_Links *app, Arena *arena, Buffer_ID bu
|
|||
u8 *end_ptr = ptr + text.size;
|
||||
u8 *word_ptr = ptr;
|
||||
|
||||
u8 *pending_wrap_ptr = ptr;
|
||||
f32 pending_wrap_x = 0.f;
|
||||
i32 pending_wrap_paren_nest_count = 0;
|
||||
i32 pending_wrap_token_score = 0;
|
||||
f32 pending_wrap_accumulated_w = 0.f;
|
||||
|
||||
start:
|
||||
if (ptr == end_ptr){
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!character_is_whitespace(*ptr)){
|
||||
goto consuming_non_whitespace;
|
||||
}
|
||||
|
||||
skipping_leading_whitespace:
|
||||
{
|
||||
for (;ptr < end_ptr; ptr += 1){
|
||||
if (!character_is_whitespace(*ptr)){
|
||||
pending_wrap_ptr = ptr;
|
||||
word_ptr = ptr;
|
||||
i64 index = layout_index_from_ptr(ptr, text.str, range.first);
|
||||
f32 shift = layout_index_x_shift(app, &reflex, file, index, metrics.space_advance);
|
||||
lr_tb_advance_x_without_item(&pos_vars, shift);
|
||||
goto consuming_non_whitespace;
|
||||
}
|
||||
if (*ptr == '\n'){
|
||||
pending_wrap_ptr = ptr;
|
||||
i64 index = layout_index_from_ptr(ptr, text.str, range.first);
|
||||
f32 shift = layout_index_x_shift(app, &reflex, file, index, metrics.space_advance);
|
||||
lr_tb_advance_x_without_item(&pos_vars, shift);
|
||||
goto consuming_normal_whitespace;
|
||||
}
|
||||
}
|
||||
|
||||
if (ptr == end_ptr){
|
||||
pending_wrap_ptr = ptr;
|
||||
i64 index = layout_index_from_ptr(ptr - 1, text.str, range.first);
|
||||
f32 shift = layout_index_x_shift(app, &reflex, file, index, metrics.space_advance);
|
||||
lr_tb_advance_x_without_item(&pos_vars, shift);
|
||||
goto finish;
|
||||
}
|
||||
}
|
||||
|
||||
consuming_non_whitespace:
|
||||
{
|
||||
for (;ptr <= end_ptr; ptr += 1){
|
||||
if (ptr == end_ptr || character_is_whitespace(*ptr)){
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
// NOTE(allen): measure this word
|
||||
newline_layout_consume_default(&newline_vars);
|
||||
|
||||
String_Const_u8 word = SCu8(word_ptr, ptr);
|
||||
u8 *word_end = ptr;
|
||||
|
||||
if (!first_of_the_line){
|
||||
f32 total_advance = 0.f;
|
||||
{
|
||||
f32 word_advance = 0.f;
|
||||
ptr = word.str;
|
||||
for (;ptr < word_end;){
|
||||
Character_Consume_Result consume =
|
||||
utf8_consume(ptr, (umem)(word_end - ptr));
|
||||
Character_Consume_Result consume = utf8_consume(ptr, (umem)(word_end - ptr));
|
||||
if (consume.codepoint != max_u32){
|
||||
total_advance += lr_tb_advance(&pos_vars, consume.codepoint);
|
||||
word_advance += lr_tb_advance(&pos_vars, consume.codepoint);
|
||||
}
|
||||
else{
|
||||
total_advance += lr_tb_advance_byte(&pos_vars);
|
||||
word_advance += lr_tb_advance_byte(&pos_vars);
|
||||
}
|
||||
ptr += consume.inc;
|
||||
}
|
||||
pending_wrap_accumulated_w += word_advance;
|
||||
}
|
||||
|
||||
if (lr_tb_crosses_width(&pos_vars, total_advance)){
|
||||
i64 index = layout_index_from_ptr(word.str, text.str, range.first);
|
||||
if (!first_of_the_line && (kind == Layout_Wrapped) && lr_tb_crosses_width(&pos_vars, pending_wrap_accumulated_w)){
|
||||
i64 index = layout_index_from_ptr(pending_wrap_ptr, text.str, range.first);
|
||||
lr_tb_align_rightward(&pos_vars, wrap_align_x);
|
||||
lr_tb_write_ghost(&pos_vars, arena, &list, index, '\\');
|
||||
|
||||
lr_tb_next_line(&pos_vars);
|
||||
f32 shift = layout_index_x_shift(app, &reflex, file, index, metrics.space_advance);
|
||||
lr_tb_advance_x_without_item(&pos_vars, shift);
|
||||
}
|
||||
}
|
||||
else{
|
||||
i64 index = layout_index_from_ptr(word.str, text.str, range.first);
|
||||
f32 shift = layout_index_x_shift(app, &reflex, file, index, metrics.space_advance);
|
||||
lr_tb_advance_x_without_item(&pos_vars, shift);
|
||||
}
|
||||
|
||||
ptr = word.str;
|
||||
|
||||
for (;ptr < word_end;){
|
||||
Character_Consume_Result consume =
|
||||
utf8_consume(ptr, (umem)(word_end - ptr));
|
||||
i64 index = layout_index_from_ptr(ptr, text.str, range.first);
|
||||
|
||||
if (consume.codepoint != max_u32){
|
||||
lr_tb_write(&pos_vars, arena, &list, index, consume.codepoint);
|
||||
ptr = pending_wrap_ptr;
|
||||
pending_wrap_accumulated_w = 0.f;
|
||||
first_of_the_line = true;
|
||||
goto start;
|
||||
}
|
||||
else{
|
||||
lr_tb_write_byte(&pos_vars, arena, &list, index, *ptr);
|
||||
}
|
||||
|
||||
ptr += consume.inc;
|
||||
}
|
||||
|
||||
first_of_the_line = false;
|
||||
}
|
||||
|
||||
consuming_normal_whitespace:
|
||||
for (; ptr < end_ptr; ptr += 1){
|
||||
if (!character_is_whitespace(*ptr)){
|
||||
u8 *new_wrap_ptr = ptr;
|
||||
|
||||
i64 index = layout_index_from_ptr(new_wrap_ptr, text.str, range.first);
|
||||
Code_Index_Nest *new_wrap_nest = code_index_get_nest(file, index);
|
||||
b32 invalid_wrap_x = false;
|
||||
f32 new_wrap_x = layout_index_x_shift(app, &reflex, new_wrap_nest, index, metrics.space_advance, &invalid_wrap_x);
|
||||
if (invalid_wrap_x){
|
||||
new_wrap_x = max_f32;
|
||||
}
|
||||
|
||||
i32 new_wrap_paren_nest_count = 0;
|
||||
for (Code_Index_Nest *nest = new_wrap_nest;
|
||||
nest != 0;
|
||||
nest = nest->parent){
|
||||
if (nest->kind == CodeIndexNest_Paren){
|
||||
new_wrap_paren_nest_count += 1;
|
||||
}
|
||||
}
|
||||
|
||||
Token_Pair new_wrap_token_pair = layout_token_pair(tokens_ptr, index);
|
||||
|
||||
// TODO(allen): pull out the token scoring part and make it replacable for other
|
||||
// language's token based wrap scoring needs.
|
||||
i32 token_score = 0;
|
||||
if (new_wrap_token_pair.a.kind == TokenBaseKind_Keyword){
|
||||
if (new_wrap_token_pair.b.kind == TokenBaseKind_ParentheticalOpen ||
|
||||
new_wrap_token_pair.b.kind == TokenBaseKind_Keyword){
|
||||
token_score -= 2;
|
||||
}
|
||||
}
|
||||
token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_Eq);
|
||||
token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_PlusEq);
|
||||
token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_MinusEq);
|
||||
token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_StarEq);
|
||||
token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_DivEq);
|
||||
token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_ModEq);
|
||||
token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_LeftLeftEq);
|
||||
token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_RightRightEq);
|
||||
token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_Comma);
|
||||
token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_AndAnd);
|
||||
token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_OrOr);
|
||||
token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_Ternary);
|
||||
token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_Colon);
|
||||
token_score += layout_token_score_wrap_token(&new_wrap_token_pair, TokenCppKind_Semicolon);
|
||||
|
||||
i32 new_wrap_token_score = token_score;
|
||||
|
||||
b32 new_wrap_ptr_is_better = false;
|
||||
if (first_of_the_line){
|
||||
new_wrap_ptr_is_better = true;
|
||||
}
|
||||
else{
|
||||
if (new_wrap_token_score > pending_wrap_token_score){
|
||||
new_wrap_ptr_is_better = true;
|
||||
}
|
||||
else if (new_wrap_token_score == pending_wrap_token_score){
|
||||
f32 new_score = new_wrap_paren_nest_count*10.f + new_wrap_x;
|
||||
f32 old_score = pending_wrap_paren_nest_count*10.f + pending_wrap_x + metrics.normal_advance*4.f + pending_wrap_accumulated_w*0.5f;
|
||||
|
||||
if (new_score < old_score){
|
||||
new_wrap_ptr_is_better = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (new_wrap_ptr_is_better){
|
||||
layout_index__emit_chunk(&pos_vars, arena, text.str, range.first, pending_wrap_ptr, new_wrap_ptr, &list);
|
||||
first_of_the_line = false;
|
||||
|
||||
pending_wrap_ptr = new_wrap_ptr;
|
||||
pending_wrap_paren_nest_count = new_wrap_paren_nest_count;
|
||||
pending_wrap_x = layout_index_x_shift(app, &reflex, new_wrap_nest, index, metrics.space_advance);
|
||||
pending_wrap_paren_nest_count = new_wrap_paren_nest_count;
|
||||
pending_wrap_token_score = new_wrap_token_score;
|
||||
pending_wrap_accumulated_w = 0.f;
|
||||
}
|
||||
|
||||
word_ptr = ptr;
|
||||
goto consuming_non_whitespace;
|
||||
}
|
||||
|
@ -725,8 +867,7 @@ layout_index_unwrapped__inner(Application_Links *app, Arena *arena, Buffer_ID bu
|
|||
default:
|
||||
{
|
||||
newline_layout_consume_default(&newline_vars);
|
||||
lr_tb_write(&pos_vars, arena, &list, index, *ptr);
|
||||
first_of_the_line = false;
|
||||
pending_wrap_accumulated_w += lr_tb_advance(&pos_vars, *ptr);
|
||||
}break;
|
||||
|
||||
case '\r':
|
||||
|
@ -736,30 +877,24 @@ layout_index_unwrapped__inner(Application_Links *app, Arena *arena, Buffer_ID bu
|
|||
|
||||
case '\n':
|
||||
{
|
||||
if (first_of_the_line){
|
||||
f32 shift = layout_index_x_shift(app, &reflex, file, index,
|
||||
metrics.space_advance);
|
||||
lr_tb_advance_x_without_item(&pos_vars, shift);
|
||||
}
|
||||
layout_index__emit_chunk(&pos_vars, arena, text.str, range.first, pending_wrap_ptr, ptr, &list);
|
||||
pending_wrap_ptr = ptr + 1;
|
||||
pending_wrap_accumulated_w = 0.f;
|
||||
|
||||
u64 newline_index = newline_layout_consume_LF(&newline_vars, index);
|
||||
lr_tb_write_blank(&pos_vars, arena, &list, newline_index);
|
||||
lr_tb_next_line(&pos_vars);
|
||||
first_of_the_line = true;
|
||||
ptr += 1;
|
||||
goto skipping_leading_whitespace;
|
||||
goto start;
|
||||
}break;
|
||||
}
|
||||
}
|
||||
|
||||
finish:
|
||||
if (newline_layout_consume_finish(&newline_vars)){
|
||||
layout_index__emit_chunk(&pos_vars, arena, text.str, range.first, pending_wrap_ptr, ptr, &list);
|
||||
i64 index = layout_index_from_ptr(ptr, text.str, range.first);
|
||||
if (first_of_the_line){
|
||||
f32 shift = layout_index_x_shift(app, &reflex, file, index,
|
||||
metrics.space_advance);
|
||||
lr_tb_advance_x_without_item(&pos_vars, shift);
|
||||
}
|
||||
lr_tb_write_blank(&pos_vars, arena, &list, index);
|
||||
}
|
||||
}
|
||||
|
@ -769,32 +904,46 @@ layout_index_unwrapped__inner(Application_Links *app, Arena *arena, Buffer_ID bu
|
|||
return(list);
|
||||
}
|
||||
|
||||
|
||||
|
||||
function Layout_Item_List
|
||||
layout_virt_indent_index_unwrapped(Application_Links *app, Arena *arena,
|
||||
Buffer_ID buffer, Range_i64 range, Face_ID face,
|
||||
f32 width){
|
||||
layout_virt_indent_index(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width, Layout_Wrap_Kind kind){
|
||||
Layout_Item_List result = {};
|
||||
|
||||
if (global_config.enable_virtual_whitespace){
|
||||
code_index_lock();
|
||||
Code_Index_File *file = code_index_get_file(buffer);
|
||||
if (file != 0){
|
||||
result = layout_index_unwrapped__inner(app, arena, buffer, range, face, width, file);
|
||||
result = layout_index__inner(app, arena, buffer, range, face, width, file, kind);
|
||||
}
|
||||
code_index_unlock();
|
||||
if (file == 0){
|
||||
result = layout_virt_indent_literal_unwrapped(app, arena, buffer, range, face, width);
|
||||
result = layout_virt_indent_literal(app, arena, buffer, range, face, width, kind);
|
||||
}
|
||||
}
|
||||
else{
|
||||
result = layout_wrap_whitespace(app, arena, buffer, range, face, width);
|
||||
result = layout_basic(app, arena, buffer, range, face, width, kind);
|
||||
}
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
function Layout_Item_List
|
||||
layout_virt_indent_index_unwrapped(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width){
|
||||
return(layout_virt_indent_index(app, arena, buffer, range, face, width, Layout_Unwrapped));
|
||||
}
|
||||
|
||||
function Layout_Item_List
|
||||
layout_virt_indent_index_wrapped(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width){
|
||||
return(layout_virt_indent_index(app, arena, buffer, range, face, width, Layout_Wrapped));
|
||||
}
|
||||
|
||||
function Layout_Item_List
|
||||
layout_virt_indent_index_generic(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width){
|
||||
Managed_Scope scope = buffer_get_managed_scope(app, buffer);
|
||||
b32 *wrap_lines_ptr = scope_attachment(app, scope, buffer_wrap_lines, b32);
|
||||
b32 wrap_lines = (wrap_lines_ptr != 0 && *wrap_lines_ptr);
|
||||
return(layout_virt_indent_index(app, arena, buffer, range, face, width, wrap_lines?Layout_Wrapped:Layout_Unwrapped));
|
||||
}
|
||||
|
||||
CUSTOM_COMMAND_SIG(toggle_virtual_whitespace)
|
||||
CUSTOM_DOC("Toggles the current buffer's virtual whitespace status.")
|
||||
{
|
||||
|
|
|
@ -45,6 +45,7 @@ global Managed_ID view_word_complete_menu = 0;
|
|||
global Managed_ID buffer_map_id = 0;
|
||||
global Managed_ID buffer_eol_setting = 0;
|
||||
global Managed_ID buffer_lex_task = 0;
|
||||
global Managed_ID buffer_wrap_lines = 0;
|
||||
|
||||
global Managed_ID sticky_jump_marker_handle = 0;
|
||||
|
||||
|
|
|
@ -955,12 +955,12 @@ BUFFER_HOOK_SIG(default_begin_buffer){
|
|||
buffer_map_id = managed_id_declare(app, SCu8("DEFAULT.buffer_map_id"));
|
||||
buffer_eol_setting = managed_id_declare(app, SCu8("DEFAULT.buffer_eol_setting"));
|
||||
buffer_lex_task = managed_id_declare(app, SCu8("DEFAULT.buffer_lex_task"));
|
||||
buffer_wrap_lines = managed_id_declare(app, SCu8("DEFAULT.buffer_wrap_lines"));
|
||||
}
|
||||
|
||||
Command_Map_ID map_id = (treat_as_code)?(default_code_map):(mapid_file);
|
||||
Managed_Scope scope = buffer_get_managed_scope(app, buffer_id);
|
||||
Command_Map_ID *map_id_ptr = scope_attachment(app, scope, buffer_map_id,
|
||||
Command_Map_ID);
|
||||
Command_Map_ID *map_id_ptr = scope_attachment(app, scope, buffer_map_id, Command_Map_ID);
|
||||
*map_id_ptr = map_id;
|
||||
|
||||
Line_Ending_Kind setting = guess_line_ending_kind_from_buffer_contents(app, buffer_id);
|
||||
|
@ -988,33 +988,20 @@ BUFFER_HOOK_SIG(default_begin_buffer){
|
|||
*lex_task_ptr = async_task_no_dep(&global_async_system, do_full_lex_async, make_data_struct(&buffer_id));
|
||||
}
|
||||
|
||||
if (wrap_lines){
|
||||
{
|
||||
b32 *wrap_lines_ptr = scope_attachment(app, scope, buffer_wrap_lines, b32);
|
||||
*wrap_lines_ptr = wrap_lines;
|
||||
}
|
||||
if (use_virtual_whitespace){
|
||||
if (use_lexer){
|
||||
buffer_set_layout(app, buffer_id, layout_virt_indent_index_unwrapped);
|
||||
//buffer_set_layout(app, buffer_id, layout_virt_indent_literal_unwrapped);
|
||||
buffer_set_layout(app, buffer_id, layout_virt_indent_index_generic);
|
||||
}
|
||||
else{
|
||||
buffer_set_layout(app, buffer_id, layout_virt_indent_literal_unwrapped);
|
||||
buffer_set_layout(app, buffer_id, layout_virt_indent_literal_generic);
|
||||
}
|
||||
}
|
||||
else{
|
||||
buffer_set_layout(app, buffer_id, layout_wrap_whitespace);
|
||||
}
|
||||
}
|
||||
else{
|
||||
if (use_virtual_whitespace){
|
||||
if (use_lexer){
|
||||
buffer_set_layout(app, buffer_id, layout_virt_indent_index_unwrapped);
|
||||
//buffer_set_layout(app, buffer_id, layout_virt_indent_literal_unwrapped);
|
||||
}
|
||||
else{
|
||||
buffer_set_layout(app, buffer_id, layout_virt_indent_literal_unwrapped);
|
||||
}
|
||||
}
|
||||
else{
|
||||
buffer_set_layout(app, buffer_id, layout_unwrapped);
|
||||
}
|
||||
buffer_set_layout(app, buffer_id, layout_generic);
|
||||
}
|
||||
|
||||
// no meaning for return
|
||||
|
|
|
@ -15,14 +15,21 @@ get_layout_reflex(Layout_Item_List *list, Buffer_ID buffer, f32 width, Face_ID f
|
|||
}
|
||||
|
||||
function Rect_f32
|
||||
layout_reflex_get_rect(Application_Links *app, Layout_Reflex *reflex, i64 pos){
|
||||
layout_reflex_get_rect(Application_Links *app, Layout_Reflex *reflex, i64 pos, b32 *unresolved_dependence){
|
||||
Rect_f32 rect = {};
|
||||
if (range_contains(reflex->list->input_index_range, pos)){
|
||||
if (range_contains(reflex->list->manifested_index_range, pos)){
|
||||
rect = layout_box_of_pos(*reflex->list, pos);
|
||||
*unresolved_dependence = false;
|
||||
}
|
||||
else{
|
||||
*unresolved_dependence = true;
|
||||
}
|
||||
}
|
||||
else{
|
||||
Buffer_Cursor cursor = buffer_compute_cursor(app, reflex->buffer, seek_pos(pos));
|
||||
rect = buffer_relative_box_of_pos(app, reflex->buffer, reflex->width, reflex->face, cursor.line, cursor.pos);
|
||||
*unresolved_dependence = false;
|
||||
}
|
||||
return(rect);
|
||||
}
|
||||
|
@ -272,9 +279,7 @@ lr_tb_align_rightward(LefRig_TopBot_Layout_Vars *vars, f32 align_x){
|
|||
////////////////////////////////
|
||||
|
||||
function Layout_Item_List
|
||||
layout_unwrapped_small_blank_lines(Application_Links *app, Arena *arena,
|
||||
Buffer_ID buffer, Range_i64 range, Face_ID face,
|
||||
f32 width){
|
||||
layout_unwrapped_small_blank_lines(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width){
|
||||
Layout_Item_List list = get_empty_item_list(range);
|
||||
|
||||
Scratch_Block scratch(app);
|
||||
|
@ -368,72 +373,7 @@ layout_unwrapped_small_blank_lines(Application_Links *app, Arena *arena,
|
|||
}
|
||||
|
||||
function Layout_Item_List
|
||||
layout_unwrapped(Application_Links *app, Arena *arena, Buffer_ID buffer,
|
||||
Range_i64 range, Face_ID face, f32 width){
|
||||
Layout_Item_List list = get_empty_item_list(range);
|
||||
|
||||
Scratch_Block scratch(app);
|
||||
String_Const_u8 text = push_buffer_range(app, scratch, buffer, range);
|
||||
|
||||
Face_Advance_Map advance_map = get_face_advance_map(app, face);
|
||||
Face_Metrics metrics = get_face_metrics(app, face);
|
||||
LefRig_TopBot_Layout_Vars pos_vars = get_lr_tb_layout_vars(&advance_map, &metrics, width);
|
||||
|
||||
if (text.size == 0){
|
||||
lr_tb_write_blank(&pos_vars, arena, &list, range.first);
|
||||
}
|
||||
else{
|
||||
Newline_Layout_Vars newline_vars = get_newline_layout_vars();
|
||||
|
||||
u8 *ptr = text.str;
|
||||
u8 *end_ptr = ptr + text.size;
|
||||
for (;ptr < end_ptr;){
|
||||
Character_Consume_Result consume = utf8_consume(ptr, (umem)(end_ptr - ptr));
|
||||
|
||||
i64 index = layout_index_from_ptr(ptr, text.str, range.first);
|
||||
switch (consume.codepoint){
|
||||
default:
|
||||
{
|
||||
newline_layout_consume_default(&newline_vars);
|
||||
lr_tb_write(&pos_vars, arena, &list, index, consume.codepoint);
|
||||
}break;
|
||||
|
||||
case '\r':
|
||||
{
|
||||
newline_layout_consume_CR(&newline_vars, index);
|
||||
}break;
|
||||
|
||||
case '\n':
|
||||
{
|
||||
i64 newline_index = newline_layout_consume_LF(&newline_vars, index);
|
||||
lr_tb_write_blank(&pos_vars, arena, &list, newline_index);
|
||||
lr_tb_next_line(&pos_vars);
|
||||
}break;
|
||||
|
||||
case max_u32:
|
||||
{
|
||||
newline_layout_consume_default(&newline_vars);
|
||||
lr_tb_write_byte(&pos_vars, arena, &list, index, *ptr);
|
||||
}break;
|
||||
}
|
||||
|
||||
ptr += consume.inc;
|
||||
}
|
||||
|
||||
if (newline_layout_consume_finish(&newline_vars)){
|
||||
i64 index = layout_index_from_ptr(ptr, text.str, range.first);
|
||||
lr_tb_write_blank(&pos_vars, arena, &list, index);
|
||||
}
|
||||
}
|
||||
|
||||
layout_item_list_finish(&list, -pos_vars.line_to_text_shift);
|
||||
|
||||
return(list);
|
||||
}
|
||||
|
||||
function Layout_Item_List
|
||||
layout_wrap_anywhere(Application_Links *app, Arena *arena, Buffer_ID buffer,
|
||||
Range_i64 range, Face_ID face, f32 width){
|
||||
layout_wrap_anywhere(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width){
|
||||
Scratch_Block scratch(app);
|
||||
|
||||
Layout_Item_List list = get_empty_item_list(range);
|
||||
|
@ -509,8 +449,84 @@ layout_wrap_anywhere(Application_Links *app, Arena *arena, Buffer_ID buffer,
|
|||
}
|
||||
|
||||
function Layout_Item_List
|
||||
layout_wrap_whitespace(Application_Links *app, Arena *arena, Buffer_ID buffer,
|
||||
Range_i64 range, Face_ID face, f32 width){
|
||||
layout_unwrapped__inner(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width, Layout_Virtual_Indent virt_indent){
|
||||
Layout_Item_List list = get_empty_item_list(range);
|
||||
|
||||
Scratch_Block scratch(app);
|
||||
String_Const_u8 text = push_buffer_range(app, scratch, buffer, range);
|
||||
|
||||
Face_Advance_Map advance_map = get_face_advance_map(app, face);
|
||||
Face_Metrics metrics = get_face_metrics(app, face);
|
||||
LefRig_TopBot_Layout_Vars pos_vars = get_lr_tb_layout_vars(&advance_map, &metrics, width);
|
||||
|
||||
if (text.size == 0){
|
||||
lr_tb_write_blank(&pos_vars, arena, &list, range.first);
|
||||
}
|
||||
else{
|
||||
b32 skipping_leading_whitespace = (virt_indent == LayoutVirtualIndent_On);
|
||||
Newline_Layout_Vars newline_vars = get_newline_layout_vars();
|
||||
|
||||
u8 *ptr = text.str;
|
||||
u8 *end_ptr = ptr + text.size;
|
||||
for (;ptr < end_ptr;){
|
||||
Character_Consume_Result consume = utf8_consume(ptr, (umem)(end_ptr - ptr));
|
||||
|
||||
i64 index = layout_index_from_ptr(ptr, text.str, range.first);
|
||||
switch (consume.codepoint){
|
||||
case '\t':
|
||||
case ' ':
|
||||
{
|
||||
newline_layout_consume_default(&newline_vars);
|
||||
f32 advance = lr_tb_advance(&pos_vars, consume.codepoint);
|
||||
if (!skipping_leading_whitespace){
|
||||
lr_tb_write_with_advance(&pos_vars, advance, arena, &list, index, consume.codepoint);
|
||||
}
|
||||
else{
|
||||
lr_tb_advance_x_without_item(&pos_vars, advance);
|
||||
}
|
||||
}break;
|
||||
|
||||
default:
|
||||
{
|
||||
newline_layout_consume_default(&newline_vars);
|
||||
lr_tb_write(&pos_vars, arena, &list, index, consume.codepoint);
|
||||
}break;
|
||||
|
||||
case '\r':
|
||||
{
|
||||
newline_layout_consume_CR(&newline_vars, index);
|
||||
}break;
|
||||
|
||||
case '\n':
|
||||
{
|
||||
i64 newline_index = newline_layout_consume_LF(&newline_vars, index);
|
||||
lr_tb_write_blank(&pos_vars, arena, &list, newline_index);
|
||||
lr_tb_next_line(&pos_vars);
|
||||
}break;
|
||||
|
||||
case max_u32:
|
||||
{
|
||||
newline_layout_consume_default(&newline_vars);
|
||||
lr_tb_write_byte(&pos_vars, arena, &list, index, *ptr);
|
||||
}break;
|
||||
}
|
||||
|
||||
ptr += consume.inc;
|
||||
}
|
||||
|
||||
if (newline_layout_consume_finish(&newline_vars)){
|
||||
i64 index = layout_index_from_ptr(ptr, text.str, range.first);
|
||||
lr_tb_write_blank(&pos_vars, arena, &list, index);
|
||||
}
|
||||
}
|
||||
|
||||
layout_item_list_finish(&list, -pos_vars.line_to_text_shift);
|
||||
|
||||
return(list);
|
||||
}
|
||||
|
||||
function Layout_Item_List
|
||||
layout_wrap_whitespace__inner(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width, Layout_Virtual_Indent virt_indent){
|
||||
Scratch_Block scratch(app);
|
||||
|
||||
Layout_Item_List list = get_empty_item_list(range);
|
||||
|
@ -525,6 +541,7 @@ layout_wrap_whitespace(Application_Links *app, Arena *arena, Buffer_ID buffer,
|
|||
lr_tb_write_blank(&pos_vars, arena, &list, range.first);
|
||||
}
|
||||
else{
|
||||
b32 skipping_leading_whitespace = false;
|
||||
b32 first_of_the_line = true;
|
||||
Newline_Layout_Vars newline_vars = get_newline_layout_vars();
|
||||
|
||||
|
@ -533,6 +550,7 @@ layout_wrap_whitespace(Application_Links *app, Arena *arena, Buffer_ID buffer,
|
|||
u8 *word_ptr = ptr;
|
||||
|
||||
if (character_is_whitespace(*ptr)){
|
||||
skipping_leading_whitespace = (virt_indent == LayoutVirtualIndent_On);
|
||||
goto consuming_whitespace;
|
||||
}
|
||||
|
||||
|
@ -598,6 +616,23 @@ layout_wrap_whitespace(Application_Links *app, Arena *arena, Buffer_ID buffer,
|
|||
|
||||
i64 index = layout_index_from_ptr(ptr, text.str, range.first);
|
||||
switch (*ptr){
|
||||
case '\t':
|
||||
case ' ':
|
||||
{
|
||||
newline_layout_consume_default(&newline_vars);
|
||||
f32 advance = lr_tb_advance(&pos_vars, *ptr);
|
||||
if (!skipping_leading_whitespace){
|
||||
if (!first_of_the_line && lr_tb_crosses_width(&pos_vars, advance)){
|
||||
lr_tb_next_line(&pos_vars);
|
||||
}
|
||||
lr_tb_write_with_advance(&pos_vars, advance, arena, &list, index, *ptr);
|
||||
first_of_the_line = false;
|
||||
}
|
||||
else{
|
||||
lr_tb_advance_x_without_item(&pos_vars, advance);
|
||||
}
|
||||
}break;
|
||||
|
||||
default:
|
||||
{
|
||||
newline_layout_consume_default(&newline_vars);
|
||||
|
@ -605,8 +640,7 @@ layout_wrap_whitespace(Application_Links *app, Arena *arena, Buffer_ID buffer,
|
|||
if (!first_of_the_line && lr_tb_crosses_width(&pos_vars, advance)){
|
||||
lr_tb_next_line(&pos_vars);
|
||||
}
|
||||
lr_tb_write_with_advance(&pos_vars, advance,
|
||||
arena, &list, index, *ptr);
|
||||
lr_tb_write_with_advance(&pos_vars, advance, arena, &list, index, *ptr);
|
||||
first_of_the_line = false;
|
||||
}break;
|
||||
|
||||
|
@ -637,89 +671,71 @@ layout_wrap_whitespace(Application_Links *app, Arena *arena, Buffer_ID buffer,
|
|||
}
|
||||
|
||||
function Layout_Item_List
|
||||
layout_virt_indent_literal_unwrapped(Application_Links *app, Arena *arena,
|
||||
Buffer_ID buffer, Range_i64 range, Face_ID face,
|
||||
f32 width){
|
||||
Scratch_Block scratch(app);
|
||||
|
||||
Layout_Item_List list = get_empty_item_list(range);
|
||||
|
||||
String_Const_u8 text = push_buffer_range(app, scratch, buffer, range);
|
||||
|
||||
Face_Advance_Map advance_map = get_face_advance_map(app, face);
|
||||
Face_Metrics metrics = get_face_metrics(app, face);
|
||||
LefRig_TopBot_Layout_Vars pos_vars = get_lr_tb_layout_vars(&advance_map, &metrics, width);
|
||||
|
||||
if (text.size == 0){
|
||||
lr_tb_write_blank(&pos_vars, arena, &list, range.start);
|
||||
}
|
||||
else{
|
||||
b32 skipping_leading_whitespace = true;
|
||||
Newline_Layout_Vars newline_vars = get_newline_layout_vars();
|
||||
|
||||
u8 *ptr = text.str;
|
||||
u8 *end_ptr = ptr + text.size;
|
||||
for (;ptr < end_ptr;){
|
||||
Character_Consume_Result consume = utf8_consume(ptr, (umem)(end_ptr - ptr));
|
||||
|
||||
if (!character_is_whitespace(consume.codepoint)){
|
||||
skipping_leading_whitespace = false;
|
||||
layout_unwrapped(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width){
|
||||
return(layout_unwrapped__inner(app, arena, buffer, range, face, width, LayoutVirtualIndent_Off));
|
||||
}
|
||||
|
||||
i64 index = layout_index_from_ptr(ptr, text.str, range.first);
|
||||
switch (consume.codepoint){
|
||||
case '\t':
|
||||
case ' ':
|
||||
{
|
||||
newline_layout_consume_default(&newline_vars);
|
||||
f32 advance = lr_tb_advance(&pos_vars, consume.codepoint);
|
||||
if (!skipping_leading_whitespace){
|
||||
lr_tb_write_with_advance(&pos_vars, advance,
|
||||
arena, &list, index,
|
||||
consume.codepoint);
|
||||
function Layout_Item_List
|
||||
layout_wrap_whitespace(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width){
|
||||
return(layout_wrap_whitespace__inner(app, arena, buffer, range, face, width, LayoutVirtualIndent_Off));
|
||||
}
|
||||
else{
|
||||
lr_tb_advance_x_without_item(&pos_vars, advance);
|
||||
}
|
||||
}break;
|
||||
|
||||
default:
|
||||
function Layout_Item_List
|
||||
layout_basic(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width, Layout_Wrap_Kind kind){
|
||||
Layout_Item_List result = {};
|
||||
switch (kind){
|
||||
case Layout_Unwrapped:
|
||||
{
|
||||
newline_layout_consume_default(&newline_vars);
|
||||
lr_tb_write(&pos_vars, arena, &list, index, consume.codepoint);
|
||||
result = layout_unwrapped(app, arena, buffer, range, face, width);
|
||||
}break;
|
||||
|
||||
case '\r':
|
||||
case Layout_Wrapped:
|
||||
{
|
||||
newline_layout_consume_CR(&newline_vars, index);
|
||||
}break;
|
||||
|
||||
case '\n':
|
||||
{
|
||||
i64 newline_index = newline_layout_consume_LF(&newline_vars, index);
|
||||
lr_tb_write_blank(&pos_vars, arena, &list, newline_index);
|
||||
lr_tb_next_line(&pos_vars);
|
||||
}break;
|
||||
|
||||
case max_u32:
|
||||
{
|
||||
newline_layout_consume_default(&newline_vars);
|
||||
lr_tb_write_byte(&pos_vars, arena, &list, index, *ptr);
|
||||
result = layout_wrap_whitespace(app, arena, buffer, range, face, width);
|
||||
}break;
|
||||
}
|
||||
|
||||
ptr += consume.inc;
|
||||
return(result);
|
||||
}
|
||||
|
||||
if (newline_layout_consume_finish(&newline_vars)){
|
||||
i64 index = layout_index_from_ptr(ptr, text.str, range.first);
|
||||
lr_tb_write_blank(&pos_vars, arena, &list, index);
|
||||
}
|
||||
function Layout_Item_List
|
||||
layout_generic(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width){
|
||||
Managed_Scope scope = buffer_get_managed_scope(app, buffer);
|
||||
b32 *wrap_lines_ptr = scope_attachment(app, scope, buffer_wrap_lines, b32);
|
||||
b32 wrap_lines = (wrap_lines_ptr != 0 && *wrap_lines_ptr);
|
||||
return(layout_basic(app, arena, buffer, range, face, width, wrap_lines?Layout_Wrapped:Layout_Unwrapped));
|
||||
}
|
||||
|
||||
layout_item_list_finish(&list, -pos_vars.line_to_text_shift);
|
||||
function Layout_Item_List
|
||||
layout_virt_indent_literal_unwrapped(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width){
|
||||
return(layout_unwrapped__inner(app, arena, buffer, range, face, width, LayoutVirtualIndent_On));
|
||||
}
|
||||
|
||||
return(list);
|
||||
function Layout_Item_List
|
||||
layout_virt_indent_literal_wrapped(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width){
|
||||
return(layout_wrap_whitespace__inner(app, arena, buffer, range, face, width, LayoutVirtualIndent_On));
|
||||
}
|
||||
|
||||
function Layout_Item_List
|
||||
layout_virt_indent_literal(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width, Layout_Wrap_Kind kind){
|
||||
Layout_Item_List result = {};
|
||||
switch (kind){
|
||||
case Layout_Unwrapped:
|
||||
{
|
||||
result = layout_virt_indent_literal_unwrapped(app, arena, buffer, range, face, width);
|
||||
}break;
|
||||
case Layout_Wrapped:
|
||||
{
|
||||
result = layout_virt_indent_literal_wrapped(app, arena, buffer, range, face, width);
|
||||
}break;
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
function Layout_Item_List
|
||||
layout_virt_indent_literal_generic(Application_Links *app, Arena *arena, Buffer_ID buffer, Range_i64 range, Face_ID face, f32 width){
|
||||
Managed_Scope scope = buffer_get_managed_scope(app, buffer);
|
||||
b32 *wrap_lines_ptr = scope_attachment(app, scope, buffer_wrap_lines, b32);
|
||||
b32 wrap_lines = (wrap_lines_ptr != 0 && *wrap_lines_ptr);
|
||||
return(layout_virt_indent_literal(app, arena, buffer, range, face, width, wrap_lines?Layout_Wrapped:Layout_Unwrapped));
|
||||
}
|
||||
|
||||
// BOTTOM
|
||||
|
|
|
@ -33,6 +33,18 @@ struct Layout_Reflex{
|
|||
Face_ID face;
|
||||
};
|
||||
|
||||
typedef i32 Layout_Wrap_Kind;
|
||||
enum{
|
||||
Layout_Unwrapped,
|
||||
Layout_Wrapped,
|
||||
};
|
||||
|
||||
typedef i32 Layout_Virtual_Indent;
|
||||
enum{
|
||||
LayoutVirtualIndent_Off,
|
||||
LayoutVirtualIndent_On,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
// BOTTOM
|
||||
|
|
|
@ -61,6 +61,11 @@ struct Token{
|
|||
u16 sub_flags;
|
||||
};
|
||||
|
||||
struct Token_Pair{
|
||||
Token a;
|
||||
Token b;
|
||||
};
|
||||
|
||||
struct Token_Array{
|
||||
Token *tokens;
|
||||
i64 count;
|
||||
|
|
|
@ -90,7 +90,6 @@ tutorial_render(Application_Links *app, Frame_Info frame_info, View_ID view_id){
|
|||
Face_ID face = get_face_id(app, 0);
|
||||
tutorial_init_title_face(app);
|
||||
Face_Metrics metrics = get_face_metrics(app, face);
|
||||
Face_Metrics tut_metrics = get_face_metrics(app, tutorial.face);
|
||||
|
||||
////////
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#define command_id(c) (fcoder_metacmd_ID_##c)
|
||||
#define command_metadata(c) (&fcoder_metacmd_table[command_id(c)])
|
||||
#define command_metadata_by_id(id) (&fcoder_metacmd_table[id])
|
||||
#define command_one_past_last_id 216
|
||||
#define command_one_past_last_id 217
|
||||
#if defined(CUSTOM_COMMAND_SIG)
|
||||
#define PROC_LINKS(x,y) x
|
||||
#else
|
||||
|
@ -94,6 +94,7 @@ CUSTOM_COMMAND_SIG(decrease_face_size);
|
|||
CUSTOM_COMMAND_SIG(mouse_wheel_change_face_size);
|
||||
CUSTOM_COMMAND_SIG(toggle_show_whitespace);
|
||||
CUSTOM_COMMAND_SIG(toggle_line_numbers);
|
||||
CUSTOM_COMMAND_SIG(toggle_line_wrap);
|
||||
CUSTOM_COMMAND_SIG(exit_4coder);
|
||||
CUSTOM_COMMAND_SIG(goto_line);
|
||||
CUSTOM_COMMAND_SIG(search);
|
||||
|
@ -237,7 +238,7 @@ char *source_name;
|
|||
i32 source_name_len;
|
||||
i32 line_number;
|
||||
};
|
||||
static Command_Metadata fcoder_metacmd_table[216] = {
|
||||
static Command_Metadata fcoder_metacmd_table[217] = {
|
||||
{ PROC_LINKS(default_view_input_handler, 0), false, "default_view_input_handler", 26, "Input consumption loop for default view behavior", 48, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 56 },
|
||||
{ PROC_LINKS(profile_enable, 0), false, "profile_enable", 14, "Allow 4coder's self profiler to gather new profiling information.", 65, "w:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 207 },
|
||||
{ PROC_LINKS(profile_disable, 0), false, "profile_disable", 15, "Prevent 4coder's self profiler from gathering new profiling information.", 72, "w:\\4ed\\code\\custom\\4coder_profile.cpp", 37, 214 },
|
||||
|
@ -248,7 +249,7 @@ static Command_Metadata fcoder_metacmd_table[216] = {
|
|||
{ PROC_LINKS(seek_end_of_line, 0), false, "seek_end_of_line", 16, "Seeks the cursor to the end of the visual line.", 47, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2175 },
|
||||
{ PROC_LINKS(goto_beginning_of_file, 0), false, "goto_beginning_of_file", 22, "Sets the cursor to the beginning of the file.", 45, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2181 },
|
||||
{ PROC_LINKS(goto_end_of_file, 0), false, "goto_end_of_file", 16, "Sets the cursor to the end of the file.", 39, "w:\\4ed\\code\\custom\\4coder_helper.cpp", 36, 2189 },
|
||||
{ PROC_LINKS(toggle_virtual_whitespace, 0), false, "toggle_virtual_whitespace", 25, "Toggles the current buffer's virtual whitespace status.", 55, "w:\\4ed\\code\\custom\\4coder_code_index.cpp", 40, 798 },
|
||||
{ PROC_LINKS(toggle_virtual_whitespace, 0), false, "toggle_virtual_whitespace", 25, "Toggles the current buffer's virtual whitespace status.", 55, "w:\\4ed\\code\\custom\\4coder_code_index.cpp", 40, 945 },
|
||||
{ PROC_LINKS(change_active_panel, 0), false, "change_active_panel", 19, "Change the currently active panel, moving to the panel with the next highest view_id.", 85, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 284 },
|
||||
{ PROC_LINKS(change_active_panel_backwards, 0), false, "change_active_panel_backwards", 29, "Change the currently active panel, moving to the panel with the next lowest view_id.", 84, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 290 },
|
||||
{ PROC_LINKS(open_panel_vsplit, 0), false, "open_panel_vsplit", 17, "Create a new panel by vertically splitting the active panel.", 60, "w:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 300 },
|
||||
|
@ -323,40 +324,41 @@ static Command_Metadata fcoder_metacmd_table[216] = {
|
|||
{ PROC_LINKS(mouse_wheel_change_face_size, 0), false, "mouse_wheel_change_face_size", 28, "Reads the state of the mouse wheel and uses it to either increase or decrease the face size.", 92, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 703 },
|
||||
{ PROC_LINKS(toggle_show_whitespace, 0), false, "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 720 },
|
||||
{ PROC_LINKS(toggle_line_numbers, 0), false, "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 729 },
|
||||
{ PROC_LINKS(exit_4coder, 0), false, "exit_4coder", 11, "Attempts to close 4coder.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 735 },
|
||||
{ PROC_LINKS(goto_line, 0), false, "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 743 },
|
||||
{ PROC_LINKS(search, 0), false, "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 971 },
|
||||
{ PROC_LINKS(reverse_search, 0), false, "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 977 },
|
||||
{ PROC_LINKS(search_identifier, 0), false, "search_identifier", 17, "Begins an incremental search down through the current buffer for the word or token under the cursor.", 100, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 983 },
|
||||
{ PROC_LINKS(reverse_search_identifier, 0), false, "reverse_search_identifier", 25, "Begins an incremental search up through the current buffer for the word or token under the cursor.", 98, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 989 },
|
||||
{ PROC_LINKS(replace_in_range, 0), false, "replace_in_range", 16, "Queries the user for a needle and string. Replaces all occurences of needle with string in the range between cursor and the mark in the active buffer.", 150, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1036 },
|
||||
{ PROC_LINKS(replace_in_buffer, 0), false, "replace_in_buffer", 17, "Queries the user for a needle and string. Replaces all occurences of needle with string in the active buffer.", 109, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1045 },
|
||||
{ PROC_LINKS(replace_in_all_buffers, 0), false, "replace_in_all_buffers", 22, "Queries the user for a needle and string. Replaces all occurences of needle with string in all editable buffers.", 112, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1054 },
|
||||
{ PROC_LINKS(query_replace, 0), false, "query_replace", 13, "Queries the user for two strings, and incrementally replaces every occurence of the first string with the second string.", 120, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1144 },
|
||||
{ PROC_LINKS(query_replace_identifier, 0), false, "query_replace_identifier", 24, "Queries the user for a string, and incrementally replace every occurence of the word or token found at the cursor with the specified string.", 140, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1165 },
|
||||
{ PROC_LINKS(query_replace_selection, 0), false, "query_replace_selection", 23, "Queries the user for a string, and incrementally replace every occurence of the string found in the selected range with the specified string.", 141, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1181 },
|
||||
{ PROC_LINKS(save_all_dirty_buffers, 0), false, "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1217 },
|
||||
{ PROC_LINKS(delete_file_query, 0), false, "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1242 },
|
||||
{ PROC_LINKS(save_to_query, 0), false, "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1286 },
|
||||
{ PROC_LINKS(rename_file_query, 0), false, "rename_file_query", 17, "Queries the user for a new name and renames the file of the current buffer, altering the buffer's name too.", 107, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1319 },
|
||||
{ PROC_LINKS(make_directory_query, 0), false, "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1357 },
|
||||
{ PROC_LINKS(move_line_up, 0), false, "move_line_up", 12, "Swaps the line under the cursor with the line above it, and moves the cursor up with it.", 88, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1391 },
|
||||
{ PROC_LINKS(move_line_down, 0), false, "move_line_down", 14, "Swaps the line under the cursor with the line below it, and moves the cursor down with it.", 90, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1397 },
|
||||
{ PROC_LINKS(duplicate_line, 0), false, "duplicate_line", 14, "Create a copy of the line on which the cursor sits.", 51, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1403 },
|
||||
{ PROC_LINKS(delete_line, 0), false, "delete_line", 11, "Delete the line the on which the cursor sits.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1417 },
|
||||
{ PROC_LINKS(open_file_in_quotes, 0), false, "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1482 },
|
||||
{ PROC_LINKS(open_matching_file_cpp, 0), false, "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1514 },
|
||||
{ PROC_LINKS(view_buffer_other_panel, 0), false, "view_buffer_other_panel", 23, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1527 },
|
||||
{ PROC_LINKS(swap_panels, 0), false, "swap_panels", 11, "Swaps the active panel with it's sibling.", 41, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1539 },
|
||||
{ PROC_LINKS(kill_buffer, 0), false, "kill_buffer", 11, "Kills the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1563 },
|
||||
{ PROC_LINKS(save, 0), false, "save", 4, "Saves the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1571 },
|
||||
{ PROC_LINKS(reopen, 0), false, "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1581 },
|
||||
{ PROC_LINKS(undo, 0), false, "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1806 },
|
||||
{ PROC_LINKS(redo, 0), false, "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1819 },
|
||||
{ PROC_LINKS(undo_all_buffers, 0), false, "undo_all_buffers", 16, "Advances backward through the undo history in the buffer containing the most recent regular edit.", 97, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1833 },
|
||||
{ PROC_LINKS(redo_all_buffers, 0), false, "redo_all_buffers", 16, "Advances forward through the undo history in the buffer containing the most recent regular edit.", 96, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1904 },
|
||||
{ PROC_LINKS(open_in_other, 0), false, "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 2005 },
|
||||
{ PROC_LINKS(default_file_externally_modified, 0), false, "default_file_externally_modified", 32, "Notes the external modification of attached files by printing a message.", 72, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 2011 },
|
||||
{ PROC_LINKS(toggle_line_wrap, 0), false, "toggle_line_wrap", 16, "Toggles the line wrap setting on this buffer.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 735 },
|
||||
{ PROC_LINKS(exit_4coder, 0), false, "exit_4coder", 11, "Attempts to close 4coder.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 748 },
|
||||
{ PROC_LINKS(goto_line, 0), false, "goto_line", 9, "Queries the user for a number, and jumps the cursor to the corresponding line.", 78, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 756 },
|
||||
{ PROC_LINKS(search, 0), false, "search", 6, "Begins an incremental search down through the current buffer for a user specified string.", 89, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 984 },
|
||||
{ PROC_LINKS(reverse_search, 0), false, "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 990 },
|
||||
{ PROC_LINKS(search_identifier, 0), false, "search_identifier", 17, "Begins an incremental search down through the current buffer for the word or token under the cursor.", 100, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 996 },
|
||||
{ PROC_LINKS(reverse_search_identifier, 0), false, "reverse_search_identifier", 25, "Begins an incremental search up through the current buffer for the word or token under the cursor.", 98, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1002 },
|
||||
{ PROC_LINKS(replace_in_range, 0), false, "replace_in_range", 16, "Queries the user for a needle and string. Replaces all occurences of needle with string in the range between cursor and the mark in the active buffer.", 150, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1049 },
|
||||
{ PROC_LINKS(replace_in_buffer, 0), false, "replace_in_buffer", 17, "Queries the user for a needle and string. Replaces all occurences of needle with string in the active buffer.", 109, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1058 },
|
||||
{ PROC_LINKS(replace_in_all_buffers, 0), false, "replace_in_all_buffers", 22, "Queries the user for a needle and string. Replaces all occurences of needle with string in all editable buffers.", 112, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1067 },
|
||||
{ PROC_LINKS(query_replace, 0), false, "query_replace", 13, "Queries the user for two strings, and incrementally replaces every occurence of the first string with the second string.", 120, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1157 },
|
||||
{ PROC_LINKS(query_replace_identifier, 0), false, "query_replace_identifier", 24, "Queries the user for a string, and incrementally replace every occurence of the word or token found at the cursor with the specified string.", 140, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1178 },
|
||||
{ PROC_LINKS(query_replace_selection, 0), false, "query_replace_selection", 23, "Queries the user for a string, and incrementally replace every occurence of the string found in the selected range with the specified string.", 141, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1194 },
|
||||
{ PROC_LINKS(save_all_dirty_buffers, 0), false, "save_all_dirty_buffers", 22, "Saves all buffers marked dirty (showing the '*' indicator).", 59, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1230 },
|
||||
{ PROC_LINKS(delete_file_query, 0), false, "delete_file_query", 17, "Deletes the file of the current buffer if 4coder has the appropriate access rights. Will ask the user for confirmation first.", 125, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1255 },
|
||||
{ PROC_LINKS(save_to_query, 0), false, "save_to_query", 13, "Queries the user for a file name and saves the contents of the current buffer, altering the buffer's name too.", 110, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1299 },
|
||||
{ PROC_LINKS(rename_file_query, 0), false, "rename_file_query", 17, "Queries the user for a new name and renames the file of the current buffer, altering the buffer's name too.", 107, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1332 },
|
||||
{ PROC_LINKS(make_directory_query, 0), false, "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1370 },
|
||||
{ PROC_LINKS(move_line_up, 0), false, "move_line_up", 12, "Swaps the line under the cursor with the line above it, and moves the cursor up with it.", 88, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1404 },
|
||||
{ PROC_LINKS(move_line_down, 0), false, "move_line_down", 14, "Swaps the line under the cursor with the line below it, and moves the cursor down with it.", 90, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1410 },
|
||||
{ PROC_LINKS(duplicate_line, 0), false, "duplicate_line", 14, "Create a copy of the line on which the cursor sits.", 51, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1416 },
|
||||
{ PROC_LINKS(delete_line, 0), false, "delete_line", 11, "Delete the line the on which the cursor sits.", 45, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1430 },
|
||||
{ PROC_LINKS(open_file_in_quotes, 0), false, "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1495 },
|
||||
{ PROC_LINKS(open_matching_file_cpp, 0), false, "open_matching_file_cpp", 22, "If the current file is a *.cpp or *.h, attempts to open the corresponding *.h or *.cpp file in the other view.", 110, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1527 },
|
||||
{ PROC_LINKS(view_buffer_other_panel, 0), false, "view_buffer_other_panel", 23, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1540 },
|
||||
{ PROC_LINKS(swap_panels, 0), false, "swap_panels", 11, "Swaps the active panel with it's sibling.", 41, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1552 },
|
||||
{ PROC_LINKS(kill_buffer, 0), false, "kill_buffer", 11, "Kills the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1576 },
|
||||
{ PROC_LINKS(save, 0), false, "save", 4, "Saves the current buffer.", 25, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1584 },
|
||||
{ PROC_LINKS(reopen, 0), false, "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1594 },
|
||||
{ PROC_LINKS(undo, 0), false, "undo", 4, "Advances backwards through the undo history of the current buffer.", 66, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1819 },
|
||||
{ PROC_LINKS(redo, 0), false, "redo", 4, "Advances forwards through the undo history of the current buffer.", 65, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1832 },
|
||||
{ PROC_LINKS(undo_all_buffers, 0), false, "undo_all_buffers", 16, "Advances backward through the undo history in the buffer containing the most recent regular edit.", 97, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1846 },
|
||||
{ PROC_LINKS(redo_all_buffers, 0), false, "redo_all_buffers", 16, "Advances forward through the undo history in the buffer containing the most recent regular edit.", 96, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 1917 },
|
||||
{ PROC_LINKS(open_in_other, 0), false, "open_in_other", 13, "Interactively opens a file in the other panel.", 46, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 2018 },
|
||||
{ PROC_LINKS(default_file_externally_modified, 0), false, "default_file_externally_modified", 32, "Notes the external modification of attached files by printing a message.", 72, "w:\\4ed\\code\\custom\\4coder_base_commands.cpp", 43, 2024 },
|
||||
{ PROC_LINKS(set_eol_mode_to_crlf, 0), false, "set_eol_mode_to_crlf", 20, "Puts the buffer in crlf line ending mode.", 41, "w:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 86 },
|
||||
{ PROC_LINKS(set_eol_mode_to_lf, 0), false, "set_eol_mode_to_lf", 18, "Puts the buffer in lf line ending mode.", 39, "w:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 97 },
|
||||
{ PROC_LINKS(set_eol_mode_to_binary, 0), false, "set_eol_mode_to_binary", 22, "Puts the buffer in bin line ending mode.", 40, "w:\\4ed\\code\\custom\\4coder_eol.cpp", 33, 108 },
|
||||
|
@ -451,7 +453,7 @@ static Command_Metadata fcoder_metacmd_table[216] = {
|
|||
{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), false, "miblo_decrement_time_stamp_minute", 33, "Decrement a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\custom\\4coder_miblo_numbers.cpp", 43, 249 },
|
||||
{ PROC_LINKS(profile_inspect, 0), true, "profile_inspect", 15, "Inspect all currently collected profiling information in 4coder's self profiler.", 80, "w:\\4ed\\code\\custom\\4coder_profile_inspect.cpp", 45, 779 },
|
||||
{ PROC_LINKS(kill_tutorial, 0), false, "kill_tutorial", 13, "If there is an active tutorial, kill it.", 40, "w:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 9 },
|
||||
{ PROC_LINKS(hms_demo_tutorial, 0), false, "hms_demo_tutorial", 17, "Tutorial for built in 4coder bindings and features.", 51, "w:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 801 },
|
||||
{ PROC_LINKS(hms_demo_tutorial, 0), false, "hms_demo_tutorial", 17, "Tutorial for built in 4coder bindings and features.", 51, "w:\\4ed\\code\\custom\\4coder_tutorial.cpp", 38, 821 },
|
||||
{ PROC_LINKS(default_startup, 0), false, "default_startup", 15, "Default command for responding to a startup event", 49, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 7 },
|
||||
{ PROC_LINKS(default_try_exit, 0), false, "default_try_exit", 16, "Default command for responding to a try-exit event", 50, "w:\\4ed\\code\\custom\\4coder_default_hooks.cpp", 43, 22 },
|
||||
};
|
||||
|
@ -540,135 +542,136 @@ static i32 fcoder_metacmd_ID_decrease_face_size = 81;
|
|||
static i32 fcoder_metacmd_ID_mouse_wheel_change_face_size = 82;
|
||||
static i32 fcoder_metacmd_ID_toggle_show_whitespace = 83;
|
||||
static i32 fcoder_metacmd_ID_toggle_line_numbers = 84;
|
||||
static i32 fcoder_metacmd_ID_exit_4coder = 85;
|
||||
static i32 fcoder_metacmd_ID_goto_line = 86;
|
||||
static i32 fcoder_metacmd_ID_search = 87;
|
||||
static i32 fcoder_metacmd_ID_reverse_search = 88;
|
||||
static i32 fcoder_metacmd_ID_search_identifier = 89;
|
||||
static i32 fcoder_metacmd_ID_reverse_search_identifier = 90;
|
||||
static i32 fcoder_metacmd_ID_replace_in_range = 91;
|
||||
static i32 fcoder_metacmd_ID_replace_in_buffer = 92;
|
||||
static i32 fcoder_metacmd_ID_replace_in_all_buffers = 93;
|
||||
static i32 fcoder_metacmd_ID_query_replace = 94;
|
||||
static i32 fcoder_metacmd_ID_query_replace_identifier = 95;
|
||||
static i32 fcoder_metacmd_ID_query_replace_selection = 96;
|
||||
static i32 fcoder_metacmd_ID_save_all_dirty_buffers = 97;
|
||||
static i32 fcoder_metacmd_ID_delete_file_query = 98;
|
||||
static i32 fcoder_metacmd_ID_save_to_query = 99;
|
||||
static i32 fcoder_metacmd_ID_rename_file_query = 100;
|
||||
static i32 fcoder_metacmd_ID_make_directory_query = 101;
|
||||
static i32 fcoder_metacmd_ID_move_line_up = 102;
|
||||
static i32 fcoder_metacmd_ID_move_line_down = 103;
|
||||
static i32 fcoder_metacmd_ID_duplicate_line = 104;
|
||||
static i32 fcoder_metacmd_ID_delete_line = 105;
|
||||
static i32 fcoder_metacmd_ID_open_file_in_quotes = 106;
|
||||
static i32 fcoder_metacmd_ID_open_matching_file_cpp = 107;
|
||||
static i32 fcoder_metacmd_ID_view_buffer_other_panel = 108;
|
||||
static i32 fcoder_metacmd_ID_swap_panels = 109;
|
||||
static i32 fcoder_metacmd_ID_kill_buffer = 110;
|
||||
static i32 fcoder_metacmd_ID_save = 111;
|
||||
static i32 fcoder_metacmd_ID_reopen = 112;
|
||||
static i32 fcoder_metacmd_ID_undo = 113;
|
||||
static i32 fcoder_metacmd_ID_redo = 114;
|
||||
static i32 fcoder_metacmd_ID_undo_all_buffers = 115;
|
||||
static i32 fcoder_metacmd_ID_redo_all_buffers = 116;
|
||||
static i32 fcoder_metacmd_ID_open_in_other = 117;
|
||||
static i32 fcoder_metacmd_ID_default_file_externally_modified = 118;
|
||||
static i32 fcoder_metacmd_ID_set_eol_mode_to_crlf = 119;
|
||||
static i32 fcoder_metacmd_ID_set_eol_mode_to_lf = 120;
|
||||
static i32 fcoder_metacmd_ID_set_eol_mode_to_binary = 121;
|
||||
static i32 fcoder_metacmd_ID_set_eol_mode_from_contents = 122;
|
||||
static i32 fcoder_metacmd_ID_interactive_switch_buffer = 123;
|
||||
static i32 fcoder_metacmd_ID_interactive_kill_buffer = 124;
|
||||
static i32 fcoder_metacmd_ID_interactive_open_or_new = 125;
|
||||
static i32 fcoder_metacmd_ID_interactive_new = 126;
|
||||
static i32 fcoder_metacmd_ID_interactive_open = 127;
|
||||
static i32 fcoder_metacmd_ID_command_lister = 128;
|
||||
static i32 fcoder_metacmd_ID_auto_indent_whole_file = 129;
|
||||
static i32 fcoder_metacmd_ID_auto_indent_line_at_cursor = 130;
|
||||
static i32 fcoder_metacmd_ID_auto_indent_range = 131;
|
||||
static i32 fcoder_metacmd_ID_write_text_and_auto_indent = 132;
|
||||
static i32 fcoder_metacmd_ID_list_all_locations = 133;
|
||||
static i32 fcoder_metacmd_ID_list_all_substring_locations = 134;
|
||||
static i32 fcoder_metacmd_ID_list_all_locations_case_insensitive = 135;
|
||||
static i32 fcoder_metacmd_ID_list_all_substring_locations_case_insensitive = 136;
|
||||
static i32 fcoder_metacmd_ID_list_all_locations_of_identifier = 137;
|
||||
static i32 fcoder_metacmd_ID_list_all_locations_of_identifier_case_insensitive = 138;
|
||||
static i32 fcoder_metacmd_ID_list_all_locations_of_selection = 139;
|
||||
static i32 fcoder_metacmd_ID_list_all_locations_of_selection_case_insensitive = 140;
|
||||
static i32 fcoder_metacmd_ID_list_all_locations_of_type_definition = 141;
|
||||
static i32 fcoder_metacmd_ID_list_all_locations_of_type_definition_of_identifier = 142;
|
||||
static i32 fcoder_metacmd_ID_word_complete = 143;
|
||||
static i32 fcoder_metacmd_ID_word_complete_drop_down = 144;
|
||||
static i32 fcoder_metacmd_ID_goto_jump_at_cursor = 145;
|
||||
static i32 fcoder_metacmd_ID_goto_jump_at_cursor_same_panel = 146;
|
||||
static i32 fcoder_metacmd_ID_goto_next_jump = 147;
|
||||
static i32 fcoder_metacmd_ID_goto_prev_jump = 148;
|
||||
static i32 fcoder_metacmd_ID_goto_next_jump_no_skips = 149;
|
||||
static i32 fcoder_metacmd_ID_goto_prev_jump_no_skips = 150;
|
||||
static i32 fcoder_metacmd_ID_goto_first_jump = 151;
|
||||
static i32 fcoder_metacmd_ID_goto_first_jump_same_panel_sticky = 152;
|
||||
static i32 fcoder_metacmd_ID_if_read_only_goto_position = 153;
|
||||
static i32 fcoder_metacmd_ID_if_read_only_goto_position_same_panel = 154;
|
||||
static i32 fcoder_metacmd_ID_view_jump_list_with_lister = 155;
|
||||
static i32 fcoder_metacmd_ID_show_the_log_graph = 156;
|
||||
static i32 fcoder_metacmd_ID_copy = 157;
|
||||
static i32 fcoder_metacmd_ID_cut = 158;
|
||||
static i32 fcoder_metacmd_ID_paste = 159;
|
||||
static i32 fcoder_metacmd_ID_paste_next = 160;
|
||||
static i32 fcoder_metacmd_ID_paste_and_indent = 161;
|
||||
static i32 fcoder_metacmd_ID_paste_next_and_indent = 162;
|
||||
static i32 fcoder_metacmd_ID_execute_previous_cli = 163;
|
||||
static i32 fcoder_metacmd_ID_execute_any_cli = 164;
|
||||
static i32 fcoder_metacmd_ID_build_search = 165;
|
||||
static i32 fcoder_metacmd_ID_build_in_build_panel = 166;
|
||||
static i32 fcoder_metacmd_ID_close_build_panel = 167;
|
||||
static i32 fcoder_metacmd_ID_change_to_build_panel = 168;
|
||||
static i32 fcoder_metacmd_ID_close_all_code = 169;
|
||||
static i32 fcoder_metacmd_ID_open_all_code = 170;
|
||||
static i32 fcoder_metacmd_ID_open_all_code_recursive = 171;
|
||||
static i32 fcoder_metacmd_ID_load_project = 172;
|
||||
static i32 fcoder_metacmd_ID_project_fkey_command = 173;
|
||||
static i32 fcoder_metacmd_ID_project_go_to_root_directory = 174;
|
||||
static i32 fcoder_metacmd_ID_setup_new_project = 175;
|
||||
static i32 fcoder_metacmd_ID_setup_build_bat = 176;
|
||||
static i32 fcoder_metacmd_ID_setup_build_sh = 177;
|
||||
static i32 fcoder_metacmd_ID_setup_build_bat_and_sh = 178;
|
||||
static i32 fcoder_metacmd_ID_project_command_lister = 179;
|
||||
static i32 fcoder_metacmd_ID_list_all_functions_current_buffer = 180;
|
||||
static i32 fcoder_metacmd_ID_list_all_functions_current_buffer_lister = 181;
|
||||
static i32 fcoder_metacmd_ID_list_all_functions_all_buffers = 182;
|
||||
static i32 fcoder_metacmd_ID_list_all_functions_all_buffers_lister = 183;
|
||||
static i32 fcoder_metacmd_ID_select_surrounding_scope = 184;
|
||||
static i32 fcoder_metacmd_ID_select_surrounding_scope_maximal = 185;
|
||||
static i32 fcoder_metacmd_ID_select_next_scope_absolute = 186;
|
||||
static i32 fcoder_metacmd_ID_select_next_scope_after_current = 187;
|
||||
static i32 fcoder_metacmd_ID_select_prev_scope_absolute = 188;
|
||||
static i32 fcoder_metacmd_ID_select_prev_top_most_scope = 189;
|
||||
static i32 fcoder_metacmd_ID_place_in_scope = 190;
|
||||
static i32 fcoder_metacmd_ID_delete_current_scope = 191;
|
||||
static i32 fcoder_metacmd_ID_open_long_braces = 192;
|
||||
static i32 fcoder_metacmd_ID_open_long_braces_semicolon = 193;
|
||||
static i32 fcoder_metacmd_ID_open_long_braces_break = 194;
|
||||
static i32 fcoder_metacmd_ID_if0_off = 195;
|
||||
static i32 fcoder_metacmd_ID_write_todo = 196;
|
||||
static i32 fcoder_metacmd_ID_write_hack = 197;
|
||||
static i32 fcoder_metacmd_ID_write_note = 198;
|
||||
static i32 fcoder_metacmd_ID_write_block = 199;
|
||||
static i32 fcoder_metacmd_ID_write_zero_struct = 200;
|
||||
static i32 fcoder_metacmd_ID_comment_line = 201;
|
||||
static i32 fcoder_metacmd_ID_uncomment_line = 202;
|
||||
static i32 fcoder_metacmd_ID_comment_line_toggle = 203;
|
||||
static i32 fcoder_metacmd_ID_snippet_lister = 204;
|
||||
static i32 fcoder_metacmd_ID_miblo_increment_basic = 205;
|
||||
static i32 fcoder_metacmd_ID_miblo_decrement_basic = 206;
|
||||
static i32 fcoder_metacmd_ID_miblo_increment_time_stamp = 207;
|
||||
static i32 fcoder_metacmd_ID_miblo_decrement_time_stamp = 208;
|
||||
static i32 fcoder_metacmd_ID_miblo_increment_time_stamp_minute = 209;
|
||||
static i32 fcoder_metacmd_ID_miblo_decrement_time_stamp_minute = 210;
|
||||
static i32 fcoder_metacmd_ID_profile_inspect = 211;
|
||||
static i32 fcoder_metacmd_ID_kill_tutorial = 212;
|
||||
static i32 fcoder_metacmd_ID_hms_demo_tutorial = 213;
|
||||
static i32 fcoder_metacmd_ID_default_startup = 214;
|
||||
static i32 fcoder_metacmd_ID_default_try_exit = 215;
|
||||
static i32 fcoder_metacmd_ID_toggle_line_wrap = 85;
|
||||
static i32 fcoder_metacmd_ID_exit_4coder = 86;
|
||||
static i32 fcoder_metacmd_ID_goto_line = 87;
|
||||
static i32 fcoder_metacmd_ID_search = 88;
|
||||
static i32 fcoder_metacmd_ID_reverse_search = 89;
|
||||
static i32 fcoder_metacmd_ID_search_identifier = 90;
|
||||
static i32 fcoder_metacmd_ID_reverse_search_identifier = 91;
|
||||
static i32 fcoder_metacmd_ID_replace_in_range = 92;
|
||||
static i32 fcoder_metacmd_ID_replace_in_buffer = 93;
|
||||
static i32 fcoder_metacmd_ID_replace_in_all_buffers = 94;
|
||||
static i32 fcoder_metacmd_ID_query_replace = 95;
|
||||
static i32 fcoder_metacmd_ID_query_replace_identifier = 96;
|
||||
static i32 fcoder_metacmd_ID_query_replace_selection = 97;
|
||||
static i32 fcoder_metacmd_ID_save_all_dirty_buffers = 98;
|
||||
static i32 fcoder_metacmd_ID_delete_file_query = 99;
|
||||
static i32 fcoder_metacmd_ID_save_to_query = 100;
|
||||
static i32 fcoder_metacmd_ID_rename_file_query = 101;
|
||||
static i32 fcoder_metacmd_ID_make_directory_query = 102;
|
||||
static i32 fcoder_metacmd_ID_move_line_up = 103;
|
||||
static i32 fcoder_metacmd_ID_move_line_down = 104;
|
||||
static i32 fcoder_metacmd_ID_duplicate_line = 105;
|
||||
static i32 fcoder_metacmd_ID_delete_line = 106;
|
||||
static i32 fcoder_metacmd_ID_open_file_in_quotes = 107;
|
||||
static i32 fcoder_metacmd_ID_open_matching_file_cpp = 108;
|
||||
static i32 fcoder_metacmd_ID_view_buffer_other_panel = 109;
|
||||
static i32 fcoder_metacmd_ID_swap_panels = 110;
|
||||
static i32 fcoder_metacmd_ID_kill_buffer = 111;
|
||||
static i32 fcoder_metacmd_ID_save = 112;
|
||||
static i32 fcoder_metacmd_ID_reopen = 113;
|
||||
static i32 fcoder_metacmd_ID_undo = 114;
|
||||
static i32 fcoder_metacmd_ID_redo = 115;
|
||||
static i32 fcoder_metacmd_ID_undo_all_buffers = 116;
|
||||
static i32 fcoder_metacmd_ID_redo_all_buffers = 117;
|
||||
static i32 fcoder_metacmd_ID_open_in_other = 118;
|
||||
static i32 fcoder_metacmd_ID_default_file_externally_modified = 119;
|
||||
static i32 fcoder_metacmd_ID_set_eol_mode_to_crlf = 120;
|
||||
static i32 fcoder_metacmd_ID_set_eol_mode_to_lf = 121;
|
||||
static i32 fcoder_metacmd_ID_set_eol_mode_to_binary = 122;
|
||||
static i32 fcoder_metacmd_ID_set_eol_mode_from_contents = 123;
|
||||
static i32 fcoder_metacmd_ID_interactive_switch_buffer = 124;
|
||||
static i32 fcoder_metacmd_ID_interactive_kill_buffer = 125;
|
||||
static i32 fcoder_metacmd_ID_interactive_open_or_new = 126;
|
||||
static i32 fcoder_metacmd_ID_interactive_new = 127;
|
||||
static i32 fcoder_metacmd_ID_interactive_open = 128;
|
||||
static i32 fcoder_metacmd_ID_command_lister = 129;
|
||||
static i32 fcoder_metacmd_ID_auto_indent_whole_file = 130;
|
||||
static i32 fcoder_metacmd_ID_auto_indent_line_at_cursor = 131;
|
||||
static i32 fcoder_metacmd_ID_auto_indent_range = 132;
|
||||
static i32 fcoder_metacmd_ID_write_text_and_auto_indent = 133;
|
||||
static i32 fcoder_metacmd_ID_list_all_locations = 134;
|
||||
static i32 fcoder_metacmd_ID_list_all_substring_locations = 135;
|
||||
static i32 fcoder_metacmd_ID_list_all_locations_case_insensitive = 136;
|
||||
static i32 fcoder_metacmd_ID_list_all_substring_locations_case_insensitive = 137;
|
||||
static i32 fcoder_metacmd_ID_list_all_locations_of_identifier = 138;
|
||||
static i32 fcoder_metacmd_ID_list_all_locations_of_identifier_case_insensitive = 139;
|
||||
static i32 fcoder_metacmd_ID_list_all_locations_of_selection = 140;
|
||||
static i32 fcoder_metacmd_ID_list_all_locations_of_selection_case_insensitive = 141;
|
||||
static i32 fcoder_metacmd_ID_list_all_locations_of_type_definition = 142;
|
||||
static i32 fcoder_metacmd_ID_list_all_locations_of_type_definition_of_identifier = 143;
|
||||
static i32 fcoder_metacmd_ID_word_complete = 144;
|
||||
static i32 fcoder_metacmd_ID_word_complete_drop_down = 145;
|
||||
static i32 fcoder_metacmd_ID_goto_jump_at_cursor = 146;
|
||||
static i32 fcoder_metacmd_ID_goto_jump_at_cursor_same_panel = 147;
|
||||
static i32 fcoder_metacmd_ID_goto_next_jump = 148;
|
||||
static i32 fcoder_metacmd_ID_goto_prev_jump = 149;
|
||||
static i32 fcoder_metacmd_ID_goto_next_jump_no_skips = 150;
|
||||
static i32 fcoder_metacmd_ID_goto_prev_jump_no_skips = 151;
|
||||
static i32 fcoder_metacmd_ID_goto_first_jump = 152;
|
||||
static i32 fcoder_metacmd_ID_goto_first_jump_same_panel_sticky = 153;
|
||||
static i32 fcoder_metacmd_ID_if_read_only_goto_position = 154;
|
||||
static i32 fcoder_metacmd_ID_if_read_only_goto_position_same_panel = 155;
|
||||
static i32 fcoder_metacmd_ID_view_jump_list_with_lister = 156;
|
||||
static i32 fcoder_metacmd_ID_show_the_log_graph = 157;
|
||||
static i32 fcoder_metacmd_ID_copy = 158;
|
||||
static i32 fcoder_metacmd_ID_cut = 159;
|
||||
static i32 fcoder_metacmd_ID_paste = 160;
|
||||
static i32 fcoder_metacmd_ID_paste_next = 161;
|
||||
static i32 fcoder_metacmd_ID_paste_and_indent = 162;
|
||||
static i32 fcoder_metacmd_ID_paste_next_and_indent = 163;
|
||||
static i32 fcoder_metacmd_ID_execute_previous_cli = 164;
|
||||
static i32 fcoder_metacmd_ID_execute_any_cli = 165;
|
||||
static i32 fcoder_metacmd_ID_build_search = 166;
|
||||
static i32 fcoder_metacmd_ID_build_in_build_panel = 167;
|
||||
static i32 fcoder_metacmd_ID_close_build_panel = 168;
|
||||
static i32 fcoder_metacmd_ID_change_to_build_panel = 169;
|
||||
static i32 fcoder_metacmd_ID_close_all_code = 170;
|
||||
static i32 fcoder_metacmd_ID_open_all_code = 171;
|
||||
static i32 fcoder_metacmd_ID_open_all_code_recursive = 172;
|
||||
static i32 fcoder_metacmd_ID_load_project = 173;
|
||||
static i32 fcoder_metacmd_ID_project_fkey_command = 174;
|
||||
static i32 fcoder_metacmd_ID_project_go_to_root_directory = 175;
|
||||
static i32 fcoder_metacmd_ID_setup_new_project = 176;
|
||||
static i32 fcoder_metacmd_ID_setup_build_bat = 177;
|
||||
static i32 fcoder_metacmd_ID_setup_build_sh = 178;
|
||||
static i32 fcoder_metacmd_ID_setup_build_bat_and_sh = 179;
|
||||
static i32 fcoder_metacmd_ID_project_command_lister = 180;
|
||||
static i32 fcoder_metacmd_ID_list_all_functions_current_buffer = 181;
|
||||
static i32 fcoder_metacmd_ID_list_all_functions_current_buffer_lister = 182;
|
||||
static i32 fcoder_metacmd_ID_list_all_functions_all_buffers = 183;
|
||||
static i32 fcoder_metacmd_ID_list_all_functions_all_buffers_lister = 184;
|
||||
static i32 fcoder_metacmd_ID_select_surrounding_scope = 185;
|
||||
static i32 fcoder_metacmd_ID_select_surrounding_scope_maximal = 186;
|
||||
static i32 fcoder_metacmd_ID_select_next_scope_absolute = 187;
|
||||
static i32 fcoder_metacmd_ID_select_next_scope_after_current = 188;
|
||||
static i32 fcoder_metacmd_ID_select_prev_scope_absolute = 189;
|
||||
static i32 fcoder_metacmd_ID_select_prev_top_most_scope = 190;
|
||||
static i32 fcoder_metacmd_ID_place_in_scope = 191;
|
||||
static i32 fcoder_metacmd_ID_delete_current_scope = 192;
|
||||
static i32 fcoder_metacmd_ID_open_long_braces = 193;
|
||||
static i32 fcoder_metacmd_ID_open_long_braces_semicolon = 194;
|
||||
static i32 fcoder_metacmd_ID_open_long_braces_break = 195;
|
||||
static i32 fcoder_metacmd_ID_if0_off = 196;
|
||||
static i32 fcoder_metacmd_ID_write_todo = 197;
|
||||
static i32 fcoder_metacmd_ID_write_hack = 198;
|
||||
static i32 fcoder_metacmd_ID_write_note = 199;
|
||||
static i32 fcoder_metacmd_ID_write_block = 200;
|
||||
static i32 fcoder_metacmd_ID_write_zero_struct = 201;
|
||||
static i32 fcoder_metacmd_ID_comment_line = 202;
|
||||
static i32 fcoder_metacmd_ID_uncomment_line = 203;
|
||||
static i32 fcoder_metacmd_ID_comment_line_toggle = 204;
|
||||
static i32 fcoder_metacmd_ID_snippet_lister = 205;
|
||||
static i32 fcoder_metacmd_ID_miblo_increment_basic = 206;
|
||||
static i32 fcoder_metacmd_ID_miblo_decrement_basic = 207;
|
||||
static i32 fcoder_metacmd_ID_miblo_increment_time_stamp = 208;
|
||||
static i32 fcoder_metacmd_ID_miblo_decrement_time_stamp = 209;
|
||||
static i32 fcoder_metacmd_ID_miblo_increment_time_stamp_minute = 210;
|
||||
static i32 fcoder_metacmd_ID_miblo_decrement_time_stamp_minute = 211;
|
||||
static i32 fcoder_metacmd_ID_profile_inspect = 212;
|
||||
static i32 fcoder_metacmd_ID_kill_tutorial = 213;
|
||||
static i32 fcoder_metacmd_ID_hms_demo_tutorial = 214;
|
||||
static i32 fcoder_metacmd_ID_default_startup = 215;
|
||||
static i32 fcoder_metacmd_ID_default_try_exit = 216;
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue