diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/engine/eachdo.c | 2 | ||||
-rw-r--r-- | src/engine/engine.c | 13 | ||||
-rw-r--r-- | src/msg.c | 2 | ||||
-rw-r--r-- | src/template.c | 21 |
4 files changed, 19 insertions, 19 deletions
diff --git a/src/engine/eachdo.c b/src/engine/eachdo.c index 0aba13e..2d3ec4c 100644 --- a/src/engine/eachdo.c +++ b/src/engine/eachdo.c @@ -190,7 +190,7 @@ handle_eachdo(char **buffer, key_match_t *match, directive_t *directive) { eachdo_operands_t *operands = directive->operands; - engine_t *engine = engine_ingest(&operands->content); + engine_t *engine = engine_ingest(&operands->content, false); engine_delete(engine); list_t *directives = lex(operands->content); diff --git a/src/engine/engine.c b/src/engine/engine.c index a4606c2..683d39b 100644 --- a/src/engine/engine.c +++ b/src/engine/engine.c @@ -43,7 +43,7 @@ extern msg_t *msg; * It's only there to define the end of the EACHDO content block. */ engine_t * -engine_ingest(char **buffer) +engine_ingest(char **buffer, bool is_template) { engine_t *engine = malloc(sizeof(engine_t)); engine->config = NULL; @@ -103,14 +103,13 @@ engine_ingest(char **buffer) break; case EACHDO: { eachdo_operands_t *operands = directive->operands; - /* TODO: Don't handle page source only if a template is currently - * being parsed */ - if (!strcmp(operands->source, "page")) { + /* Don't handle page source only if a template is currently being + * parsed */ + if (is_template && !strcmp(operands->source, "page")) skip++; - break; - } + else + handle_eachdo(buffer, match, directive); - handle_eachdo(buffer, match, directive); break; } @@ -121,7 +121,7 @@ handle_file(const char *path) if (engine.config != NULL) config_delete(engine.config); } else if (strlen(buffer) != 0) { - engine_t *engine = engine_ingest(&buffer); + engine_t *engine = engine_ingest(&buffer, false); template_write(engine, out, buffer, false); engine_delete(engine); } diff --git a/src/template.c b/src/template.c index d325621..c228ffe 100644 --- a/src/template.c +++ b/src/template.c @@ -116,7 +116,7 @@ template_create(char *template_name) char *buffer = fcontent(base, size); fclose(base); - engine_t *engine = engine_ingest(&buffer); + engine_t *engine = engine_ingest(&buffer, true); engine_delete(engine); template->components = lex(buffer); @@ -198,17 +198,18 @@ template_write(engine_t *engine, FILE *f, void *doc, bool is_markdown) case EACHDO: { eachdo_operands_t *operands = directive->operands; - if (!strcmp(operands->source, "page")) { - list_t *atoms = list_create(sizeof(ptr_wrapper_t)); - list_t *directives = lex(operands->content); + /* must be a page loop, since resources are handled in + * engine_ingest() */ + // if (!strcmp(operands->source, "page")) - handle_page_source( - atoms, operands, directives, engine->config); + list_t *atoms = list_create(sizeof(ptr_wrapper_t)); + list_t *directives = lex(operands->content); - for (size_t i = 0; i < atoms->size; i++) { - atom_t *atom = list_get(atoms, i); - fprintf(f, "%s", atom->content); - } + handle_page_source(atoms, operands, directives, engine->config); + + for (size_t i = 0; i < atoms->size; i++) { + atom_t *atom = list_get(atoms, i); + fprintf(f, "%s", atom->content); } } |