From a0bca352cea677251106f122bca52ad58c124d2e Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Tue, 24 Nov 2020 19:13:42 -0800 Subject: [PATCH] Take out explicit config writer --- custom/4coder_config.cpp | 67 ++-------------------------- custom/4coder_variables.cpp | 68 ++++++++++++++++++++++++++++- custom/4coder_variables.h | 8 ++++ custom/generated/command_metadata.h | 2 +- 4 files changed, 79 insertions(+), 66 deletions(-) diff --git a/custom/4coder_config.cpp b/custom/4coder_config.cpp index a74fea66..388e39a0 100644 --- a/custom/4coder_config.cpp +++ b/custom/4coder_config.cpp @@ -1663,18 +1663,17 @@ load_config_and_apply(Application_Links *app, Arena *out_arena, Config_Data *con Config *parsed = config_parse__file_name(app, out_arena, "config.4coder", config); if (parsed != 0){ - // Top - print_message(app, string_u8_litexpr("Loaded config file:\n")); - // Errors String_Const_u8 error_text = config_stringize_errors(app, scratch, parsed); if (error_text.str != 0){ + print_message(app, string_u8_litexpr("trying to load config file:\n")); print_message(app, error_text); } // NOTE(allen): Save As Variables if (error_text.str == 0){ - def_var_from_config(app, vars_get_root(), string_litinit("config"), parsed); + Variable_Handle config_var = def_var_from_config(app, vars_get_root(), string_litinit("config"), parsed); + vars_print(app, config_var); } } else{ @@ -1694,66 +1693,6 @@ load_config_and_apply(Application_Links *app, Arena *out_arena, Config_Data *con #undef M } - { - // Values - Temp_Memory temp2 = begin_temp(scratch); - List_String_Const_u8 list = {}; - - config_feedback_string(scratch, &list, "user_name", config->user_name); - config_feedback_extension_list(scratch, &list, "treat_as_code", &config->code_exts); - - config_feedback_string(scratch, &list, "mapping", config->mapping); - config_feedback_string(scratch, &list, "mode", config->mode); - - config_feedback_bool(scratch, &list, "bind_by_physical_key", config->bind_by_physical_key); - config_feedback_bool(scratch, &list, "use_scroll_bars", config->use_scroll_bars); - config_feedback_bool(scratch, &list, "use_file_bars", config->use_file_bars); - config_feedback_bool(scratch, &list, "hide_file_bar_in_ui", config->hide_file_bar_in_ui); - config_feedback_bool(scratch, &list, "use_error_highlight", config->use_error_highlight); - config_feedback_bool(scratch, &list, "use_jump_highlight", config->use_jump_highlight); - config_feedback_bool(scratch, &list, "use_scope_highlight", config->use_scope_highlight); - config_feedback_bool(scratch, &list, "use_paren_helper", config->use_paren_helper); - config_feedback_bool(scratch, &list, "use_comment_keyword", config->use_comment_keyword); - config_feedback_bool(scratch, &list, "lister_whole_word_backspace_when_modified", config->lister_whole_word_backspace_when_modified); - config_feedback_bool(scratch, &list, "show_line_number_margins", config->show_line_number_margins); - config_feedback_bool(scratch, &list, "enable_output_wrapping", config->enable_output_wrapping); - config_feedback_bool(scratch, &list, "enable_undo_fade_out", config->enable_undo_fade_out); - - config_feedback_int(scratch, &list, "cursor_roundness", (i32)(config->cursor_roundness*100.f)); - config_feedback_int(scratch, &list, "mark_thickness", (i32)(config->mark_thickness)); - config_feedback_int(scratch, &list, "lister_roundness", (i32)(config->lister_roundness*100.f)); - - config_feedback_bool(scratch, &list, "enable_virtual_whitespace", config->enable_virtual_whitespace); - config_feedback_int(scratch, &list, "virtual_whitespace_regular_indent", config->virtual_whitespace_regular_indent); - config_feedback_bool(scratch, &list, "enable_code_wrapping", config->enable_code_wrapping); - config_feedback_bool(scratch, &list, "automatically_indent_text_on_save", config->automatically_indent_text_on_save); - config_feedback_bool(scratch, &list, "automatically_save_changes_on_build", config->automatically_save_changes_on_build); - config_feedback_bool(scratch, &list, "automatically_load_project", config->automatically_load_project); - - config_feedback_bool(scratch, &list, "indent_with_tabs", config->indent_with_tabs); - config_feedback_int(scratch, &list, "indent_width", config->indent_width); - config_feedback_int(scratch, &list, "default_tab_width", config->default_tab_width); - - config_feedback_string(scratch, &list, "default_theme_name", config->default_theme_name); - config_feedback_bool(scratch, &list, "highlight_line_at_cursor", config->highlight_line_at_cursor); - - config_feedback_string(scratch, &list, "default_font_name", config->default_font_name); - config_feedback_int(scratch, &list, "default_font_size", config->default_font_size); - config_feedback_bool(scratch, &list, "default_font_hinting", config->default_font_hinting); - - config_feedback_string(scratch, &list, "default_compiler_bat", config->default_compiler_bat); - config_feedback_string(scratch, &list, "default_flags_bat", config->default_flags_bat); - config_feedback_string(scratch, &list, "default_compiler_sh", config->default_compiler_sh); - config_feedback_string(scratch, &list, "default_flags_sh", config->default_flags_sh); - - config_feedback_bool(scratch, &list, "lalt_lctrl_is_altgr", config->lalt_lctrl_is_altgr); - - string_list_push_u8_lit(scratch, &list, "\n"); - String_Const_u8 message = string_list_flatten(scratch, list); - print_message(app, message); - end_temp(temp2); - } - // Apply config //setup_built_in_mapping(app, config->mapping, &framework_mapping, mapid_global, mapid_file, mapid_code); change_mode(app, config->mode); diff --git a/custom/4coder_variables.cpp b/custom/4coder_variables.cpp index 95b45ac8..fb852871 100644 --- a/custom/4coder_variables.cpp +++ b/custom/4coder_variables.cpp @@ -82,7 +82,7 @@ vars_get_nil(void){ function b32 vars_is_nil(Variable_Handle var){ - return(var.ptr == &vars_nil); + return(var.ptr == 0 || var.ptr == &vars_nil); } function b32 @@ -90,6 +90,41 @@ vars_match(Variable_Handle a, Variable_Handle b){ return(a.ptr == b.ptr); } +function Variable_Handle +vars_first_child(Variable_Handle var){ + Variable_Handle result = {}; + if (var.ptr != 0){ + result.ptr = var.ptr->first; + } + else{ + result.ptr = &vars_nil; + } + return(result); +} + +function Variable_Handle +vars_next_sibling(Variable_Handle var){ + Variable_Handle result = {}; + if (var.ptr != 0){ + result.ptr = var.ptr->next; + } + else{ + result.ptr = &vars_nil; + } + return(result); +} + +function String_ID +vars_key_id_from_var(Variable_Handle var){ + return(var.ptr->key); +} + +function String_Const_u8 +vars_key_from_var(Arena *arena, Variable_Handle var){ + String_ID id = vars_key_id_from_var(var); + String_Const_u8 result = vars_read_string(arena, id); + return(result); +} function String_ID vars_string_id_from_var(Variable_Handle var){ @@ -233,5 +268,36 @@ vars_clear_keys(Variable_Handle var){ } } +function void +vars_print_indented(Application_Links *app, Variable_Handle var, i32 indent){ + Scratch_Block scratch(app); + local_persist char spaces[] = + " " + " " + " " + " "; + + String_Const_u8 var_key = vars_key_from_var(scratch, var); + String_Const_u8 var_val = vars_string_from_var(scratch, var); + + String_Const_u8 line = push_stringf(scratch, "%.*s%.*s: \"%.*s\"\n", + clamp_top(indent, sizeof(spaces)), spaces, + string_expand(var_key), + string_expand(var_val)); + print_message(app, line); + + i32 sub_indent = indent + 1; + for (Variable_Handle sub = vars_first_child(var); + !vars_is_nil(sub); + sub = vars_next_sibling(sub)){ + vars_print_indented(app, sub, sub_indent); + } +} + +function void +vars_print(Application_Links *app, Variable_Handle var){ + vars_print_indented(app, var, 0); +} + // BOTTOM diff --git a/custom/4coder_variables.h b/custom/4coder_variables.h index 2f2825dd..884f1398 100644 --- a/custom/4coder_variables.h +++ b/custom/4coder_variables.h @@ -36,7 +36,12 @@ function Variable_Handle vars_get_nil(void); function b32 vars_is_nil(Variable_Handle var); function b32 vars_match(Variable_Handle a, Variable_Handle b); +function Variable_Handle vars_first_child(Variable_Handle var); +function Variable_Handle vars_next_sibling(Variable_Handle var); + function Variable_Handle vars_read_key(Variable_Handle var, String_ID key); +function String_ID vars_key_id_from_var(Variable_Handle var); +function String_Const_u8 vars_key_from_var(Arena *arena, Variable_Handle var); function String_ID vars_string_id_from_var(Variable_Handle var); function String_Const_u8 vars_string_from_var(Arena *arena, Variable_Handle var); @@ -46,6 +51,9 @@ function Variable_Handle vars_new_variable(Variable_Handle var, String_ID key); function Variable_Handle vars_new_variable(Variable_Handle var, String_ID key, String_ID string); function void vars_clear_keys(Variable_Handle var); +function void vars_print_indented(Application_Links *app, Variable_Handle var, i32 indent); +function void vars_print(Application_Links *app, Variable_Handle var); + #endif //4CODER_VARIABLES_H // BOTTOM diff --git a/custom/generated/command_metadata.h b/custom/generated/command_metadata.h index 4111b991..068e2251 100644 --- a/custom/generated/command_metadata.h +++ b/custom/generated/command_metadata.h @@ -372,7 +372,7 @@ static Command_Metadata fcoder_metacmd_table[250] = { { PROC_LINKS(list_all_substring_locations, 0), false, "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\\custom\\4coder_search.cpp", 36, 174 }, { PROC_LINKS(list_all_substring_locations_case_insensitive, 0), false, "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\\custom\\4coder_search.cpp", 36, 186 }, { PROC_LINKS(load_project, 0), false, "load_project", 12, "Looks for a project.4coder file in the current directory and tries to load it. Looks in parent directories until a project file is found or there are no more parents.", 167, "W:\\4ed\\code\\custom\\4coder_project_commands.cpp", 46, 867 }, -{ PROC_LINKS(load_theme_current_buffer, 0), false, "load_theme_current_buffer", 25, "Parse the current buffer as a theme file and add the theme to the theme list. If the buffer has a .4coder postfix in it's name, it is removed when the name is saved.", 165, "W:\\4ed\\code\\custom\\4coder_config.cpp", 36, 1805 }, +{ PROC_LINKS(load_theme_current_buffer, 0), false, "load_theme_current_buffer", 25, "Parse the current buffer as a theme file and add the theme to the theme list. If the buffer has a .4coder postfix in it's name, it is removed when the name is saved.", 165, "W:\\4ed\\code\\custom\\4coder_config.cpp", 36, 1744 }, { PROC_LINKS(load_themes_default_folder, 0), false, "load_themes_default_folder", 26, "Loads all the theme files in the default theme folder.", 54, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 533 }, { PROC_LINKS(load_themes_hot_directory, 0), false, "load_themes_hot_directory", 25, "Loads all the theme files in the current hot directory.", 55, "W:\\4ed\\code\\custom\\4coder_default_framework.cpp", 47, 545 }, { 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, 1493 },