text editor target, refactor build_file.c
This commit is contained in:
13
src/text_editor/text_editor.gen.c
Normal file
13
src/text_editor/text_editor.gen.c
Normal file
@@ -0,0 +1,13 @@
|
||||
// automatically generated using: C:\dev\wasm\src/text_editor/text_editor.meta.c
|
||||
gb f32 font_size = 30;
|
||||
gb f32 _font_size = 30;
|
||||
gb_read_only mt_tweak_t tweak_table[] = {
|
||||
{type(f32), s8_const_lit("font_size"), &font_size, 4, 200},
|
||||
{type(f32), s8_const_lit("_font_size"), &_font_size, 30, 30},
|
||||
|
||||
};
|
||||
void run_all_tests(void) {
|
||||
test_hash_table();
|
||||
test_intern_table();
|
||||
ui_test_text_replace();
|
||||
}// run_all_tests()
|
||||
122
src/text_editor/text_editor.meta.c
Normal file
122
src/text_editor/text_editor.meta.c
Normal file
@@ -0,0 +1,122 @@
|
||||
void generate_text_editor_code(ma_arena_t *arena) {
|
||||
sb8_t *include_paths = sb8(arena);
|
||||
sb8_append(include_paths, OS_GetAbsolutePath(&Perm, s8_lit("../src")));
|
||||
mt_files_t files = mt_lex_files(arena, s8_lit("../src/text_editor/text_editor_main.c"), include_paths);
|
||||
|
||||
typedef struct cg_tweak_t cg_tweak_t;
|
||||
struct cg_tweak_t {
|
||||
cg_tweak_t *next;
|
||||
type_t *type;
|
||||
s8_t name;
|
||||
s8_t value;
|
||||
s8_t min, max;
|
||||
};
|
||||
|
||||
cg_tweak_t *first_tweak = NULL;
|
||||
cg_tweak_t *last_tweak = NULL;
|
||||
|
||||
sb8_t *tests = sb8_serial_begin(arena);
|
||||
|
||||
sb8_t *sb_embeds = sb8_serial_begin(arena);
|
||||
sb8_printf(sb_embeds, "// automatically generated using: " __FILE__ "\n");
|
||||
for (mt_file_t *it = files.first; it; it = it->next) {
|
||||
parser_t *par = parser_make(arena, it->tokens.data);
|
||||
for (;par->at->kind != lex_kind_eof;) {
|
||||
b32 matched = false;
|
||||
|
||||
if (par->at->inside_macro == false && parser_matchi(par, s8_lit("fn_test"))) {
|
||||
parser_expecti(par, s8_lit("void"));
|
||||
lex_t *ident = parser_match(par, lex_kind_ident);
|
||||
sb8_append(tests, ident->string);
|
||||
matched = true;
|
||||
}
|
||||
|
||||
if (par->at->inside_macro == false && parser_matchi(par, s8_lit("mt_embed_file"))) {
|
||||
parser_expect(par, lex_kind_open_paren);
|
||||
lex_t *var_name = parser_expect(par, lex_kind_ident);
|
||||
parser_expect(par, lex_kind_comma);
|
||||
lex_t *path = parser_expect(par, lex_kind_string);
|
||||
parser_expect(par, lex_kind_close_paren);
|
||||
s8_t relpath = s8_printf(arena, "../%S", path->string);
|
||||
s8_t content = OS_ReadFile(&Perm, relpath);
|
||||
|
||||
sb8_printf(sb_embeds, "gb_read_only ");
|
||||
mt_serial_to_cbyte_array_ex(sb_embeds, content, s8_printf(arena, "%S_data", var_name->string));
|
||||
sb8_printf(sb_embeds, "gb_read_only s8_t %S = s8_array_lit(%S_data);\n", var_name->string, var_name->string);
|
||||
matched = true;
|
||||
}
|
||||
|
||||
if (par->at->inside_macro == false && parser_matchi(par, s8_lit("mt_tweak_b32"))) {
|
||||
cg_tweak_t *tweak = ma_push_type(arena, cg_tweak_t);
|
||||
tweak->type = type(b32);
|
||||
tweak->min = tweak->max = s8_lit("0");
|
||||
parser_expect(par, lex_kind_open_paren);
|
||||
tweak->name = parser_expect(par, lex_kind_ident)->string;
|
||||
parser_expect(par, lex_kind_comma);
|
||||
tweak->value = parser_next(par)->string;
|
||||
parser_expect(par, lex_kind_close_paren);
|
||||
SLLQ_APPEND(first_tweak, last_tweak, tweak);
|
||||
matched = true;
|
||||
}
|
||||
|
||||
if (par->at->inside_macro == false && parser_matchi(par, s8_lit("mt_tweak_f32"))) {
|
||||
cg_tweak_t *tweak = ma_push_type(arena, cg_tweak_t);
|
||||
tweak->type = type(f32);
|
||||
parser_expect(par, lex_kind_open_paren);
|
||||
tweak->name = parser_expect(par, lex_kind_ident)->string;
|
||||
parser_expect(par, lex_kind_comma);
|
||||
tweak->value = parser_next(par)->string;
|
||||
parser_expect(par, lex_kind_comma);
|
||||
tweak->min = parser_next(par)->string;
|
||||
parser_expect(par, lex_kind_comma);
|
||||
tweak->max = parser_next(par)->string;
|
||||
parser_expect(par, lex_kind_close_paren);
|
||||
SLLQ_APPEND(first_tweak, last_tweak, tweak);
|
||||
matched = true;
|
||||
}
|
||||
|
||||
if (par->at->inside_macro == false && parser_matchi(par, s8_lit("mt_tweak_color"))) {
|
||||
cg_tweak_t *tweak = ma_push_type(arena, cg_tweak_t);
|
||||
tweak->type = type(v4f32_t);
|
||||
tweak->min = s8_lit("0.0f");
|
||||
tweak->max = s8_lit("1.0f");
|
||||
parser_expect(par, lex_kind_open_paren);
|
||||
tweak->name = parser_expect(par, lex_kind_ident)->string;
|
||||
parser_expect(par, lex_kind_comma);
|
||||
tweak->value = parser_next(par)->string;
|
||||
while (par->at->kind != lex_kind_close_paren && par->at->kind != lex_kind_eof) parser_next(par);
|
||||
lex_t *end = parser_expect(par, lex_kind_close_paren);
|
||||
tweak->value.len = (i64)(end->str - tweak->value.str);
|
||||
SLLQ_APPEND(first_tweak, last_tweak, tweak);
|
||||
matched = true;
|
||||
}
|
||||
|
||||
if (!matched) {
|
||||
parser_next(par);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (first_tweak != NULL) {
|
||||
for (cg_tweak_t *it = first_tweak; it; it = it->next) {
|
||||
sb8_printf(sb_embeds, "gb %S %S = %S;\n", it->type->name, it->name, it->value);
|
||||
}
|
||||
sb8_printf(sb_embeds, "gb_read_only mt_tweak_t tweak_table[] = {\n");
|
||||
for (cg_tweak_t *it = first_tweak; it; it = it->next) {
|
||||
sb8_printf(sb_embeds, " {type(%S), s8_const_lit(\"%S\"), &%S, %S, %S},\n", it->type->name, it->name, it->name, it->min, it->max);
|
||||
}
|
||||
sb8_printf(sb_embeds, "\n};\n");
|
||||
}
|
||||
|
||||
sb8_printf(sb_embeds, "void run_all_tests(void) {\n");
|
||||
for (sb8_node_t *it = tests->first; it; it = it->next) {
|
||||
sb8_printf(sb_embeds, " %S();\n", it->string);
|
||||
}
|
||||
sb8_printf(sb_embeds, "}// run_all_tests()\n");
|
||||
|
||||
|
||||
s8_t embeds = sb8_serial_end(arena, sb_embeds);
|
||||
os_write_file(mt_cpath(arena), embeds);
|
||||
}
|
||||
45
src/text_editor/text_editor_main.c
Normal file
45
src/text_editor/text_editor_main.c
Normal file
@@ -0,0 +1,45 @@
|
||||
#include "core/core.h"
|
||||
#include "os/os.h"
|
||||
#include "app/app.h"
|
||||
#include "ui/ui.h"
|
||||
|
||||
#include "core/core.c"
|
||||
#include "os/os.c"
|
||||
#include "app/app.c"
|
||||
#include "render/render.c"
|
||||
#include "ui/ui.c"
|
||||
|
||||
#include "text_editor.gen.c"
|
||||
|
||||
// @todo:
|
||||
// Create a complete string16 library
|
||||
// Win32 SDL_GetPrefPath, create configuration directory, get path
|
||||
// Win32 set screen saver
|
||||
// Win32 upload icon
|
||||
|
||||
fn_export b32 app_update(thread_ctx_t *thread_ctx, app_frame_t *frame) {
|
||||
tcx = thread_ctx;
|
||||
if (frame->first_event->kind == app_event_kind_init) {
|
||||
run_all_tests();
|
||||
|
||||
mt_tweak_f32(font_size, 30, 4, 200);
|
||||
mt_tweak_f32(_font_size, 30, 30, 30);
|
||||
|
||||
rn_init(&tcx->perm, font_size, frame->dpr);
|
||||
return true;
|
||||
} else if (frame->first_event->kind == app_event_kind_reload) {
|
||||
rn_reload();
|
||||
|
||||
return true;
|
||||
} else if (frame->first_event->kind == app_event_kind_unload) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!f32_are_equal(font_size, _font_size)) {
|
||||
_font_size = font_size;
|
||||
rn_reload_font(font_size, frame->dpr);
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user