#include #include #include #include "mrk/lexer.h" #include "mrk/parser.h" #include "mrk/ast.h" int main(int argc, char **argv) { if (argc == 1) { fprintf(stderr, "No file provided."); return 1; } struct stat stat_s; assert(stat(argv[1], &stat_s) == 0); char *buf = malloc(stat_s.st_size); assert(buf); long read = 0; FILE *f = fopen(argv[1], "rb"); assert(f); while (read < stat_s.st_size) { read += fread(buf + read, 1, stat_s.st_size - read, f); } mrk_lexer *lexer; assert(mrk_lexer_init(&lexer) == mrk_err_ok); mrk_lexer_open(lexer, buf, stat_s.st_size); mrk_parser *parser; assert(mrk_parser_init(&parser) == mrk_err_ok); mrk_parser_open(parser, lexer); mrk_ast_node *root; mrk_err res = mrk_parser_parse(&root, parser); switch (res) { case mrk_err_ok: break; case mrk_err_invalid_md: { const char *err_msg = mrk_parser_err_msg(parser); printf("%s\n", err_msg); return 2; } default: printf("mrk error %i\n", res); return 3; } char *html; assert(mrk_ast_to_html(&html, buf, root) == mrk_err_ok); printf("%s\n", html); }