daqing_kramdown 2.3.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 (557) hide show
  1. checksums.yaml +7 -0
  2. data/AUTHORS +1 -0
  3. data/CONTRIBUTERS +78 -0
  4. data/COPYING +30 -0
  5. data/README.md +71 -0
  6. data/VERSION +1 -0
  7. data/bin/daqing_kramdown +132 -0
  8. data/data/kramdown/document.html +22 -0
  9. data/data/kramdown/document.latex +50 -0
  10. data/lib/kramdown.rb +10 -0
  11. data/lib/kramdown/converter.rb +68 -0
  12. data/lib/kramdown/converter/base.rb +261 -0
  13. data/lib/kramdown/converter/hash_ast.rb +38 -0
  14. data/lib/kramdown/converter/html.rb +535 -0
  15. data/lib/kramdown/converter/kramdown.rb +448 -0
  16. data/lib/kramdown/converter/latex.rb +625 -0
  17. data/lib/kramdown/converter/man.rb +300 -0
  18. data/lib/kramdown/converter/math_engine/mathjax.rb +32 -0
  19. data/lib/kramdown/converter/remove_html_tags.rb +57 -0
  20. data/lib/kramdown/converter/syntax_highlighter.rb +56 -0
  21. data/lib/kramdown/converter/syntax_highlighter/minted.rb +35 -0
  22. data/lib/kramdown/converter/syntax_highlighter/rouge.rb +85 -0
  23. data/lib/kramdown/converter/toc.rb +69 -0
  24. data/lib/kramdown/document.rb +139 -0
  25. data/lib/kramdown/element.rb +551 -0
  26. data/lib/kramdown/error.rb +17 -0
  27. data/lib/kramdown/options.rb +604 -0
  28. data/lib/kramdown/parser.rb +26 -0
  29. data/lib/kramdown/parser/base.rb +131 -0
  30. data/lib/kramdown/parser/html.rb +608 -0
  31. data/lib/kramdown/parser/kramdown.rb +376 -0
  32. data/lib/kramdown/parser/kramdown/abbreviation.rb +78 -0
  33. data/lib/kramdown/parser/kramdown/autolink.rb +31 -0
  34. data/lib/kramdown/parser/kramdown/blank_line.rb +30 -0
  35. data/lib/kramdown/parser/kramdown/block_boundary.rb +34 -0
  36. data/lib/kramdown/parser/kramdown/blockquote.rb +38 -0
  37. data/lib/kramdown/parser/kramdown/codeblock.rb +57 -0
  38. data/lib/kramdown/parser/kramdown/codespan.rb +54 -0
  39. data/lib/kramdown/parser/kramdown/emphasis.rb +61 -0
  40. data/lib/kramdown/parser/kramdown/eob.rb +26 -0
  41. data/lib/kramdown/parser/kramdown/escaped_chars.rb +25 -0
  42. data/lib/kramdown/parser/kramdown/extensions.rb +214 -0
  43. data/lib/kramdown/parser/kramdown/footnote.rb +64 -0
  44. data/lib/kramdown/parser/kramdown/header.rb +70 -0
  45. data/lib/kramdown/parser/kramdown/horizontal_rule.rb +27 -0
  46. data/lib/kramdown/parser/kramdown/html.rb +162 -0
  47. data/lib/kramdown/parser/kramdown/html_entity.rb +34 -0
  48. data/lib/kramdown/parser/kramdown/line_break.rb +25 -0
  49. data/lib/kramdown/parser/kramdown/link.rb +149 -0
  50. data/lib/kramdown/parser/kramdown/list.rb +284 -0
  51. data/lib/kramdown/parser/kramdown/math.rb +53 -0
  52. data/lib/kramdown/parser/kramdown/paragraph.rb +62 -0
  53. data/lib/kramdown/parser/kramdown/smart_quotes.rb +174 -0
  54. data/lib/kramdown/parser/kramdown/table.rb +171 -0
  55. data/lib/kramdown/parser/kramdown/typographic_symbol.rb +44 -0
  56. data/lib/kramdown/parser/markdown.rb +57 -0
  57. data/lib/kramdown/utils.rb +45 -0
  58. data/lib/kramdown/utils/configurable.rb +45 -0
  59. data/lib/kramdown/utils/entities.rb +344 -0
  60. data/lib/kramdown/utils/html.rb +84 -0
  61. data/lib/kramdown/utils/lru_cache.rb +41 -0
  62. data/lib/kramdown/utils/string_scanner.rb +81 -0
  63. data/lib/kramdown/utils/unidecoder.rb +50 -0
  64. data/lib/kramdown/version.rb +15 -0
  65. data/man/man1/kramdown.1 +0 -0
  66. data/test/run_tests.rb +46 -0
  67. data/test/test_files.rb +298 -0
  68. data/test/test_location.rb +216 -0
  69. data/test/test_string_scanner_kramdown.rb +27 -0
  70. data/test/testcases/block/01_blank_line/spaces.html +1 -0
  71. data/test/testcases/block/01_blank_line/spaces.text +3 -0
  72. data/test/testcases/block/01_blank_line/tabs.html +1 -0
  73. data/test/testcases/block/01_blank_line/tabs.text +6 -0
  74. data/test/testcases/block/02_eob/beginning.html +1 -0
  75. data/test/testcases/block/02_eob/beginning.text +3 -0
  76. data/test/testcases/block/02_eob/end.html +1 -0
  77. data/test/testcases/block/02_eob/end.text +3 -0
  78. data/test/testcases/block/02_eob/middle.html +1 -0
  79. data/test/testcases/block/02_eob/middle.text +5 -0
  80. data/test/testcases/block/03_paragraph/indented.html +18 -0
  81. data/test/testcases/block/03_paragraph/indented.html.gfm +18 -0
  82. data/test/testcases/block/03_paragraph/indented.text +19 -0
  83. data/test/testcases/block/03_paragraph/line_break_last_line.html +9 -0
  84. data/test/testcases/block/03_paragraph/line_break_last_line.text +9 -0
  85. data/test/testcases/block/03_paragraph/no_newline_at_end.html +5 -0
  86. data/test/testcases/block/03_paragraph/no_newline_at_end.text +5 -0
  87. data/test/testcases/block/03_paragraph/one_para.html +1 -0
  88. data/test/testcases/block/03_paragraph/one_para.text +1 -0
  89. data/test/testcases/block/03_paragraph/standalone_image.html +8 -0
  90. data/test/testcases/block/03_paragraph/standalone_image.text +6 -0
  91. data/test/testcases/block/03_paragraph/two_para.html +4 -0
  92. data/test/testcases/block/03_paragraph/two_para.text +4 -0
  93. data/test/testcases/block/03_paragraph/with_html_to_native.html +1 -0
  94. data/test/testcases/block/03_paragraph/with_html_to_native.options +1 -0
  95. data/test/testcases/block/03_paragraph/with_html_to_native.text +1 -0
  96. data/test/testcases/block/04_header/atx_header.html +57 -0
  97. data/test/testcases/block/04_header/atx_header.text +54 -0
  98. data/test/testcases/block/04_header/atx_header_no_newline_at_end.html +1 -0
  99. data/test/testcases/block/04_header/atx_header_no_newline_at_end.text +1 -0
  100. data/test/testcases/block/04_header/header_type_offset.html +11 -0
  101. data/test/testcases/block/04_header/header_type_offset.kramdown +12 -0
  102. data/test/testcases/block/04_header/header_type_offset.latex +12 -0
  103. data/test/testcases/block/04_header/header_type_offset.options +2 -0
  104. data/test/testcases/block/04_header/header_type_offset.text +13 -0
  105. data/test/testcases/block/04_header/setext_header.html +32 -0
  106. data/test/testcases/block/04_header/setext_header.text +39 -0
  107. data/test/testcases/block/04_header/setext_header_no_newline_at_end.html +1 -0
  108. data/test/testcases/block/04_header/setext_header_no_newline_at_end.text +2 -0
  109. data/test/testcases/block/04_header/with_auto_id_prefix.html +3 -0
  110. data/test/testcases/block/04_header/with_auto_id_prefix.options +2 -0
  111. data/test/testcases/block/04_header/with_auto_id_prefix.text +3 -0
  112. data/test/testcases/block/04_header/with_auto_id_stripping.html +1 -0
  113. data/test/testcases/block/04_header/with_auto_id_stripping.options +1 -0
  114. data/test/testcases/block/04_header/with_auto_id_stripping.text +1 -0
  115. data/test/testcases/block/04_header/with_auto_ids.html +21 -0
  116. data/test/testcases/block/04_header/with_auto_ids.options +2 -0
  117. data/test/testcases/block/04_header/with_auto_ids.text +24 -0
  118. data/test/testcases/block/05_blockquote/indented.html +25 -0
  119. data/test/testcases/block/05_blockquote/indented.text +14 -0
  120. data/test/testcases/block/05_blockquote/lazy.html +34 -0
  121. data/test/testcases/block/05_blockquote/lazy.text +20 -0
  122. data/test/testcases/block/05_blockquote/nested.html +10 -0
  123. data/test/testcases/block/05_blockquote/nested.text +6 -0
  124. data/test/testcases/block/05_blockquote/no_newline_at_end.html +4 -0
  125. data/test/testcases/block/05_blockquote/no_newline_at_end.text +2 -0
  126. data/test/testcases/block/05_blockquote/very_long_line.html +3 -0
  127. data/test/testcases/block/05_blockquote/very_long_line.text +1 -0
  128. data/test/testcases/block/05_blockquote/with_code_blocks.html +15 -0
  129. data/test/testcases/block/05_blockquote/with_code_blocks.text +11 -0
  130. data/test/testcases/block/06_codeblock/disable-highlighting.html +4 -0
  131. data/test/testcases/block/06_codeblock/disable-highlighting.options +1 -0
  132. data/test/testcases/block/06_codeblock/disable-highlighting.text +4 -0
  133. data/test/testcases/block/06_codeblock/error.html +4 -0
  134. data/test/testcases/block/06_codeblock/error.text +4 -0
  135. data/test/testcases/block/06_codeblock/guess_lang_css_class.html +15 -0
  136. data/test/testcases/block/06_codeblock/guess_lang_css_class.options +2 -0
  137. data/test/testcases/block/06_codeblock/guess_lang_css_class.text +13 -0
  138. data/test/testcases/block/06_codeblock/highlighting-minted-with-opts.latex +9 -0
  139. data/test/testcases/block/06_codeblock/highlighting-minted-with-opts.options +4 -0
  140. data/test/testcases/block/06_codeblock/highlighting-minted-with-opts.text +5 -0
  141. data/test/testcases/block/06_codeblock/highlighting-minted.latex +8 -0
  142. data/test/testcases/block/06_codeblock/highlighting-minted.options +3 -0
  143. data/test/testcases/block/06_codeblock/highlighting-minted.text +4 -0
  144. data/test/testcases/block/06_codeblock/highlighting-opts.html +6 -0
  145. data/test/testcases/block/06_codeblock/highlighting-opts.options +7 -0
  146. data/test/testcases/block/06_codeblock/highlighting-opts.text +4 -0
  147. data/test/testcases/block/06_codeblock/highlighting.html +5 -0
  148. data/test/testcases/block/06_codeblock/highlighting.options +5 -0
  149. data/test/testcases/block/06_codeblock/highlighting.text +4 -0
  150. data/test/testcases/block/06_codeblock/issue_gh45.html +164 -0
  151. data/test/testcases/block/06_codeblock/issue_gh45.test +188 -0
  152. data/test/testcases/block/06_codeblock/lazy.html +4 -0
  153. data/test/testcases/block/06_codeblock/lazy.text +5 -0
  154. data/test/testcases/block/06_codeblock/no_newline_at_end.html +2 -0
  155. data/test/testcases/block/06_codeblock/no_newline_at_end.text +1 -0
  156. data/test/testcases/block/06_codeblock/no_newline_at_end_1.html +2 -0
  157. data/test/testcases/block/06_codeblock/no_newline_at_end_1.text +2 -0
  158. data/test/testcases/block/06_codeblock/normal.html +13 -0
  159. data/test/testcases/block/06_codeblock/normal.text +10 -0
  160. data/test/testcases/block/06_codeblock/rouge/disabled.html +2 -0
  161. data/test/testcases/block/06_codeblock/rouge/disabled.options +4 -0
  162. data/test/testcases/block/06_codeblock/rouge/disabled.text +1 -0
  163. data/test/testcases/block/06_codeblock/rouge/multiple.html +11 -0
  164. data/test/testcases/block/06_codeblock/rouge/multiple.options +4 -0
  165. data/test/testcases/block/06_codeblock/rouge/multiple.text +11 -0
  166. data/test/testcases/block/06_codeblock/rouge/simple.html +10 -0
  167. data/test/testcases/block/06_codeblock/rouge/simple.options +3 -0
  168. data/test/testcases/block/06_codeblock/rouge/simple.text +9 -0
  169. data/test/testcases/block/06_codeblock/tilde_syntax.html +7 -0
  170. data/test/testcases/block/06_codeblock/tilde_syntax.text +9 -0
  171. data/test/testcases/block/06_codeblock/whitespace.html +3 -0
  172. data/test/testcases/block/06_codeblock/whitespace.text +3 -0
  173. data/test/testcases/block/06_codeblock/with_blank_line.html +13 -0
  174. data/test/testcases/block/06_codeblock/with_blank_line.text +12 -0
  175. data/test/testcases/block/06_codeblock/with_eob_marker.html +6 -0
  176. data/test/testcases/block/06_codeblock/with_eob_marker.text +5 -0
  177. data/test/testcases/block/06_codeblock/with_ial.html +6 -0
  178. data/test/testcases/block/06_codeblock/with_ial.text +5 -0
  179. data/test/testcases/block/06_codeblock/with_lang_in_fenced_block.html +24 -0
  180. data/test/testcases/block/06_codeblock/with_lang_in_fenced_block.options +2 -0
  181. data/test/testcases/block/06_codeblock/with_lang_in_fenced_block.text +33 -0
  182. data/test/testcases/block/06_codeblock/with_lang_in_fenced_block_any_char.html +8 -0
  183. data/test/testcases/block/06_codeblock/with_lang_in_fenced_block_any_char.options +2 -0
  184. data/test/testcases/block/06_codeblock/with_lang_in_fenced_block_any_char.text +11 -0
  185. data/test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.html +3 -0
  186. data/test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.options +2 -0
  187. data/test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.text +4 -0
  188. data/test/testcases/block/07_horizontal_rule/error.html +7 -0
  189. data/test/testcases/block/07_horizontal_rule/error.text +7 -0
  190. data/test/testcases/block/07_horizontal_rule/normal.html +19 -0
  191. data/test/testcases/block/07_horizontal_rule/normal.text +20 -0
  192. data/test/testcases/block/07_horizontal_rule/sepspaces.html +3 -0
  193. data/test/testcases/block/07_horizontal_rule/sepspaces.text +3 -0
  194. data/test/testcases/block/07_horizontal_rule/septabs.html +3 -0
  195. data/test/testcases/block/07_horizontal_rule/septabs.text +3 -0
  196. data/test/testcases/block/08_list/brackets_in_item.latex +3 -0
  197. data/test/testcases/block/08_list/brackets_in_item.text +1 -0
  198. data/test/testcases/block/08_list/escaping.html +17 -0
  199. data/test/testcases/block/08_list/escaping.text +17 -0
  200. data/test/testcases/block/08_list/item_ial.html +10 -0
  201. data/test/testcases/block/08_list/item_ial.text +8 -0
  202. data/test/testcases/block/08_list/lazy.html +39 -0
  203. data/test/testcases/block/08_list/lazy.text +29 -0
  204. data/test/testcases/block/08_list/lazy_and_nested.html +9 -0
  205. data/test/testcases/block/08_list/lazy_and_nested.text +4 -0
  206. data/test/testcases/block/08_list/list_and_hr.html +9 -0
  207. data/test/testcases/block/08_list/list_and_hr.text +5 -0
  208. data/test/testcases/block/08_list/list_and_others.html +40 -0
  209. data/test/testcases/block/08_list/list_and_others.text +26 -0
  210. data/test/testcases/block/08_list/mixed.html +117 -0
  211. data/test/testcases/block/08_list/mixed.text +66 -0
  212. data/test/testcases/block/08_list/nested.html +17 -0
  213. data/test/testcases/block/08_list/nested.text +7 -0
  214. data/test/testcases/block/08_list/other_first_element.html +39 -0
  215. data/test/testcases/block/08_list/other_first_element.text +18 -0
  216. data/test/testcases/block/08_list/simple_ol.html +19 -0
  217. data/test/testcases/block/08_list/simple_ol.text +13 -0
  218. data/test/testcases/block/08_list/simple_ul.html +48 -0
  219. data/test/testcases/block/08_list/simple_ul.text +36 -0
  220. data/test/testcases/block/08_list/single_item.html +3 -0
  221. data/test/testcases/block/08_list/single_item.text +1 -0
  222. data/test/testcases/block/08_list/special_cases.html +62 -0
  223. data/test/testcases/block/08_list/special_cases.text +40 -0
  224. data/test/testcases/block/09_html/comment.html +18 -0
  225. data/test/testcases/block/09_html/comment.text +15 -0
  226. data/test/testcases/block/09_html/content_model/deflists.html +6 -0
  227. data/test/testcases/block/09_html/content_model/deflists.options +1 -0
  228. data/test/testcases/block/09_html/content_model/deflists.text +6 -0
  229. data/test/testcases/block/09_html/content_model/tables.html +14 -0
  230. data/test/testcases/block/09_html/content_model/tables.options +1 -0
  231. data/test/testcases/block/09_html/content_model/tables.text +14 -0
  232. data/test/testcases/block/09_html/html5_attributes.html +15 -0
  233. data/test/testcases/block/09_html/html5_attributes.text +15 -0
  234. data/test/testcases/block/09_html/html_after_block.html +7 -0
  235. data/test/testcases/block/09_html/html_after_block.text +5 -0
  236. data/test/testcases/block/09_html/html_and_codeblocks.html +15 -0
  237. data/test/testcases/block/09_html/html_and_codeblocks.options +1 -0
  238. data/test/testcases/block/09_html/html_and_codeblocks.text +13 -0
  239. data/test/testcases/block/09_html/html_and_headers.html +5 -0
  240. data/test/testcases/block/09_html/html_and_headers.text +6 -0
  241. data/test/testcases/block/09_html/html_to_native/code.html +10 -0
  242. data/test/testcases/block/09_html/html_to_native/code.text +9 -0
  243. data/test/testcases/block/09_html/html_to_native/comment.html +7 -0
  244. data/test/testcases/block/09_html/html_to_native/comment.text +8 -0
  245. data/test/testcases/block/09_html/html_to_native/emphasis.html +6 -0
  246. data/test/testcases/block/09_html/html_to_native/emphasis.text +6 -0
  247. data/test/testcases/block/09_html/html_to_native/entity.html +1 -0
  248. data/test/testcases/block/09_html/html_to_native/entity.text +1 -0
  249. data/test/testcases/block/09_html/html_to_native/header.html +6 -0
  250. data/test/testcases/block/09_html/html_to_native/header.options +2 -0
  251. data/test/testcases/block/09_html/html_to_native/header.text +6 -0
  252. data/test/testcases/block/09_html/html_to_native/list_dl.html +8 -0
  253. data/test/testcases/block/09_html/html_to_native/list_dl.text +8 -0
  254. data/test/testcases/block/09_html/html_to_native/list_ol.html +15 -0
  255. data/test/testcases/block/09_html/html_to_native/list_ol.text +17 -0
  256. data/test/testcases/block/09_html/html_to_native/list_ul.html +19 -0
  257. data/test/testcases/block/09_html/html_to_native/list_ul.text +22 -0
  258. data/test/testcases/block/09_html/html_to_native/options +1 -0
  259. data/test/testcases/block/09_html/html_to_native/paragraph.html +3 -0
  260. data/test/testcases/block/09_html/html_to_native/paragraph.text +4 -0
  261. data/test/testcases/block/09_html/html_to_native/table_normal.html +12 -0
  262. data/test/testcases/block/09_html/html_to_native/table_normal.text +12 -0
  263. data/test/testcases/block/09_html/html_to_native/table_simple.html +61 -0
  264. data/test/testcases/block/09_html/html_to_native/table_simple.text +71 -0
  265. data/test/testcases/block/09_html/html_to_native/typography.html +1 -0
  266. data/test/testcases/block/09_html/html_to_native/typography.text +1 -0
  267. data/test/testcases/block/09_html/invalid_html_1.html +5 -0
  268. data/test/testcases/block/09_html/invalid_html_1.text +5 -0
  269. data/test/testcases/block/09_html/invalid_html_2.html +5 -0
  270. data/test/testcases/block/09_html/invalid_html_2.text +5 -0
  271. data/test/testcases/block/09_html/markdown_attr.html +38 -0
  272. data/test/testcases/block/09_html/markdown_attr.text +38 -0
  273. data/test/testcases/block/09_html/not_parsed.html +24 -0
  274. data/test/testcases/block/09_html/not_parsed.text +24 -0
  275. data/test/testcases/block/09_html/parse_as_raw.html +35 -0
  276. data/test/testcases/block/09_html/parse_as_raw.htmlinput +34 -0
  277. data/test/testcases/block/09_html/parse_as_raw.options +1 -0
  278. data/test/testcases/block/09_html/parse_as_raw.text +33 -0
  279. data/test/testcases/block/09_html/parse_as_span.html +12 -0
  280. data/test/testcases/block/09_html/parse_as_span.htmlinput +12 -0
  281. data/test/testcases/block/09_html/parse_as_span.options +1 -0
  282. data/test/testcases/block/09_html/parse_as_span.text +9 -0
  283. data/test/testcases/block/09_html/parse_block_html.html +21 -0
  284. data/test/testcases/block/09_html/parse_block_html.options +1 -0
  285. data/test/testcases/block/09_html/parse_block_html.text +17 -0
  286. data/test/testcases/block/09_html/processing_instruction.html +12 -0
  287. data/test/testcases/block/09_html/processing_instruction.text +12 -0
  288. data/test/testcases/block/09_html/simple.html +60 -0
  289. data/test/testcases/block/09_html/simple.options +1 -0
  290. data/test/testcases/block/09_html/simple.text +55 -0
  291. data/test/testcases/block/09_html/standalone_image_in_div.htmlinput +7 -0
  292. data/test/testcases/block/09_html/standalone_image_in_div.text +8 -0
  293. data/test/testcases/block/09_html/textarea.html +8 -0
  294. data/test/testcases/block/09_html/textarea.text +8 -0
  295. data/test/testcases/block/09_html/xml.html +8 -0
  296. data/test/testcases/block/09_html/xml.text +7 -0
  297. data/test/testcases/block/10_ald/simple.html +2 -0
  298. data/test/testcases/block/10_ald/simple.text +8 -0
  299. data/test/testcases/block/11_ial/auto_id_and_ial.html +1 -0
  300. data/test/testcases/block/11_ial/auto_id_and_ial.options +1 -0
  301. data/test/testcases/block/11_ial/auto_id_and_ial.text +2 -0
  302. data/test/testcases/block/11_ial/nested.html +11 -0
  303. data/test/testcases/block/11_ial/nested.text +15 -0
  304. data/test/testcases/block/11_ial/simple.html +29 -0
  305. data/test/testcases/block/11_ial/simple.text +41 -0
  306. data/test/testcases/block/12_extension/comment.html +8 -0
  307. data/test/testcases/block/12_extension/comment.text +12 -0
  308. data/test/testcases/block/12_extension/ignored.html +8 -0
  309. data/test/testcases/block/12_extension/ignored.text +8 -0
  310. data/test/testcases/block/12_extension/nomarkdown.html +10 -0
  311. data/test/testcases/block/12_extension/nomarkdown.kramdown +20 -0
  312. data/test/testcases/block/12_extension/nomarkdown.latex +13 -0
  313. data/test/testcases/block/12_extension/nomarkdown.text +21 -0
  314. data/test/testcases/block/12_extension/options.html +21 -0
  315. data/test/testcases/block/12_extension/options.text +23 -0
  316. data/test/testcases/block/12_extension/options2.html +10 -0
  317. data/test/testcases/block/12_extension/options2.text +5 -0
  318. data/test/testcases/block/12_extension/options3.html +8 -0
  319. data/test/testcases/block/12_extension/options3.text +7 -0
  320. data/test/testcases/block/13_definition_list/auto_ids.html +15 -0
  321. data/test/testcases/block/13_definition_list/auto_ids.text +18 -0
  322. data/test/testcases/block/13_definition_list/definition_at_beginning.html +1 -0
  323. data/test/testcases/block/13_definition_list/definition_at_beginning.text +1 -0
  324. data/test/testcases/block/13_definition_list/deflist_ial.html +4 -0
  325. data/test/testcases/block/13_definition_list/deflist_ial.text +4 -0
  326. data/test/testcases/block/13_definition_list/item_ial.html +17 -0
  327. data/test/testcases/block/13_definition_list/item_ial.text +16 -0
  328. data/test/testcases/block/13_definition_list/multiple_terms.html +13 -0
  329. data/test/testcases/block/13_definition_list/multiple_terms.text +10 -0
  330. data/test/testcases/block/13_definition_list/no_def_list.html +2 -0
  331. data/test/testcases/block/13_definition_list/no_def_list.text +2 -0
  332. data/test/testcases/block/13_definition_list/para_wrapping.html +10 -0
  333. data/test/testcases/block/13_definition_list/para_wrapping.text +6 -0
  334. data/test/testcases/block/13_definition_list/separated_by_eob.html +8 -0
  335. data/test/testcases/block/13_definition_list/separated_by_eob.text +5 -0
  336. data/test/testcases/block/13_definition_list/simple.html +10 -0
  337. data/test/testcases/block/13_definition_list/simple.text +10 -0
  338. data/test/testcases/block/13_definition_list/styled_terms.html +4 -0
  339. data/test/testcases/block/13_definition_list/styled_terms.text +2 -0
  340. data/test/testcases/block/13_definition_list/too_much_space.html +3 -0
  341. data/test/testcases/block/13_definition_list/too_much_space.text +4 -0
  342. data/test/testcases/block/13_definition_list/with_blocks.html +38 -0
  343. data/test/testcases/block/13_definition_list/with_blocks.text +24 -0
  344. data/test/testcases/block/14_table/empty_tag_in_cell.html +8 -0
  345. data/test/testcases/block/14_table/empty_tag_in_cell.options +1 -0
  346. data/test/testcases/block/14_table/empty_tag_in_cell.text +1 -0
  347. data/test/testcases/block/14_table/errors.html +12 -0
  348. data/test/testcases/block/14_table/errors.text +13 -0
  349. data/test/testcases/block/14_table/escaping.html +52 -0
  350. data/test/testcases/block/14_table/escaping.text +19 -0
  351. data/test/testcases/block/14_table/footer.html +65 -0
  352. data/test/testcases/block/14_table/footer.text +25 -0
  353. data/test/testcases/block/14_table/header.html +117 -0
  354. data/test/testcases/block/14_table/header.text +39 -0
  355. data/test/testcases/block/14_table/no_table.html +3 -0
  356. data/test/testcases/block/14_table/no_table.text +3 -0
  357. data/test/testcases/block/14_table/simple.html +192 -0
  358. data/test/testcases/block/14_table/simple.text +53 -0
  359. data/test/testcases/block/14_table/table_with_footnote.html +25 -0
  360. data/test/testcases/block/14_table/table_with_footnote.latex +11 -0
  361. data/test/testcases/block/14_table/table_with_footnote.text +6 -0
  362. data/test/testcases/block/15_math/gh_128.html +1 -0
  363. data/test/testcases/block/15_math/gh_128.text +1 -0
  364. data/test/testcases/block/15_math/no_engine.html +3 -0
  365. data/test/testcases/block/15_math/no_engine.options +1 -0
  366. data/test/testcases/block/15_math/no_engine.text +2 -0
  367. data/test/testcases/block/15_math/normal.html +30 -0
  368. data/test/testcases/block/15_math/normal.text +30 -0
  369. data/test/testcases/block/16_toc/no_toc.html +14 -0
  370. data/test/testcases/block/16_toc/no_toc.text +16 -0
  371. data/test/testcases/block/16_toc/toc_exclude.html +35 -0
  372. data/test/testcases/block/16_toc/toc_exclude.options +1 -0
  373. data/test/testcases/block/16_toc/toc_exclude.text +19 -0
  374. data/test/testcases/block/16_toc/toc_levels.html +24 -0
  375. data/test/testcases/block/16_toc/toc_levels.options +2 -0
  376. data/test/testcases/block/16_toc/toc_levels.text +16 -0
  377. data/test/testcases/block/16_toc/toc_with_footnotes.html +13 -0
  378. data/test/testcases/block/16_toc/toc_with_footnotes.options +1 -0
  379. data/test/testcases/block/16_toc/toc_with_footnotes.text +6 -0
  380. data/test/testcases/block/16_toc/toc_with_links.html +8 -0
  381. data/test/testcases/block/16_toc/toc_with_links.options +2 -0
  382. data/test/testcases/block/16_toc/toc_with_links.text +8 -0
  383. data/test/testcases/cjk-line-break.html +4 -0
  384. data/test/testcases/cjk-line-break.options +1 -0
  385. data/test/testcases/cjk-line-break.text +12 -0
  386. data/test/testcases/encoding.html +46 -0
  387. data/test/testcases/encoding.text +28 -0
  388. data/test/testcases/man/example.man +123 -0
  389. data/test/testcases/man/example.text +85 -0
  390. data/test/testcases/man/heading-name-dash-description.man +4 -0
  391. data/test/testcases/man/heading-name-dash-description.text +1 -0
  392. data/test/testcases/man/heading-name-description.man +4 -0
  393. data/test/testcases/man/heading-name-description.text +2 -0
  394. data/test/testcases/man/heading-name-section-description.man +4 -0
  395. data/test/testcases/man/heading-name-section-description.text +1 -0
  396. data/test/testcases/man/heading-name-section.man +2 -0
  397. data/test/testcases/man/heading-name-section.text +1 -0
  398. data/test/testcases/man/heading-name.man +2 -0
  399. data/test/testcases/man/heading-name.text +1 -0
  400. data/test/testcases/man/sections.man +4 -0
  401. data/test/testcases/man/sections.text +11 -0
  402. data/test/testcases/man/text-escaping.man +8 -0
  403. data/test/testcases/man/text-escaping.text +7 -0
  404. data/test/testcases/span/01_link/empty.html +5 -0
  405. data/test/testcases/span/01_link/empty.text +5 -0
  406. data/test/testcases/span/01_link/empty_title.htmlinput +3 -0
  407. data/test/testcases/span/01_link/empty_title.text +7 -0
  408. data/test/testcases/span/01_link/image_in_a.html +5 -0
  409. data/test/testcases/span/01_link/image_in_a.text +5 -0
  410. data/test/testcases/span/01_link/imagelinks.html +15 -0
  411. data/test/testcases/span/01_link/imagelinks.text +18 -0
  412. data/test/testcases/span/01_link/inline.html +46 -0
  413. data/test/testcases/span/01_link/inline.text +48 -0
  414. data/test/testcases/span/01_link/latex_escaping.latex +6 -0
  415. data/test/testcases/span/01_link/latex_escaping.text +5 -0
  416. data/test/testcases/span/01_link/link_defs.html +9 -0
  417. data/test/testcases/span/01_link/link_defs.text +27 -0
  418. data/test/testcases/span/01_link/link_defs_with_ial.html +4 -0
  419. data/test/testcases/span/01_link/link_defs_with_ial.text +16 -0
  420. data/test/testcases/span/01_link/links_with_angle_brackets.html +3 -0
  421. data/test/testcases/span/01_link/links_with_angle_brackets.text +3 -0
  422. data/test/testcases/span/01_link/reference.html +37 -0
  423. data/test/testcases/span/01_link/reference.options +3 -0
  424. data/test/testcases/span/01_link/reference.text +53 -0
  425. data/test/testcases/span/02_emphasis/empty.html +3 -0
  426. data/test/testcases/span/02_emphasis/empty.text +3 -0
  427. data/test/testcases/span/02_emphasis/errors.html +9 -0
  428. data/test/testcases/span/02_emphasis/errors.text +9 -0
  429. data/test/testcases/span/02_emphasis/nesting.html +41 -0
  430. data/test/testcases/span/02_emphasis/nesting.text +36 -0
  431. data/test/testcases/span/02_emphasis/normal.html +65 -0
  432. data/test/testcases/span/02_emphasis/normal.options +1 -0
  433. data/test/testcases/span/02_emphasis/normal.text +63 -0
  434. data/test/testcases/span/03_codespan/empty.html +5 -0
  435. data/test/testcases/span/03_codespan/empty.text +5 -0
  436. data/test/testcases/span/03_codespan/errors.html +1 -0
  437. data/test/testcases/span/03_codespan/errors.text +1 -0
  438. data/test/testcases/span/03_codespan/highlighting-minted.latex +2 -0
  439. data/test/testcases/span/03_codespan/highlighting-minted.options +1 -0
  440. data/test/testcases/span/03_codespan/highlighting-minted.text +1 -0
  441. data/test/testcases/span/03_codespan/highlighting.html +1 -0
  442. data/test/testcases/span/03_codespan/highlighting.text +1 -0
  443. data/test/testcases/span/03_codespan/normal-css-class.html +1 -0
  444. data/test/testcases/span/03_codespan/normal-css-class.options +2 -0
  445. data/test/testcases/span/03_codespan/normal-css-class.text +1 -0
  446. data/test/testcases/span/03_codespan/normal.html +16 -0
  447. data/test/testcases/span/03_codespan/normal.text +16 -0
  448. data/test/testcases/span/03_codespan/rouge/disabled.html +1 -0
  449. data/test/testcases/span/03_codespan/rouge/disabled.options +4 -0
  450. data/test/testcases/span/03_codespan/rouge/disabled.text +1 -0
  451. data/test/testcases/span/03_codespan/rouge/simple.html +1 -0
  452. data/test/testcases/span/03_codespan/rouge/simple.options +1 -0
  453. data/test/testcases/span/03_codespan/rouge/simple.text +1 -0
  454. data/test/testcases/span/04_footnote/backlink_inline.html +79 -0
  455. data/test/testcases/span/04_footnote/backlink_inline.options +1 -0
  456. data/test/testcases/span/04_footnote/backlink_inline.text +38 -0
  457. data/test/testcases/span/04_footnote/backlink_text.html +9 -0
  458. data/test/testcases/span/04_footnote/backlink_text.options +1 -0
  459. data/test/testcases/span/04_footnote/backlink_text.text +3 -0
  460. data/test/testcases/span/04_footnote/definitions.html +17 -0
  461. data/test/testcases/span/04_footnote/definitions.latex +17 -0
  462. data/test/testcases/span/04_footnote/definitions.text +24 -0
  463. data/test/testcases/span/04_footnote/footnote_nr.html +12 -0
  464. data/test/testcases/span/04_footnote/footnote_nr.latex +2 -0
  465. data/test/testcases/span/04_footnote/footnote_nr.options +1 -0
  466. data/test/testcases/span/04_footnote/footnote_nr.text +4 -0
  467. data/test/testcases/span/04_footnote/footnote_prefix.html +12 -0
  468. data/test/testcases/span/04_footnote/footnote_prefix.options +1 -0
  469. data/test/testcases/span/04_footnote/footnote_prefix.text +4 -0
  470. data/test/testcases/span/04_footnote/inside_footnote.html +17 -0
  471. data/test/testcases/span/04_footnote/inside_footnote.text +9 -0
  472. data/test/testcases/span/04_footnote/markers.html +46 -0
  473. data/test/testcases/span/04_footnote/markers.latex +23 -0
  474. data/test/testcases/span/04_footnote/markers.options +2 -0
  475. data/test/testcases/span/04_footnote/markers.text +27 -0
  476. data/test/testcases/span/04_footnote/placement.html +11 -0
  477. data/test/testcases/span/04_footnote/placement.options +1 -0
  478. data/test/testcases/span/04_footnote/placement.text +8 -0
  479. data/test/testcases/span/04_footnote/regexp_problem.html +14 -0
  480. data/test/testcases/span/04_footnote/regexp_problem.options +2 -0
  481. data/test/testcases/span/04_footnote/regexp_problem.text +52 -0
  482. data/test/testcases/span/04_footnote/without_backlink.html +9 -0
  483. data/test/testcases/span/04_footnote/without_backlink.options +1 -0
  484. data/test/testcases/span/04_footnote/without_backlink.text +3 -0
  485. data/test/testcases/span/05_html/across_lines.html +1 -0
  486. data/test/testcases/span/05_html/across_lines.text +2 -0
  487. data/test/testcases/span/05_html/button.html +7 -0
  488. data/test/testcases/span/05_html/button.text +7 -0
  489. data/test/testcases/span/05_html/invalid.html +1 -0
  490. data/test/testcases/span/05_html/invalid.text +1 -0
  491. data/test/testcases/span/05_html/link_with_mailto.html +1 -0
  492. data/test/testcases/span/05_html/link_with_mailto.text +1 -0
  493. data/test/testcases/span/05_html/mark_element.html +3 -0
  494. data/test/testcases/span/05_html/mark_element.text +3 -0
  495. data/test/testcases/span/05_html/markdown_attr.html +6 -0
  496. data/test/testcases/span/05_html/markdown_attr.text +6 -0
  497. data/test/testcases/span/05_html/normal.html +43 -0
  498. data/test/testcases/span/05_html/normal.text +43 -0
  499. data/test/testcases/span/05_html/raw_span_elements.html +2 -0
  500. data/test/testcases/span/05_html/raw_span_elements.text +2 -0
  501. data/test/testcases/span/05_html/xml.html +5 -0
  502. data/test/testcases/span/05_html/xml.text +5 -0
  503. data/test/testcases/span/abbreviations/abbrev.html +21 -0
  504. data/test/testcases/span/abbreviations/abbrev.text +34 -0
  505. data/test/testcases/span/abbreviations/abbrev_defs.html +2 -0
  506. data/test/testcases/span/abbreviations/abbrev_defs.text +5 -0
  507. data/test/testcases/span/abbreviations/in_footnote.html +9 -0
  508. data/test/testcases/span/abbreviations/in_footnote.text +5 -0
  509. data/test/testcases/span/autolinks/url_links.html +15 -0
  510. data/test/testcases/span/autolinks/url_links.text +16 -0
  511. data/test/testcases/span/escaped_chars/normal.html +47 -0
  512. data/test/testcases/span/escaped_chars/normal.text +47 -0
  513. data/test/testcases/span/extension/comment.html +6 -0
  514. data/test/testcases/span/extension/comment.text +6 -0
  515. data/test/testcases/span/extension/ignored.html +1 -0
  516. data/test/testcases/span/extension/ignored.text +1 -0
  517. data/test/testcases/span/extension/nomarkdown.html +1 -0
  518. data/test/testcases/span/extension/nomarkdown.text +1 -0
  519. data/test/testcases/span/extension/options.html +1 -0
  520. data/test/testcases/span/extension/options.text +1 -0
  521. data/test/testcases/span/ial/simple.html +6 -0
  522. data/test/testcases/span/ial/simple.text +6 -0
  523. data/test/testcases/span/line_breaks/normal.html +11 -0
  524. data/test/testcases/span/line_breaks/normal.latex +12 -0
  525. data/test/testcases/span/line_breaks/normal.text +11 -0
  526. data/test/testcases/span/math/no_engine.html +1 -0
  527. data/test/testcases/span/math/no_engine.options +1 -0
  528. data/test/testcases/span/math/no_engine.text +1 -0
  529. data/test/testcases/span/math/normal.html +10 -0
  530. data/test/testcases/span/math/normal.text +10 -0
  531. data/test/testcases/span/text_substitutions/entities.html +6 -0
  532. data/test/testcases/span/text_substitutions/entities.options +1 -0
  533. data/test/testcases/span/text_substitutions/entities.text +6 -0
  534. data/test/testcases/span/text_substitutions/entities_as_char.html +1 -0
  535. data/test/testcases/span/text_substitutions/entities_as_char.options +2 -0
  536. data/test/testcases/span/text_substitutions/entities_as_char.text +1 -0
  537. data/test/testcases/span/text_substitutions/entities_as_input.html +1 -0
  538. data/test/testcases/span/text_substitutions/entities_as_input.options +1 -0
  539. data/test/testcases/span/text_substitutions/entities_as_input.text +1 -0
  540. data/test/testcases/span/text_substitutions/entities_numeric.html +1 -0
  541. data/test/testcases/span/text_substitutions/entities_numeric.options +1 -0
  542. data/test/testcases/span/text_substitutions/entities_numeric.text +1 -0
  543. data/test/testcases/span/text_substitutions/entities_symbolic.html +1 -0
  544. data/test/testcases/span/text_substitutions/entities_symbolic.options +1 -0
  545. data/test/testcases/span/text_substitutions/entities_symbolic.text +1 -0
  546. data/test/testcases/span/text_substitutions/greaterthan.html +1 -0
  547. data/test/testcases/span/text_substitutions/greaterthan.text +1 -0
  548. data/test/testcases/span/text_substitutions/lowerthan.html +1 -0
  549. data/test/testcases/span/text_substitutions/lowerthan.text +1 -0
  550. data/test/testcases/span/text_substitutions/typography.html +40 -0
  551. data/test/testcases/span/text_substitutions/typography.options +1 -0
  552. data/test/testcases/span/text_substitutions/typography.text +40 -0
  553. data/test/testcases/span/text_substitutions/typography_subst.html +3 -0
  554. data/test/testcases/span/text_substitutions/typography_subst.latex +4 -0
  555. data/test/testcases/span/text_substitutions/typography_subst.options +8 -0
  556. data/test/testcases/span/text_substitutions/typography_subst.text +3 -0
  557. metadata +659 -0
@@ -0,0 +1,84 @@
1
+ # -*- coding: utf-8; frozen_string_literal: true -*-
2
+ #
3
+ #--
4
+ # Copyright (C) 2009-2019 Thomas Leitner <t_leitner@gmx.at>
5
+ #
6
+ # This file is part of kramdown which is licensed under the MIT.
7
+ #++
8
+ #
9
+
10
+ require 'rexml/parsers/baseparser'
11
+
12
+ module Kramdown
13
+
14
+ module Utils
15
+
16
+ # Provides convenience methods for HTML related tasks.
17
+ #
18
+ # *Note* that this module has to be mixed into a class that has a @root (containing an element
19
+ # of type :root) and an @options (containing an options hash) instance variable so that some of
20
+ # the methods can work correctly.
21
+ module Html
22
+
23
+ # Convert the entity +e+ to a string. The optional parameter +original+ may contain the
24
+ # original representation of the entity.
25
+ #
26
+ # This method uses the option +entity_output+ to determine the output form for the entity.
27
+ def entity_to_str(e, original = nil)
28
+ entity_output = @options[:entity_output]
29
+
30
+ if entity_output == :as_char &&
31
+ (c = e.char.encode(@root.options[:encoding]) rescue nil) &&
32
+ ((c = e.char) == '"' || !ESCAPE_MAP.key?(c))
33
+ c
34
+ elsif (entity_output == :as_input || entity_output == :as_char) && original
35
+ original
36
+ elsif (entity_output == :symbolic || ESCAPE_MAP.key?(e.char)) && !e.name.nil?
37
+ "&#{e.name};"
38
+ else # default to :numeric
39
+ "&##{e.code_point};"
40
+ end
41
+ end
42
+
43
+ # Return the HTML representation of the attributes +attr+.
44
+ def html_attributes(attr)
45
+ return '' if attr.empty?
46
+
47
+ attr.map do |k, v|
48
+ v.nil? || (k == 'id' && v.strip.empty?) ? '' : " #{k}=\"#{escape_html(v.to_s, :attribute)}\""
49
+ end.join('')
50
+ end
51
+
52
+ # :stopdoc:
53
+ ESCAPE_MAP = {
54
+ '<' => '&lt;',
55
+ '>' => '&gt;',
56
+ '&' => '&amp;',
57
+ '"' => '&quot;',
58
+ }
59
+ ESCAPE_ALL_RE = /<|>|&/
60
+ ESCAPE_TEXT_RE = Regexp.union(REXML::Parsers::BaseParser::REFERENCE_RE, /<|>|&/)
61
+ ESCAPE_ATTRIBUTE_RE = Regexp.union(REXML::Parsers::BaseParser::REFERENCE_RE, /<|>|&|"/)
62
+ ESCAPE_RE_FROM_TYPE = {all: ESCAPE_ALL_RE, text: ESCAPE_TEXT_RE, attribute: ESCAPE_ATTRIBUTE_RE}
63
+ # :startdoc:
64
+
65
+ # Escape the special HTML characters in the string +str+. The parameter +type+ specifies what
66
+ # is escaped: :all - all special HTML characters except the quotation mark as well as
67
+ # entities, :text - all special HTML characters except the quotation mark but no entities and
68
+ # :attribute - all special HTML characters including the quotation mark but no entities.
69
+ def escape_html(str, type = :all)
70
+ str.gsub(ESCAPE_RE_FROM_TYPE[type]) {|m| ESCAPE_MAP[m] || m }
71
+ end
72
+
73
+ REDUNDANT_LINE_BREAK_REGEX = /([\p{Han}\p{Hiragana}\p{Katakana}]+)\n([\p{Han}\p{Hiragana}\p{Katakana}]+)/u
74
+ def fix_cjk_line_break(str)
75
+ while str.gsub!(REDUNDANT_LINE_BREAK_REGEX, '\1\2')
76
+ end
77
+ str
78
+ end
79
+
80
+ end
81
+
82
+ end
83
+
84
+ end
@@ -0,0 +1,41 @@
1
+ # -*- coding: utf-8; frozen_string_literal: true -*-
2
+ #
3
+ #--
4
+ # Copyright (C) 2009-2019 Thomas Leitner <t_leitner@gmx.at>
5
+ #
6
+ # This file is part of kramdown which is licensed under the MIT.
7
+ #++
8
+ #
9
+
10
+ module Kramdown
11
+ module Utils
12
+
13
+ # A simple least recently used (LRU) cache.
14
+ #
15
+ # The cache relies on the fact that Ruby's Hash class maintains insertion order. So deleting
16
+ # and re-inserting a key-value pair on access moves the key to the last position. When an
17
+ # entry is added and the cache is full, the first entry is removed.
18
+ class LRUCache
19
+
20
+ # Creates a new LRUCache that can hold +size+ entries.
21
+ def initialize(size)
22
+ @size = size
23
+ @cache = {}
24
+ end
25
+
26
+ # Returns the stored value for +key+ or +nil+ if no value was stored under the key.
27
+ def [](key)
28
+ (val = @cache.delete(key)).nil? ? nil : @cache[key] = val
29
+ end
30
+
31
+ # Stores the +value+ under the +key+.
32
+ def []=(key, value)
33
+ @cache.delete(key)
34
+ @cache[key] = value
35
+ @cache.shift if @cache.length > @size
36
+ end
37
+
38
+ end
39
+
40
+ end
41
+ end
@@ -0,0 +1,81 @@
1
+ # -*- coding: utf-8; frozen_string_literal: true -*-
2
+ #
3
+ #--
4
+ # Copyright (C) 2009-2019 Thomas Leitner <t_leitner@gmx.at>
5
+ #
6
+ # This file is part of kramdown which is licensed under the MIT.
7
+ #++
8
+ #
9
+
10
+ require 'strscan'
11
+
12
+ module Kramdown
13
+ module Utils
14
+
15
+ # This patched StringScanner adds line number information for current scan position and a
16
+ # start_line_number override for nested StringScanners.
17
+ class StringScanner < ::StringScanner
18
+
19
+ # The start line number. Used for nested StringScanners that scan a sub-string of the source
20
+ # document. The kramdown parser uses this, e.g., for span level parsers.
21
+ attr_reader :start_line_number
22
+
23
+ # Takes the start line number as optional second argument.
24
+ #
25
+ # Note: The original second argument is no longer used so this should be safe.
26
+ def initialize(string, start_line_number = 1)
27
+ super(string)
28
+ @start_line_number = start_line_number || 1
29
+ @previous_pos = 0
30
+ @previous_line_number = @start_line_number
31
+ end
32
+
33
+ # Sets the byte position of the scan pointer.
34
+ #
35
+ # Note: This also resets some internal variables, so always use pos= when setting the position
36
+ # and don't use any other method for that!
37
+ def pos=(pos)
38
+ if self.pos > pos
39
+ @previous_line_number = @start_line_number
40
+ @previous_pos = 0
41
+ end
42
+ super
43
+ end
44
+
45
+ # Return information needed to revert the byte position of the string scanner in a performant
46
+ # way.
47
+ #
48
+ # The returned data can be fed to #revert_pos to revert the position to the saved one.
49
+ #
50
+ # Note: Just saving #pos won't be enough.
51
+ def save_pos
52
+ [pos, @previous_pos, @previous_line_number]
53
+ end
54
+
55
+ # Revert the position to one saved by #save_pos.
56
+ def revert_pos(data)
57
+ self.pos = data[0]
58
+ @previous_pos, @previous_line_number = data[1], data[2]
59
+ end
60
+
61
+ # Returns the line number for current charpos.
62
+ #
63
+ # NOTE: Requires that all line endings are normalized to '\n'
64
+ #
65
+ # NOTE: Normally we'd have to add one to the count of newlines to get the correct line number.
66
+ # However we add the one indirectly by using a one-based start_line_number.
67
+ def current_line_number
68
+ # Not using string[@previous_pos..best_pos].count('\n') because it is slower
69
+ strscan = ::StringScanner.new(string)
70
+ strscan.pos = @previous_pos
71
+ old_pos = pos + 1
72
+ @previous_line_number += 1 while strscan.skip_until(/\n/) && strscan.pos <= old_pos
73
+
74
+ @previous_pos = (eos? ? pos : pos + 1)
75
+ @previous_line_number
76
+ end
77
+
78
+ end
79
+
80
+ end
81
+ end
@@ -0,0 +1,50 @@
1
+ # -*- coding: utf-8; frozen_string_literal: true -*-
2
+ #
3
+ #--
4
+ # Copyright (C) 2009-2019 Thomas Leitner <t_leitner@gmx.at>
5
+ #
6
+ # This file is part of kramdown which is licensed under the MIT.
7
+ #++
8
+ #
9
+ # This file is based on code originally from the Stringex library and needs the data files from
10
+ # Stringex to work correctly.
11
+
12
+ module Kramdown
13
+ module Utils
14
+
15
+ # Provides the ability to tranliterate Unicode strings into plain ASCII ones.
16
+ module Unidecoder
17
+
18
+ gem 'stringex'
19
+ path = $:.find do |dir|
20
+ File.directory?(File.join(File.expand_path(dir), "stringex", "unidecoder_data"))
21
+ end
22
+
23
+ if !path
24
+ def self.decode(string)
25
+ string
26
+ end
27
+ else
28
+
29
+ CODEPOINTS = Hash.new do |h, k|
30
+ h[k] = YAML.load_file(File.join(path, "stringex", "unidecoder_data", "#{k}.yml"))
31
+ end
32
+
33
+ # Transliterate string from Unicode into ASCII.
34
+ def self.decode(string)
35
+ string.gsub(/[^\x00-\x7f]/u) do |codepoint|
36
+ begin
37
+ unpacked = codepoint.unpack("U")[0]
38
+ CODEPOINTS[sprintf("x%02x", unpacked >> 8)][unpacked & 255]
39
+ rescue StandardError
40
+ "?"
41
+ end
42
+ end
43
+ end
44
+
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+ end
@@ -0,0 +1,15 @@
1
+ # -*- coding: utf-8; frozen_string_literal: true -*-
2
+ #
3
+ #--
4
+ # Copyright (C) 2009-2019 Thomas Leitner <t_leitner@gmx.at>
5
+ #
6
+ # This file is part of kramdown which is licensed under the MIT.
7
+ #++
8
+ #
9
+
10
+ module Kramdown
11
+
12
+ # The kramdown version.
13
+ VERSION = '2.3.0'
14
+
15
+ end
File without changes
@@ -0,0 +1,46 @@
1
+ # -*- coding: utf-8; frozen_string_literal: true -*-
2
+ #
3
+ #--
4
+ # Copyright (C) 2009-2019 Thomas Leitner <t_leitner@gmx.at>
5
+ #
6
+ # This file is part of kramdown which is licensed under the MIT.
7
+ #++
8
+ #
9
+
10
+ $:.unshift File.dirname(__FILE__) + '/../lib'
11
+ require 'kramdown'
12
+ require 'test/unit/assertions'
13
+ require 'yaml'
14
+
15
+ include Test::Unit::Assertions
16
+
17
+ arg = ARGV[0] || File.join(File.dirname(__FILE__), 'testcases')
18
+
19
+ arg = if File.directory?(arg)
20
+ File.join(arg, '**/*.text')
21
+ else
22
+ arg + '.text'
23
+ end
24
+
25
+ width = ((size = `stty size 2>/dev/null`).length > 0 ? size.split.last.to_i : 72) rescue 72
26
+ width -= 8
27
+ fwidth = 0
28
+ Dir[arg].each {|f| fwidth = [fwidth, f.length + 10].max }.each do |file|
29
+ print(('Testing ' + file + ' ').ljust([fwidth, width].min))
30
+ $stdout.flush
31
+
32
+ html_file = file.sub('.text', '.html')
33
+ opts_file = file.sub('.text', '.options')
34
+ opts_file = File.join(File.dirname(file), 'options') unless File.exist?(opts_file)
35
+ options = File.exist?(opts_file) ? YAML.safe_load(File.read(opts_file)) : {auto_ids: false, footnote_nr: 1}
36
+ doc = Kramdown::Document.new(File.read(file), options)
37
+ begin
38
+ assert_equal(File.read(html_file), doc.to_html)
39
+ puts 'PASSED'
40
+ rescue StandardError
41
+ puts ' FAILED'
42
+ puts $!.message if $VERBOSE
43
+ puts $!.backtrace if $DEBUG
44
+ end
45
+ puts "Warnings:\n" + doc.warnings.join("\n") if !doc.warnings.empty? && $VERBOSE
46
+ end
@@ -0,0 +1,298 @@
1
+ # -*- coding: utf-8; frozen_string_literal: true -*-
2
+ #
3
+ #--
4
+ # Copyright (C) 2009-2019 Thomas Leitner <t_leitner@gmx.at>
5
+ #
6
+ # This file is part of kramdown which is licensed under the MIT.
7
+ #++
8
+ #
9
+
10
+ require 'minitest/autorun'
11
+ require 'kramdown'
12
+ require 'yaml'
13
+ require 'tmpdir'
14
+ require 'open3'
15
+
16
+ begin
17
+ require 'kramdown/converter/syntax_highlighter/rouge'
18
+
19
+ Kramdown::Converter::SyntaxHighlighter::Rouge.formatter_class.send(:define_method, :format) do |tokens, &b|
20
+ super(tokens, &b).sub(/<\/code><\/pre>\n?/, "</code></pre>\n")
21
+ end
22
+
23
+ # custom formatter for tests
24
+ class RougeHTMLFormatters < Kramdown::Converter::SyntaxHighlighter::Rouge.formatter_class
25
+
26
+ tag 'rouge_html_formatters'
27
+
28
+ def stream(tokens, &b)
29
+ yield %(<div class="custom-class">)
30
+ super
31
+ yield %(</div>)
32
+ end
33
+
34
+ end
35
+ rescue LoadError, SyntaxError, NameError
36
+ end
37
+
38
+ Encoding.default_external = 'utf-8'
39
+
40
+ class TestFiles < Minitest::Test
41
+
42
+ EXCLUDE_KD_FILES = [].compact
43
+
44
+ # Generate test methods for kramdown-to-xxx conversion
45
+ Dir[File.dirname(__FILE__) + '/testcases/**/*.text'].each do |text_file|
46
+ next if EXCLUDE_KD_FILES.any? {|f| text_file =~ /#{f}/ }
47
+ basename = text_file.sub(/\.text$/, '')
48
+ opts_file = text_file.sub(/\.text$/, '.options')
49
+ (Dir[basename + ".*"] - [text_file, opts_file]).each do |output_file|
50
+ output_format = File.extname(output_file)[1..-1]
51
+ next unless Kramdown::Converter.const_defined?(output_format[0..0].upcase + output_format[1..-1])
52
+ define_method('test_' + text_file.tr('.', '_') + "_to_#{output_format}") do
53
+ opts_file = File.join(File.dirname(text_file), 'options') unless File.exist?(opts_file)
54
+ options = File.exist?(opts_file) ? YAML.load(File.read(opts_file)) : {auto_ids: false, footnote_nr: 1}
55
+ doc = Kramdown::Document.new(File.read(text_file), options)
56
+ assert_equal(File.read(output_file), doc.send("to_#{output_format}"))
57
+ end
58
+ end
59
+ end
60
+
61
+ # Generate test methods for html-to-{html,kramdown} conversion
62
+ `tidy -v 2>&1`
63
+ if $?.exitstatus != 0
64
+ warn("Skipping html-to-{html,kramdown} tests because tidy executable is missing")
65
+ else
66
+ EXCLUDE_HTML_FILES = [
67
+ 'test/testcases/block/06_codeblock/whitespace.html', # bc of span inside pre
68
+ 'test/testcases/block/09_html/simple.html', # bc of xml elements
69
+ 'test/testcases/span/03_codespan/highlighting.html', # bc of span elements inside code element
70
+ 'test/testcases/block/04_header/with_auto_ids.html', # bc of auto_ids=true option
71
+ 'test/testcases/block/04_header/header_type_offset.html', # bc of header_offset option
72
+ 'test/testcases/block/06_codeblock/rouge/simple.html', # bc of double surrounding <div>
73
+ 'test/testcases/block/06_codeblock/rouge/multiple.html', # bc of double surrounding <div>
74
+ 'test/testcases/block/06_codeblock/highlighting.html', # bc of span elements inside code element
75
+ 'test/testcases/block/06_codeblock/highlighting-opts.html', # bc of span elements inside code element
76
+ 'test/testcases/block/06_codeblock/guess_lang_css_class.html', # bc of double surrounding <div>
77
+ 'test/testcases/block/12_extension/options3.html', # bc of rouge
78
+ 'test/testcases/block/14_table/empty_tag_in_cell.html', # bc of tidy
79
+ 'test/testcases/block/15_math/mathjax_preview.html', # bc of mathjax preview
80
+ 'test/testcases/block/15_math/mathjax_preview_simple.html', # bc of mathjax preview
81
+ 'test/testcases/block/15_math/mathjax_preview_as_code.html', # bc of mathjax preview
82
+ 'test/testcases/span/05_html/mark_element.html', # bc of tidy
83
+ 'test/testcases/block/09_html/xml.html', # bc of tidy
84
+ 'test/testcases/span/05_html/xml.html', # bc of tidy
85
+ ].compact
86
+ EXCLUDE_HTML_TEXT_FILES = [
87
+ 'test/testcases/block/09_html/parse_as_span.htmlinput',
88
+ 'test/testcases/block/09_html/parse_as_raw.htmlinput',
89
+ ].compact
90
+ Dir[File.dirname(__FILE__) + '/testcases/**/*.{html,htmlinput}'].each do |html_file|
91
+ next if EXCLUDE_HTML_FILES.any? {|f| html_file =~ /#{f}/ }
92
+
93
+ out_files = []
94
+ out_files << [(html_file =~ /\.htmlinput$/ ? html_file.sub(/input$/, '') : html_file), :to_html]
95
+ if html_file =~ /\.htmlinput$/ && EXCLUDE_HTML_TEXT_FILES.none? {|f| html_file =~ /#{f}/ }
96
+ out_files << [html_file.sub(/htmlinput$/, 'text'), :to_kramdown]
97
+ end
98
+ out_files.select {|f, _| File.exist?(f) }.each do |out_file, out_method|
99
+ define_method('test_' + html_file.tr('.', '_') + "_to_#{File.extname(out_file)}") do
100
+ opts_file = html_file.sub(/\.html(input)?$/, '.options')
101
+ opts_file = File.join(File.dirname(html_file), 'options') unless File.exist?(opts_file)
102
+ options = File.exist?(opts_file) ? YAML.load(File.read(opts_file)) : {auto_ids: false, footnote_nr: 1}
103
+ doc = Kramdown::Document.new(File.read(html_file), options.merge(input: 'html'))
104
+ if out_method == :to_html
105
+ assert_equal(tidy_output(File.read(out_file)), tidy_output(doc.send(out_method)))
106
+ else
107
+ assert_equal(File.read(out_file), doc.send(out_method))
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
113
+
114
+ def tidy_output(out)
115
+ return true
116
+ cmd = "tidy -q --doctype omit -utf8"
117
+ result, error, status = Open3.capture3(cmd, stdin_data: out)
118
+ if status.exitstatus == 2
119
+ raise "Problem using tidy: #{error}"
120
+ end
121
+ result
122
+ end
123
+
124
+ # Generate test methods for text-to-latex conversion and compilation
125
+ `latex -v 2>&1`
126
+ if $?.exitstatus != 0
127
+ warn("Skipping latex compilation tests because latex executable is missing")
128
+ else
129
+ EXCLUDE_LATEX_FILES = [
130
+ 'test/testcases/span/01_link/image_in_a.text', # bc of image link
131
+ 'test/testcases/span/01_link/imagelinks.text', # bc of image links
132
+ 'test/testcases/span/01_link/empty_title.text',
133
+ 'test/testcases/span/04_footnote/markers.text', # bc of footnote in header
134
+ 'test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.text',
135
+ 'test/testcases/block/06_codeblock/with_lang_in_fenced_block_any_char.text',
136
+ 'test/testcases/block/03_paragraph/standalone_image.text', # bc of standalone image
137
+ 'test/testcases/cjk-line-break.text', # latex unicode support
138
+ ].compact
139
+ Dir[File.dirname(__FILE__) + '/testcases/**/*.text'].each do |text_file|
140
+ next if EXCLUDE_LATEX_FILES.any? {|f| text_file =~ /#{f}$/ }
141
+ define_method('test_' + text_file.tr('.', '_') + "_to_latex_compilation") do
142
+ latex = Kramdown::Document.new(File.read(text_file), auto_ids: false, footnote_nr: 1,
143
+ template: 'document').to_latex
144
+ Dir.mktmpdir do |tmpdir|
145
+ result = IO.popen("latex -output-directory='#{tmpdir}' 2>/dev/null", 'r+') do |io|
146
+ io.write(latex)
147
+ io.close_write
148
+ io.read
149
+ end
150
+ assert($?.exitstatus == 0, result.scan(/^!(.*\n.*)/).join("\n"))
151
+ end
152
+ end
153
+ end
154
+ end
155
+
156
+ # Generate test methods for text->kramdown->html conversion
157
+ `tidy -v 2>&1`
158
+ if $?.exitstatus != 0
159
+ warn("Skipping text->kramdown->html tests because tidy executable is missing")
160
+ else
161
+ EXCLUDE_TEXT_FILES = [
162
+ 'test/testcases/span/05_html/markdown_attr.text', # bc of markdown attr
163
+ 'test/testcases/block/09_html/markdown_attr.text', # bc of markdown attr
164
+ 'test/testcases/span/extension/options.text', # bc of parse_span_html option
165
+ 'test/testcases/block/12_extension/options.text', # bc of options option
166
+ 'test/testcases/block/12_extension/options3.text', # bc of options option
167
+ 'test/testcases/block/09_html/content_model/tables.text', # bc of parse_block_html option
168
+ 'test/testcases/block/09_html/html_to_native/header.text', # bc of auto_ids option that interferes
169
+ 'test/testcases/block/09_html/html_to_native/table_simple.text', # bc of tr style attr getting removed
170
+ 'test/testcases/block/09_html/simple.text', # bc of webgen:block elements
171
+ 'test/testcases/block/11_ial/simple.text', # bc of change of ordering of attributes in header
172
+ 'test/testcases/span/extension/comment.text', # bc of comment text modifications (can this be avoided?)
173
+ 'test/testcases/block/04_header/header_type_offset.text', # bc of header_offset being applied twice
174
+ 'test/testcases/block/06_codeblock/rouge/simple.text',
175
+ 'test/testcases/block/06_codeblock/rouge/multiple.text', # check, what document contain more, than one code block
176
+ 'test/testcases/block/14_table/empty_tag_in_cell.text', # bc of tidy
177
+ 'test/testcases/span/01_link/link_defs_with_ial.text', # bc of attribute ordering
178
+ 'test/testcases/span/05_html/mark_element.text', # bc of tidy
179
+ 'test/testcases/block/09_html/xml.text', # bc of tidy
180
+ 'test/testcases/span/05_html/xml.text', # bc of tidy
181
+ 'test/testcases/block/03_paragraph/standalone_image.text', # bc of standalone image
182
+ 'test/testcases/cjk-line-break.text',
183
+ 'test/testcases/block/09_html/standalone_image_in_div.html', # bc of standalone image
184
+ ].compact
185
+ Dir[File.dirname(__FILE__) + '/testcases/**/*.text'].each do |text_file|
186
+ next if EXCLUDE_TEXT_FILES.any? {|f| text_file =~ /#{f}$/ }
187
+ html_file = text_file.sub(/\.text$/, '.html')
188
+ next unless File.exist?(html_file)
189
+ define_method('test_' + text_file.tr('.', '_') + "_to_kramdown_to_html") do
190
+ opts_file = text_file.sub(/\.text$/, '.options')
191
+ opts_file = File.join(File.dirname(text_file), 'options') unless File.exist?(opts_file)
192
+ options = File.exist?(opts_file) ? YAML.load(File.read(opts_file)) : {auto_ids: false, footnote_nr: 1}
193
+ kdtext = Kramdown::Document.new(File.read(text_file), options).to_kramdown
194
+ html = Kramdown::Document.new(kdtext, options).to_html
195
+ assert_equal(tidy_output(File.read(html_file)), tidy_output(html))
196
+ end
197
+ end
198
+ end
199
+
200
+ # Generate test methods for html-to-kramdown-to-html conversion
201
+ `tidy -v 2>&1`
202
+ if $?.exitstatus != 0
203
+ warn("Skipping html-to-kramdown-to-html tests because tidy executable is missing")
204
+ else
205
+ EXCLUDE_HTML_KD_FILES = [
206
+ 'test/testcases/span/extension/options.html', # bc of parse_span_html option
207
+ 'test/testcases/span/05_html/normal.html', # bc of br tag before closing p tag
208
+ 'test/testcases/block/12_extension/nomarkdown.html', # bc of nomarkdown extension
209
+ 'test/testcases/block/12_extension/options3.html', # bc of rouge
210
+ 'test/testcases/block/09_html/simple.html', # bc of webgen:block elements
211
+ 'test/testcases/block/09_html/markdown_attr.html', # bc of markdown attr
212
+ 'test/testcases/block/09_html/html_to_native/table_simple.html', # bc of invalidly converted simple table
213
+ 'test/testcases/block/06_codeblock/whitespace.html', # bc of entity to char conversion
214
+ 'test/testcases/block/06_codeblock/rouge/simple.html', # bc of double surrounding <div>
215
+ 'test/testcases/block/06_codeblock/rouge/multiple.html', # bc of double surrounding <div>
216
+ 'test/testcases/block/06_codeblock/guess_lang_css_class.html', # bc of double surrounding <div>
217
+ 'test/testcases/block/06_codeblock/highlighting.html', # bc of span elements inside code element
218
+ 'test/testcases/block/06_codeblock/highlighting-opts.html', # bc of span elements inside code element
219
+ 'test/testcases/block/11_ial/simple.html', # bc of change of ordering of attributes in header
220
+ 'test/testcases/span/03_codespan/highlighting.html', # bc of span elements inside code element
221
+ 'test/testcases/block/04_header/with_auto_ids.html', # bc of auto_ids=true option
222
+ 'test/testcases/block/04_header/header_type_offset.html', # bc of header_offset option
223
+ 'test/testcases/block/16_toc/toc_exclude.html', # bc of different attribute ordering
224
+ 'test/testcases/span/autolinks/url_links.html', # bc of quot entity being converted to char
225
+ 'test/testcases/block/14_table/empty_tag_in_cell.html', # bc of tidy
226
+ 'test/testcases/span/01_link/link_defs_with_ial.html', # bc of attribute ordering
227
+ 'test/testcases/span/05_html/mark_element.html', # bc of tidy
228
+ 'test/testcases/block/09_html/xml.html', # bc of tidy
229
+ 'test/testcases/span/05_html/xml.html', # bc of tidy
230
+ 'test/testcases/block/03_paragraph/standalone_image.html', # bc of standalone image
231
+ 'test/testcases/block/15_math/normal.html', # bc of mathjax and HTML parser
232
+ 'test/testcases/block/15_math/gh_128.html', # bc of mathjax and HTML parser
233
+ 'test/testcases/span/04_footnote/backlink_inline.html', # bc of mathjax
234
+ 'test/testcases/block/09_html/standalone_image_in_div.html', # bc of standalone image
235
+ 'test/testcases/block/09_html/processing_instruction.html', # bc of PI
236
+ ].compact
237
+ Dir[File.dirname(__FILE__) + '/testcases/**/*.html'].each do |html_file|
238
+ next if EXCLUDE_HTML_KD_FILES.any? {|f| html_file =~ /#{f}$/ }
239
+ define_method('test_' + html_file.tr('.', '_') + "_to_kramdown_to_html") do
240
+ kd = Kramdown::Document.new(File.read(html_file), input: 'html',
241
+ auto_ids: false, footnote_nr: 1).to_kramdown
242
+ opts_file = html_file.sub(/\.html$/, '.options')
243
+ opts_file = File.join(File.dirname(html_file), 'options') unless File.exist?(opts_file)
244
+ options = File.exist?(opts_file) ? YAML.load(File.read(opts_file)) : {auto_ids: false, footnote_nr: 1}
245
+ doc = Kramdown::Document.new(kd, options)
246
+ assert_equal(tidy_output(File.read(html_file)), tidy_output(doc.to_html))
247
+ end
248
+ end
249
+ end
250
+
251
+ # Generate test methods for text-manpage conversion
252
+ Dir[File.dirname(__FILE__) + '/testcases/man/**/*.text'].each do |text_file|
253
+ define_method('test_' + text_file.tr('.', '_') + "_to_man") do
254
+ man_file = text_file.sub(/\.text$/, '.man')
255
+ doc = Kramdown::Document.new(File.read(text_file))
256
+ assert_equal(File.read(man_file), doc.to_man)
257
+ end
258
+ end
259
+
260
+ EXCLUDE_MODIFY = [
261
+ 'test/testcases/block/06_codeblock/rouge/multiple.text', # bc of HTMLFormater in options
262
+ ].compact
263
+
264
+ # Generate test methods for asserting that converters don't modify the document tree.
265
+ Dir[File.dirname(__FILE__) + '/testcases/**/*.text'].each do |text_file|
266
+ opts_file = text_file.sub(/\.text$/, '.options')
267
+ options = File.exist?(opts_file) ? YAML.load(File.read(opts_file)) : {auto_ids: false, footnote_nr: 1}
268
+ (Kramdown::Converter.constants.map(&:to_sym) -
269
+ [:Base, :RemoveHtmlTags, :MathEngine, :SyntaxHighlighter]).each do |conv_class|
270
+ next if EXCLUDE_MODIFY.any? {|f| text_file =~ /#{f}$/ }
271
+ define_method("test_whether_#{conv_class}_modifies_tree_with_file_#{text_file.tr('.', '_')}") do
272
+ doc = Kramdown::Document.new(File.read(text_file), options)
273
+ options_before = Marshal.load(Marshal.dump(doc.options))
274
+ tree_before = Marshal.load(Marshal.dump(doc.root))
275
+ Kramdown::Converter.const_get(conv_class).convert(doc.root, doc.options)
276
+ assert_equal(options_before, doc.options)
277
+ assert_tree_not_changed(tree_before, doc.root)
278
+ end
279
+ end
280
+ end
281
+
282
+ def assert_tree_not_changed(old, new)
283
+ assert_equal(old.type, new.type, "type mismatch")
284
+ if old.value.kind_of?(Kramdown::Element)
285
+ assert_tree_not_changed(old.value, new.value)
286
+ else
287
+ assert(old.value == new.value, "value mismatch")
288
+ end
289
+ assert_equal(old.attr, new.attr, "attr mismatch")
290
+ assert_equal(old.options, new.options, "options mismatch")
291
+ assert_equal(old.children.length, new.children.length, "children count mismatch")
292
+
293
+ old.children.each_with_index do |child, index|
294
+ assert_tree_not_changed(child, new.children[index])
295
+ end
296
+ end
297
+
298
+ end