updated site generator

master
Allen Webster 2018-12-18 18:30:00 -08:00
parent 6e69b36ca8
commit 56293859af
4 changed files with 376 additions and 427 deletions

View File

@ -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 232
#define command_one_past_last_id 220
#if defined(CUSTOM_COMMAND_SIG)
#define PROC_LINKS(x,y) x
#else
@ -79,7 +79,6 @@ CUSTOM_COMMAND_SIG(interactive_open);
CUSTOM_COMMAND_SIG(interactive_open_or_new);
CUSTOM_COMMAND_SIG(interactive_switch_buffer);
CUSTOM_COMMAND_SIG(kill_buffer);
CUSTOM_COMMAND_SIG(kill_rect);
CUSTOM_COMMAND_SIG(left_adjust_view);
CUSTOM_COMMAND_SIG(list_all_functions_all_buffers);
CUSTOM_COMMAND_SIG(list_all_functions_all_buffers_lister);
@ -114,12 +113,6 @@ CUSTOM_COMMAND_SIG(lister__write_character__file_path);
CUSTOM_COMMAND_SIG(lister__write_character__fixed_list);
CUSTOM_COMMAND_SIG(load_project);
CUSTOM_COMMAND_SIG(make_directory_query);
CUSTOM_COMMAND_SIG(miblo_decrement_basic);
CUSTOM_COMMAND_SIG(miblo_decrement_time_stamp);
CUSTOM_COMMAND_SIG(miblo_decrement_time_stamp_minute);
CUSTOM_COMMAND_SIG(miblo_increment_basic);
CUSTOM_COMMAND_SIG(miblo_increment_time_stamp);
CUSTOM_COMMAND_SIG(miblo_increment_time_stamp_minute);
CUSTOM_COMMAND_SIG(mouse_wheel_change_face_size);
CUSTOM_COMMAND_SIG(mouse_wheel_scroll);
CUSTOM_COMMAND_SIG(move_down);
@ -131,7 +124,6 @@ CUSTOM_COMMAND_SIG(move_line_up);
CUSTOM_COMMAND_SIG(move_right);
CUSTOM_COMMAND_SIG(move_up);
CUSTOM_COMMAND_SIG(move_up_10);
CUSTOM_COMMAND_SIG(multi_line_edit);
CUSTOM_COMMAND_SIG(newline_or_goto_position_direct);
CUSTOM_COMMAND_SIG(newline_or_goto_position_same_panel_direct);
CUSTOM_COMMAND_SIG(newline_or_goto_position_same_panel_sticky);
@ -164,9 +156,7 @@ CUSTOM_COMMAND_SIG(redo);
CUSTOM_COMMAND_SIG(reload_themes);
CUSTOM_COMMAND_SIG(remap_interactive);
CUSTOM_COMMAND_SIG(rename_file_query);
CUSTOM_COMMAND_SIG(rename_parameter);
CUSTOM_COMMAND_SIG(reopen);
CUSTOM_COMMAND_SIG(replace_all_occurrences);
CUSTOM_COMMAND_SIG(replace_in_range);
CUSTOM_COMMAND_SIG(reverse_search);
CUSTOM_COMMAND_SIG(reverse_search_identifier);
@ -234,8 +224,6 @@ CUSTOM_COMMAND_SIG(word_complete);
CUSTOM_COMMAND_SIG(write_and_auto_tab);
CUSTOM_COMMAND_SIG(write_block);
CUSTOM_COMMAND_SIG(write_character);
CUSTOM_COMMAND_SIG(write_explicit_enum_flags);
CUSTOM_COMMAND_SIG(write_explicit_enum_values);
CUSTOM_COMMAND_SIG(write_hack);
CUSTOM_COMMAND_SIG(write_note);
CUSTOM_COMMAND_SIG(write_todo);
@ -252,7 +240,7 @@ char *source_name;
int32_t source_name_len;
int32_t line_number;
};
static Command_Metadata fcoder_metacmd_table[232] = {
static Command_Metadata fcoder_metacmd_table[220] = {
{ 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, 240 },
{ 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, 722 },
{ 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, 733 },
@ -323,7 +311,6 @@ static Command_Metadata fcoder_metacmd_table[232] = {
{ PROC_LINKS(interactive_open_or_new, 0), "interactive_open_or_new", 23, "Interactively open a file out of the file system.", 49, "w:\\4ed\\code\\4coder_lists.cpp", 28, 856 },
{ PROC_LINKS(interactive_switch_buffer, 0), "interactive_switch_buffer", 25, "Interactively switch to an open buffer.", 39, "w:\\4ed\\code\\4coder_lists.cpp", 28, 765 },
{ PROC_LINKS(kill_buffer, 0), "kill_buffer", 11, "Kills the current buffer.", 25, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1557 },
{ PROC_LINKS(kill_rect, 0), "kill_rect", 9, "Delete characters in a rectangular region. Range testing is done by unwrapped-xy coordinates.", 93, "w:\\4ed\\code\\4coder_experiments.cpp", 34, 26 },
{ PROC_LINKS(left_adjust_view, 0), "left_adjust_view", 16, "Sets the left size of the view near the x position of the cursor.", 65, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 133 },
{ PROC_LINKS(list_all_functions_all_buffers, 0), "list_all_functions_all_buffers", 30, "Creates a jump list of lines from all buffers that appear to define or declare functions.", 89, "w:\\4ed\\code\\4coder_function_list.cpp", 36, 343 },
{ 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, 349 },
@ -358,12 +345,6 @@ static Command_Metadata fcoder_metacmd_table[232] = {
{ PROC_LINKS(lister__write_character__fixed_list, 0), "lister__write_character__fixed_list", 35, "A lister mode command that handles input for the fixed sure to kill list.", 73, "w:\\4ed\\code\\4coder_lists.cpp", 28, 253 },
{ PROC_LINKS(load_project, 0), "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\\4coder_project_commands.cpp", 39, 1083 },
{ PROC_LINKS(make_directory_query, 0), "make_directory_query", 20, "Queries the user for a name and creates a new directory with the given name.", 76, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1245 },
{ PROC_LINKS(miblo_decrement_basic, 0), "miblo_decrement_basic", 21, "Decrement an integer under the cursor by one.", 45, "w:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 110 },
{ PROC_LINKS(miblo_decrement_time_stamp, 0), "miblo_decrement_time_stamp", 26, "Decrement a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 383 },
{ PROC_LINKS(miblo_decrement_time_stamp_minute, 0), "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\\4coder_miblo_numbers.cpp", 36, 395 },
{ PROC_LINKS(miblo_increment_basic, 0), "miblo_increment_basic", 21, "Increment an integer under the cursor by one.", 45, "w:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 94 },
{ PROC_LINKS(miblo_increment_time_stamp, 0), "miblo_increment_time_stamp", 26, "Increment a time stamp under the cursor by one second. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 377 },
{ PROC_LINKS(miblo_increment_time_stamp_minute, 0), "miblo_increment_time_stamp_minute", 33, "Increment a time stamp under the cursor by one minute. (format [m]m:ss or h:mm:ss", 81, "w:\\4ed\\code\\4coder_miblo_numbers.cpp", 36, 389 },
{ PROC_LINKS(mouse_wheel_change_face_size, 0), "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\\4coder_base_commands.cpp", 36, 586 },
{ PROC_LINKS(mouse_wheel_scroll, 0), "mouse_wheel_scroll", 18, "Reads the scroll wheel value from the mouse state and scrolls accordingly.", 74, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 226 },
{ PROC_LINKS(move_down, 0), "move_down", 9, "Moves the cursor down one line.", 31, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 290 },
@ -375,7 +356,6 @@ static Command_Metadata fcoder_metacmd_table[232] = {
{ PROC_LINKS(move_right, 0), "move_right", 10, "Moves the cursor one character to the right.", 44, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 349 },
{ PROC_LINKS(move_up, 0), "move_up", 7, "Moves the cursor up one line.", 29, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 284 },
{ PROC_LINKS(move_up_10, 0), "move_up_10", 10, "Moves the cursor up ten lines.", 30, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 296 },
{ PROC_LINKS(multi_line_edit, 0), "multi_line_edit", 15, "Begin multi-line mode. In multi-line mode characters are inserted at every line between the mark and cursor. All characters are inserted at the same character offset into the line. This mode uses line_char coordinates.", 221, "w:\\4ed\\code\\4coder_experiments.cpp", 34, 117 },
{ PROC_LINKS(newline_or_goto_position_direct, 0), "newline_or_goto_position_direct", 31, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "w:\\4ed\\code\\4coder_jump_direct.cpp", 34, 101 },
{ PROC_LINKS(newline_or_goto_position_same_panel_direct, 0), "newline_or_goto_position_same_panel_direct", 42, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "w:\\4ed\\code\\4coder_jump_direct.cpp", 34, 116 },
{ PROC_LINKS(newline_or_goto_position_same_panel_sticky, 0), "newline_or_goto_position_same_panel_sticky", 42, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor_same_panel.", 117, "w:\\4ed\\code\\4coder_jump_sticky.cpp", 34, 588 },
@ -408,9 +388,7 @@ static Command_Metadata fcoder_metacmd_table[232] = {
{ PROC_LINKS(reload_themes, 0), "reload_themes", 13, "Loads all the theme files in the theme folder, replacing duplicates with the new theme data.", 92, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 1596 },
{ PROC_LINKS(remap_interactive, 0), "remap_interactive", 17, "Switch to a named key binding map.", 34, "w:\\4ed\\code\\4coder_default_framework.cpp", 40, 290 },
{ 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, 1201 },
{ 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, 1572 },
{ PROC_LINKS(replace_all_occurrences, 0), "replace_all_occurrences", 23, "Queries the user for two strings, and replaces all occurrences of the first string with the second string in all open buffers.", 126, "w:\\4ed\\code\\4coder_experiments.cpp", 34, 778 },
{ PROC_LINKS(replace_in_range, 0), "replace_in_range", 16, "Queries the user for two strings, and replaces all occurences of the first string in the range between the cursor and the mark with the second string.", 150, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 900 },
{ PROC_LINKS(reverse_search, 0), "reverse_search", 14, "Begins an incremental search up through the current buffer for a user specified string.", 87, "w:\\4ed\\code\\4coder_base_commands.cpp", 36, 871 },
{ PROC_LINKS(reverse_search_identifier, 0), "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\\4coder_base_commands.cpp", 36, 889 },
@ -478,8 +456,6 @@ static Command_Metadata fcoder_metacmd_table[232] = {
{ 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, 745 },
{ 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, 35 },
{ PROC_LINKS(write_explicit_enum_flags, 0), "write_explicit_enum_flags", 25, "If the cursor is found to be on the '{' of an enum definition, the values of the enum will be filled in to give each a unique power of 2 value, starting from 1. Existing values are overwritten.", 194, "w:\\4ed\\code\\4coder_experiments.cpp", 34, 705 },
{ PROC_LINKS(write_explicit_enum_values, 0), "write_explicit_enum_values", 26, "If the cursor is found to be on the '{' of an enum definition, the values of the enum will be filled in sequentially starting from zero. Existing values are overwritten.", 170, "w:\\4ed\\code\\4coder_experiments.cpp", 34, 699 },
{ PROC_LINKS(write_hack, 0), "write_hack", 10, "At the cursor, insert a '// HACK' comment, includes user name if it was specified in config.4coder.", 99, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 91 },
{ PROC_LINKS(write_note, 0), "write_note", 10, "At the cursor, insert a '// NOTE' comment, includes user name if it was specified in config.4coder.", 99, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 97 },
{ PROC_LINKS(write_todo, 0), "write_todo", 10, "At the cursor, insert a '// TODO' comment, includes user name if it was specified in config.4coder.", 99, "w:\\4ed\\code\\4coder_combined_write_commands.cpp", 46, 85 },
@ -556,166 +532,154 @@ static int32_t fcoder_metacmd_ID_interactive_open = 66;
static int32_t fcoder_metacmd_ID_interactive_open_or_new = 67;
static int32_t fcoder_metacmd_ID_interactive_switch_buffer = 68;
static int32_t fcoder_metacmd_ID_kill_buffer = 69;
static int32_t fcoder_metacmd_ID_kill_rect = 70;
static int32_t fcoder_metacmd_ID_left_adjust_view = 71;
static int32_t fcoder_metacmd_ID_list_all_functions_all_buffers = 72;
static int32_t fcoder_metacmd_ID_list_all_functions_all_buffers_lister = 73;
static int32_t fcoder_metacmd_ID_list_all_functions_current_buffer = 74;
static int32_t fcoder_metacmd_ID_list_all_functions_current_buffer_lister = 75;
static int32_t fcoder_metacmd_ID_list_all_locations = 76;
static int32_t fcoder_metacmd_ID_list_all_locations_case_insensitive = 77;
static int32_t fcoder_metacmd_ID_list_all_locations_of_identifier = 78;
static int32_t fcoder_metacmd_ID_list_all_locations_of_identifier_case_insensitive = 79;
static int32_t fcoder_metacmd_ID_list_all_locations_of_selection = 80;
static int32_t fcoder_metacmd_ID_list_all_locations_of_selection_case_insensitive = 81;
static int32_t fcoder_metacmd_ID_list_all_locations_of_type_definition = 82;
static int32_t fcoder_metacmd_ID_list_all_locations_of_type_definition_of_identifier = 83;
static int32_t fcoder_metacmd_ID_list_all_substring_locations = 84;
static int32_t fcoder_metacmd_ID_list_all_substring_locations_case_insensitive = 85;
static int32_t fcoder_metacmd_ID_lister__activate = 86;
static int32_t fcoder_metacmd_ID_lister__backspace_text_field = 87;
static int32_t fcoder_metacmd_ID_lister__backspace_text_field__default = 88;
static int32_t fcoder_metacmd_ID_lister__backspace_text_field__file_path = 89;
static int32_t fcoder_metacmd_ID_lister__mouse_press = 90;
static int32_t fcoder_metacmd_ID_lister__mouse_release = 91;
static int32_t fcoder_metacmd_ID_lister__move_down = 92;
static int32_t fcoder_metacmd_ID_lister__move_down__default = 93;
static int32_t fcoder_metacmd_ID_lister__move_up = 94;
static int32_t fcoder_metacmd_ID_lister__move_up__default = 95;
static int32_t fcoder_metacmd_ID_lister__quit = 96;
static int32_t fcoder_metacmd_ID_lister__repaint = 97;
static int32_t fcoder_metacmd_ID_lister__wheel_scroll = 98;
static int32_t fcoder_metacmd_ID_lister__write_character = 99;
static int32_t fcoder_metacmd_ID_lister__write_character__default = 100;
static int32_t fcoder_metacmd_ID_lister__write_character__file_path = 101;
static int32_t fcoder_metacmd_ID_lister__write_character__fixed_list = 102;
static int32_t fcoder_metacmd_ID_load_project = 103;
static int32_t fcoder_metacmd_ID_make_directory_query = 104;
static int32_t fcoder_metacmd_ID_miblo_decrement_basic = 105;
static int32_t fcoder_metacmd_ID_miblo_decrement_time_stamp = 106;
static int32_t fcoder_metacmd_ID_miblo_decrement_time_stamp_minute = 107;
static int32_t fcoder_metacmd_ID_miblo_increment_basic = 108;
static int32_t fcoder_metacmd_ID_miblo_increment_time_stamp = 109;
static int32_t fcoder_metacmd_ID_miblo_increment_time_stamp_minute = 110;
static int32_t fcoder_metacmd_ID_mouse_wheel_change_face_size = 111;
static int32_t fcoder_metacmd_ID_mouse_wheel_scroll = 112;
static int32_t fcoder_metacmd_ID_move_down = 113;
static int32_t fcoder_metacmd_ID_move_down_10 = 114;
static int32_t fcoder_metacmd_ID_move_down_textual = 115;
static int32_t fcoder_metacmd_ID_move_left = 116;
static int32_t fcoder_metacmd_ID_move_line_down = 117;
static int32_t fcoder_metacmd_ID_move_line_up = 118;
static int32_t fcoder_metacmd_ID_move_right = 119;
static int32_t fcoder_metacmd_ID_move_up = 120;
static int32_t fcoder_metacmd_ID_move_up_10 = 121;
static int32_t fcoder_metacmd_ID_multi_line_edit = 122;
static int32_t fcoder_metacmd_ID_newline_or_goto_position_direct = 123;
static int32_t fcoder_metacmd_ID_newline_or_goto_position_same_panel_direct = 124;
static int32_t fcoder_metacmd_ID_newline_or_goto_position_same_panel_sticky = 125;
static int32_t fcoder_metacmd_ID_newline_or_goto_position_sticky = 126;
static int32_t fcoder_metacmd_ID_open_all_code = 127;
static int32_t fcoder_metacmd_ID_open_all_code_recursive = 128;
static int32_t fcoder_metacmd_ID_open_color_tweaker = 129;
static int32_t fcoder_metacmd_ID_open_file_in_quotes = 130;
static int32_t fcoder_metacmd_ID_open_in_other = 131;
static int32_t fcoder_metacmd_ID_open_long_braces = 132;
static int32_t fcoder_metacmd_ID_open_long_braces_break = 133;
static int32_t fcoder_metacmd_ID_open_long_braces_semicolon = 134;
static int32_t fcoder_metacmd_ID_open_matching_file_cpp = 135;
static int32_t fcoder_metacmd_ID_open_panel_hsplit = 136;
static int32_t fcoder_metacmd_ID_open_panel_vsplit = 137;
static int32_t fcoder_metacmd_ID_page_down = 138;
static int32_t fcoder_metacmd_ID_page_up = 139;
static int32_t fcoder_metacmd_ID_paste = 140;
static int32_t fcoder_metacmd_ID_paste_and_indent = 141;
static int32_t fcoder_metacmd_ID_paste_next = 142;
static int32_t fcoder_metacmd_ID_paste_next_and_indent = 143;
static int32_t fcoder_metacmd_ID_place_in_scope = 144;
static int32_t fcoder_metacmd_ID_project_command_lister = 145;
static int32_t fcoder_metacmd_ID_project_fkey_command = 146;
static int32_t fcoder_metacmd_ID_project_go_to_root_directory = 147;
static int32_t fcoder_metacmd_ID_query_replace = 148;
static int32_t fcoder_metacmd_ID_query_replace_identifier = 149;
static int32_t fcoder_metacmd_ID_query_replace_selection = 150;
static int32_t fcoder_metacmd_ID_redo = 151;
static int32_t fcoder_metacmd_ID_reload_themes = 152;
static int32_t fcoder_metacmd_ID_remap_interactive = 153;
static int32_t fcoder_metacmd_ID_rename_file_query = 154;
static int32_t fcoder_metacmd_ID_rename_parameter = 155;
static int32_t fcoder_metacmd_ID_reopen = 156;
static int32_t fcoder_metacmd_ID_replace_all_occurrences = 157;
static int32_t fcoder_metacmd_ID_replace_in_range = 158;
static int32_t fcoder_metacmd_ID_reverse_search = 159;
static int32_t fcoder_metacmd_ID_reverse_search_identifier = 160;
static int32_t fcoder_metacmd_ID_save = 161;
static int32_t fcoder_metacmd_ID_save_all_dirty_buffers = 162;
static int32_t fcoder_metacmd_ID_save_to_query = 163;
static int32_t fcoder_metacmd_ID_scope_absorb_down = 164;
static int32_t fcoder_metacmd_ID_search = 165;
static int32_t fcoder_metacmd_ID_search_identifier = 166;
static int32_t fcoder_metacmd_ID_seek_alphanumeric_left = 167;
static int32_t fcoder_metacmd_ID_seek_alphanumeric_or_camel_left = 168;
static int32_t fcoder_metacmd_ID_seek_alphanumeric_or_camel_right = 169;
static int32_t fcoder_metacmd_ID_seek_alphanumeric_right = 170;
static int32_t fcoder_metacmd_ID_seek_beginning_of_line = 171;
static int32_t fcoder_metacmd_ID_seek_beginning_of_textual_line = 172;
static int32_t fcoder_metacmd_ID_seek_end_of_line = 173;
static int32_t fcoder_metacmd_ID_seek_end_of_textual_line = 174;
static int32_t fcoder_metacmd_ID_seek_token_left = 175;
static int32_t fcoder_metacmd_ID_seek_token_right = 176;
static int32_t fcoder_metacmd_ID_seek_white_or_token_left = 177;
static int32_t fcoder_metacmd_ID_seek_white_or_token_right = 178;
static int32_t fcoder_metacmd_ID_seek_whitespace_down = 179;
static int32_t fcoder_metacmd_ID_seek_whitespace_down_end_line = 180;
static int32_t fcoder_metacmd_ID_seek_whitespace_left = 181;
static int32_t fcoder_metacmd_ID_seek_whitespace_right = 182;
static int32_t fcoder_metacmd_ID_seek_whitespace_up = 183;
static int32_t fcoder_metacmd_ID_seek_whitespace_up_end_line = 184;
static int32_t fcoder_metacmd_ID_select_all = 185;
static int32_t fcoder_metacmd_ID_select_next_scope_absolute = 186;
static int32_t fcoder_metacmd_ID_select_prev_scope_absolute = 187;
static int32_t fcoder_metacmd_ID_select_surrounding_scope = 188;
static int32_t fcoder_metacmd_ID_set_bindings_choose = 189;
static int32_t fcoder_metacmd_ID_set_bindings_default = 190;
static int32_t fcoder_metacmd_ID_set_bindings_mac_default = 191;
static int32_t fcoder_metacmd_ID_set_mark = 192;
static int32_t fcoder_metacmd_ID_set_mode_to_notepad_like = 193;
static int32_t fcoder_metacmd_ID_set_mode_to_original = 194;
static int32_t fcoder_metacmd_ID_setup_build_bat = 195;
static int32_t fcoder_metacmd_ID_setup_build_bat_and_sh = 196;
static int32_t fcoder_metacmd_ID_setup_build_sh = 197;
static int32_t fcoder_metacmd_ID_setup_new_project = 198;
static int32_t fcoder_metacmd_ID_show_filebar = 199;
static int32_t fcoder_metacmd_ID_show_scrollbar = 200;
static int32_t fcoder_metacmd_ID_snipe_token_or_word = 201;
static int32_t fcoder_metacmd_ID_snipe_token_or_word_right = 202;
static int32_t fcoder_metacmd_ID_snippet_lister = 203;
static int32_t fcoder_metacmd_ID_suppress_mouse = 204;
static int32_t fcoder_metacmd_ID_swap_buffers_between_panels = 205;
static int32_t fcoder_metacmd_ID_to_lowercase = 206;
static int32_t fcoder_metacmd_ID_to_uppercase = 207;
static int32_t fcoder_metacmd_ID_toggle_filebar = 208;
static int32_t fcoder_metacmd_ID_toggle_fullscreen = 209;
static int32_t fcoder_metacmd_ID_toggle_highlight_enclosing_scopes = 210;
static int32_t fcoder_metacmd_ID_toggle_highlight_line_at_cursor = 211;
static int32_t fcoder_metacmd_ID_toggle_line_wrap = 212;
static int32_t fcoder_metacmd_ID_toggle_mouse = 213;
static int32_t fcoder_metacmd_ID_toggle_paren_matching_helper = 214;
static int32_t fcoder_metacmd_ID_toggle_show_whitespace = 215;
static int32_t fcoder_metacmd_ID_toggle_virtual_whitespace = 216;
static int32_t fcoder_metacmd_ID_uncomment_line = 217;
static int32_t fcoder_metacmd_ID_undo = 218;
static int32_t fcoder_metacmd_ID_view_buffer_other_panel = 219;
static int32_t fcoder_metacmd_ID_view_jump_list_with_lister = 220;
static int32_t fcoder_metacmd_ID_word_complete = 221;
static int32_t fcoder_metacmd_ID_write_and_auto_tab = 222;
static int32_t fcoder_metacmd_ID_write_block = 223;
static int32_t fcoder_metacmd_ID_write_character = 224;
static int32_t fcoder_metacmd_ID_write_explicit_enum_flags = 225;
static int32_t fcoder_metacmd_ID_write_explicit_enum_values = 226;
static int32_t fcoder_metacmd_ID_write_hack = 227;
static int32_t fcoder_metacmd_ID_write_note = 228;
static int32_t fcoder_metacmd_ID_write_todo = 229;
static int32_t fcoder_metacmd_ID_write_underscore = 230;
static int32_t fcoder_metacmd_ID_write_zero_struct = 231;
static int32_t fcoder_metacmd_ID_left_adjust_view = 70;
static int32_t fcoder_metacmd_ID_list_all_functions_all_buffers = 71;
static int32_t fcoder_metacmd_ID_list_all_functions_all_buffers_lister = 72;
static int32_t fcoder_metacmd_ID_list_all_functions_current_buffer = 73;
static int32_t fcoder_metacmd_ID_list_all_functions_current_buffer_lister = 74;
static int32_t fcoder_metacmd_ID_list_all_locations = 75;
static int32_t fcoder_metacmd_ID_list_all_locations_case_insensitive = 76;
static int32_t fcoder_metacmd_ID_list_all_locations_of_identifier = 77;
static int32_t fcoder_metacmd_ID_list_all_locations_of_identifier_case_insensitive = 78;
static int32_t fcoder_metacmd_ID_list_all_locations_of_selection = 79;
static int32_t fcoder_metacmd_ID_list_all_locations_of_selection_case_insensitive = 80;
static int32_t fcoder_metacmd_ID_list_all_locations_of_type_definition = 81;
static int32_t fcoder_metacmd_ID_list_all_locations_of_type_definition_of_identifier = 82;
static int32_t fcoder_metacmd_ID_list_all_substring_locations = 83;
static int32_t fcoder_metacmd_ID_list_all_substring_locations_case_insensitive = 84;
static int32_t fcoder_metacmd_ID_lister__activate = 85;
static int32_t fcoder_metacmd_ID_lister__backspace_text_field = 86;
static int32_t fcoder_metacmd_ID_lister__backspace_text_field__default = 87;
static int32_t fcoder_metacmd_ID_lister__backspace_text_field__file_path = 88;
static int32_t fcoder_metacmd_ID_lister__mouse_press = 89;
static int32_t fcoder_metacmd_ID_lister__mouse_release = 90;
static int32_t fcoder_metacmd_ID_lister__move_down = 91;
static int32_t fcoder_metacmd_ID_lister__move_down__default = 92;
static int32_t fcoder_metacmd_ID_lister__move_up = 93;
static int32_t fcoder_metacmd_ID_lister__move_up__default = 94;
static int32_t fcoder_metacmd_ID_lister__quit = 95;
static int32_t fcoder_metacmd_ID_lister__repaint = 96;
static int32_t fcoder_metacmd_ID_lister__wheel_scroll = 97;
static int32_t fcoder_metacmd_ID_lister__write_character = 98;
static int32_t fcoder_metacmd_ID_lister__write_character__default = 99;
static int32_t fcoder_metacmd_ID_lister__write_character__file_path = 100;
static int32_t fcoder_metacmd_ID_lister__write_character__fixed_list = 101;
static int32_t fcoder_metacmd_ID_load_project = 102;
static int32_t fcoder_metacmd_ID_make_directory_query = 103;
static int32_t fcoder_metacmd_ID_mouse_wheel_change_face_size = 104;
static int32_t fcoder_metacmd_ID_mouse_wheel_scroll = 105;
static int32_t fcoder_metacmd_ID_move_down = 106;
static int32_t fcoder_metacmd_ID_move_down_10 = 107;
static int32_t fcoder_metacmd_ID_move_down_textual = 108;
static int32_t fcoder_metacmd_ID_move_left = 109;
static int32_t fcoder_metacmd_ID_move_line_down = 110;
static int32_t fcoder_metacmd_ID_move_line_up = 111;
static int32_t fcoder_metacmd_ID_move_right = 112;
static int32_t fcoder_metacmd_ID_move_up = 113;
static int32_t fcoder_metacmd_ID_move_up_10 = 114;
static int32_t fcoder_metacmd_ID_newline_or_goto_position_direct = 115;
static int32_t fcoder_metacmd_ID_newline_or_goto_position_same_panel_direct = 116;
static int32_t fcoder_metacmd_ID_newline_or_goto_position_same_panel_sticky = 117;
static int32_t fcoder_metacmd_ID_newline_or_goto_position_sticky = 118;
static int32_t fcoder_metacmd_ID_open_all_code = 119;
static int32_t fcoder_metacmd_ID_open_all_code_recursive = 120;
static int32_t fcoder_metacmd_ID_open_color_tweaker = 121;
static int32_t fcoder_metacmd_ID_open_file_in_quotes = 122;
static int32_t fcoder_metacmd_ID_open_in_other = 123;
static int32_t fcoder_metacmd_ID_open_long_braces = 124;
static int32_t fcoder_metacmd_ID_open_long_braces_break = 125;
static int32_t fcoder_metacmd_ID_open_long_braces_semicolon = 126;
static int32_t fcoder_metacmd_ID_open_matching_file_cpp = 127;
static int32_t fcoder_metacmd_ID_open_panel_hsplit = 128;
static int32_t fcoder_metacmd_ID_open_panel_vsplit = 129;
static int32_t fcoder_metacmd_ID_page_down = 130;
static int32_t fcoder_metacmd_ID_page_up = 131;
static int32_t fcoder_metacmd_ID_paste = 132;
static int32_t fcoder_metacmd_ID_paste_and_indent = 133;
static int32_t fcoder_metacmd_ID_paste_next = 134;
static int32_t fcoder_metacmd_ID_paste_next_and_indent = 135;
static int32_t fcoder_metacmd_ID_place_in_scope = 136;
static int32_t fcoder_metacmd_ID_project_command_lister = 137;
static int32_t fcoder_metacmd_ID_project_fkey_command = 138;
static int32_t fcoder_metacmd_ID_project_go_to_root_directory = 139;
static int32_t fcoder_metacmd_ID_query_replace = 140;
static int32_t fcoder_metacmd_ID_query_replace_identifier = 141;
static int32_t fcoder_metacmd_ID_query_replace_selection = 142;
static int32_t fcoder_metacmd_ID_redo = 143;
static int32_t fcoder_metacmd_ID_reload_themes = 144;
static int32_t fcoder_metacmd_ID_remap_interactive = 145;
static int32_t fcoder_metacmd_ID_rename_file_query = 146;
static int32_t fcoder_metacmd_ID_reopen = 147;
static int32_t fcoder_metacmd_ID_replace_in_range = 148;
static int32_t fcoder_metacmd_ID_reverse_search = 149;
static int32_t fcoder_metacmd_ID_reverse_search_identifier = 150;
static int32_t fcoder_metacmd_ID_save = 151;
static int32_t fcoder_metacmd_ID_save_all_dirty_buffers = 152;
static int32_t fcoder_metacmd_ID_save_to_query = 153;
static int32_t fcoder_metacmd_ID_scope_absorb_down = 154;
static int32_t fcoder_metacmd_ID_search = 155;
static int32_t fcoder_metacmd_ID_search_identifier = 156;
static int32_t fcoder_metacmd_ID_seek_alphanumeric_left = 157;
static int32_t fcoder_metacmd_ID_seek_alphanumeric_or_camel_left = 158;
static int32_t fcoder_metacmd_ID_seek_alphanumeric_or_camel_right = 159;
static int32_t fcoder_metacmd_ID_seek_alphanumeric_right = 160;
static int32_t fcoder_metacmd_ID_seek_beginning_of_line = 161;
static int32_t fcoder_metacmd_ID_seek_beginning_of_textual_line = 162;
static int32_t fcoder_metacmd_ID_seek_end_of_line = 163;
static int32_t fcoder_metacmd_ID_seek_end_of_textual_line = 164;
static int32_t fcoder_metacmd_ID_seek_token_left = 165;
static int32_t fcoder_metacmd_ID_seek_token_right = 166;
static int32_t fcoder_metacmd_ID_seek_white_or_token_left = 167;
static int32_t fcoder_metacmd_ID_seek_white_or_token_right = 168;
static int32_t fcoder_metacmd_ID_seek_whitespace_down = 169;
static int32_t fcoder_metacmd_ID_seek_whitespace_down_end_line = 170;
static int32_t fcoder_metacmd_ID_seek_whitespace_left = 171;
static int32_t fcoder_metacmd_ID_seek_whitespace_right = 172;
static int32_t fcoder_metacmd_ID_seek_whitespace_up = 173;
static int32_t fcoder_metacmd_ID_seek_whitespace_up_end_line = 174;
static int32_t fcoder_metacmd_ID_select_all = 175;
static int32_t fcoder_metacmd_ID_select_next_scope_absolute = 176;
static int32_t fcoder_metacmd_ID_select_prev_scope_absolute = 177;
static int32_t fcoder_metacmd_ID_select_surrounding_scope = 178;
static int32_t fcoder_metacmd_ID_set_bindings_choose = 179;
static int32_t fcoder_metacmd_ID_set_bindings_default = 180;
static int32_t fcoder_metacmd_ID_set_bindings_mac_default = 181;
static int32_t fcoder_metacmd_ID_set_mark = 182;
static int32_t fcoder_metacmd_ID_set_mode_to_notepad_like = 183;
static int32_t fcoder_metacmd_ID_set_mode_to_original = 184;
static int32_t fcoder_metacmd_ID_setup_build_bat = 185;
static int32_t fcoder_metacmd_ID_setup_build_bat_and_sh = 186;
static int32_t fcoder_metacmd_ID_setup_build_sh = 187;
static int32_t fcoder_metacmd_ID_setup_new_project = 188;
static int32_t fcoder_metacmd_ID_show_filebar = 189;
static int32_t fcoder_metacmd_ID_show_scrollbar = 190;
static int32_t fcoder_metacmd_ID_snipe_token_or_word = 191;
static int32_t fcoder_metacmd_ID_snipe_token_or_word_right = 192;
static int32_t fcoder_metacmd_ID_snippet_lister = 193;
static int32_t fcoder_metacmd_ID_suppress_mouse = 194;
static int32_t fcoder_metacmd_ID_swap_buffers_between_panels = 195;
static int32_t fcoder_metacmd_ID_to_lowercase = 196;
static int32_t fcoder_metacmd_ID_to_uppercase = 197;
static int32_t fcoder_metacmd_ID_toggle_filebar = 198;
static int32_t fcoder_metacmd_ID_toggle_fullscreen = 199;
static int32_t fcoder_metacmd_ID_toggle_highlight_enclosing_scopes = 200;
static int32_t fcoder_metacmd_ID_toggle_highlight_line_at_cursor = 201;
static int32_t fcoder_metacmd_ID_toggle_line_wrap = 202;
static int32_t fcoder_metacmd_ID_toggle_mouse = 203;
static int32_t fcoder_metacmd_ID_toggle_paren_matching_helper = 204;
static int32_t fcoder_metacmd_ID_toggle_show_whitespace = 205;
static int32_t fcoder_metacmd_ID_toggle_virtual_whitespace = 206;
static int32_t fcoder_metacmd_ID_uncomment_line = 207;
static int32_t fcoder_metacmd_ID_undo = 208;
static int32_t fcoder_metacmd_ID_view_buffer_other_panel = 209;
static int32_t fcoder_metacmd_ID_view_jump_list_with_lister = 210;
static int32_t fcoder_metacmd_ID_word_complete = 211;
static int32_t fcoder_metacmd_ID_write_and_auto_tab = 212;
static int32_t fcoder_metacmd_ID_write_block = 213;
static int32_t fcoder_metacmd_ID_write_character = 214;
static int32_t fcoder_metacmd_ID_write_hack = 215;
static int32_t fcoder_metacmd_ID_write_note = 216;
static int32_t fcoder_metacmd_ID_write_todo = 217;
static int32_t fcoder_metacmd_ID_write_underscore = 218;
static int32_t fcoder_metacmd_ID_write_zero_struct = 219;
#endif

View File

@ -9,39 +9,16 @@
// TOP
internal char*
get_null_terminated_version(String str){
char *ptr = 0;
if (str.size > 0){
if (terminate_with_null(&str)){
ptr = str.str;
}
else{
String b = str_alloc(str.size + 1);
copy(&b, str);
terminate_with_null(&b);
ptr = b.str;
}
}
return(ptr);
}
////////////////////////////////
struct Enriched_Text{
String fname;
String source;
};
internal Enriched_Text
load_enriched_text(char *directory, char *filename){
load_enriched_text(Partition *arena, char *directory, char *filename){
Enriched_Text result = {};
char *fname = fm_str(directory, "/", filename);
result.fname = str_alloc(str_size(fname) + 1);
fm_align();
copy(&result.fname, fname);
terminate_with_null(&result.fname);
result.source = file_dump(fname);
result.fname = make_string_slowly(fm_str(arena, directory, "/", filename));
result.source = file_dump(result.fname.str);
return(result);
}
@ -67,34 +44,31 @@ get_mangle_rule(String mangle){
}
internal String
apply_mangle_rule(String name, u32 mangle_rule){
apply_mangle_rule(Partition *arena, String name, u32 mangle_rule){
String result = {};
switch (mangle_rule){
case MangleRule_MacroSig:
{
result = str_alloc(name.size + 5);
fm_align();
result = string_push(arena, name.size + 5);
push_align(arena, 8);
copy(&result, name);
to_upper(&result);
append(&result, "_SIG");
terminate_with_null(&result);
}break;
case MangleRule_ToLower:
{
result = str_alloc(name.size + 1);
fm_align();
result = string_push(arena, name.size + 1);
push_align(arena, 8);
copy(&result, name);
to_lower(&result);
terminate_with_null(&result);
}break;
default:
{
result = name;
}break;
}
return(result);
}
@ -159,11 +133,9 @@ global Document_Item null_document_item = {};
////////////////////////////////
internal void
set_item_string(String *out, String text){
*out = str_alloc(text.size + 1);
fm_align();
copy(out, text);
terminate_with_null(out);
set_item_string(Partition *arena, String *out, String text){
*out = string_push_copy(arena, text);
push_align(arena, 8);
}
////////////////////////////////
@ -186,11 +158,12 @@ clear_list(Basic_List *list){
}
internal void*
push_item_on_list(Basic_List *list, i32 item_size){
push_item_on_list(Partition *arena, Basic_List *list, i32 item_size){
i32 mem_size = item_size + sizeof(Basic_Node);
void *mem = fm__push(mem_size);
void *mem = push_array(arena, char, mem_size);
Assert(mem != 0);
memset(mem, 0, mem_size);
push_align(arena, 8);
Basic_Node *node = (Basic_Node*)mem;
if (list->head == 0){
@ -255,11 +228,11 @@ get_item_by_name(Basic_List list, String name){
}
internal Abstract_Item*
create_abstract_item(Basic_List *list, char *name){
create_abstract_item(Partition *arena, Basic_List *list, char *name){
Abstract_Item *result = 0;
Abstract_Item *lookup = get_item_by_name(*list, make_string_slowly(name));
if (lookup == 0){
result = (Abstract_Item*)push_item_on_list(list, sizeof(*result));
result = (Abstract_Item*)push_item_on_list(arena, list, sizeof(*result));
}
return(result);
}
@ -270,10 +243,10 @@ struct Abstract_Item_Array{
};
internal Abstract_Item_Array
get_abstract_item_array(Basic_List *list){
get_abstract_item_array(Partition *arena, Basic_List *list){
Abstract_Item_Array result = {};
result.items = (Abstract_Item**)fm_push_array(Abstract_Item*, list->count);
result.items = (Abstract_Item**)push_array(arena, Abstract_Item*, list->count);
result.count = list->count;
u32 i = 0;
@ -311,8 +284,8 @@ create_document_system(char *code_dir, char *asset_dir, char *src_dir){
}
internal void
create_unresolved_include(Document_System *doc_system, Document_Item *include_item){
Document_Item **new_item = (Document_Item**)push_item_on_list(&doc_system->unresolved_includes, sizeof(*new_item));
create_unresolved_include(Partition *arena, Document_System *doc_system, Document_Item *include_item){
Document_Item **new_item = (Document_Item**)push_item_on_list(arena, &doc_system->unresolved_includes, sizeof(*new_item));
*new_item = include_item;
}
@ -325,17 +298,19 @@ enum{
};
internal u32
create_meta_unit(Document_System *doc_system, String name_str, String file_str){
create_meta_unit(Partition *arena, Document_System *doc_system, String name_str, String file_str){
u32 result = MetaResult_DidParse;
char *name = get_null_terminated_version(name_str);
char *file = get_null_terminated_version(file_str);
String name_z = string_push_copy(arena, name_str);
String file_z = string_push_copy(arena, file_str);
char *name = name_z.str;
char *file = file_z.str;
Abstract_Item *item = create_abstract_item(&doc_system->meta_list, name);
Abstract_Item *item = create_abstract_item(arena, &doc_system->meta_list, name);
if (item != 0){
Meta_Unit *unit = fm_push_array(Meta_Unit, 1);
*unit = compile_meta_unit(doc_system->code_dir, file, ExpandArray(meta_keywords));
Meta_Unit *unit = push_array(arena, Meta_Unit, 1);
*unit = compile_meta_unit(arena, doc_system->code_dir, file, ExpandArray(meta_keywords));
if (unit->count != 0){
result = true;
@ -355,10 +330,10 @@ create_meta_unit(Document_System *doc_system, String name_str, String file_str){
}
internal Abstract_Item*
add_generic_file(Document_System *system, char *source_file, char *extension, char *name){
Abstract_Item *item = create_abstract_item(&system->file_list, name);
add_generic_file(Partition *arena, Document_System *system, char *source_file, char *extension, char *name){
Abstract_Item *item = create_abstract_item(arena, &system->file_list, name);
if (item){
char *full_file = fm_str(system->asset_dir, "/", source_file);
char *full_file = fm_str(arena, system->asset_dir, "/", source_file);
item->item_type = ItemType_GenericFile;
item->extension = extension;
@ -369,10 +344,10 @@ add_generic_file(Document_System *system, char *source_file, char *extension, ch
}
internal Abstract_Item*
add_image_description(Document_System *system, char *source_file, char *extension, char *name){
Abstract_Item *item = create_abstract_item(&system->img_list, name);
add_image_description(Partition *arena, Document_System *system, char *source_file, char *extension, char *name){
Abstract_Item *item = create_abstract_item(arena, &system->img_list, name);
if (item != 0){
char *full_file = fm_str(system->asset_dir, "/", source_file);
char *full_file = fm_str(arena, system->asset_dir, "/", source_file);
item->item_type = ItemType_Image;
item->name = name;
@ -418,8 +393,8 @@ get_image_instantiation(Basic_List list, i32 w, i32 h){
}
internal void
add_image_instantiation(Basic_List *list, i32 w, i32 h){
Image_Instantiation *instantiation = (Image_Instantiation*)push_item_on_list(list, sizeof(*instantiation));
add_image_instantiation(Partition *arena, Basic_List *list, i32 w, i32 h){
Image_Instantiation *instantiation = (Image_Instantiation*)push_item_on_list(arena, list, sizeof(*instantiation));
instantiation->w = w;
instantiation->h = h;
}
@ -433,9 +408,9 @@ struct Document_Builder{
};
internal Document_Builder
begin_document_description(Document_System *system, char *title, char *name, b32 show_title){
begin_document_description(Partition *arena, Document_System *system, char *title, char *name, b32 show_title){
Document_Builder builder = {};
Abstract_Item *doc = create_abstract_item(&system->doc_list, name);
Abstract_Item *doc = create_abstract_item(arena, &system->doc_list, name);
if (doc != 0){
builder.doc = doc;
@ -443,11 +418,11 @@ begin_document_description(Document_System *system, char *title, char *name, b32
doc->item_type = ItemType_Document;
doc->name = name;
doc->root_item = fm_push_array(Document_Item, 1);
doc->root_item = push_array(arena, Document_Item, 1);
*doc->root_item = null_document_item;
Document_Item *item = doc->root_item;
set_item_string(&item->section.name, make_string_slowly(name));
set_item_string(arena, &item->section.name, make_string_slowly(name));
item->section.show_title = show_title;
item->type = Doc_Root;
@ -484,9 +459,9 @@ doc_get_item_top(Document_Builder *builder){
}
internal Document_Item*
doc_new_item(Document_Builder *builder, u32 type, b32 push = false){
doc_new_item(Partition *arena, Document_Builder *builder, u32 type, b32 push = false){
Document_Item *parent = doc_get_item_top(builder);
Document_Item *item = fm_push_array(Document_Item, 1);
Document_Item *item = push_array(arena, Document_Item, 1);
*item = null_document_item;
item->type = type;
append_child(parent, item);
@ -497,13 +472,13 @@ doc_new_item(Document_Builder *builder, u32 type, b32 push = false){
}
internal Document_Item*
doc_new_item_strings(Document_Builder *builder, u32 type, String s1, String s2, b32 push = false){
Document_Item *item = doc_new_item(builder, type);
doc_new_item_strings(Partition *arena, Document_Builder *builder, u32 type, String s1, String s2, b32 push = false){
Document_Item *item = doc_new_item(arena, builder, type);
if (s1.size > 0){
set_item_string(&item->string.string, s1);
set_item_string(arena, &item->string.string, s1);
}
if (s2.size > 0){
set_item_string(&item->string.string2, s2);
set_item_string(arena, &item->string.string2, s2);
}
if (push){
doc_push(builder, item);
@ -512,9 +487,9 @@ doc_new_item_strings(Document_Builder *builder, u32 type, String s1, String s2,
}
internal Document_Item*
doc_new_item_documentation(Document_Builder *builder, u32 type, String unit, Mangle_Rule mangle_rule, b32 push = false){
Document_Item *item = doc_new_item(builder, type);
set_item_string(&item->unit_elements.unit, unit);
doc_new_item_documentation(Partition *arena, Document_Builder *builder, u32 type, String unit, Mangle_Rule mangle_rule, b32 push = false){
Document_Item *item = doc_new_item(arena, builder, type);
set_item_string(arena, &item->unit_elements.unit, unit);
item->unit_elements.mangle_rule = mangle_rule;
if (push){
doc_push(builder, item);
@ -523,73 +498,73 @@ doc_new_item_documentation(Document_Builder *builder, u32 type, String unit, Man
}
internal void
begin_section(Document_Builder *builder, char *title, char *id){
Document_Item *item = doc_new_item(builder, Doc_Section, PUSH);
set_item_string(&item->section.name, make_string_slowly(title));
begin_section(Partition *arena, Document_Builder *builder, char *title, char *id){
Document_Item *item = doc_new_item(arena, builder, Doc_Section, PUSH);
set_item_string(arena, &item->section.name, make_string_slowly(title));
item->section.show_title = true;
if (id != 0){
set_item_string(&item->section.id, make_lit_string(id));
set_item_string(arena, &item->section.id, make_lit_string(id));
}
}
#define doc_end(b) doc_pop(b)
#define doc_end(a,b) doc_pop(a,b)
#define begin_style(b,t) doc_new_item_strings(b, Doc_Style, t, null_string, PUSH)
#define begin_link(b,t) doc_new_item_strings(b, Doc_Link, t, null_string, PUSH);
#define begin_list(b) doc_new_item(b, Doc_List, PUSH)
#define begin_item(b) doc_new_item(b, Doc_Item, PUSH)
#define begin_style(a,b,t) doc_new_item_strings(a, b, Doc_Style, t, null_string, PUSH)
#define begin_link(a,b,t) doc_new_item_strings(a, b, Doc_Link, t, null_string, PUSH);
#define begin_list(a,b) doc_new_item(a, b, Doc_List, PUSH)
#define begin_item(a,b) doc_new_item(a, b, Doc_Item, PUSH)
internal void
add_include(Document_System *doc_system, Document_Builder *builder, String text){
Document_Item *item = doc_new_item(builder, Doc_Include);
set_item_string(&item->include.name, text);
create_unresolved_include(doc_system, item);
add_include(Partition *arena, Document_System *doc_system, Document_Builder *builder, String text){
Document_Item *item = doc_new_item(arena, builder, Doc_Include);
set_item_string(arena, &item->include.name, text);
create_unresolved_include(arena, doc_system, item);
}
#define add_error(b,t) doc_new_item_strings(b, Doc_Error, t, null_string)
#define add_todo(b) doc_new_item(b, Doc_Todo)
#define add_doc_list(b,u,m) doc_new_item_documentation(b, Doc_DocList, u, m)
#define add_doc_full(b,u,m) doc_new_item_documentation(b, Doc_DocFull, u, m)
#define add_table_of_contents(b) doc_new_item(b, Doc_TableOfContents)
#define add_plain_old_text(b,t) doc_new_item_strings(b, Doc_PlainOldText, t, null_string);
#define add_version(b) doc_new_item(b, Doc_Version)
#define add_document_link(b,t) doc_new_item_strings(b, Doc_DocumentLink, t, null_string)
#define add_image(b,t,e) doc_new_item_strings(b, Doc_Image, t, e)
#define add_video(b,t) doc_new_item_strings(b, Doc_Video, t, null_string)
#define add_begin_paragraph(b) doc_new_item(b, Doc_BeginParagraph)
#define add_end_paragraph(b) doc_new_item(b, Doc_EndParagraph)
#define add_error(a,b,t) doc_new_item_strings(a, b, Doc_Error, t, null_string)
#define add_todo(a,b) doc_new_item(a, b, Doc_Todo)
#define add_doc_list(a,b,u,m) doc_new_item_documentation(a, b, Doc_DocList, u, m)
#define add_doc_full(a,b,u,m) doc_new_item_documentation(a, b, Doc_DocFull, u, m)
#define add_table_of_contents(a,b) doc_new_item(a, b, Doc_TableOfContents)
#define add_plain_old_text(a,b,t) doc_new_item_strings(a, b, Doc_PlainOldText, t, null_string);
#define add_version(a,b) doc_new_item(a, b, Doc_Version)
#define add_document_link(a,b,t) doc_new_item_strings(a, b, Doc_DocumentLink, t, null_string)
#define add_image(a,b,t,e) doc_new_item_strings(a, b, Doc_Image, t, e)
#define add_video(a,b,t) doc_new_item_strings(a, b, Doc_Video, t, null_string)
#define add_begin_paragraph(a,b) doc_new_item(a, b, Doc_BeginParagraph)
#define add_end_paragraph(a,b) doc_new_item(a, b, Doc_EndParagraph)
internal void
doc_pop(Document_Builder *builder){
doc_pop(Partition *arena, Document_Builder *builder){
if (builder->item_top > 0){
--builder->item_top;
}
else{
add_error(builder, make_lit_string("unbalanced groups -- extra end"));
add_error(arena, builder, make_lit_string("unbalanced groups -- extra end"));
}
}
internal void
end_document_description(Document_Builder *builder){
end_document_description(Partition *arena, Document_Builder *builder){
b32 closing_error = (builder->item_top != 0);
if (closing_error){
add_error(builder, make_lit_string("unbalanced groups -- extra begin"));
add_error(arena, builder, make_lit_string("unbalanced groups -- extra begin"));
}
for (;builder->item_top > 0;){
doc_end(builder);
doc_end(arena, builder);
}
}
////////////////////////////////
internal void
report_error_missing_body(Document_Builder *builder, String command_body){
report_error_missing_body(Partition *arena, Document_Builder *builder, String command_body){
char space[512];
String error_string = make_fixed_width_string(space);
append(&error_string, "missing body for ");
append(&error_string, command_body);
add_error(builder, error_string);
add_error(arena, builder, error_string);
}
////////////////////////////////
@ -683,16 +658,16 @@ extract_command_body(String l, i32 *i_in_out, String *body_text_out){
}
internal Abstract_Item*
make_document_from_text(Document_System *doc_system, char *title, char *name, Enriched_Text *text){
make_document_from_text(Partition *arena, Document_System *doc_system, char *title, char *name, Enriched_Text *text){
String source = text->source;
Document_Builder builder = begin_document_description(doc_system, title, name, false);
Document_Builder builder = begin_document_description(arena, doc_system, title, name, false);
if (source.str == 0){
char space[512];
String str = make_fixed_width_string(space);
copy(&str, "could not open source file ");
copy(&str, text->fname);
add_error(&builder, str);
add_error(arena, &builder, str);
}
else{
for (String line = get_first_double_line(source);
@ -701,13 +676,13 @@ make_document_from_text(Document_System *doc_system, char *title, char *name, En
String l = skip_chop_whitespace(line);
if (l.size == 0) continue;
add_begin_paragraph(&builder);
add_begin_paragraph(arena, &builder);
i32 start = 0, i = 0;
for (; i < l.size; ++i){
char ch = l.str[i];
if (ch == '\\'){
add_plain_old_text(&builder, substr(l, start, i - start));
add_plain_old_text(arena, &builder, substr(l, start, i - start));
i32 command_start = i + 1;
i32 command_end = command_start;
@ -738,7 +713,7 @@ make_document_from_text(Document_System *doc_system, char *title, char *name, En
switch (match_index){
case Cmd_BackSlash:
{
add_plain_old_text(&builder, make_lit_string("\\"));
add_plain_old_text(arena, &builder, make_lit_string("\\"));
}break;
case Cmd_End:
@ -746,9 +721,9 @@ make_document_from_text(Document_System *doc_system, char *title, char *name, En
for (Document_Item *top = doc_get_item_top(&builder);
top->type == Doc_Item;
top = doc_get_item_top(&builder)){
doc_end(&builder);
doc_end(arena, &builder);
}
doc_end(&builder);
doc_end(arena, &builder);
}break;
case Cmd_Section:
@ -757,14 +732,12 @@ make_document_from_text(Document_System *doc_system, char *title, char *name, En
if (extract_command_body(l, &i, &body_text)){
String extra_text = {};
extract_command_body(l, &i, &extra_text);
char *title = get_null_terminated_version(body_text);
char *id = get_null_terminated_version(extra_text);
begin_section(&builder, title, id);
String title = string_push_copy(arena, body_text);
String id = string_push_copy(arena, extra_text);
begin_section(arena, &builder, title.str, id.str);
}
else{
report_error_missing_body(&builder, command_string);
report_error_missing_body(arena, &builder, command_string);
}
}break;
@ -772,35 +745,35 @@ make_document_from_text(Document_System *doc_system, char *title, char *name, En
{
String body_text = {};
if (extract_command_body(l, &i, &body_text)){
begin_style(&builder, body_text);
begin_style(arena, &builder, body_text);
}
else{
report_error_missing_body(&builder, command_string);
report_error_missing_body(arena, &builder, command_string);
}
}break;
case Cmd_List:
{
begin_list(&builder);
begin_list(arena, &builder);
}break;
case Cmd_Item:
{
Document_Item *top = doc_get_item_top(&builder);
if (top->type == Doc_Item){
doc_end(&builder);
doc_end(arena, &builder);
}
begin_item(&builder);
begin_item(arena, &builder);
}break;
case Cmd_Link:
{
String body_text = {};
if (extract_command_body(l, &i, &body_text)){
begin_link(&builder, body_text);
begin_link(arena, &builder, body_text);
}
else{
report_error_missing_body(&builder, command_string);
report_error_missing_body(arena, &builder, command_string);
}
}break;
@ -809,10 +782,10 @@ make_document_from_text(Document_System *doc_system, char *title, char *name, En
{
String body_text = {};
if (extract_command_body(l, &i, &body_text)){
add_document_link(&builder, body_text);
add_document_link(arena, &builder, body_text);
}
else{
report_error_missing_body(&builder, command_string);
report_error_missing_body(arena, &builder, command_string);
}
}break;
@ -822,10 +795,10 @@ make_document_from_text(Document_System *doc_system, char *title, char *name, En
if (extract_command_body(l, &i, &body_text)){
String size_parameter = {};
extract_command_body(l, &i, &size_parameter);
add_image(&builder, body_text, size_parameter);
add_image(arena, &builder, body_text, size_parameter);
}
else{
report_error_missing_body(&builder, command_string);
report_error_missing_body(arena, &builder, command_string);
}
}break;
@ -833,36 +806,36 @@ make_document_from_text(Document_System *doc_system, char *title, char *name, En
{
String body_text = {};
if (extract_command_body(l, &i, &body_text)){
add_video(&builder, body_text);
add_video(arena, &builder, body_text);
}
else{
report_error_missing_body(&builder, command_string);
report_error_missing_body(arena, &builder, command_string);
}
}break;
case Cmd_Version:
{
add_version(&builder);
add_version(arena, &builder);
}break;
case Cmd_TableOfContents:
{
add_table_of_contents(&builder);
add_table_of_contents(arena, &builder);
}break;
case Cmd_Todo:
{
add_todo(&builder);
add_todo(arena, &builder);
}break;
case Cmd_Include:
{
String body_text = {};
if (extract_command_body(l, &i, &body_text)){
add_include(doc_system, &builder, body_text);
add_include(arena, doc_system, &builder, body_text);
}
else{
report_error_missing_body(&builder, command_string);
report_error_missing_body(arena, &builder, command_string);
}
}break;
@ -872,21 +845,21 @@ make_document_from_text(Document_System *doc_system, char *title, char *name, En
String file = {};
if (extract_command_body(l, &i, &name)){
if (extract_command_body(l, &i, &file)){
u32 result = create_meta_unit(doc_system, name, file);
u32 result = create_meta_unit(arena, doc_system, name, file);
if (result == MetaResult_FailedToParse){
char space[512];
String str = make_fixed_width_string(space);
append(&str, "parse failed for ");
append(&str, file);
add_error(&builder, str);
add_error(arena, &builder, str);
}
}
else{
report_error_missing_body(&builder, command_string);
report_error_missing_body(arena, &builder, command_string);
}
}
else{
report_error_missing_body(&builder, command_string);
report_error_missing_body(arena, &builder, command_string);
}
}break;
@ -906,15 +879,15 @@ make_document_from_text(Document_System *doc_system, char *title, char *name, En
}
if (match_index == Cmd_DocList){
add_doc_list(&builder, name, mangle_rule);
add_doc_list(arena, &builder, name, mangle_rule);
}
else{
add_doc_full(&builder, name, mangle_rule);
add_doc_full(arena, &builder, name, mangle_rule);
}
}
else{
report_error_missing_body(&builder, command_string);
report_error_missing_body(arena, &builder, command_string);
}
}break;
@ -924,7 +897,7 @@ make_document_from_text(Document_System *doc_system, char *title, char *name, En
String error = make_fixed_width_string(space);
append(&error, "unrecognized command ");
append(&error, command_string);
add_error(&builder, error);
add_error(arena, &builder, error);
}break;
}
@ -933,14 +906,14 @@ make_document_from_text(Document_System *doc_system, char *title, char *name, En
}
if (start != i){
add_plain_old_text(&builder, substr(l, start, i - start));
add_plain_old_text(arena, &builder, substr(l, start, i - start));
}
add_end_paragraph(&builder);
add_end_paragraph(arena, &builder);
}
}
end_document_description(&builder);
end_document_description(arena, &builder);
return(builder.doc);
}
@ -952,11 +925,11 @@ struct Unresolved_Include_Array{
};
internal Unresolved_Include_Array
get_unresolved_includes(Document_System *doc_system){
get_unresolved_includes(Partition *arena, Document_System *doc_system){
Unresolved_Include_Array result = {};
Basic_List *list = &doc_system->unresolved_includes;
result.items = (Document_Item**)fm_push_array(Document_Item*, list->count);
result.items = (Document_Item**)push_array(arena, Document_Item*, list->count);
result.count = list->count;
u32 i = 0;
@ -970,9 +943,9 @@ get_unresolved_includes(Document_System *doc_system){
}
internal void
resolve_all_includes(Document_System *doc_system){
resolve_all_includes(Partition *arena, Document_System *doc_system){
for (;doc_system->unresolved_includes.count > 0;){
Unresolved_Include_Array includes = get_unresolved_includes(doc_system);
Unresolved_Include_Array includes = get_unresolved_includes(arena, doc_system);
clear_list(&doc_system->unresolved_includes);
Document_Item **item_ptr = includes.items;
@ -982,9 +955,9 @@ resolve_all_includes(Document_System *doc_system){
Abstract_Item *inc_doc = get_item_by_name(doc_system->doc_list, item->include.name);
if (inc_doc == 0){
String source_text = item->include.name;
Enriched_Text *text = fm_push_array(Enriched_Text, 1);
*text = load_enriched_text(doc_system->src_dir, source_text.str);
inc_doc = make_document_from_text(doc_system, source_text.str, source_text.str, text);
Enriched_Text *text = push_array(arena, Enriched_Text, 1);
*text = load_enriched_text(arena, doc_system->src_dir, source_text.str);
inc_doc = make_document_from_text(arena, doc_system, source_text.str, source_text.str, text);
}
item->include.document = inc_doc;
}
@ -1219,7 +1192,7 @@ output_end_link(String *out){
}
internal void
output_image(Document_System *doc_system, String *out, String l, String l2){
output_image(Partition *arena, Document_System *doc_system, String *out, String l, String l2){
i32 pixel_height = 10;
i32 pixel_width = HTML_WIDTH;
@ -1244,7 +1217,7 @@ output_image(Document_System *doc_system, String *out, String l, String l2){
char space[256];
if (img_get_link_string(img_lookup, space, sizeof(space), pixel_width, pixel_height)){
append(out, space);
add_image_instantiation(&img_lookup->img_instantiations, pixel_width, pixel_height);
add_image_instantiation(arena, &img_lookup->img_instantiations, pixel_width, pixel_height);
}
else{
NotImplemented;
@ -1332,8 +1305,8 @@ print_item_in_list(String *out, String name, char *id_postfix){
}
internal void
init_used_links(Used_Links *used, i32 count){
used->strs = fm_push_array(String, count);
init_used_links(Partition *arena, Used_Links *used, i32 count){
used->strs = push_array(arena, String, count);
used->count = 0;
used->max = count;
}
@ -1594,18 +1567,18 @@ print_doc_description(String *out, String src){
}
internal void
print_struct_docs(String *out, Item_Node *member){
print_struct_docs(Partition *arena, String *out, Item_Node *member){
for (Item_Node *member_iter = member->first_child;
member_iter != 0;
member_iter = member_iter->next_sibling){
String type = member_iter->type;
if (match_ss(type, make_lit_string("struct")) ||
match_ss(type, make_lit_string("union"))){
print_struct_docs(out, member_iter);
print_struct_docs(arena, out, member_iter);
}
else{
Documentation doc = {};
perform_doc_parse(member_iter->doc_string, &doc);
perform_doc_parse(arena, member_iter->doc_string, &doc);
append(out, "<div>");
@ -1640,17 +1613,17 @@ print_see_also(String *out, Documentation *doc){
}
internal void
print_function_docs(String *out, String name, String doc_string){
print_function_docs(Partition *arena, String *out, String name, String doc_string){
if (doc_string.size == 0){
append(out, "No documentation generated for this function.");
fprintf(stdout, "warning: no documentation string for %.*s\n", name.size, name.str);
}
Temp temp = fm_begin_temp();
Temp_Memory temp = begin_temp_memory(arena);
Documentation doc = {};
perform_doc_parse(doc_string, &doc);
perform_doc_parse(arena, doc_string, &doc);
i32 doc_param_count = doc.param_count;
if (doc_param_count > 0){
@ -1686,14 +1659,14 @@ print_function_docs(String *out, String name, String doc_string){
print_see_also(out, &doc);
fm_end_temp(temp);
end_temp_memory(temp);
}
internal void
print_item_html(String *out, Used_Links *used, Item_Node *item, char *id_postfix, char *section, i32 I, u32 mangle_rule){
Temp temp = fm_begin_temp();
print_item_html(Partition *arena, String *out, Used_Links *used, Item_Node *item, char *id_postfix, char *section, i32 I, u32 mangle_rule){
Temp_Memory temp = begin_temp_memory(arena);
String name = apply_mangle_rule(item->name, mangle_rule);
String name = apply_mangle_rule(arena, item->name, mangle_rule);
/* NOTE(allen):
Open a div for the whole item.
@ -1736,7 +1709,7 @@ print_item_html(String *out, Used_Links *used, Item_Node *item, char *id_postfix
append(out, "</div>");
// NOTE(allen): Descriptive section
print_function_docs(out, name, item->doc_string);
print_function_docs(arena, out, name, item->doc_string);
}break;
case Item_Macro:
@ -1748,7 +1721,7 @@ print_item_html(String *out, Used_Links *used, Item_Node *item, char *id_postfix
append(out, "</div>");
// NOTE(allen): Descriptive section
print_function_docs(out, name, item->doc_string);
print_function_docs(arena, out, name, item->doc_string);
}break;
case Item_Typedef:
@ -1768,7 +1741,7 @@ print_item_html(String *out, Used_Links *used, Item_Node *item, char *id_postfix
// NOTE(allen): Descriptive section
String doc_string = item->doc_string;
Documentation doc = {};
perform_doc_parse(doc_string, &doc);
perform_doc_parse(arena, doc_string, &doc);
String main_doc = doc.main_doc;
if (main_doc.size != 0){
@ -1799,7 +1772,7 @@ print_item_html(String *out, Used_Links *used, Item_Node *item, char *id_postfix
// NOTE(allen): Descriptive section
String doc_string = item->doc_string;
Documentation doc = {};
perform_doc_parse(doc_string, &doc);
perform_doc_parse(arena, doc_string, &doc);
String main_doc = doc.main_doc;
if (main_doc.size != 0){
@ -1820,7 +1793,7 @@ print_item_html(String *out, Used_Links *used, Item_Node *item, char *id_postfix
member;
member = member->next_sibling){
Documentation doc = {};
perform_doc_parse(member->doc_string, &doc);
perform_doc_parse(arena, member->doc_string, &doc);
append(out, "<div>");
@ -1877,7 +1850,7 @@ print_item_html(String *out, Used_Links *used, Item_Node *item, char *id_postfix
// NOTE(allen): Descriptive section
{
Documentation doc = {};
perform_doc_parse(doc_string, &doc);
perform_doc_parse(arena, doc_string, &doc);
String main_doc = doc.main_doc;
if (main_doc.size != 0){
@ -1894,7 +1867,7 @@ print_item_html(String *out, Used_Links *used, Item_Node *item, char *id_postfix
if (!hide_members){
if (item->first_child){
append(out, HTML_DOC_HEAD_OPEN"Fields"HTML_DOC_HEAD_CLOSE);
print_struct_docs(out, item);
print_struct_docs(arena, out, item);
}
}
@ -1910,7 +1883,7 @@ print_item_html(String *out, Used_Links *used, Item_Node *item, char *id_postfix
// NOTE(allen): Close the item box
append(out, "</div><hr>");
fm_end_temp(temp);
end_temp_memory(temp);
}
global char* html_css =
@ -1983,7 +1956,7 @@ make_output_system(String *out, Document_System *doc_system, Used_Links *used_li
}
internal void
doc_item_html(Document_Output_System sys, Document_Item *item, b32 head){
doc_item_html(Partition *arena, Document_Output_System sys, Document_Item *item, b32 head){
switch (item->type){
case Doc_Root:
{
@ -2059,7 +2032,7 @@ doc_item_html(Document_Output_System sys, Document_Item *item, b32 head){
append(sys.out, "<ul>");
for (i32 i = 0; i < count; ++i){
String name = apply_mangle_rule(unit->set.items[i].name, mangle_rule);
String name = apply_mangle_rule(arena, unit->set.items[i].name, mangle_rule);
print_item_in_list(sys.out, name, "_doc");
}
@ -2073,7 +2046,7 @@ doc_item_html(Document_Output_System sys, Document_Item *item, b32 head){
i32 I = 1;
for (i32 i = 0; i < count; ++i, ++I){
print_item_html(sys.out, sys.used_links, &unit->set.items[i], "_doc", section_str.str, I, mangle_rule);
print_item_html(arena, sys.out, sys.used_links, &unit->set.items[i], "_doc", section_str.str, I, mangle_rule);
}
}
}
@ -2153,7 +2126,7 @@ doc_item_html(Document_Output_System sys, Document_Item *item, b32 head){
case Doc_Image:
{
if (head){
output_image(sys.doc_system, sys.out, item->string.string, item->string.string2);
output_image(arena, sys.doc_system, sys.out, item->string.string, item->string.string2);
}
}break;
@ -2201,11 +2174,11 @@ doc_item_html(Document_Output_System sys, Document_Item *item, b32 head){
}
internal void
generate_document_html_inner(Document_Output_System sys, Abstract_Item *doc);
generate_document_html_inner(Partition *arena, Document_Output_System sys, Abstract_Item *doc);
internal void
generate_item_html(Document_Output_System sys, Document_Item *item){
doc_item_html(sys, item, true);
generate_item_html(Partition *arena, Document_Output_System sys, Document_Item *item){
doc_item_html(arena, sys, item, true);
if (item->section.first_child != 0){
if (item->type == Doc_Section){
@ -2217,7 +2190,7 @@ generate_item_html(Document_Output_System sys, Document_Item *item){
for (Document_Item *m = item->section.first_child;
m != 0;
m = m->next){
generate_item_html(sys, m);
generate_item_html(arena, sys, m);
}
if (item->type == Doc_Section){
@ -2241,32 +2214,32 @@ generate_item_html(Document_Output_System sys, Document_Item *item){
String error = make_lit_string("recursive inclusion, halted here");
Document_Item temp_item = {};
temp_item.type = Doc_Error;
set_item_string(&temp_item.string.string, error);
generate_item_html(sys, &temp_item);
set_item_string(arena, &temp_item.string.string, error);
generate_item_html(arena, sys, &temp_item);
}
else{
generate_document_html_inner(sys, new_doc);
generate_document_html_inner(arena, sys, new_doc);
}
}
}
doc_item_html(sys, item, false);
doc_item_html(arena, sys, item, false);
}
internal void
generate_document_html_inner(Document_Output_System sys, Abstract_Item *doc){
generate_document_html_inner(Partition *arena, Document_Output_System sys, Abstract_Item *doc){
Assert(sys.inc_stack->top < ArrayCount(sys.inc_stack->stack));
sys.inc_stack->stack[sys.inc_stack->top++] = doc;
generate_item_html(sys, doc->root_item);
generate_item_html(arena, sys, doc->root_item);
--sys.inc_stack->top;
}
internal void
generate_document_html(String *out, Document_System *doc_system, Abstract_Item *doc){
generate_document_html(Partition *arena, String *out, Document_System *doc_system, Abstract_Item *doc){
Assert(doc->root_item != 0);
Used_Links used_links = {};
init_used_links(&used_links, 4000);
init_used_links(arena, &used_links, 4000);
Section_Counter section_counter = {};
section_counter.counter[section_counter.nest_level] = 1;
@ -2275,7 +2248,7 @@ generate_document_html(String *out, Document_System *doc_system, Abstract_Item *
Document_Output_System sys = make_output_system(out, doc_system, &used_links, &section_counter, &inc_stack);
generate_document_html_inner(sys, doc);
generate_document_html_inner(arena, sys, doc);
}
// BOTTOM

View File

@ -24,6 +24,8 @@
#include "../meta/4ed_meta_defines.h"
#include "../4coder_API/4coder_version.h"
#include "4coder_lib/4coder_arena.h"
#include "4coder_lib/4coder_arena.cpp"
#define FSTRING_IMPLEMENTATION
#include "../4coder_lib/4coder_string.h"
#include "../4coder_lib/4cpp_lexer.h"
@ -36,7 +38,7 @@
#include "../4coder_generated/command_metadata.h"
#include "../4coder_generated/remapping.h"
#include "../4coder_generated/keycodes.h"
#include "../4coder_API/4coder_keycodes.h"
///////////////////////////////////////////////////////////////////////////
@ -167,6 +169,8 @@ generate_binding_list(char *code_directory, char *src_directory){
case key_mouse_wheel: key_str = "mouse wheel"; break;
case key_mouse_move: key_str = "mouse move"; break;
case key_animate: key_str = "animate"; break;
case key_click_activate_view: key_str = "click_activate_view"; break;
case key_click_deactivate_view: key_str = "click_deactivate_view"; break;
case key_f1: key_str = "f1"; break;
case key_f2: key_str = "f2"; break;
case key_f3: key_str = "f3"; break;
@ -236,11 +240,11 @@ generate_binding_list(char *code_directory, char *src_directory){
//
internal Abstract_Item*
generate_page(Document_System *doc_system, char *source_text, char *big_title, char *small_name){
Enriched_Text *home = fm_push_array(Enriched_Text, 1);
*home = load_enriched_text(doc_system->src_dir, source_text);
generate_page(Partition *arena, Document_System *doc_system, char *source_text, char *big_title, char *small_name){
Enriched_Text *home = push_array(arena, Enriched_Text, 1);
*home = load_enriched_text(arena, doc_system->src_dir, source_text);
Abstract_Item *doc = make_document_from_text(doc_system, big_title, small_name, home);
Abstract_Item *doc = make_document_from_text(arena, doc_system, big_title, small_name, home);
if (doc == 0){
fprintf(stdout, "warning: could not create document %s from file %s\n", small_name, source_text);
}
@ -249,13 +253,13 @@ generate_page(Document_System *doc_system, char *source_text, char *big_title, c
}
internal void
do_image_resize(char *src_file, char *dst_file, char *extension, i32 w, i32 h){
Temp temp = fm_begin_temp();
do_image_resize(Partition *arena, char *src_file, char *dst_file, char *extension, i32 w, i32 h){
Temp_Memory temp = begin_temp_memory(arena);
i32 x = 0, y = 0, channels = 0;
stbi_uc *image = stbi_load(src_file, &x, &y, &channels, 0);
if (image != 0){
stbi_uc *resized_image = fm_push_array(stbi_uc, w*h*channels);
stbi_uc *resized_image = push_array(arena, stbi_uc, w*h*channels);
stbir_resize_uint8(image, x, y, x*channels, resized_image, w, h, w*channels, channels);
if (match_cc(extension, "png")){
stbi_write_png(dst_file, w, h, channels, resized_image, w*channels);
@ -263,39 +267,39 @@ do_image_resize(char *src_file, char *dst_file, char *extension, i32 w, i32 h){
free(image);
}
fm_end_temp(temp);
end_temp_memory(temp);
}
internal void
generate_site(char *code_directory, char *asset_directory, char *src_directory, char *dst_directory){
generate_site(Partition *arena, char *code_directory, char *asset_directory, char *src_directory, char *dst_directory){
fm_clear_folder(dst_directory);
Document_System doc_system = create_document_system(code_directory, asset_directory, src_directory);
Document_System *docs = &doc_system;
// TODO(allen): Declare these in the source files.
add_image_description(docs, "4coder_logo_low_green.png", "png", "4coder_logo" );
add_image_description(docs, "screen_1.png", "png", "screen_1" );
add_image_description(docs, "screen_2.png", "png", "screen_2" );
add_image_description(docs, "screen_3.png", "png", "screen_3" );
add_generic_file (docs, "4coder_icon.ico", "ico", "4coder_icon" );
add_image_description(arena, docs, "4coder_logo_low_green.png", "png", "4coder_logo" );
add_image_description(arena, docs, "screen_1.png", "png", "screen_1" );
add_image_description(arena, docs, "screen_2.png", "png", "screen_2" );
add_image_description(arena, docs, "screen_3.png", "png", "screen_3" );
add_generic_file (arena, docs, "4coder_icon.ico", "ico", "4coder_icon" );
// TODO(allen): From the text file get "Big Title" and "smallname".
generate_page(docs, "docs.txt" , "4coder API Docs" , "custom_docs" );
generate_page(docs, "home.txt" , "4coder Home" , "home" );
generate_page(docs, "feature_list.txt", "4coder Feature List", "features" );
generate_page(docs, "binding_list.txt", "4coder Binding List", "bindings" );
generate_page(docs, "roadmap.txt" , "4coder Roadmap" , "roadmap" );
generate_page(docs, "tutorials.txt" , "4coder Tutorials" , "tutorials" );
generate_page(arena, docs, "docs.txt" , "4coder API Docs" , "custom_docs" );
generate_page(arena, docs, "home.txt" , "4coder Home" , "home" );
generate_page(arena, docs, "feature_list.txt", "4coder Feature List", "features" );
generate_page(arena, docs, "binding_list.txt", "4coder Binding List", "bindings" );
generate_page(arena, docs, "roadmap.txt" , "4coder Roadmap" , "roadmap" );
generate_page(arena, docs, "tutorials.txt" , "4coder Tutorials" , "tutorials" );
// NOTE(allen): Create a list of the primary documents to generate.
Abstract_Item_Array original_documents = get_abstract_item_array(&doc_system.doc_list);
Abstract_Item_Array original_documents = get_abstract_item_array(arena, &doc_system.doc_list);
// NOTE(allen): Cross link all the includes and pull in any non-primary documents.
resolve_all_includes(&doc_system);
resolve_all_includes(arena, &doc_system);
// NOTE(allen): Generate the html from the primary documents and publish them.
String out = make_string_cap(fm__push(10 << 20), 0, 10 << 20);
String out = make_string_cap(push_array(arena, char, 10 << 20), 0, 10 << 20);
Assert(out.str != 0);
Abstract_Item **doc_ptr = original_documents.items;
@ -305,9 +309,9 @@ generate_site(char *code_directory, char *asset_directory, char *src_directory,
char doc_link[256];
if (doc_get_link_string(doc, doc_link, sizeof(doc_link))){
generate_document_html(&out, &doc_system, doc);
generate_document_html(arena, &out, &doc_system, doc);
char *name = fm_str(dst_directory, "/", doc_link);
char *name = fm_str(arena, dst_directory, "/", doc_link);
fm_write_file(name, out.str, out.size);
out.size = 0;
}
@ -319,8 +323,8 @@ generate_site(char *code_directory, char *asset_directory, char *src_directory,
node = node->next){
Abstract_Item *file = NodeGetData(node, Abstract_Item);
Assert(file->item_type == ItemType_GenericFile);
char *file_name = fm_str(file->name, ".", file->extension);
fm_copy_file(fm_str(file_name), fm_str(dst_directory, "/", file_name));
char *file_name = fm_str(arena, file->name, ".", file->extension);
fm_copy_file(fm_str(arena, file_name), fm_str(arena, dst_directory, "/", file_name));
}
// NOTE(allen): Publish images
@ -337,8 +341,8 @@ generate_site(char *code_directory, char *asset_directory, char *src_directory,
char img_link[256];
if (img_get_link_string(img, img_link, sizeof(img_link), inst->w, inst->h)){
char *dest_file = fm_str(dst_directory, "/", img_link);
do_image_resize(img->source_file, dest_file, img->extension, inst->w, inst->h);
char *dest_file = fm_str(arena, dst_directory, "/", img_link);
do_image_resize(arena, img->source_file, dest_file, img->extension, inst->w, inst->h);
}
}
}
@ -348,14 +352,14 @@ int main(int argc, char **argv){
META_BEGIN();
if (argc == 5){
fm_init_system();
Partition arena = fm_init_system();
char *code_directory = argv[1];
char *asset_directory = argv[2];
char *src_directory = argv[3];
char *dst_directory = argv[4];
generate_binding_list(code_directory, src_directory);
generate_site(code_directory, asset_directory, src_directory, dst_directory);
generate_site(&arena, code_directory, asset_directory, src_directory, dst_directory);
}
META_FINISH();

View File

@ -22,15 +22,16 @@ The following bindings apply in all situations.
\ITEM \STYLE{code} <ctrl S> \END Saves all buffers marked dirty (showing the '*' indicator).
\ITEM \STYLE{code} <alt .> \END If the special build panel is open, makes the build panel the active panel.
\ITEM \STYLE{code} <alt ,> \END If the special build panel is open, closes it.
\ITEM \STYLE{code} <alt n> \END If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, and does not skip sub jump locations.
\ITEM \STYLE{code} <alt N> \END If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, and does not skip sub jump locations.
\ITEM \STYLE{code} <alt n> \END If a buffer containing jump locations has been locked in, goes to the next jump in the buffer, skipping sub jump locations.
\ITEM \STYLE{code} <alt N> \END If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, skipping sub jump locations.
\ITEM \STYLE{code} <alt M> \END If a buffer containing jump locations has been locked in, goes to the first jump in the buffer.
\ITEM \STYLE{code} <alt m> \END Looks for a build.bat, build.sh, or makefile in the current and parent directories. Runs the first that it finds and prints the output to *compilation*. Puts the *compilation* buffer in a panel at the footer of the current view.
\ITEM \STYLE{code} <alt b> \END Toggles the visibility status of the current view's filebar.
\ITEM \STYLE{code} <alt z> \END Queries for an output buffer name and system command, runs the system command as a CLI and prints the output to the specified buffer.
\ITEM \STYLE{code} <alt Z> \END If the command execute_any_cli has already been used, this will execute a CLI reusing the most recent buffer name and command.
\ITEM \STYLE{code} <alt x> \END Opens an interactive list of all registered commands.
\ITEM \STYLE{code} <ctrl I> \END Creates a lister of locations that look like function definitions and declarations in the buffer.
\ITEM \STYLE{code} <alt X> \END Open a lister of all commands in the currently loaded project.
\ITEM \STYLE{code} <ctrl I> \END Creates a lister of locations that look like function definitions and declarations all buffers.
\ITEM \STYLE{code} <alt E> \END Attempts to close 4coder.
\ITEM \STYLE{code} <f1> \END Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.
\ITEM \STYLE{code} <f2> \END Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.
@ -49,6 +50,7 @@ The following bindings apply in all situations.
\ITEM \STYLE{code} <f15> \END Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.
\ITEM \STYLE{code} <f16> \END Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.
\ITEM \STYLE{code} <mouse wheel> \END Reads the scroll wheel value from the mouse state and scrolls accordingly.
\ITEM \STYLE{code} <ctrl mouse wheel> \END Reads the state of the mouse wheel and uses it to either increase or decrease the face size.
\END
\END
\SECTION{mapid-file}
@ -56,6 +58,7 @@ The following bindings apply in general text files and most apply in code files,
\LIST
\ITEM \STYLE{code} <any character> \END Inserts whatever character was used to trigger this command.
\ITEM \STYLE{code} <left click> \END Sets the cursor position and mark to the mouse position.
\ITEM \STYLE{code} <click_activate_view> \END Sets the cursor position and mark to the mouse position.
\ITEM \STYLE{code} <left release> \END Sets the cursor position to the mouse position.
\ITEM \STYLE{code} <mouse move> \END If the mouse left button is pressed, sets the cursor position to the mouse position.
\ITEM \STYLE{code} <delete> \END Deletes the character to the right of the cursor.
@ -84,12 +87,12 @@ The following bindings apply in general text files and most apply in code files,
\ITEM \STYLE{code} <shift page down> \END Scrolls the view down one view height and moves the cursor down one view height.
\ITEM \STYLE{code} <ctrl up> \END Seeks the cursor up to the next blank line and places it at the end of the line.
\ITEM \STYLE{code} <ctrl down> \END Seeks the cursor down to the next blank line and places it at the end of the line.
\ITEM \STYLE{code} <ctrl right> \END Seek right for the next boundary between whitespace and non-whitespace.
\ITEM \STYLE{code} <ctrl left> \END Seek left for the next boundary between whitespace and non-whitespace.
\ITEM \STYLE{code} <ctrl right> \END Seek right for the next boundary between whitespace and non-whitespace.
\ITEM \STYLE{code} <ctrlshift up> \END Seeks the cursor up to the next blank line and places it at the end of the line.
\ITEM \STYLE{code} <ctrlshift down> \END Seeks the cursor down to the next blank line and places it at the end of the line.
\ITEM \STYLE{code} <ctrlshift right> \END Seek right for the next boundary between whitespace and non-whitespace.
\ITEM \STYLE{code} <ctrlshift left> \END Seek left for the next boundary between whitespace and non-whitespace.
\ITEM \STYLE{code} <ctrlshift right> \END Seek right for the next boundary between whitespace and non-whitespace.
\ITEM \STYLE{code} <alt up> \END Swaps the line under the cursor with the line above it, and moves the cursor up with it.
\ITEM \STYLE{code} <alt down> \END Swaps the line under the cursor with the line below it, and moves the cursor down with it.
\ITEM \STYLE{code} <ctrl backspace> \END Delete characters between the cursor position and the first alphanumeric boundary to the left.
@ -136,8 +139,8 @@ The following bindings apply in general text files and most apply in code files,
\SECTION{default-code-map}
The following commands only apply in files where the lexer (syntax highlighting) is turned on.
\LIST
\ITEM \STYLE{code} <ctrl right> \END Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.
\ITEM \STYLE{code} <ctrl left> \END Seek left for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.
\ITEM \STYLE{code} <ctrl right> \END Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.
\ITEM \STYLE{code} <return> \END Inserts a character and auto-indents the line on which the cursor sits.
\ITEM \STYLE{code} <shift return> \END Inserts a character and auto-indents the line on which the cursor sits.
\ITEM \STYLE{code} <}> \END Inserts a character and auto-indents the line on which the cursor sits.
@ -145,10 +148,10 @@ The following commands only apply in files where the lexer (syntax highlighting)
\ITEM \STYLE{code} <]> \END Inserts a character and auto-indents the line on which the cursor sits.
\ITEM \STYLE{code} <;> \END Inserts a character and auto-indents the line on which the cursor sits.
\ITEM \STYLE{code} <#> \END Inserts a character and auto-indents the line on which the cursor sits.
\ITEM \STYLE{code} <ctrl ;> \END Turns uncommented lines into commented lines and vice versa for comments starting with '//'.
\ITEM \STYLE{code} <tab> \END Iteratively tries completing the word to the left of the cursor with other words in open buffers that have the same prefix string.
\ITEM \STYLE{code} <ctrl tab> \END Auto-indents the range between the cursor and the mark.
\ITEM \STYLE{code} <shift tab> \END Auto-indents the line on which the cursor sits.
\ITEM \STYLE{code} <alt h> \END At the cursor, insert a '// HACK' comment, includes user name if it was specified in config.4coder.
\ITEM \STYLE{code} <alt r> \END At the cursor, insert a block comment.
\ITEM \STYLE{code} <alt t> \END At the cursor, insert a '// TODO' comment, includes user name if it was specified in config.4coder.
\ITEM \STYLE{code} <alt y> \END At the cursor, insert a '// NOTE' comment, includes user name if it was specified in config.4coder.
@ -178,8 +181,10 @@ These commands apply in 'lister mode' such as when you open a file.
\ITEM \STYLE{code} <tab> \END A lister mode command that activates the list's action on the highlighted item.
\ITEM \STYLE{code} <backspace> \END A lister mode command that dispatches to the lister's backspace text field handler.
\ITEM \STYLE{code} <up> \END A lister mode command that dispatches to the lister's navigate up handler.
\ITEM \STYLE{code} <alt k> \END A lister mode command that dispatches to the lister's navigate up handler.
\ITEM \STYLE{code} <page up> \END A lister mode command that dispatches to the lister's navigate up handler.
\ITEM \STYLE{code} <down> \END A lister mode command that dispatches to the lister's navigate down handler.
\ITEM \STYLE{code} <alt j> \END A lister mode command that dispatches to the lister's navigate down handler.
\ITEM \STYLE{code} <page down> \END A lister mode command that dispatches to the lister's navigate down handler.
\ITEM \STYLE{code} <mouse wheel> \END A lister mode command that scrolls the list in response to the mouse wheel.
\ITEM \STYLE{code} <left click> \END A lister mode command that beings a click interaction with a list item under the mouse.
@ -212,7 +217,8 @@ The following bindings apply in all situations.
\ITEM \STYLE{code} <ctrl z> \END Queries for an output buffer name and system command, runs the system command as a CLI and prints the output to the specified buffer.
\ITEM \STYLE{code} <ctrl Z> \END If the command execute_any_cli has already been used, this will execute a CLI reusing the most recent buffer name and command.
\ITEM \STYLE{code} <ctrl x> \END Opens an interactive list of all registered commands.
\ITEM \STYLE{code} <cmnd I> \END Creates a lister of locations that look like function definitions and declarations in the buffer.
\ITEM \STYLE{code} <ctrl X> \END Open a lister of all commands in the currently loaded project.
\ITEM \STYLE{code} <cmnd I> \END Creates a lister of locations that look like function definitions and declarations all buffers.
\ITEM \STYLE{code} <ctrl E> \END Attempts to close 4coder.
\ITEM \STYLE{code} <f1> \END Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.
\ITEM \STYLE{code} <f2> \END Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.
@ -231,6 +237,7 @@ The following bindings apply in all situations.
\ITEM \STYLE{code} <f15> \END Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.
\ITEM \STYLE{code} <f16> \END Run an 'fkey command' configured in a project.4coder file. Determines the index of the 'fkey command' by which function key or numeric key was pressed to trigger the command.
\ITEM \STYLE{code} <mouse wheel> \END Reads the scroll wheel value from the mouse state and scrolls accordingly.
\ITEM \STYLE{code} <cmnd mouse wheel> \END Reads the state of the mouse wheel and uses it to either increase or decrease the face size.
\END
\END
\SECTION{mapid-file}
@ -239,6 +246,7 @@ The following bindings apply in general text files and most apply in code files,
\ITEM \STYLE{code} <any character> \END Inserts whatever character was used to trigger this command.
\ITEM \STYLE{code} <alt any character> \END Inserts whatever character was used to trigger this command.
\ITEM \STYLE{code} <left click> \END Sets the cursor position and mark to the mouse position.
\ITEM \STYLE{code} <click_activate_view> \END Sets the cursor position and mark to the mouse position.
\ITEM \STYLE{code} <left release> \END Sets the cursor position to the mouse position.
\ITEM \STYLE{code} <mouse move> \END If the mouse left button is pressed, sets the cursor position to the mouse position.
\ITEM \STYLE{code} <delete> \END Deletes the character to the right of the cursor.
@ -267,12 +275,12 @@ The following bindings apply in general text files and most apply in code files,
\ITEM \STYLE{code} <shift page down> \END Scrolls the view down one view height and moves the cursor down one view height.
\ITEM \STYLE{code} <cmnd up> \END Seeks the cursor up to the next blank line and places it at the end of the line.
\ITEM \STYLE{code} <cmnd down> \END Seeks the cursor down to the next blank line and places it at the end of the line.
\ITEM \STYLE{code} <cmnd right> \END Seek right for the next boundary between whitespace and non-whitespace.
\ITEM \STYLE{code} <cmnd left> \END Seek left for the next boundary between whitespace and non-whitespace.
\ITEM \STYLE{code} <cmnd right> \END Seek right for the next boundary between whitespace and non-whitespace.
\ITEM \STYLE{code} <cmndshift up> \END Seeks the cursor up to the next blank line and places it at the end of the line.
\ITEM \STYLE{code} <cmndshift down> \END Seeks the cursor down to the next blank line and places it at the end of the line.
\ITEM \STYLE{code} <cmndshift right> \END Seek right for the next boundary between whitespace and non-whitespace.
\ITEM \STYLE{code} <cmndshift left> \END Seek left for the next boundary between whitespace and non-whitespace.
\ITEM \STYLE{code} <cmndshift right> \END Seek right for the next boundary between whitespace and non-whitespace.
\ITEM \STYLE{code} <alt up> \END Swaps the line under the cursor with the line above it, and moves the cursor up with it.
\ITEM \STYLE{code} <alt down> \END Swaps the line under the cursor with the line below it, and moves the cursor down with it.
\ITEM \STYLE{code} <cmnd backspace> \END Delete characters between the cursor position and the first alphanumeric boundary to the left.
@ -317,8 +325,8 @@ The following bindings apply in general text files and most apply in code files,
\SECTION{default-code-map}
The following commands only apply in files where the lexer (syntax highlighting) is turned on.
\LIST
\ITEM \STYLE{code} <cmnd right> \END Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.
\ITEM \STYLE{code} <cmnd left> \END Seek left for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.
\ITEM \STYLE{code} <cmnd right> \END Seek right for boundary between alphanumeric characters or camel case word and non-alphanumeric characters.
\ITEM \STYLE{code} <return> \END Inserts a character and auto-indents the line on which the cursor sits.
\ITEM \STYLE{code} <shift return> \END Inserts a character and auto-indents the line on which the cursor sits.
\ITEM \STYLE{code} <}> \END Inserts a character and auto-indents the line on which the cursor sits.
@ -326,10 +334,10 @@ The following commands only apply in files where the lexer (syntax highlighting)
\ITEM \STYLE{code} <]> \END Inserts a character and auto-indents the line on which the cursor sits.
\ITEM \STYLE{code} <;> \END Inserts a character and auto-indents the line on which the cursor sits.
\ITEM \STYLE{code} <#> \END Inserts a character and auto-indents the line on which the cursor sits.
\ITEM \STYLE{code} <ctrl ;> \END Turns uncommented lines into commented lines and vice versa for comments starting with '//'.
\ITEM \STYLE{code} <tab> \END Iteratively tries completing the word to the left of the cursor with other words in open buffers that have the same prefix string.
\ITEM \STYLE{code} <cmnd tab> \END Auto-indents the range between the cursor and the mark.
\ITEM \STYLE{code} <shift tab> \END Auto-indents the line on which the cursor sits.
\ITEM \STYLE{code} <ctrl h> \END At the cursor, insert a '// HACK' comment, includes user name if it was specified in config.4coder.
\ITEM \STYLE{code} <ctrl r> \END At the cursor, insert a block comment.
\ITEM \STYLE{code} <ctrl t> \END At the cursor, insert a '// TODO' comment, includes user name if it was specified in config.4coder.
\ITEM \STYLE{code} <ctrl y> \END At the cursor, insert a '// NOTE' comment, includes user name if it was specified in config.4coder.