diff --git a/cmarkdown.c b/cmarkdown.c index ae71bf0..26f8863 100644 --- a/cmarkdown.c +++ b/cmarkdown.c @@ -10,7 +10,6 @@ #include #define BUFFERSIZE 1024 -#define ERRMALLOC eprint("malloc failed\n"); #define LENGTH(x) sizeof(x)/sizeof(x[0]) typedef unsigned int (*Parser)(const char *, const char *); @@ -28,6 +27,8 @@ unsigned int dolink(const char *begin, const char *end); /* Parser for links and images */ unsigned int dolist(const char *begin, const char *end); /* Parser for lists */ +unsigned int doparagraph(const char *begin, const char *end); + /* Parser for paragraphs */ unsigned int doreplace(const char *begin, const char *end); /* Parser for simple replaces */ unsigned int doshortlink(const char *begin, const char *end); @@ -38,8 +39,8 @@ unsigned int dounderline(const char *begin, const char *end); /* Parser for underline tags */ void process(const char *begin, const char *end); /* Processes range between begin and end. */ -Parser parsers[] = { dounderline, dolineprefix, dolist, dosurround, - dolink, doshortlink, doreplace }; /* list of parsers */ +Parser parsers[] = { dounderline, dolineprefix, dolist, doparagraph, + dosurround, dolink, doshortlink, doreplace }; /* list of parsers */ FILE *source; unsigned int bsize = 0, nohtml = 0; struct Tag lineprefix[] = { @@ -67,7 +68,8 @@ struct Tag surround[] = { { "_", 1, "em" }, }; char * replace[][2] = { - { "\n---\n", "\n
\n" }, + { "\n- - -\n", "\n
\n" }, + { "\n- - - \n", "\n
\n" }, { " #######\n", "\n" }, { " ######\n", "\n" }, { " #####\n", "\n" }, @@ -77,7 +79,7 @@ char * replace[][2] = { { " #\n", "\n" }, }; char * insert[][2] = { - { "\n\n", "

" }, + { " \n", "
" }, }; void @@ -109,7 +111,7 @@ dolineprefix(const char *begin, const char *end) { char *buffer; const char *p; - if(*begin != '\n' && *begin != '\0') + if(*begin != '\n') return 0; for(i = 0; i < LENGTH(lineprefix); i++) { l = strlen(lineprefix[i].search); @@ -118,7 +120,7 @@ dolineprefix(const char *begin, const char *end) { if(strncmp(lineprefix[i].search,begin+1,l)) continue; if(!(buffer = malloc(end - begin+1))) - ERRMALLOC; + eprint("Malloc failed."); printf("<%s>",lineprefix[i].tag); for(p = begin, j = 0; p != end; p++, j++) { buffer[j] = *p; @@ -202,7 +204,7 @@ dolist(const char *begin, const char *end) { indent = p - begin - 1; if(!(buffer = malloc(end - begin+1))) - ERRMALLOC; + eprint("Malloc failed."); puts(ul ? "