summaryrefslogtreecommitdiff
path: root/include/parser.h
blob: 935811533ad23537423dbe91829cea6dfd1d3dce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#ifndef PARSER_H
#define PARSER_H

#include <stddef.h>

typedef struct memory memory;
typedef struct string_view string_view;

#define PARSER_BACKEND_UMANIFEST    1
#define PARSER_BACKEND_PKG          2

#define PARSER_STATE_GRACEFUL   1
#define PARSER_STATE_ERROR      2

typedef void (*parser_block_start_fn)(struct string_view*, void *userdata);
typedef void (*parser_block_end_fn)(struct string_view*, void *userdata);
typedef void (*parser_kv_fn)(struct string_view*, struct string_view*, void *userdata);
typedef void (*parser_init_fn)();

struct parser_backend {
    parser_block_start_fn   on_block_start;
    parser_block_end_fn     on_block_end;
    parser_kv_fn            on_kv;
    parser_init_fn          on_init;
};

struct parser {
    struct parser_backend *backend;
    char *src;
    size_t pos;
    size_t len;
    int state;
    void *userdata;
};

int parser_init(struct parser *parser, 
                struct string_view *mem, 
                struct parser_backend *backend,
                void *userdata);
int parser_parse(struct parser *parser);
void parser_parse_block_start(struct parser *parser);
void parser_parse_block_end(struct parser *parser);
void parser_parse_kv(struct parser *parser);

#endif