#include "parser.h" #include #include const char* type_name(enum linetype lt) { switch(lt) { case LT_TEXT: return "text"; case LT_HEADING: return "heading"; case LT_LINK: return "link"; case LT_QUOTE: return "quote"; case LT_LISTITEM: return "list item"; case LT_PRETEXT: return "preformatted text"; default: return "unknown type"; } } int main(int argc, char** argv) { char* buf; size_t len; FILE* f; struct parse_state st; struct line l; enum parse_result res; f = fopen(argv[1], "rw"); fseek(f, 0, SEEK_END); len = ftell(f); buf = calloc(1, len + 1); rewind(f); fread(buf, len, 1, f); st.buf = buf; st.preformatted = 0; while (*st.buf) { l.type = LT_TEXT; l.text = NULL; l.url = NULL; l.level = 0; res = ParseLine(&st, &l); if (res == PARSE_LINE) { printf("Line type: %s", type_name(l.type)); if (l.text) printf(", text: '%s'", l.text); if (l.type == LT_LINK) printf(", url: '%s'", l.url); if (l.type == LT_HEADING) printf(", heading level: %d", l.level); printf("\n"); } } }