From e4743dfa97fdaed6f9bdddf742c5c6d1191dc1a1 Mon Sep 17 00:00:00 2001 From: Raghuram Subramani Date: Sun, 27 Jul 2025 19:09:39 +0530 Subject: lexer: lex() must also return matches --- compromyse.xyz/posts/a.html | 2 +- include/lexer.h | 7 ++++++- src/engine.c | 1 + src/lexer.c | 8 ++++++-- src/template.c | 5 ++++- 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/compromyse.xyz/posts/a.html b/compromyse.xyz/posts/a.html index 79d75da..8237d7f 100644 --- a/compromyse.xyz/posts/a.html +++ b/compromyse.xyz/posts/a.html @@ -1,4 +1,4 @@ -title: A.html +title = A.html ---

a.html

diff --git a/include/lexer.h b/include/lexer.h index 4621f6f..f7cb6d2 100644 --- a/include/lexer.h +++ b/include/lexer.h @@ -38,7 +38,12 @@ typedef struct { char *content; } eachdo_operands_t; -list_t *lex(char *buffer); +typedef struct { + list_t *matches; + list_t *directives; +} lex_t; + +lex_t *lex(char *buffer); directive_t *find_directive(char *content, key_match_t *match); key_match_t *find_next_key(char *buffer, size_t skip); char *find_contentfor_value(list_t *content_headers, char *key); diff --git a/src/engine.c b/src/engine.c index a494b71..a334e2c 100644 --- a/src/engine.c +++ b/src/engine.c @@ -1,6 +1,7 @@ #include "util.h" #define _GNU_SOURCE +#include #include #include #include diff --git a/src/lexer.c b/src/lexer.c index 0ac6c6a..a1f893f 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -9,10 +9,12 @@ #include #include -list_t * +lex_t * lex(char *buffer) { + lex_t *out = malloc(sizeof(lex_t)); list_t *directives = list_create(sizeof(directive_t)); + list_t *matches = list_create(sizeof(key_match_t)); size_t current_offset = 0; while (true) { @@ -50,7 +52,9 @@ lex(char *buffer) list_add(directives, raw_directive); } - return directives; + out->directives = directives; + out->matches = matches; + return out; } key_match_t * diff --git a/src/template.c b/src/template.c index b3536cc..ed6d9e0 100644 --- a/src/template.c +++ b/src/template.c @@ -28,8 +28,11 @@ template_create(void) fclose(base); ingest(&buffer); - template->components = lex(buffer); + lex_t *lexed = lex(buffer); + template->components = lexed->directives; + list_delete(lexed->matches); + free(lexed); free(buffer); return template; } -- cgit v1.2.3