node.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. showdown.subParser('makeMarkdown.node', function (node, globals, spansOnly) {
  2. 'use strict';
  3. spansOnly = spansOnly || false;
  4. var txt = '';
  5. // edge case of text without wrapper paragraph
  6. if (node.nodeType === 3) {
  7. return showdown.subParser('makeMarkdown.txt')(node, globals);
  8. }
  9. // HTML comment
  10. if (node.nodeType === 8) {
  11. return '<!--' + node.data + '-->\n\n';
  12. }
  13. // process only node elements
  14. if (node.nodeType !== 1) {
  15. return '';
  16. }
  17. var tagName = node.tagName.toLowerCase();
  18. switch (tagName) {
  19. //
  20. // BLOCKS
  21. //
  22. case 'h1':
  23. if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 1) + '\n\n'; }
  24. break;
  25. case 'h2':
  26. if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 2) + '\n\n'; }
  27. break;
  28. case 'h3':
  29. if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 3) + '\n\n'; }
  30. break;
  31. case 'h4':
  32. if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 4) + '\n\n'; }
  33. break;
  34. case 'h5':
  35. if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 5) + '\n\n'; }
  36. break;
  37. case 'h6':
  38. if (!spansOnly) { txt = showdown.subParser('makeMarkdown.header')(node, globals, 6) + '\n\n'; }
  39. break;
  40. case 'p':
  41. if (!spansOnly) { txt = showdown.subParser('makeMarkdown.paragraph')(node, globals) + '\n\n'; }
  42. break;
  43. case 'blockquote':
  44. if (!spansOnly) { txt = showdown.subParser('makeMarkdown.blockquote')(node, globals) + '\n\n'; }
  45. break;
  46. case 'hr':
  47. if (!spansOnly) { txt = showdown.subParser('makeMarkdown.hr')(node, globals) + '\n\n'; }
  48. break;
  49. case 'ol':
  50. if (!spansOnly) { txt = showdown.subParser('makeMarkdown.list')(node, globals, 'ol') + '\n\n'; }
  51. break;
  52. case 'ul':
  53. if (!spansOnly) { txt = showdown.subParser('makeMarkdown.list')(node, globals, 'ul') + '\n\n'; }
  54. break;
  55. case 'precode':
  56. if (!spansOnly) { txt = showdown.subParser('makeMarkdown.codeBlock')(node, globals) + '\n\n'; }
  57. break;
  58. case 'pre':
  59. if (!spansOnly) { txt = showdown.subParser('makeMarkdown.pre')(node, globals) + '\n\n'; }
  60. break;
  61. case 'table':
  62. if (!spansOnly) { txt = showdown.subParser('makeMarkdown.table')(node, globals) + '\n\n'; }
  63. break;
  64. //
  65. // SPANS
  66. //
  67. case 'code':
  68. txt = showdown.subParser('makeMarkdown.codeSpan')(node, globals);
  69. break;
  70. case 'em':
  71. case 'i':
  72. txt = showdown.subParser('makeMarkdown.emphasis')(node, globals);
  73. break;
  74. case 'strong':
  75. case 'b':
  76. txt = showdown.subParser('makeMarkdown.strong')(node, globals);
  77. break;
  78. case 'del':
  79. txt = showdown.subParser('makeMarkdown.strikethrough')(node, globals);
  80. break;
  81. case 'a':
  82. txt = showdown.subParser('makeMarkdown.anchors')(node, globals);
  83. break;
  84. case 'img':
  85. txt = showdown.subParser('makeMarkdown.image')(node, globals);
  86. break;
  87. default:
  88. txt = node.outerHTML + '\n\n';
  89. }
  90. // common normalization
  91. // TODO eventually
  92. return txt;
  93. });