diff options
author | Raghuram Subramani <raghus2247@gmail.com> | 2025-07-12 16:31:57 +0530 |
---|---|---|
committer | Raghuram Subramani <raghus2247@gmail.com> | 2025-07-12 16:31:57 +0530 |
commit | 37c69bc9c889c2cee0a66336c3b7dec7194d982b (patch) | |
tree | e1509b3c4d2261e21e17ab514926bf497967130f /src/lexer.c | |
parent | f02732e5ec00849b3150c9261e59aa6e78ba6bbc (diff) |
lexer: find_next_key should be able to skip x keys
Diffstat (limited to 'src/lexer.c')
-rw-r--r-- | src/lexer.c | 15 |
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); |