summaryrefslogtreecommitdiff
path: root/cmarkdown.c
diff options
context:
space:
mode:
authorgottox@rootkit.lan <gottox@rootkit.lan>2007-12-10 16:08:10 +0100
committergottox@rootkit.lan <gottox@rootkit.lan>2007-12-10 16:08:10 +0100
commitf4f811fba728d60468a3c448c58a3bc9abfc1ef1 (patch)
treedd61bb48b56348fe6ddd364131a9972fd872f25e /cmarkdown.c
parenta8b7fd1ea2e17998bcfe5a39513d9994c56e5b80 (diff)
Adding list support
Diffstat (limited to 'cmarkdown.c')
-rw-r--r--cmarkdown.c58
1 files changed, 57 insertions, 1 deletions
diff --git a/cmarkdown.c b/cmarkdown.c
index 830c96f..361ce36 100644
--- a/cmarkdown.c
+++ b/cmarkdown.c
@@ -177,7 +177,63 @@ dolink(const char *begin, const char *end) {
unsigned int
dolist(const char *begin, const char *end) {
- return 0;
+ unsigned int i,j,k,indent,run,ul;
+ const char *p;
+ char *buffer;
+
+ if(*begin != '\n' || !p[1])
+ return 0;
+ if(strchr("+-*",p[1])) {
+ p++;
+ ul = 1;
+ }
+ else {
+ for(p = begin + 1; *p && p != end && *p <= '0' && *p >= '9';p++);
+ p++;
+ if(!*p || p[0] != '.' || p[1] != ' ')
+ return 0;
+ ul = 0;
+ }
+ for(p++; *p && p != end && *p == ' '; p++);
+ indent = p - begin - 1;
+
+ if(!(buffer = malloc(end - begin+1)))
+ ERRMALLOC;
+
+ if(ul)
+ puts("<ul>");
+ else
+ puts("<ol>");
+ run = 1;
+ for(i = 0, p = begin+1+indent; *p && p != end && run; p++) {
+ buffer[0] = '\0';
+ for(i = 0; *p && p != end && run; p++,i++) {
+ if(*p == '\n') {
+ if(p[1] == '\n') {
+ run = 0;
+ break;
+ }
+ else if(p[1] == ' ') {
+ p += indent + 1;
+ }
+ else if(p[1] >= '0' && p[1] <= '9' || strchr("+-*",p[1])) {
+ p += indent;
+ break;
+ }
+ buffer[i++] = '\n';
+ }
+ buffer[i] = *p;
+ }
+ fputs("<li>",stdout);
+ process(buffer,buffer+i);
+ fputs("</li>\n",stdout);
+ }
+ if(ul)
+ puts("</ul>");
+ else
+ puts("</ol>");
+ free(buffer);
+ return p - begin;
}
unsigned int