fixing bug in dolist

adding insert to doreplace
This commit is contained in:
gottox@rootkit.lan 2007-12-10 19:33:14 +01:00
parent 9076e388c8
commit 50a28fa573

View file

@ -38,7 +38,7 @@ unsigned int dounderline(const char *begin, const char *end);
/* Parser for underline tags */ /* Parser for underline tags */
void process(const char *begin, const char *end); /* Processes range between begin and end. */ void process(const char *begin, const char *end); /* Processes range between begin and end. */
Parser parsers[] = { dounderline, dolineprefix, dosurround, dolist, Parser parsers[] = { dounderline, dolineprefix, dolist, dosurround,
dolink, doshortlink, doreplace }; /* list of parsers */ dolink, doshortlink, doreplace }; /* list of parsers */
FILE *source; FILE *source;
unsigned int bsize = 0, nohtml = 0; unsigned int bsize = 0, nohtml = 0;
@ -68,7 +68,6 @@ struct Tag surround[] = {
}; };
char * replace[][2] = { char * replace[][2] = {
{ "\n---\n", "\n<hr />\n" }, { "\n---\n", "\n<hr />\n" },
{ "\n\n", "<br />\n<br />\n" },
{ " #######\n", "\n" }, { " #######\n", "\n" },
{ " ######\n", "\n" }, { " ######\n", "\n" },
{ " #####\n", "\n" }, { " #####\n", "\n" },
@ -77,6 +76,9 @@ char * replace[][2] = {
{ " ##\n", "\n" }, { " ##\n", "\n" },
{ " #\n", "\n" }, { " #\n", "\n" },
}; };
char * insert[][2] = {
{ "\n\n", "<br /><br />" },
};
void void
eprint(const char *format, ...) { eprint(const char *format, ...) {
@ -115,7 +117,6 @@ dolineprefix(const char *begin, const char *end) {
continue; continue;
if(strncmp(lineprefix[i].search,begin+1,l)) if(strncmp(lineprefix[i].search,begin+1,l))
continue; continue;
if(!(buffer = malloc(end - begin+1))) if(!(buffer = malloc(end - begin+1)))
ERRMALLOC; ERRMALLOC;
printf("<%s>",lineprefix[i].tag); printf("<%s>",lineprefix[i].tag);
@ -181,11 +182,12 @@ dolist(const char *begin, const char *end) {
const char *p; const char *p;
char *buffer; char *buffer;
if(*begin != '\n' || !p[1]) if(*begin != '\n' || !begin[1] || !begin[2])
return 0; return 0;
if(strchr("+-*",p[1])) { p = begin;
p++; if(strchr("+-*",p[1]) && p[2] == ' ') {
ul = 1; ul = 1;
p++;
} }
else { else {
for(p = begin + 1; *p && p != end && *p <= '0' && *p >= '9';p++); for(p = begin + 1; *p && p != end && *p <= '0' && *p >= '9';p++);
@ -225,7 +227,7 @@ dolist(const char *begin, const char *end) {
process(buffer,buffer+i); process(buffer,buffer+i);
fputs("</li>\n",stdout); fputs("</li>\n",stdout);
} }
puts(ul ? "<ul>" : "<ol>"); puts(ul ? "</ul>" : "</ol>");
free(buffer); free(buffer);
return p - begin; return p - begin;
} }
@ -234,6 +236,9 @@ unsigned int
doreplace(const char *begin, const char *end) { doreplace(const char *begin, const char *end) {
unsigned int i, l; unsigned int i, l;
for(i = 0; i < LENGTH(insert); i++)
if(strncmp(insert[i][0],begin,strlen(insert[i][0])) == 0)
fputs(insert[i][1], stdout);
for(i = 0; i < LENGTH(replace); i++) { for(i = 0; i < LENGTH(replace); i++) {
l = strlen(replace[i][0]); l = strlen(replace[i][0]);
if(end - begin < l) if(end - begin < l)