kramdown 0.14.2 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of kramdown might be problematic. Click here for more details.

Files changed (323) hide show
  1. checksums.yaml +7 -0
  2. data/CONTRIBUTERS +63 -1
  3. data/COPYING +17 -11
  4. data/README.md +35 -14
  5. data/VERSION +1 -1
  6. data/bin/kramdown +92 -40
  7. data/data/kramdown/document.html +4 -0
  8. data/data/kramdown/document.latex +7 -0
  9. data/lib/kramdown.rb +3 -16
  10. data/lib/kramdown/converter.rb +42 -16
  11. data/lib/kramdown/converter/base.rb +102 -38
  12. data/lib/kramdown/converter/hash_ast.rb +38 -0
  13. data/lib/kramdown/converter/html.rb +232 -141
  14. data/lib/kramdown/converter/kramdown.rb +122 -104
  15. data/lib/kramdown/converter/latex.rb +95 -78
  16. data/lib/kramdown/converter/man.rb +300 -0
  17. data/lib/kramdown/converter/math_engine/mathjax.rb +32 -0
  18. data/lib/kramdown/converter/remove_html_tags.rb +8 -17
  19. data/lib/kramdown/converter/syntax_highlighter.rb +56 -0
  20. data/lib/kramdown/converter/syntax_highlighter/minted.rb +35 -0
  21. data/lib/kramdown/converter/syntax_highlighter/rouge.rb +85 -0
  22. data/lib/kramdown/converter/toc.rb +7 -20
  23. data/lib/kramdown/document.rb +30 -37
  24. data/lib/kramdown/element.rb +54 -27
  25. data/lib/kramdown/error.rb +3 -16
  26. data/lib/kramdown/options.rb +392 -247
  27. data/lib/kramdown/parser.rb +3 -16
  28. data/lib/kramdown/parser/base.rb +28 -33
  29. data/lib/kramdown/parser/html.rb +151 -119
  30. data/lib/kramdown/parser/kramdown.rb +87 -50
  31. data/lib/kramdown/parser/kramdown/abbreviation.rb +33 -27
  32. data/lib/kramdown/parser/kramdown/autolink.rb +7 -25
  33. data/lib/kramdown/parser/kramdown/blank_line.rb +6 -19
  34. data/lib/kramdown/parser/kramdown/block_boundary.rb +6 -18
  35. data/lib/kramdown/parser/kramdown/blockquote.rb +6 -19
  36. data/lib/kramdown/parser/kramdown/codeblock.rb +15 -24
  37. data/lib/kramdown/parser/kramdown/codespan.rb +20 -22
  38. data/lib/kramdown/parser/kramdown/emphasis.rb +15 -24
  39. data/lib/kramdown/parser/kramdown/eob.rb +3 -16
  40. data/lib/kramdown/parser/kramdown/escaped_chars.rb +3 -16
  41. data/lib/kramdown/parser/kramdown/extensions.rb +66 -56
  42. data/lib/kramdown/parser/kramdown/footnote.rb +21 -31
  43. data/lib/kramdown/parser/kramdown/header.rb +37 -37
  44. data/lib/kramdown/parser/kramdown/horizontal_rule.rb +5 -17
  45. data/lib/kramdown/parser/kramdown/html.rb +47 -56
  46. data/lib/kramdown/parser/kramdown/html_entity.rb +9 -19
  47. data/lib/kramdown/parser/kramdown/line_break.rb +4 -17
  48. data/lib/kramdown/parser/kramdown/link.rb +39 -38
  49. data/lib/kramdown/parser/kramdown/list.rb +124 -82
  50. data/lib/kramdown/parser/kramdown/math.rb +12 -24
  51. data/lib/kramdown/parser/kramdown/paragraph.rb +23 -24
  52. data/lib/kramdown/parser/kramdown/smart_quotes.rb +26 -66
  53. data/lib/kramdown/parser/kramdown/table.rb +41 -48
  54. data/lib/kramdown/parser/kramdown/typographic_symbol.rb +14 -22
  55. data/lib/kramdown/parser/markdown.rb +11 -23
  56. data/lib/kramdown/utils.rb +21 -18
  57. data/lib/kramdown/utils/configurable.rb +45 -0
  58. data/lib/kramdown/utils/entities.rb +287 -292
  59. data/lib/kramdown/utils/html.rb +27 -30
  60. data/lib/kramdown/utils/lru_cache.rb +41 -0
  61. data/lib/kramdown/utils/string_scanner.rb +81 -0
  62. data/lib/kramdown/utils/unidecoder.rb +50 -0
  63. data/lib/kramdown/version.rb +4 -17
  64. data/man/man1/kramdown.1 +340 -347
  65. data/test/run_tests.rb +7 -20
  66. data/test/test_files.rb +188 -100
  67. data/test/test_location.rb +216 -0
  68. data/test/test_string_scanner_kramdown.rb +27 -0
  69. data/test/testcases/block/03_paragraph/indented.html.gfm +18 -0
  70. data/test/testcases/block/03_paragraph/line_break_last_line.html +9 -0
  71. data/test/testcases/block/03_paragraph/line_break_last_line.text +9 -0
  72. data/test/testcases/block/03_paragraph/standalone_image.html +8 -0
  73. data/test/testcases/block/03_paragraph/standalone_image.text +6 -0
  74. data/test/testcases/block/03_paragraph/with_html_to_native.html +1 -0
  75. data/test/testcases/block/03_paragraph/with_html_to_native.options +1 -0
  76. data/test/testcases/block/03_paragraph/with_html_to_native.text +1 -0
  77. data/test/testcases/block/04_header/atx_header.html +15 -1
  78. data/test/testcases/block/04_header/atx_header.text +14 -1
  79. data/test/testcases/block/04_header/setext_header.html +3 -1
  80. data/test/testcases/block/04_header/setext_header.text +4 -1
  81. data/test/testcases/block/04_header/with_auto_id_stripping.html +1 -0
  82. data/test/testcases/block/04_header/with_auto_id_stripping.options +1 -0
  83. data/test/testcases/block/04_header/with_auto_id_stripping.text +1 -0
  84. data/test/testcases/block/04_header/with_auto_ids.html +2 -0
  85. data/test/testcases/block/04_header/with_auto_ids.options +1 -0
  86. data/test/testcases/block/04_header/with_auto_ids.text +2 -0
  87. data/test/testcases/block/06_codeblock/guess_lang_css_class.html +15 -0
  88. data/test/testcases/block/06_codeblock/guess_lang_css_class.options +2 -0
  89. data/test/testcases/block/06_codeblock/guess_lang_css_class.text +13 -0
  90. data/test/testcases/block/06_codeblock/highlighting-minted-with-opts.latex +9 -0
  91. data/test/testcases/block/06_codeblock/highlighting-minted-with-opts.options +4 -0
  92. data/test/testcases/block/06_codeblock/highlighting-minted-with-opts.text +5 -0
  93. data/test/testcases/block/06_codeblock/highlighting-minted.latex +8 -0
  94. data/test/testcases/block/06_codeblock/highlighting-minted.options +3 -0
  95. data/test/testcases/block/06_codeblock/highlighting-minted.text +4 -0
  96. data/test/testcases/block/06_codeblock/highlighting-opts.html +6 -0
  97. data/test/testcases/block/06_codeblock/highlighting-opts.options +7 -0
  98. data/test/testcases/block/06_codeblock/highlighting-opts.text +4 -0
  99. data/test/testcases/block/06_codeblock/highlighting.html +5 -6
  100. data/test/testcases/block/06_codeblock/issue_gh45.html +164 -0
  101. data/test/testcases/block/06_codeblock/issue_gh45.test +188 -0
  102. data/test/testcases/block/06_codeblock/rouge/disabled.html +2 -0
  103. data/test/testcases/block/06_codeblock/rouge/disabled.options +4 -0
  104. data/test/testcases/block/06_codeblock/rouge/disabled.text +1 -0
  105. data/test/testcases/block/06_codeblock/rouge/multiple.html +11 -0
  106. data/test/testcases/block/06_codeblock/rouge/multiple.options +4 -0
  107. data/test/testcases/block/06_codeblock/rouge/multiple.text +11 -0
  108. data/test/testcases/block/06_codeblock/rouge/simple.html +10 -0
  109. data/test/testcases/block/06_codeblock/rouge/simple.options +3 -0
  110. data/test/testcases/block/06_codeblock/rouge/simple.text +9 -0
  111. data/test/testcases/block/06_codeblock/with_lang_in_fenced_block.options +1 -1
  112. data/test/testcases/block/06_codeblock/with_lang_in_fenced_block_any_char.html +8 -0
  113. data/test/testcases/block/06_codeblock/with_lang_in_fenced_block_any_char.options +2 -0
  114. data/test/testcases/block/06_codeblock/with_lang_in_fenced_block_any_char.text +11 -0
  115. data/test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.html +3 -0
  116. data/test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.options +2 -0
  117. data/test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.text +4 -0
  118. data/test/testcases/block/07_horizontal_rule/error.html +2 -2
  119. data/test/testcases/block/07_horizontal_rule/normal.html +2 -0
  120. data/test/testcases/block/07_horizontal_rule/normal.text +3 -0
  121. data/test/testcases/block/08_list/brackets_in_item.latex +3 -0
  122. data/test/testcases/block/08_list/brackets_in_item.text +1 -0
  123. data/test/testcases/block/08_list/lazy_and_nested.html +9 -0
  124. data/test/testcases/block/08_list/lazy_and_nested.text +4 -0
  125. data/test/testcases/block/09_html/html5_attributes.html +2 -0
  126. data/test/testcases/block/09_html/html5_attributes.text +2 -0
  127. data/test/testcases/block/09_html/html_after_block.html +7 -0
  128. data/test/testcases/block/09_html/html_after_block.text +5 -0
  129. data/test/testcases/block/09_html/html_to_native/table_simple.html +13 -0
  130. data/test/testcases/block/09_html/html_to_native/table_simple.text +15 -0
  131. data/test/testcases/block/09_html/html_to_native/typography.html +1 -1
  132. data/test/testcases/block/09_html/not_parsed.html +1 -1
  133. data/test/testcases/block/09_html/processing_instruction.html +5 -6
  134. data/test/testcases/block/09_html/simple.html +1 -5
  135. data/test/testcases/block/09_html/simple.text +1 -5
  136. data/test/testcases/block/09_html/standalone_image_in_div.htmlinput +7 -0
  137. data/test/testcases/block/09_html/standalone_image_in_div.text +8 -0
  138. data/test/testcases/block/09_html/textarea.html +8 -0
  139. data/test/testcases/block/09_html/textarea.text +8 -0
  140. data/test/testcases/block/09_html/xml.html +8 -0
  141. data/test/testcases/block/09_html/xml.text +7 -0
  142. data/test/testcases/block/11_ial/simple.html +5 -1
  143. data/test/testcases/block/11_ial/simple.text +8 -1
  144. data/test/testcases/block/12_extension/options.html +4 -4
  145. data/test/testcases/block/12_extension/options.text +2 -0
  146. data/test/testcases/block/12_extension/options2.html +4 -4
  147. data/test/testcases/block/12_extension/options3.html +7 -6
  148. data/test/testcases/block/12_extension/options3.text +2 -2
  149. data/test/testcases/block/13_definition_list/auto_ids.html +15 -0
  150. data/test/testcases/block/13_definition_list/auto_ids.text +18 -0
  151. data/test/testcases/block/13_definition_list/item_ial.html +5 -0
  152. data/test/testcases/block/13_definition_list/item_ial.text +8 -0
  153. data/test/testcases/block/14_table/empty_tag_in_cell.html +8 -0
  154. data/test/testcases/block/14_table/empty_tag_in_cell.options +1 -0
  155. data/test/testcases/block/14_table/empty_tag_in_cell.text +1 -0
  156. data/test/testcases/block/14_table/errors.html +4 -0
  157. data/test/testcases/block/14_table/errors.text +4 -0
  158. data/test/testcases/block/14_table/header.html +21 -0
  159. data/test/testcases/block/14_table/header.text +7 -0
  160. data/test/testcases/block/14_table/simple.html +22 -7
  161. data/test/testcases/block/14_table/simple.text +4 -0
  162. data/test/testcases/block/14_table/table_with_footnote.html +4 -4
  163. data/test/testcases/block/15_math/gh_128.html +1 -0
  164. data/test/testcases/block/15_math/gh_128.text +1 -0
  165. data/test/testcases/block/15_math/no_engine.html +3 -0
  166. data/test/testcases/block/15_math/no_engine.options +1 -0
  167. data/test/testcases/block/15_math/no_engine.text +2 -0
  168. data/test/testcases/block/15_math/normal.html +17 -14
  169. data/test/testcases/block/15_math/normal.text +2 -0
  170. data/test/testcases/block/16_toc/toc_exclude.html +7 -7
  171. data/test/testcases/block/16_toc/toc_levels.html +5 -5
  172. data/test/testcases/block/16_toc/toc_levels.text +1 -1
  173. data/test/testcases/block/16_toc/toc_with_footnotes.html +5 -5
  174. data/test/testcases/block/16_toc/toc_with_links.html +8 -0
  175. data/test/testcases/block/16_toc/toc_with_links.options +2 -0
  176. data/test/testcases/block/16_toc/toc_with_links.text +8 -0
  177. data/test/testcases/cjk-line-break.html +4 -0
  178. data/test/testcases/cjk-line-break.options +1 -0
  179. data/test/testcases/cjk-line-break.text +12 -0
  180. data/test/testcases/man/example.man +123 -0
  181. data/test/testcases/man/example.text +85 -0
  182. data/test/testcases/man/heading-name-dash-description.man +4 -0
  183. data/test/testcases/man/heading-name-dash-description.text +1 -0
  184. data/test/testcases/man/heading-name-description.man +4 -0
  185. data/test/testcases/man/heading-name-description.text +2 -0
  186. data/test/testcases/man/heading-name-section-description.man +4 -0
  187. data/test/testcases/man/heading-name-section-description.text +1 -0
  188. data/test/testcases/man/heading-name-section.man +2 -0
  189. data/test/testcases/man/heading-name-section.text +1 -0
  190. data/test/testcases/man/heading-name.man +2 -0
  191. data/test/testcases/man/heading-name.text +1 -0
  192. data/test/testcases/man/sections.man +4 -0
  193. data/test/testcases/man/sections.text +11 -0
  194. data/test/testcases/man/text-escaping.man +8 -0
  195. data/test/testcases/man/text-escaping.text +7 -0
  196. data/test/testcases/span/01_link/empty.html +1 -1
  197. data/test/testcases/span/01_link/empty_title.htmlinput +3 -0
  198. data/test/testcases/span/01_link/empty_title.text +7 -0
  199. data/test/testcases/span/01_link/imagelinks.html +1 -0
  200. data/test/testcases/span/01_link/imagelinks.text +2 -0
  201. data/test/testcases/span/01_link/inline.html +1 -1
  202. data/test/testcases/span/01_link/latex_escaping.latex +6 -0
  203. data/test/testcases/span/01_link/latex_escaping.text +5 -0
  204. data/test/testcases/span/01_link/link_defs.html +1 -1
  205. data/test/testcases/span/01_link/link_defs.text +2 -1
  206. data/test/testcases/span/01_link/link_defs_with_ial.html +4 -0
  207. data/test/testcases/span/01_link/link_defs_with_ial.text +16 -0
  208. data/test/testcases/span/01_link/reference.html +3 -3
  209. data/test/testcases/span/02_emphasis/nesting.html +3 -0
  210. data/test/testcases/span/02_emphasis/nesting.text +4 -1
  211. data/test/testcases/span/02_emphasis/normal.html +19 -0
  212. data/test/testcases/span/02_emphasis/normal.options +1 -0
  213. data/test/testcases/span/02_emphasis/normal.text +17 -0
  214. data/test/testcases/span/03_codespan/highlighting-minted.latex +2 -0
  215. data/test/testcases/span/03_codespan/highlighting-minted.options +1 -0
  216. data/test/testcases/span/03_codespan/highlighting-minted.text +1 -0
  217. data/test/testcases/span/03_codespan/highlighting.html +1 -1
  218. data/test/testcases/span/03_codespan/normal-css-class.html +1 -0
  219. data/test/testcases/span/03_codespan/normal-css-class.options +2 -0
  220. data/test/testcases/span/03_codespan/normal-css-class.text +1 -0
  221. data/test/testcases/span/03_codespan/rouge/disabled.html +1 -0
  222. data/test/testcases/span/03_codespan/rouge/disabled.options +4 -0
  223. data/test/testcases/span/03_codespan/rouge/disabled.text +1 -0
  224. data/test/testcases/span/03_codespan/rouge/simple.html +1 -0
  225. data/test/testcases/span/03_codespan/rouge/simple.options +1 -0
  226. data/test/testcases/span/03_codespan/rouge/simple.text +1 -0
  227. data/test/testcases/span/04_footnote/backlink_inline.html +79 -0
  228. data/test/testcases/span/04_footnote/backlink_inline.options +1 -0
  229. data/test/testcases/span/04_footnote/backlink_inline.text +38 -0
  230. data/test/testcases/span/04_footnote/backlink_text.html +9 -0
  231. data/test/testcases/span/04_footnote/backlink_text.options +1 -0
  232. data/test/testcases/span/04_footnote/backlink_text.text +3 -0
  233. data/test/testcases/span/04_footnote/definitions.latex +2 -2
  234. data/test/testcases/span/04_footnote/footnote_nr.html +6 -6
  235. data/test/testcases/span/04_footnote/footnote_prefix.html +12 -0
  236. data/test/testcases/span/04_footnote/footnote_prefix.options +1 -0
  237. data/test/testcases/span/04_footnote/footnote_prefix.text +4 -0
  238. data/test/testcases/span/04_footnote/inside_footnote.html +17 -0
  239. data/test/testcases/span/04_footnote/inside_footnote.text +9 -0
  240. data/test/testcases/span/04_footnote/markers.html +16 -16
  241. data/test/testcases/span/04_footnote/markers.latex +3 -3
  242. data/test/testcases/span/04_footnote/markers.options +2 -0
  243. data/test/testcases/span/04_footnote/markers.text +2 -1
  244. data/test/testcases/span/04_footnote/placement.html +11 -0
  245. data/test/testcases/span/04_footnote/placement.options +1 -0
  246. data/test/testcases/span/04_footnote/placement.text +8 -0
  247. data/test/testcases/span/04_footnote/regexp_problem.html +14 -0
  248. data/test/testcases/span/04_footnote/regexp_problem.options +2 -0
  249. data/test/testcases/span/04_footnote/regexp_problem.text +52 -0
  250. data/test/testcases/span/04_footnote/without_backlink.html +9 -0
  251. data/test/testcases/span/04_footnote/without_backlink.options +1 -0
  252. data/test/testcases/span/04_footnote/without_backlink.text +3 -0
  253. data/test/testcases/span/05_html/button.html +7 -0
  254. data/test/testcases/span/05_html/button.text +7 -0
  255. data/test/testcases/span/05_html/mark_element.html +3 -0
  256. data/test/testcases/span/05_html/mark_element.text +3 -0
  257. data/test/testcases/span/05_html/normal.html +10 -1
  258. data/test/testcases/span/05_html/normal.text +9 -0
  259. data/test/testcases/span/05_html/raw_span_elements.html +2 -0
  260. data/test/testcases/span/05_html/raw_span_elements.text +2 -0
  261. data/test/testcases/span/05_html/xml.html +5 -0
  262. data/test/testcases/span/05_html/xml.text +5 -0
  263. data/test/testcases/span/abbreviations/abbrev.html +14 -1
  264. data/test/testcases/span/abbreviations/abbrev.text +18 -2
  265. data/test/testcases/span/abbreviations/in_footnote.html +9 -0
  266. data/test/testcases/span/abbreviations/in_footnote.text +5 -0
  267. data/test/testcases/span/autolinks/url_links.html +5 -4
  268. data/test/testcases/span/autolinks/url_links.text +1 -0
  269. data/test/testcases/span/line_breaks/normal.html +2 -2
  270. data/test/testcases/span/line_breaks/normal.latex +2 -2
  271. data/test/testcases/span/math/no_engine.html +1 -0
  272. data/test/testcases/span/math/no_engine.options +1 -0
  273. data/test/testcases/span/math/no_engine.text +1 -0
  274. data/test/testcases/span/math/normal.html +4 -3
  275. data/test/testcases/span/math/normal.text +2 -1
  276. data/test/testcases/span/text_substitutions/entities_as_char.html +1 -1
  277. data/test/testcases/span/text_substitutions/entities_as_char.options +1 -0
  278. data/test/testcases/span/text_substitutions/entities_as_char.text +1 -1
  279. data/test/testcases/span/text_substitutions/typography.html +22 -0
  280. data/test/testcases/span/text_substitutions/typography.text +22 -0
  281. data/test/testcases/span/text_substitutions/typography_subst.html +3 -0
  282. data/test/testcases/span/text_substitutions/typography_subst.latex +4 -0
  283. data/test/testcases/span/text_substitutions/typography_subst.options +8 -0
  284. data/test/testcases/span/text_substitutions/typography_subst.text +3 -0
  285. metadata +218 -67
  286. data/ChangeLog +0 -7436
  287. data/GPL +0 -674
  288. data/Rakefile +0 -306
  289. data/benchmark/benchmark.rb +0 -36
  290. data/benchmark/benchmark.sh +0 -74
  291. data/benchmark/generate_data.rb +0 -119
  292. data/benchmark/mdbasics.text +0 -306
  293. data/benchmark/mdsyntax.text +0 -888
  294. data/benchmark/testing.sh +0 -9
  295. data/benchmark/timing.sh +0 -10
  296. data/doc/bg.png +0 -0
  297. data/doc/default.scss.css +0 -181
  298. data/doc/default.template +0 -68
  299. data/doc/design.scss.css +0 -441
  300. data/doc/documentation.page +0 -84
  301. data/doc/documentation.template +0 -20
  302. data/doc/index.page +0 -94
  303. data/doc/installation.page +0 -88
  304. data/doc/links.markdown +0 -6
  305. data/doc/metainfo +0 -3
  306. data/doc/news.feed +0 -10
  307. data/doc/news.page +0 -29
  308. data/doc/options.page +0 -10
  309. data/doc/quickref.page +0 -598
  310. data/doc/sidebar.template +0 -21
  311. data/doc/syntax.page +0 -1700
  312. data/doc/tests.page +0 -91
  313. data/doc/virtual +0 -2
  314. data/lib/kramdown/compatibility.rb +0 -49
  315. data/lib/kramdown/utils/ordered_hash.rb +0 -100
  316. data/setup.rb +0 -1585
  317. data/test/testcases/block/07_horizontal_rule/error.html.19 +0 -7
  318. data/test/testcases/block/09_html/html_to_native/typography.html.19 +0 -1
  319. data/test/testcases/block/09_html/simple.html.19 +0 -64
  320. data/test/testcases/block/14_table/simple.html.19 +0 -177
  321. data/test/testcases/span/01_link/inline.html.19 +0 -46
  322. data/test/testcases/span/01_link/reference.html.19 +0 -37
  323. data/test/testcases/span/text_substitutions/entities_as_char.html.19 +0 -1
data/Rakefile DELETED
@@ -1,306 +0,0 @@
1
- # -*- ruby -*-
2
-
3
- # load all optional developer libraries
4
- begin
5
- require 'rubygems'
6
- require 'rubygems/package_task'
7
- rescue LoadError
8
- end
9
-
10
- begin
11
- require 'webgen/page'
12
- rescue LoadError
13
- end
14
-
15
- begin
16
- gem 'rdoc' if RUBY_VERSION >= '1.9'
17
- require 'rdoc/task'
18
- require 'rdoc/rdoc'
19
-
20
- class RDoc::RDoc
21
-
22
- alias :old_parse_files :parse_files
23
-
24
- def parse_files(options)
25
- file_info = old_parse_files(options)
26
- require 'kramdown/options'
27
-
28
- # Add options documentation to Kramdown::Options module
29
- opt_module = RDoc::TopLevel.all_classes_and_modules.find {|m| m.full_name == 'Kramdown::Options'}
30
- opt_defs = Kramdown::Options.definitions.sort.collect do |n, definition|
31
- desc = definition.desc.split(/\n/).map {|l| " #{l}"}
32
- desc[-2] = []
33
- desc = desc.join("\n")
34
- "[<tt>#{n}</tt> (type: #{definition.type}, default: #{definition.default.inspect})]\n#{desc}\n\n"
35
- end
36
- opt_module.comment.text += "\n== Available Options\n\n" << opt_defs.join("\n\n")
37
-
38
- file_info
39
- end
40
-
41
- end
42
-
43
- rescue LoadError
44
- end
45
-
46
- begin
47
- require 'rubyforge'
48
- rescue LoadError
49
- end
50
-
51
- begin
52
- require 'rcov/rcovtask'
53
- rescue LoadError
54
- end
55
-
56
- require 'fileutils'
57
- require 'rake/clean'
58
- require 'rake/testtask'
59
- require 'rake/packagetask'
60
- require 'erb'
61
-
62
- $:.unshift('lib')
63
- require 'kramdown'
64
-
65
- # End user tasks ################################################################
66
-
67
- task :default => :test
68
-
69
- desc "Install using setup.rb"
70
- task :install do
71
- ruby "setup.rb config"
72
- ruby "setup.rb setup"
73
- ruby "setup.rb install"
74
- end
75
-
76
- task :clobber do
77
- ruby "setup.rb clean"
78
- end
79
-
80
- if defined?(Webgen)
81
- desc "Generate the HTML documentation"
82
- task :htmldoc do
83
- ruby "-Ilib -S webgen"
84
- end
85
- CLOBBER << "htmldoc/"
86
- CLOBBER << "webgen-tmp"
87
- end
88
-
89
- if defined? RDoc::Task
90
- rd = RDoc::Task.new do |rdoc|
91
- rdoc.rdoc_dir = 'htmldoc/rdoc'
92
- rdoc.title = 'kramdown'
93
- rdoc.main = 'lib/kramdown/document.rb'
94
- rdoc.rdoc_files.include('lib')
95
- end
96
- end
97
-
98
- if defined?(Webgen) && defined?(RDoc::Task)
99
- desc "Build the whole user documentation"
100
- task :doc => [:rdoc, 'htmldoc']
101
- end
102
-
103
- tt = Rake::TestTask.new do |test|
104
- test.warning = true
105
- test.libs << 'test'
106
- test.test_files = FileList['test/test_*.rb']
107
- end
108
-
109
- # Release tasks and development tasks ############################################
110
-
111
- namespace :dev do
112
-
113
- SUMMARY = 'kramdown is a fast, pure-Ruby Markdown-superset converter.'
114
- DESCRIPTION = <<EOF
115
- kramdown is yet-another-markdown-parser but fast, pure Ruby,
116
- using a strict syntax definition and supporting several common extensions.
117
- EOF
118
-
119
- begin
120
- REL_PAGE = Webgen::Page.from_data(File.read('doc/news/release_' + Kramdown::VERSION.split('.').join('_') + '.page'))
121
- rescue
122
- puts 'NO RELEASE NOTES/CHANGES FILE'
123
- end
124
-
125
- PKG_FILES = FileList.new([
126
- 'Rakefile',
127
- 'setup.rb',
128
- 'COPYING', 'GPL', 'README.md', 'AUTHORS',
129
- 'VERSION', 'ChangeLog', 'CONTRIBUTERS',
130
- 'bin/*',
131
- 'benchmark/*',
132
- 'lib/**/*.rb',
133
- 'man/man1/kramdown.1',
134
- 'data/**/*',
135
- 'doc/**',
136
- 'test/**/*'
137
- ])
138
-
139
- CLOBBER << "VERSION"
140
- file 'VERSION' do
141
- puts "Generating VERSION file"
142
- File.open('VERSION', 'w+') {|file| file.write(Kramdown::VERSION + "\n")}
143
- end
144
-
145
- CLOBBER << 'ChangeLog'
146
- file 'ChangeLog' do
147
- puts "Generating ChangeLog file"
148
- `git log --name-only > ChangeLog`
149
- end
150
-
151
- CLOBBER << 'CONTRIBUTERS'
152
- file 'CONTRIBUTERS' do
153
- puts "Generating CONTRIBUTERS file"
154
- `echo " Count Name" > CONTRIBUTERS`
155
- `echo "======= ====" >> CONTRIBUTERS`
156
- `git log | grep ^Author: | sed 's/^Author: //' | sort | uniq -c | sort -nr >> CONTRIBUTERS`
157
- end
158
-
159
- CLOBBER << "man/man1/kramdown.1"
160
- file 'man/man1/kramdown.1' => ['man/man1/kramdown.1.erb'] do
161
- puts "Generating kramdown man page"
162
- File.open('man/man1/kramdown.1', 'w+') do |file|
163
- file.write(ERB.new(File.read('man/man1/kramdown.1.erb')).result(binding))
164
- end
165
- end
166
-
167
- Rake::PackageTask.new('kramdown', Kramdown::VERSION) do |pkg|
168
- pkg.need_tar = true
169
- pkg.need_zip = true
170
- pkg.package_files = PKG_FILES
171
- end
172
-
173
- if defined? Gem
174
- spec = Gem::Specification.new do |s|
175
-
176
- #### Basic information
177
- s.name = 'kramdown'
178
- s.version = Kramdown::VERSION
179
- s.summary = SUMMARY
180
- s.description = DESCRIPTION
181
-
182
- #### Dependencies, requirements and files
183
- s.files = PKG_FILES.to_a
184
-
185
- s.require_path = 'lib'
186
- s.executables = ['kramdown']
187
- s.default_executable = 'kramdown'
188
- s.add_development_dependency 'coderay', '~> 1.0.0'
189
-
190
- #### Documentation
191
-
192
- s.has_rdoc = true
193
- s.rdoc_options = ['--main', 'lib/kramdown/document.rb']
194
-
195
- #### Author and project details
196
-
197
- s.author = 'Thomas Leitner'
198
- s.email = 't_leitner@gmx.at'
199
- s.homepage = "http://kramdown.rubyforge.org"
200
- s.rubyforge_project = 'kramdown'
201
- end
202
-
203
- Gem::PackageTask.new(spec) do |pkg|
204
- pkg.need_zip = true
205
- pkg.need_tar = true
206
- end
207
-
208
- end
209
-
210
- if defined?(RubyForge) && defined?(Webgen) && defined?(Gem) && defined?(Rake::RDocTask)
211
- desc 'Release Kramdown version ' + Kramdown::VERSION
212
- task :release => [:clobber, :package, :publish_files, :publish_website, :post_news]
213
- end
214
-
215
- if defined? RubyForge
216
- desc "Upload the release to Rubyforge"
217
- task :publish_files => [:package] do
218
- print 'Uploading files to Rubyforge...'
219
- $stdout.flush
220
-
221
- rf = RubyForge.new
222
- rf.configure
223
- rf.login
224
-
225
- rf.userconfig["release_notes"] = REL_PAGE.blocks['content'].content
226
- rf.userconfig["preformatted"] = false
227
-
228
- files = %w[.gem .tgz .zip].collect {|ext| "pkg/kramdown-#{Kramdown::VERSION}" + ext}
229
-
230
- rf.add_release('kramdown', 'kramdown', Kramdown::VERSION, *files)
231
-
232
- sh "gem push pkg/kramdown-#{Kramdown::VERSION}.gem"
233
- puts 'done'
234
- end
235
-
236
- desc 'Post announcement to rubyforge.'
237
- task :post_news do
238
- print 'Posting announcement to Rubyforge ...'
239
- $stdout.flush
240
- rf = RubyForge.new
241
- rf.configure
242
- rf.login
243
-
244
- content = REL_PAGE.blocks['content'].content
245
- content += "\n\n\nAbout kramdown\n\n#{SUMMARY}\n\n#{DESCRIPTION}"
246
- rf.post_news('kramdown', "kramdown #{Kramdown::VERSION} released", content)
247
- puts "done"
248
- end
249
- end
250
-
251
- desc "Upload the website to Rubyforge"
252
- task :publish_website => ['doc'] do
253
- sh "rsync -avc --delete --exclude 'MathJax' --exclude 'robots.txt' htmldoc/ gettalong@rubyforge.org:/var/www/gforge-projects/kramdown/"
254
- end
255
-
256
-
257
- if defined? Rcov
258
- Rcov::RcovTask.new do |rcov|
259
- rcov.libs << 'test'
260
- end
261
- end
262
-
263
- CODING_LINE = "# -*- coding: utf-8 -*-\n"
264
- COPYRIGHT=<<EOF
265
- #
266
- #--
267
- # Copyright (C) 2009-2012 Thomas Leitner <t_leitner@gmx.at>
268
- #
269
- # This file is part of kramdown.
270
- #
271
- # kramdown is free software: you can redistribute it and/or modify
272
- # it under the terms of the GNU General Public License as published by
273
- # the Free Software Foundation, either version 3 of the License, or
274
- # (at your option) any later version.
275
- #
276
- # This program is distributed in the hope that it will be useful,
277
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
278
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
279
- # GNU General Public License for more details.
280
- #
281
- # You should have received a copy of the GNU General Public License
282
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
283
- #++
284
- #
285
- EOF
286
-
287
- desc "Insert/Update copyright notice"
288
- task :update_copyright do
289
- inserted = false
290
- Dir["lib/**/*.rb", "test/**/*.rb"].each do |file|
291
- if !File.read(file).start_with?(CODING_LINE + COPYRIGHT)
292
- inserted = true
293
- puts "Updating file #{file}"
294
- old = File.read(file)
295
- if !old.gsub!(/\A#{Regexp.escape(CODING_LINE)}#\n#--.*?\n#\+\+\n#\n/m, CODING_LINE + COPYRIGHT)
296
- old.gsub!(/\A(#{Regexp.escape(CODING_LINE)})?/, CODING_LINE + COPYRIGHT + "\n")
297
- end
298
- File.open(file, 'w+') {|f| f.puts(old)}
299
- end
300
- end
301
- puts "Look through the above mentioned files and correct all problems" if inserted
302
- end
303
-
304
- end
305
-
306
- task :clobber => ['dev:clobber']
@@ -1,36 +0,0 @@
1
- require 'benchmark'
2
- require 'stringio'
3
-
4
- require 'kramdown'
5
- require 'bluecloth'
6
- require 'maruku'
7
- require 'maruku/version'
8
- require 'rdiscount'
9
- require 'bluefeather'
10
- require 'redcarpet'
11
-
12
- module MaRuKu::Errors
13
- def tell_user(s)
14
- end
15
- end
16
-
17
-
18
- RUNS=20
19
-
20
- FILES=['mdsyntax.text', 'mdbasics.text']
21
-
22
- puts "Running tests on #{Time.now.strftime("%Y-%m-%d")} under #{RUBY_DESCRIPTION}"
23
-
24
- FILES.each do |file|
25
- data = File.read(File.join(File.dirname(__FILE__), file))
26
- puts
27
- puts "Test using file #{file} and #{RUNS} runs"
28
- Benchmark.bmbm do |b|
29
- b.report("kramdown #{Kramdown::VERSION}") { RUNS.times { Kramdown::Document.new(data).to_html } }
30
- b.report("Maruku #{MaRuKu::Version}") { RUNS.times { Maruku.new(data, :on_error => :ignore).to_html } }
31
- b.report("BlueFeather #{BlueFeather::VERSION}") { RUNS.times { BlueFeather.parse(data) } }
32
- b.report("BlueCloth #{BlueCloth::VERSION}") { RUNS.times { BlueCloth.new(data).to_html } }
33
- b.report("RDiscount #{RDiscount::VERSION}") { RUNS.times { RDiscount.new(data).to_html } }
34
- b.report("redcarpet #{Redcarpet::VERSION}") { RUNS.times { Redcarpet::Markdown.new(Redcarpet::Render::HTML).render(data) } }
35
- end
36
- end
@@ -1,74 +0,0 @@
1
- #!/bin/bash
2
-
3
- source ~/.bashrc
4
-
5
- RUBY_VERSIONS=`rvm list strings | sort`
6
- KD_VERSIONS="`git tag | sort -V` master"
7
- OTHERS=false
8
- AVERAGE=1
9
- MASTER_AS=master
10
-
11
- while getopts "r:k:o:m:a:" optname; do
12
- case "$optname" in
13
- "r")
14
- RUBY_VERSIONS="$OPTARG"
15
- ;;
16
- "k")
17
- KD_VERSIONS="$OPTARG"
18
- ;;
19
- "o")
20
- OTHERS=true
21
- ;;
22
- "m")
23
- MASTER_AS="$OPTARG"
24
- ;;
25
- "a")
26
- AVERAGE="$OPTARG"
27
- ;;
28
- "?")
29
- echo "Unknown option $OPTARG"
30
- exit 1
31
- ;;
32
- ":")
33
- echo "No argument value for option $OPTARG"
34
- exit 1
35
- ;;
36
- *)
37
- echo "Unknown error while processing options"
38
- exit 1
39
- ;;
40
- esac
41
- done
42
-
43
- TMPDIR=/tmp/kramdown-benchmark
44
-
45
- rm -rf $TMPDIR
46
- mkdir -p $TMPDIR
47
- cp benchmark/md* $TMPDIR
48
- cp benchmark/generate_data.rb $TMPDIR
49
- git clone .git ${TMPDIR}/kramdown
50
- cd ${TMPDIR}/kramdown
51
-
52
- for RUBY_VERSION in $RUBY_VERSIONS; do
53
- rvm $RUBY_VERSION
54
- echo "Creating benchmark data for $(ruby -v)"
55
-
56
- for KD_VERSION in $KD_VERSIONS; do
57
- echo "Using kramdown version $KD_VERSION"
58
- git co $KD_VERSION 2>/dev/null
59
- if [ -z $MASTER_AS -o $KD_VERSION != master ]; then
60
- VNUM=${KD_VERSION}
61
- else
62
- VNUM=$MASTER_AS
63
- fi
64
- ruby -I${TMPDIR}/kramdown/lib ../generate_data.rb -k ${VNUM} -a ${AVERAGE} >/dev/null
65
- done
66
-
67
- if [ $OTHERS = "true" ]; then
68
- ruby -rubygems -I${TMPDIR}/kramdown/lib ../generate_data.rb -o >/dev/null
69
- fi
70
- done
71
-
72
- cd ${TMPDIR}
73
- rvm default
74
- ruby generate_data.rb -g
@@ -1,119 +0,0 @@
1
- require 'benchmark'
2
- require 'optparse'
3
- require 'fileutils'
4
-
5
- require 'kramdown'
6
-
7
- options = {:others => false, :average => 1}
8
- OptionParser.new do |opts|
9
- opts.on("-a AVG", "--average AVG", Integer, "Average times over the specified number of runs") {|v| options[:average] = v }
10
- opts.on("-o", "--[no-]others", "Generate data for other parsers") {|v| options[:others] = v}
11
- opts.on("-g", "--[no-]graph", "Generate graph") {|v| options[:graph] = v}
12
- opts.on("-k VERSION", "--kramdown VERSION", String, "Add benchmark data for kramdown version VERSION") {|v| options[:kramdown] = v}
13
- end.parse!
14
-
15
- THISRUBY = (self.class.const_defined?(:RUBY_DESCRIPTION) ? RUBY_DESCRIPTION.scan(/^.*?(?=\s*\()/).first.sub(/\s/, '-') : "ruby-#{RUBY_VERSION}") + '-' + RUBY_PATCHLEVEL.to_s
16
-
17
- Dir.chdir(File.dirname(__FILE__))
18
- BMDATA = File.read('mdbasics.text')
19
- MULTIPLIER = (0..5).map {|i| 2**i}
20
-
21
- if options[:others]
22
- require 'maruku'
23
- require 'maruku/version'
24
- begin
25
- require 'rdiscount'
26
- rescue LoadError
27
- end
28
- #require 'bluefeather'
29
-
30
- module MaRuKu::Errors
31
- def tell_user(s)
32
- end
33
- end
34
-
35
- bmdata = {}
36
- labels = []
37
- MULTIPLIER.each do |i|
38
- $stderr.puts "Generating benchmark data for other parsers, multiplier #{i}"
39
- mddata = BMDATA*i
40
- labels = []
41
- bmdata[i] = Benchmark::bmbm do |x|
42
- labels << "Maruku #{MaRuKu::Version}"
43
- x.report { Maruku.new(mddata, :on_error => :ignore).to_html }
44
- if self.class.const_defined?(:BlueFeather)
45
- labels << "BlueFeather #{BlueFeather::VERSION}"
46
- x.report { BlueFeather.parse(mddata) }
47
- end
48
- if self.class.const_defined?(:RDiscount)
49
- labels << "RDiscount #{RDiscount::VERSION}"
50
- x.report { RDiscount.new(mddata).to_html }
51
- end
52
- end
53
- end
54
- File.open("static-#{THISRUBY}.dat", 'w+') do |f|
55
- f.puts "# " + labels.join(" || ")
56
- format_str = "%5d" + " %10.5f"*bmdata[MULTIPLIER.first].size
57
- bmdata.sort.each do |m,v|
58
- f.puts format_str % [m, *v.map {|tms| tms.real}]
59
- end
60
- end
61
- end
62
-
63
- if options[:kramdown]
64
- kramdown = "kramdown-#{THISRUBY}.dat"
65
- data = if File.exist?(kramdown)
66
- lines = File.readlines(kramdown).map {|l| l.chomp}
67
- lines.first << " || "
68
- lines
69
- else
70
- ["# ", *MULTIPLIER.map {|m| "%3d" % m}]
71
- end
72
- data.first << "#{options[:kramdown]}".rjust(10)
73
-
74
- times = []
75
- options[:average].times do
76
- MULTIPLIER.each_with_index do |m, i|
77
- $stderr.puts "Generating benchmark data for kramdown version #{options[:kramdown]}, multiplier #{m}"
78
- mddata = BMDATA*m
79
- begin
80
- (times[i] ||= []) << Benchmark::bmbm {|x| x.report { Kramdown::Document.new(mddata).to_html } }.first.real
81
- rescue
82
- $stderr.puts $!.message
83
- (times[i] ||= []) << 0
84
- end
85
- end
86
- end
87
- times.each_with_index {|t,i| data[i+1] << "%14.5f" % (t.inject(0) {|sum,v| sum+v}/3.0)}
88
- File.open(kramdown, 'w+') do |f|
89
- data.each {|l| f.puts l}
90
- end
91
- end
92
-
93
- if options[:graph]
94
- Dir['kramdown-*.dat'].each do |kramdown_name|
95
- theruby = kramdown_name.sub(/^kramdown-/, '').sub(/\.dat$/, '')
96
- graph_name = "graph-#{theruby}.png"
97
- static_name = "static-#{theruby}.dat"
98
- kramdown_names = File.readlines(kramdown_name).first.chomp[1..-1].split(/\s*\|\|\s*/)
99
- static_names = (File.exist?(static_name) ? File.readlines(static_name).first.chomp[1..-1].split(/\s*\|\|\s*/) : [])
100
- File.open("gnuplot.dat", "w+") do |f|
101
- f.puts <<EOF
102
- set title "Execution Time Performance for #{theruby}"
103
- set xlabel "File Multiplier (i.e. n times mdbasic.text)"
104
- set ylabel "Execution Time in secondes"
105
- set key left top
106
- set grid "on"
107
- set terminal png
108
- set output "#{graph_name}"
109
- EOF
110
- f.print "plot "
111
- i, j = 1, 1
112
- f.puts((kramdown_names.map {|n| i += 1; "\"#{kramdown_name}\" using 1:#{i} with lp title \"#{n}\""} +
113
- static_names.map {|n| j += 1; n =~ /bluefeather/i ? nil : "\"#{static_name}\" using 1:#{j} with lp title \"#{n}\""}.compact
114
- ).join(", "))
115
- end
116
- `gnuplot gnuplot.dat`
117
- FileUtils.rm("gnuplot.dat")
118
- end
119
- end