4coder/custom/4coder_config.h

298 lines
7.3 KiB
C
Raw Normal View History

2018-05-12 00:53:02 +00:00
/*
4coder_config.h - Configuration structs.
*/
// TOP
#if !defined(FCODER_CONFIG_H)
#define FCODER_CONFIG_H
#include <stdio.h>
2020-11-25 00:26:11 +00:00
////////////////////////////////
// NOTE(allen): Config Parser Types
struct Error_Location{
i32 line_number;
i32 column_number;
};
struct Config_Error{
Config_Error *next;
Config_Error *prev;
2019-06-01 23:58:28 +00:00
String_Const_u8 file_name;
u8 *pos;
String_Const_u8 text;
};
struct Config_Error_List{
Config_Error *first;
Config_Error *last;
i32 count;
};
2018-05-12 00:53:02 +00:00
struct Config_Parser{
2019-09-04 05:31:35 +00:00
Token *token;
2020-11-25 00:26:11 +00:00
Token *opl;
2018-05-12 00:53:02 +00:00
2019-06-01 23:58:28 +00:00
String_Const_u8 file_name;
String_Const_u8 data;
2018-05-12 00:53:02 +00:00
2019-06-01 23:58:28 +00:00
Arena *arena;
Config_Error_List errors;
};
2018-05-12 00:53:02 +00:00
struct Config_LValue{
2019-06-01 23:58:28 +00:00
String_Const_u8 identifier;
i32 index;
2018-05-12 00:53:02 +00:00
};
typedef i32 Config_RValue_Type;
2018-05-12 00:53:02 +00:00
enum{
ConfigRValueType_LValue = 0,
ConfigRValueType_Boolean = 1,
ConfigRValueType_Integer = 2,
ConfigRValueType_String = 4,
ConfigRValueType_Compound = 6,
ConfigRValueType_NoType = 7,
};
enum{
ConfigRValueType_COUNT = ConfigRValueType_NoType,
2018-05-12 00:53:02 +00:00
};
struct Config_Compound{
struct Config_Compound_Element *first;
struct Config_Compound_Element *last;
i32 count;
2018-05-12 00:53:02 +00:00
};
struct Config_RValue{
Config_RValue_Type type;
union{
Config_LValue *lvalue;
b32 boolean;
i32 integer;
u32 uinteger;
2019-06-01 23:58:28 +00:00
String_Const_u8 string;
2018-05-12 00:53:02 +00:00
char character;
Config_Compound *compound;
};
};
struct Config_Integer{
b32 is_signed;
union{
i32 integer;
u32 uinteger;
};
};
typedef i32 Config_Layout_Type;
2018-05-12 00:53:02 +00:00
enum{
ConfigLayoutType_Unset = 0,
ConfigLayoutType_Identifier = 1,
ConfigLayoutType_Integer = 2,
ConfigLayoutType_COUNT = 3,
};
struct Config_Layout{
Config_Layout_Type type;
2019-06-01 23:58:28 +00:00
u8 *pos;
2018-05-12 00:53:02 +00:00
union{
2019-06-01 23:58:28 +00:00
String_Const_u8 identifier;
i32 integer;
2018-05-12 00:53:02 +00:00
};
};
struct Config_Compound_Element{
Config_Compound_Element *next;
Config_Compound_Element *prev;
Config_Layout l;
Config_RValue *r;
};
struct Config_Assignment{
Config_Assignment *next;
Config_Assignment *prev;
2019-06-01 23:58:28 +00:00
u8 *pos;
2018-05-12 00:53:02 +00:00
Config_LValue *l;
Config_RValue *r;
b32 visited;
2018-05-12 00:53:02 +00:00
};
struct Config{
i32 *version;
2018-05-12 00:53:02 +00:00
Config_Assignment *first;
Config_Assignment *last;
i32 count;
Config_Error_List errors;
2019-06-01 23:58:28 +00:00
String_Const_u8 file_name;
String_Const_u8 data;
2018-05-12 00:53:02 +00:00
};
////////////////////////////////
2020-11-25 00:26:11 +00:00
// NOTE(allen): Config Iteration
2018-05-12 00:53:02 +00:00
typedef i32 Iteration_Step_Result;
enum{
Iteration_Good = 0,
Iteration_Skip = 1,
Iteration_Quit = 2,
};
struct Config_Get_Result{
b32 success;
Config_RValue_Type type;
2019-06-01 23:58:28 +00:00
u8 *pos;
union{
b32 boolean;
i32 integer;
u32 uinteger;
2019-06-01 23:58:28 +00:00
String_Const_u8 string;
char character;
Config_Compound *compound;
};
};
struct Config_Iteration_Step_Result{
Iteration_Step_Result step;
Config_Get_Result get;
};
struct Config_Get_Result_Node{
Config_Get_Result_Node *next;
Config_Get_Result_Node *prev;
Config_Get_Result result;
};
struct Config_Get_Result_List{
Config_Get_Result_Node *first;
Config_Get_Result_Node *last;
i32 count;
};
////////////////////////////////
2020-11-25 00:26:11 +00:00
// NOTE(allen): Config Data Type
2018-05-12 00:53:02 +00:00
struct Config_Data{
2019-06-01 23:58:28 +00:00
u8 user_name_space[256];
String_Const_u8 user_name;
2018-05-28 01:00:13 +00:00
2019-06-01 23:58:28 +00:00
String_Const_u8_Array code_exts;
2018-05-28 01:00:13 +00:00
u8 mapping_space[64];
String_Const_u8 mapping;
2019-06-01 23:58:28 +00:00
u8 mode_space[64];
String_Const_u8 mode;
2018-09-30 12:14:47 +00:00
b8 bind_by_physical_key;
2019-10-11 21:24:03 +00:00
b8 use_scroll_bars;
b8 use_file_bars;
b8 hide_file_bar_in_ui;
b8 use_error_highlight;
b8 use_jump_highlight;
2019-10-11 21:24:03 +00:00
b8 use_scope_highlight;
b8 use_paren_helper;
b8 use_comment_keyword;
b8 lister_whole_word_backspace_when_modified;
b8 show_line_number_margins;
2020-05-01 21:04:57 +00:00
b8 enable_output_wrapping;
2020-05-02 03:59:36 +00:00
b8 indent_with_tabs;
2020-05-08 14:23:45 +00:00
b8 enable_undo_fade_out;
2019-10-11 21:24:03 +00:00
b8 enable_virtual_whitespace;
b8 enable_code_wrapping;
b8 automatically_indent_text_on_save;
b8 automatically_save_changes_on_build;
b8 automatically_load_project;
f32 cursor_roundness;
f32 mark_thickness;
f32 lister_roundness;
2020-02-08 00:50:35 +00:00
i32 virtual_whitespace_regular_indent;
i32 indent_width;
2020-05-02 03:59:36 +00:00
i32 default_tab_width;
2019-06-01 23:58:28 +00:00
u8 default_theme_name_space[256];
String_Const_u8 default_theme_name;
2018-05-12 00:53:02 +00:00
2019-10-11 21:24:03 +00:00
b8 highlight_line_at_cursor;
2018-09-25 08:41:49 +00:00
2019-06-01 23:58:28 +00:00
u8 default_font_name_space[256];
String_Const_u8 default_font_name;
i32 default_font_size;
2019-10-11 21:24:03 +00:00
b8 default_font_hinting;
2018-05-12 00:53:02 +00:00
2019-06-01 23:58:28 +00:00
u8 default_compiler_bat_space[256];
String_Const_u8 default_compiler_bat;
2018-05-12 00:53:02 +00:00
2019-06-01 23:58:28 +00:00
u8 default_flags_bat_space[1024];
String_Const_u8 default_flags_bat;
2018-05-12 00:53:02 +00:00
2019-06-01 23:58:28 +00:00
u8 default_compiler_sh_space[256];
String_Const_u8 default_compiler_sh;
2018-05-12 00:53:02 +00:00
2019-06-01 23:58:28 +00:00
u8 default_flags_sh_space[1024];
String_Const_u8 default_flags_sh;
2018-05-12 00:53:02 +00:00
2019-10-11 21:24:03 +00:00
b8 lalt_lctrl_is_altgr;
};
2018-05-12 00:53:02 +00:00
2020-11-25 00:26:11 +00:00
////////////////////////////////
// NOTE(allen): Config Parser Functions
function Config_Parser def_config_parser_init(Arena *arena, String_Const_u8 file_name, String_Const_u8 data, Token_Array array);
function void def_config_parser_inc(Config_Parser *ctx);
function u8* def_config_parser_get_pos(Config_Parser *ctx);
function b32 def_config_parser_recognize_base_kind(Config_Parser *ctx, Token_Base_Kind kind);
function b32 def_config_parser_recognize_cpp_kind(Config_Parser *ctx, Token_Cpp_Kind kind);
function b32 def_config_parser_recognize_boolean(Config_Parser *ctx);
function b32 def_config_parser_recognize_text(Config_Parser *ctx, String_Const_u8 text);
function b32 def_config_parser_match_cpp_kind(Config_Parser *ctx, Token_Cpp_Kind kind);
function b32 def_config_parser_match_text(Config_Parser *ctx, String_Const_u8 text);
function String_Const_u8 def_config_parser_get_lexeme(Config_Parser *ctx);
function Config_Integer def_config_parser_get_int(Config_Parser *ctx);
function b32 def_config_parser_get_boolean(Config_Parser *ctx);
function void def_config_parser_recover(Config_Parser *ctx);
2020-11-25 00:26:11 +00:00
function Config* def_config_parser_config (Config_Parser *ctx);
function i32* def_config_parser_version (Config_Parser *ctx);
function Config_Assignment* def_config_parser_assignment(Config_Parser *ctx);
function Config_LValue* def_config_parser_lvalue (Config_Parser *ctx);
function Config_RValue* def_config_parser_rvalue (Config_Parser *ctx);
function Config_Compound* def_config_parser_compound (Config_Parser *ctx);
function Config_Compound_Element* def_config_parser_element (Config_Parser *ctx);
function Config* def_config_parse(Application_Links *app, Arena *arena, String_Const_u8 file_name, String_Const_u8 data, Token_Array array);
function Config_Error* def_config_push_error(Arena *arena, Config_Error_List *list, String_Const_u8 file_name, u8 *pos, char *error_text);
function Config_Error* def_config_push_error(Arena *arena, Config *config, u8 *pos, char *error_text);
2020-11-25 00:26:11 +00:00
function void def_config_parser_push_error(Config_Parser *ctx, u8 *pos, char *error_text);
function void def_config_parser_push_error_here(Config_Parser *ctx, char *error_text);
function void def_config_parser_recover(Config_Parser *ctx);
////////////////////////////////
// NOTE(allen): Dump Config to Variables
function Variable_Handle def_var_from_config(Application_Links *app, Variable_Handle parent, String_Const_u8 key, Config *config);
2018-05-12 00:53:02 +00:00
#endif
// BOTTOM