flags.c 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #include <stdio.h>
  2. #include "markdown.h"
  3. struct flagnames {
  4. DWORD flag;
  5. char *name;
  6. };
  7. static struct flagnames flagnames[] = {
  8. { MKD_NOLINKS, "!LINKS" },
  9. { MKD_NOIMAGE, "!IMAGE" },
  10. { MKD_NOPANTS, "!PANTS" },
  11. { MKD_NOHTML, "!HTML" },
  12. { MKD_STRICT, "STRICT" },
  13. { MKD_TAGTEXT, "TAGTEXT" },
  14. { MKD_NO_EXT, "!EXT" },
  15. { MKD_CDATA, "CDATA" },
  16. { MKD_NOSUPERSCRIPT, "!SUPERSCRIPT" },
  17. { MKD_NORELAXED, "!RELAXED" },
  18. { MKD_NOTABLES, "!TABLES" },
  19. { MKD_NOSTRIKETHROUGH,"!STRIKETHROUGH" },
  20. { MKD_TOC, "TOC" },
  21. { MKD_1_COMPAT, "MKD_1_COMPAT" },
  22. { MKD_AUTOLINK, "AUTOLINK" },
  23. { MKD_SAFELINK, "SAFELINK" },
  24. { MKD_NOHEADER, "!HEADER" },
  25. { MKD_TABSTOP, "TABSTOP" },
  26. { MKD_NODIVQUOTE, "!DIVQUOTE" },
  27. { MKD_NOALPHALIST, "!ALPHALIST" },
  28. { MKD_NODLIST, "!DLIST" },
  29. { MKD_EXTRA_FOOTNOTE, "FOOTNOTE" },
  30. { MKD_NOSTYLE, "!STYLE" },
  31. { MKD_NODLDISCOUNT, "!DLDISCOUNT" },
  32. { MKD_DLEXTRA, "DLEXTRA" },
  33. { MKD_FENCEDCODE, "FENCEDCODE" },
  34. { MKD_IDANCHOR, "IDANCHOR" },
  35. { MKD_GITHUBTAGS, "GITHUBTAGS" },
  36. { MKD_URLENCODEDANCHOR, "URLENCODEDANCHOR" },
  37. };
  38. #define NR(x) (sizeof x/sizeof x[0])
  39. void
  40. mkd_flags_are(FILE *f, DWORD flags, int htmlplease)
  41. {
  42. int i;
  43. int not, set, even=1;
  44. char *name;
  45. if ( htmlplease )
  46. fprintf(f, "<table class=\"mkd_flags_are\">\n");
  47. for (i=0; i < NR(flagnames); i++) {
  48. set = flags & flagnames[i].flag;
  49. name = flagnames[i].name;
  50. if ( not = (*name == '!') ) {
  51. ++name;
  52. set = !set;
  53. }
  54. if ( htmlplease ) {
  55. if ( even ) fprintf(f, " <tr>");
  56. fprintf(f, "<td>");
  57. }
  58. else
  59. fputc(' ', f);
  60. if ( !set )
  61. fprintf(f, htmlplease ? "<s>" : "!");
  62. fprintf(f, "%s", name);
  63. if ( htmlplease ) {
  64. if ( !set )
  65. fprintf(f, "</s>");
  66. fprintf(f, "</td>");
  67. if ( !even ) fprintf(f, "</tr>\n");
  68. }
  69. even = !even;
  70. }
  71. if ( htmlplease ) {
  72. if ( even ) fprintf(f, "</tr>\n");
  73. fprintf(f, "</table>\n");
  74. }
  75. }
  76. void
  77. mkd_mmiot_flags(FILE *f, MMIOT *m, int htmlplease)
  78. {
  79. if ( m )
  80. mkd_flags_are(f, m->flags, htmlplease);
  81. }