File indexing completed on 2024-04-28 11:21:07

0001 #include <stdio.h>
0002 #include "markdown.h"
0003 
0004 struct flagnames {
0005     mkd_flag_t flag;
0006     char *name;
0007 };
0008 
0009 static struct flagnames flagnames[] = {
0010     { MKD_NOLINKS,        "!LINKS" },
0011     { MKD_NOIMAGE,        "!IMAGE" },
0012     { MKD_NOPANTS,        "!PANTS" },
0013     { MKD_NOHTML,         "!HTML" },
0014     { MKD_STRICT,         "STRICT" },
0015     { MKD_TAGTEXT,        "TAGTEXT" },
0016     { MKD_NO_EXT,         "!EXT" },
0017     { MKD_CDATA,          "CDATA" },
0018     { MKD_NOSUPERSCRIPT,  "!SUPERSCRIPT" },
0019     { MKD_NORELAXED,      "!RELAXED" },
0020     { MKD_NOTABLES,       "!TABLES" },
0021     { MKD_NOSTRIKETHROUGH,"!STRIKETHROUGH" },
0022     { MKD_TOC,            "TOC" },
0023     { MKD_1_COMPAT,       "MKD_1_COMPAT" },
0024     { MKD_AUTOLINK,       "AUTOLINK" },
0025     { MKD_SAFELINK,       "SAFELINK" },
0026     { MKD_NOHEADER,       "!HEADER" },
0027     { MKD_TABSTOP,        "TABSTOP" },
0028     { MKD_NODIVQUOTE,     "!DIVQUOTE" },
0029     { MKD_NOALPHALIST,    "!ALPHALIST" },
0030     { MKD_NODLIST,        "!DLIST" },
0031     { MKD_EXTRA_FOOTNOTE, "FOOTNOTE" },
0032     { MKD_NOSTYLE,        "!STYLE" },
0033     { MKD_NODLDISCOUNT,   "!DLDISCOUNT" },
0034     { MKD_DLEXTRA,        "DLEXTRA" },
0035     { MKD_FENCEDCODE,     "FENCEDCODE" },
0036     { MKD_IDANCHOR,       "IDANCHOR" },
0037     { MKD_GITHUBTAGS,     "GITHUBTAGS" },
0038     { MKD_URLENCODEDANCHOR, "URLENCODEDANCHOR" },
0039     { MKD_LATEX,          "LATEX" },
0040     { MKD_EXPLICITLIST,   "EXPLICITLIST" },
0041 };
0042 #define NR(x)   (sizeof x/sizeof x[0])
0043 
0044 
0045 void
0046 mkd_flags_are(FILE *f, mkd_flag_t flags, int htmlplease)
0047 {
0048     int i;
0049     int not, set, even=1;
0050     char *name;
0051 
0052     if ( htmlplease )
0053     fprintf(f, "<table class=\"mkd_flags_are\">\n");
0054     for (i=0; i < NR(flagnames); i++) {
0055     set = flags & flagnames[i].flag;
0056     name = flagnames[i].name;
0057     if ( not = (*name == '!') ) {
0058         ++name;
0059         set = !set;
0060     }
0061 
0062     if ( htmlplease ) {
0063         if ( even ) fprintf(f, " <tr>");
0064         fprintf(f, "<td>");
0065     }
0066     else
0067         fputc(' ', f);
0068 
0069     if ( !set )
0070         fprintf(f, htmlplease ? "<s>" : "!");
0071 
0072     fprintf(f, "%s", name);
0073 
0074     if ( htmlplease ) {
0075         if ( !set )
0076         fprintf(f, "</s>");
0077         fprintf(f, "</td>");
0078         if ( !even ) fprintf(f, "</tr>\n");
0079     }
0080     even = !even;
0081     }
0082     if ( htmlplease ) {
0083     if ( even ) fprintf(f, "</tr>\n");
0084     fprintf(f, "</table>\n");
0085     }
0086 }
0087 
0088 void
0089 mkd_mmiot_flags(FILE *f, MMIOT *m, int htmlplease)
0090 {
0091     if ( m )
0092     mkd_flags_are(f, m->flags, htmlplease);
0093 }