refactoring: only function prototypes belong in header files
[smdp.git] / markdown.c
index 62aca6f..3cbdf0d 100644 (file)
-// needed by tmp.c to process markdown
-
 #include <stdio.h>
+#include <stdlib.h>
 
+#include "include/cstring.h"
 #include "include/markdown.h"
 
-document_t * markdown_load(FILE *input) {
-
-    int c, i, bits;
-
-    document_t *doc;
-    page_t *page;
-    line_t *line;
-    cstring_t *text;
-
-    doc = new_document();
-    page = new_page();
-    doc->page = page;
-    text = cstring_init();
-
-    while ((c = fgetc(input)) != EOF) {
-        if(c == '\n') {
-
-            // markdown analyse
-            bits = markdown_analyse(text);
-
-            // if text is markdown hr
-            if(CHECK_BIT(bits, IS_HR)) {
-
-                // clear text
-                (text->reset)(text);
-                // create next page
-                page = next_page(page);
-
-            } else {
-
-                // if page ! has line
-                if(!page->line) {
-
-                    // create new line
-                    line = new_line();
-                    page->line = line;
-
-                } else {
-
-                    // create next line
-                    line = next_line(line);
-
-                }
-
-                // add text to line
-                line->text = text;
-
-                // add bits to line
-                line->bits = bits;
-
-                // calc offset
-                line->offset = next_nonblank(text, 0);
-            }
-
-        } else if('\t') {
-
-            // expand tab to spaces
-            for (i = 0;  i <= 4;  i++)
-                (text->expand)(text, ' ');
-
-        } else if(isprint(c) || isspace(c) || is_utf8(c)) {
-
-            // add char to line
-            (text->expand)(text, c);
-        }
-    }
-
-    //TODO detect header
-
-    return doc;
+line_t *new_line() {
+    line_t *x = malloc(sizeof(line_t));
+    return x;
 }
 
-int markdown_analyse(cstring_t *text) {
-    int c, i, bits,
-        offset, eol,
-        equals, hashes, stars, minus, plus,
-        spaces, other;
-
-    // count leading spaces
-    offset = next_nonblank(text, 0);
-
-    // IS_CODE
-    if(offset >= 4) {
-        SET_BIT(bits, IS_CODE);
-        return bits;
-    }
-
-    // strip trailing spaces
-    for(eol = text->size; eol > offset && isspace(text->text[eol - 1]); eol--);
-
-    for(i = offset; i < eol; i++) {
-
-        switch(text->text[i]) {
-            case '=': equals++; break;
-            case '#': hashes++; break;
-            case '*': stars++; break;
-            case '-': minus++; break;
-            case '+': plus++; break;
-            case ' ': spaces++; break;
-            default: other++; break;
-        }
-    }
-
-    // IS_HR
-    if((minus >= 3 && equals + hashes + stars + plus == 0) ||
-       (stars >= 3 && equals + hashes + minus + plus == 0)) {
-
-        SET_BIT(bits, IS_HR);
-        return bits;
-    }
-
-    //TODO all the other markdown tags
+line_t *next_line(line_t *prev) {
+    line_t *x = new_line();
+    x->prev = prev;
+    prev->next = x;
+    return x;
+}
 
-    return bits;
+page_t *new_page() {
+    page_t *x = malloc(sizeof(page_t));
+    return x;
 }
 
-int is_utf8(char ch) {
-    return (ch & 0x80);
+page_t *next_page(page_t *prev) {
+    page_t *x = new_page();
+    x->prev = prev;
+    prev->next = x;
+    return x;
 }
 
-int next_nonblank(cstring_t *text, int i) {
-    while ((i < text->size) && isspace((text->text)[i]))
-        ++i;
-    return i;
-};
+document_t *new_document() {
+    document_t *x = malloc(sizeof(document_t));
+    return x;
+}