#include "../config.h" STR serialize_node( CFG_SERIALIZER* s, CFG_NODE* n ) { STR ret{}; for( U32 i = 0; i < s->tabc * 2; ++i ) ret.append( " " ); ret.fmt( "%s %s", cfg_types[n->type].def, n->name.data ); return ret; } STR cfg_serialize_section( CFG_SERIALIZER* s, CFG_NODE *n ) { CFG_SECTION* sec = (CFG_SECTION*)n; STR buf; if( sec->parent ) { buf += serialize_node( s, n ); buf += " {\n"; s->tabc++; } for( U32 i = 0; i < sec->children.size; ++i ) { CFG_NODE* c = sec->children[i]; if( c->type == CFGT_SECTION ) { buf += cfg_serialize_section( s, c ); continue; } buf += cfg_types[c->type].serializer( s, c ); buf += "\n"; } if( sec->parent ) { s->tabc--; for( U32 i = 0 ; i < s->tabc * 2; ++i ) buf += ' '; buf += "}"; if( sec->parent ) buf += "\n"; } return buf; } STR cfg_serialize_bytes( CFG_SERIALIZER* s, CFG_NODE* n ) { CFG_BYTES* b = (CFG_BYTES*)n; U32 size = b->size; U8* bytes = b->bytes; STR buf{}; buf += serialize_node( s, n ); buf.fmt( "[%d] = \"", size ); for( U32 i = 0; i < size; ++i ) { buf.fmt( "%02X", bytes[i] ); } buf += "\";"; return buf; } STR cfg_serialize_str( CFG_SERIALIZER* s, CFG_NODE* n ) { CFG_STR* sn = (CFG_STR*)n; char* str = sn->str; STR buf{}; buf += serialize_node( s, n ); buf.fmt( "[%d] = \"%s\";", sn->len, str ); return buf; } STR cfg_serialize_int( CFG_SERIALIZER* s, CFG_NODE* n ) { CFG_INT* i = (CFG_INT*)n; I32 ival = i->value; STR buf{}; buf += serialize_node( s, n ); buf.fmt( " = %d;", ival ); return buf; } STR cfg_serialize_float( CFG_SERIALIZER* s, CFG_NODE* n ) { CFG_FLOAT* f = (CFG_FLOAT*)n; F32 fval = f->value; STR buf{}; buf += serialize_node( s, n ); buf.fmt( " = %g;", fval ); return buf; } STR cfg_serialize_vec2( CFG_SERIALIZER* s, CFG_NODE* n ) { CFG_VEC2* v = (CFG_VEC2*)n; VEC2 val = v->value; STR buf{}; buf += serialize_node( s, n ); buf.fmt( " = { %g, %g };", val.x, val.y ); return buf; } STR cfg_serialize_vec3( CFG_SERIALIZER* s, CFG_NODE* n ) { CFG_VEC3* v = (CFG_VEC3*)n; VEC3 val = v->value; STR buf{}; buf += serialize_node( s, n ); buf.fmt( " = { %g, %g, %g };", val.x, val.y, val.z ); return buf; } STR cfg_serialize_clr( CFG_SERIALIZER* s, CFG_NODE* n ) { CFG_CLR* v = (CFG_CLR*)n; CLR val = v->value; STR buf{}; buf += serialize_node( s, n ); buf.fmt( " = { %g, %g, %g, %g };", val.r, val.g, val.b, val.a ); return buf; }