diff --git a/xs_html.h b/xs_html.h index 58a50b6..297b989 100644 --- a/xs_html.h +++ b/xs_html.h @@ -203,61 +203,50 @@ xs_html *_xs_html_container(xs_html *var[]) void xs_html_render_f(xs_html *h, FILE *f) /* renders the tag and its subtags into a file */ { - xs_html *st; + if (h == NULL) + return; switch (h->type) { case XS_HTML_TAG: + fprintf(f, "<%s", h->content); + + /* attributes */ + xs_html_render_f(h->f_attr, f); + + fprintf(f, ">"); + + /* sub-tags */ + xs_html_render_f(h->f_tag, f); + + fprintf(f, "", h->content); + break; + case XS_HTML_SCTAG: fprintf(f, "<%s", h->content); - /* render the attributes */ - st = h->f_attr; - while (st) { - xs_html *nst = st->next; - xs_html_render_f(st, f); - st = nst; - } - - if (h->type == XS_HTML_SCTAG) { - /* self-closing tags should not have subtags */ - fprintf(f, "/>"); - } - else { - fprintf(f, ">"); - - /* render the subtags */ - st = h->f_tag; - while (st) { - xs_html *nst = st->next; - xs_html_render_f(st, f); - st = nst; - } - - fprintf(f, "", h->content); - } + /* attributes */ + xs_html_render_f(h->f_attr, f); + fprintf(f, "/>"); break; case XS_HTML_CONTAINER: - /* render the subtags and nothing more */ - st = h->f_tag; - while (st) { - xs_html *nst = st->next; - xs_html_render_f(st, f); - st = nst; - } - + /* sub-tags */ + xs_html_render_f(h->f_tag, f); break; case XS_HTML_ATTR: - fprintf(f, " %s", h->content); - break; + fprintf(f, " "); + /* fallthrough */ case XS_HTML_TEXT: fprintf(f, "%s", h->content); break; } + /* follow the chain */ + xs_html_render_f(h->next, f); + xs_free(h->content); xs_free(h); } diff --git a/xs_version.h b/xs_version.h index 89c899d..0e90e31 100644 --- a/xs_version.h +++ b/xs_version.h @@ -1 +1 @@ -/* f27e092c79ca6e2e96f83e0d4c3dbc73d737ffaa 2023-12-03T17:12:47+01:00 */ +/* 1b21549513460489504a2caa4127607c914a10da 2023-12-03T23:45:32+01:00 */