#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) {
// 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 {
}
// 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] == '%') {
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)) &&
}
line = line->next;
}
- page = page->next;
+ slide = slide->next;
}
- return doc;
+ return deck;
}
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);
}