diff options
Diffstat (limited to 'src/grecs.h')
-rw-r--r-- | src/grecs.h | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/src/grecs.h b/src/grecs.h index 61a915b..ff47698 100644 --- a/src/grecs.h +++ b/src/grecs.h @@ -200,9 +200,23 @@ void grecs_error(grecs_locus_t *locus, int errcode, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 3, 4))); + + +extern int grecs_trace_flags; + +#define GRECS_TRACE_GRAM 0x01 +#define GRECS_TRACE_LEX 0x02 void grecs_gram_trace(int n); void grecs_lex_trace(int n); + -int grecs_lex_begin(const char*); +int grecs_lex_begin(const char*, int); void grecs_lex_end(int err); struct grecs_node *grecs_parse(const char *name); + +extern struct grecs_node *(*grecs_parser_fun)(const char *name, int trace); + +/* Parsers: */ +struct grecs_node *grecs_grecs_parser(const char *name, int traceflags); +struct grecs_node *grecs_meta1_parser(const char *name, int traceflags); + struct grecs_list *_grecs_simple_list_create(int dispose); @@ -210,4 +224,11 @@ struct grecs_list *grecs_value_list_create(void); +void grecs_line_acc_create(void); +void grecs_line_acc_free(void); +void grecs_line_acc_grow_char(int c); +void grecs_line_acc_grow_char_unescape(int c); +void grecs_line_acc_grow(const char *text, size_t len); +void grecs_line_acc_grow_unescape_last(char *text, size_t len); + void grecs_line_begin(void); -void grecs_line_add(const char *text, size_t len); +#define grecs_line_add grecs_line_acc_grow char *grecs_line_finish(void); @@ -297,2 +318,9 @@ int grecs_asprintf(char **pbuf, size_t *psize, const char *fmt, ...); +#define GRECS_TXTACC_BUFSIZE 1024 +struct grecs_txtacc *grecs_txtacc_create(void); +void grecs_txtacc_free(struct grecs_txtacc *acc); +void grecs_txtacc_grow(struct grecs_txtacc *acc, const char *buf, size_t size); +char *grecs_txtacc_finish(struct grecs_txtacc *acc, int steal); +void grecs_txtacc_free_string(struct grecs_txtacc *acc, char *str); + struct grecs_symtab; @@ -365,2 +393,5 @@ void grecs_match_buf_free(struct grecs_match_buf *buf); int grecs_value_eq(struct grecs_value *a, struct grecs_value *b); +int grecs_value_match(struct grecs_value *pat, struct grecs_value *b, + int flags); + struct grecs_node *grecs_find_node(struct grecs_node *node, const char *path); |