/* block-level tags for passing html blocks through the blender */ #include #define __WITHOUT_AMALLOC 1 #include "cstring.h" #include "tags.h" STRING(struct kw) blocktags; /* define a html block tag */ static void define_one_tag(char *id, int selfclose) { struct kw *p = &EXPAND(blocktags); p->id = id; p->size = strlen(id); p->selfclose = selfclose; } /* case insensitive string sort (for qsort() and bsearch() of block tags) */ static int casort(struct kw *a, struct kw *b) { if ( a->size != b->size ) return a->size - b->size; return strncasecmp(a->id, b->id, b->size); } /* stupid cast to make gcc shut up about the function types being * passed into qsort() and bsearch() */ typedef int (*stfu)(const void*,const void*); /* load in the standard collection of html tags that markdown supports */ main() { int i; #define KW(x) define_one_tag(x, 0) #define SC(x) define_one_tag(x, 1) KW("STYLE"); KW("SCRIPT"); KW("ADDRESS"); KW("BDO"); KW("BLOCKQUOTE"); KW("CENTER"); KW("DFN"); KW("DIV"); KW("OBJECT"); KW("H1"); KW("H2"); KW("H3"); KW("H4"); KW("H5"); KW("H6"); KW("LISTING"); KW("NOBR"); KW("UL"); KW("P"); KW("OL"); KW("DL"); KW("PLAINTEXT"); KW("PRE"); KW("TABLE"); KW("WBR"); KW("XMP"); SC("HR"); KW("IFRAME"); KW("MAP"); qsort(T(blocktags), S(blocktags), sizeof(struct kw), (stfu)casort); printf("static struct kw blocktags[] = {\n"); for (i=0; i < S(blocktags); i++) printf(" { \"%s\", %d, %d },\n", T(blocktags)[i].id, T(blocktags)[i].size, T(blocktags)[i].selfclose ); printf("};\n\n"); printf("#define NR_blocktags %d\n", S(blocktags)); exit(0); }