newstile 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. data/AUTHORS +1 -0
  2. data/CONTRIBUTERS +6 -0
  3. data/COPYING +24 -0
  4. data/ChangeLog +5489 -0
  5. data/GPL +674 -0
  6. data/README +31 -0
  7. data/Rakefile +342 -0
  8. data/VERSION +1 -0
  9. data/benchmark/benchmark.rb +34 -0
  10. data/benchmark/generate_data.rb +112 -0
  11. data/benchmark/historic-jruby-1.4.0.dat +7 -0
  12. data/benchmark/historic-ruby-1.8.6.dat +7 -0
  13. data/benchmark/historic-ruby-1.8.7.dat +7 -0
  14. data/benchmark/historic-ruby-1.9.1p243.dat +7 -0
  15. data/benchmark/historic-ruby-1.9.2dev.dat +7 -0
  16. data/benchmark/mdbasics.text +306 -0
  17. data/benchmark/mdsyntax.text +888 -0
  18. data/benchmark/static-jruby-1.4.0.dat +7 -0
  19. data/benchmark/static-ruby-1.8.6.dat +7 -0
  20. data/benchmark/static-ruby-1.8.7.dat +7 -0
  21. data/benchmark/static-ruby-1.9.1p243.dat +7 -0
  22. data/benchmark/static-ruby-1.9.2dev.dat +7 -0
  23. data/benchmark/testing.sh +9 -0
  24. data/benchmark/timing.sh +10 -0
  25. data/bin/newstile +82 -0
  26. data/data/newstile/document.html +18 -0
  27. data/data/newstile/document.latex +43 -0
  28. data/doc/default.scss.css +519 -0
  29. data/doc/default.template +80 -0
  30. data/doc/documentation.page +72 -0
  31. data/doc/index.page +96 -0
  32. data/doc/installation.page +90 -0
  33. data/doc/links.markdown +6 -0
  34. data/doc/news.feed +10 -0
  35. data/doc/news.page +28 -0
  36. data/doc/quickref.page +564 -0
  37. data/doc/syntax.page +1615 -0
  38. data/doc/tests.page +51 -0
  39. data/doc/virtual +2 -0
  40. data/lib/newstile.rb +23 -0
  41. data/lib/newstile/compatibility.rb +34 -0
  42. data/lib/newstile/converter.rb +43 -0
  43. data/lib/newstile/converter/base.rb +111 -0
  44. data/lib/newstile/converter/html.rb +405 -0
  45. data/lib/newstile/converter/latex.rb +577 -0
  46. data/lib/newstile/converter/markdown.rb +426 -0
  47. data/lib/newstile/converter/newstile.rb +426 -0
  48. data/lib/newstile/document.rb +168 -0
  49. data/lib/newstile/error.rb +27 -0
  50. data/lib/newstile/options.rb +296 -0
  51. data/lib/newstile/parser.rb +39 -0
  52. data/lib/newstile/parser/base.rb +94 -0
  53. data/lib/newstile/parser/html.rb +499 -0
  54. data/lib/newstile/parser/newstile.rb +325 -0
  55. data/lib/newstile/parser/newstile/abbreviation.rb +66 -0
  56. data/lib/newstile/parser/newstile/attribute_list.rb +111 -0
  57. data/lib/newstile/parser/newstile/autolink.rb +54 -0
  58. data/lib/newstile/parser/newstile/blank_line.rb +43 -0
  59. data/lib/newstile/parser/newstile/block_boundary.rb +46 -0
  60. data/lib/newstile/parser/newstile/blockquote.rb +63 -0
  61. data/lib/newstile/parser/newstile/codeblock.rb +60 -0
  62. data/lib/newstile/parser/newstile/codespan.rb +57 -0
  63. data/lib/newstile/parser/newstile/emphasis.rb +70 -0
  64. data/lib/newstile/parser/newstile/eob.rb +39 -0
  65. data/lib/newstile/parser/newstile/escaped_chars.rb +38 -0
  66. data/lib/newstile/parser/newstile/extension.rb +116 -0
  67. data/lib/newstile/parser/newstile/footnote.rb +74 -0
  68. data/lib/newstile/parser/newstile/header.rb +84 -0
  69. data/lib/newstile/parser/newstile/horizontal_rule.rb +39 -0
  70. data/lib/newstile/parser/newstile/html.rb +175 -0
  71. data/lib/newstile/parser/newstile/html_entity.rb +39 -0
  72. data/lib/newstile/parser/newstile/line_break.rb +38 -0
  73. data/lib/newstile/parser/newstile/link.rb +177 -0
  74. data/lib/newstile/parser/newstile/list.rb +239 -0
  75. data/lib/newstile/parser/newstile/math.rb +64 -0
  76. data/lib/newstile/parser/newstile/paragraph.rb +55 -0
  77. data/lib/newstile/parser/newstile/smart_quotes.rb +214 -0
  78. data/lib/newstile/parser/newstile/table.rb +134 -0
  79. data/lib/newstile/parser/newstile/typographic_symbol.rb +54 -0
  80. data/lib/newstile/utils.rb +37 -0
  81. data/lib/newstile/utils/entities.rb +336 -0
  82. data/lib/newstile/utils/html.rb +75 -0
  83. data/lib/newstile/utils/ordered_hash.rb +79 -0
  84. data/lib/newstile/version.rb +28 -0
  85. data/man/man1/newstile.1 +246 -0
  86. data/setup.rb +1585 -0
  87. data/test/run_tests.rb +59 -0
  88. data/test/test_files.rb +162 -0
  89. data/test/testcases/block/01_blank_line/spaces.html +1 -0
  90. data/test/testcases/block/01_blank_line/spaces.text +3 -0
  91. data/test/testcases/block/01_blank_line/tabs.html +1 -0
  92. data/test/testcases/block/01_blank_line/tabs.text +6 -0
  93. data/test/testcases/block/02_eob/beginning.html +1 -0
  94. data/test/testcases/block/02_eob/beginning.text +3 -0
  95. data/test/testcases/block/02_eob/end.html +1 -0
  96. data/test/testcases/block/02_eob/end.text +3 -0
  97. data/test/testcases/block/02_eob/middle.html +1 -0
  98. data/test/testcases/block/02_eob/middle.text +5 -0
  99. data/test/testcases/block/03_paragraph/indented.html +18 -0
  100. data/test/testcases/block/03_paragraph/indented.text +19 -0
  101. data/test/testcases/block/03_paragraph/no_newline_at_end.html +5 -0
  102. data/test/testcases/block/03_paragraph/no_newline_at_end.text +5 -0
  103. data/test/testcases/block/03_paragraph/one_para.html +1 -0
  104. data/test/testcases/block/03_paragraph/one_para.text +1 -0
  105. data/test/testcases/block/03_paragraph/two_para.html +4 -0
  106. data/test/testcases/block/03_paragraph/two_para.text +4 -0
  107. data/test/testcases/block/04_header/atx_header.html +37 -0
  108. data/test/testcases/block/04_header/atx_header.text +34 -0
  109. data/test/testcases/block/04_header/atx_header_no_newline_at_end.html +1 -0
  110. data/test/testcases/block/04_header/atx_header_no_newline_at_end.text +1 -0
  111. data/test/testcases/block/04_header/setext_header.html +30 -0
  112. data/test/testcases/block/04_header/setext_header.html.19 +30 -0
  113. data/test/testcases/block/04_header/setext_header.text +36 -0
  114. data/test/testcases/block/04_header/setext_header_no_newline_at_end.html +1 -0
  115. data/test/testcases/block/04_header/setext_header_no_newline_at_end.text +2 -0
  116. data/test/testcases/block/04_header/with_auto_id_prefix.html +3 -0
  117. data/test/testcases/block/04_header/with_auto_id_prefix.options +2 -0
  118. data/test/testcases/block/04_header/with_auto_id_prefix.text +3 -0
  119. data/test/testcases/block/04_header/with_auto_ids.html +17 -0
  120. data/test/testcases/block/04_header/with_auto_ids.options +1 -0
  121. data/test/testcases/block/04_header/with_auto_ids.text +19 -0
  122. data/test/testcases/block/05_blockquote/indented.html +25 -0
  123. data/test/testcases/block/05_blockquote/indented.text +14 -0
  124. data/test/testcases/block/05_blockquote/lazy.html +34 -0
  125. data/test/testcases/block/05_blockquote/lazy.text +20 -0
  126. data/test/testcases/block/05_blockquote/nested.html +10 -0
  127. data/test/testcases/block/05_blockquote/nested.text +6 -0
  128. data/test/testcases/block/05_blockquote/no_newline_at_end.html +4 -0
  129. data/test/testcases/block/05_blockquote/no_newline_at_end.text +2 -0
  130. data/test/testcases/block/05_blockquote/with_code_blocks.html +15 -0
  131. data/test/testcases/block/05_blockquote/with_code_blocks.text +11 -0
  132. data/test/testcases/block/06_codeblock/error.html +4 -0
  133. data/test/testcases/block/06_codeblock/error.text +4 -0
  134. data/test/testcases/block/06_codeblock/lazy.html +4 -0
  135. data/test/testcases/block/06_codeblock/lazy.text +5 -0
  136. data/test/testcases/block/06_codeblock/no_newline_at_end.html +2 -0
  137. data/test/testcases/block/06_codeblock/no_newline_at_end.text +1 -0
  138. data/test/testcases/block/06_codeblock/no_newline_at_end_1.html +2 -0
  139. data/test/testcases/block/06_codeblock/no_newline_at_end_1.text +2 -0
  140. data/test/testcases/block/06_codeblock/normal.html +13 -0
  141. data/test/testcases/block/06_codeblock/normal.text +10 -0
  142. data/test/testcases/block/06_codeblock/tilde_syntax.html +7 -0
  143. data/test/testcases/block/06_codeblock/tilde_syntax.text +9 -0
  144. data/test/testcases/block/06_codeblock/whitespace.html +3 -0
  145. data/test/testcases/block/06_codeblock/whitespace.text +3 -0
  146. data/test/testcases/block/06_codeblock/with_blank_line.html +13 -0
  147. data/test/testcases/block/06_codeblock/with_blank_line.text +12 -0
  148. data/test/testcases/block/06_codeblock/with_eob_marker.html +6 -0
  149. data/test/testcases/block/06_codeblock/with_eob_marker.text +5 -0
  150. data/test/testcases/block/06_codeblock/with_ial.html +6 -0
  151. data/test/testcases/block/06_codeblock/with_ial.text +5 -0
  152. data/test/testcases/block/07_horizontal_rule/error.html +7 -0
  153. data/test/testcases/block/07_horizontal_rule/error.html.19 +7 -0
  154. data/test/testcases/block/07_horizontal_rule/error.text +7 -0
  155. data/test/testcases/block/07_horizontal_rule/normal.html +17 -0
  156. data/test/testcases/block/07_horizontal_rule/normal.text +17 -0
  157. data/test/testcases/block/07_horizontal_rule/sepspaces.html +3 -0
  158. data/test/testcases/block/07_horizontal_rule/sepspaces.text +3 -0
  159. data/test/testcases/block/07_horizontal_rule/septabs.html +3 -0
  160. data/test/testcases/block/07_horizontal_rule/septabs.text +3 -0
  161. data/test/testcases/block/08_list/escaping.html +17 -0
  162. data/test/testcases/block/08_list/escaping.text +17 -0
  163. data/test/testcases/block/08_list/item_ial.html +7 -0
  164. data/test/testcases/block/08_list/item_ial.text +5 -0
  165. data/test/testcases/block/08_list/lazy.html +39 -0
  166. data/test/testcases/block/08_list/lazy.text +29 -0
  167. data/test/testcases/block/08_list/list_and_hr.html +9 -0
  168. data/test/testcases/block/08_list/list_and_hr.text +5 -0
  169. data/test/testcases/block/08_list/list_and_others.html +40 -0
  170. data/test/testcases/block/08_list/list_and_others.text +26 -0
  171. data/test/testcases/block/08_list/mixed.html +117 -0
  172. data/test/testcases/block/08_list/mixed.text +66 -0
  173. data/test/testcases/block/08_list/nested.html +17 -0
  174. data/test/testcases/block/08_list/nested.text +7 -0
  175. data/test/testcases/block/08_list/other_first_element.html +39 -0
  176. data/test/testcases/block/08_list/other_first_element.text +18 -0
  177. data/test/testcases/block/08_list/simple_ol.html +19 -0
  178. data/test/testcases/block/08_list/simple_ol.text +13 -0
  179. data/test/testcases/block/08_list/simple_ul.html +48 -0
  180. data/test/testcases/block/08_list/simple_ul.text +36 -0
  181. data/test/testcases/block/08_list/single_item.html +3 -0
  182. data/test/testcases/block/08_list/single_item.text +1 -0
  183. data/test/testcases/block/08_list/special_cases.html +55 -0
  184. data/test/testcases/block/08_list/special_cases.text +35 -0
  185. data/test/testcases/block/09_html/comment.html +18 -0
  186. data/test/testcases/block/09_html/comment.text +15 -0
  187. data/test/testcases/block/09_html/content_model/deflists.html +6 -0
  188. data/test/testcases/block/09_html/content_model/deflists.options +1 -0
  189. data/test/testcases/block/09_html/content_model/deflists.text +6 -0
  190. data/test/testcases/block/09_html/content_model/tables.html +14 -0
  191. data/test/testcases/block/09_html/content_model/tables.options +1 -0
  192. data/test/testcases/block/09_html/content_model/tables.text +14 -0
  193. data/test/testcases/block/09_html/html_and_codeblocks.html +15 -0
  194. data/test/testcases/block/09_html/html_and_codeblocks.options +1 -0
  195. data/test/testcases/block/09_html/html_and_codeblocks.text +13 -0
  196. data/test/testcases/block/09_html/html_to_native/code.html +10 -0
  197. data/test/testcases/block/09_html/html_to_native/code.text +9 -0
  198. data/test/testcases/block/09_html/html_to_native/comment.html +7 -0
  199. data/test/testcases/block/09_html/html_to_native/comment.text +8 -0
  200. data/test/testcases/block/09_html/html_to_native/emphasis.html +3 -0
  201. data/test/testcases/block/09_html/html_to_native/emphasis.text +3 -0
  202. data/test/testcases/block/09_html/html_to_native/entity.html +1 -0
  203. data/test/testcases/block/09_html/html_to_native/entity.text +1 -0
  204. data/test/testcases/block/09_html/html_to_native/header.html +6 -0
  205. data/test/testcases/block/09_html/html_to_native/header.options +2 -0
  206. data/test/testcases/block/09_html/html_to_native/header.text +6 -0
  207. data/test/testcases/block/09_html/html_to_native/list_dl.html +8 -0
  208. data/test/testcases/block/09_html/html_to_native/list_dl.text +8 -0
  209. data/test/testcases/block/09_html/html_to_native/list_ol.html +15 -0
  210. data/test/testcases/block/09_html/html_to_native/list_ol.text +17 -0
  211. data/test/testcases/block/09_html/html_to_native/list_ul.html +19 -0
  212. data/test/testcases/block/09_html/html_to_native/list_ul.text +22 -0
  213. data/test/testcases/block/09_html/html_to_native/options +1 -0
  214. data/test/testcases/block/09_html/html_to_native/paragraph.html +3 -0
  215. data/test/testcases/block/09_html/html_to_native/paragraph.text +4 -0
  216. data/test/testcases/block/09_html/html_to_native/table_normal.html +14 -0
  217. data/test/testcases/block/09_html/html_to_native/table_normal.text +12 -0
  218. data/test/testcases/block/09_html/html_to_native/table_simple.html +48 -0
  219. data/test/testcases/block/09_html/html_to_native/table_simple.text +56 -0
  220. data/test/testcases/block/09_html/html_to_native/typography.html +1 -0
  221. data/test/testcases/block/09_html/html_to_native/typography.html.19 +1 -0
  222. data/test/testcases/block/09_html/html_to_native/typography.text +1 -0
  223. data/test/testcases/block/09_html/invalid_html_1.html +5 -0
  224. data/test/testcases/block/09_html/invalid_html_1.text +5 -0
  225. data/test/testcases/block/09_html/invalid_html_2.html +5 -0
  226. data/test/testcases/block/09_html/invalid_html_2.text +5 -0
  227. data/test/testcases/block/09_html/markdown_attr.html +38 -0
  228. data/test/testcases/block/09_html/markdown_attr.text +38 -0
  229. data/test/testcases/block/09_html/not_parsed.html +24 -0
  230. data/test/testcases/block/09_html/not_parsed.text +24 -0
  231. data/test/testcases/block/09_html/parse_as_raw.html +30 -0
  232. data/test/testcases/block/09_html/parse_as_raw.options +1 -0
  233. data/test/testcases/block/09_html/parse_as_raw.text +29 -0
  234. data/test/testcases/block/09_html/parse_as_span.html +12 -0
  235. data/test/testcases/block/09_html/parse_as_span.options +1 -0
  236. data/test/testcases/block/09_html/parse_as_span.text +9 -0
  237. data/test/testcases/block/09_html/parse_block_html.html +21 -0
  238. data/test/testcases/block/09_html/parse_block_html.options +1 -0
  239. data/test/testcases/block/09_html/parse_block_html.text +17 -0
  240. data/test/testcases/block/09_html/processing_instruction.html +13 -0
  241. data/test/testcases/block/09_html/processing_instruction.text +12 -0
  242. data/test/testcases/block/09_html/simple.html +64 -0
  243. data/test/testcases/block/09_html/simple.html.19 +64 -0
  244. data/test/testcases/block/09_html/simple.options +1 -0
  245. data/test/testcases/block/09_html/simple.text +59 -0
  246. data/test/testcases/block/10_ald/simple.html +2 -0
  247. data/test/testcases/block/10_ald/simple.text +8 -0
  248. data/test/testcases/block/11_ial/auto_id_and_ial.html +1 -0
  249. data/test/testcases/block/11_ial/auto_id_and_ial.options +1 -0
  250. data/test/testcases/block/11_ial/auto_id_and_ial.text +2 -0
  251. data/test/testcases/block/11_ial/simple.html +25 -0
  252. data/test/testcases/block/11_ial/simple.text +34 -0
  253. data/test/testcases/block/12_extension/comment.html +8 -0
  254. data/test/testcases/block/12_extension/comment.text +12 -0
  255. data/test/testcases/block/12_extension/ignored.html +8 -0
  256. data/test/testcases/block/12_extension/ignored.text +8 -0
  257. data/test/testcases/block/12_extension/nomarkdown.html +10 -0
  258. data/test/testcases/block/12_extension/nomarkdown.kramdown +20 -0
  259. data/test/testcases/block/12_extension/nomarkdown.latex +13 -0
  260. data/test/testcases/block/12_extension/nomarkdown.text +21 -0
  261. data/test/testcases/block/12_extension/options.html +21 -0
  262. data/test/testcases/block/12_extension/options.text +21 -0
  263. data/test/testcases/block/12_extension/options2.html +10 -0
  264. data/test/testcases/block/12_extension/options2.text +5 -0
  265. data/test/testcases/block/12_extension/options3.html +7 -0
  266. data/test/testcases/block/12_extension/options3.text +7 -0
  267. data/test/testcases/block/13_definition_list/definition_at_beginning.html +1 -0
  268. data/test/testcases/block/13_definition_list/definition_at_beginning.text +1 -0
  269. data/test/testcases/block/13_definition_list/item_ial.html +12 -0
  270. data/test/testcases/block/13_definition_list/item_ial.text +8 -0
  271. data/test/testcases/block/13_definition_list/multiple_terms.html +13 -0
  272. data/test/testcases/block/13_definition_list/multiple_terms.text +10 -0
  273. data/test/testcases/block/13_definition_list/no_def_list.html +2 -0
  274. data/test/testcases/block/13_definition_list/no_def_list.text +2 -0
  275. data/test/testcases/block/13_definition_list/para_wrapping.html +10 -0
  276. data/test/testcases/block/13_definition_list/para_wrapping.text +6 -0
  277. data/test/testcases/block/13_definition_list/separated_by_eob.html +8 -0
  278. data/test/testcases/block/13_definition_list/separated_by_eob.text +5 -0
  279. data/test/testcases/block/13_definition_list/simple.html +8 -0
  280. data/test/testcases/block/13_definition_list/simple.text +7 -0
  281. data/test/testcases/block/13_definition_list/styled_terms.html +4 -0
  282. data/test/testcases/block/13_definition_list/styled_terms.text +2 -0
  283. data/test/testcases/block/13_definition_list/too_much_space.html +3 -0
  284. data/test/testcases/block/13_definition_list/too_much_space.text +4 -0
  285. data/test/testcases/block/13_definition_list/with_blocks.html +38 -0
  286. data/test/testcases/block/13_definition_list/with_blocks.text +24 -0
  287. data/test/testcases/block/14_table/errors.html +8 -0
  288. data/test/testcases/block/14_table/errors.text +9 -0
  289. data/test/testcases/block/14_table/footer.html +65 -0
  290. data/test/testcases/block/14_table/footer.text +25 -0
  291. data/test/testcases/block/14_table/header.html +103 -0
  292. data/test/testcases/block/14_table/header.text +32 -0
  293. data/test/testcases/block/14_table/no_table.html +3 -0
  294. data/test/testcases/block/14_table/no_table.text +3 -0
  295. data/test/testcases/block/14_table/simple.html +139 -0
  296. data/test/testcases/block/14_table/simple.text +38 -0
  297. data/test/testcases/block/15_math/normal.html +26 -0
  298. data/test/testcases/block/15_math/normal.text +28 -0
  299. data/test/testcases/block/16_toc/no_toc_depth.html +33 -0
  300. data/test/testcases/block/16_toc/no_toc_depth.options +1 -0
  301. data/test/testcases/block/16_toc/no_toc_depth.text +16 -0
  302. data/test/testcases/block/16_toc/toc_depth_2.html +24 -0
  303. data/test/testcases/block/16_toc/toc_depth_2.options +1 -0
  304. data/test/testcases/block/16_toc/toc_depth_2.text +16 -0
  305. data/test/testcases/encoding.html +46 -0
  306. data/test/testcases/encoding.text +28 -0
  307. data/test/testcases/span/01_link/empty.html +5 -0
  308. data/test/testcases/span/01_link/empty.text +5 -0
  309. data/test/testcases/span/01_link/image_in_a.html +5 -0
  310. data/test/testcases/span/01_link/image_in_a.text +5 -0
  311. data/test/testcases/span/01_link/imagelinks.html +14 -0
  312. data/test/testcases/span/01_link/imagelinks.text +16 -0
  313. data/test/testcases/span/01_link/inline.html +46 -0
  314. data/test/testcases/span/01_link/inline.html.19 +46 -0
  315. data/test/testcases/span/01_link/inline.text +48 -0
  316. data/test/testcases/span/01_link/link_defs.html +9 -0
  317. data/test/testcases/span/01_link/link_defs.text +26 -0
  318. data/test/testcases/span/01_link/links_with_angle_brackets.html +3 -0
  319. data/test/testcases/span/01_link/links_with_angle_brackets.text +3 -0
  320. data/test/testcases/span/01_link/reference.html +35 -0
  321. data/test/testcases/span/01_link/reference.html.19 +35 -0
  322. data/test/testcases/span/01_link/reference.text +47 -0
  323. data/test/testcases/span/02_emphasis/empty.html +3 -0
  324. data/test/testcases/span/02_emphasis/empty.text +3 -0
  325. data/test/testcases/span/02_emphasis/errors.html +9 -0
  326. data/test/testcases/span/02_emphasis/errors.text +9 -0
  327. data/test/testcases/span/02_emphasis/nesting.html +38 -0
  328. data/test/testcases/span/02_emphasis/nesting.text +33 -0
  329. data/test/testcases/span/02_emphasis/normal.html +46 -0
  330. data/test/testcases/span/02_emphasis/normal.text +46 -0
  331. data/test/testcases/span/03_codespan/empty.html +5 -0
  332. data/test/testcases/span/03_codespan/empty.text +5 -0
  333. data/test/testcases/span/03_codespan/errors.html +1 -0
  334. data/test/testcases/span/03_codespan/errors.text +1 -0
  335. data/test/testcases/span/03_codespan/highlighting.html +1 -0
  336. data/test/testcases/span/03_codespan/highlighting.text +1 -0
  337. data/test/testcases/span/03_codespan/normal.html +16 -0
  338. data/test/testcases/span/03_codespan/normal.text +16 -0
  339. data/test/testcases/span/04_footnote/definitions.html +17 -0
  340. data/test/testcases/span/04_footnote/definitions.latex +17 -0
  341. data/test/testcases/span/04_footnote/definitions.text +24 -0
  342. data/test/testcases/span/04_footnote/footnote_nr.html +12 -0
  343. data/test/testcases/span/04_footnote/footnote_nr.latex +2 -0
  344. data/test/testcases/span/04_footnote/footnote_nr.options +1 -0
  345. data/test/testcases/span/04_footnote/footnote_nr.text +4 -0
  346. data/test/testcases/span/04_footnote/markers.html +46 -0
  347. data/test/testcases/span/04_footnote/markers.latex +23 -0
  348. data/test/testcases/span/04_footnote/markers.text +26 -0
  349. data/test/testcases/span/05_html/across_lines.html +1 -0
  350. data/test/testcases/span/05_html/across_lines.text +2 -0
  351. data/test/testcases/span/05_html/invalid.html +1 -0
  352. data/test/testcases/span/05_html/invalid.text +1 -0
  353. data/test/testcases/span/05_html/link_with_mailto.html +1 -0
  354. data/test/testcases/span/05_html/link_with_mailto.text +1 -0
  355. data/test/testcases/span/05_html/markdown_attr.html +6 -0
  356. data/test/testcases/span/05_html/markdown_attr.text +6 -0
  357. data/test/testcases/span/05_html/normal.html +30 -0
  358. data/test/testcases/span/05_html/normal.text +30 -0
  359. data/test/testcases/span/abbreviations/abbrev.html +8 -0
  360. data/test/testcases/span/abbreviations/abbrev.text +15 -0
  361. data/test/testcases/span/abbreviations/abbrev_defs.html +2 -0
  362. data/test/testcases/span/abbreviations/abbrev_defs.text +5 -0
  363. data/test/testcases/span/autolinks/url_links.html +12 -0
  364. data/test/testcases/span/autolinks/url_links.text +12 -0
  365. data/test/testcases/span/escaped_chars/normal.html +43 -0
  366. data/test/testcases/span/escaped_chars/normal.text +43 -0
  367. data/test/testcases/span/extension/comment.html +6 -0
  368. data/test/testcases/span/extension/comment.text +6 -0
  369. data/test/testcases/span/extension/ignored.html +1 -0
  370. data/test/testcases/span/extension/ignored.text +1 -0
  371. data/test/testcases/span/extension/nomarkdown.html +1 -0
  372. data/test/testcases/span/extension/nomarkdown.text +1 -0
  373. data/test/testcases/span/extension/options.html +1 -0
  374. data/test/testcases/span/extension/options.text +1 -0
  375. data/test/testcases/span/ial/simple.html +6 -0
  376. data/test/testcases/span/ial/simple.text +6 -0
  377. data/test/testcases/span/line_breaks/normal.html +11 -0
  378. data/test/testcases/span/line_breaks/normal.latex +12 -0
  379. data/test/testcases/span/line_breaks/normal.text +11 -0
  380. data/test/testcases/span/math/normal.html +5 -0
  381. data/test/testcases/span/math/normal.text +5 -0
  382. data/test/testcases/span/text_substitutions/entities.html +4 -0
  383. data/test/testcases/span/text_substitutions/entities.options +1 -0
  384. data/test/testcases/span/text_substitutions/entities.text +4 -0
  385. data/test/testcases/span/text_substitutions/entities_as_char.html +1 -0
  386. data/test/testcases/span/text_substitutions/entities_as_char.html.19 +1 -0
  387. data/test/testcases/span/text_substitutions/entities_as_char.options +1 -0
  388. data/test/testcases/span/text_substitutions/entities_as_char.text +1 -0
  389. data/test/testcases/span/text_substitutions/entities_as_input.html +1 -0
  390. data/test/testcases/span/text_substitutions/entities_as_input.options +1 -0
  391. data/test/testcases/span/text_substitutions/entities_as_input.text +1 -0
  392. data/test/testcases/span/text_substitutions/entities_numeric.html +1 -0
  393. data/test/testcases/span/text_substitutions/entities_numeric.options +1 -0
  394. data/test/testcases/span/text_substitutions/entities_numeric.text +1 -0
  395. data/test/testcases/span/text_substitutions/entities_symbolic.html +1 -0
  396. data/test/testcases/span/text_substitutions/entities_symbolic.options +1 -0
  397. data/test/testcases/span/text_substitutions/entities_symbolic.text +1 -0
  398. data/test/testcases/span/text_substitutions/greaterthan.html +1 -0
  399. data/test/testcases/span/text_substitutions/greaterthan.text +1 -0
  400. data/test/testcases/span/text_substitutions/lowerthan.html +1 -0
  401. data/test/testcases/span/text_substitutions/lowerthan.text +1 -0
  402. data/test/testcases/span/text_substitutions/typography.html +18 -0
  403. data/test/testcases/span/text_substitutions/typography.html.19 +18 -0
  404. data/test/testcases/span/text_substitutions/typography.text +18 -0
  405. metadata +476 -0
data/README ADDED
@@ -0,0 +1,31 @@
1
+ # newstile
2
+
3
+ newstile is newstile-parser. It is forked off Thomas Leitner's markdown parser kramdown, and
4
+ modified to support the newstile syntax. Newstile is a markdown dialect optimized for fast typing
5
+ on mobile devices like iPhone and Android phones.
6
+
7
+ The syntax definition can be found in doc/syntax.page, a quick reference in doc/quickref.page. All
8
+ the documentation is available online at http://newstile.rubyforge.org.
9
+
10
+
11
+ # Usage
12
+
13
+ newstile has a basic *Cloth API, so using newstile is as easy as
14
+
15
+ require 'newstile'
16
+
17
+ Newstile::Document.new(text).to_html
18
+
19
+
20
+ # Development
21
+
22
+ Just clone the git repository as described in doc/installation.page you are good to go. You probably
23
+ want to install `rake` so that you can use the provided rake tasks. Aside from that:
24
+
25
+ * The `tidy` binary needs to be installed for the automatically derived tests to work.
26
+ * The `latex` binary needs to be installed for the latex-compilation tests to work.
27
+
28
+
29
+ # License
30
+
31
+ See the COPYING file.
@@ -0,0 +1,342 @@
1
+ # -*- ruby -*-
2
+
3
+ # load all optional developer libraries
4
+ begin
5
+ require 'rubygems'
6
+ require 'rake/gempackagetask'
7
+ rescue LoadError
8
+ end
9
+
10
+ begin
11
+ require 'webgen/webgentask'
12
+ require 'webgen/page'
13
+ require 'webgen/website'
14
+ rescue LoadError
15
+ end
16
+
17
+ begin
18
+ require 'rdoc/task'
19
+ require 'rdoc/rdoc'
20
+ rescue LoadError
21
+ end
22
+
23
+ begin
24
+ require 'rubyforge'
25
+ rescue LoadError
26
+ end
27
+
28
+ begin
29
+ require 'rcov/rcovtask'
30
+ rescue LoadError
31
+ end
32
+
33
+ require 'fileutils'
34
+ require 'rake/clean'
35
+ require 'rake/testtask'
36
+ require 'rake/packagetask'
37
+ require 'erb'
38
+
39
+ $:.unshift('lib')
40
+ require 'newstile'
41
+
42
+ # End user tasks ################################################################
43
+
44
+ task :default => :test
45
+
46
+ desc "Install using setup.rb"
47
+ task :install do
48
+ ruby "setup.rb config"
49
+ ruby "setup.rb setup"
50
+ ruby "setup.rb install"
51
+ end
52
+
53
+ task :clobber do
54
+ ruby "setup.rb clean"
55
+ end
56
+
57
+
58
+ if defined? Webgen
59
+ desc "Generate the HTML documentation"
60
+ Webgen::WebgenTask.new('htmldoc') do |site|
61
+ site.clobber_outdir = true
62
+ site.config_block = lambda do |config|
63
+ config['sources'] = [['/', "Webgen::Source::FileSystem", 'doc']]
64
+ config['output'] = ['Webgen::Output::FileSystem', 'htmldoc']
65
+ config.default_processing_pipeline('Page' => 'erb,tags,newstile,blocks,fragments')
66
+ config.optionsdisplay.items [], :mandatory => 'default'
67
+ config.kdlink.oid nil, :mandatory => true
68
+ config.kdlink.part nil, :mandatory => true
69
+ config['contentprocessor.tags.map']['options'] = 'OptionsDisplay'
70
+ config['contentprocessor.tags.map']['kdexample'] = 'KDExample'
71
+ config['contentprocessor.tags.map']['kdlink'] = 'KDLink'
72
+ end
73
+ end
74
+ end
75
+
76
+ if defined? Rake::RDocTask
77
+ rd = Rake::RDocTask.new do |rdoc|
78
+ rdoc.rdoc_dir = 'htmldoc/rdoc'
79
+ rdoc.title = 'newstile'
80
+ rdoc.main = 'Newstile'
81
+ rdoc.options << '--line-numbers'
82
+ rdoc.rdoc_files.include('lib/**/*.rb')
83
+ end
84
+ end
85
+
86
+ if defined?(Webgen) && defined?(Rake::RDocTask)
87
+ desc "Build the whole user documentation"
88
+ task :doc => [:rdoc, 'htmldoc']
89
+ end
90
+
91
+ tt = Rake::TestTask.new do |test|
92
+ test.warning = true
93
+ test.libs << 'test'
94
+ end
95
+
96
+ # Release tasks and development tasks ############################################
97
+
98
+ namespace :dev do
99
+
100
+ SUMMARY = 'newstile is a fast, pure-Ruby Newstile converter.'
101
+ DESCRIPTION = <<EOF
102
+ newstile is parser for the newstile dialect of markdown. Newstile is optimised
103
+ for typing on mobile devices like iPhone and Andorid mobiles. It is forked
104
+ from Thomas Leitner's kramdown, which is a fast, pure Ruby, markdown parser.
105
+ EOF
106
+
107
+ begin
108
+ REL_PAGE = Webgen::Page.from_data(File.read('doc/news/release_' + Newstile::VERSION.split('.').join('_') + '.page'))
109
+ rescue
110
+ puts 'NO RELEASE NOTES/CHANGES FILE'
111
+ end
112
+
113
+ PKG_FILES = FileList.new([
114
+ 'Rakefile',
115
+ 'setup.rb',
116
+ 'COPYING', 'GPL', 'README', 'AUTHORS',
117
+ 'VERSION', 'ChangeLog', 'CONTRIBUTERS',
118
+ 'bin/*',
119
+ 'benchmark/*',
120
+ 'lib/**/*.rb',
121
+ 'man/man1/newstile.1',
122
+ 'data/**/*',
123
+ 'doc/**',
124
+ 'test/**/*'
125
+ ])
126
+
127
+ CLOBBER << "VERSION"
128
+ file 'VERSION' do
129
+ puts "Generating VERSION file"
130
+ File.open('VERSION', 'w+') {|file| file.write(Newstile::VERSION + "\n")}
131
+ end
132
+
133
+ CLOBBER << 'ChangeLog'
134
+ file 'ChangeLog' do
135
+ puts "Generating ChangeLog file"
136
+ `git log --name-only > ChangeLog`
137
+ end
138
+
139
+ CLOBBER << 'CONTRIBUTERS'
140
+ file 'CONTRIBUTERS' do
141
+ puts "Generating CONTRIBUTERS file"
142
+ `echo " Count Name" > CONTRIBUTERS`
143
+ `echo "======= ====" >> CONTRIBUTERS`
144
+ `git log | grep ^Author: | sed 's/^Author: //' | sort | uniq -c | sort -nr >> CONTRIBUTERS`
145
+ end
146
+
147
+ CLOBBER << "man/man1/newstile.1"
148
+ file 'man/man1/newstile.1' => ['man/man1/newstile.1.erb'] do
149
+ puts "Generating newstile man page"
150
+ File.open('man/man1/newstile.1', 'w+') do |file|
151
+ file.write(ERB.new(File.read('man/man1/newstile.1.erb')).result(binding))
152
+ end
153
+ end
154
+
155
+ Rake::PackageTask.new('newstile', Newstile::VERSION) do |pkg|
156
+ pkg.need_tar = true
157
+ pkg.need_zip = true
158
+ pkg.package_files = PKG_FILES
159
+ end
160
+
161
+ if defined? Gem
162
+ spec = Gem::Specification.new do |s|
163
+
164
+ #### Basic information
165
+ s.name = 'newstile'
166
+ s.version = Newstile::VERSION
167
+ s.summary = SUMMARY
168
+ s.description = DESCRIPTION
169
+
170
+ #### Dependencies, requirements and files
171
+ s.files = PKG_FILES.to_a
172
+
173
+ s.require_path = 'lib'
174
+ s.executables = ['newstile']
175
+ s.default_executable = 'newstile'
176
+
177
+ #### Documentation
178
+
179
+ s.has_rdoc = true
180
+ s.rdoc_options = ['--line-numbers', '--main', 'Newstile']
181
+
182
+ #### Author and project details
183
+
184
+ s.author = 'Thomas Leitner / Rune Myrland'
185
+ s.email = 'rune@epubify.com'
186
+ s.homepage = "http://github.com/wrimle/newstile"
187
+ end
188
+
189
+ Rake::GemPackageTask.new(spec) do |pkg|
190
+ pkg.need_zip = true
191
+ pkg.need_tar = true
192
+ end
193
+
194
+ end
195
+
196
+ if defined?(RubyForge) && defined?(Webgen) && defined?(Gem) && defined?(Rake::RDocTask)
197
+ desc 'Release Newstile version ' + Newstile::VERSION
198
+ task :release => [:clobber, :package, :publish_files, :publish_website, :post_news]
199
+ end
200
+
201
+ if defined? RubyForge
202
+ desc "Upload the release to Rubyforge"
203
+ task :publish_files => [:package] do
204
+ print 'Uploading files to Rubyforge...'
205
+ $stdout.flush
206
+
207
+ rf = RubyForge.new
208
+ rf.configure
209
+ rf.login
210
+
211
+ rf.userconfig["release_notes"] = REL_PAGE.blocks['content'].content
212
+ rf.userconfig["preformatted"] = false
213
+
214
+ files = %w[.gem .tgz .zip].collect {|ext| "pkg/newstile-#{Newstile::VERSION}" + ext}
215
+
216
+ rf.add_release('newstile', 'newstile', Newstile::VERSION, *files)
217
+
218
+ sh "gem push pkg/newstile-#{Newstile::VERSION}.gem"
219
+ puts 'done'
220
+ end
221
+
222
+ desc 'Post announcement to rubyforge.'
223
+ task :post_news do
224
+ print 'Posting announcement to Rubyforge ...'
225
+ $stdout.flush
226
+ rf = RubyForge.new
227
+ rf.configure
228
+ rf.login
229
+
230
+ content = REL_PAGE.blocks['content'].content
231
+ content += "\n\n\nAbout newstile\n\n#{SUMMARY}\n\n#{DESCRIPTION}"
232
+ rf.post_news('newstile', "newstile #{Newstile::VERSION} released", content)
233
+ puts "done"
234
+ end
235
+ end
236
+
237
+ desc "Upload the website to Rubyforge"
238
+ task :publish_website => ['doc'] do
239
+ sh "rsync -avc --delete --exclude 'wiki' --exclude 'js/jsMath' --exclude 'robots.txt' htmldoc/ gettalong@rubyforge.org:/var/www/gforge-projects/newstile/"
240
+ end
241
+
242
+
243
+ if defined? Rcov
244
+ Rcov::RcovTask.new do |rcov|
245
+ rcov.libs << 'test'
246
+ end
247
+ end
248
+
249
+ CODING_LINE = "# -*- coding: utf-8 -*-\n"
250
+ COPYRIGHT=<<EOF
251
+ #
252
+ #--
253
+ # Copyright (C) 2009-2010 Thomas Leitner <t_leitner@gmx.at>
254
+ #
255
+ # This file is part of newstile.
256
+ #
257
+ # newstile is free software: you can redistribute it and/or modify
258
+ # it under the terms of the GNU General Public License as published by
259
+ # the Free Software Foundation, either version 3 of the License, or
260
+ # (at your option) any later version.
261
+ #
262
+ # This program is distributed in the hope that it will be useful,
263
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
264
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
265
+ # GNU General Public License for more details.
266
+ #
267
+ # You should have received a copy of the GNU General Public License
268
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
269
+ #++
270
+ #
271
+ EOF
272
+
273
+ desc "Insert/Update copyright notice"
274
+ task :update_copyright do
275
+ inserted = false
276
+ Dir["lib/**/*.rb"].each do |file|
277
+ if !File.read(file).start_with?(CODING_LINE + COPYRIGHT)
278
+ inserted = true
279
+ puts "Updating file #{file}"
280
+ old = File.read(file)
281
+ if !(result = old.gsub!(/\A#{Regexp.escape(CODING_LINE)}#\n#--.*?\n#\+\+\n#\n/m, CODING_LINE + COPYRIGHT))
282
+ old.gsub!(/\A(#{Regexp.escape(CODING_LINE)})?/, CODING_LINE + COPYRIGHT + "\n")
283
+ end
284
+ File.open(file, 'w+') {|f| f.puts(old)}
285
+ end
286
+ end
287
+ puts "Look through the above mentioned files and correct all problems" if inserted
288
+ end
289
+
290
+ end
291
+
292
+ task :clobber => ['dev:clobber']
293
+
294
+ # Helper methods and misc ###################################################################
295
+
296
+ if defined? Webgen
297
+
298
+ class OptionsDisplay
299
+
300
+ include Webgen::Tag::Base
301
+
302
+ def call(tag, body, context)
303
+ param('optionsdisplay.items').collect do |opt|
304
+ Newstile::Options.definitions[opt]
305
+ end.collect do |term|
306
+ lines = term.desc.split(/\n/)
307
+ first = lines.shift
308
+ rest = lines[0..-2].collect {|l| " " + l}.join("\n")
309
+ "`#{term.name}`\n: #{first}\n#{rest}\n\n"
310
+ end.join("\n")
311
+ end
312
+
313
+ end
314
+
315
+ require 'cgi'
316
+
317
+ class KDExample
318
+
319
+ include Webgen::Tag::Base
320
+
321
+ def call(tag, body, context)
322
+ result = ::Newstile::Document.new(body, :auto_ids => false).to_html
323
+ before = "<pre class='kdexample-before'>#{body}<code>\n</code></pre>"
324
+ after = "<pre class='kdexample-after-source'>#{CGI::escapeHTML(result)}<code>\n</code></pre>"
325
+ afterhtml = "<div class='kdexample-after-live'>#{result}</div>"
326
+ "<div class='kdexample'>#{before}#{after}#{afterhtml}\n</div><div class='clear'></div>"
327
+ end
328
+
329
+ end
330
+
331
+ class KDLink
332
+
333
+ include Webgen::Tag::Base
334
+
335
+ def call(tag, body, context)
336
+ link = "<a href='syntax.html##{param('kdlink.oid')}'>&rarr; Syntax for #{param('kdlink.part')}</a>"
337
+ "<div class='kdsyntaxlink'>#{link}\n</div>"
338
+ end
339
+
340
+ end
341
+
342
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.0.0
@@ -0,0 +1,34 @@
1
+ require 'benchmark'
2
+ require 'stringio'
3
+
4
+ require 'newstile'
5
+ require 'bluecloth'
6
+ require 'maruku'
7
+ require 'maruku/version'
8
+ require 'rdiscount'
9
+ require 'bluefeather'
10
+
11
+ module MaRuKu::Errors
12
+ def tell_user(s)
13
+ end
14
+ end
15
+
16
+
17
+ RUNS=20
18
+
19
+ FILES=['mdsyntax.text', 'mdbasics.text']
20
+
21
+ puts "Running tests on #{Time.now.strftime("%Y-%m-%d")} under #{RUBY_DESCRIPTION}"
22
+
23
+ FILES.each do |file|
24
+ data = File.read(File.join(File.dirname(__FILE__), file))
25
+ puts
26
+ puts "Test using file #{file} and #{RUNS} runs"
27
+ Benchmark.bmbm do |b|
28
+ b.report("newstile #{Newstile::VERSION}") { RUNS.times { Newstile::Document.new(data).to_html } }
29
+ b.report("Maruku #{MaRuKu::Version}") { RUNS.times { Maruku.new(data, :on_error => :ignore).to_html } }
30
+ b.report("BlueFeather #{BlueFeather::VERSION}") { RUNS.times { BlueFeather.parse(data) } }
31
+ b.report("BlueCloth #{BlueCloth::VERSION}") { RUNS.times { BlueCloth.new(data).to_html } }
32
+ b.report("RDiscount #{RDiscount::VERSION}") { RUNS.times { RDiscount.new(data).to_html } }
33
+ end
34
+ end
@@ -0,0 +1,112 @@
1
+ require 'benchmark'
2
+ require 'optparse'
3
+ require 'fileutils'
4
+
5
+ require 'newstile'
6
+ require 'maruku'
7
+ require 'maruku/version'
8
+ begin
9
+ require 'rdiscount'
10
+ require 'bluecloth'
11
+ rescue LoadError
12
+ end
13
+ require 'bluefeather'
14
+
15
+ module MaRuKu::Errors
16
+ def tell_user(s)
17
+ end
18
+ end
19
+
20
+ options = {:static => false}
21
+ OptionParser.new do |opts|
22
+ opts.on("-s", "--[no-]static", "Generate static data") {|v| options[:static] = v}
23
+ opts.on("-g", "--[no-]graph", "Generate graph") {|v| options[:graph] = v}
24
+ opts.on("-h NAME", "--historic NAME", String, "Add historic benchmark data") {|v| options[:historic] = v}
25
+ end.parse!
26
+
27
+
28
+ THISRUBY = (self.class.const_defined?(:RUBY_DESCRIPTION) ? RUBY_DESCRIPTION.scan(/^.*?(?=\s*\()/).first.sub(/\s/, '-') : "ruby-#{RUBY_VERSION}")
29
+
30
+ Dir.chdir(File.dirname(__FILE__))
31
+ $:.unshift "../lib"
32
+ BMDATA = File.read('mdbasics.text')
33
+ MULTIPLIER = (0..5).map {|i| 2**i}
34
+
35
+ if options[:static]
36
+ static = {}
37
+ 2.times do
38
+ MULTIPLIER.each do |i|
39
+ $stderr.puts "Generating static benchmark data, multiplier #{i}"
40
+ mddata = BMDATA*i
41
+ static[i] = []
42
+ static[i] << ["Maruku #{MaRuKu::Version}", Benchmark::measure { Maruku.new(mddata, :on_error => :ignore).to_html }.real]
43
+ static[i] << ["BlueFeather #{BlueFeather::VERSION}", Benchmark::measure { BlueFeather.parse(mddata) }.real]
44
+ if self.class.const_defined?(:BlueCloth)
45
+ static[i] << ["BlueCloth #{BlueCloth::VERSION}", Benchmark::measure { BlueCloth.new(mddata).to_html }.real]
46
+ else
47
+ static[i] << ["BlueCloth Not Available.", 0]
48
+ end
49
+ if self.class.const_defined?(:RDiscount)
50
+ static[i] << ["RDiscount #{RDiscount::VERSION}", Benchmark::measure { RDiscount.new(mddata).to_html }.real]
51
+ else
52
+ static[i] << ["RDiscount Not Available.", 0]
53
+ end
54
+ end
55
+ end
56
+ File.open("static-#{THISRUBY}.dat", 'w+') do |f|
57
+ f.puts "# " + static[MULTIPLIER.first].map {|name, val| name }.join(" || ")
58
+ format_str = "%5d" + " %10.5f"*static[MULTIPLIER.first].size
59
+ static.sort.each do |m,v|
60
+ f.puts format_str % [m, *v.map {|name,val| val}]
61
+ end
62
+ end
63
+ end
64
+
65
+ if options[:historic]
66
+ historic = "historic-#{THISRUBY}.dat"
67
+ data = if File.exist?(historic)
68
+ lines = File.readlines(historic).map {|l| l.chomp}
69
+ lines.first << " || "
70
+ lines
71
+ else
72
+ ["# ", *MULTIPLIER.map {|m| "%5d" % m}]
73
+ end
74
+ data.first << " #{options[:historic]}"
75
+ MULTIPLIER.each_with_index do |m, i|
76
+ $stderr.puts "Generating historic benchmark data, multiplier #{m}"
77
+ mddata = BMDATA*m
78
+ Benchmark::measure { Newstile::Document.new(mddata).to_html }
79
+ data[i+1] << " %10.5f" % Benchmark::measure { Newstile::Document.new(mddata).to_html }.real
80
+ end
81
+ File.open(historic, 'w+') do |f|
82
+ data.each {|l| f.puts l}
83
+ end
84
+ end
85
+
86
+ if options[:graph]
87
+ Dir['historic-*.dat'].each do |historic_name|
88
+ theruby = historic_name.sub(/^historic-/, '').sub(/\.dat$/, '')
89
+ graph_name = "graph-#{theruby}.png"
90
+ #static_name = "static-#{theruby}.dat"
91
+ historic_names = File.readlines(historic_name).first.chomp[1..-1].split(/\s*\|\|\s*/)
92
+ #static_names = (File.exist?(static_name) ? File.readlines(static_name).first.chomp[1..-1].split(/\s*\|\|\s*/) : [])
93
+ File.open("gnuplot.dat", "w+") do |f|
94
+ f.puts <<EOF
95
+ set title "Execution Time Performance for #{theruby}"
96
+ set xlabel "File Multiplier (i.e. n times mdbasic.text)"
97
+ set ylabel "Execution Time in secondes"
98
+ set key left top
99
+ set grid "on"
100
+ set terminal png
101
+ set output "#{graph_name}"
102
+ EOF
103
+ f.print "plot "
104
+ i, j = 1, 1
105
+ f.puts((historic_names.map {|n| i += 1; "\"#{historic_name}\" using 1:#{i} with lp title \"#{n}\""}
106
+ #static_names.map {|n| j += 1; n =~ /bluefeather/i ? nil : "\"#{static_name}\" using 1:#{j} with lp title \"#{n}\""}.compact
107
+ ).join(", "))
108
+ end
109
+ `gnuplot gnuplot.dat`
110
+ FileUtils.rm("gnuplot.dat")
111
+ end
112
+ end