diff --git a/4coder_API/4coder_types.h b/4coder_API/4coder_types.h index 338609a9..653e4926 100644 --- a/4coder_API/4coder_types.h +++ b/4coder_API/4coder_types.h @@ -629,9 +629,6 @@ STRUCT Partial_Cursor{ i32 character; }; -TYPEDEF_FUNC b32 Buffer_Edit_Handler(struct Application_Links *app, Buffer_ID buffer_id, i32 start, i32 one_past_last, String str); -// TODO(allen): what to do with batches??? - STRUCT File_Attributes{ u64 size; u64 last_write_time; diff --git a/4coder_default_framework.cpp b/4coder_default_framework.cpp index 6b63c7ec..5b30c34c 100644 --- a/4coder_default_framework.cpp +++ b/4coder_default_framework.cpp @@ -280,7 +280,6 @@ create_or_switch_to_buffer_by_name(Application_Links *app, char *name, i32 name_ if (search_buffer.exists){ buffer_set_setting(app, &search_buffer, BufferSetting_ReadOnly, true); - buffer_set_edit_handler(app, search_buffer.buffer_id, 0); View_Summary target_view = default_target_view; diff --git a/4coder_default_include.cpp b/4coder_default_include.cpp index 9332cc4a..5dc9c4fa 100644 --- a/4coder_default_include.cpp +++ b/4coder_default_include.cpp @@ -30,7 +30,6 @@ #include "4coder_fancy.h" #include "4coder_ui_helper.h" #include "4coder_default_framework.h" -#include "4coder_mirror.h" #include "4coder_config.h" #include "4coder_seek.h" #include "4coder_auto_indent.h" @@ -54,7 +53,6 @@ #include "4coder_config.cpp" #include "4coder_default_framework.cpp" #include "4coder_insertion.cpp" -#include "4coder_mirror.cpp" #include "4coder_seek.cpp" #include "4coder_base_commands.cpp" #include "4coder_lists.cpp" diff --git a/4coder_generated/app_functions.h b/4coder_generated/app_functions.h index 685ce342..0bc32700 100644 --- a/4coder_generated/app_functions.h +++ b/4coder_generated/app_functions.h @@ -19,7 +19,6 @@ struct Application_Links; #define GET_BUFFER_BY_FILE_NAME_SIG(n) b32 n(Application_Links *app, String file_name, Access_Flag access, Buffer_ID *buffer_id_out) #define BUFFER_READ_RANGE_SIG(n) b32 n(Application_Links *app, Buffer_ID buffer_id, i32 start, i32 one_past_last, char *out) #define BUFFER_REPLACE_RANGE_SIG(n) b32 n(Application_Links *app, Buffer_ID buffer_id, i32 start, i32 one_past_last, String string) -#define BUFFER_SET_EDIT_HANDLER_SIG(n) b32 n(Application_Links *app, Buffer_ID buffer_id, Buffer_Edit_Handler *handler) #define BUFFER_COMPUTE_CURSOR_SIG(n) b32 n(Application_Links *app, Buffer_ID buffer_id, Buffer_Seek seek, Partial_Cursor *cursor_out) #define BUFFER_BATCH_EDIT_SIG(n) b32 n(Application_Links *app, Buffer_ID buffer_id, char *str, i32 str_len, Buffer_Edit *edits, i32 edit_count, Buffer_Batch_Edit_Type type) #define BUFFER_EXISTS_SIG(n) b32 n(Application_Links *app, Buffer_ID buffer_id) @@ -43,7 +42,7 @@ struct Application_Links; #define CREATE_BUFFER_SIG(n) b32 n(Application_Links *app, String file_name, Buffer_Create_Flag flags, Buffer_ID *new_buffer_id_out) #define BUFFER_SAVE_SIG(n) b32 n(Application_Links *app, Buffer_ID buffer_id, String file_name, u32 flags) #define BUFFER_KILL_SIG(n) b32 n(Application_Links *app, Buffer_ID buffer_id, Buffer_Kill_Flag flags, Buffer_Kill_Result *result) -#define BUFFER_REOPEN_SIG(n) b32 n(Application_Links *app, Buffer_ID buffer_id, Buffer_Reopen_Flag flags, Buffer_Reopen_Result *result) +#define BUFFER_REOPEN_SIG(n) b32 n(Application_Links *app, Buffer_ID buffer_id, Buffer_Reopen_Flag flags, Buffer_Reopen_Result *result_out) #define BUFFER_GET_FILE_ATTRIBUTES_SIG(n) b32 n(Application_Links *app, Buffer_ID buffer_id, File_Attributes *attributes_out) #define GET_VIEW_NEXT_SIG(n) b32 n(Application_Links *app, View_ID view_id, Access_Flag access, View_ID *view_id_out) #define GET_VIEW_PREV_SIG(n) b32 n(Application_Links *app, View_ID view_id, Access_Flag access, View_ID *view_id_out) @@ -197,7 +196,6 @@ typedef GET_BUFFER_BY_NAME_SIG(Get_Buffer_By_Name_Function); typedef GET_BUFFER_BY_FILE_NAME_SIG(Get_Buffer_By_File_Name_Function); typedef BUFFER_READ_RANGE_SIG(Buffer_Read_Range_Function); typedef BUFFER_REPLACE_RANGE_SIG(Buffer_Replace_Range_Function); -typedef BUFFER_SET_EDIT_HANDLER_SIG(Buffer_Set_Edit_Handler_Function); typedef BUFFER_COMPUTE_CURSOR_SIG(Buffer_Compute_Cursor_Function); typedef BUFFER_BATCH_EDIT_SIG(Buffer_Batch_Edit_Function); typedef BUFFER_EXISTS_SIG(Buffer_Exists_Function); @@ -377,7 +375,6 @@ Get_Buffer_By_Name_Function *get_buffer_by_name; Get_Buffer_By_File_Name_Function *get_buffer_by_file_name; Buffer_Read_Range_Function *buffer_read_range; Buffer_Replace_Range_Function *buffer_replace_range; -Buffer_Set_Edit_Handler_Function *buffer_set_edit_handler; Buffer_Compute_Cursor_Function *buffer_compute_cursor; Buffer_Batch_Edit_Function *buffer_batch_edit; Buffer_Exists_Function *buffer_exists; @@ -556,7 +553,6 @@ Get_Buffer_By_Name_Function *get_buffer_by_name_; Get_Buffer_By_File_Name_Function *get_buffer_by_file_name_; Buffer_Read_Range_Function *buffer_read_range_; Buffer_Replace_Range_Function *buffer_replace_range_; -Buffer_Set_Edit_Handler_Function *buffer_set_edit_handler_; Buffer_Compute_Cursor_Function *buffer_compute_cursor_; Buffer_Batch_Edit_Function *buffer_batch_edit_; Buffer_Exists_Function *buffer_exists_; @@ -743,7 +739,6 @@ app_links->get_buffer_by_name_ = Get_Buffer_By_Name;\ app_links->get_buffer_by_file_name_ = Get_Buffer_By_File_Name;\ app_links->buffer_read_range_ = Buffer_Read_Range;\ app_links->buffer_replace_range_ = Buffer_Replace_Range;\ -app_links->buffer_set_edit_handler_ = Buffer_Set_Edit_Handler;\ app_links->buffer_compute_cursor_ = Buffer_Compute_Cursor;\ app_links->buffer_batch_edit_ = Buffer_Batch_Edit;\ app_links->buffer_exists_ = Buffer_Exists;\ @@ -922,7 +917,6 @@ static b32 get_buffer_by_name(Application_Links *app, String name, Access_Flag a static b32 get_buffer_by_file_name(Application_Links *app, String file_name, Access_Flag access, Buffer_ID *buffer_id_out){return(app->get_buffer_by_file_name(app, file_name, access, buffer_id_out));} static b32 buffer_read_range(Application_Links *app, Buffer_ID buffer_id, i32 start, i32 one_past_last, char *out){return(app->buffer_read_range(app, buffer_id, start, one_past_last, out));} static b32 buffer_replace_range(Application_Links *app, Buffer_ID buffer_id, i32 start, i32 one_past_last, String string){return(app->buffer_replace_range(app, buffer_id, start, one_past_last, string));} -static b32 buffer_set_edit_handler(Application_Links *app, Buffer_ID buffer_id, Buffer_Edit_Handler *handler){return(app->buffer_set_edit_handler(app, buffer_id, handler));} static b32 buffer_compute_cursor(Application_Links *app, Buffer_ID buffer_id, Buffer_Seek seek, Partial_Cursor *cursor_out){return(app->buffer_compute_cursor(app, buffer_id, seek, cursor_out));} static b32 buffer_batch_edit(Application_Links *app, Buffer_ID buffer_id, char *str, i32 str_len, Buffer_Edit *edits, i32 edit_count, Buffer_Batch_Edit_Type type){return(app->buffer_batch_edit(app, buffer_id, str, str_len, edits, edit_count, type));} static b32 buffer_exists(Application_Links *app, Buffer_ID buffer_id){return(app->buffer_exists(app, buffer_id));} @@ -946,7 +940,7 @@ static b32 buffer_send_end_signal(Application_Links *app, Buffer_ID buffer_id){r static b32 create_buffer(Application_Links *app, String file_name, Buffer_Create_Flag flags, Buffer_ID *new_buffer_id_out){return(app->create_buffer(app, file_name, flags, new_buffer_id_out));} static b32 buffer_save(Application_Links *app, Buffer_ID buffer_id, String file_name, u32 flags){return(app->buffer_save(app, buffer_id, file_name, flags));} static b32 buffer_kill(Application_Links *app, Buffer_ID buffer_id, Buffer_Kill_Flag flags, Buffer_Kill_Result *result){return(app->buffer_kill(app, buffer_id, flags, result));} -static b32 buffer_reopen(Application_Links *app, Buffer_ID buffer_id, Buffer_Reopen_Flag flags, Buffer_Reopen_Result *result){return(app->buffer_reopen(app, buffer_id, flags, result));} +static b32 buffer_reopen(Application_Links *app, Buffer_ID buffer_id, Buffer_Reopen_Flag flags, Buffer_Reopen_Result *result_out){return(app->buffer_reopen(app, buffer_id, flags, result_out));} static b32 buffer_get_file_attributes(Application_Links *app, Buffer_ID buffer_id, File_Attributes *attributes_out){return(app->buffer_get_file_attributes(app, buffer_id, attributes_out));} static b32 get_view_next(Application_Links *app, View_ID view_id, Access_Flag access, View_ID *view_id_out){return(app->get_view_next(app, view_id, access, view_id_out));} static b32 get_view_prev(Application_Links *app, View_ID view_id, Access_Flag access, View_ID *view_id_out){return(app->get_view_prev(app, view_id, access, view_id_out));} @@ -1101,7 +1095,6 @@ static b32 get_buffer_by_name(Application_Links *app, String name, Access_Flag a static b32 get_buffer_by_file_name(Application_Links *app, String file_name, Access_Flag access, Buffer_ID *buffer_id_out){return(app->get_buffer_by_file_name_(app, file_name, access, buffer_id_out));} static b32 buffer_read_range(Application_Links *app, Buffer_ID buffer_id, i32 start, i32 one_past_last, char *out){return(app->buffer_read_range_(app, buffer_id, start, one_past_last, out));} static b32 buffer_replace_range(Application_Links *app, Buffer_ID buffer_id, i32 start, i32 one_past_last, String string){return(app->buffer_replace_range_(app, buffer_id, start, one_past_last, string));} -static b32 buffer_set_edit_handler(Application_Links *app, Buffer_ID buffer_id, Buffer_Edit_Handler *handler){return(app->buffer_set_edit_handler_(app, buffer_id, handler));} static b32 buffer_compute_cursor(Application_Links *app, Buffer_ID buffer_id, Buffer_Seek seek, Partial_Cursor *cursor_out){return(app->buffer_compute_cursor_(app, buffer_id, seek, cursor_out));} static b32 buffer_batch_edit(Application_Links *app, Buffer_ID buffer_id, char *str, i32 str_len, Buffer_Edit *edits, i32 edit_count, Buffer_Batch_Edit_Type type){return(app->buffer_batch_edit_(app, buffer_id, str, str_len, edits, edit_count, type));} static b32 buffer_exists(Application_Links *app, Buffer_ID buffer_id){return(app->buffer_exists_(app, buffer_id));} @@ -1125,7 +1118,7 @@ static b32 buffer_send_end_signal(Application_Links *app, Buffer_ID buffer_id){r static b32 create_buffer(Application_Links *app, String file_name, Buffer_Create_Flag flags, Buffer_ID *new_buffer_id_out){return(app->create_buffer_(app, file_name, flags, new_buffer_id_out));} static b32 buffer_save(Application_Links *app, Buffer_ID buffer_id, String file_name, u32 flags){return(app->buffer_save_(app, buffer_id, file_name, flags));} static b32 buffer_kill(Application_Links *app, Buffer_ID buffer_id, Buffer_Kill_Flag flags, Buffer_Kill_Result *result){return(app->buffer_kill_(app, buffer_id, flags, result));} -static b32 buffer_reopen(Application_Links *app, Buffer_ID buffer_id, Buffer_Reopen_Flag flags, Buffer_Reopen_Result *result){return(app->buffer_reopen_(app, buffer_id, flags, result));} +static b32 buffer_reopen(Application_Links *app, Buffer_ID buffer_id, Buffer_Reopen_Flag flags, Buffer_Reopen_Result *result_out){return(app->buffer_reopen_(app, buffer_id, flags, result_out));} static b32 buffer_get_file_attributes(Application_Links *app, Buffer_ID buffer_id, File_Attributes *attributes_out){return(app->buffer_get_file_attributes_(app, buffer_id, attributes_out));} static b32 get_view_next(Application_Links *app, View_ID view_id, Access_Flag access, View_ID *view_id_out){return(app->get_view_next_(app, view_id, access, view_id_out));} static b32 get_view_prev(Application_Links *app, View_ID view_id, Access_Flag access, View_ID *view_id_out){return(app->get_view_prev_(app, view_id, access, view_id_out));} diff --git a/4coder_generated/command_metadata.h b/4coder_generated/command_metadata.h index 6640c368..71ca6e17 100644 --- a/4coder_generated/command_metadata.h +++ b/4coder_generated/command_metadata.h @@ -255,7 +255,7 @@ int32_t source_name_len; int32_t line_number; }; static Command_Metadata fcoder_metacmd_table[234] = { -{ PROC_LINKS(allow_mouse, 0), "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 332 }, +{ PROC_LINKS(allow_mouse, 0), "allow_mouse", 11, "Shows the mouse and causes all mouse input to be processed normally.", 68, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 331 }, { PROC_LINKS(auto_tab_line_at_cursor, 0), "auto_tab_line_at_cursor", 23, "Auto-indents the line on which the cursor sits.", 47, "w:\\4ed\\code\\4coder_auto_indent.cpp", 34, 629 }, { PROC_LINKS(auto_tab_range, 0), "auto_tab_range", 14, "Auto-indents the range between the cursor and the mark.", 55, "w:\\4ed\\code\\4coder_auto_indent.cpp", 34, 640 }, { PROC_LINKS(auto_tab_whole_file, 0), "auto_tab_whole_file", 19, "Audo-indents the entire current buffer.", 39, "w:\\4ed\\code\\4coder_auto_indent.cpp", 34, 619 }, @@ -331,16 +331,16 @@ static Command_Metadata fcoder_metacmd_table[234] = { { PROC_LINKS(list_all_functions_all_buffers_lister, 0), "list_all_functions_all_buffers_lister", 37, "Creates a lister of locations that look like function definitions and declarations all buffers.", 95, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 338 }, { PROC_LINKS(list_all_functions_current_buffer, 0), "list_all_functions_current_buffer", 33, "Creates a jump list of lines of the current buffer that appear to define or declare functions.", 94, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 309 }, { PROC_LINKS(list_all_functions_current_buffer_lister, 0), "list_all_functions_current_buffer_lister", 40, "Creates a lister of locations that look like function definitions and declarations in the buffer.", 97, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 319 }, -{ PROC_LINKS(list_all_locations, 0), "list_all_locations", 18, "Queries the user for a string and lists all exact case-sensitive matches found in all open buffers.", 99, "w:\\4ed\\code\\4coder_search.cpp", 29, 871 }, -{ PROC_LINKS(list_all_locations_case_insensitive, 0), "list_all_locations_case_insensitive", 35, "Queries the user for a string and lists all exact case-insensitive matches found in all open buffers.", 101, "w:\\4ed\\code\\4coder_search.cpp", 29, 885 }, -{ PROC_LINKS(list_all_locations_of_identifier, 0), "list_all_locations_of_identifier", 32, "Reads a token or word under the cursor and lists all exact case-sensitive mathces in all open buffers.", 102, "w:\\4ed\\code\\4coder_search.cpp", 29, 899 }, -{ PROC_LINKS(list_all_locations_of_identifier_case_insensitive, 0), "list_all_locations_of_identifier_case_insensitive", 49, "Reads a token or word under the cursor and lists all exact case-insensitive mathces in all open buffers.", 104, "w:\\4ed\\code\\4coder_search.cpp", 29, 906 }, -{ PROC_LINKS(list_all_locations_of_selection, 0), "list_all_locations_of_selection", 31, "Reads the string in the selected range and lists all exact case-sensitive mathces in all open buffers.", 102, "w:\\4ed\\code\\4coder_search.cpp", 29, 913 }, -{ PROC_LINKS(list_all_locations_of_selection_case_insensitive, 0), "list_all_locations_of_selection_case_insensitive", 48, "Reads the string in the selected range and lists all exact case-insensitive mathces in all open buffers.", 104, "w:\\4ed\\code\\4coder_search.cpp", 29, 920 }, -{ PROC_LINKS(list_all_locations_of_type_definition, 0), "list_all_locations_of_type_definition", 37, "Queries user for string, lists all locations of strings that appear to define a type whose name matches the input string.", 121, "w:\\4ed\\code\\4coder_search.cpp", 29, 927 }, -{ PROC_LINKS(list_all_locations_of_type_definition_of_identifier, 0), "list_all_locations_of_type_definition_of_identifier", 51, "Reads a token or word under the cursor and lists all locations of strings that appear to define a type whose name matches it.", 125, "w:\\4ed\\code\\4coder_search.cpp", 29, 938 }, -{ PROC_LINKS(list_all_substring_locations, 0), "list_all_substring_locations", 28, "Queries the user for a string and lists all case-sensitive substring matches found in all open buffers.", 103, "w:\\4ed\\code\\4coder_search.cpp", 29, 878 }, -{ PROC_LINKS(list_all_substring_locations_case_insensitive, 0), "list_all_substring_locations_case_insensitive", 45, "Queries the user for a string and lists all case-insensitive substring matches found in all open buffers.", 105, "w:\\4ed\\code\\4coder_search.cpp", 29, 892 }, +{ PROC_LINKS(list_all_locations, 0), "list_all_locations", 18, "Queries the user for a string and lists all exact case-sensitive matches found in all open buffers.", 99, "w:\\4ed\\code\\4coder_search.cpp", 29, 833 }, +{ PROC_LINKS(list_all_locations_case_insensitive, 0), "list_all_locations_case_insensitive", 35, "Queries the user for a string and lists all exact case-insensitive matches found in all open buffers.", 101, "w:\\4ed\\code\\4coder_search.cpp", 29, 847 }, +{ PROC_LINKS(list_all_locations_of_identifier, 0), "list_all_locations_of_identifier", 32, "Reads a token or word under the cursor and lists all exact case-sensitive mathces in all open buffers.", 102, "w:\\4ed\\code\\4coder_search.cpp", 29, 861 }, +{ PROC_LINKS(list_all_locations_of_identifier_case_insensitive, 0), "list_all_locations_of_identifier_case_insensitive", 49, "Reads a token or word under the cursor and lists all exact case-insensitive mathces in all open buffers.", 104, "w:\\4ed\\code\\4coder_search.cpp", 29, 868 }, +{ PROC_LINKS(list_all_locations_of_selection, 0), "list_all_locations_of_selection", 31, "Reads the string in the selected range and lists all exact case-sensitive mathces in all open buffers.", 102, "w:\\4ed\\code\\4coder_search.cpp", 29, 875 }, +{ PROC_LINKS(list_all_locations_of_selection_case_insensitive, 0), "list_all_locations_of_selection_case_insensitive", 48, "Reads the string in the selected range and lists all exact case-insensitive mathces in all open buffers.", 104, "w:\\4ed\\code\\4coder_search.cpp", 29, 882 }, +{ PROC_LINKS(list_all_locations_of_type_definition, 0), "list_all_locations_of_type_definition", 37, "Queries user for string, lists all locations of strings that appear to define a type whose name matches the input string.", 121, "w:\\4ed\\code\\4coder_search.cpp", 29, 889 }, +{ PROC_LINKS(list_all_locations_of_type_definition_of_identifier, 0), "list_all_locations_of_type_definition_of_identifier", 51, "Reads a token or word under the cursor and lists all locations of strings that appear to define a type whose name matches it.", 125, "w:\\4ed\\code\\4coder_search.cpp", 29, 900 }, +{ PROC_LINKS(list_all_substring_locations, 0), "list_all_substring_locations", 28, "Queries the user for a string and lists all case-sensitive substring matches found in all open buffers.", 103, "w:\\4ed\\code\\4coder_search.cpp", 29, 840 }, +{ PROC_LINKS(list_all_substring_locations_case_insensitive, 0), "list_all_substring_locations_case_insensitive", 45, "Queries the user for a string and lists all case-insensitive substring matches found in all open buffers.", 105, "w:\\4ed\\code\\4coder_search.cpp", 29, 854 }, { PROC_LINKS(lister__activate, 0), "lister__activate", 16, "A lister mode command that activates the list's action on the highlighted item.", 79, "w:\\4ed\\code\\4coder_lists.cpp", 28, 15 }, { PROC_LINKS(lister__backspace_text_field, 0), "lister__backspace_text_field", 28, "A lister mode command that dispatches to the lister's backspace text field handler.", 83, "w:\\4ed\\code\\4coder_lists.cpp", 28, 41 }, { PROC_LINKS(lister__backspace_text_field__default, 0), "lister__backspace_text_field__default", 37, "A lister mode command that backspaces one character from the text field.", 72, "w:\\4ed\\code\\4coder_lists.cpp", 28, 145 }, @@ -407,7 +407,7 @@ static Command_Metadata fcoder_metacmd_table[234] = { { PROC_LINKS(query_replace_selection, 0), "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\\4coder_base_commands.cpp", 36, 1117 }, { PROC_LINKS(redo, 0), "redo", 4, "Advances forward through the undo history in the buffer containing the most recent regular edit.", 96, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1808 }, { PROC_LINKS(redo_this_buffer, 0), "redo_this_buffer", 16, "Advances forwards through the undo history of the current buffer.", 65, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1716 }, -{ PROC_LINKS(remap_interactive, 0), "remap_interactive", 17, "Switch to a named key binding map.", 34, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 382 }, +{ PROC_LINKS(remap_interactive, 0), "remap_interactive", 17, "Switch to a named key binding map.", 34, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 381 }, { PROC_LINKS(rename_file_query, 0), "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\\4coder_base_commands.cpp", 36, 1257 }, { PROC_LINKS(rename_parameter, 0), "rename_parameter", 16, "If the cursor is found to be on the name of a function parameter in the signature of a function definition, all occurences within the scope of the function will be replaced with a new provided string.", 200, "w:\\4ed\\code\\4coder_experiments.cpp", 34, 383 }, { PROC_LINKS(reopen, 0), "reopen", 6, "Reopen the current buffer from the hard drive.", 46, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1640 }, @@ -447,8 +447,8 @@ static Command_Metadata fcoder_metacmd_table[234] = { { PROC_LINKS(set_bindings_default, 0), "set_bindings_default", 20, "Remap keybindings using the 'default' mapping rule.", 51, "w:\\4ed\\code\\4coder_remapping_commands.cpp", 41, 61 }, { PROC_LINKS(set_bindings_mac_default, 0), "set_bindings_mac_default", 24, "Remap keybindings using the 'mac-default' mapping rule.", 55, "w:\\4ed\\code\\4coder_remapping_commands.cpp", 41, 75 }, { PROC_LINKS(set_mark, 0), "set_mark", 8, "Sets the mark to the current position of the cursor.", 52, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 121 }, -{ PROC_LINKS(set_mode_to_notepad_like, 0), "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 350 }, -{ PROC_LINKS(set_mode_to_original, 0), "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 344 }, +{ PROC_LINKS(set_mode_to_notepad_like, 0), "set_mode_to_notepad_like", 24, "Sets the edit mode to Notepad like.", 35, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 349 }, +{ PROC_LINKS(set_mode_to_original, 0), "set_mode_to_original", 20, "Sets the edit mode to 4coder original.", 38, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 343 }, { PROC_LINKS(setup_build_bat, 0), "setup_build_bat", 15, "Queries the user for several configuration options and initializes a new build batch script.", 92, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 1498 }, { PROC_LINKS(setup_build_bat_and_sh, 0), "setup_build_bat_and_sh", 22, "Queries the user for several configuration options and initializes a new build batch script.", 92, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 1510 }, { PROC_LINKS(setup_build_sh, 0), "setup_build_sh", 14, "Queries the user for several configuration options and initializes a new build shell script.", 92, "w:\\4ed\\code\\4coder_project_commands.cpp", 39, 1504 }, @@ -458,19 +458,19 @@ static Command_Metadata fcoder_metacmd_table[234] = { { PROC_LINKS(snipe_token_or_word, 0), "snipe_token_or_word", 19, "Delete a single, whole token on or to the left of the cursor and post it to the clipboard.", 90, "w:\\4ed\\code\\4coder_seek.cpp", 27, 1224 }, { PROC_LINKS(snipe_token_or_word_right, 0), "snipe_token_or_word_right", 25, "Delete a single, whole token on or to the right of the cursor and post it to the clipboard.", 91, "w:\\4ed\\code\\4coder_seek.cpp", 27, 1230 }, { PROC_LINKS(snippet_lister, 0), "snippet_lister", 14, "Opens a snippet lister for inserting whole pre-written snippets of text.", 72, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 248 }, -{ PROC_LINKS(suppress_mouse, 0), "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 326 }, +{ PROC_LINKS(suppress_mouse, 0), "suppress_mouse", 14, "Hides the mouse and causes all mosue input (clicks, position, wheel) to be ignored.", 83, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 325 }, { PROC_LINKS(swap_buffers_between_panels, 0), "swap_buffers_between_panels", 27, "Set the other non-active panel to view the buffer that the active panel views, and switch to that panel.", 104, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1592 }, { PROC_LINKS(to_lowercase, 0), "to_lowercase", 12, "Converts all ascii text in the range between the cursor and the mark to lowercase.", 82, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 421 }, { PROC_LINKS(to_uppercase, 0), "to_uppercase", 12, "Converts all ascii text in the range between the cursor and the mark to uppercase.", 82, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 401 }, { PROC_LINKS(toggle_filebar, 0), "toggle_filebar", 14, "Toggles the visibility status of the current view's filebar.", 60, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 555 }, { PROC_LINKS(toggle_fps_meter, 0), "toggle_fps_meter", 16, "Toggles the visibility of the FPS performance meter", 51, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 573 }, -{ PROC_LINKS(toggle_fullscreen, 0), "toggle_fullscreen", 17, "Toggle fullscreen mode on or off. The change(s) do not take effect until the next frame.", 89, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 374 }, -{ PROC_LINKS(toggle_highlight_enclosing_scopes, 0), "toggle_highlight_enclosing_scopes", 33, "In code files scopes surrounding the cursor are highlighted with distinguishing colors.", 87, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 362 }, -{ PROC_LINKS(toggle_highlight_line_at_cursor, 0), "toggle_highlight_line_at_cursor", 31, "Toggles the line highlight at the cursor.", 41, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 356 }, +{ PROC_LINKS(toggle_fullscreen, 0), "toggle_fullscreen", 17, "Toggle fullscreen mode on or off. The change(s) do not take effect until the next frame.", 89, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 373 }, +{ PROC_LINKS(toggle_highlight_enclosing_scopes, 0), "toggle_highlight_enclosing_scopes", 33, "In code files scopes surrounding the cursor are highlighted with distinguishing colors.", 87, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 361 }, +{ PROC_LINKS(toggle_highlight_line_at_cursor, 0), "toggle_highlight_line_at_cursor", 31, "Toggles the line highlight at the cursor.", 41, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 355 }, { PROC_LINKS(toggle_line_numbers, 0), "toggle_line_numbers", 19, "Toggles the left margin line numbers.", 37, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 660 }, { PROC_LINKS(toggle_line_wrap, 0), "toggle_line_wrap", 16, "Toggles the current buffer's line wrapping status.", 50, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 564 }, -{ PROC_LINKS(toggle_mouse, 0), "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 338 }, -{ PROC_LINKS(toggle_paren_matching_helper, 0), "toggle_paren_matching_helper", 28, "In code files matching parentheses pairs are colored with distinguishing colors.", 80, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 368 }, +{ PROC_LINKS(toggle_mouse, 0), "toggle_mouse", 12, "Toggles the mouse suppression mode, see suppress_mouse and allow_mouse.", 71, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 337 }, +{ PROC_LINKS(toggle_paren_matching_helper, 0), "toggle_paren_matching_helper", 28, "In code files matching parentheses pairs are colored with distinguishing colors.", 80, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 367 }, { PROC_LINKS(toggle_show_whitespace, 0), "toggle_show_whitespace", 22, "Toggles the current buffer's whitespace visibility status.", 58, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 653 }, { PROC_LINKS(toggle_virtual_whitespace, 0), "toggle_virtual_whitespace", 25, "Toggles the current buffer's virtual whitespace status.", 55, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 642 }, { PROC_LINKS(uncomment_line, 0), "uncomment_line", 14, "If present, delete '//' at the beginning of the line after leading whitespace.", 78, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 147 }, @@ -478,7 +478,7 @@ static Command_Metadata fcoder_metacmd_table[234] = { { PROC_LINKS(undo_this_buffer, 0), "undo_this_buffer", 16, "Advances backwards through the undo history of the current buffer.", 66, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1702 }, { PROC_LINKS(view_buffer_other_panel, 0), "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\\4coder_base_commands.cpp", 36, 1582 }, { PROC_LINKS(view_jump_list_with_lister, 0), "view_jump_list_with_lister", 26, "When executed on a buffer with jumps, creates a persistent lister for all the jumps", 83, "w:\\4ed\\code\\4coder_jump_lister.cpp", 34, 106 }, -{ PROC_LINKS(word_complete, 0), "word_complete", 13, "Iteratively tries completing the word to the left of the cursor with other words in open buffers that have the same prefix string.", 130, "w:\\4ed\\code\\4coder_search.cpp", 29, 958 }, +{ PROC_LINKS(word_complete, 0), "word_complete", 13, "Iteratively tries completing the word to the left of the cursor with other words in open buffers that have the same prefix string.", 130, "w:\\4ed\\code\\4coder_search.cpp", 29, 920 }, { PROC_LINKS(write_and_auto_tab, 0), "write_and_auto_tab", 18, "Inserts a character and auto-indents the line on which the cursor sits.", 71, "w:\\4ed\\code\\4coder_auto_indent.cpp", 34, 652 }, { PROC_LINKS(write_block, 0), "write_block", 11, "At the cursor, insert a block comment.", 38, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 103 }, { PROC_LINKS(write_character, 0), "write_character", 15, "Inserts whatever character was used to trigger this command.", 60, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 67 }, diff --git a/4coder_insertion.cpp b/4coder_insertion.cpp index ad7aba0b..39268572 100644 --- a/4coder_insertion.cpp +++ b/4coder_insertion.cpp @@ -101,14 +101,5 @@ insert_line_from_buffer(Buffer_Insertion *insertion, Buffer_ID buffer_id, i32 li return(insert_line_from_buffer(insertion, buffer_id, line, 0)); } -static b32 -insert_mirror_range(Buffer_Insertion *insertion, Buffer_ID source, i32 source_first, i32 length){ - b32 result = mirror_buffer_insert_range(insertion->app, insertion->buffer, source, insertion->at, source_first, length); - if (result){ - insertion->at += length; - } - return(result); -} - // BOTTOM diff --git a/4coder_mirror.cpp b/4coder_mirror.cpp deleted file mode 100644 index 06500b26..00000000 --- a/4coder_mirror.cpp +++ /dev/null @@ -1,956 +0,0 @@ -/* -4coder_mirror.cpp - Commands and helpers for parsing jump locations from -compiler errors, sticking markers on jump locations, and jumping to them. -*/ - -// TOP - -static Managed_Variable_ID mirror_root_loc = 0; -#define DefaultMirrorRootName "DEFAULT.mirror_root" - -static b32 -mirror_edit_handler(Application_Links *app, Buffer_ID buffer_id, i32 start, i32 one_past_last, String text); - -//////////////////////////////// - -static void -mirror__global_init(Application_Links *app){ - if (mirror_root_loc == 0){ - mirror_root_loc = managed_variable_create_or_get_id(app, DefaultMirrorRootName, 0); - } -} - -static Managed_Object -mirror__check_scope_for_mirror(Application_Links *app, Managed_Scope scope){ - Managed_Object result = 0; - Managed_Object mirror = 0; - if (managed_variable_get(app, scope, mirror_root_loc, &mirror)){ - if (mirror != 0){ - Managed_Object_Type object_type = managed_object_get_type(app, mirror); - if (object_type == ManagedObjectType_Memory){ - result = mirror; - } - else{ - managed_variable_set(app, scope, mirror_root_loc, 0); - } - } - } - return(result); -} - -static b32 -mirror_init__inner(Application_Links *app, Buffer_ID buffer, Mirror_Flags flags, Managed_Object *mirror_object_out){ - b32 result = false; - Managed_Scope scope = 0; - if (buffer_get_managed_scope(app, buffer, &scope)){ - Managed_Object mirror = mirror__check_scope_for_mirror(app, scope); - if (mirror == 0){ - mirror = alloc_managed_memory_in_scope(app, scope, sizeof(Mirror), 1); - if (managed_variable_set(app, scope, mirror_root_loc, mirror)){ - Mirror mirror_data = {}; - mirror_data.mirror_buffer_id = buffer; - mirror_data.mode = MirrorMode_Constructing; - mirror_data.flags = flags; - mirror_data.mirror_scope = create_user_managed_scope(app); - *mirror_object_out = mirror; - managed_object_store_data(app, mirror, 0, 1, &mirror_data); - buffer_set_edit_handler(app, buffer, mirror_edit_handler); - result = true; - } - } - } - return(result); -} - -static b32 -mirror_end__inner(Application_Links *app, Managed_Object mirror){ - b32 result = false; - Managed_Scope scope = managed_object_get_containing_scope(app, mirror); - Managed_Object mirror_check = mirror__check_scope_for_mirror(app, scope); - if (mirror_check == mirror){ - Mirror mirror_data = {}; - if (managed_object_load_data(app, mirror, 0, 1, &mirror_data)){ - destroy_user_managed_scope(app, mirror_data.mirror_scope); - buffer_set_edit_handler(app, mirror_data.mirror_buffer_id, 0); - result = true; - } - managed_variable_set(app, scope, mirror_root_loc, 0); - managed_object_free(app, mirror); - } - return(result); -} - -struct Mirror__Binary_Search_Result{ - b32 abutting; - i32 index; -}; - -static Mirror__Binary_Search_Result -mirror__binary_search_max_point_below(Marker *ranges, i32 target, i32 first, i32 one_past_last){ - Mirror__Binary_Search_Result result = {}; - result.index = -1; - first = (first*2) - 1; - one_past_last = one_past_last*2; - for (;;){ - i32 mid = (first + one_past_last)/2; - i32 pos = -1; - if (mid != -1){ - Marker *marker = ranges + mid; - pos = marker->pos; - } - if (pos > target){ - one_past_last = mid; - } - else if (pos < target){ - first = mid; - } - else{ - result.abutting = true; - result.index = mid; - break; - } - if (first + 1 >= one_past_last){ - result.index = first; - break; - } - } - return(result); -} - -static Mirror__Binary_Search_Result -mirror__binary_search_min_point_above(Marker *ranges, i32 target, i32 first, i32 one_past_last, - i32 fake_index, i32 fake_pos){ - Mirror__Binary_Search_Result result = {}; - result.index = -1; - first = first*2; - one_past_last = (one_past_last*2) + 1; - for (;;){ - i32 mid = (first + one_past_last - 1)/2; - i32 pos = fake_pos; - if (mid != fake_index){ - Marker *marker = ranges + mid; - pos = marker->pos; - } - if (pos > target){ - one_past_last = mid + 1; - } - else if (pos < target){ - first = mid + 1; - } - else{ - result.abutting = true; - result.index = mid; - break; - } - if (first + 1 >= one_past_last){ - result.index = first; - break; - } - } - return(result); -} - -static Mirror_Hot -mirror__hot_from_data(Application_Links *app, Arena *arena, Mirror mirror_data){ - Mirror_Hot result = {}; - Mirror_Hot mirror_hot = {}; - mirror_hot.count = mirror_data.count; - mirror_hot.source_buffer_ids = push_array(arena, Buffer_ID, mirror_hot.count); - mirror_hot.mirror_ranges = push_array(arena, Marker, (mirror_hot.count)*2); - mirror_hot.source_ranges = push_array(arena, Managed_Object, mirror_hot.count); - if (managed_object_load_data(app, mirror_data.source_buffer_ids, 0, mirror_hot.count, mirror_hot.source_buffer_ids) && - managed_object_load_data(app, mirror_data.mirror_ranges, 0, mirror_hot.count*2, mirror_hot.mirror_ranges) && - managed_object_load_data(app, mirror_data.source_ranges, 0, mirror_hot.count, mirror_hot.source_ranges)){ - result = mirror_hot; - } - return(result); -} - -static b32 -mirror__min_max_point_indices_not_intersecting(i32 above_point, i32 below_point, i32 *range_index_out){ - b32 result = false; - if (below_point < above_point && (above_point%2) == 0 && ((below_point + 2)%2) == 1){ - *range_index_out = above_point/2; - result = true; - } - return(result); -} - -static b32 -mirror__min_max_point_indices_contained(i32 above_point, i32 below_point, i32 *range_index_out){ - b32 result = false; - if (below_point < above_point && (above_point%2) == 1 && ((below_point + 2)%2) == 0){ - *range_index_out = above_point/2; - result = true; - } - return(result); -} - -struct Mirror__Check_Range_Result{ - b32 passed_checks; - i32 insert_index; -}; - -static Mirror__Check_Range_Result -mirror__check_range_to_add(Application_Links *app, Arena *scratch, i32 mirror_first, i32 source_first, i32 length, - Buffer_Summary *source_buffer, Buffer_Summary *mirror_buffer, Mirror_Hot *mirror_hot, - i32 collidable_indices_first, b32 auto_trust_text){ - // check the new range for the following rules and determine the insert index - Mirror__Check_Range_Result result = {}; - result.insert_index = -1; - - // 1. the source range must be entirely contained in the source buffer and - // the mirror range must be entirely contained in the mirror buffer - i32 source_one_past_last = source_first + length; - i32 mirror_one_past_last = mirror_first + length; - if (0 <= source_first && source_one_past_last <= source_buffer->size && - 0 <= mirror_first && mirror_one_past_last <= mirror_buffer->size){ - - // 2. the mirror range must not overlap or abut any existing mirror ranges - b32 independent_range = false; - if (mirror_hot->count == 0){ - independent_range = true; - result.insert_index = 0; - } - else{ - i32 fake_index = mirror_hot->count*2; - i32 fake_pos = mirror_buffer->size + 1; - Mirror__Binary_Search_Result above_point = mirror__binary_search_min_point_above(mirror_hot->mirror_ranges, mirror_first, - collidable_indices_first, mirror_hot->count, - fake_index, fake_pos); - Mirror__Binary_Search_Result below_point = {}; - if (!above_point.abutting){ - below_point = mirror__binary_search_max_point_below(mirror_hot->mirror_ranges, mirror_first, - collidable_indices_first, mirror_hot->count); - if (!below_point.abutting){ - if (mirror__min_max_point_indices_not_intersecting(above_point.index, below_point.index, &result.insert_index)){ - independent_range = true; - Assert(0 <= result.insert_index && result.insert_index <= mirror_hot->count); - } - } - } - } - - if (independent_range){ - // 3. the text in the source range must exactly match the text in the mirror range - if (auto_trust_text){ - result.passed_checks = true; - } - else{ - char *buffer_1 = push_array(scratch, char, length); - char *buffer_2 = push_array(scratch, char, length); - if (buffer_read_range(app, source_buffer->buffer_id, source_first, source_first + length, buffer_1)){ - if (buffer_read_range(app, mirror_buffer->buffer_id, mirror_first, mirror_first + length, buffer_2)){ - if (memcmp(buffer_1, buffer_2, length) == 0){ - result.passed_checks = true; - } - } - } - } - } - } - return(result); -} - -static b32 -mirror_add_range__inner_check_optimization(Application_Links *app, Managed_Object mirror, Buffer_ID source, - i32 mirror_first, i32 source_first, i32 length, - i32 collidable_indices_first, b32 auto_trust_text, i32 *insert_index_out){ - b32 result = false; - if (length > 0){ - Buffer_Summary source_buffer = {}; - if (get_buffer_summary(app, source, AccessAll, &source_buffer)){ - Managed_Scope scope = managed_object_get_containing_scope(app, mirror); - Managed_Object mirror_check = mirror__check_scope_for_mirror(app, scope); - Mirror mirror_data = {}; - if (mirror_check == mirror && managed_object_load_data(app, mirror, 0, 1, &mirror_data)){ - Buffer_Summary mirror_buffer = {}; - Buffer_ID mirror_id = mirror_data.mirror_buffer_id; - if (get_buffer_summary(app, mirror_id, AccessAll, &mirror_buffer)){ - Arena *arena = context_get_arena(app); - Temp_Memory_Arena temp = begin_temp_memory(arena); - - // read mirror data into hot structure - Mirror_Hot mirror_hot = {}; - mirror_hot.count = mirror_data.count; - mirror_hot.source_buffer_ids = push_array(arena, Buffer_ID, mirror_hot.count); - mirror_hot.mirror_ranges = push_array(arena, Marker, (mirror_hot.count)*2); - mirror_hot.source_ranges = push_array(arena, Managed_Object, mirror_hot.count); - - b32 load_success = false; - if (mirror_hot.count == 0){ - load_success = true; - } - else{ - load_success = (managed_object_load_data(app, mirror_data.source_buffer_ids, 0, mirror_hot.count , mirror_hot.source_buffer_ids) && - managed_object_load_data(app, mirror_data.mirror_ranges , 0, mirror_hot.count*2, mirror_hot.mirror_ranges ) && - managed_object_load_data(app, mirror_data.source_ranges , 0, mirror_hot.count , mirror_hot.source_ranges )); - } - - if (load_success){ - Mirror__Check_Range_Result check = mirror__check_range_to_add(app, arena, mirror_first, source_first, length, - &source_buffer, &mirror_buffer, &mirror_hot, - collidable_indices_first, auto_trust_text); - - if (check.passed_checks){ - // insert the new range at the insert index - b32 r = true; - i32 insert_index = check.insert_index; - *insert_index_out = insert_index; - - Marker mirror_range[2] = {}; - mirror_range[0].pos = mirror_first; - mirror_range[0].lean_right = false; - mirror_range[1].pos = mirror_first + length; - mirror_range[1].lean_right = true; - - Marker source_range[2] = {}; - source_range[0].pos = source_first; - source_range[0].lean_right = false; - source_range[1].pos = source_first + length; - source_range[1].lean_right = true; - - Managed_Scope scopes[3] = {}; - scopes[0] = scope; - scopes[1] = mirror_data.mirror_scope; - buffer_get_managed_scope(app, source, &scopes[2]); - - Managed_Scope source_sub_scope = get_managed_scope_with_multiple_dependencies(app, scopes, 3); - - Managed_Object new_source_range = alloc_buffer_markers_on_buffer(app, source, 2, &source_sub_scope); - r = r && managed_object_store_data(app, new_source_range, 0, 2, &source_range); - - if (mirror_data.count + 1 > mirror_data.max){ - if (mirror_data.count != 0){ - r = r && managed_object_free(app, mirror_data.source_buffer_ids); - r = r && managed_object_free(app, mirror_data.mirror_ranges); - r = r && managed_object_free(app, mirror_data.source_ranges); - } - - Managed_Scope mirror_sub_scope = get_managed_scope_with_multiple_dependencies(app, scopes, 2); - i32 new_max = 256; - if (new_max <= mirror_data.max){ - new_max = mirror_data.max*2; - } - mirror_data.source_buffer_ids = alloc_managed_memory_in_scope(app, mirror_sub_scope, sizeof(Buffer_ID), new_max); - mirror_data.mirror_ranges = alloc_buffer_markers_on_buffer(app, mirror_id, new_max*2, &mirror_sub_scope); - mirror_data.source_ranges = alloc_managed_memory_in_scope(app, mirror_sub_scope, sizeof(Managed_Object), new_max); - - mirror_data.max = new_max; - - // head ranges - i32 head_count = insert_index; - if (head_count > 0){ - r = r && managed_object_store_data(app, mirror_data.source_buffer_ids, 0, head_count , mirror_hot.source_buffer_ids); - r = r && managed_object_store_data(app, mirror_data.mirror_ranges , 0, head_count*2, mirror_hot.mirror_ranges ); - r = r && managed_object_store_data(app, mirror_data.source_ranges , 0, head_count , mirror_hot.source_ranges ); - } - } - - // tail ranges - i32 tail_count = mirror_hot.count - insert_index; - if (tail_count > 0){ - i32 to = insert_index + 1; - i32 from = insert_index; - r = r && managed_object_store_data(app, mirror_data.source_buffer_ids, to , tail_count , mirror_hot.source_buffer_ids + from); - r = r && managed_object_store_data(app, mirror_data.mirror_ranges , to*2, tail_count*2, mirror_hot.mirror_ranges + from*2 ); - r = r && managed_object_store_data(app, mirror_data.source_ranges , to , tail_count , mirror_hot.source_ranges + from ); - } - - // new range - r = r && managed_object_store_data(app, mirror_data.source_buffer_ids, insert_index , 1, &source ); - r = r && managed_object_store_data(app, mirror_data.mirror_ranges , insert_index*2, 2, mirror_range ); - r = r && managed_object_store_data(app, mirror_data.source_ranges , insert_index , 1, &new_source_range); - - mirror_data.count += 1; - - managed_object_store_data(app, mirror, 0, 1, &mirror_data); - - result = r; - } - } - - end_temp_memory(temp); - } - } - } - } - return(result); -} - -static b32 -mirror_add_range__inner(Application_Links *app, Managed_Object mirror, Buffer_ID source, - i32 mirror_first, i32 source_first, i32 length){ - i32 ignore = 0; - return(mirror_add_range__inner_check_optimization(app, mirror, source, mirror_first, source_first, length, 0, false, &ignore)); -} - -static b32 -mirror_set_mode__inner(Application_Links *app, Managed_Object mirror, Mirror_Mode mode){ - b32 result = false; - Managed_Scope scope = managed_object_get_containing_scope(app, mirror); - Managed_Object mirror_check = mirror__check_scope_for_mirror(app, scope); - if (mirror_check == mirror){ - Mirror mirror_data = {}; - if (managed_object_load_data(app, mirror, 0, 1, &mirror_data)){ - mirror_data.mode = mode; - if (managed_object_store_data(app, mirror, 0, 1, &mirror_data)){ - result = true; - } - } - } - return(result); -} - -static b32 -mirror_get_mode__inner(Application_Links *app, Managed_Object mirror, Mirror_Mode *mode_out){ - b32 result = false; - Managed_Scope scope = managed_object_get_containing_scope(app, mirror); - Managed_Object mirror_check = mirror__check_scope_for_mirror(app, scope); - if (mirror_check == mirror){ - Mirror mirror_data = {}; - if (managed_object_load_data(app, mirror, 0, 1, &mirror_data)){ - *mode_out = mirror_data.mode; - result = true; - } - } - return(result); -} - -static b32 -mirror_set_flags__inner(Application_Links *app, Managed_Object mirror, Mirror_Flags flags){ - b32 result = false; - Managed_Scope scope = managed_object_get_containing_scope(app, mirror); - Managed_Object mirror_check = mirror__check_scope_for_mirror(app, scope); - if (mirror_check == mirror){ - Mirror mirror_data = {}; - if (managed_object_load_data(app, mirror, 0, 1, &mirror_data)){ - mirror_data.flags = flags; - if (managed_object_store_data(app, mirror, 0, 1, &mirror_data)){ - result = true; - } - } - } - return(result); -} - -static b32 -mirror_get_flags__inner(Application_Links *app, Managed_Object mirror, Mirror_Flags *flags_out){ - b32 result = false; - Managed_Scope scope = managed_object_get_containing_scope(app, mirror); - Managed_Object mirror_check = mirror__check_scope_for_mirror(app, scope); - if (mirror_check == mirror){ - Mirror mirror_data = {}; - if (managed_object_load_data(app, mirror, 0, 1, &mirror_data)){ - *flags_out = mirror_data.flags; - result = true; - } - } - return(result); -} - -//////////////////////////////// - -static b32 -mirror_init(Application_Links *app, Buffer_ID buffer, Mirror_Flags flags, Managed_Object *mirror_object_out){ - mirror__global_init(app); - return(mirror_init__inner(app, buffer, flags, mirror_object_out)); -} - -static b32 -mirror_end(Application_Links *app, Managed_Object mirror){ - mirror__global_init(app); - return(mirror_end__inner(app, mirror)); -} - -static b32 -mirror_add_range(Application_Links *app, Managed_Object mirror, Buffer_ID source, - i32 mirror_first, i32 source_first, i32 length){ - mirror__global_init(app); - return(mirror_add_range__inner(app, mirror, source, mirror_first, source_first, length)); -} - -static b32 -mirror_set_mode(Application_Links *app, Managed_Object mirror, Mirror_Mode mode){ - mirror__global_init(app); - return(mirror_set_mode__inner(app, mirror, mode)); -} - -static b32 -mirror_get_mode(Application_Links *app, Managed_Object mirror, Mirror_Mode *mode_out){ - mirror__global_init(app); - return(mirror_get_mode__inner(app, mirror, mode_out)); -} - -static b32 -mirror_set_flags(Application_Links *app, Managed_Object mirror, Mirror_Flags flags){ - mirror__global_init(app); - return(mirror_set_flags__inner(app, mirror, flags)); -} - -static b32 -mirror_get_flags(Application_Links *app, Managed_Object mirror, Mirror_Flags *flags_out){ - mirror__global_init(app); - return(mirror_get_flags__inner(app, mirror, flags_out)); -} - -//////////////////////////////// - -static b32 -mirror_buffer_create(Application_Links *app, String buffer_name, Mirror_Flags flags, Buffer_ID *mirror_buffer_id_out){ - mirror__global_init(app); - b32 result = false; - Buffer_ID new_buffer = 0; - if (!get_buffer_by_name(app, buffer_name, AccessAll, &new_buffer)){ - if (new_buffer == 0){ - if (create_buffer(app, buffer_name, BufferCreate_NeverAttachToFile|BufferCreate_AlwaysNew, &new_buffer)){ - Managed_Object ignore_object = 0; - if (mirror_init__inner(app, new_buffer, flags, &ignore_object)){ - *mirror_buffer_id_out = new_buffer; - result = true; - } - } - } - } - return(false); -} - -static Managed_Scope -mirror__buffer_to_object(Application_Links *app, Buffer_ID buffer){ - Managed_Object result = 0; - Managed_Scope scope = 0; - if (buffer_get_managed_scope(app, buffer, &scope)){ - result = mirror__check_scope_for_mirror(app, scope); - } - return(result); -} - -static b32 -mirror_buffer_end(Application_Links *app, Buffer_ID mirror){ - mirror__global_init(app); - b32 result = false; - Managed_Object mirror_object = mirror__buffer_to_object(app, mirror); - if (mirror_object != 0){ - result = mirror_end__inner(app, mirror_object); - } - return(result); -} - -static b32 -mirror_buffer_add_range_exact(Application_Links *app, Buffer_ID mirror, Buffer_ID source, - i32 mirror_first, i32 source_first, i32 length){ - mirror__global_init(app); - b32 result = false; - Managed_Object mirror_object = mirror__buffer_to_object(app, mirror); - if (mirror_object != 0){ - result = mirror_add_range__inner(app, mirror_object, source, mirror_first, source_first, length); - } - return(result); -} - -static i32 -mirror__range_loose_get_length(Application_Links *app, Buffer_ID mirror, Buffer_ID source, - i32 mirror_first, i32 source_first, i32 max_length){ - i32 result = 0; - Arena *arena = context_get_arena(app); - Temp_Memory_Arena temp = begin_temp_memory(arena); - char *buffer_1 = push_array(arena, char, max_length); - char *buffer_2 = push_array(arena, char, max_length); - if (buffer_read_range(app, source, source_first, source_first + max_length, buffer_1)){ - if (buffer_read_range(app, mirror, mirror_first, mirror_first + max_length, buffer_2)){ - for (; result < max_length; - result += 1){ - if (buffer_1[result] != buffer_2[result]){ - break; - } - } - } - } - end_temp_memory(temp); - return(result); -} - -static b32 -mirror_buffer_add_range_loose(Application_Links *app, Buffer_ID mirror, Buffer_ID source, - i32 mirror_first, i32 source_first, i32 max_length){ - mirror__global_init(app); - b32 result = false; - i32 length = mirror__range_loose_get_length(app, mirror, source, mirror_first, source_first, max_length); - if (length > 0){ - Managed_Object mirror_object = mirror__buffer_to_object(app, mirror); - if (mirror_object != 0){ - result = mirror_add_range__inner(app, mirror_object, source, mirror_first, source_first, length); - } - } - return(result); -} - -static b32 -mirror_buffer_insert_range(Application_Links *app, Buffer_ID mirror, Buffer_ID source, - i32 mirror_insert_pos, i32 source_first, i32 length){ - mirror__global_init(app); - b32 result = false; - Managed_Object mirror_object = mirror__buffer_to_object(app, mirror); - if (mirror_object != 0){ - Mirror_Mode mode = 0; - if (mirror_get_mode__inner(app, mirror_object, &mode)){ - if (mode == MirrorMode_Constructing){ - b32 did_insert = false; - { - Arena *arena = context_get_arena(app); - Temp_Memory_Arena temp = begin_temp_memory(arena); - char *buffer = push_array(arena, char, length); - if (buffer_read_range(app, source, source_first, source_first + length, buffer)){ - String string = make_string(buffer, length); - if (buffer_replace_range(app, mirror, mirror_insert_pos, mirror_insert_pos, string)){ - did_insert = true; - } - } - end_temp_memory(temp); - } - if (did_insert){ - result = mirror_add_range__inner(app, mirror_object, source, mirror_insert_pos, source_first, length); - } - } - } - } - return(result); -} - -static b32 -mirror_buffer_set_mode(Application_Links *app, Buffer_ID mirror, Mirror_Mode mode){ - mirror__global_init(app); - b32 result = false; - Managed_Object mirror_object = mirror__buffer_to_object(app, mirror); - if (mirror_object != 0){ - result = mirror_set_mode__inner(app, mirror_object, mode); - } - return(result); -} - -static b32 -mirror_buffer_get_mode(Application_Links *app, Buffer_ID mirror, Mirror_Mode *mode_out){ - mirror__global_init(app); - b32 result = false; - Managed_Object mirror_object = mirror__buffer_to_object(app, mirror); - if (mirror_object != 0){ - result = mirror_get_mode__inner(app, mirror_object, mode_out); - } - return(result); -} - -static b32 -mirror_buffer_set_flags(Application_Links *app, Buffer_ID mirror, Mirror_Flags flags){ - mirror__global_init(app); - b32 result = false; - Managed_Object mirror_object = mirror__buffer_to_object(app, mirror); - if (mirror_object != 0){ - result = mirror_set_flags__inner(app, mirror_object, flags); - } - return(result); -} - -static b32 -mirror_buffer_get_flags(Application_Links *app, Buffer_ID mirror, Mirror_Flags *flags_out){ - mirror__global_init(app); - b32 result = false; - Managed_Object mirror_object = mirror__buffer_to_object(app, mirror); - if (mirror_object != 0){ - result = mirror_get_flags__inner(app, mirror_object, flags_out); - } - return(result); -} - -static b32 -mirror_buffer_refresh(Application_Links *app, Buffer_ID mirror){ - mirror__global_init(app); - b32 result = false; - Managed_Object mirror_object = mirror__buffer_to_object(app, mirror); - if (mirror_object != 0){ - // TODO(allen): - } - return(result); -} - -static void -mirror_quick_sort_mirror_ranges(Mirror_Range *ranges, i32 first, i32 one_past_last){ - i32 last = one_past_last - 1; - if (first < last){ - i32 pivot_mirror_first = ranges[last].mirror_first; - i32 j = first; - for (i32 i = first; i < last; i += 1){ - i32 mirror_first = ranges[i].mirror_first; - if (mirror_first < pivot_mirror_first){ - if (j < i){ - Mirror_Range t = ranges[i]; - ranges[i] = ranges[j]; - ranges[j] = t; - } - j += 1; - } - } - { - Mirror_Range t = ranges[last]; - ranges[last] = ranges[j]; - ranges[j] = t; - } - i32 pivot = j; - mirror_quick_sort_mirror_ranges(ranges, first, pivot); - mirror_quick_sort_mirror_ranges(ranges, pivot + 1, one_past_last); - } -} - -static b32 -mirror__check_range_array_sorting(Mirror_Range *ranges, i32 count){ - b32 result = true; - i32 prev_pos = -1; - for (i32 i = 0; i < count; i += 1){ - i32 first = ranges[i].mirror_first; - i32 one_past_last = first + ranges[i].length; - if (prev_pos < first && first <= one_past_last){ - prev_pos = one_past_last; - } - else{ - result = false; - break; - } - } - return(result); -} - -static b32 -mirror_buffer_add_range_exact_array(Application_Links *app, Buffer_ID mirror, Mirror_Range *ranges, i32 count){ - mirror__global_init(app); - b32 result = false; - Managed_Object mirror_object = mirror__buffer_to_object(app, mirror); - if (mirror_object != 0){ - if (mirror__check_range_array_sorting(ranges, count)){ - b32 r = true; - Mirror_Range *range = ranges; - i32 safe_to_ignore_index = 0; - for (i32 i = 0; i < count; i += 1, range += 1){ - i32 new_range_index = 0; - if (range->length > 0){ - if (!mirror_add_range__inner_check_optimization(app, mirror_object, range->source_buffer_id, - range->mirror_first, range->source_first, range->length, - safe_to_ignore_index, false, &new_range_index)){ - r = false; - } - else{ - safe_to_ignore_index = new_range_index + 1; - } - } - } - result = r; - } - } - return(result); -} - -static b32 -mirror_buffer_add_range_loose_array(Application_Links *app, Buffer_ID mirror, Mirror_Range *ranges, i32 count){ - mirror__global_init(app); - b32 result = false; - Managed_Object mirror_object = mirror__buffer_to_object(app, mirror); - if (mirror_object != 0){ - { - Mirror_Range *range = ranges; - for (i32 i = 0; i < count; i += 1, range += 1){ - range->length = mirror__range_loose_get_length(app, mirror, range->source_buffer_id, range->mirror_first, range->source_first, range->length); - } - } - if (mirror__check_range_array_sorting(ranges, count)){ - b32 r = true; - Mirror_Range *range = ranges; - i32 safe_to_ignore_index = 0; - for (i32 i = 0; i < count; i += 1, range += 1){ - i32 new_range_index = 0; - if (range->length > 0){ - if (!mirror_add_range__inner_check_optimization(app, mirror_object, range->source_buffer_id, - range->mirror_first, range->source_first, range->length, - safe_to_ignore_index, false, &new_range_index)){ - r = false; - } - else{ - safe_to_ignore_index = new_range_index + 1; - } - } - } - result = r; - } - } - return(result); -} - -static b32 -mirror_buffer_insert_range_array(Application_Links *app, Buffer_ID mirror, Mirror_Range *ranges, i32 count){ - mirror__global_init(app); - b32 result = false; - Managed_Object mirror_object = mirror__buffer_to_object(app, mirror); - if (mirror_object != 0){ - Mirror_Mode mode = 0; - if (mirror_get_mode__inner(app, mirror_object, &mode)){ - if (mode == MirrorMode_Constructing){ - if (mirror__check_range_array_sorting(ranges, count)){ - b32 r = true; - Mirror_Range *range = ranges; - i32 safe_to_ignore_index = 0; - i32 total_shift = 0; - Arena *arena = context_get_arena(app); - Temp_Memory_Arena temp = begin_temp_memory(arena); - for (i32 i = 0; i < count; i += 1, range += 1){ - i32 mirror_first = range->mirror_first + total_shift; - b32 did_insert = false; - { - Temp_Memory_Arena buffer_temp = begin_temp_memory(arena); - char *buffer = push_array(arena, char, range->length); - if (buffer_read_range(app, range->source_buffer_id, range->source_first, range->source_first + range->length, buffer)){ - String string = make_string(buffer, range->length); - if (buffer_replace_range(app, mirror, mirror_first, mirror_first, string)){ - did_insert = true; - } - } - end_temp_memory(buffer_temp); - } - i32 new_range_index = 0; - if (range->length > 0){ - if (!mirror_add_range__inner_check_optimization(app, mirror_object, range->source_buffer_id, - mirror_first, range->source_first, range->length, - safe_to_ignore_index, false, &new_range_index)){ - r = false; - } - else{ - safe_to_ignore_index = new_range_index + 1; - } - } - total_shift += range->length; - } - end_temp_memory(temp); - result = r; - } - } - } - } - return(result); -} - -//////////////////////////////// - -static b32 -mirror_edit_handler(Application_Links *app, Buffer_ID buffer_id, i32 first, i32 one_past_last, String text){ - mirror__global_init(app); - b32 result = false; - Buffer_Summary mirror_buffer = {}; - if (get_buffer_summary(app, buffer_id, AccessAll, &mirror_buffer)){ - Managed_Object mirror = mirror__buffer_to_object(app, buffer_id); - if (mirror != 0){ - Mirror_Mode mode = 0; - if (mirror_get_mode__inner(app, mirror, &mode)){ - Mirror mirror_data = {}; - if (managed_object_load_data(app, mirror, 0, 1, &mirror_data)){ - Arena *arena = context_get_arena(app); - Temp_Memory_Arena temp = begin_temp_memory(arena); - - Mirror_Hot mirror_hot = mirror__hot_from_data(app, arena, mirror_data); - switch (mode){ - case MirrorMode_Constructing: - { - b32 unreflected_range = false; - if (mirror_hot.count == 0){ - unreflected_range = true; - } - else{ - i32 fake_index = mirror_hot.count*2; - i32 fake_pos = mirror_buffer.size + 1; - Mirror__Binary_Search_Result above_point = mirror__binary_search_min_point_above(mirror_hot.mirror_ranges, first, - 0, mirror_hot.count, - fake_index, fake_pos); - Mirror__Binary_Search_Result below_point = mirror__binary_search_max_point_below(mirror_hot.mirror_ranges, one_past_last, - 0, mirror_hot.count); - i32 ignore = 0; - if (mirror__min_max_point_indices_not_intersecting(above_point.index, below_point.index, &ignore)){ - unreflected_range = true; - } - } - - if (unreflected_range){ - result = buffer_replace_range(app, buffer_id, first, one_past_last, text); - } - }break; - - case MirrorMode_Reflecting: - { - b32 newlines_are_jumps = ((mirror_data.flags & MirrorFlag_NewlinesAreJumps) != 0); - - b32 blocked = false; - if (newlines_are_jumps){ - if (has_substr(text, make_lit_string("\n"))){ - blocked = true; - } - if (match(text, "\n")){ - User_Input in = get_command_input(app); - if (in.key.modifiers[MDFR_SHIFT_INDEX]){ - goto_jump_at_cursor_same_panel_sticky(app); - } - else{ - goto_jump_at_cursor_sticky(app); - } - lock_jump_buffer(app, buffer_id); - } - } - - if (!blocked){ - b32 reflected_range = false; - i32 range_index = 0; - if (mirror_hot.count > 0){ - i32 fake_index = mirror_hot.count*2; - i32 fake_pos = mirror_buffer.size + 1; - Mirror__Binary_Search_Result above_point = mirror__binary_search_min_point_above(mirror_hot.mirror_ranges, first, - 0, mirror_hot.count, - fake_index, fake_pos); - Mirror__Binary_Search_Result below_point = mirror__binary_search_max_point_below(mirror_hot.mirror_ranges, one_past_last, - 0, mirror_hot.count); - if (mirror__min_max_point_indices_contained(above_point.index, below_point.index, &range_index)){ - reflected_range = true; - } - } - - if (reflected_range){ - // check that the range_index is valid and get source if it is - Managed_Object source_range_object = mirror_hot.source_ranges[range_index]; - if (managed_object_get_type(app, source_range_object) == ManagedObjectType_Markers){ - Buffer_ID source = mirror_hot.source_buffer_ids[range_index]; - Marker *mirror_range = mirror_hot.mirror_ranges + range_index*2; - Marker source_range[2]; - if (managed_object_load_data(app, source_range_object, 0, 2, source_range)){ - i32 base_source_first = source_range[0].pos; - //i32 base_source_one_past_last = source_range[1].pos; - - i32 base_mirror_first = mirror_range[0].pos; - //i32 base_mirror_one_past_last = mirror_range[1].pos; - - i32 source_first = base_source_first + (first - base_mirror_first); - i32 source_one_past_last = source_first + (one_past_last - first); - - global_history_edit_group_begin(app); - if (buffer_replace_range(app, source, source_first, source_one_past_last, text)){ - result = buffer_replace_range(app, buffer_id, first, one_past_last, text); - } - global_history_edit_group_end(app); - } - } - } - } - }break; - } - - end_temp_memory(temp); - } - } - } - } - return(result); -} - -// BOTTOM - diff --git a/4coder_mirror.h b/4coder_mirror.h deleted file mode 100644 index 4341ca52..00000000 --- a/4coder_mirror.h +++ /dev/null @@ -1,92 +0,0 @@ -/* -4coder_mirror.h - Types for the mirror buffer system. -*/ - -#if !defined(FCODER_MIRROR_H) -#define FCODER_MIRROR_H - -struct Mirror_Range{ - Buffer_ID source_buffer_id; - i32 mirror_first; - i32 source_first; - i32 length; -}; - -//////////////////////////////// - -typedef i32 Mirror_Mode; -enum{ - MirrorMode_Constructing, - MirrorMode_Reflecting, -}; - -typedef u32 Mirror_Flags; -enum{ - MirrorFlag_NoHighlight = 0x0, - MirrorFlag_CharacterRangeHighlight = 0x1, - MirrorFlag_LineRangeHighlight = 0x2, - MirrorFlag_UnusedHighlight = 0x3, - MirrorFlag_HighlightMask = 0x3, - MirrorFlag_NewlinesAreJumps = 0x4, -}; - -struct Mirror{ - Buffer_ID mirror_buffer_id; - Mirror_Mode mode; - Mirror_Flags flags; - Managed_Scope mirror_scope; - i32 count; - i32 max; - Managed_Object source_buffer_ids; - Managed_Object mirror_ranges; - Managed_Object source_ranges; -}; - -struct Mirror_Hot{ - i32 count; - Buffer_ID *source_buffer_ids; - Marker *mirror_ranges; - Managed_Object *source_ranges; -}; - -//////////////////////////////// - -// The primary API for mirrors. - -static b32 mirror_init(Application_Links *app, Buffer_ID buffer, Mirror_Flags flags, Managed_Object *mirror_object_out); -static b32 mirror_end(Application_Links *app, Managed_Object mirror); -static b32 mirror_add_range(Application_Links *app, Managed_Object mirror, Buffer_ID source, - i32 mirror_first, i32 source_first, i32 length); -static b32 mirror_set_mode(Application_Links *app, Managed_Object mirror, Mirror_Mode mode); -static b32 mirror_get_mode(Application_Links *app, Managed_Object mirror, Mirror_Mode *mode_out); -static b32 mirror_set_flags(Application_Links *app, Managed_Object mirror, Mirror_Flags flags); -static b32 mirror_get_flags(Application_Links *app, Managed_Object mirror, Mirror_Flags *flags_out); - -//////////////////////////////// - -// Extra helpers for mirrors (all implemented on the primary API) - -static b32 mirror_buffer_create(Application_Links *app, String buffer_name, Mirror_Flags flags, Buffer_ID *mirror_buffer_id_out); -static b32 mirror_buffer_end(Application_Links *app, Buffer_ID mirror); -static b32 mirror_buffer_add_range_exact(Application_Links *app, Buffer_ID mirror, Buffer_ID source, - i32 mirror_first, i32 source_first, i32 length); -static b32 mirror_buffer_add_range_loose(Application_Links *app, Buffer_ID mirror, Buffer_ID source, - i32 mirror_first, i32 source_first, i32 max_length); -static b32 mirror_buffer_insert_range(Application_Links *app, Buffer_ID mirror, Buffer_ID source, - i32 mirror_insert_pos, i32 source_first, i32 length); -static b32 mirror_buffer_set_mode(Application_Links *app, Buffer_ID mirror, Mirror_Mode mode); -static b32 mirror_buffer_get_mode(Application_Links *app, Buffer_ID mirror, Mirror_Mode *mode_out); -static b32 mirror_buffer_set_flags(Application_Links *app, Buffer_ID mirror, Mirror_Flags flags); -static b32 mirror_buffer_get_flags(Application_Links *app, Buffer_ID mirror, Mirror_Flags *flags_out); - -static b32 mirror_buffer_refresh(Application_Links *app, Buffer_ID mirror); - -static void mirror_quick_sort_mirror_ranges(Mirror_Range *ranges, i32 first, i32 one_past_last); - -static b32 mirror_buffer_add_range_exact_array(Application_Links *app, Buffer_ID mirror, Mirror_Range *ranges, i32 count); -static b32 mirror_buffer_add_range_loose_array(Application_Links *app, Buffer_ID mirror, Mirror_Range *ranges, i32 count); -static b32 mirror_buffer_insert_range_array(Application_Links *app, Buffer_ID mirror, Mirror_Range *ranges, i32 count); - -#endif - -// TOP diff --git a/4coder_search.cpp b/4coder_search.cpp index 46276b2b..22a1901f 100644 --- a/4coder_search.cpp +++ b/4coder_search.cpp @@ -650,13 +650,9 @@ list__parameters_buffer(Application_Links *app, Heap *heap, Partition *scratch, Buffer_ID search_buffer_id){ Buffer_Summary search_buffer = get_buffer(app, search_buffer_id, AccessAll); - // Setup the search buffer for 'init' mode - the history will begin only AFTER the buffer is filled + // Setup the search buffer for 'init' mode + buffer_set_setting(app, &search_buffer, BufferSetting_ReadOnly, true); buffer_set_setting(app, &search_buffer, BufferSetting_RecordsHistory, false); - { - mirror_buffer_end(app, search_buffer_id); - Managed_Object ignore = 0; - mirror_init(app, search_buffer_id, MirrorFlag_CharacterRangeHighlight|MirrorFlag_NewlinesAreJumps, &ignore); - } // Initialize a generic search all buffers Search_Set set = {}; @@ -665,11 +661,7 @@ list__parameters_buffer(Application_Links *app, Heap *heap, Partition *scratch, // List all locations into search buffer Temp_Memory all_temp = begin_temp_memory(scratch); - Partition line_part = part_sub_part(scratch, (4 << 10)); - int32_t mirror_range_count = 0; - int32_t mirror_range_max = (1 << 10); - Mirror_Range *mirror_ranges = push_array(scratch, Mirror_Range, mirror_range_max); Temp_Memory temp = begin_temp_memory(scratch); Buffer_ID prev_match_id = 0; @@ -698,25 +690,11 @@ list__parameters_buffer(Application_Links *app, Heap *heap, Partition *scratch, Partial_Cursor line_one_past_last_cursor = {}; String full_line_str = {}; if (read_line(app, &line_part, match.buffer.buffer_id, word_pos.line, &full_line_str, &line_start_cursor, &line_one_past_last_cursor)){ - int32_t source_full_line_start = line_start_cursor.pos; String line_str = skip_chop_whitespace(full_line_str); - int32_t source_line_start = source_full_line_start + (int32_t)(line_str.str - full_line_str.str); - int32_t out_pos = search_buffer.size + buffered_print_buffer_length(scratch, temp); - - if (mirror_range_count == mirror_range_max){ - buffered_print_flush(app, scratch, temp, &search_buffer); - mirror_buffer_add_range_exact_array(app, search_buffer_id, mirror_ranges, mirror_range_count); - mirror_range_count = 0; - Assert(out_pos == search_buffer.size); - } b32 flushed = false; int32_t str_len = file_len + 1 + line_num_len + 1 + column_num_len + 1 + 1 + line_str.size + 1; char *spare = buffered_memory_reserve(app, scratch, temp, &search_buffer, str_len, &flushed); - if (flushed){ - mirror_buffer_add_range_exact_array(app, search_buffer_id, mirror_ranges, mirror_range_count); - mirror_range_count = 0; - } search_buffer = get_buffer(app, search_buffer_id, AccessAll); String out_line = make_string_cap(spare, 0, str_len); @@ -727,18 +705,9 @@ list__parameters_buffer(Application_Links *app, Heap *heap, Partition *scratch, append_int_to_str(&out_line, word_pos.character); append_s_char(&out_line, ':'); append_s_char(&out_line, ' '); - int32_t mirror_range_start = out_pos + out_line.size; append_ss(&out_line, line_str); append_s_char(&out_line, '\n'); Assert(out_line.size == str_len); - - Assert(mirror_range_count < mirror_range_max); - Mirror_Range *mirror_range = &mirror_ranges[mirror_range_count]; - mirror_range_count += 1; - mirror_range->source_buffer_id = match.buffer.buffer_id; - mirror_range->mirror_first = mirror_range_start; - mirror_range->source_first = source_line_start; - mirror_range->length = line_str.size; } end_temp_memory(line_temp); @@ -754,18 +723,11 @@ list__parameters_buffer(Application_Links *app, Heap *heap, Partition *scratch, } buffered_print_flush(app, scratch, temp, &search_buffer); - mirror_buffer_add_range_exact_array(app, search_buffer_id, mirror_ranges, mirror_range_count); - mirror_range_count = 0; end_temp_memory(all_temp); // Lock *search* as the jump buffer lock_jump_buffer(search_name.str, search_name.size); - - // Setup the search buffer for 'reflecting' mode - mirror_buffer_set_mode(app, search_buffer_id, MirrorMode_Reflecting); - buffer_set_setting(app, &search_buffer, BufferSetting_ReadOnly, false); - buffer_set_setting(app, &search_buffer, BufferSetting_RecordsHistory, true); } static void diff --git a/4ed_api_implementation.cpp b/4ed_api_implementation.cpp index 5e736cd2..49f049ae 100644 --- a/4ed_api_implementation.cpp +++ b/4ed_api_implementation.cpp @@ -808,33 +808,15 @@ DOC_SEE(4coder_Buffer_Positioning_System) if (buffer_api_check_file(file)){ size = buffer_size(&file->state.buffer); if (0 <= start && start <= one_past_last && one_past_last <= size){ - if (edit_abstract_mode(file)){ - file->state.in_edit_handler = true; - result = file->settings.edit_handler(app, buffer_id, start, one_past_last, string); - file->state.in_edit_handler = false; - } - else{ - Edit_Behaviors behaviors = {}; - Range range = {start, one_past_last}; - edit_single(models->system, models, file, range, string, behaviors); - result = true; - } + Edit_Behaviors behaviors = {}; + Range range = {start, one_past_last}; + edit_single(models->system, models, file, range, string, behaviors); + result = true; } } return(result); } -API_EXPORT b32 -Buffer_Set_Edit_Handler(Application_Links *app, Buffer_ID buffer_id, Buffer_Edit_Handler *handler){ - Models *models = (Models*)app->cmd_context; - Editing_File *file = imp_get_file(models, buffer_id); - b32 result = buffer_api_check_file(file); - if (result){ - file->settings.edit_handler = handler; - } - return(result); -} - // TODO(allen): redocument API_EXPORT b32 Buffer_Compute_Cursor(Application_Links *app, Buffer_ID buffer_id, Buffer_Seek seek, Partial_Cursor *cursor_out) @@ -887,44 +869,21 @@ DOC_SEE(Buffer_Batch_Edit_Type) result = true; if (edit_count > 0){ global_history_edit_group_begin(app); - if (edit_abstract_mode(file)){ - Lifetime_Object *lifetime_object = file->lifetime_object; - Dynamic_Workspace *workspace = &lifetime_object->workspace; - Marker *markers = 0; - Managed_Object markers_object = managed_object_alloc_buffer_markers(&models->mem.heap, workspace, buffer_id, edit_count*2, &markers); - for (i32 i = 0; i < edit_count; i += 1){ - markers[2*i].pos = edits[i].start; - markers[2*i].lean_right = false; - markers[2*i + 1].pos = edits[i].end; - markers[2*i + 1].lean_right = false; + Buffer_Edit *edit_in = edits; + Buffer_Edit *one_past_last = edits + edit_count; + i32 shift = 0; + for (;edit_in < one_past_last; edit_in += 1){ + char *edit_str = str + edit_in->str_start; + i32 edit_length = edit_in->len; + Range edit_range = {edit_in->start, edit_in->end}; + i32 shift_change = edit_length - (edit_range.one_past_last - edit_range.first); + edit_range.first += shift; + edit_range.one_past_last += shift; + if (!buffer_replace_range(app, buffer_id, edit_range.first, edit_range.one_past_last, make_string(edit_str, edit_length))){ + result = false; } - for (i32 i = 0; i < edit_count; i += 1){ - char *edit_str = str + edits[i].str_start; - i32 edit_length = edits[i].len; - Range edit_range = {markers[2*i].pos, markers[2*i + 1].pos}; - if (!buffer_replace_range(app, buffer_id, edit_range.first, edit_range.one_past_last, make_string(edit_str, edit_length))){ - result = false; - } - } - managed_object_free(app, markers_object); - } - else{ - Buffer_Edit *edit_in = edits; - Buffer_Edit *one_past_last = edits + edit_count; - i32 shift = 0; - for (;edit_in < one_past_last; edit_in += 1){ - char *edit_str = str + edit_in->str_start; - i32 edit_length = edit_in->len; - Range edit_range = {edit_in->start, edit_in->end}; - i32 shift_change = edit_length - (edit_range.one_past_last - edit_range.first); - edit_range.first += shift; - edit_range.one_past_last += shift; - if (!buffer_replace_range(app, buffer_id, edit_range.first, edit_range.one_past_last, make_string(edit_str, edit_length))){ - result = false; - } - else{ - shift += shift_change; - } + else{ + shift += shift_change; } } global_history_edit_group_end(app); @@ -1730,12 +1689,12 @@ DOC_SEE(Buffer_Identifier) } API_EXPORT b32 -Buffer_Reopen(Application_Links *app, Buffer_ID buffer_id, Buffer_Reopen_Flag flags, Buffer_Reopen_Result *result) +Buffer_Reopen(Application_Links *app, Buffer_ID buffer_id, Buffer_Reopen_Flag flags, Buffer_Reopen_Result *result_out) { Models *models = (Models*)app->cmd_context; System_Functions *system = models->system; Editing_File *file = imp_get_file(models, buffer_id); - *result = BufferReopenResult_Failed; + Buffer_Reopen_Result result = BufferReopenResult_Failed; if (buffer_api_check_file(file)){ if (file->canon.name.str != 0 && file->canon.name.size != 0){ Plat_Handle handle = {}; @@ -1786,8 +1745,7 @@ Buffer_Reopen(Application_Links *app, Buffer_ID buffer_id, Buffer_Reopen_Flag fl view_set_cursor(system, models, vptrs[i], cursor, true); } - - *result = BufferReopenResult_Reopened; + result = BufferReopenResult_Reopened; } else{ system->load_close(handle); @@ -1801,8 +1759,10 @@ Buffer_Reopen(Application_Links *app, Buffer_ID buffer_id, Buffer_Reopen_Flag fl } } } - - return(*result == BufferReopenResult_Reopened); + if (result_out != 0){ + *result_out = result; + } + return(result == BufferReopenResult_Reopened); } API_EXPORT b32 diff --git a/4ed_edit.cpp b/4ed_edit.cpp index 9eeb7bae..0319498c 100644 --- a/4ed_edit.cpp +++ b/4ed_edit.cpp @@ -229,11 +229,6 @@ edit_fix_markers(System_Functions *system, Models *models, Editing_File *file, E end_temp_memory(cursor_temp); } -internal b32 -edit_abstract_mode(Editing_File *file){ - return(file->settings.edit_handler != 0 && !file->state.in_edit_handler); -} - internal void edit_single(System_Functions *system, Models *models, Editing_File *file, Edit edit, Edit_Behaviors behaviors){ Mem_Options *mem = &models->mem; diff --git a/4ed_file.h b/4ed_file.h index 5e475bb3..eda3fd26 100644 --- a/4ed_file.h +++ b/4ed_file.h @@ -39,7 +39,6 @@ union Buffer_Slot_ID{ }; struct Editing_File_Settings{ - Buffer_Edit_Handler *edit_handler; i32 base_map_id; i32 display_width; i32 minimum_base_display_width;