aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaghuram Subramani <raghus2247@gmail.com>2025-08-02 10:00:37 +0530
committerRaghuram Subramani <raghus2247@gmail.com>2025-08-02 10:00:37 +0530
commit01dab20082d978365177fa2a13ecde163be2a5e7 (patch)
tree1682dc2c448215d62a659126ebfc1c36ed372c46
parentc7991d1e3953cbe15c927a755189f43d6a071312 (diff)
engine,lexer,template: implement PUTPAGE for templates
-rw-r--r--include/lexer.h11
-rw-r--r--src/engine.c4
-rw-r--r--src/lexer.c13
-rw-r--r--src/template.c16
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;