rpeg-multimarkdown2 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (269) hide show
  1. data/LICENSE +96 -0
  2. data/README.markdown +52 -0
  3. data/Rakefile +167 -0
  4. data/bin/rpeg-multimarkdown2 +128 -0
  5. data/ext/extconf.h +3 -0
  6. data/ext/extconf.rb +15 -0
  7. data/ext/markdown.c +102 -0
  8. data/ext/markdown_lib.c +265 -0
  9. data/ext/markdown_lib.h +33 -0
  10. data/ext/markdown_output.c +2832 -0
  11. data/ext/markdown_parser.c +9091 -0
  12. data/ext/markdown_peg.h +144 -0
  13. data/ext/odf.c +183 -0
  14. data/ext/odf.h +3 -0
  15. data/ext/parsing_functions.c +199 -0
  16. data/ext/utility_functions.c +566 -0
  17. data/lib/multimarkdown2.rb +1 -0
  18. data/lib/peg_multimarkdown.rb +74 -0
  19. data/test/MultiMarkdownTest/BeamerTests/Beamer-Tables.html +76 -0
  20. data/test/MultiMarkdownTest/BeamerTests/Beamer-Tables.tex +64 -0
  21. data/test/MultiMarkdownTest/BeamerTests/Beamer-Tables.text +38 -0
  22. data/test/MultiMarkdownTest/CompatibilityTests/Automatic Labels.html +35 -0
  23. data/test/MultiMarkdownTest/CompatibilityTests/Automatic Labels.text +45 -0
  24. data/test/MultiMarkdownTest/CompatibilityTests/Base Header Level.html +14 -0
  25. data/test/MultiMarkdownTest/CompatibilityTests/Base Header Level.text +16 -0
  26. data/test/MultiMarkdownTest/CompatibilityTests/BibTeX.html +9 -0
  27. data/test/MultiMarkdownTest/CompatibilityTests/BibTeX.text +10 -0
  28. data/test/MultiMarkdownTest/CompatibilityTests/Citations.html +40 -0
  29. data/test/MultiMarkdownTest/CompatibilityTests/Citations.text +42 -0
  30. data/test/MultiMarkdownTest/CompatibilityTests/Definition Lists.html +40 -0
  31. data/test/MultiMarkdownTest/CompatibilityTests/Definition Lists.text +39 -0
  32. data/test/MultiMarkdownTest/CompatibilityTests/Dutch.html +17 -0
  33. data/test/MultiMarkdownTest/CompatibilityTests/Dutch.text +17 -0
  34. data/test/MultiMarkdownTest/CompatibilityTests/Email.html +40 -0
  35. data/test/MultiMarkdownTest/CompatibilityTests/Email.text +31 -0
  36. data/test/MultiMarkdownTest/CompatibilityTests/English.html +17 -0
  37. data/test/MultiMarkdownTest/CompatibilityTests/English.text +17 -0
  38. data/test/MultiMarkdownTest/CompatibilityTests/Errors.html +9 -0
  39. data/test/MultiMarkdownTest/CompatibilityTests/Errors.text +11 -0
  40. data/test/MultiMarkdownTest/CompatibilityTests/Footnotes.html +23 -0
  41. data/test/MultiMarkdownTest/CompatibilityTests/Footnotes.text +25 -0
  42. data/test/MultiMarkdownTest/CompatibilityTests/French.html +17 -0
  43. data/test/MultiMarkdownTest/CompatibilityTests/French.text +17 -0
  44. data/test/MultiMarkdownTest/CompatibilityTests/German.html +17 -0
  45. data/test/MultiMarkdownTest/CompatibilityTests/German.text +17 -0
  46. data/test/MultiMarkdownTest/CompatibilityTests/GermanGuillemets.html +17 -0
  47. data/test/MultiMarkdownTest/CompatibilityTests/GermanGuillemets.text +17 -0
  48. data/test/MultiMarkdownTest/CompatibilityTests/Glossary.html +29 -0
  49. data/test/MultiMarkdownTest/CompatibilityTests/Glossary.text +28 -0
  50. data/test/MultiMarkdownTest/CompatibilityTests/Headers.html +42 -0
  51. data/test/MultiMarkdownTest/CompatibilityTests/Headers.text +51 -0
  52. data/test/MultiMarkdownTest/CompatibilityTests/Line Breaks.html +13 -0
  53. data/test/MultiMarkdownTest/CompatibilityTests/Line Breaks.text +15 -0
  54. data/test/MultiMarkdownTest/CompatibilityTests/Link Attributes.html +35 -0
  55. data/test/MultiMarkdownTest/CompatibilityTests/Link Attributes.text +51 -0
  56. data/test/MultiMarkdownTest/CompatibilityTests/List Parsing.html +13 -0
  57. data/test/MultiMarkdownTest/CompatibilityTests/List Parsing.text +11 -0
  58. data/test/MultiMarkdownTest/CompatibilityTests/MarkdownInHTML.html +13 -0
  59. data/test/MultiMarkdownTest/CompatibilityTests/MarkdownInHTML.text +19 -0
  60. data/test/MultiMarkdownTest/CompatibilityTests/Math.html +14 -0
  61. data/test/MultiMarkdownTest/CompatibilityTests/Math.text +15 -0
  62. data/test/MultiMarkdownTest/CompatibilityTests/MetaData.html +14 -0
  63. data/test/MultiMarkdownTest/CompatibilityTests/MetaData.text +14 -0
  64. data/test/MultiMarkdownTest/CompatibilityTests/NotMetaData.html +3 -0
  65. data/test/MultiMarkdownTest/CompatibilityTests/NotMetaData.text +4 -0
  66. data/test/MultiMarkdownTest/CompatibilityTests/Sanity.html +77 -0
  67. data/test/MultiMarkdownTest/CompatibilityTests/Sanity.text +77 -0
  68. data/test/MultiMarkdownTest/CompatibilityTests/SmartQuotes.html +22 -0
  69. data/test/MultiMarkdownTest/CompatibilityTests/SmartQuotes.text +22 -0
  70. data/test/MultiMarkdownTest/CompatibilityTests/Swedish.html +17 -0
  71. data/test/MultiMarkdownTest/CompatibilityTests/Swedish.text +17 -0
  72. data/test/MultiMarkdownTest/CompatibilityTests/Tables.html +65 -0
  73. data/test/MultiMarkdownTest/CompatibilityTests/Tables.text +71 -0
  74. data/test/MultiMarkdownTest/MarkdownTest.pl +182 -0
  75. data/test/MultiMarkdownTest/MemoirTests/Automatic Labels.html +42 -0
  76. data/test/MultiMarkdownTest/MemoirTests/Automatic Labels.tex +47 -0
  77. data/test/MultiMarkdownTest/MemoirTests/Automatic Labels.text +46 -0
  78. data/test/MultiMarkdownTest/MemoirTests/Base Header Level.html +20 -0
  79. data/test/MultiMarkdownTest/MemoirTests/Base Header Level.tex +19 -0
  80. data/test/MultiMarkdownTest/MemoirTests/Base Header Level.text +16 -0
  81. data/test/MultiMarkdownTest/MemoirTests/BibTeX.html +17 -0
  82. data/test/MultiMarkdownTest/MemoirTests/BibTeX.tex +12 -0
  83. data/test/MultiMarkdownTest/MemoirTests/BibTeX.text +11 -0
  84. data/test/MultiMarkdownTest/MemoirTests/Citations.html +63 -0
  85. data/test/MultiMarkdownTest/MemoirTests/Citations.tex +48 -0
  86. data/test/MultiMarkdownTest/MemoirTests/Citations.text +43 -0
  87. data/test/MultiMarkdownTest/MemoirTests/Definition Lists.html +61 -0
  88. data/test/MultiMarkdownTest/MemoirTests/Definition Lists.tex +58 -0
  89. data/test/MultiMarkdownTest/MemoirTests/Definition Lists.text +40 -0
  90. data/test/MultiMarkdownTest/MemoirTests/Dutch.html +23 -0
  91. data/test/MultiMarkdownTest/MemoirTests/Dutch.tex +18 -0
  92. data/test/MultiMarkdownTest/MemoirTests/Dutch.text +17 -0
  93. data/test/MultiMarkdownTest/MemoirTests/Email.html +48 -0
  94. data/test/MultiMarkdownTest/MemoirTests/Email.tex +61 -0
  95. data/test/MultiMarkdownTest/MemoirTests/Email.text +32 -0
  96. data/test/MultiMarkdownTest/MemoirTests/English.html +23 -0
  97. data/test/MultiMarkdownTest/MemoirTests/English.tex +18 -0
  98. data/test/MultiMarkdownTest/MemoirTests/English.text +17 -0
  99. data/test/MultiMarkdownTest/MemoirTests/Footnotes.html +47 -0
  100. data/test/MultiMarkdownTest/MemoirTests/Footnotes.tex +28 -0
  101. data/test/MultiMarkdownTest/MemoirTests/Footnotes.text +26 -0
  102. data/test/MultiMarkdownTest/MemoirTests/French.html +23 -0
  103. data/test/MultiMarkdownTest/MemoirTests/French.tex +18 -0
  104. data/test/MultiMarkdownTest/MemoirTests/French.text +17 -0
  105. data/test/MultiMarkdownTest/MemoirTests/German.html +23 -0
  106. data/test/MultiMarkdownTest/MemoirTests/German.tex +18 -0
  107. data/test/MultiMarkdownTest/MemoirTests/German.text +17 -0
  108. data/test/MultiMarkdownTest/MemoirTests/GermanGuillemets.html +23 -0
  109. data/test/MultiMarkdownTest/MemoirTests/GermanGuillemets.tex +18 -0
  110. data/test/MultiMarkdownTest/MemoirTests/GermanGuillemets.text +17 -0
  111. data/test/MultiMarkdownTest/MemoirTests/Glossary.html +47 -0
  112. data/test/MultiMarkdownTest/MemoirTests/Glossary.tex +30 -0
  113. data/test/MultiMarkdownTest/MemoirTests/Glossary.text +29 -0
  114. data/test/MultiMarkdownTest/MemoirTests/Line Breaks.html +21 -0
  115. data/test/MultiMarkdownTest/MemoirTests/Line Breaks.tex +16 -0
  116. data/test/MultiMarkdownTest/MemoirTests/Line Breaks.text +16 -0
  117. data/test/MultiMarkdownTest/MemoirTests/Link Attributes.html +40 -0
  118. data/test/MultiMarkdownTest/MemoirTests/Link Attributes.tex +61 -0
  119. data/test/MultiMarkdownTest/MemoirTests/Link Attributes.text +51 -0
  120. data/test/MultiMarkdownTest/MemoirTests/Math.html +22 -0
  121. data/test/MultiMarkdownTest/MemoirTests/Math.tex +16 -0
  122. data/test/MultiMarkdownTest/MemoirTests/Math.text +16 -0
  123. data/test/MultiMarkdownTest/MemoirTests/Memoir Mode.html +24 -0
  124. data/test/MultiMarkdownTest/MemoirTests/Memoir Mode.tex +23 -0
  125. data/test/MultiMarkdownTest/MemoirTests/Memoir Mode.text +20 -0
  126. data/test/MultiMarkdownTest/MemoirTests/MetaData.html +22 -0
  127. data/test/MultiMarkdownTest/MemoirTests/MetaData.tex +14 -0
  128. data/test/MultiMarkdownTest/MemoirTests/MetaData.text +15 -0
  129. data/test/MultiMarkdownTest/MemoirTests/Sanity.html +100 -0
  130. data/test/MultiMarkdownTest/MemoirTests/Sanity.tex +101 -0
  131. data/test/MultiMarkdownTest/MemoirTests/Sanity.text +78 -0
  132. data/test/MultiMarkdownTest/MemoirTests/SmartQuotes.html +26 -0
  133. data/test/MultiMarkdownTest/MemoirTests/SmartQuotes.tex +21 -0
  134. data/test/MultiMarkdownTest/MemoirTests/SmartQuotes.text +19 -0
  135. data/test/MultiMarkdownTest/MemoirTests/Swedish.html +23 -0
  136. data/test/MultiMarkdownTest/MemoirTests/Swedish.tex +18 -0
  137. data/test/MultiMarkdownTest/MemoirTests/Swedish.text +17 -0
  138. data/test/MultiMarkdownTest/MemoirTests/Tables.html +221 -0
  139. data/test/MultiMarkdownTest/MemoirTests/Tables.tex +134 -0
  140. data/test/MultiMarkdownTest/MemoirTests/Tables.text +64 -0
  141. data/test/MultiMarkdownTest/MultiMarkdownTests/Automatic Labels.html +43 -0
  142. data/test/MultiMarkdownTest/MultiMarkdownTests/Automatic Labels.tex +46 -0
  143. data/test/MultiMarkdownTest/MultiMarkdownTests/Automatic Labels.text +45 -0
  144. data/test/MultiMarkdownTest/MultiMarkdownTests/Base Header Level.html +22 -0
  145. data/test/MultiMarkdownTest/MultiMarkdownTests/Base Header Level.tex +19 -0
  146. data/test/MultiMarkdownTest/MultiMarkdownTests/Base Header Level.text +16 -0
  147. data/test/MultiMarkdownTest/MultiMarkdownTests/BibTeX.html +18 -0
  148. data/test/MultiMarkdownTest/MultiMarkdownTests/BibTeX.tex +11 -0
  149. data/test/MultiMarkdownTest/MultiMarkdownTests/BibTex.text +10 -0
  150. data/test/MultiMarkdownTest/MultiMarkdownTests/Citations.html +64 -0
  151. data/test/MultiMarkdownTest/MultiMarkdownTests/Citations.tex +47 -0
  152. data/test/MultiMarkdownTest/MultiMarkdownTests/Citations.text +42 -0
  153. data/test/MultiMarkdownTest/MultiMarkdownTests/Definition Lists.html +57 -0
  154. data/test/MultiMarkdownTest/MultiMarkdownTests/Definition Lists.tex +57 -0
  155. data/test/MultiMarkdownTest/MultiMarkdownTests/Definition Lists.text +39 -0
  156. data/test/MultiMarkdownTest/MultiMarkdownTests/Dutch.html +25 -0
  157. data/test/MultiMarkdownTest/MultiMarkdownTests/Dutch.tex +18 -0
  158. data/test/MultiMarkdownTest/MultiMarkdownTests/Dutch.text +17 -0
  159. data/test/MultiMarkdownTest/MultiMarkdownTests/Email.html +49 -0
  160. data/test/MultiMarkdownTest/MultiMarkdownTests/Email.tex +54 -0
  161. data/test/MultiMarkdownTest/MultiMarkdownTests/Email.text +31 -0
  162. data/test/MultiMarkdownTest/MultiMarkdownTests/English.html +25 -0
  163. data/test/MultiMarkdownTest/MultiMarkdownTests/English.tex +18 -0
  164. data/test/MultiMarkdownTest/MultiMarkdownTests/English.text +17 -0
  165. data/test/MultiMarkdownTest/MultiMarkdownTests/Errors.html +18 -0
  166. data/test/MultiMarkdownTest/MultiMarkdownTests/Errors.tex +11 -0
  167. data/test/MultiMarkdownTest/MultiMarkdownTests/Errors.text +11 -0
  168. data/test/MultiMarkdownTest/MultiMarkdownTests/Footnotes.html +48 -0
  169. data/test/MultiMarkdownTest/MultiMarkdownTests/Footnotes.tex +24 -0
  170. data/test/MultiMarkdownTest/MultiMarkdownTests/Footnotes.text +25 -0
  171. data/test/MultiMarkdownTest/MultiMarkdownTests/French.html +25 -0
  172. data/test/MultiMarkdownTest/MultiMarkdownTests/French.tex +18 -0
  173. data/test/MultiMarkdownTest/MultiMarkdownTests/French.text +17 -0
  174. data/test/MultiMarkdownTest/MultiMarkdownTests/German.html +25 -0
  175. data/test/MultiMarkdownTest/MultiMarkdownTests/German.tex +18 -0
  176. data/test/MultiMarkdownTest/MultiMarkdownTests/German.text +17 -0
  177. data/test/MultiMarkdownTest/MultiMarkdownTests/GermanGuillemets.html +25 -0
  178. data/test/MultiMarkdownTest/MultiMarkdownTests/GermanGuillemets.tex +18 -0
  179. data/test/MultiMarkdownTest/MultiMarkdownTests/GermanGuillemets.text +17 -0
  180. data/test/MultiMarkdownTest/MultiMarkdownTests/Glossary.html +48 -0
  181. data/test/MultiMarkdownTest/MultiMarkdownTests/Glossary.tex +26 -0
  182. data/test/MultiMarkdownTest/MultiMarkdownTests/Glossary.text +28 -0
  183. data/test/MultiMarkdownTest/MultiMarkdownTests/Headers.html +50 -0
  184. data/test/MultiMarkdownTest/MultiMarkdownTests/Headers.tex +54 -0
  185. data/test/MultiMarkdownTest/MultiMarkdownTests/Headers.text +51 -0
  186. data/test/MultiMarkdownTest/MultiMarkdownTests/Line Breaks.html +22 -0
  187. data/test/MultiMarkdownTest/MultiMarkdownTests/Line Breaks.tex +15 -0
  188. data/test/MultiMarkdownTest/MultiMarkdownTests/Line Breaks.text +15 -0
  189. data/test/MultiMarkdownTest/MultiMarkdownTests/Link Attributes.html +56 -0
  190. data/test/MultiMarkdownTest/MultiMarkdownTests/Link Attributes.tex +60 -0
  191. data/test/MultiMarkdownTest/MultiMarkdownTests/Link Attributes.text +50 -0
  192. data/test/MultiMarkdownTest/MultiMarkdownTests/List Parsing.html +22 -0
  193. data/test/MultiMarkdownTest/MultiMarkdownTests/List Parsing.tex +17 -0
  194. data/test/MultiMarkdownTest/MultiMarkdownTests/List Parsing.text +11 -0
  195. data/test/MultiMarkdownTest/MultiMarkdownTests/MarkdownInHTML.html +21 -0
  196. data/test/MultiMarkdownTest/MultiMarkdownTests/MarkdownInHTML.tex +13 -0
  197. data/test/MultiMarkdownTest/MultiMarkdownTests/MarkdownInHTML.text +19 -0
  198. data/test/MultiMarkdownTest/MultiMarkdownTests/Math.html +23 -0
  199. data/test/MultiMarkdownTest/MultiMarkdownTests/Math.tex +15 -0
  200. data/test/MultiMarkdownTest/MultiMarkdownTests/Math.text +15 -0
  201. data/test/MultiMarkdownTest/MultiMarkdownTests/MetaData.html +23 -0
  202. data/test/MultiMarkdownTest/MultiMarkdownTests/MetaData.tex +13 -0
  203. data/test/MultiMarkdownTest/MultiMarkdownTests/MetaData.text +14 -0
  204. data/test/MultiMarkdownTest/MultiMarkdownTests/NotMetaData.html +3 -0
  205. data/test/MultiMarkdownTest/MultiMarkdownTests/NotMetaData.tex +3 -0
  206. data/test/MultiMarkdownTest/MultiMarkdownTests/NotMetaData.text +4 -0
  207. data/test/MultiMarkdownTest/MultiMarkdownTests/Sanity.html +106 -0
  208. data/test/MultiMarkdownTest/MultiMarkdownTests/Sanity.tex +100 -0
  209. data/test/MultiMarkdownTest/MultiMarkdownTests/Sanity.text +77 -0
  210. data/test/MultiMarkdownTest/MultiMarkdownTests/SmartQuotes.html +31 -0
  211. data/test/MultiMarkdownTest/MultiMarkdownTests/SmartQuotes.tex +24 -0
  212. data/test/MultiMarkdownTest/MultiMarkdownTests/SmartQuotes.text +22 -0
  213. data/test/MultiMarkdownTest/MultiMarkdownTests/Swedish.html +25 -0
  214. data/test/MultiMarkdownTest/MultiMarkdownTests/Swedish.tex +18 -0
  215. data/test/MultiMarkdownTest/MultiMarkdownTests/Swedish.text +17 -0
  216. data/test/MultiMarkdownTest/MultiMarkdownTests/Tables.html +273 -0
  217. data/test/MultiMarkdownTest/MultiMarkdownTests/Tables.tex +155 -0
  218. data/test/MultiMarkdownTest/MultiMarkdownTests/Tables.text +71 -0
  219. data/test/MultiMarkdownTest/MultiMarkdownTests/bibtex.bib +119 -0
  220. data/test/MultiMarkdownTest/README.md +58 -0
  221. data/test/MultiMarkdownTest/Tests/Amps and angle encoding.html +17 -0
  222. data/test/MultiMarkdownTest/Tests/Amps and angle encoding.text +21 -0
  223. data/test/MultiMarkdownTest/Tests/Auto links.html +18 -0
  224. data/test/MultiMarkdownTest/Tests/Auto links.text +13 -0
  225. data/test/MultiMarkdownTest/Tests/Backslash escapes.html +118 -0
  226. data/test/MultiMarkdownTest/Tests/Backslash escapes.text +120 -0
  227. data/test/MultiMarkdownTest/Tests/Blockquotes with code blocks.html +15 -0
  228. data/test/MultiMarkdownTest/Tests/Blockquotes with code blocks.text +11 -0
  229. data/test/MultiMarkdownTest/Tests/Code Blocks.html +18 -0
  230. data/test/MultiMarkdownTest/Tests/Code Blocks.text +14 -0
  231. data/test/MultiMarkdownTest/Tests/Code Spans.html +6 -0
  232. data/test/MultiMarkdownTest/Tests/Code Spans.text +6 -0
  233. data/test/MultiMarkdownTest/Tests/Compatibility.html +5 -0
  234. data/test/MultiMarkdownTest/Tests/Compatibility.text +9 -0
  235. data/test/MultiMarkdownTest/Tests/Hard-wrapped paragraphs with list-like lines.html +8 -0
  236. data/test/MultiMarkdownTest/Tests/Hard-wrapped paragraphs with list-like lines.text +8 -0
  237. data/test/MultiMarkdownTest/Tests/Horizontal rules.html +71 -0
  238. data/test/MultiMarkdownTest/Tests/Horizontal rules.text +67 -0
  239. data/test/MultiMarkdownTest/Tests/Inline HTML (Advanced).html +15 -0
  240. data/test/MultiMarkdownTest/Tests/Inline HTML (Advanced).text +15 -0
  241. data/test/MultiMarkdownTest/Tests/Inline HTML (Simple).html +72 -0
  242. data/test/MultiMarkdownTest/Tests/Inline HTML (Simple).text +69 -0
  243. data/test/MultiMarkdownTest/Tests/Inline HTML comments.html +13 -0
  244. data/test/MultiMarkdownTest/Tests/Inline HTML comments.text +13 -0
  245. data/test/MultiMarkdownTest/Tests/Links, inline style.html +11 -0
  246. data/test/MultiMarkdownTest/Tests/Links, inline style.text +12 -0
  247. data/test/MultiMarkdownTest/Tests/Links, reference style.html +52 -0
  248. data/test/MultiMarkdownTest/Tests/Links, reference style.text +71 -0
  249. data/test/MultiMarkdownTest/Tests/Links, shortcut references.html +9 -0
  250. data/test/MultiMarkdownTest/Tests/Links, shortcut references.text +20 -0
  251. data/test/MultiMarkdownTest/Tests/Literal quotes in titles.html +3 -0
  252. data/test/MultiMarkdownTest/Tests/Literal quotes in titles.text +7 -0
  253. data/test/MultiMarkdownTest/Tests/Markdown Documentation - Basics.html +314 -0
  254. data/test/MultiMarkdownTest/Tests/Markdown Documentation - Basics.text +306 -0
  255. data/test/MultiMarkdownTest/Tests/Markdown Documentation - Syntax.html +942 -0
  256. data/test/MultiMarkdownTest/Tests/Markdown Documentation - Syntax.text +888 -0
  257. data/test/MultiMarkdownTest/Tests/Nested blockquotes.html +9 -0
  258. data/test/MultiMarkdownTest/Tests/Nested blockquotes.text +5 -0
  259. data/test/MultiMarkdownTest/Tests/Ordered and unordered lists.html +148 -0
  260. data/test/MultiMarkdownTest/Tests/Ordered and unordered lists.text +131 -0
  261. data/test/MultiMarkdownTest/Tests/Strong and em together.html +7 -0
  262. data/test/MultiMarkdownTest/Tests/Strong and em together.text +7 -0
  263. data/test/MultiMarkdownTest/Tests/Tabs.html +25 -0
  264. data/test/MultiMarkdownTest/Tests/Tabs.text +21 -0
  265. data/test/MultiMarkdownTest/Tests/Tidyness.html +8 -0
  266. data/test/MultiMarkdownTest/Tests/Tidyness.text +5 -0
  267. data/test/benchmark.rb +49 -0
  268. data/test/multimarkdown_test.rb +89 -0
  269. metadata +318 -0
@@ -0,0 +1,265 @@
1
+
2
+ /**********************************************************************
3
+
4
+ markdown_lib.c - markdown in C using a PEG grammar.
5
+ (c) 2008 John MacFarlane (jgm at berkeley dot edu).
6
+
7
+ portions Copyright (c) 2010-2011 Fletcher T. Penney
8
+
9
+ This program is free software; you can redistribute it and/or modify
10
+ it under the terms of the GNU General Public License or the MIT
11
+ license. See LICENSE for details.
12
+
13
+ This program is distributed in the hope that it will be useful,
14
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ GNU General Public License for more details.
17
+
18
+ ***********************************************************************/
19
+
20
+ #include <stdio.h>
21
+ #include <stdlib.h>
22
+ #include <string.h>
23
+ #include "markdown_peg.h"
24
+
25
+ #define TABSTOP 4
26
+ #define VERSION "3.7"
27
+
28
+ /* preformat_text - allocate and copy text buffer while
29
+ * performing tab expansion. */
30
+ static GString *preformat_text(char *text) {
31
+ GString *buf;
32
+ char next_char;
33
+ int charstotab;
34
+
35
+ int len = 0;
36
+
37
+ buf = g_string_new("");
38
+
39
+ charstotab = TABSTOP;
40
+ while ((next_char = *text++) != '\0') {
41
+ switch (next_char) {
42
+ case '\t':
43
+ while (charstotab > 0)
44
+ g_string_append_c(buf, ' '), len++, charstotab--;
45
+ break;
46
+ case '\n':
47
+ g_string_append_c(buf, '\n'), len++, charstotab = TABSTOP;
48
+ break;
49
+ default:
50
+ g_string_append_c(buf, next_char), len++, charstotab--;
51
+ }
52
+ if (charstotab == 0)
53
+ charstotab = TABSTOP;
54
+ }
55
+ g_string_append(buf, "\n\n");
56
+ return(buf);
57
+ }
58
+
59
+ /* print_tree - print tree of elements, for debugging only. */
60
+ static void print_tree(element * elt, int indent) {
61
+ int i;
62
+ char * key;
63
+ while (elt != NULL) {
64
+ for (i = 0; i < indent; i++)
65
+ fputc(' ', stderr);
66
+ switch (elt->key) {
67
+ case LIST: key = "LIST"; break;
68
+ case RAW: key = "RAW"; break;
69
+ case SPACE: key = "SPACE"; break;
70
+ case LINEBREAK: key = "LINEBREAK"; break;
71
+ case ELLIPSIS: key = "ELLIPSIS"; break;
72
+ case EMDASH: key = "EMDASH"; break;
73
+ case ENDASH: key = "ENDASH"; break;
74
+ case APOSTROPHE: key = "APOSTROPHE"; break;
75
+ case SINGLEQUOTED: key = "SINGLEQUOTED"; break;
76
+ case DOUBLEQUOTED: key = "DOUBLEQUOTED"; break;
77
+ case STR: key = "STR"; break;
78
+ case LINK: key = "LINK"; break;
79
+ case IMAGE: key = "IMAGE"; break;
80
+ case CODE: key = "CODE"; break;
81
+ case HTML: key = "HTML"; break;
82
+ case EMPH: key = "EMPH"; break;
83
+ case STRONG: key = "STRONG"; break;
84
+ case PLAIN: key = "PLAIN"; break;
85
+ case PARA: key = "PARA"; break;
86
+ case LISTITEM: key = "LISTITEM"; break;
87
+ case BULLETLIST: key = "BULLETLIST"; break;
88
+ case ORDEREDLIST: key = "ORDEREDLIST"; break;
89
+ case H1: key = "H1"; break;
90
+ case H2: key = "H2"; break;
91
+ case H3: key = "H3"; break;
92
+ case H4: key = "H4"; break;
93
+ case H5: key = "H5"; break;
94
+ case H6: key = "H6"; break;
95
+ case BLOCKQUOTE: key = "BLOCKQUOTE"; break;
96
+ case VERBATIM: key = "VERBATIM"; break;
97
+ case HTMLBLOCK: key = "HTMLBLOCK"; break;
98
+ case HRULE: key = "HRULE"; break;
99
+ case REFERENCE: key = "REFERENCE"; break;
100
+ case NOTE: key = "NOTE"; break;
101
+ default: key = "?";
102
+ }
103
+ if ( elt->key == STR ) {
104
+ fprintf(stderr, "0x%p: %s '%s'\n", (void *)elt, key, elt->contents.str);
105
+ } else {
106
+ fprintf(stderr, "0x%p: %s\n", (void *)elt, key);
107
+ }
108
+ if (elt->children)
109
+ print_tree(elt->children, indent + 4);
110
+ elt = elt->next;
111
+ }
112
+ }
113
+
114
+ /* process_raw_blocks - traverses an element list, replacing any RAW elements with
115
+ * the result of parsing them as markdown text, and recursing into the children
116
+ * of parent elements. The result should be a tree of elements without any RAWs. */
117
+ static element * process_raw_blocks(element *input, int extensions, element *references, element *notes, element *labels) {
118
+ element *current = NULL;
119
+ element *last_child = NULL;
120
+ char *contents;
121
+ current = input;
122
+
123
+ while (current != NULL) {
124
+ if (current->key == RAW) {
125
+ /* \001 is used to indicate boundaries between nested lists when there
126
+ * is no blank line. We split the string by \001 and parse
127
+ * each chunk separately. */
128
+ contents = strtok(current->contents.str, "\001");
129
+ current->key = LIST;
130
+ current->children = parse_markdown(contents, extensions, references, notes, labels);
131
+ last_child = current->children;
132
+ while ((contents = strtok(NULL, "\001"))) {
133
+ while (last_child->next != NULL)
134
+ last_child = last_child->next;
135
+ last_child->next = parse_markdown(contents, extensions, references, notes, labels);
136
+ }
137
+ free(current->contents.str);
138
+ current->contents.str = NULL;
139
+ }
140
+ if (current->children != NULL)
141
+ current->children = process_raw_blocks(current->children, extensions, references, notes, labels);
142
+ current = current->next;
143
+ }
144
+ return input;
145
+ }
146
+
147
+ /* markdown_to_gstring - convert markdown text to the output format specified.
148
+ * Returns a GString, which must be freed after use using g_string_free(). */
149
+ GString * markdown_to_g_string(char *text, int extensions, int output_format) {
150
+ element *result;
151
+ element *references;
152
+ element *notes;
153
+ element *labels;
154
+ GString *formatted_text;
155
+ GString *out;
156
+ out = g_string_new("");
157
+
158
+ formatted_text = preformat_text(text);
159
+
160
+ references = parse_references(formatted_text->str, extensions);
161
+ notes = parse_notes(formatted_text->str, extensions, references);
162
+ labels = parse_labels(formatted_text->str, extensions, references, notes);
163
+
164
+ if (output_format == OPML_FORMAT) {
165
+ result = parse_markdown_for_opml(formatted_text->str, extensions);
166
+ } else {
167
+ result = parse_markdown_with_metadata(formatted_text->str, extensions, references, notes, labels);
168
+ result = process_raw_blocks(result, extensions, references, notes, labels);
169
+ }
170
+
171
+ g_string_free(formatted_text, TRUE);
172
+
173
+ if (result == NULL) {
174
+ /* The parsing was aborted */
175
+ g_string_append(out,"MultiMarkdown was unable to parse this file.");
176
+ } else {
177
+ print_element_list(out, result, output_format, extensions);
178
+ }
179
+ free_element_list(result);
180
+
181
+ free_element_list(references);
182
+ free_element_list(labels);
183
+
184
+ return out;
185
+ }
186
+
187
+ /* markdown_to_string - convert markdown text to the output format specified.
188
+ * Returns a null-terminated string, which must be freed after use. */
189
+ char * markdown_to_string(char *text, int extensions, int output_format) {
190
+ GString *out;
191
+ char *char_out;
192
+ out = markdown_to_g_string(text, extensions, output_format);
193
+ char_out = out->str;
194
+ g_string_free(out, FALSE);
195
+ return char_out;
196
+ }
197
+
198
+ /* vim:set ts=4 sw=4: */
199
+
200
+ /* extract_metadata_value - parse document and return value of specified
201
+ metadata key (e.g. "LateX Mode")/
202
+ Returns a null-terminated string, which must be freed after use. */
203
+ char * extract_metadata_value(char *text, int extensions, char *key) {
204
+ char *value;
205
+ element *result;
206
+ element *references;
207
+ element *notes;
208
+ element *labels;
209
+ GString *formatted_text;
210
+
211
+ formatted_text = preformat_text(text);
212
+
213
+ references = parse_references(formatted_text->str, extensions);
214
+ notes = parse_notes(formatted_text->str, extensions, references);
215
+ labels = parse_labels(formatted_text->str, extensions, references, notes);
216
+
217
+ result = parse_metadata_only(formatted_text->str, extensions);
218
+
219
+ value = metavalue_for_key(key, result);
220
+ free_element_list(result);
221
+ free_element_list(references);
222
+ free_element_list(labels);
223
+
224
+ return value;
225
+ }
226
+
227
+ /* has_metadata - parse document and report whether metadata is present */
228
+ gboolean has_metadata(char *text, int extensions) {
229
+ gboolean hasMeta;
230
+ element *result;
231
+ element *references;
232
+ element *notes;
233
+ element *labels;
234
+ GString *formatted_text;
235
+
236
+ formatted_text = preformat_text(text);
237
+
238
+ references = parse_references(formatted_text->str, extensions);
239
+ notes = parse_notes(formatted_text->str, extensions, references);
240
+ labels = parse_labels(formatted_text->str, extensions, references, notes);
241
+
242
+ result = parse_metadata_only(formatted_text->str, extensions);
243
+
244
+ hasMeta = FALSE;
245
+
246
+ if (result != NULL) {
247
+ if (result->children != NULL) {
248
+ hasMeta = TRUE;
249
+ free_element_list(result);
250
+ } else {
251
+ free_element(result);
252
+ }
253
+ }
254
+
255
+ free_element_list(references);
256
+ free_element_list(labels);
257
+ return hasMeta;
258
+ }
259
+
260
+ /* version - return the MultiMarkdown library version */
261
+ char * mmd_version() {
262
+ char* result = (char*)malloc(8);
263
+ sprintf(result, "%s",VERSION);
264
+ return result;
265
+ }
@@ -0,0 +1,33 @@
1
+ #include <stdlib.h>
2
+ #include <stdio.h>
3
+ #include "glib.h"
4
+
5
+ enum markdown_extensions {
6
+ EXT_SMART = 1 << 0,
7
+ EXT_NOTES = 1 << 1,
8
+ EXT_FILTER_HTML = 1 << 2,
9
+ EXT_FILTER_STYLES = 1 << 3,
10
+ EXT_COMPATIBILITY = 1 << 4,
11
+ EXT_PROCESS_HTML = 1 << 5,
12
+ EXT_NO_LABELS = 1 << 6,
13
+ };
14
+
15
+ enum markdown_formats {
16
+ HTML_FORMAT,
17
+ LATEX_FORMAT,
18
+ MEMOIR_FORMAT,
19
+ BEAMER_FORMAT,
20
+ OPML_FORMAT,
21
+ GROFF_MM_FORMAT,
22
+ ODF_FORMAT,
23
+ ODF_BODY_FORMAT,
24
+ ORIGINAL_FORMAT
25
+ };
26
+
27
+ GString * markdown_to_g_string(char *text, int extensions, int output_format);
28
+ char * markdown_to_string(char *text, int extensions, int output_format);
29
+ char * extract_metadata_value(char *text, int extensions, char *key);
30
+ gboolean has_metadata(char *text, int extensions);
31
+ char * mmd_version();
32
+
33
+ /* vim: set ts=4 sw=4 : */