diff options
-rw-r--r-- | include/template.h | 5 | ||||
-rw-r--r-- | src/template.c | 44 |
2 files changed, 38 insertions, 11 deletions
diff --git a/include/template.h b/include/template.h index de36293..82ae180 100644 --- a/include/template.h +++ b/include/template.h @@ -1,9 +1,10 @@ #ifndef __TEMPLATE_H #define __TEMPLATE_H +#include <list.h> + typedef struct { - char *pre; - char *post; + list_t *components; } template_t; template_t *template_create(void); diff --git a/src/template.c b/src/template.c index e8f8fd5..7a0b64b 100644 --- a/src/template.c +++ b/src/template.c @@ -1,7 +1,9 @@ #define _GNU_SOURCE +#include <engine.h> #include <filehandler.h> #include <lexer.h> +#include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <template.h> @@ -12,22 +14,46 @@ template_t * template_create(void) { template_t *template = malloc(sizeof(template_t)); + template->components = list_create(sizeof(directive_t)); FILE *base = fopen(DIRECTORY "/" BASE_TEMPLATE, "r"); unsigned int size = fsize(base); - char *contents = fcontent(base, size); + char *buffer = fcontent(base, size); fclose(base); - key_match_t *match = find_next_key(contents); + key_match_t *match; + while (true) { + match = find_next_key(buffer); + if (match == NULL) + break; - asprintf(&template->pre, "%.*s", match->offset, contents); - asprintf(&template->post, - "%.*s", - size - match->offset - match->length, - contents + match->offset + match->length); + directive_t *directive = find_directive(buffer, match); + if (directive == NULL) { + printf( + "Unknown directive: %.*s\n", match->length, buffer + match->offset); + + break; + } + + switch (directive->type) { + case CONTENT: + case BODY: + break; + + /* TODO: Handle this gracefully */ + case INCLUDE: + case CONTENTFOR: + case ENDCONTENT: + break; + } + + if (directive != NULL) + free(directive); + + if (match != NULL) + free(match); + } - free(contents); - free(match); return template; } |