aboutsummaryrefslogtreecommitdiff
path: root/src/lexer.c
diff options
context:
space:
mode:
authorRaghuram Subramani <raghus2247@gmail.com>2025-07-12 16:31:57 +0530
committerRaghuram Subramani <raghus2247@gmail.com>2025-07-12 16:31:57 +0530
commit37c69bc9c889c2cee0a66336c3b7dec7194d982b (patch)
treee1509b3c4d2261e21e17ab514926bf497967130f /src/lexer.c
parentf02732e5ec00849b3150c9261e59aa6e78ba6bbc (diff)
lexer: find_next_key should be able to skip x keys
Diffstat (limited to 'src/lexer.c')
-rw-r--r--src/lexer.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/lexer.c b/src/lexer.c
index 2076d20..0e1a80a 100644
--- a/src/lexer.c
+++ b/src/lexer.c
@@ -15,7 +15,7 @@ lex(char *buffer)
size_t current_offset = 0;
while (true) {
- key_match_t *key = find_next_key(buffer);
+ key_match_t *key = find_next_key(buffer, 0);
if (key == NULL)
break;
@@ -55,14 +55,19 @@ lex(char *buffer)
}
key_match_t *
-find_next_key(char *buffer)
+find_next_key(char *buffer, size_t skip)
{
key_match_t *match = calloc(1, sizeof(key_match_t));
+ size_t count = 0;
for (size_t i = 0; i < strlen(buffer); i++) {
if (buffer[i] == '{' && buffer[i + 1] == '{') {
- match->offset = i;
- break;
+ count++;
+
+ if (count > skip) {
+ match->offset = i;
+ break;
+ }
}
if (i == strlen(buffer) - 1) {
@@ -149,7 +154,7 @@ found_start:
directive_t *new_directive;
while (true) {
- new_match = find_next_key(buffer);
+ new_match = find_next_key(buffer, 0);
if (new_match == NULL) {
printf("Cannot find endcontent\n");
free(new_directive);