2 #include "headers/parser.h"
6 TodoList* cur_todolist;
7 TodoItem* cur_todoitem;
8 /* for use during processing */
12 char* read_file(char* file_name, long* size);
15 void enter_todolist();
18 void enter_todoitem();
21 /* callbacks to parser */
22 int enter_block(MD_BLOCKTYPE type, void* detail, void* userdata);
23 int leave_block(MD_BLOCKTYPE type, void* detail, void* userdata);
24 int enter_span(MD_SPANTYPE type, void* detail, void* userdata);
25 int leave_span(MD_SPANTYPE type, void* detail, void* userdata);
26 int text(MD_TEXTTYPE type, const MD_CHAR* text, MD_SIZE size, void* userdata);
27 void debug_log(const char* msg, void* userdata);
30 const MD_PARSER parser = {
32 MD_DIALECT_COMMONMARK,
43 read_file(char* file_name, long* size)
44 { // apparently using seek isnt the greatest, may change to chunk reading later
49 file = fopen(file_name, "r");
51 printf("Something went wrong opening file\n");
55 fseek(file, 0, SEEK_END);
57 fseek(file, 0, SEEK_SET);
59 output = malloc(fsize+1); // maybe error check malloc
60 fread(output, 1, fsize, file);
62 printf("Something went wrong reading file\n");
67 output[fsize] = 0; // add null terminator
78 begin_parse(char* board_path)
80 const char* input_buffer;
84 /* read entire file */
85 input_buffer = read_file(board_path, &input_size);
88 state = malloc(sizeof(State));
89 state->cur_todolist = NULL;
90 state->cur_todoitem = NULL;
92 state->board = malloc(sizeof(Board));
93 state->board->todolist_list = malloc(0);
94 state->board->todolist_count = 0;
96 md_parse(input_buffer, input_size, &parser, state);
98 free((char*)input_buffer);
104 enter_block(MD_BLOCKTYPE type, void* detail, void* userdata)
110 leave_block(MD_BLOCKTYPE type, void* detail, void* userdata)
113 state = (State*)userdata;
119 switch(((MD_BLOCK_H_DETAIL*)detail)->level) {
122 printf("leave h1, %s\n", state->last_block_text);
125 printf("leave h2, %s\n", state->last_block_text);
128 printf("leave h3, %s\n", state->last_block_text);
135 // no need for default case for now :>
141 enter_span(MD_SPANTYPE type, void* detail, void* userdata)
147 leave_span(MD_SPANTYPE type, void* detail, void* userdata)
153 text(MD_TEXTTYPE type, const MD_CHAR* text, MD_SIZE size, void* userdata){
158 state = (State*)userdata;
160 content = malloc(size*sizeof(char)+1);
161 memcpy(content, text, size);
164 /* printf("%s\n", content); */
165 state->last_block_text = content;
171 debug_log(const char* msg, void* userdata)