webgen 0.5.17 → 1.0.0.beta1

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 (408) hide show
  1. data/API.rdoc +143 -0
  2. data/AUTHORS +0 -1
  3. data/COPYING +17 -8
  4. data/ChangeLog +4456 -0
  5. data/GPL +623 -289
  6. data/README.md +71 -0
  7. data/Rakefile +87 -99
  8. data/VERSION +1 -1
  9. data/bin/webgen +1 -7
  10. data/data/webgen/basic_website_template/ext/init.rb +15 -0
  11. data/data/webgen/basic_website_template/webgen.config +18 -0
  12. data/data/webgen/bundle_template_files/README.md.erb +24 -0
  13. data/data/webgen/bundle_template_files/Rakefile.erb +36 -0
  14. data/data/webgen/bundle_template_files/info.yaml.erb +16 -0
  15. data/data/webgen/bundle_template_files/init.rb.erb +1 -0
  16. data/data/webgen/passive_sources/default.metainfo +32 -0
  17. data/data/webgen/passive_sources/stylesheets/coderay-default.css +109 -118
  18. data/data/webgen/passive_sources/templates/feed.template +62 -0
  19. data/data/webgen/passive_sources/templates/sitemap.template +3 -6
  20. data/data/webgen/passive_sources/templates/tag.template +42 -0
  21. data/data/webgen/website_bundles/default/README +2 -2
  22. data/lib/webgen/blackboard.rb +15 -51
  23. data/lib/webgen/bundle/built-in-show-changes/init.rb +54 -0
  24. data/lib/webgen/bundle/built-in/init.rb +366 -0
  25. data/lib/webgen/bundle_loader.rb +126 -0
  26. data/lib/webgen/cache.rb +9 -18
  27. data/lib/webgen/cli.rb +131 -58
  28. data/lib/webgen/cli/bundle_command.rb +30 -0
  29. data/lib/webgen/cli/create_bundle_command.rb +46 -0
  30. data/lib/webgen/cli/create_command.rb +48 -60
  31. data/lib/webgen/cli/generate_command.rb +25 -0
  32. data/lib/webgen/cli/install_bundle_command.rb +34 -0
  33. data/lib/webgen/cli/list_bundle_command.rb +108 -0
  34. data/lib/webgen/cli/logger.rb +45 -0
  35. data/lib/webgen/cli/show_command.rb +30 -0
  36. data/lib/webgen/cli/show_config_command.rb +63 -0
  37. data/lib/webgen/cli/show_dependencies_command.rb +103 -0
  38. data/lib/webgen/cli/show_extensions_command.rb +74 -0
  39. data/lib/webgen/cli/utils.rb +68 -95
  40. data/lib/webgen/configuration.rb +143 -105
  41. data/lib/webgen/content_processor.rb +160 -0
  42. data/lib/webgen/content_processor/blocks.rb +96 -0
  43. data/lib/webgen/content_processor/builder.rb +25 -0
  44. data/lib/webgen/content_processor/erb.rb +25 -0
  45. data/lib/webgen/content_processor/erubis.rb +31 -0
  46. data/lib/webgen/content_processor/fragments.rb +82 -0
  47. data/lib/webgen/content_processor/haml.rb +25 -0
  48. data/lib/webgen/content_processor/html_head.rb +157 -0
  49. data/lib/webgen/content_processor/kramdown.rb +49 -0
  50. data/lib/webgen/content_processor/maruku.rb +39 -0
  51. data/lib/webgen/content_processor/r_discount.rb +21 -0
  52. data/lib/webgen/content_processor/rdoc.rb +22 -0
  53. data/lib/webgen/content_processor/redcloth.rb +23 -0
  54. data/lib/webgen/content_processor/ruby.rb +20 -0
  55. data/lib/webgen/content_processor/sass.rb +145 -0
  56. data/lib/webgen/content_processor/scss.rb +23 -0
  57. data/lib/webgen/content_processor/tags.rb +30 -0
  58. data/lib/webgen/content_processor/tidy.rb +32 -0
  59. data/lib/webgen/content_processor/tikz.rb +116 -0
  60. data/lib/webgen/content_processor/xmllint.rb +31 -0
  61. data/lib/webgen/context.rb +57 -29
  62. data/lib/webgen/context/html_head.rb +60 -0
  63. data/lib/webgen/context/nodes.rb +32 -27
  64. data/lib/webgen/context/rendering.rb +39 -0
  65. data/lib/webgen/context/webgen_tags.rb +25 -0
  66. data/lib/webgen/core_ext.rb +25 -0
  67. data/lib/webgen/destination.rb +151 -0
  68. data/lib/webgen/destination/file_system.rb +62 -0
  69. data/lib/webgen/error.rb +59 -49
  70. data/lib/webgen/extension_manager.rb +121 -0
  71. data/lib/webgen/item_tracker.rb +237 -0
  72. data/lib/webgen/item_tracker/file.rb +39 -0
  73. data/lib/webgen/item_tracker/missing_node.rb +61 -0
  74. data/lib/webgen/item_tracker/node_content.rb +40 -0
  75. data/lib/webgen/item_tracker/node_meta_info.rb +53 -0
  76. data/lib/webgen/item_tracker/nodes.rb +92 -0
  77. data/lib/webgen/logger.rb +26 -82
  78. data/lib/webgen/node.rb +122 -367
  79. data/lib/webgen/node_finder.rb +336 -0
  80. data/lib/webgen/page.rb +48 -85
  81. data/lib/webgen/path.rb +218 -156
  82. data/lib/webgen/path_handler.rb +400 -0
  83. data/lib/webgen/path_handler/base.rb +220 -0
  84. data/lib/webgen/path_handler/copy.rb +78 -0
  85. data/lib/webgen/path_handler/directory.rb +21 -0
  86. data/lib/webgen/path_handler/feed.rb +82 -0
  87. data/lib/webgen/path_handler/meta_info.rb +84 -0
  88. data/lib/webgen/path_handler/page.rb +38 -0
  89. data/lib/webgen/path_handler/page_utils.rb +79 -0
  90. data/lib/webgen/path_handler/sitemap.rb +52 -0
  91. data/lib/webgen/path_handler/template.rb +96 -0
  92. data/lib/webgen/path_handler/virtual.rb +85 -0
  93. data/lib/webgen/{webgentask.rb → rake_task.rb} +31 -27
  94. data/lib/webgen/source.rb +106 -24
  95. data/lib/webgen/source/file_system.rb +41 -0
  96. data/lib/webgen/source/stacked.rb +49 -53
  97. data/lib/webgen/source/tar_archive.rb +59 -0
  98. data/lib/webgen/tag.rb +250 -19
  99. data/lib/webgen/tag/breadcrumb_trail.rb +65 -0
  100. data/lib/webgen/tag/coderay.rb +32 -35
  101. data/lib/webgen/tag/date.rb +9 -9
  102. data/lib/webgen/tag/execute_command.rb +31 -0
  103. data/lib/webgen/tag/include_file.rb +32 -0
  104. data/lib/webgen/tag/langbar.rb +31 -47
  105. data/lib/webgen/tag/link.rb +17 -18
  106. data/lib/webgen/tag/menu.rb +27 -189
  107. data/lib/webgen/tag/meta_info.rb +31 -0
  108. data/lib/webgen/tag/relocatable.rb +48 -39
  109. data/lib/webgen/tag/tikz.rb +24 -100
  110. data/lib/webgen/task.rb +99 -0
  111. data/lib/webgen/task/create_bundle.rb +73 -0
  112. data/lib/webgen/task/create_website.rb +94 -0
  113. data/lib/webgen/task/generate_website.rb +47 -0
  114. data/lib/webgen/test_helper.rb +183 -0
  115. data/lib/webgen/tree.rb +95 -46
  116. data/lib/webgen/utils.rb +39 -0
  117. data/lib/webgen/utils/external_command.rb +27 -0
  118. data/lib/webgen/utils/tag_parser.rb +124 -0
  119. data/lib/webgen/version.rb +1 -1
  120. data/lib/webgen/website.rb +134 -296
  121. data/setup.rb +1 -1
  122. data/test/test_documentation.rb +43 -0
  123. data/test/webgen/cli/test_logger.rb +41 -0
  124. data/test/{test_contentprocessor_blocks.rb → webgen/content_processor/test_blocks.rb} +30 -28
  125. data/test/webgen/content_processor/test_builder.rb +25 -0
  126. data/test/webgen/content_processor/test_erb.rb +21 -0
  127. data/test/webgen/content_processor/test_erubis.rb +33 -0
  128. data/test/webgen/content_processor/test_fragments.rb +96 -0
  129. data/test/webgen/content_processor/test_haml.rb +24 -0
  130. data/test/webgen/content_processor/test_html_head.rb +78 -0
  131. data/test/webgen/content_processor/test_kramdown.rb +49 -0
  132. data/test/webgen/content_processor/test_maruku.rb +30 -0
  133. data/test/webgen/content_processor/test_r_discount.rb +18 -0
  134. data/test/webgen/content_processor/test_rdoc.rb +18 -0
  135. data/test/webgen/content_processor/test_redcloth.rb +23 -0
  136. data/test/webgen/content_processor/test_ruby.rb +24 -0
  137. data/test/webgen/content_processor/test_sass.rb +44 -0
  138. data/test/webgen/content_processor/test_scss.rb +23 -0
  139. data/test/webgen/content_processor/test_tags.rb +44 -0
  140. data/test/webgen/content_processor/test_tidy.rb +31 -0
  141. data/test/webgen/content_processor/test_tikz.rb +33 -0
  142. data/test/webgen/content_processor/test_xmllint.rb +32 -0
  143. data/test/webgen/destination/test_file_system.rb +54 -0
  144. data/test/webgen/item_tracker/test_file.rb +31 -0
  145. data/test/webgen/item_tracker/test_missing_node.rb +70 -0
  146. data/test/webgen/item_tracker/test_node_content.rb +42 -0
  147. data/test/webgen/item_tracker/test_node_meta_info.rb +44 -0
  148. data/test/webgen/item_tracker/test_nodes.rb +61 -0
  149. data/test/webgen/path_handler/test_base.rb +153 -0
  150. data/test/webgen/path_handler/test_copy.rb +56 -0
  151. data/test/webgen/path_handler/test_feed.rb +85 -0
  152. data/test/webgen/path_handler/test_meta_info.rb +98 -0
  153. data/test/webgen/path_handler/test_page.rb +25 -0
  154. data/test/webgen/path_handler/test_page_utils.rb +59 -0
  155. data/test/webgen/path_handler/test_sitemap.rb +95 -0
  156. data/test/webgen/path_handler/test_template.rb +64 -0
  157. data/test/webgen/path_handler/test_virtual.rb +87 -0
  158. data/test/webgen/source/test_file_system.rb +51 -0
  159. data/test/webgen/source/test_stacked.rb +35 -0
  160. data/test/{test_source_tararchive.rb → webgen/source/test_tar_archive.rb} +10 -25
  161. data/test/webgen/tag/test_breadcrumb_trail.rb +66 -0
  162. data/test/webgen/tag/test_coderay.rb +34 -0
  163. data/test/webgen/tag/test_date.rb +18 -0
  164. data/test/webgen/tag/test_execute_command.rb +36 -0
  165. data/test/webgen/tag/test_include_file.rb +35 -0
  166. data/test/webgen/tag/test_langbar.rb +50 -0
  167. data/test/webgen/tag/test_link.rb +40 -0
  168. data/test/webgen/tag/test_menu.rb +61 -0
  169. data/test/webgen/tag/test_meta_info.rb +25 -0
  170. data/test/webgen/tag/test_relocatable.rb +50 -0
  171. data/test/webgen/tag/test_tikz.rb +41 -0
  172. data/test/webgen/task/test_create_website.rb +46 -0
  173. data/test/webgen/test_blackboard.rb +31 -0
  174. data/test/webgen/test_bundle_loader.rb +55 -0
  175. data/test/{test_cache.rb → webgen/test_cache.rb} +3 -15
  176. data/test/webgen/test_cli.rb +41 -0
  177. data/test/webgen/test_configuration.rb +131 -0
  178. data/test/webgen/test_content_processor.rb +86 -0
  179. data/test/webgen/test_context.rb +73 -0
  180. data/test/webgen/test_core_ext.rb +20 -0
  181. data/test/webgen/test_destination.rb +48 -0
  182. data/test/webgen/test_error.rb +121 -0
  183. data/test/webgen/test_extension_manager.rb +70 -0
  184. data/test/webgen/test_item_tracker.rb +106 -0
  185. data/test/{test_languages.rb → webgen/test_languages.rb} +4 -4
  186. data/test/webgen/test_logger.rb +46 -0
  187. data/test/webgen/test_node.rb +178 -0
  188. data/test/webgen/test_node_finder.rb +127 -0
  189. data/test/{test_page.rb → webgen/test_page.rb} +44 -48
  190. data/test/webgen/test_path.rb +271 -0
  191. data/test/{test_webgentask.rb → webgen/test_rake_task.rb} +4 -4
  192. data/test/webgen/test_source.rb +59 -0
  193. data/test/webgen/test_tag.rb +137 -0
  194. data/test/webgen/test_task.rb +40 -0
  195. data/test/webgen/test_tree.rb +147 -0
  196. data/test/webgen/test_utils.rb +16 -0
  197. data/test/webgen/test_website.rb +45 -0
  198. data/test/webgen/utils/test_tag_parser.rb +99 -0
  199. metadata +292 -344
  200. data/data/webgen/passive_sources/templates/atom_feed.template +0 -39
  201. data/data/webgen/passive_sources/templates/rss_feed.template +0 -28
  202. data/data/webgen/resources.yaml +0 -4
  203. data/data/webgen/webgui/app.rb +0 -11
  204. data/data/webgen/webgui/controller/main.rb +0 -135
  205. data/data/webgen/webgui/layout/default.xhtml +0 -40
  206. data/data/webgen/webgui/overrides/win32console.rb +0 -0
  207. data/data/webgen/webgui/public/css/jquery.autocomplete.css +0 -50
  208. data/data/webgen/webgui/public/css/ramaze_error.css +0 -90
  209. data/data/webgen/webgui/public/css/style.css +0 -55
  210. data/data/webgen/webgui/public/img/headerbg.jpg +0 -0
  211. data/data/webgen/webgui/public/img/webgen_logo.png +0 -0
  212. data/data/webgen/webgui/public/js/jquery.autocomplete.js +0 -15
  213. data/data/webgen/webgui/public/js/jquery.js +0 -32
  214. data/data/webgen/webgui/start.rb +0 -9
  215. data/data/webgen/webgui/view/create_website.xhtml +0 -14
  216. data/data/webgen/webgui/view/error.xhtml +0 -64
  217. data/data/webgen/webgui/view/index.xhtml +0 -22
  218. data/data/webgen/webgui/view/manage_website.xhtml +0 -18
  219. data/data/webgen/website_skeleton/README +0 -10
  220. data/data/webgen/website_skeleton/Rakefile +0 -69
  221. data/data/webgen/website_skeleton/config.yaml +0 -35
  222. data/data/webgen/website_skeleton/ext/init.rb +0 -10
  223. data/doc/contentprocessor.template +0 -11
  224. data/doc/contentprocessor/blocks.page +0 -129
  225. data/doc/contentprocessor/builder.page +0 -79
  226. data/doc/contentprocessor/erb.page +0 -60
  227. data/doc/contentprocessor/erubis.page +0 -46
  228. data/doc/contentprocessor/fragments.page +0 -26
  229. data/doc/contentprocessor/haml.page +0 -46
  230. data/doc/contentprocessor/head.page +0 -31
  231. data/doc/contentprocessor/kramdown.page +0 -49
  232. data/doc/contentprocessor/less.page +0 -34
  233. data/doc/contentprocessor/maruku.page +0 -44
  234. data/doc/contentprocessor/rdiscount.page +0 -37
  235. data/doc/contentprocessor/rdoc.page +0 -36
  236. data/doc/contentprocessor/redcloth.page +0 -41
  237. data/doc/contentprocessor/sass.page +0 -31
  238. data/doc/contentprocessor/scss.page +0 -39
  239. data/doc/contentprocessor/tags.page +0 -73
  240. data/doc/contentprocessor/tidy.page +0 -14
  241. data/doc/contentprocessor/xmllint.page +0 -14
  242. data/doc/extensions.metainfo +0 -29
  243. data/doc/extensions.page +0 -15
  244. data/doc/extensions.template +0 -17
  245. data/doc/faq.page +0 -222
  246. data/doc/getting_started.page +0 -135
  247. data/doc/index.page +0 -71
  248. data/doc/manual.page +0 -727
  249. data/doc/reference_configuration.page +0 -1254
  250. data/doc/reference_metainfo.page +0 -265
  251. data/doc/reference_website_styles.page +0 -32
  252. data/doc/source/filesystem.page +0 -41
  253. data/doc/source/tararchive.page +0 -40
  254. data/doc/sourcehandler.template +0 -23
  255. data/doc/sourcehandler/copy.page +0 -19
  256. data/doc/sourcehandler/directory.page +0 -27
  257. data/doc/sourcehandler/feed.page +0 -102
  258. data/doc/sourcehandler/metainfo.page +0 -48
  259. data/doc/sourcehandler/page.page +0 -14
  260. data/doc/sourcehandler/sitemap.page +0 -46
  261. data/doc/sourcehandler/template.page +0 -45
  262. data/doc/sourcehandler/virtual.page +0 -49
  263. data/doc/tag.template +0 -25
  264. data/doc/tag/breadcrumbtrail.page +0 -40
  265. data/doc/tag/coderay.page +0 -53
  266. data/doc/tag/date.page +0 -31
  267. data/doc/tag/executecommand.page +0 -26
  268. data/doc/tag/includefile.page +0 -32
  269. data/doc/tag/langbar.page +0 -47
  270. data/doc/tag/link.page +0 -44
  271. data/doc/tag/menu.page +0 -109
  272. data/doc/tag/metainfo.page +0 -29
  273. data/doc/tag/relocatable.page +0 -38
  274. data/doc/tag/sitemap.page +0 -31
  275. data/doc/tag/tikz.page +0 -159
  276. data/doc/upgrading.page +0 -138
  277. data/doc/webgen_page_format.page +0 -129
  278. data/doc/website_styles.metainfo +0 -8
  279. data/lib/webgen/cli/apply_command.rb +0 -66
  280. data/lib/webgen/cli/run_command.rb +0 -22
  281. data/lib/webgen/cli/webgui_command.rb +0 -68
  282. data/lib/webgen/common.rb +0 -27
  283. data/lib/webgen/common/sitemap.rb +0 -83
  284. data/lib/webgen/contentprocessor.rb +0 -117
  285. data/lib/webgen/contentprocessor/blocks.rb +0 -92
  286. data/lib/webgen/contentprocessor/builder.rb +0 -29
  287. data/lib/webgen/contentprocessor/erb.rb +0 -26
  288. data/lib/webgen/contentprocessor/erubis.rb +0 -39
  289. data/lib/webgen/contentprocessor/fragments.rb +0 -25
  290. data/lib/webgen/contentprocessor/haml.rb +0 -34
  291. data/lib/webgen/contentprocessor/head.rb +0 -128
  292. data/lib/webgen/contentprocessor/kramdown.rb +0 -27
  293. data/lib/webgen/contentprocessor/kramdown/html.rb +0 -36
  294. data/lib/webgen/contentprocessor/less.rb +0 -35
  295. data/lib/webgen/contentprocessor/maruku.rb +0 -36
  296. data/lib/webgen/contentprocessor/rdiscount.rb +0 -19
  297. data/lib/webgen/contentprocessor/rdoc.rb +0 -20
  298. data/lib/webgen/contentprocessor/redcloth.rb +0 -21
  299. data/lib/webgen/contentprocessor/sass.rb +0 -22
  300. data/lib/webgen/contentprocessor/scss.rb +0 -22
  301. data/lib/webgen/contentprocessor/tags.rb +0 -170
  302. data/lib/webgen/contentprocessor/tidy.rb +0 -38
  303. data/lib/webgen/contentprocessor/xmllint.rb +0 -37
  304. data/lib/webgen/context/render.rb +0 -32
  305. data/lib/webgen/context/tags.rb +0 -20
  306. data/lib/webgen/coreext.rb +0 -13
  307. data/lib/webgen/default_config.rb +0 -240
  308. data/lib/webgen/loggable.rb +0 -25
  309. data/lib/webgen/output.rb +0 -86
  310. data/lib/webgen/output/filesystem.rb +0 -69
  311. data/lib/webgen/source/filesystem.rb +0 -61
  312. data/lib/webgen/source/resource.rb +0 -45
  313. data/lib/webgen/source/tararchive.rb +0 -78
  314. data/lib/webgen/sourcehandler.rb +0 -275
  315. data/lib/webgen/sourcehandler/base.rb +0 -281
  316. data/lib/webgen/sourcehandler/copy.rb +0 -44
  317. data/lib/webgen/sourcehandler/directory.rb +0 -30
  318. data/lib/webgen/sourcehandler/feed.rb +0 -92
  319. data/lib/webgen/sourcehandler/fragment.rb +0 -70
  320. data/lib/webgen/sourcehandler/memory.rb +0 -42
  321. data/lib/webgen/sourcehandler/metainfo.rb +0 -128
  322. data/lib/webgen/sourcehandler/page.rb +0 -64
  323. data/lib/webgen/sourcehandler/sitemap.rb +0 -60
  324. data/lib/webgen/sourcehandler/template.rb +0 -66
  325. data/lib/webgen/sourcehandler/virtual.rb +0 -117
  326. data/lib/webgen/tag/base.rb +0 -170
  327. data/lib/webgen/tag/breadcrumbtrail.rb +0 -70
  328. data/lib/webgen/tag/executecommand.rb +0 -31
  329. data/lib/webgen/tag/includefile.rb +0 -42
  330. data/lib/webgen/tag/metainfo.rb +0 -27
  331. data/lib/webgen/tag/sitemap.rb +0 -41
  332. data/lib/webgen/websiteaccess.rb +0 -31
  333. data/lib/webgen/websitemanager.rb +0 -125
  334. data/misc/default.css +0 -403
  335. data/misc/default.template +0 -76
  336. data/misc/htmldoc.metainfo +0 -26
  337. data/misc/htmldoc.virtual +0 -17
  338. data/misc/images/arrow.gif +0 -0
  339. data/misc/images/error.png +0 -0
  340. data/misc/images/headerbg.jpg +0 -0
  341. data/misc/images/important.png +0 -0
  342. data/misc/images/information.png +0 -0
  343. data/misc/images/quote.gif +0 -0
  344. data/misc/images/warning.png +0 -0
  345. data/misc/logo.svg +0 -313
  346. data/misc/style.page +0 -33
  347. data/test/helper.rb +0 -61
  348. data/test/test_blackboard.rb +0 -60
  349. data/test/test_cli.rb +0 -119
  350. data/test/test_common_sitemap.rb +0 -58
  351. data/test/test_configuration.rb +0 -68
  352. data/test/test_contentprocessor.rb +0 -39
  353. data/test/test_contentprocessor_builder.rb +0 -41
  354. data/test/test_contentprocessor_erb.rb +0 -33
  355. data/test/test_contentprocessor_erubis.rb +0 -62
  356. data/test/test_contentprocessor_fragments.rb +0 -43
  357. data/test/test_contentprocessor_haml.rb +0 -39
  358. data/test/test_contentprocessor_head.rb +0 -96
  359. data/test/test_contentprocessor_kramdown.rb +0 -56
  360. data/test/test_contentprocessor_less.rb +0 -40
  361. data/test/test_contentprocessor_maruku.rb +0 -33
  362. data/test/test_contentprocessor_rdiscount.rb +0 -21
  363. data/test/test_contentprocessor_rdoc.rb +0 -22
  364. data/test/test_contentprocessor_redcloth.rb +0 -26
  365. data/test/test_contentprocessor_sass.rb +0 -28
  366. data/test/test_contentprocessor_scss.rb +0 -28
  367. data/test/test_contentprocessor_tags.rb +0 -122
  368. data/test/test_contentprocessor_tidy.rb +0 -34
  369. data/test/test_contentprocessor_xmllint.rb +0 -38
  370. data/test/test_context.rb +0 -81
  371. data/test/test_error.rb +0 -93
  372. data/test/test_loggable.rb +0 -32
  373. data/test/test_logger.rb +0 -94
  374. data/test/test_node.rb +0 -469
  375. data/test/test_output_filesystem.rb +0 -60
  376. data/test/test_path.rb +0 -241
  377. data/test/test_source_filesystem.rb +0 -76
  378. data/test/test_source_resource.rb +0 -28
  379. data/test/test_source_stacked.rb +0 -49
  380. data/test/test_sourcehandler_base.rb +0 -136
  381. data/test/test_sourcehandler_copy.rb +0 -47
  382. data/test/test_sourcehandler_directory.rb +0 -38
  383. data/test/test_sourcehandler_feed.rb +0 -88
  384. data/test/test_sourcehandler_fragment.rb +0 -70
  385. data/test/test_sourcehandler_main.rb +0 -39
  386. data/test/test_sourcehandler_memory.rb +0 -44
  387. data/test/test_sourcehandler_metainfo.rb +0 -127
  388. data/test/test_sourcehandler_page.rb +0 -73
  389. data/test/test_sourcehandler_sitemap.rb +0 -68
  390. data/test/test_sourcehandler_template.rb +0 -68
  391. data/test/test_sourcehandler_virtual.rb +0 -106
  392. data/test/test_tag_base.rb +0 -62
  393. data/test/test_tag_breadcrumbtrail.rb +0 -91
  394. data/test/test_tag_coderay.rb +0 -45
  395. data/test/test_tag_date.rb +0 -18
  396. data/test/test_tag_executecommand.rb +0 -41
  397. data/test/test_tag_includefile.rb +0 -50
  398. data/test/test_tag_langbar.rb +0 -71
  399. data/test/test_tag_link.rb +0 -70
  400. data/test/test_tag_menu.rb +0 -207
  401. data/test/test_tag_metainfo.rb +0 -26
  402. data/test/test_tag_relocatable.rb +0 -60
  403. data/test/test_tag_sitemap.rb +0 -47
  404. data/test/test_tag_tikz.rb +0 -69
  405. data/test/test_tree.rb +0 -70
  406. data/test/test_website.rb +0 -130
  407. data/test/test_websiteaccess.rb +0 -25
  408. data/test/test_websitemanager.rb +0 -65
@@ -1,128 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- module Webgen::ContentProcessor
4
-
5
- # Inserts additional links to CSS/JS files and other HTML head meta info directly before the HTML
6
- # head end tag.
7
- #
8
- # The data used by this content processor is taken from the Context object. Therefore this
9
- # processor should be the last in the processing pipeline so that all other processors have been
10
- # able to set the data.
11
- #
12
- # The key <tt>:cp_head</tt> of <tt>context.persistent</tt> is used (the normal
13
- # <tt>context.options</tt> won't do because the data needs to be shared 'backwards' during the
14
- # rendering) and it has to be a Hash with the following values:
15
- #
16
- # [:js_file] An array of already resolved relative or absolute paths to Javascript files.
17
- # [:js_inline] An array of Javascript fragments to be inserted directly into the head section.
18
- # [:css_file] An array of already resolved relative or absolute paths to CSS files.
19
- # [:css_inline] An array of CSS fragments to be inserted directly into the head section.
20
- # [:meta] A hash with key-value pairs from which <tt>meta</tt> tags are generated. The keys and
21
- # the values will be properly escaped before insertion. The entries in the meta
22
- # information <tt>meta</tt> of the content node are also used and take precedence over
23
- # these entries.
24
- #
25
- # Duplicate values will be removed from the above mentioned arrays before generating the output.
26
- class Head
27
-
28
- include Webgen::Loggable
29
-
30
- HTML_HEAD_END_RE = /<\/head\s*>/i #:nodoc:
31
-
32
- LINK_DOCUMENT_ATTRS = {'type' => 'text/html'} #:nodoc:
33
- LINK_DOCUMENT_TYPES = %w{start next prev contents index glossary chapter section subsection appendix help} #:nodoc:
34
-
35
- # Insert the additional header information.
36
- def call(context)
37
- require 'erb'
38
- context.content.sub!(HTML_HEAD_END_RE) do |match|
39
- result = ''
40
-
41
- # add content set programmatically
42
- if context.persistent[:cp_head].kind_of?(Hash)
43
- context.persistent[:cp_head][:js_file].uniq.each do |js_file|
44
- result += "\n<script type=\"text/javascript\" src=\"#{js_file}\"></script>"
45
- end if context.persistent[:cp_head][:js_file].kind_of?(Array)
46
-
47
- context.persistent[:cp_head][:js_inline].uniq.each do |content|
48
- result += "\n<script type=\"text/javascript\">\n#{content}\n</script>"
49
- end if context.persistent[:cp_head][:js_inline].kind_of?(Array)
50
-
51
- context.persistent[:cp_head][:css_file].uniq.each do |css_file|
52
- result += "\n<link rel=\"stylesheet\" href=\"#{css_file}\" type=\"text/css\"/>"
53
- end if context.persistent[:cp_head][:css_file].kind_of?(Array)
54
-
55
- context.persistent[:cp_head][:css_inline].uniq.each do |content|
56
- result += "\n<style type=\"text/css\"><![CDATA[/\n#{content}\n]]></style>"
57
- end if context.persistent[:cp_head][:css_inline].kind_of?(Array)
58
- end
59
- ((context.persistent[:cp_head] || {})[:meta] || {}).merge(context.node['meta'] || {}).each do |name, content|
60
- result += "\n<meta name=\"#{ERB::Util.h(name)}\" content=\"#{ERB::Util.h(content)}\" />"
61
- end
62
-
63
- # add links to other languages of same page
64
- context.dest_node.tree.node_access[:acn][context.dest_node.acn].
65
- select {|n| n.alcn != context.dest_node.alcn}.each do |node|
66
- context.dest_node.node_info[:used_meta_info_nodes] << node.alcn
67
- result += "\n<link type=\"text/html\" rel=\"alternate\" hreflang=\"#{node.lang}\" "
68
- result += "href=\"#{context.dest_node.route_to(node)}\" "
69
- if node['title'] && !node['title'].empty?
70
- result += "lang=\"#{node.lang}\" title=\"#{ERB::Util.h(node['title'])}\" "
71
- end
72
- result += "/>"
73
- end
74
-
75
- link = Marshal.load(Marshal.dump(context.node['link'] || {}))
76
-
77
- handle_files = lambda do |files|
78
- [files].flatten.compact.collect do |file|
79
- if !Webgen::Node.url(file, false).absolute?
80
- file = context.node.resolve(file, context.dest_node.lang)
81
- if file
82
- context.dest_node.node_info[:used_meta_info_nodes] << file.alcn
83
- file = context.dest_node.route_to(file)
84
- else
85
- log(:error) { "Could not resolve path '#{file}' used in 'link' meta information in <#{context.node}>" }
86
- context.dest_node.flag(:dirty)
87
- end
88
- end
89
- file
90
- end.compact
91
- end
92
-
93
- # Add user defined javascript and CSS links
94
- handle_files.call(link.delete('javascript')).each do |file|
95
- result += "\n<script type=\"text/javascript\" src=\"#{file}\"></script>"
96
- end
97
- handle_files.call(link.delete('css')).each do |file|
98
- result += "\n<link rel=\"stylesheet\" href=\"#{file}\" type=\"text/css\" />"
99
- end
100
-
101
- # add generic links specified via the +link+ meta information
102
- link.sort.each do |link_type, vals|
103
- link_type = link_type.downcase
104
- [vals].flatten.each do |val|
105
- val = {'href' => val} if val.kind_of?(String)
106
- val['rel'] ||= link_type
107
- val = LINK_DOCUMENT_ATTRS.merge(val) if LINK_DOCUMENT_TYPES.include?(link_type)
108
- if href = val.delete('href')
109
- href = handle_files.call(href).first
110
- else
111
- log(:error) { "No link target specified for link type '#{link_type}' in 'link' meta information in <#{context.node}>" }
112
- end
113
- if href
114
- s = "\n<link href=\"#{href}\" "
115
- val.sort.each {|k,v| s += "#{k}=\"#{ERB::Util.h(v)}\" "}
116
- result += s + "/>"
117
- end
118
- end
119
- end
120
-
121
- result + match
122
- end
123
- context
124
- end
125
-
126
- end
127
-
128
- end
@@ -1,27 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- module Webgen::ContentProcessor
4
-
5
- # Processes content in kramdown format (based on Markdown) using the +kramdown+ library.
6
- class Kramdown
7
-
8
- include Webgen::Loggable
9
-
10
- # Convert the content in +context+ to HTML.
11
- def call(context)
12
- require 'kramdown'
13
- require 'webgen/contentprocessor/kramdown/html'
14
- doc = ::Kramdown::Document.new(context.content,
15
- context.website.config['contentprocessor.kramdown.options'].merge(context.options['contentprocessor.kramdown.options'] || {}))
16
- context.content = KramdownHtmlConverter.convert(doc.root, doc.options, context)
17
- doc.warnings.each do |warn|
18
- log(:warn) { "Warning while parsing <#{context.ref_node}> with kramdown: #{warn}" }
19
- end
20
- context
21
- rescue LoadError
22
- raise Webgen::LoadError.new('kramdown', self.class.name, context.dest_node, 'kramdown')
23
- end
24
-
25
- end
26
-
27
- end
@@ -1,36 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require 'kramdown'
4
-
5
- module Webgen::ContentProcessor
6
-
7
- class KramdownHtmlConverter < ::Kramdown::Converter::Html
8
-
9
- def initialize(root, options, context) #:nodoc:
10
- super(root, options)
11
- @context = context
12
- @do_convert = if context.options.has_key?('contentprocessor.kramdown.handle_links')
13
- context.options['contentprocessor.kramdown.handle_links']
14
- else
15
- context.website.config['contentprocessor.kramdown.handle_links']
16
- end
17
- end
18
-
19
- # Convert the element tree under +root+ to HTML using the webgen +context+ object.
20
- def self.convert(root, options, context)
21
- new(root, options, context).convert(root)
22
- end
23
-
24
- def convert_a(el, indent)
25
- el.attr['href'] = @context.tag('relocatable', {'path' => el.attr['href']}) if @do_convert
26
- "<a#{html_attributes(el.attr)}>#{inner(el, indent)}</a>"
27
- end
28
-
29
- def convert_img(el, indent)
30
- el.attr['src'] = @context.tag('relocatable', {'path' => el.attr['src']}) if @do_convert
31
- "<img#{html_attributes(el.attr)} />"
32
- end
33
-
34
- end
35
-
36
- end
@@ -1,35 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- module Webgen::ContentProcessor
4
-
5
- # Generates valid CSS from CSS-like input, supporting variables, nesting and mixins.
6
- class Less
7
-
8
- include Webgen::Loggable
9
-
10
- # Convert the content in +context+ to valid CSS.
11
- def call(context)
12
- require 'less'
13
- context.content = ::Less.parse(context.content)
14
- context
15
- rescue LoadError
16
- raise Webgen::LoadError.new('less', self.class.name, context.dest_node, 'less')
17
- rescue ::Less::SyntaxError => e
18
- line = e.message.scan(/on line (\d+):/).first.first.to_i rescue nil
19
- raise Webgen::RenderError.new(e, self.class.name, context.dest_node, context.ref_node, line)
20
- rescue ::Less::MixedUnitsError => e
21
- raise Webgen::RenderError.new("Can't mix different units together: #{e}",
22
- self.class.name, context.dest_node, context.ref_node)
23
- rescue ::Less::VariableNameError => e
24
- raise Webgen::RenderError.new("Variable name is undefined: #{e}",
25
- self.class.name, context.dest_node, context.ref_node)
26
- rescue ::Less::MixinNameError => e
27
- raise Webgen::RenderError.new("Mixin name is undefined: #{e}",
28
- self.class.name, context.dest_node, context.ref_node)
29
- rescue ::Less::ImportError => e
30
- raise Webgen::RenderError.new(e, self.class.name, context.dest_node, context.ref_node)
31
- end
32
-
33
- end
34
-
35
- end
@@ -1,36 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require 'rexml/parsers/baseparser'
4
-
5
- class REXML::Parsers::BaseParser
6
-
7
- alias :"old_stream=" :"stream="
8
-
9
- def stream=(source)
10
- self.old_stream=(source)
11
- @nsstack << Set.new(['webgen'])
12
- end
13
-
14
- end
15
-
16
-
17
- module Webgen::ContentProcessor
18
-
19
- # Processes content in Markdown format using the +maruku+ library.
20
- class Maruku
21
-
22
- # Convert the content in +context+ to HTML.
23
- def call(context)
24
- require 'maruku'
25
- $uid = 0 #fix for invalid fragment ids on second run
26
- context.content = ::Maruku.new(context.content, :on_error => :raise).to_html
27
- context
28
- rescue LoadError
29
- raise Webgen::LoadError.new('maruku', self.class.name, context.dest_node, 'maruku')
30
- rescue Exception => e
31
- raise Webgen::RenderError.new(e, self.class.name, context.dest_node, context.ref_node)
32
- end
33
-
34
- end
35
-
36
- end
@@ -1,19 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- module Webgen::ContentProcessor
4
-
5
- # Processes content in Markdown markup with the fast +rdiscount+ library.
6
- class RDiscount
7
-
8
- # Convert the content in +context+ to HTML.
9
- def call(context)
10
- require 'rdiscount'
11
- context.content = ::RDiscount.new(context.content).to_html
12
- context
13
- rescue LoadError
14
- raise Webgen::LoadError.new('rdiscount', self.class.name, context.dest_node, 'rdiscount')
15
- end
16
-
17
- end
18
-
19
- end
@@ -1,20 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- module Webgen::ContentProcessor
4
-
5
- # Converts content in RDoc markup (the native Ruby documentation format) to HTML. Needs the newer
6
- # RDoc implementation provided as +rdoc+ gem!
7
- class RDoc
8
-
9
- # Convert the content in RDoc markup to HTML.
10
- def call(context)
11
- require 'rdoc/markup/to_html'
12
- context.content = ::RDoc::Markup::ToHtml.new.convert(context.content)
13
- context
14
- rescue LoadError
15
- raise Webgen::LoadError.new('rdoc/markup/to_html', self.class.name, context.dest_node, 'rdoc')
16
- end
17
-
18
- end
19
-
20
- end
@@ -1,21 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- module Webgen::ContentProcessor
4
-
5
- # Processes content in Textile format using the +redcloth+ library.
6
- class RedCloth
7
-
8
- # Convert the content in +context+ to HTML.
9
- def call(context)
10
- require 'redcloth'
11
- doc = ::RedCloth.new(context.content)
12
- doc.hard_breaks = context.website.config['contentprocessor.redcloth.hard_breaks']
13
- context.content = doc.to_html
14
- context
15
- rescue LoadError
16
- raise Webgen::LoadError.new('redcloth', self.class.name, context.dest_node, 'RedCloth')
17
- end
18
-
19
- end
20
-
21
- end
@@ -1,22 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- module Webgen::ContentProcessor
4
-
5
- # Processes content in Sass markup (used for writing CSS files) using the +haml+ library.
6
- class Sass
7
-
8
- # Convert the content in +sass+ markup to CSS.
9
- def call(context)
10
- require 'sass'
11
-
12
- context.content = ::Sass::Engine.new(context.content, :filename => context.ref_node.alcn).render
13
- context
14
- rescue LoadError
15
- raise Webgen::LoadError.new('sass', self.class.name, context.dest_node, 'haml')
16
- rescue ::Sass::SyntaxError => e
17
- raise Webgen::RenderError.new(e, self.class.name, context.dest_node, context.ref_node, (e.sass_line if e.sass_line))
18
- end
19
-
20
- end
21
-
22
- end
@@ -1,22 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- module Webgen::ContentProcessor
4
-
5
- # Processes content in sassy CSS markup (used for writing CSS files) using the +haml+ library.
6
- class Scss
7
-
8
- # Convert the content in +scss+ markup to CSS.
9
- def call(context)
10
- require 'sass'
11
-
12
- context.content = ::Sass::Engine.new(context.content, :filename => context.ref_node.alcn, :syntax => :scss).render
13
- context
14
- rescue LoadError
15
- raise Webgen::LoadError.new('sass', self.class.name, context.dest_node, 'haml')
16
- rescue ::Sass::SyntaxError => e
17
- raise Webgen::RenderError.new(e, self.class.name, context.dest_node, context.ref_node, (e.sass_line if e.sass_line))
18
- end
19
-
20
- end
21
-
22
- end
@@ -1,170 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require 'yaml'
4
- require 'strscan'
5
- require 'webgen/tag'
6
-
7
- module Webgen::ContentProcessor
8
-
9
- # Processes special webgen tags to provide dynamic content.
10
- #
11
- # webgen tags are an easy way to add dynamically generated content to websites, for example menus
12
- # or breadcrumb trails.
13
- class Tags
14
-
15
- include Webgen::WebsiteAccess
16
- include Webgen::Loggable
17
-
18
- def initialize #:nodoc:
19
- @start_re = /(\\*)\{#{website.config['contentprocessor.tags.prefix']}(\w+)(::?)/
20
- @end_re = /(\\*)\{#{website.config['contentprocessor.tags.prefix']}(\w+)\}/
21
- end
22
-
23
- # Replace all webgen tags in the content of +context+ with the rendered content.
24
- def call(context)
25
- replace_tags(context) do |tag, param_string, body|
26
- log(:debug) { "Replacing tag #{tag} with data '#{param_string}' and body '#{body}' in <#{context.ref_node}>" }
27
- process_tag(tag, param_string, body, context)
28
- end
29
- context
30
- end
31
-
32
- # Process the +tag+ and return the result. The parameter +params+ needs to be a Hash holding all
33
- # needed and optional parameters for the tag or a parameter String in YAML format and +body+ is
34
- # the optional body for the tag. +context+ needs to be a valid Webgen::Context object.
35
- def process_tag(tag, params, body, context)
36
- result = ''
37
- processor = processor_for_tag(tag)
38
- if !processor.nil?
39
- params = if params.kind_of?(String)
40
- processor.create_tag_params(params, context.ref_node)
41
- else
42
- processor.create_params_hash(params, context.ref_node)
43
- end
44
-
45
- processor.set_params(params)
46
- result, process_output = processor.call(tag, body, context)
47
- processor.set_params(nil)
48
- result = call(context.clone(:content => result)).content if process_output
49
- else
50
- raise Webgen::RenderError.new("No tag processor for '#{tag}' found", self.class.name,
51
- context.dest_node, context.ref_node)
52
- end
53
- result
54
- end
55
-
56
-
57
- #######
58
- private
59
- #######
60
-
61
- BRACKETS_RE = /([{}])/
62
- ProcessingStruct = Struct.new(:state, :tag, :simple_tag, :backslashes, :brackets, :start_pos, :end_pos,
63
- :params_start_pos, :params_end_pos, :body_end_pos)
64
-
65
- # Return the <tt>context.content</tt> provided by <tt>context.ref_node</tt> with all webgen tags
66
- # replaced. When a webgen tag is encountered by the parser, the method yields all found
67
- # information and substitutes the returned string for the tag.
68
- def replace_tags(context) #:yields: tag_name, param_string, body
69
- scanner = StringScanner.new(context.content)
70
- data = ProcessingStruct.new(:before_tag)
71
- while true
72
- case data.state
73
- when :before_tag
74
- if scanner.skip_until(@start_re)
75
- data.state = :in_start_tag
76
- data.backslashes = scanner[1].length
77
- data.brackets = 1
78
- data.tag = scanner[2]
79
- data.simple_tag = (scanner[3] == ':')
80
- data.params_start_pos = scanner.pos
81
- data.start_pos = scanner.pos - scanner.matched.length
82
- else
83
- data.state = :done
84
- end
85
-
86
- when :in_start_tag
87
- data.brackets += (scanner[1] == '{' ? 1 : -1) while data.brackets != 0 && scanner.skip_until(BRACKETS_RE)
88
- if data.brackets != 0
89
- raise Webgen::RenderError.new("Unbalanced curly brackets for tag '#{data.tag}'", self.class.name,
90
- context.dest_node, context.ref_node)
91
- else
92
- data.params_end_pos = data.body_end_pos = data.end_pos = scanner.pos - 1
93
- data.state = (data.simple_tag ? :process : :in_body)
94
- end
95
-
96
- when :process
97
- if RUBY_VERSION >= '1.9'
98
- begin
99
- enc = scanner.string.encoding
100
- scanner.string.force_encoding('ASCII-8BIT')
101
- if data.backslashes % 2 == 0
102
- result = yield(data.tag, scanner.string[data.params_start_pos...data.params_end_pos].force_encoding(enc),
103
- scanner.string[(data.params_end_pos+1)...data.body_end_pos].to_s.force_encoding(enc)).to_s
104
- scanner.string[data.start_pos..data.end_pos] = "\\" * (data.backslashes / 2) + result.force_encoding('ASCII-8BIT')
105
- scanner.pos = data.start_pos + result.length
106
- else
107
- scanner.string[data.start_pos, 1 + data.backslashes / 2] = ''
108
- scanner.pos -= 1 + data.backslashes / 2
109
- end
110
- ensure
111
- scanner.string.force_encoding(enc) if RUBY_VERSION >= '1.9'
112
- end
113
- else
114
- if data.backslashes % 2 == 0
115
- result = yield(data.tag, scanner.string[data.params_start_pos...data.params_end_pos],
116
- scanner.string[(data.params_end_pos+1)...data.body_end_pos]).to_s
117
- scanner.string[data.start_pos..data.end_pos] = "\\" * (data.backslashes / 2) + result
118
- scanner.pos = data.start_pos + result.length
119
- else
120
- scanner.string[data.start_pos, 1 + data.backslashes / 2] = ''
121
- scanner.pos -= 1 + data.backslashes / 2
122
- end
123
- end
124
- data.state = :before_tag
125
-
126
- when :in_body
127
- while (result = scanner.skip_until(@end_re))
128
- next unless scanner[2] == data.tag
129
- if scanner[1].length % 2 == 1
130
- scanner.string[(scanner.pos - scanner.matched.length), 1 + scanner[1].length / 2] = ''
131
- scanner.pos -= 1 + scanner[1].length / 2
132
- else
133
- break
134
- end
135
- end
136
- if result
137
- data.state = :process
138
- data.end_pos = scanner.pos - 1
139
- data.body_end_pos = scanner.pos - scanner.matched.length + scanner[1].length / 2
140
- else
141
- raise Webgen::RenderError.new("Invalid body part - no end tag found for '#{data.tag}'", self.class.name,
142
- context.dest_node, context.ref_node)
143
- end
144
-
145
- when :done
146
- break
147
- end
148
- end
149
- scanner.string
150
- rescue Webgen::RenderError => e
151
- e.line = scanner.string[0...scanner.pos].scan("\n").size + 1 unless e.line
152
- raise
153
- end
154
-
155
- # Return the tag processor for +tag+ or +nil+ if +tag+ is unknown.
156
- def processor_for_tag(tag)
157
- map = website.config['contentprocessor.tags.map']
158
- klass = if map.has_key?(tag)
159
- map[tag]
160
- elsif map.has_key?(:default)
161
- map[:default]
162
- else
163
- nil
164
- end
165
- klass.nil? ? nil : website.cache.instance(klass)
166
- end
167
-
168
- end
169
-
170
- end