gitdown 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (416) hide show
  1. data/AUTHORS +1 -0
  2. data/COPYING +24 -0
  3. data/GPL +674 -0
  4. data/README +43 -0
  5. data/Rakefile +370 -0
  6. data/VERSION +1 -0
  7. data/benchmark/benchmark.rb +34 -0
  8. data/benchmark/benchmark.sh +74 -0
  9. data/benchmark/generate_data.rb +119 -0
  10. data/benchmark/mdbasics.text +306 -0
  11. data/benchmark/mdsyntax.text +888 -0
  12. data/benchmark/testing.sh +9 -0
  13. data/benchmark/timing.sh +10 -0
  14. data/bin/kramdown +78 -0
  15. data/data/kramdown/document.html +18 -0
  16. data/data/kramdown/document.latex +43 -0
  17. data/doc/default.scss.css +530 -0
  18. data/doc/default.template +80 -0
  19. data/doc/documentation.page +71 -0
  20. data/doc/index.page +98 -0
  21. data/doc/installation.page +88 -0
  22. data/doc/links.markdown +6 -0
  23. data/doc/news.feed +10 -0
  24. data/doc/news.page +28 -0
  25. data/doc/quickref.page +585 -0
  26. data/doc/syntax.page +1644 -0
  27. data/doc/tests.page +52 -0
  28. data/doc/virtual +2 -0
  29. data/lib/kramdown.rb +23 -0
  30. data/lib/kramdown/compatibility.rb +35 -0
  31. data/lib/kramdown/converter.rb +41 -0
  32. data/lib/kramdown/converter/base.rb +169 -0
  33. data/lib/kramdown/converter/html.rb +410 -0
  34. data/lib/kramdown/converter/kramdown.rb +422 -0
  35. data/lib/kramdown/converter/latex.rb +607 -0
  36. data/lib/kramdown/converter/toc.rb +82 -0
  37. data/lib/kramdown/document.rb +117 -0
  38. data/lib/kramdown/element.rb +524 -0
  39. data/lib/kramdown/error.rb +30 -0
  40. data/lib/kramdown/options.rb +373 -0
  41. data/lib/kramdown/parser.rb +40 -0
  42. data/lib/kramdown/parser/base.rb +136 -0
  43. data/lib/kramdown/parser/github_markdown.rb +44 -0
  44. data/lib/kramdown/parser/github_markdown/github_codeblock.rb +44 -0
  45. data/lib/kramdown/parser/html.rb +570 -0
  46. data/lib/kramdown/parser/kramdown.rb +338 -0
  47. data/lib/kramdown/parser/kramdown/abbreviation.rb +71 -0
  48. data/lib/kramdown/parser/kramdown/autolink.rb +53 -0
  49. data/lib/kramdown/parser/kramdown/blank_line.rb +43 -0
  50. data/lib/kramdown/parser/kramdown/block_boundary.rb +46 -0
  51. data/lib/kramdown/parser/kramdown/blockquote.rb +51 -0
  52. data/lib/kramdown/parser/kramdown/codeblock.rb +63 -0
  53. data/lib/kramdown/parser/kramdown/codespan.rb +56 -0
  54. data/lib/kramdown/parser/kramdown/emphasis.rb +70 -0
  55. data/lib/kramdown/parser/kramdown/eob.rb +39 -0
  56. data/lib/kramdown/parser/kramdown/escaped_chars.rb +38 -0
  57. data/lib/kramdown/parser/kramdown/extensions.rb +204 -0
  58. data/lib/kramdown/parser/kramdown/footnote.rb +74 -0
  59. data/lib/kramdown/parser/kramdown/header.rb +68 -0
  60. data/lib/kramdown/parser/kramdown/horizontal_rule.rb +39 -0
  61. data/lib/kramdown/parser/kramdown/html.rb +169 -0
  62. data/lib/kramdown/parser/kramdown/html_entity.rb +44 -0
  63. data/lib/kramdown/parser/kramdown/line_break.rb +38 -0
  64. data/lib/kramdown/parser/kramdown/link.rb +148 -0
  65. data/lib/kramdown/parser/kramdown/list.rb +240 -0
  66. data/lib/kramdown/parser/kramdown/math.rb +64 -0
  67. data/lib/kramdown/parser/kramdown/paragraph.rb +63 -0
  68. data/lib/kramdown/parser/kramdown/smart_quotes.rb +214 -0
  69. data/lib/kramdown/parser/kramdown/table.rb +178 -0
  70. data/lib/kramdown/parser/kramdown/typographic_symbol.rb +52 -0
  71. data/lib/kramdown/parser/markdown.rb +69 -0
  72. data/lib/kramdown/utils.rb +37 -0
  73. data/lib/kramdown/utils/entities.rb +348 -0
  74. data/lib/kramdown/utils/html.rb +85 -0
  75. data/lib/kramdown/utils/ordered_hash.rb +100 -0
  76. data/lib/kramdown/version.rb +28 -0
  77. data/setup.rb +1585 -0
  78. data/test/run_tests.rb +59 -0
  79. data/test/test_files.rb +197 -0
  80. data/test/testcases/block/01_blank_line/spaces.html +1 -0
  81. data/test/testcases/block/01_blank_line/spaces.text +3 -0
  82. data/test/testcases/block/01_blank_line/tabs.html +1 -0
  83. data/test/testcases/block/01_blank_line/tabs.text +6 -0
  84. data/test/testcases/block/02_eob/beginning.html +1 -0
  85. data/test/testcases/block/02_eob/beginning.text +3 -0
  86. data/test/testcases/block/02_eob/end.html +1 -0
  87. data/test/testcases/block/02_eob/end.text +3 -0
  88. data/test/testcases/block/02_eob/middle.html +1 -0
  89. data/test/testcases/block/02_eob/middle.text +5 -0
  90. data/test/testcases/block/03_paragraph/indented.html +18 -0
  91. data/test/testcases/block/03_paragraph/indented.text +19 -0
  92. data/test/testcases/block/03_paragraph/no_newline_at_end.html +5 -0
  93. data/test/testcases/block/03_paragraph/no_newline_at_end.text +5 -0
  94. data/test/testcases/block/03_paragraph/one_para.html +1 -0
  95. data/test/testcases/block/03_paragraph/one_para.text +1 -0
  96. data/test/testcases/block/03_paragraph/two_para.html +4 -0
  97. data/test/testcases/block/03_paragraph/two_para.text +4 -0
  98. data/test/testcases/block/04_header/atx_header.html +37 -0
  99. data/test/testcases/block/04_header/atx_header.text +34 -0
  100. data/test/testcases/block/04_header/atx_header_no_newline_at_end.html +1 -0
  101. data/test/testcases/block/04_header/atx_header_no_newline_at_end.text +1 -0
  102. data/test/testcases/block/04_header/setext_header.html +30 -0
  103. data/test/testcases/block/04_header/setext_header.html.19 +30 -0
  104. data/test/testcases/block/04_header/setext_header.text +36 -0
  105. data/test/testcases/block/04_header/setext_header_no_newline_at_end.html +1 -0
  106. data/test/testcases/block/04_header/setext_header_no_newline_at_end.text +2 -0
  107. data/test/testcases/block/04_header/with_auto_id_prefix.html +3 -0
  108. data/test/testcases/block/04_header/with_auto_id_prefix.options +2 -0
  109. data/test/testcases/block/04_header/with_auto_id_prefix.text +3 -0
  110. data/test/testcases/block/04_header/with_auto_ids.html +17 -0
  111. data/test/testcases/block/04_header/with_auto_ids.options +1 -0
  112. data/test/testcases/block/04_header/with_auto_ids.text +19 -0
  113. data/test/testcases/block/05_blockquote/indented.html +25 -0
  114. data/test/testcases/block/05_blockquote/indented.text +14 -0
  115. data/test/testcases/block/05_blockquote/lazy.html +34 -0
  116. data/test/testcases/block/05_blockquote/lazy.text +20 -0
  117. data/test/testcases/block/05_blockquote/nested.html +10 -0
  118. data/test/testcases/block/05_blockquote/nested.text +6 -0
  119. data/test/testcases/block/05_blockquote/no_newline_at_end.html +4 -0
  120. data/test/testcases/block/05_blockquote/no_newline_at_end.text +2 -0
  121. data/test/testcases/block/05_blockquote/very_long_line.html +3 -0
  122. data/test/testcases/block/05_blockquote/very_long_line.text +1 -0
  123. data/test/testcases/block/05_blockquote/with_code_blocks.html +15 -0
  124. data/test/testcases/block/05_blockquote/with_code_blocks.text +11 -0
  125. data/test/testcases/block/06_codeblock/error.html +4 -0
  126. data/test/testcases/block/06_codeblock/error.text +4 -0
  127. data/test/testcases/block/06_codeblock/lazy.html +4 -0
  128. data/test/testcases/block/06_codeblock/lazy.text +5 -0
  129. data/test/testcases/block/06_codeblock/no_newline_at_end.html +2 -0
  130. data/test/testcases/block/06_codeblock/no_newline_at_end.text +1 -0
  131. data/test/testcases/block/06_codeblock/no_newline_at_end_1.html +2 -0
  132. data/test/testcases/block/06_codeblock/no_newline_at_end_1.text +2 -0
  133. data/test/testcases/block/06_codeblock/normal.html +13 -0
  134. data/test/testcases/block/06_codeblock/normal.text +10 -0
  135. data/test/testcases/block/06_codeblock/tilde_syntax.html +7 -0
  136. data/test/testcases/block/06_codeblock/tilde_syntax.text +9 -0
  137. data/test/testcases/block/06_codeblock/whitespace.html +3 -0
  138. data/test/testcases/block/06_codeblock/whitespace.text +3 -0
  139. data/test/testcases/block/06_codeblock/with_blank_line.html +13 -0
  140. data/test/testcases/block/06_codeblock/with_blank_line.text +12 -0
  141. data/test/testcases/block/06_codeblock/with_eob_marker.html +6 -0
  142. data/test/testcases/block/06_codeblock/with_eob_marker.text +5 -0
  143. data/test/testcases/block/06_codeblock/with_ial.html +6 -0
  144. data/test/testcases/block/06_codeblock/with_ial.text +5 -0
  145. data/test/testcases/block/07_horizontal_rule/error.html +7 -0
  146. data/test/testcases/block/07_horizontal_rule/error.html.19 +7 -0
  147. data/test/testcases/block/07_horizontal_rule/error.text +7 -0
  148. data/test/testcases/block/07_horizontal_rule/normal.html +17 -0
  149. data/test/testcases/block/07_horizontal_rule/normal.text +17 -0
  150. data/test/testcases/block/07_horizontal_rule/sepspaces.html +3 -0
  151. data/test/testcases/block/07_horizontal_rule/sepspaces.text +3 -0
  152. data/test/testcases/block/07_horizontal_rule/septabs.html +3 -0
  153. data/test/testcases/block/07_horizontal_rule/septabs.text +3 -0
  154. data/test/testcases/block/08_list/escaping.html +17 -0
  155. data/test/testcases/block/08_list/escaping.text +17 -0
  156. data/test/testcases/block/08_list/item_ial.html +10 -0
  157. data/test/testcases/block/08_list/item_ial.text +8 -0
  158. data/test/testcases/block/08_list/lazy.html +39 -0
  159. data/test/testcases/block/08_list/lazy.text +29 -0
  160. data/test/testcases/block/08_list/list_and_hr.html +9 -0
  161. data/test/testcases/block/08_list/list_and_hr.text +5 -0
  162. data/test/testcases/block/08_list/list_and_others.html +40 -0
  163. data/test/testcases/block/08_list/list_and_others.text +26 -0
  164. data/test/testcases/block/08_list/mixed.html +117 -0
  165. data/test/testcases/block/08_list/mixed.text +66 -0
  166. data/test/testcases/block/08_list/nested.html +17 -0
  167. data/test/testcases/block/08_list/nested.text +7 -0
  168. data/test/testcases/block/08_list/other_first_element.html +39 -0
  169. data/test/testcases/block/08_list/other_first_element.text +18 -0
  170. data/test/testcases/block/08_list/simple_ol.html +19 -0
  171. data/test/testcases/block/08_list/simple_ol.text +13 -0
  172. data/test/testcases/block/08_list/simple_ul.html +48 -0
  173. data/test/testcases/block/08_list/simple_ul.text +36 -0
  174. data/test/testcases/block/08_list/single_item.html +3 -0
  175. data/test/testcases/block/08_list/single_item.text +1 -0
  176. data/test/testcases/block/08_list/special_cases.html +55 -0
  177. data/test/testcases/block/08_list/special_cases.text +35 -0
  178. data/test/testcases/block/09_html/comment.html +18 -0
  179. data/test/testcases/block/09_html/comment.text +15 -0
  180. data/test/testcases/block/09_html/content_model/deflists.html +6 -0
  181. data/test/testcases/block/09_html/content_model/deflists.options +1 -0
  182. data/test/testcases/block/09_html/content_model/deflists.text +6 -0
  183. data/test/testcases/block/09_html/content_model/tables.html +14 -0
  184. data/test/testcases/block/09_html/content_model/tables.options +1 -0
  185. data/test/testcases/block/09_html/content_model/tables.text +14 -0
  186. data/test/testcases/block/09_html/html_and_codeblocks.html +15 -0
  187. data/test/testcases/block/09_html/html_and_codeblocks.options +1 -0
  188. data/test/testcases/block/09_html/html_and_codeblocks.text +13 -0
  189. data/test/testcases/block/09_html/html_and_headers.html +5 -0
  190. data/test/testcases/block/09_html/html_and_headers.text +6 -0
  191. data/test/testcases/block/09_html/html_to_native/code.html +10 -0
  192. data/test/testcases/block/09_html/html_to_native/code.text +9 -0
  193. data/test/testcases/block/09_html/html_to_native/comment.html +7 -0
  194. data/test/testcases/block/09_html/html_to_native/comment.text +8 -0
  195. data/test/testcases/block/09_html/html_to_native/emphasis.html +6 -0
  196. data/test/testcases/block/09_html/html_to_native/emphasis.text +6 -0
  197. data/test/testcases/block/09_html/html_to_native/entity.html +1 -0
  198. data/test/testcases/block/09_html/html_to_native/entity.text +1 -0
  199. data/test/testcases/block/09_html/html_to_native/header.html +6 -0
  200. data/test/testcases/block/09_html/html_to_native/header.options +2 -0
  201. data/test/testcases/block/09_html/html_to_native/header.text +6 -0
  202. data/test/testcases/block/09_html/html_to_native/list_dl.html +8 -0
  203. data/test/testcases/block/09_html/html_to_native/list_dl.text +8 -0
  204. data/test/testcases/block/09_html/html_to_native/list_ol.html +15 -0
  205. data/test/testcases/block/09_html/html_to_native/list_ol.text +17 -0
  206. data/test/testcases/block/09_html/html_to_native/list_ul.html +19 -0
  207. data/test/testcases/block/09_html/html_to_native/list_ul.text +22 -0
  208. data/test/testcases/block/09_html/html_to_native/options +1 -0
  209. data/test/testcases/block/09_html/html_to_native/paragraph.html +3 -0
  210. data/test/testcases/block/09_html/html_to_native/paragraph.text +4 -0
  211. data/test/testcases/block/09_html/html_to_native/table_normal.html +12 -0
  212. data/test/testcases/block/09_html/html_to_native/table_normal.text +12 -0
  213. data/test/testcases/block/09_html/html_to_native/table_simple.html +48 -0
  214. data/test/testcases/block/09_html/html_to_native/table_simple.text +56 -0
  215. data/test/testcases/block/09_html/html_to_native/typography.html +1 -0
  216. data/test/testcases/block/09_html/html_to_native/typography.html.19 +1 -0
  217. data/test/testcases/block/09_html/html_to_native/typography.text +1 -0
  218. data/test/testcases/block/09_html/invalid_html_1.html +5 -0
  219. data/test/testcases/block/09_html/invalid_html_1.text +5 -0
  220. data/test/testcases/block/09_html/invalid_html_2.html +5 -0
  221. data/test/testcases/block/09_html/invalid_html_2.text +5 -0
  222. data/test/testcases/block/09_html/markdown_attr.html +38 -0
  223. data/test/testcases/block/09_html/markdown_attr.text +38 -0
  224. data/test/testcases/block/09_html/not_parsed.html +24 -0
  225. data/test/testcases/block/09_html/not_parsed.text +24 -0
  226. data/test/testcases/block/09_html/parse_as_raw.html +35 -0
  227. data/test/testcases/block/09_html/parse_as_raw.htmlinput +34 -0
  228. data/test/testcases/block/09_html/parse_as_raw.options +1 -0
  229. data/test/testcases/block/09_html/parse_as_raw.text +33 -0
  230. data/test/testcases/block/09_html/parse_as_span.html +12 -0
  231. data/test/testcases/block/09_html/parse_as_span.htmlinput +12 -0
  232. data/test/testcases/block/09_html/parse_as_span.options +1 -0
  233. data/test/testcases/block/09_html/parse_as_span.text +9 -0
  234. data/test/testcases/block/09_html/parse_block_html.html +21 -0
  235. data/test/testcases/block/09_html/parse_block_html.options +1 -0
  236. data/test/testcases/block/09_html/parse_block_html.text +17 -0
  237. data/test/testcases/block/09_html/processing_instruction.html +13 -0
  238. data/test/testcases/block/09_html/processing_instruction.text +12 -0
  239. data/test/testcases/block/09_html/simple.html +64 -0
  240. data/test/testcases/block/09_html/simple.html.19 +64 -0
  241. data/test/testcases/block/09_html/simple.options +1 -0
  242. data/test/testcases/block/09_html/simple.text +59 -0
  243. data/test/testcases/block/10_ald/simple.html +2 -0
  244. data/test/testcases/block/10_ald/simple.text +8 -0
  245. data/test/testcases/block/11_ial/auto_id_and_ial.html +1 -0
  246. data/test/testcases/block/11_ial/auto_id_and_ial.options +1 -0
  247. data/test/testcases/block/11_ial/auto_id_and_ial.text +2 -0
  248. data/test/testcases/block/11_ial/nested.html +11 -0
  249. data/test/testcases/block/11_ial/nested.text +15 -0
  250. data/test/testcases/block/11_ial/simple.html +25 -0
  251. data/test/testcases/block/11_ial/simple.text +34 -0
  252. data/test/testcases/block/12_extension/comment.html +8 -0
  253. data/test/testcases/block/12_extension/comment.text +12 -0
  254. data/test/testcases/block/12_extension/ignored.html +8 -0
  255. data/test/testcases/block/12_extension/ignored.text +8 -0
  256. data/test/testcases/block/12_extension/nomarkdown.html +10 -0
  257. data/test/testcases/block/12_extension/nomarkdown.kramdown +20 -0
  258. data/test/testcases/block/12_extension/nomarkdown.latex +13 -0
  259. data/test/testcases/block/12_extension/nomarkdown.text +21 -0
  260. data/test/testcases/block/12_extension/options.html +21 -0
  261. data/test/testcases/block/12_extension/options.text +21 -0
  262. data/test/testcases/block/12_extension/options2.html +10 -0
  263. data/test/testcases/block/12_extension/options2.text +5 -0
  264. data/test/testcases/block/12_extension/options3.html +7 -0
  265. data/test/testcases/block/12_extension/options3.text +7 -0
  266. data/test/testcases/block/13_definition_list/definition_at_beginning.html +1 -0
  267. data/test/testcases/block/13_definition_list/definition_at_beginning.text +1 -0
  268. data/test/testcases/block/13_definition_list/item_ial.html +12 -0
  269. data/test/testcases/block/13_definition_list/item_ial.text +8 -0
  270. data/test/testcases/block/13_definition_list/multiple_terms.html +13 -0
  271. data/test/testcases/block/13_definition_list/multiple_terms.text +10 -0
  272. data/test/testcases/block/13_definition_list/no_def_list.html +2 -0
  273. data/test/testcases/block/13_definition_list/no_def_list.text +2 -0
  274. data/test/testcases/block/13_definition_list/para_wrapping.html +10 -0
  275. data/test/testcases/block/13_definition_list/para_wrapping.text +6 -0
  276. data/test/testcases/block/13_definition_list/separated_by_eob.html +8 -0
  277. data/test/testcases/block/13_definition_list/separated_by_eob.text +5 -0
  278. data/test/testcases/block/13_definition_list/simple.html +8 -0
  279. data/test/testcases/block/13_definition_list/simple.text +7 -0
  280. data/test/testcases/block/13_definition_list/styled_terms.html +4 -0
  281. data/test/testcases/block/13_definition_list/styled_terms.text +2 -0
  282. data/test/testcases/block/13_definition_list/too_much_space.html +3 -0
  283. data/test/testcases/block/13_definition_list/too_much_space.text +4 -0
  284. data/test/testcases/block/13_definition_list/with_blocks.html +38 -0
  285. data/test/testcases/block/13_definition_list/with_blocks.text +24 -0
  286. data/test/testcases/block/14_table/errors.html +8 -0
  287. data/test/testcases/block/14_table/errors.text +9 -0
  288. data/test/testcases/block/14_table/escaping.html +52 -0
  289. data/test/testcases/block/14_table/escaping.text +19 -0
  290. data/test/testcases/block/14_table/footer.html +65 -0
  291. data/test/testcases/block/14_table/footer.text +25 -0
  292. data/test/testcases/block/14_table/header.html +96 -0
  293. data/test/testcases/block/14_table/header.text +32 -0
  294. data/test/testcases/block/14_table/no_table.html +3 -0
  295. data/test/testcases/block/14_table/no_table.text +3 -0
  296. data/test/testcases/block/14_table/simple.html +177 -0
  297. data/test/testcases/block/14_table/simple.html.19 +177 -0
  298. data/test/testcases/block/14_table/simple.text +49 -0
  299. data/test/testcases/block/14_table/table_with_footnote.html +25 -0
  300. data/test/testcases/block/14_table/table_with_footnote.latex +11 -0
  301. data/test/testcases/block/14_table/table_with_footnote.text +6 -0
  302. data/test/testcases/block/15_math/normal.html +26 -0
  303. data/test/testcases/block/15_math/normal.text +28 -0
  304. data/test/testcases/block/16_toc/no_toc.html +33 -0
  305. data/test/testcases/block/16_toc/no_toc.options +1 -0
  306. data/test/testcases/block/16_toc/no_toc.text +16 -0
  307. data/test/testcases/block/16_toc/toc_levels.html +24 -0
  308. data/test/testcases/block/16_toc/toc_levels.options +1 -0
  309. data/test/testcases/block/16_toc/toc_levels.text +16 -0
  310. data/test/testcases/block/17_github_codeblock/backtick_syntax.html +7 -0
  311. data/test/testcases/block/17_github_codeblock/backtick_syntax.text +9 -0
  312. data/test/testcases/block/17_github_codeblock/error.html +4 -0
  313. data/test/testcases/block/17_github_codeblock/error.text +4 -0
  314. data/test/testcases/block/17_github_codeblock/no_newline_at_end.html +2 -0
  315. data/test/testcases/block/17_github_codeblock/no_newline_at_end.text +3 -0
  316. data/test/testcases/encoding.html +46 -0
  317. data/test/testcases/encoding.text +28 -0
  318. data/test/testcases/span/01_link/empty.html +5 -0
  319. data/test/testcases/span/01_link/empty.text +5 -0
  320. data/test/testcases/span/01_link/image_in_a.html +5 -0
  321. data/test/testcases/span/01_link/image_in_a.text +5 -0
  322. data/test/testcases/span/01_link/imagelinks.html +14 -0
  323. data/test/testcases/span/01_link/imagelinks.text +16 -0
  324. data/test/testcases/span/01_link/inline.html +46 -0
  325. data/test/testcases/span/01_link/inline.html.19 +46 -0
  326. data/test/testcases/span/01_link/inline.text +48 -0
  327. data/test/testcases/span/01_link/link_defs.html +9 -0
  328. data/test/testcases/span/01_link/link_defs.text +26 -0
  329. data/test/testcases/span/01_link/links_with_angle_brackets.html +3 -0
  330. data/test/testcases/span/01_link/links_with_angle_brackets.text +3 -0
  331. data/test/testcases/span/01_link/reference.html +36 -0
  332. data/test/testcases/span/01_link/reference.html.19 +36 -0
  333. data/test/testcases/span/01_link/reference.text +50 -0
  334. data/test/testcases/span/02_emphasis/empty.html +3 -0
  335. data/test/testcases/span/02_emphasis/empty.text +3 -0
  336. data/test/testcases/span/02_emphasis/errors.html +9 -0
  337. data/test/testcases/span/02_emphasis/errors.text +9 -0
  338. data/test/testcases/span/02_emphasis/nesting.html +38 -0
  339. data/test/testcases/span/02_emphasis/nesting.text +33 -0
  340. data/test/testcases/span/02_emphasis/normal.html +46 -0
  341. data/test/testcases/span/02_emphasis/normal.text +46 -0
  342. data/test/testcases/span/03_codespan/empty.html +5 -0
  343. data/test/testcases/span/03_codespan/empty.text +5 -0
  344. data/test/testcases/span/03_codespan/errors.html +1 -0
  345. data/test/testcases/span/03_codespan/errors.text +1 -0
  346. data/test/testcases/span/03_codespan/highlighting.html +1 -0
  347. data/test/testcases/span/03_codespan/highlighting.text +1 -0
  348. data/test/testcases/span/03_codespan/normal.html +16 -0
  349. data/test/testcases/span/03_codespan/normal.text +16 -0
  350. data/test/testcases/span/04_footnote/definitions.html +17 -0
  351. data/test/testcases/span/04_footnote/definitions.latex +17 -0
  352. data/test/testcases/span/04_footnote/definitions.text +24 -0
  353. data/test/testcases/span/04_footnote/footnote_nr.html +12 -0
  354. data/test/testcases/span/04_footnote/footnote_nr.latex +2 -0
  355. data/test/testcases/span/04_footnote/footnote_nr.options +1 -0
  356. data/test/testcases/span/04_footnote/footnote_nr.text +4 -0
  357. data/test/testcases/span/04_footnote/markers.html +46 -0
  358. data/test/testcases/span/04_footnote/markers.latex +23 -0
  359. data/test/testcases/span/04_footnote/markers.text +26 -0
  360. data/test/testcases/span/05_html/across_lines.html +1 -0
  361. data/test/testcases/span/05_html/across_lines.text +2 -0
  362. data/test/testcases/span/05_html/invalid.html +1 -0
  363. data/test/testcases/span/05_html/invalid.text +1 -0
  364. data/test/testcases/span/05_html/link_with_mailto.html +1 -0
  365. data/test/testcases/span/05_html/link_with_mailto.text +1 -0
  366. data/test/testcases/span/05_html/markdown_attr.html +6 -0
  367. data/test/testcases/span/05_html/markdown_attr.text +6 -0
  368. data/test/testcases/span/05_html/normal.html +34 -0
  369. data/test/testcases/span/05_html/normal.text +34 -0
  370. data/test/testcases/span/abbreviations/abbrev.html +8 -0
  371. data/test/testcases/span/abbreviations/abbrev.text +15 -0
  372. data/test/testcases/span/abbreviations/abbrev_defs.html +2 -0
  373. data/test/testcases/span/abbreviations/abbrev_defs.text +5 -0
  374. data/test/testcases/span/autolinks/url_links.html +12 -0
  375. data/test/testcases/span/autolinks/url_links.text +12 -0
  376. data/test/testcases/span/escaped_chars/normal.html +47 -0
  377. data/test/testcases/span/escaped_chars/normal.text +47 -0
  378. data/test/testcases/span/extension/comment.html +6 -0
  379. data/test/testcases/span/extension/comment.text +6 -0
  380. data/test/testcases/span/extension/ignored.html +1 -0
  381. data/test/testcases/span/extension/ignored.text +1 -0
  382. data/test/testcases/span/extension/nomarkdown.html +1 -0
  383. data/test/testcases/span/extension/nomarkdown.text +1 -0
  384. data/test/testcases/span/extension/options.html +1 -0
  385. data/test/testcases/span/extension/options.text +1 -0
  386. data/test/testcases/span/ial/simple.html +6 -0
  387. data/test/testcases/span/ial/simple.text +6 -0
  388. data/test/testcases/span/line_breaks/normal.html +11 -0
  389. data/test/testcases/span/line_breaks/normal.latex +12 -0
  390. data/test/testcases/span/line_breaks/normal.text +11 -0
  391. data/test/testcases/span/math/normal.html +5 -0
  392. data/test/testcases/span/math/normal.text +5 -0
  393. data/test/testcases/span/text_substitutions/entities.html +6 -0
  394. data/test/testcases/span/text_substitutions/entities.options +1 -0
  395. data/test/testcases/span/text_substitutions/entities.text +6 -0
  396. data/test/testcases/span/text_substitutions/entities_as_char.html +1 -0
  397. data/test/testcases/span/text_substitutions/entities_as_char.html.19 +1 -0
  398. data/test/testcases/span/text_substitutions/entities_as_char.options +1 -0
  399. data/test/testcases/span/text_substitutions/entities_as_char.text +1 -0
  400. data/test/testcases/span/text_substitutions/entities_as_input.html +1 -0
  401. data/test/testcases/span/text_substitutions/entities_as_input.options +1 -0
  402. data/test/testcases/span/text_substitutions/entities_as_input.text +1 -0
  403. data/test/testcases/span/text_substitutions/entities_numeric.html +1 -0
  404. data/test/testcases/span/text_substitutions/entities_numeric.options +1 -0
  405. data/test/testcases/span/text_substitutions/entities_numeric.text +1 -0
  406. data/test/testcases/span/text_substitutions/entities_symbolic.html +1 -0
  407. data/test/testcases/span/text_substitutions/entities_symbolic.options +1 -0
  408. data/test/testcases/span/text_substitutions/entities_symbolic.text +1 -0
  409. data/test/testcases/span/text_substitutions/greaterthan.html +1 -0
  410. data/test/testcases/span/text_substitutions/greaterthan.text +1 -0
  411. data/test/testcases/span/text_substitutions/lowerthan.html +1 -0
  412. data/test/testcases/span/text_substitutions/lowerthan.text +1 -0
  413. data/test/testcases/span/text_substitutions/typography.html +18 -0
  414. data/test/testcases/span/text_substitutions/typography.html.19 +18 -0
  415. data/test/testcases/span/text_substitutions/typography.text +18 -0
  416. metadata +817 -0
@@ -0,0 +1,178 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ #--
4
+ # Copyright (C) 2009-2010 Thomas Leitner <t_leitner@gmx.at>
5
+ #
6
+ # This file is part of kramdown.
7
+ #
8
+ # kramdown is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation, either version 3 of the License, or
11
+ # (at your option) any later version.
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
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+ #++
21
+ #
22
+
23
+ require 'kramdown/parser/kramdown/block_boundary'
24
+
25
+ module Kramdown
26
+ module Parser
27
+ class Kramdown
28
+
29
+ TABLE_SEP_LINE = /^([+|: -]*?-[+|: -]*?)[ \t]*\n/
30
+ TABLE_HSEP_ALIGN = /[ ]?(:?)-+(:?)[ ]?/
31
+ TABLE_FSEP_LINE = /^[+|: =]*?=[+|: =]*?[ \t]*\n/
32
+ TABLE_ROW_LINE = /^(.*?)[ \t]*\n/
33
+ TABLE_PIPE_CHECK = /(?:\||.*?[^\\\n]\|)/
34
+ TABLE_LINE = /#{TABLE_PIPE_CHECK}.*?\n/
35
+ TABLE_START = /^#{OPT_SPACE}(?=\S)#{TABLE_LINE}/
36
+
37
+ # Parse the table at the current location.
38
+ def parse_table
39
+ return false if !after_block_boundary?
40
+
41
+ orig_pos = @src.pos
42
+ table = new_block_el(:table, nil, nil, :alignment => [])
43
+ leading_pipe = (@src.check(TABLE_LINE) =~ /^\s*\|/)
44
+ @src.scan(TABLE_SEP_LINE)
45
+
46
+ rows = []
47
+ has_footer = false
48
+ columns = 0
49
+
50
+ add_container = lambda do |type, force|
51
+ if !has_footer || type != :tbody || force
52
+ cont = Element.new(type)
53
+ cont.children, rows = rows, []
54
+ table.children << cont
55
+ end
56
+ end
57
+
58
+ while !@src.eos?
59
+ break if !@src.check(TABLE_LINE)
60
+ if @src.scan(TABLE_SEP_LINE) && !rows.empty?
61
+ if table.options[:alignment].empty? && !has_footer
62
+ add_container.call(:thead, false)
63
+ table.options[:alignment] = @src[1].scan(TABLE_HSEP_ALIGN).map do |left, right|
64
+ (left.empty? && right.empty? && :default) || (right.empty? && :left) || (left.empty? && :right) || :center
65
+ end
66
+ else # treat as normal separator line
67
+ add_container.call(:tbody, false)
68
+ end
69
+ elsif @src.scan(TABLE_FSEP_LINE)
70
+ add_container.call(:tbody, true) if !rows.empty?
71
+ has_footer = true
72
+ elsif @src.scan(TABLE_ROW_LINE)
73
+ trow = Element.new(:tr)
74
+
75
+ # parse possible code spans on the line and correctly split the line into cells
76
+ env = save_env
77
+ cells = []
78
+ @src[1].split(/(<code.*?>.*?<\/code>)/).each_with_index do |str, i|
79
+ if i % 2 == 1
80
+ (cells.empty? ? cells : cells.last) << str
81
+ else
82
+ reset_env(:src => StringScanner.new(str))
83
+ root = Element.new(:root)
84
+ parse_spans(root, nil, [:codespan])
85
+
86
+ root.children.each do |c|
87
+ if c.type == :raw_text
88
+ # Only on Ruby 1.9: f, *l = c.value.split(/(?<!\\)\|/).map {|t| t.gsub(/\\\|/, '|')}
89
+ f, *l = c.value.split(/\\\|/, -1).map {|t| t.split(/\|/, -1)}.inject([]) do |memo, t|
90
+ memo.last << "|#{t.shift}" if memo.size > 0
91
+ memo.concat(t)
92
+ end
93
+ (cells.empty? ? cells : cells.last) << f
94
+ cells.concat(l)
95
+ else
96
+ delim = (c.value.scan(/`+/).max || '') + '`'
97
+ tmp = "#{delim}#{' ' if delim.size > 1}#{c.value}#{' ' if delim.size > 1}#{delim}"
98
+ (cells.empty? ? cells : cells.last) << tmp
99
+ end
100
+ end
101
+ end
102
+ end
103
+ restore_env(env)
104
+
105
+ cells.shift if leading_pipe && cells.first.strip.empty?
106
+ cells.pop if cells.last.strip.empty?
107
+ cells.each do |cell_text|
108
+ tcell = Element.new(:td)
109
+ tcell.children << Element.new(:raw_text, cell_text.strip)
110
+ trow.children << tcell
111
+ end
112
+ columns = [columns, cells.length].max
113
+ rows << trow
114
+ else
115
+ break
116
+ end
117
+ end
118
+
119
+ if !before_block_boundary?
120
+ @src.pos = orig_pos
121
+ return false
122
+ end
123
+
124
+ # Parse all lines of the table with the code span parser
125
+ env = save_env
126
+ reset_env(:src => StringScanner.new(extract_string(orig_pos...(@src.pos-1), @src)))
127
+ root = Element.new(:root)
128
+ parse_spans(root, nil, [:codespan])
129
+ restore_env(env)
130
+
131
+ # Check if each line has at least one unescaped backslash that is not inside a code span
132
+ pipe_on_line = false
133
+ while (c = root.children.shift)
134
+ lines = c.value.split(/\n/)
135
+ if c.type == :codespan
136
+ if lines.size > 2 || (lines.size == 2 && !pipe_on_line)
137
+ break
138
+ elsif lines.size == 2 && pipe_on_line
139
+ pipe_on_line = false
140
+ end
141
+ else
142
+ break if lines.size > 1 && !pipe_on_line && lines.first !~ /^#{TABLE_PIPE_CHECK}/
143
+ pipe_on_line = (lines.size > 1 ? false : pipe_on_line) || (lines.last =~ /^#{TABLE_PIPE_CHECK}/)
144
+ end
145
+ end
146
+ @src.pos = orig_pos and return false if !pipe_on_line
147
+
148
+ add_container.call(has_footer ? :tfoot : :tbody, false) if !rows.empty?
149
+
150
+ if !table.children.any? {|el| el.type == :tbody}
151
+ warning("Found table without body - ignoring it")
152
+ @src.pos = orig_pos
153
+ return false
154
+ end
155
+
156
+ # adjust all table rows to have equal number of columns, same for alignment defs
157
+ table.children.each do |kind|
158
+ kind.children.each do |row|
159
+ (columns - row.children.length).times do
160
+ row.children << Element.new(:td)
161
+ end
162
+ end
163
+ end
164
+ if table.options[:alignment].length > columns
165
+ table.options[:alignment] = table.options[:alignment][0...columns]
166
+ else
167
+ table.options[:alignment] += [:default] * (columns - table.options[:alignment].length)
168
+ end
169
+
170
+ @tree.children << table
171
+
172
+ true
173
+ end
174
+ define_parser(:table, TABLE_START)
175
+
176
+ end
177
+ end
178
+ end
@@ -0,0 +1,52 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ #--
4
+ # Copyright (C) 2009-2010 Thomas Leitner <t_leitner@gmx.at>
5
+ #
6
+ # This file is part of kramdown.
7
+ #
8
+ # kramdown is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation, either version 3 of the License, or
11
+ # (at your option) any later version.
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
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+ #++
21
+ #
22
+
23
+ module Kramdown
24
+ module Parser
25
+ class Kramdown
26
+
27
+ TYPOGRAPHIC_SYMS = [['---', :mdash], ['--', :ndash], ['...', :hellip],
28
+ ['\\<<', '&lt;&lt;'], ['\\>>', '&gt;&gt;'],
29
+ ['<< ', :laquo_space], [' >>', :raquo_space],
30
+ ['<<', :laquo], ['>>', :raquo]]
31
+ TYPOGRAPHIC_SYMS_SUBST = Hash[*TYPOGRAPHIC_SYMS.flatten]
32
+ TYPOGRAPHIC_SYMS_RE = /#{TYPOGRAPHIC_SYMS.map {|k,v| Regexp.escape(k)}.join('|')}/
33
+
34
+ # Parse the typographic symbols at the current location.
35
+ def parse_typographic_syms
36
+ @src.pos += @src.matched_size
37
+ val = TYPOGRAPHIC_SYMS_SUBST[@src.matched]
38
+ if val.kind_of?(Symbol)
39
+ @tree.children << Element.new(:typographic_sym, val)
40
+ elsif @src.matched == '\\<<'
41
+ @tree.children << Element.new(:entity, ::Kramdown::Utils::Entities.entity('lt'))
42
+ @tree.children << Element.new(:entity, ::Kramdown::Utils::Entities.entity('lt'))
43
+ else
44
+ @tree.children << Element.new(:entity, ::Kramdown::Utils::Entities.entity('gt'))
45
+ @tree.children << Element.new(:entity, ::Kramdown::Utils::Entities.entity('gt'))
46
+ end
47
+ end
48
+ define_parser(:typographic_syms, TYPOGRAPHIC_SYMS_RE, '--|\\.\\.\\.|(?:\\\\| )?(?:<<|>>)')
49
+
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,69 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ #--
4
+ # Copyright (C) 2009-2010 Thomas Leitner <t_leitner@gmx.at>
5
+ #
6
+ # This file is part of kramdown.
7
+ #
8
+ # kramdown is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation, either version 3 of the License, or
11
+ # (at your option) any later version.
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
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+ #++
21
+ #
22
+
23
+ require 'kramdown/parser/kramdown'
24
+
25
+ module Kramdown
26
+
27
+ module Parser
28
+
29
+ # Used for parsing a document in Markdown format.
30
+ #
31
+ # This parser is based on the kramdown parser and removes the parser methods for the additional
32
+ # non-Markdown features. However, since some things are handled differently by the kramdown
33
+ # parser methods (like deciding when a list item contains just text), this parser differs from
34
+ # real Markdown parsers in some respects.
35
+ #
36
+ # Note, though, that the parser basically fails just one of the Markdown test cases (some others
37
+ # also fail but those failures are negligible).
38
+ class Markdown < Kramdown
39
+
40
+ # Array with all the parsing methods that should be removed from the standard kramdown parser.
41
+ EXTENDED = [:codeblock_fenced, :table, :definition_list, :footnote_definition, :abbrev_definition, :block_math,
42
+ :block_extensions,
43
+ :footnote_marker, :smart_quotes, :inline_math, :span_extensions, :typographic_syms]
44
+
45
+ def initialize(source, options) # :nodoc:
46
+ super
47
+ @block_parsers.delete_if {|i| EXTENDED.include?(i)}
48
+ @span_parsers.delete_if {|i| EXTENDED.include?(i)}
49
+ end
50
+
51
+ # :stopdoc:
52
+
53
+ BLOCK_BOUNDARY = /#{BLANK_LINE}|#{EOB_MARKER}|\Z/
54
+ LAZY_END = /#{BLANK_LINE}|#{EOB_MARKER}|^#{OPT_SPACE}#{LAZY_END_HTML_STOP}|^#{OPT_SPACE}#{LAZY_END_HTML_START}|\Z/
55
+ CODEBLOCK_MATCH = /(?:#{BLANK_LINE}?(?:#{INDENT}[ \t]*\S.*\n)+)*/
56
+ PARAGRAPH_END = LAZY_END
57
+
58
+ IAL_RAND_CHARS = (('a'..'z').to_a + ('0'..'9').to_a)
59
+ IAL_RAND_STRING = (1..20).collect {|a| IAL_RAND_CHARS[rand(IAL_RAND_CHARS.size)]}.join
60
+ LIST_ITEM_IAL = /^\s*(#{IAL_RAND_STRING})?\s*\n/
61
+ IAL_SPAN_START = LIST_ITEM_IAL
62
+
63
+ # :startdoc:
64
+
65
+ end
66
+
67
+ end
68
+
69
+ end
@@ -0,0 +1,37 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ #--
4
+ # Copyright (C) 2009-2010 Thomas Leitner <t_leitner@gmx.at>
5
+ #
6
+ # This file is part of kramdown.
7
+ #
8
+ # kramdown is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation, either version 3 of the License, or
11
+ # (at your option) any later version.
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
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+ #++
21
+ #
22
+
23
+ module Kramdown
24
+
25
+ # == \Utils Module
26
+ #
27
+ # This module contains utility class/modules/methods that can be used by both parsers and
28
+ # converters.
29
+ module Utils
30
+
31
+ autoload :Entities, 'kramdown/utils/entities'
32
+ autoload :Html, 'kramdown/utils/html'
33
+ autoload :OrderedHash, 'kramdown/utils/ordered_hash'
34
+
35
+ end
36
+
37
+ end
@@ -0,0 +1,348 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ #--
4
+ # Copyright (C) 2009-2010 Thomas Leitner <t_leitner@gmx.at>
5
+ #
6
+ # This file is part of kramdown.
7
+ #
8
+ # kramdown is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation, either version 3 of the License, or
11
+ # (at your option) any later version.
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
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+ #++
21
+ #
22
+
23
+ module Kramdown
24
+
25
+ module Utils
26
+
27
+ # Provides convenience methods for handling named and numeric entities.
28
+ module Entities
29
+
30
+ # Represents an entity that has a +code_point+ and +name+.
31
+ class Entity < Struct.new(:code_point, :name)
32
+
33
+ # Return the UTF8 representation of the entity.
34
+ def char
35
+ [code_point].pack('U*') rescue nil
36
+ end
37
+
38
+ end
39
+
40
+ # Array of arrays. Each sub-array specifies a code point and the associated name.
41
+ #
42
+ # This table is not used directly -- Entity objects are automatically created from it and put
43
+ # into a Hash map when this file is loaded.
44
+ ENTITY_TABLE = [
45
+ [913, 'Alpha'],
46
+ [914, 'Beta'],
47
+ [915, 'Gamma'],
48
+ [916, 'Delta'],
49
+ [917, 'Epsilon'],
50
+ [918, 'Zeta'],
51
+ [919, 'Eta'],
52
+ [920, 'Theta'],
53
+ [921, 'Iota'],
54
+ [922, 'Kappa'],
55
+ [923, 'Lambda'],
56
+ [924, 'Mu'],
57
+ [925, 'Nu'],
58
+ [926, 'Xi'],
59
+ [927, 'Omicron'],
60
+ [928, 'Pi'],
61
+ [929, 'Rho'],
62
+ [931, 'Sigma'],
63
+ [932, 'Tau'],
64
+ [933, 'Upsilon'],
65
+ [934, 'Phi'],
66
+ [935, 'Chi'],
67
+ [936, 'Psi'],
68
+ [937, 'Omega'],
69
+ [945, 'alpha'],
70
+ [946, 'beta'],
71
+ [947, 'gamma'],
72
+ [948, 'delta'],
73
+ [949, 'epsilon'],
74
+ [950, 'zeta'],
75
+ [951, 'eta'],
76
+ [952, 'theta'],
77
+ [953, 'iota'],
78
+ [954, 'kappa'],
79
+ [955, 'lambda'],
80
+ [956, 'mu'],
81
+ [957, 'nu'],
82
+ [958, 'xi'],
83
+ [959, 'omicron'],
84
+ [960, 'pi'],
85
+ [961, 'rho'],
86
+ [963, 'sigma'],
87
+ [964, 'tau'],
88
+ [965, 'upsilon'],
89
+ [966, 'phi'],
90
+ [967, 'chi'],
91
+ [968, 'psi'],
92
+ [969, 'omega'],
93
+ [962, 'sigmaf'],
94
+ [977, 'thetasym'],
95
+ [982, 'piv'],
96
+ [8230, 'hellip'],
97
+ [8242, 'prime'],
98
+ [8254, 'oline'],
99
+ [8260, 'frasl'],
100
+ [8472, 'weierp'],
101
+ [8465, 'image'],
102
+ [8476, 'real'],
103
+ [8501, 'alefsym'],
104
+ [8226, 'bull'],
105
+ [8482, 'trade'],
106
+ [8592, 'larr'],
107
+ [8594, 'rarr'],
108
+ [8593, 'uarr'],
109
+ [8595, 'darr'],
110
+ [8596, 'harr'],
111
+ [8629, 'crarr'],
112
+ [8657, 'uArr'],
113
+ [8659, 'dArr'],
114
+ [8656, 'lArr'],
115
+ [8658, 'rArr'],
116
+ [8660, 'hArr'],
117
+ [8704, 'forall'],
118
+ [8706, 'part'],
119
+ [8707, 'exist'],
120
+ [8709, 'empty'],
121
+ [8711, 'nabla'],
122
+ [8712, 'isin'],
123
+ [8715, 'ni'],
124
+ [8713, 'notin'],
125
+ [8721, 'sum'],
126
+ [8719, 'prod'],
127
+ [8722, 'minus'],
128
+ [8727, 'lowast'],
129
+ [8730, 'radic'],
130
+ [8733, 'prop'],
131
+ [8734, 'infin'],
132
+ [8736, 'ang'],
133
+ [8743, 'and'],
134
+ [8744, 'or'],
135
+ [8745, 'cup'],
136
+ [8746, 'cap'],
137
+ [8747, 'int'],
138
+ [8756, 'there4'],
139
+ [8764, 'sim'],
140
+ [8776, 'asymp'],
141
+ [8773, 'cong'],
142
+ [8800, 'ne'],
143
+ [8801, 'equiv'],
144
+ [8804, 'le'],
145
+ [8805, 'ge'],
146
+ [8834, 'sub'],
147
+ [8835, 'sup'],
148
+ [8838, 'sube'],
149
+ [8839, 'supe'],
150
+ [8836, 'nsub'],
151
+ [8853, 'oplus'],
152
+ [8855, 'otimes'],
153
+ [8869, 'perp'],
154
+ [8901, 'sdot'],
155
+ [8968, 'rceil'],
156
+ [8969, 'lceil'],
157
+ [8970, 'lfloor'],
158
+ [8971, 'rfloor'],
159
+ [9001, 'rang'],
160
+ [9002, 'lang'],
161
+ [9674, 'loz'],
162
+ [9824, 'spades'],
163
+ [9827, 'clubs'],
164
+ [9829, 'hearts'],
165
+ [9830, 'diams'],
166
+ [38, 'amp'],
167
+ [34, 'quot'],
168
+ [39, 'apos'],
169
+ [169, 'copy'],
170
+ [60, 'lt'],
171
+ [62, 'gt'],
172
+ [338, 'OElig'],
173
+ [339, 'oelig'],
174
+ [352, 'Scaron'],
175
+ [353, 'scaron'],
176
+ [376, 'Yuml'],
177
+ [710, 'circ'],
178
+ [732, 'tilde'],
179
+ [8211, 'ndash'],
180
+ [8212, 'mdash'],
181
+ [8216, 'lsquo'],
182
+ [8217, 'rsquo'],
183
+ [8220, 'ldquo'],
184
+ [8221, 'rdquo'],
185
+ [8224, 'dagger'],
186
+ [8225, 'Dagger'],
187
+ [8240, 'permil'],
188
+ [8364, 'euro'],
189
+ [8249, 'lsaquo'],
190
+ [8250, 'rsaquo'],
191
+ [160, 'nbsp'],
192
+ [161, 'iexcl'],
193
+ [163, 'pound'],
194
+ [164, 'curren'],
195
+ [165, 'yen'],
196
+ [166, 'brvbar'],
197
+ [167, 'sect'],
198
+ [171, 'laquo'],
199
+ [187, 'raquo'],
200
+ [174, 'reg'],
201
+ [170, 'ordf'],
202
+ [172, 'not'],
203
+ [176, 'deg'],
204
+ [177, 'plusmn'],
205
+ [180, 'acute'],
206
+ [181, 'micro'],
207
+ [182, 'para'],
208
+ [183, 'middot'],
209
+ [186, 'ordm'],
210
+ [162, 'cent'],
211
+ [185, 'sup1'],
212
+ [178, 'sup2'],
213
+ [179, 'sup3'],
214
+ [189, 'frac12'],
215
+ [188, 'frac14'],
216
+ [190, 'frac34'],
217
+ [192, 'Agrave'],
218
+ [193, 'Aacute'],
219
+ [194, 'Acirc'],
220
+ [195, 'Atilde'],
221
+ [196, 'Auml'],
222
+ [197, 'Aring'],
223
+ [198, 'AElig'],
224
+ [199, 'Ccedil'],
225
+ [200, 'Egrave'],
226
+ [201, 'Eacute'],
227
+ [202, 'Ecirc'],
228
+ [203, 'Euml'],
229
+ [204, 'Igrave'],
230
+ [205, 'Iacute'],
231
+ [206, 'Icirc'],
232
+ [207, 'Iuml'],
233
+ [208, 'ETH'],
234
+ [209, 'Ntilde'],
235
+ [210, 'Ograve'],
236
+ [211, 'Oacute'],
237
+ [212, 'Ocirc'],
238
+ [213, 'Otilde'],
239
+ [214, 'Ouml'],
240
+ [215, 'times'],
241
+ [216, 'Oslash'],
242
+ [217, 'Ugrave'],
243
+ [218, 'Uacute'],
244
+ [219, 'Ucirc'],
245
+ [220, 'Uuml'],
246
+ [221, 'Yacute'],
247
+ [222, 'THORN'],
248
+ [223, 'szlig'],
249
+ [224, 'agrave'],
250
+ [225, 'aacute'],
251
+ [226, 'acirc'],
252
+ [227, 'atilde'],
253
+ [228, 'auml'],
254
+ [229, 'aring'],
255
+ [230, 'aelig'],
256
+ [231, 'ccedil'],
257
+ [232, 'egrave'],
258
+ [233, 'eacute'],
259
+ [234, 'ecirc'],
260
+ [235, 'euml'],
261
+ [236, 'igrave'],
262
+ [237, 'iacute'],
263
+ [238, 'icirc'],
264
+ [239, 'iuml'],
265
+ [240, 'eth'],
266
+ [241, 'ntilde'],
267
+ [242, 'ograve'],
268
+ [243, 'oacute'],
269
+ [244, 'ocirc'],
270
+ [245, 'otilde'],
271
+ [246, 'ouml'],
272
+ [247, 'divide'],
273
+ [248, 'oslash'],
274
+ [249, 'ugrave'],
275
+ [250, 'uacute'],
276
+ [251, 'ucirc'],
277
+ [252, 'uuml'],
278
+ [253, 'yacute'],
279
+ [254, 'thorn'],
280
+ [255, 'yuml'],
281
+
282
+ [8218, 'sbquo'],
283
+ [402, 'fnof'],
284
+ [8222, 'bdquo'],
285
+
286
+ [128, 8364],
287
+ [130, 8218],
288
+ [131, 402],
289
+ [132, 8222],
290
+ [133, 8230],
291
+ [134, 8224],
292
+ [135, 8225],
293
+ [136, 710],
294
+ [137, 8240],
295
+ [138, 352],
296
+ [139, 8249],
297
+ [140, 338],
298
+ [142, 381],
299
+ [145, 8216],
300
+ [146, 8217],
301
+ [147, 8220],
302
+ [148, 8221],
303
+ [149, 8226],
304
+ [150, 8211],
305
+ [151, 8212],
306
+ [152, 732],
307
+ [153, 8482],
308
+ [154, 353],
309
+ [155, 8250],
310
+ [156, 339],
311
+ [158, 382],
312
+ [159, 376],
313
+
314
+ [8194, 'ensp'],
315
+ [8195, 'emsp'],
316
+ [8201, 'thinsp'],
317
+ ]
318
+
319
+ # Contains the mapping of code point (or name) to the actual Entity object.
320
+ ENTITY_MAP = Hash.new do |h,k|
321
+ if k.kind_of?(Integer)
322
+ h[k] = Entity.new(k, nil)
323
+ else
324
+ raise Kramdown::Error, "Can't handle generic non-integer character reference '#{k}'"
325
+ end
326
+ end
327
+
328
+ ENTITY_TABLE.each do |code_point, data|
329
+ if data.kind_of?(String)
330
+ ENTITY_MAP[code_point] = ENTITY_MAP[data] = Entity.new(code_point, data)
331
+ else
332
+ ENTITY_MAP[code_point] = ENTITY_MAP[data]
333
+ end
334
+ end
335
+
336
+ # Return the entity for the given code point or name +point_or_name+.
337
+ def entity(point_or_name)
338
+ ENTITY_MAP[point_or_name]
339
+ end
340
+
341
+ module_function :entity
342
+
343
+ end
344
+
345
+ end
346
+
347
+ end
348
+