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 | |
parent | c7991d1e3953cbe15c927a755189f43d6a071312 (diff) |
engine,lexer,template: implement PUTPAGE for templates
-rw-r--r-- | include/lexer.h | 11 | ||||
-rw-r--r-- | src/engine.c | 4 | ||||
-rw-r--r-- | src/lexer.c | 13 | ||||
-rw-r--r-- | src/template.c | 16 |
4 files changed, 34 insertions, 10 deletions
diff --git a/include/lexer.h b/include/lexer.h index f482f09..611e014 100644 --- a/include/lexer.h +++ b/include/lexer.h @@ -32,7 +32,8 @@ typedef enum { BODY, EACHDO, ENDEACHDO, - PUT + PUT, + PUTPAGE } directive_e; typedef struct { @@ -82,9 +83,9 @@ void lexer_handle_eachdo(directive_t *directive, key_match_t *match, char *buffer, size_t n); -void lexer_handle_put(directive_t *directive, - key_match_t *match, - char *buffer, - size_t n); +void lexer_handle_putpage(directive_t *directive, + key_match_t *match, + char *buffer, + size_t n); #endif 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; |