#include #include "markdown.h" struct flagnames { int flag; char *name; }; static struct flagnames flagnames[] = { { MKD_NOLINKS, "!LINKS" }, { MKD_NOIMAGE, "!IMAGE" }, { MKD_NOPANTS, "!PANTS" }, { MKD_NOHTML, "!HTML" }, { MKD_TAGTEXT, "TAGTEXT" }, { MKD_NO_EXT, "!EXT" }, { MKD_CDATA, "CDATA" }, { MKD_NOSUPERSCRIPT, "!SUPERSCRIPT" }, { MKD_STRICT, "STRICT" }, { MKD_NOTABLES, "!TABLES" }, { MKD_NOSTRIKETHROUGH,"!STRIKETHROUGH" }, { MKD_TOC, "TOC" }, { MKD_1_COMPAT, "MKD_1_COMPAT" }, { MKD_AUTOLINK, "AUTOLINK" }, { MKD_SAFELINK, "SAFELINK" }, { MKD_NOHEADER, "!HEADER" }, { MKD_TABSTOP, "TABSTOP" }, { MKD_NODIVQUOTE, "!DIVQUOTE" }, { MKD_NOALPHALIST, "!ALPHALIST" }, { MKD_EXTRA_FOOTNOTE, "FOOTNOTE" }, { MKD_NOSTYLE, "!STYLE" }, { MKD_DLDISCOUNT, "DLDISCOUNT" }, { MKD_DLEXTRA, "DLEXTRA" }, { MKD_FENCEDCODE, "FENCEDCODE" }, { MKD_IDANCHOR, "IDANCHOR" }, { MKD_GITHUBTAGS, "GITHUBTAGS" }, { MKD_NORMAL_LISTITEM, "NORMAL_LISTITEM" }, { MKD_URLENCODEDANCHOR, "URLENCODEDANCHOR" }, { MKD_LATEX, "LATEX" }, { MKD_EXPLICITLIST, "EXPLICITLIST" }, { MKD_ALT_AS_TITLE, "ALT_AS_TITLE" }, { MKD_EXTENDED_ATTR, "EXTENDED_ATTR" }, { MKD_HTML5, "HTML5" }, }; #define NR(x) (sizeof x/sizeof x[0]) int mkd_flag_isset(mkd_flag_t *flags, int i) { return flags ? is_flag_set(flags, i) : 0; } void mkd_flags_are(FILE *f, mkd_flag_t* flags, int htmlplease) { int i; int not, set, even=1; char *name; if ( htmlplease ) fprintf(f, "\n"); for (i=0; i < NR(flagnames); i++) { set = mkd_flag_isset(flags, flagnames[i].flag); name = flagnames[i].name; if ( not = (*name == '!') ) { ++name; set = !set; } if ( htmlplease ) { if ( even ) fprintf(f, " "); fprintf(f, ""); if ( !even ) fprintf(f, "\n"); } even = !even; } if ( htmlplease ) { if ( even ) fprintf(f, "\n"); fprintf(f, "
"); } else fputc(' ', f); if ( !set ) fprintf(f, htmlplease ? "" : "!"); fprintf(f, "%s", name); if ( htmlplease ) { if ( !set ) fprintf(f, ""); fprintf(f, "
\n"); } } void mkd_mmiot_flags(FILE *f, MMIOT *m, int htmlplease) { if ( m ) mkd_flags_are(f, &(m->flags), htmlplease); } void mkd_init_flags(mkd_flag_t *p) { memset(p, 0, sizeof(*p)); } mkd_flag_t * mkd_flags(void) { mkd_flag_t *p = calloc( 1, sizeof(mkd_flag_t) ); if ( p ) mkd_init_flags(p); return p; } mkd_flag_t * mkd_copy_flags(mkd_flag_t *original) { mkd_flag_t *copy = mkd_flags(); if ( original && copy ) *copy = *original; return copy; } void mkd_free_flags(mkd_flag_t *rip) { if (rip) free(rip); }