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,170 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require 'yaml'
4
- require 'webgen/loggable'
5
- require 'webgen/websiteaccess'
6
-
7
- # This module should be mixed into any class that wants to serve as a webgen tag class. Have a look
8
- # a the example below to see how a basic tag class looks like.
9
- #
10
- # == Tag classes
11
- #
12
- # A tag class is a webgen extension that handles specific webgen tags. webgen tags are used to add
13
- # dynamic content to page and template files and are made for ease of use.
14
- #
15
- # A tag class can handle multiple different tags. Just add a (tag name)-(class name) pair to the
16
- # <tt>contentprocessor.tags.map</tt> configuration entry for each tag name you want to associate
17
- # with the tag class. The special name <tt>:default</tt> is used for the default tag class which is
18
- # called if a tag with an unknown tag name is encountered.
19
- #
20
- # The only method needed to be written is +call+ which is called by the tags content processor to
21
- # the actual processing. And the +initialize+ method must not take any parameters!
22
- #
23
- # Tag classes *can* also choose to not use this module. If they don't use it they have to provide
24
- # the following methods: +set_params+, +create_tag_params+, +create_params_hash+, +call+.
25
- #
26
- # == Tag parameters
27
- #
28
- # webgen tags allow the specification of parameters in the tag definition. The method
29
- # +tag_params_list+ returns all configuration entries that can be set this way. And the method
30
- # +tag_config_base+ is used to resolve partially stated configuration entries. The default method
31
- # uses the full class name, strips a <tt>Webgen::</tt> part at the beginning away, substitutes
32
- # <tt>.</tt> for <tt>::</tt> and makes everything lowercase.
33
- #
34
- # An additional configuration entry option is also used: <tt>:mandatory</tt>. If this key is set to
35
- # +true+ for a configuration entry, the entry counts as mandatory and needs to be set in the tag
36
- # definition. If this key is set to +default+, this means that this entry should be the default
37
- # mandatory parameter (used when only a string is provided in the tag definition). There *should* be
38
- # only one default mandatory parameter.
39
- #
40
- # == Sample Tag Class
41
- #
42
- # Following is a simple tag class example which just reverses the body text and adds some
43
- # information about the context to the result. Note that the class does not reside in the
44
- # Webgen::Tag namespace and that the configuration entry is therefore also not under the
45
- # <tt>tag.</tt> namespace.
46
- #
47
- # class Reverser
48
- #
49
- # include Webgen::Tag::Base
50
- #
51
- # def call(tag, body, context)
52
- # result = param('do_reverse') ? body.reverse : body
53
- # result += "Node: " + context.content_node.alcn + " (" + context.content_node['title'] + ")"
54
- # result += "Reference node: " + context.ref_node.alcn
55
- # result
56
- # end
57
- #
58
- # end
59
- #
60
- # WebsiteAccess.website.config.reverser.do_reverse nil, :mandatory => 'default'
61
- # WebsiteAccess.website.config['contentprocessor.tags.map']['reverse'] = 'Reverser'
62
- #
63
- module Webgen::Tag::Base
64
-
65
- include Webgen::Loggable
66
- include Webgen::WebsiteAccess
67
-
68
- # Create a hash with parameter values extracted from the string +tag_config+ and return it.
69
- def create_tag_params(tag_config, ref_node)
70
- begin
71
- config = YAML::load("--- #{tag_config}")
72
- rescue ArgumentError => e
73
- raise Webgen::RenderError.new("Could not parse the tag params '#{tag_config}': #{e.message}",
74
- self.class.name, nil, ref_node)
75
- end
76
- create_params_hash(config, ref_node)
77
- end
78
-
79
- # Create and return the parameter hash from +config+ which needs to be a Hash, a String or +nil+.
80
- def create_params_hash(config, node)
81
- params = tag_params_list
82
- result = case config
83
- when Hash then create_from_hash(config, params, node)
84
- when String then create_from_string(config, params, node)
85
- when NilClass then {}
86
- else
87
- raise Webgen::RenderError.new("Invalid parameter type (#{config.class})",
88
- self.class.name, nil, node)
89
- end
90
-
91
- unless params.all? {|k| !website.config.meta_info[k][:mandatory] || result.has_key?(k)}
92
- raise Webgen::RenderError.new("Not all mandatory parameters set", self.class.name, nil, node)
93
- end
94
-
95
- result
96
- end
97
-
98
- # Set the current parameter configuration to +params+.
99
- def set_params(params)
100
- @params = params
101
- end
102
-
103
- # Retrieve the parameter value for +name+. The value is taken from the current parameter
104
- # configuration if the parameter is specified there or from the website configuration otherwise.
105
- def param(name)
106
- (defined?(@params) && @params.has_key?(name) ? @params[name] : website.config[name])
107
- end
108
-
109
- # Default implementation for processing a tag. The parameter +tag+ specifies the name of the tag
110
- # which should be processed (useful for tag classes which process different tags).
111
- #
112
- # The parameter +body+ holds the optional body value for the tag.
113
- #
114
- # The +context+ parameter holds all relevant information for processing. Have a look at the
115
- # Webgen::Context class to see what is available.
116
- #
117
- # The method has to return the result of the tag processing and, optionally, a boolean value
118
- # specifying if the result should further be processed (ie. webgen tags replaced).
119
- #
120
- # Needs to be redefined by classes that mixin this module!
121
- def call(tag, body, context)
122
- raise NotImplementedError
123
- end
124
-
125
- #######
126
- private
127
- #######
128
-
129
- # The base part of the configuration name. This isthe class name without the Webgen module
130
- # downcased and all "::" substituted with "." (e.g. Webgen::Tag::Menu -> tag.menu). By overriding
131
- # this method one can provide a different way of specifying the base part of the configuration
132
- # name.
133
- def tag_config_base
134
- self.class.name.gsub('::', '.').gsub(/^Webgen\./, '').downcase
135
- end
136
-
137
- # Return the list of all parameters for the tag class. All configuration options starting with
138
- # +tag_config_base+ are used.
139
- def tag_params_list
140
- regexp = /^#{tag_config_base}/
141
- website.config.data.keys.select {|key| key =~ regexp}
142
- end
143
-
144
- # Return a valid parameter hash taking values from +config+ which has to be a Hash.
145
- def create_from_hash(config, params, node)
146
- result = {}
147
- config.each do |key, value|
148
- if params.include?(key)
149
- result[key] = value
150
- elsif params.include?(tag_config_base + '.' + key)
151
- result[tag_config_base + '.' + key] = value
152
- else
153
- log(:warn) { "Invalid parameter '#{key}' for tag '#{self.class.name}' in <#{node}>" }
154
- end
155
- end
156
- result
157
- end
158
-
159
- # Return a valid parameter hash by setting +value+ to the default mandatory parameter.
160
- def create_from_string(value, params, node)
161
- param_name = params.find {|k| website.config.meta_info[k][:mandatory] == 'default'}
162
- if param_name.nil?
163
- log(:error) { "No default mandatory parameter specified for tag '#{self.class.name}' but set in <#{node}>"}
164
- {}
165
- else
166
- {param_name => value}
167
- end
168
- end
169
-
170
- end
@@ -1,70 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- module Webgen::Tag
4
-
5
- # Generates a breadcrumb trail for the page. This is especially useful when pages are in deep
6
- # hierarchies of directories.
7
- class BreadcrumbTrail
8
-
9
- include Webgen::WebsiteAccess
10
- include Base
11
-
12
- def initialize #:nodoc:
13
- website.blackboard.add_listener(:node_changed?, method(:node_changed?))
14
- end
15
-
16
- # Create the breadcrumb trail.
17
- def call(tag, body, context)
18
- out = breadcrumb_trail_list(context.content_node)
19
- (context.dest_node.node_info[:tag_breadcrumb_trail] ||= {})[[@params.to_a.sort, context.content_node.alcn]] = out.map {|n| n.alcn}
20
- out = out.map {|n| context.dest_node.link_to(n, :lang => context.content_node.lang) }.
21
- join(param('tag.breadcrumbtrail.separator'))
22
- log(:debug) { "Breadcrumb trail for <#{context.content_node}>: #{out}" }
23
- out
24
- end
25
-
26
- #######
27
- private
28
- #######
29
-
30
- # Return the list of nodes that make up the breadcrumb trail of +node+ according to the current
31
- # parameters.
32
- def breadcrumb_trail_list(node)
33
- list = []
34
- omit_index_path = if node.meta_info.has_key?('omit_index_path')
35
- node['omit_index_path']
36
- else
37
- param('tag.breadcrumbtrail.omit_index_path')
38
- end
39
- omit_index_path = omit_index_path && node.parent.routing_node(node.lang) == node
40
-
41
- node = node.parent if omit_index_path
42
-
43
- until node == node.tree.dummy_root
44
- list.unshift(node)
45
- node = node.parent
46
- end
47
- list[param('tag.breadcrumbtrail.start_level')..param('tag.breadcrumbtrail.end_level')].to_a
48
- end
49
-
50
- # Check if the breadcrumb trails for +node+ have changed.
51
- def node_changed?(node)
52
- return if !node.node_info[:tag_breadcrumb_trail]
53
-
54
- node.node_info[:tag_breadcrumb_trail].each do |(params, cn_alcn), cached_list|
55
- cn = node.tree[cn_alcn]
56
- set_params(params.to_hash)
57
- list = breadcrumb_trail_list(cn)
58
- set_params({})
59
-
60
- if (list.map {|n| n.alcn} != cached_list) ||
61
- list.any? {|n| (r = n.routing_node(cn.lang)) && r != node && r.meta_info_changed?}
62
- node.flag(:dirty)
63
- break
64
- end
65
- end
66
- end
67
-
68
- end
69
-
70
- end
@@ -1,31 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require 'cgi'
4
- require 'tempfile'
5
- require 'rbconfig'
6
-
7
- module Webgen::Tag
8
-
9
- # Executes the given command and returns the standard output. All special HTML characters are
10
- # escaped.
11
- class ExecuteCommand
12
-
13
- include Webgen::Tag::Base
14
-
15
- BIT_BUCKET = (Config::CONFIG['host_os'] =~ /mswin|mingw/ ? "nul" : "/dev/null")
16
-
17
- # Execute the command and return the standard output.
18
- def call(tag, body, context)
19
- command = param('tag.executecommand.command')
20
- output = `#{command} 2> #{BIT_BUCKET}`
21
- if $?.exitstatus != 0
22
- raise Webgen::RenderError.new("Command '#{command}' has return value != 0: #{output}",
23
- self.class.name, context.dest_node, context.ref_node)
24
- end
25
- output = CGI::escapeHTML(output) if param('tag.executecommand.escape_html')
26
- [output, param('tag.executecommand.process_output')]
27
- end
28
-
29
- end
30
-
31
- end
@@ -1,42 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require 'cgi'
4
-
5
- module Webgen::Tag
6
-
7
- # Includes a file verbatim and optionally escapes all special HTML characters and processes webgen
8
- # tags in it.
9
- class IncludeFile
10
-
11
- include Webgen::Tag::Base
12
- include Webgen::WebsiteAccess
13
-
14
- def initialize #:nodoc:
15
- website.blackboard.add_listener(:node_changed?, method(:node_changed?))
16
- end
17
-
18
- # Include the specified file verbatim in the output, optionally escaping special HTML characters
19
- # and processing tags in it.
20
- def call(tag, body, context)
21
- filename = param('tag.includefile.filename')
22
- filename = File.join(website.directory, filename) unless filename =~ /^(\/|\w:)/
23
- content = File.open(filename, 'rb') {|f| f.read}
24
- content = CGI::escapeHTML(content) if param('tag.includefile.escape_html')
25
- (context.dest_node.node_info[:tag_includefile_filenames] ||= []) << [filename, File.mtime(filename)]
26
-
27
- [content, param('tag.includefile.process_output')]
28
- end
29
-
30
- #######
31
- private
32
- #######
33
-
34
- def node_changed?(node)
35
- if filenames = node.node_info[:tag_includefile_filenames]
36
- node.flag(:dirty) if filenames.any? {|f, mtime| File.mtime(f) > mtime}
37
- end
38
- end
39
-
40
- end
41
-
42
- end
@@ -1,27 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require 'cgi'
3
-
4
- module Webgen::Tag
5
-
6
- # Provides easy access to the meta information of a node.
7
- class Metainfo
8
-
9
- include Base
10
-
11
- # Return the meta information key specified in +tag+ of the content node.
12
- def call(tag, body, context)
13
- output = ''
14
- if tag == 'lang'
15
- output = context.content_node.lang
16
- elsif context.content_node[tag]
17
- output = context.content_node[tag].to_s
18
- output = CGI::escapeHTML(output) if param('tag.metainfo.escape_html')
19
- else
20
- log(:error) { "No value for meta info key '#{tag}' in <#{context.ref_node}> found in <#{context.content_node}>" }
21
- end
22
- output
23
- end
24
-
25
- end
26
-
27
- end
@@ -1,41 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- module Webgen::Tag
4
-
5
- # Generates a sitemap. The sitemap contains the hierarchy of all pages on the web site.
6
- class Sitemap
7
-
8
- include Base
9
- include Webgen::WebsiteAccess
10
-
11
- # Create the sitemap.
12
- def call(tag, body, context)
13
- tree = website.blackboard.invoke(:create_sitemap, context.dest_node, context.content_node.lang, @params)
14
- (tree.children.empty? ? '' : output_sitemap(tree, context))
15
- end
16
-
17
- #######
18
- private
19
- #######
20
-
21
- # The modified tag base to support the easy specification of common.sitemap.* options.
22
- def tag_config_base
23
- 'common.sitemap'
24
- end
25
-
26
- # Create the HTML representation of the sitemap nodes in +tree+ in respect to +context+.
27
- def output_sitemap(tree, context)
28
- out = "<ul>"
29
- tree.children.each do |child|
30
- sub = (child.children.length > 0 ? output_sitemap(child, context) : '')
31
- out << "<li>" + context.dest_node.link_to(child.node, :lang => child.node.lang || context.content_node.lang)
32
- out << sub
33
- out << "</li>"
34
- end
35
- out << "</ul>"
36
- out
37
- end
38
-
39
- end
40
-
41
- end
@@ -1,31 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- module Webgen
4
-
5
- # Should be mixed into modules/classes that need access to the current website object.
6
- module WebsiteAccess
7
-
8
- # The methods of this module are available on classes that include WebsiteAccess.
9
- module ClassMethods
10
-
11
- # See WebsiteAccess.website
12
- def website
13
- WebsiteAccess.website
14
- end
15
-
16
- end
17
-
18
- def self.included(klass) #:nodoc:
19
- super
20
- klass.extend(ClassMethods)
21
- end
22
-
23
- # Return the current website object or +nil+.
24
- def website
25
- Thread.current[:webgen_website]
26
- end
27
- module_function :website
28
-
29
- end
30
-
31
- end
@@ -1,125 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require 'ostruct'
4
- require 'fileutils'
5
- require 'webgen/website'
6
-
7
- module Webgen
8
-
9
- # This class is used for managing webgen websites. It provides access to website bundles defined
10
- # as resources and makes it easy to apply them to a webgen website.
11
- #
12
- # == General information
13
- #
14
- # Currently, the following actions are supported:
15
- #
16
- # * creating a website based on a website bundle (#create_website)
17
- # * applying a bundle to an existing website (#apply_bundle)
18
- #
19
- # Bundles are partial webgen websites that contain certain functionality. For example, most of the
20
- # bundles shipped with webgen are style bundles that define the basic page layout or how image
21
- # galleries should look like. So style bundles are basically used to change the appearance of
22
- # parts (or the whole) website. This makes them a powerful tool as this plugin makes it easy to
23
- # change to another style bundle later!
24
- #
25
- # However, not all bundles have to be style bundles. For example, you could as easily create a
26
- # bundle for a plugin or for a complete website (e.g. a blog template).
27
- #
28
- # == website bundle resource naming convention
29
- #
30
- # The shipped bundles are defined using resources. Each such resource has to be a directory
31
- # containing an optional README file in YAML format in which key-value pairs provide additional
32
- # information about the bundle (e.g. copyright information, description, ...). All other
33
- # files/directories in the directory are copied to the root of the destination webgen website when
34
- # the bundle is used.
35
- #
36
- # This class uses a special naming convention to recognize website bundles:
37
- #
38
- # * A resource named <tt>webgen-website-bundle-CATEGORY-NAME</tt> is considered to be a bundle in
39
- # the category CATEGORY called NAME (where CATEGORY is optional). There are no fixed categories,
40
- # one can use anything here! The shipped style bundles are located in the 'style' category. You
41
- # need to use the the full name, i.e. CATEGORY-NAME, for accessing a bundle later.
42
- #
43
- # Website bundle names have to be unique!
44
- class WebsiteManager
45
-
46
- # A hash with the available website bundles (mapping name to infos).
47
- attr_reader :bundles
48
-
49
- # The used Website object.
50
- attr_reader :website
51
-
52
- # Create a new WebsiteManager.
53
- #
54
- # If +dir+ is a String, then the website manager is created for the website in the directory
55
- # +dir+.
56
- #
57
- # If +dir+ is a Website object, the website manager is created for the website represented by
58
- # +dir+. If the website object is initialized if it isn't already.
59
- def initialize(dir)
60
- if dir.kind_of?(Webgen::Website)
61
- @website = dir
62
- @website.init if @website.config.nil?
63
- else
64
- @website = Webgen::Website.new(dir)
65
- @website.init
66
- end
67
- @bundles = {}
68
-
69
- @website.execute_in_env do
70
- prefix = "webgen-website-bundle-"
71
- @website.config['resources'].select {|name, data| name =~ /^#{prefix}/}.each do |name, data|
72
- add_source(Webgen::Source::Resource.new(name), name.sub(prefix, ''))
73
- end
74
- end
75
- end
76
-
77
- # Treat the +source+ as a website bundle and make it available to the WebsiteManager under
78
- # +name+.
79
- def add_source(source, name)
80
- paths = source.paths.dup
81
- readme = paths.select {|path| path == '/README' }.first
82
- paths.delete(readme) if readme
83
- infos = OpenStruct.new(readme.nil? ? {} : YAML::load(readme.io.data))
84
- infos.paths = paths
85
- @bundles[name] = infos
86
- end
87
-
88
- # Create the basic website skeleton (without any bundle applied).
89
- def create_website
90
- raise "Directory <#{@website.directory}> does already exist!" if File.exists?(@website.directory)
91
- @website.execute_in_env do
92
- write_paths(Webgen::Source::Resource.new('webgen-website-skeleton').paths) +
93
- [FileUtils.mkdir_p(File.join(@website.directory, 'src'))] # fixes Rubygems bug (see RF#28393)
94
- end
95
- end
96
-
97
- # Apply the given +bundle+ to the website by copying the files.
98
- def apply_bundle(bundle)
99
- raise ArgumentError.new("Invalid bundle name") if !@bundles.has_key?(bundle)
100
- raise "Directory <#{@website.directory}> does not exist!" unless File.exists?(@website.directory)
101
- write_paths(@bundles[bundle].paths)
102
- end
103
-
104
- #######
105
- private
106
- #######
107
-
108
- # Write the paths to the website directory.
109
- def write_paths(paths)
110
- paths.each do |path|
111
- output_path = File.join(@website.directory, path.path)
112
- if path.path =~ /\/$/
113
- FileUtils.mkdir_p(output_path)
114
- else
115
- FileUtils.mkdir_p(File.dirname(output_path))
116
- path.io.stream do |source|
117
- File.open(output_path, 'wb') {|f| FileUtils.copy_stream(source, f) }
118
- end
119
- end
120
- end
121
- end
122
-
123
- end
124
-
125
- end