refactor meta tables
This commit is contained in:
137
src/ui/ui.meta.c
137
src/ui/ui.meta.c
@@ -1,4 +1,82 @@
|
||||
void mt_test_replace(ma_arena_t *arena) {
|
||||
ast_t *keys = mtt_parse(arena, __FILE__, S8_CODE(
|
||||
// javascript filter out
|
||||
{ name js1 js2 jf windows1 windows2 }
|
||||
{ null XXX XXX 1 XXX XXX }
|
||||
{ 1 1 XXX 0 `'1'` XXX }
|
||||
{ 2 2 XXX 0 `'2'` XXX }
|
||||
{ 3 3 XXX 0 `'3'` XXX }
|
||||
{ 4 4 XXX 0 `'4'` XXX }
|
||||
{ 5 5 XXX 0 `'5'` XXX }
|
||||
{ 6 6 XXX 0 `'6'` XXX }
|
||||
{ 7 7 XXX 0 `'7'` XXX }
|
||||
{ 8 8 XXX 0 `'8'` XXX }
|
||||
{ 9 9 XXX 0 `'9'` XXX }
|
||||
{ 0 0 XXX 0 `'0'` XXX }
|
||||
{ f1 F1 XXX 1 VK_F1 XXX }
|
||||
{ f2 F2 XXX 1 VK_F2 XXX }
|
||||
{ f3 F3 XXX 1 VK_F3 XXX }
|
||||
{ f4 F4 XXX 1 VK_F4 XXX }
|
||||
{ f5 F5 XXX 1 VK_F5 XXX }
|
||||
{ f6 F6 XXX 1 VK_F6 XXX }
|
||||
{ f7 F7 XXX 1 VK_F7 XXX }
|
||||
{ f8 F8 XXX 1 VK_F8 XXX }
|
||||
{ f9 F9 XXX 1 VK_F9 XXX }
|
||||
{ f10 F10 XXX 1 VK_F10 XXX }
|
||||
{ f11 F11 XXX 1 VK_F11 XXX }
|
||||
{ f12 F12 XXX 1 VK_F12 XXX }
|
||||
{ a a XXX 0 `'A'` XXX }
|
||||
{ b b XXX 0 `'B'` XXX }
|
||||
{ c c XXX 0 `'C'` XXX }
|
||||
{ d d XXX 0 `'D'` XXX }
|
||||
{ e e XXX 0 `'E'` XXX }
|
||||
{ f f XXX 0 `'F'` XXX }
|
||||
{ g g XXX 0 `'G'` XXX }
|
||||
{ h h XXX 0 `'H'` XXX }
|
||||
{ i i XXX 0 `'I'` XXX }
|
||||
{ j j XXX 0 `'J'` XXX }
|
||||
{ k k XXX 0 `'K'` XXX }
|
||||
{ l l XXX 0 `'L'` XXX }
|
||||
{ m m XXX 0 `'M'` XXX }
|
||||
{ n n XXX 0 `'N'` XXX }
|
||||
{ o o XXX 0 `'O'` XXX }
|
||||
{ p p XXX 0 `'P'` XXX }
|
||||
{ q q XXX 0 `'Q'` XXX }
|
||||
{ r r XXX 0 `'R'` XXX }
|
||||
{ s s XXX 0 `'S'` XXX }
|
||||
{ _t t XXX 0 `'T'` XXX }
|
||||
{ u u XXX 0 `'U'` XXX }
|
||||
{ v v XXX 0 `'V'` XXX }
|
||||
{ w w XXX 0 `'W'` XXX }
|
||||
{ x x XXX 0 `'X'` XXX }
|
||||
{ y y XXX 0 `'Y'` XXX }
|
||||
{ z z XXX 0 `'Z'` XXX }
|
||||
{ space ` ` XXX 0 VK_SPACE XXX }
|
||||
{ enter Enter XXX 1 VK_RETURN XXX }
|
||||
{ escape Escape XXX 1 VK_ESCAPE XXX }
|
||||
{ left ArrowLeft XXX 1 VK_LEFT XXX }
|
||||
{ up ArrowUp XXX 1 VK_UP XXX }
|
||||
{ right ArrowRight XXX 1 VK_RIGHT XXX }
|
||||
{ down ArrowDown XXX 1 VK_DOWN XXX }
|
||||
{ tab Tab XXX 1 VK_TAB XXX }
|
||||
{ backspace Backspace XXX 1 VK_BACK XXX }
|
||||
{ control Control XXX 1 VK_CONTROL XXX }
|
||||
{ shift Shift XXX 1 VK_SHIFT XXX }
|
||||
{ alt Alt AltGraph 1 VK_LMENU VK_RMENU }
|
||||
{ meta Meta XXX 1 VK_LWIN VK_RWIN }
|
||||
{ caps_lock CapsLock XXX 1 VK_CAPITAL XXX }
|
||||
{ delete Delete XXX 1 VK_DELETE XXX }
|
||||
{ home Home XXX 1 VK_HOME XXX }
|
||||
{ end End XXX 1 VK_END XXX }
|
||||
{ insert Insert XXX 1 VK_NEXT XXX }
|
||||
{ page_up PageUp XXX 1 VK_INSERT XXX }
|
||||
{ page_down PageDown XXX 1 VK_PRIOR XXX }
|
||||
));
|
||||
|
||||
}
|
||||
|
||||
void mt_ui(ma_arena_t *arena) {
|
||||
mt_test_replace(arena);
|
||||
typedef struct mt_ui_stacks_t mt_ui_stacks_t;
|
||||
struct mt_ui_stacks_t {
|
||||
s8_t type;
|
||||
@@ -30,49 +108,72 @@ void mt_ui(ma_arena_t *arena) {
|
||||
if (!s8_starts_with(it->node, s8_lit("ui_"), false)) it->node = s8_printf(arena, "ui_%S", it->node);
|
||||
}
|
||||
|
||||
sb8_t *h_sb = sb8_serial_begin(arena);
|
||||
sb8_t *c_sb = sb8_serial_begin(arena);
|
||||
sb8_t *h = sb8_serial_begin(arena);
|
||||
sb8_t *c = sb8_serial_begin(arena);
|
||||
|
||||
///////////////////////////////
|
||||
// generate types
|
||||
for (mt_ui_stacks_t *it = stacks; it < stacks + lengthof(stacks); it += 1) {
|
||||
for (mt_ui_stacks_t *jt = it - 1; jt >= stacks; jt -= 1) if (s8_are_equal(it->type, jt->type)) goto type_already_gened;
|
||||
sb8_stmtf(h_sb, "typedef struct %S %S; struct %S { %S value; %S *next; };", it->node, it->node, it->node, it->type, it->node);
|
||||
sb8_stmtf(h, "typedef struct %S %S; struct %S { %S value; %S *next; };", it->node, it->node, it->node, it->type, it->node);
|
||||
type_already_gened:;
|
||||
}
|
||||
sb8_printf(h_sb, "\n");
|
||||
sb8_printf(h, "\n");
|
||||
|
||||
///////////////////////////////
|
||||
// generate field embeds
|
||||
sb8_stmtf(h_sb, "#define UI_DECL_BOX_MEMBERS \\");
|
||||
sb8_stmtf(h, "#define UI_DECL_BOX_MEMBERS \\");
|
||||
for (mt_ui_stacks_t *it = stacks; it < stacks + lengthof(stacks); it += 1) {
|
||||
if (it->skip_box_member) continue;
|
||||
sb8_stmtf(h_sb, "%S %S;\\", it->type, it->name);
|
||||
sb8_stmtf(h, "%S %S;\\", it->type, it->name);
|
||||
}
|
||||
sb8_printf(h_sb, "\n");
|
||||
sb8_printf(h, "\n");
|
||||
|
||||
sb8_stmtf(h_sb, "#define UI_DECL_STACKS \\");
|
||||
sb8_stmtf(h, "#define UI_DECL_STACKS \\");
|
||||
for (mt_ui_stacks_t *it = stacks; it < stacks + lengthof(stacks); it += 1) {
|
||||
sb8_stmtf(h_sb, "%S *%S;\\", it->node, it->stack);
|
||||
sb8_stmtf(h, "%S *%S;\\", it->node, it->stack);
|
||||
}
|
||||
sb8_printf(h_sb, "\n");
|
||||
sb8_printf(h, "\n");
|
||||
|
||||
///////////////////////////////
|
||||
// generate stack functions
|
||||
for (mt_ui_stacks_t *it = stacks; it < stacks + lengthof(stacks); it += 1) {
|
||||
sb8_stmtf(c_sb, "fn void ui_push_%S(%S v) { %S *n = ma_push_type(tcx.temp, %S); n->value = v; SLLS_PUSH(ui->%S, n); }", it->name, it->type, it->node, it->node, it->stack);
|
||||
sb8_stmtf(c_sb, "fn void ui_pop_%S(void) { SLLS_POP(ui->%S); }", it->name, it->stack);
|
||||
sb8_stmtf(c_sb, "#define ui_set_%S(x) defer_block(ui_push_%S(x), ui_pop_%S())", it->name, it->name, it->name);
|
||||
sb8_stmtf(c, "fn void ui_push_%S(%S v) { %S *n = ma_push_type(tcx.temp, %S); n->value = v; SLLS_PUSH(ui->%S, n); }", it->name, it->type, it->node, it->node, it->stack);
|
||||
sb8_stmtf(c, "fn void ui_pop_%S(void) { SLLS_POP(ui->%S); }", it->name, it->stack);
|
||||
sb8_stmtf(c, "#define ui_set_%S(x) defer_block(ui_push_%S(x), ui_pop_%S())", it->name, it->name, it->name);
|
||||
}
|
||||
|
||||
sb8_stmtf(c_sb, "fn void ui_assert_stacks_are_null(void) {");
|
||||
sb8_stmtf(c, "fn void ui_assert_stacks_are_null(void) {");
|
||||
for (mt_ui_stacks_t *it = stacks; it < stacks + lengthof(stacks); it += 1) {
|
||||
sb8_stmtf(c_sb, "assert(ui->%S == NULL);", it->stack);
|
||||
sb8_stmtf(c, "assert(ui->%S == NULL);", it->stack);
|
||||
}
|
||||
sb8_stmtf(c_sb, "}");
|
||||
sb8_stmtf(c, "}");
|
||||
|
||||
///////////////////////////////
|
||||
// write to disk
|
||||
os_write_file(mt_cpath(arena), sb8_serial_end(arena, c_sb));
|
||||
os_write_file(mt_hpath(arena), sb8_serial_end(arena, h_sb));
|
||||
os_write_file(mt_cpath(arena), sb8_serial_end(arena, c));
|
||||
os_write_file(mt_hpath(arena), sb8_serial_end(arena, h));
|
||||
|
||||
///////////////////////////////
|
||||
// idea
|
||||
#if 0
|
||||
sb8_t *h = sb8_serial_begin(arena);
|
||||
sb8_stmtf(h, "typedef struct node_type node_type; struct node_type { value_type value; node_type *next; };");
|
||||
|
||||
sb8_serial_end_use_template(arena, h, (variables_t){
|
||||
{"node_type", node_type_name},
|
||||
{"value_type", value_type_name},
|
||||
{0}.
|
||||
});
|
||||
|
||||
///
|
||||
|
||||
variables_t vars = serial_vars_from_struct(it, type(mt_ui_stacks_t));
|
||||
sb8_tmplf(h, "typedef struct node_type node_type; struct node_type { value_type value; node_type *next; };", vars);
|
||||
|
||||
////
|
||||
|
||||
sb8_stmtf(h, "typedef struct node_type node_type; struct node_type { value_type value; node_type *next; };", vars);
|
||||
|
||||
#endif
|
||||
}
|
||||
Reference in New Issue
Block a user