return errors from parse() #1

Merged
ralsina merged 12 commits from return-errors into main 2023-07-14 01:05:13 +00:00
4 changed files with 12 additions and 9 deletions
Showing only changes of commit 34a16bd6bd - Show all commits

View File

@ -2,10 +2,8 @@ CC=gcc
all: test all: test
shortcodes.c: shortcodes.rl shortcodes.c: shortcodes.rl
ragel -G2 -L shortcodes.rl -o shortcodes.c ragel -G2 -L shortcodes.rl -o shortcodes.c
%.o: %.c tests.so: shortcodes.c tests.c
$(CC) -fPIC -c -o $@ $^ -g $(CC) -fPIC -shared -g -o $@ $^ -lbg -lcgreen
tests.so: shortcodes.o tests.o
$(CC) -shared -g -o $@ $^ -lbg -lcgreen
clean: clean:
rm -f shortcodes.c *.o *.so tests rm -f shortcodes.c *.o *.so tests
test: tests.so test: tests.so

View File

@ -1,5 +1,4 @@
#ifndef SHORTCODES_H #pragma once
#define SHORTCODES_H
// A chunk is a reference to a piece of string // A chunk is a reference to a piece of string
// from "start" relative to its start // from "start" relative to its start
@ -46,9 +45,8 @@ Example:
{{% foo %}} {{% /bar %}} {{% foo %}} {{% /bar %}}
*/ */
#define ERR_MISMATCHED_CLOSING_TAG 1; #define ERR_MISMATCHED_CLOSING_TAG 1
#define ERR_MISMATCHED_BRACKET 2
sc_result parse(char *); sc_result parse(char *);
#endif

View File

@ -58,6 +58,9 @@
// Since it's mismatched, remove the name // Since it's mismatched, remove the name
sc_list[c_sc].name.start = 0; sc_list[c_sc].name.start = 0;
sc_list[c_sc].name.len=0; sc_list[c_sc].name.len=0;
result.errors[result.errcount].position = p-start-2;
result.errors[result.errcount].code = ERR_MISMATCHED_BRACKET;
result.errcount++;
}; };
shortcode = ((start_p content end_p) | (start_b content end_b)) shortcode = ((start_p content end_p) | (start_b content end_b))

View File

@ -45,6 +45,10 @@ Ensure(parse, mismatched_brackets)
result = parse(input); result = parse(input);
// No shortcodes // No shortcodes
assert_that(result.sc[0].name.len, is_equal_to(0)); assert_that(result.sc[0].name.len, is_equal_to(0));
assert_that(result.errcount, is_equal_to(1));
assert_that(result.errors[0].code, is_equal_to(ERR_MISMATCHED_BRACKET));
str_copyb(&s, input + result.errors[0].position, 3);
assert_that(s.s, is_equal_to_string(">}}"));
} }
Ensure(parse, mismatched_brackets_inside_data_are_ok) Ensure(parse, mismatched_brackets_inside_data_are_ok)