gitdown 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+