X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=parser.c;h=552a4534ee92a36e05f7d856ac88ee17778e43c5;hb=0d6fddd9051e36c7a5c5f6248490ec9a93843909;hp=fddd8d85adaea21df7c1e502342fd4dcd2929658;hpb=f2bc670605162224119269271f7c07459c9de0a8;p=smdp.git diff --git a/parser.c b/parser.c index fddd8d8..552a453 100644 --- a/parser.c +++ b/parser.c @@ -3,18 +3,18 @@ #include "include/parser.h" -document_t *markdown_load(FILE *input) { +deck_t *markdown_load(FILE *input) { int c = 0, i = 0, l = 0, bits = 0; - document_t *doc; - page_t *page; + deck_t *deck; + slide_t *slide; line_t *line; cstring_t *text; - doc = new_document(); - page = new_page(); - doc->page = page; + deck = new_deck(); + slide = new_slide(); + deck->slide = slide; text = cstring_init(); while ((c = fgetc(input)) != EOF) { @@ -33,17 +33,17 @@ document_t *markdown_load(FILE *input) { // reset line length l = 0; - // create next page - page = next_page(page); + // create next slide + slide = next_slide(slide); } else { - // if page ! has line - if(!page->line) { + // if slide ! has line + if(!slide->line) { // create new line line = new_line(); - page->line = line; + slide->line = line; } else { @@ -104,11 +104,11 @@ document_t *markdown_load(FILE *input) { } // detect header - line = doc->page->line; + line = deck->slide->line; if(line && line->text->size > 0 && line->text->text[0] == '%') { - // assign header to document - doc->header = line; + // assign header to deck + deck->header = line; // find first non-header line while(line->text->size > 0 && line->text->text[0] == '%') { @@ -119,14 +119,14 @@ document_t *markdown_load(FILE *input) { line->prev->next = (void*)0; line->prev = (void*)0; - // remove header lines from page - doc->page->line = line; + // remove header lines from slide + deck->slide->line = line; } // combine underlined H1/H2 in single line - page = doc->page; - while(page) { - line = page->line; + slide = deck->slide; + while(slide) { + line = slide->line; while(line) { if((CHECK_BIT(line->bits, IS_H1) || CHECK_BIT(line->bits, IS_H2)) && @@ -151,10 +151,10 @@ document_t *markdown_load(FILE *input) { } line = line->next; } - page = page->next; + slide = slide->next; } - return doc; + return deck; } int markdown_analyse(cstring_t *text) { @@ -232,6 +232,49 @@ int markdown_analyse(cstring_t *text) { return bits; } +void markdown_debug(deck_t *deck, int debug) { + + // print header to STDERR + int offset; + line_t *header; + if(deck->header) { + header = deck->header; + while(header && + header->length > 0 && + header->text->text[0] == '%') { + + offset = next_blank(header->text, 0) + 1; + fprintf(stderr, "header: %s\n", &header->text->text[offset]); + header = header->next; + } + } + + // print slide/line count to STDERR + int cs = 0, cl = 0; + slide_t *slide = deck->slide; + line_t *line; + while(slide) { + cs++; + if(debug > 1) { + fprintf(stderr, "slide %i:\n", cs); + } + line = slide->line; + cl = 0; + while(line) { + cl++; + if(debug > 1) { + fprintf(stderr, " line %i: bits = %i, length = %i\n", cl, line->bits, line->length); + } + line = line->next; + } + if(debug == 1) { + fprintf(stderr, "slide %i: %i lines\n", cs, cl); + } + slide = slide->next; + } +} + + int is_utf8(char ch) { return (ch & 0x80); }