diff options
author | Raghuram Subramani <raghus2247@gmail.com> | 2025-08-02 10:00:37 +0530 |
---|---|---|
committer | Raghuram Subramani <raghus2247@gmail.com> | 2025-08-02 10:00:37 +0530 |
commit | 01dab20082d978365177fa2a13ecde163be2a5e7 (patch) | |
tree | 1682dc2c448215d62a659126ebfc1c36ed372c46 /src | |
parent | c7991d1e3953cbe15c927a755189f43d6a071312 (diff) |
engine,lexer,template: implement PUTPAGE for templates
Diffstat (limited to 'src')
-rw-r--r-- | src/engine.c | 4 | ||||
-rw-r--r-- | src/lexer.c | 13 | ||||
-rw-r--r-- | src/template.c | 16 |
3 files changed, 28 insertions, 5 deletions
diff --git a/src/engine.c b/src/engine.c index e0bb526..3ed0775 100644 --- a/src/engine.c +++ b/src/engine.c @@ -272,9 +272,9 @@ engine_ingest(char **buffer) handle_eachdo(buffer, match, directive); break; + case PUTPAGE: + /* TODO: handle */ case PUT: - skip++; - break; case ENDEACHDO: case BODY: case CONTENT: diff --git a/src/lexer.c b/src/lexer.c index e63dece..827ce40 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -267,6 +267,17 @@ lexer_handle_put(directive_t *directive, } void +lexer_handle_putpage(directive_t *directive, + key_match_t *match, + char *buffer, + size_t n) +{ + directive->type = PUTPAGE; + directive->operands = strndup(buffer + n + strlen("putpage"), + match->length - n - strlen("putpage") - 2); +} + +void lexer_handle_content(directive_t *directive, key_match_t *match, char *buffer, @@ -321,6 +332,8 @@ found_start: lexer_handle_content(directive, match, buffer, n); } else if (DIRECTIVE_IS("eachdo")) { lexer_handle_eachdo(directive, match, buffer, n); + } else if (DIRECTIVE_IS("putpage")) { + lexer_handle_putpage(directive, match, buffer, n); } else if (DIRECTIVE_IS("put")) { lexer_handle_put(directive, match, buffer, n); } else { diff --git a/src/template.c b/src/template.c index 0cb8918..5a89d0e 100644 --- a/src/template.c +++ b/src/template.c @@ -133,9 +133,8 @@ template_delete(template_t *template) void template_write(engine_t *engine, FILE *f, void *doc, bool is_markdown) { - template_t *template = template - = list_find_corresponding_value_from_ptr_wrapper( - keys, templates, "base.html"); + template_t *template = list_find_corresponding_value_from_ptr_wrapper( + keys, templates, "base.html"); if (engine != NULL && engine->config != NULL) { char *template_name @@ -184,6 +183,17 @@ template_write(engine_t *engine, FILE *f, void *doc, bool is_markdown) break; } + case PUTPAGE: { + + char *content = unwrap(list_find_corresponding_value_from_ptr_wrapper( + engine->config->keys, + engine->config->values, + trim(directive->operands))); + fprintf(f, "%s", content); + + break; + } + /* TODO: Handle this gracefully */ default: break; |