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
@@ -0,0 +1,85 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'uri'
4
+ require 'yaml'
5
+ require 'webgen/path_handler/base'
6
+ require 'webgen/path_handler/page_utils'
7
+
8
+ module Webgen
9
+ class PathHandler
10
+
11
+ # Handles files which contain specifications for "virtual" nodes, ie. nodes that don't have real
12
+ # source paths.
13
+ #
14
+ # This can be used, for example, to provide multiple links to the same node or links to external
15
+ # URLs.
16
+ class Virtual
17
+
18
+ include Base
19
+ include PageUtils
20
+
21
+ # Create all virtual nodes which are specified in +path+.
22
+ def create_nodes(path, blocks)
23
+ nodes = []
24
+ if path.meta_info.delete(:virtual)
25
+ nodes << create_node(path)
26
+ else
27
+ read_entries(blocks) do |key, meta_info|
28
+ meta_info['modified_at'] = path.meta_info['modified_at']
29
+ meta_info['no_output'] = true
30
+
31
+ key = Webgen::Path.append(path.parent_path, key)
32
+ parent_path = create_directories(File.dirname(key), 'modified_at' => meta_info['modified_at'])
33
+
34
+ dest_path = meta_info.delete('dest_path') || key
35
+ dest_path = (URI::parse(dest_path).absolute? || dest_path =~ /^\// ?
36
+ dest_path : File.join(parent_path, dest_path))
37
+ meta_info['dest_path'] = dest_path
38
+ entry_path = Webgen::Path.new(key, meta_info)
39
+
40
+ if key =~ /\/$/
41
+ entry_path['handler'] = 'directory'
42
+ nodes << @website.ext.path_handler.create_secondary_nodes(entry_path)
43
+ else
44
+ entry_path[:virtual] = true
45
+ entry_path['handler'] = 'virtual'
46
+ nodes << @website.ext.path_handler.create_secondary_nodes(entry_path)
47
+ end
48
+ end
49
+ end
50
+ nodes.flatten.compact.each do |node|
51
+ node.node_info[:path] = path
52
+ end
53
+ end
54
+
55
+ #######
56
+ private
57
+ #######
58
+
59
+ # Read all entries from all blocks and yield the found path as well as the meta info hash for
60
+ # each entry.
61
+ def read_entries(blocks)
62
+ blocks.each do |name, content|
63
+ YAML::load(content).each do |key, meta_info|
64
+ yield(key, meta_info || {})
65
+ end
66
+ end
67
+ end
68
+
69
+ # Create the needed parent directories for a virtual node.
70
+ def create_directories(directory, mi)
71
+ mi.merge!('no_output' => true, 'handler' => 'directory')
72
+ directory.sub(/^\//, '').split('/').inject('/') do |parent_path, dir|
73
+ parent_path = File.join(parent_path, dir) + '/'
74
+ path = Webgen::Path.new(parent_path, mi)
75
+ if !@website.tree[path.alcn]
76
+ @website.ext.path_handler.create_secondary_nodes(path)
77
+ end
78
+ parent_path
79
+ end
80
+ end
81
+
82
+ end
83
+
84
+ end
85
+ end
@@ -1,16 +1,15 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
- # -*- ruby -*-
4
3
  #
5
4
  #--
6
- # webgentask.rb:
5
+ # rake_task.rb:
7
6
  #
8
7
  # Define a task library for running webgen
9
8
  #
10
9
  # Copyright (C) 2007 Jeremy Hinegardner
11
10
  #
12
11
  # Tasks restructuration by Massimiliano Filacchioni
13
- # Modifications for 0.5.0 by Thomas Leitner
12
+ # Modifications for 0.5.0- by Thomas Leitner
14
13
  #
15
14
  # This program is free software; you can redistribute it and/or modify
16
15
  # it under the terms of the GNU General Public License as published by
@@ -43,9 +42,9 @@ module Webgen
43
42
  #
44
43
  # == Basics
45
44
  #
46
- # require 'webgen/webgentask'
45
+ # require 'webgen/rake_task'
47
46
  #
48
- # Webgen::WebgenTask.new
47
+ # Webgen::RakeTask.new
49
48
  #
50
49
  # == Attributes
51
50
  #
@@ -63,24 +62,24 @@ module Webgen
63
62
  # The tasks provided are :
64
63
  #
65
64
  # [webgen]
66
- # render the webgen website
65
+ # generate the webgen website
67
66
  # [clobber_webgen]
68
- # remove all the files created during generation
67
+ # remove all files created during generation
69
68
  #
70
69
  # == Integrate webgen in other project
71
70
  #
72
71
  # To integrate webgen tasks in another project you can use rake namespaces. For example assuming
73
- # webgen's site directory is +webgen+ under the main project directory use the following code
72
+ # webgen's website directory is +webgen+ under the main project directory use the following code
74
73
  # fragment in project Rakefile:
75
74
  #
76
- # require 'webgen/webgentask'
75
+ # require 'webgen/rake_task'
77
76
  #
78
77
  # namespace :dev do
79
- # Webgen::WebgenTask.new do |site|
78
+ # Webgen::RakeTask.new do |site|
80
79
  # site.directory = File.join(Dir.pwd, "webgen")
81
80
  # site.clobber_outdir = true
82
- # site.config_block = lambda |config|
83
- # config['website.lang'] = 'de'
81
+ # site.config_block = lambda |website|
82
+ # website.config['website.lang'] = 'de'
84
83
  # end
85
84
  # end
86
85
  # end
@@ -94,20 +93,23 @@ module Webgen
94
93
  #
95
94
  # and add dev:clobber_webgen to the main clobber task.
96
95
  #
97
- class WebgenTask < ::Rake::TaskLib
96
+ class RakeTask < ::Rake::TaskLib
98
97
 
99
- # The directory of the webgen website. This would be the directory of your <tt>config.yaml</tt>
100
- # file. Or the parent directory of the <tt>src/</tt> directory for webgen.
98
+ # The directory of the webgen website.
101
99
  #
102
- # The default for this is assumed to be <tt>Dir.pwd</tt>
100
+ # This would be the directory of your 'webgen.config' file. Or the parent directory of the 'src'
101
+ # directory.
102
+ #
103
+ # The default value is +Dir.pwd+.
103
104
  attr_accessor :directory
104
105
 
105
- # The configuration block that is invoked when the Webgen::Website object is initialized. This
106
- # can be used to set configuration parameters and to avoid having a <tt>config.yaml</tt> file
106
+ # The configuration block that is invoked when the Webgen::Website object is initialized.
107
+ #
108
+ # This can be used to set configuration parameters and to avoid having a 'webgen.config' file
107
109
  # lying around.
108
110
  attr_accessor :config_block
109
111
 
110
- # During the clobber, should webgen's output directory be clobbered. The default is false.
112
+ # During the clobber, should webgen's output directory be clobbered? The default is false.
111
113
  attr_accessor :clobber_outdir
112
114
 
113
115
  # Create webgen tasks. You can override the task name with the parameter +name+.
@@ -127,13 +129,14 @@ module Webgen
127
129
  #######
128
130
 
129
131
  def define # :nodoc:
130
- desc "Render the webgen website"
131
- task @name, :verbosity, :log_level do |t, args|
132
+ desc "Generate the webgen website"
133
+ task @name, :verbose, :debug do |t, args|
132
134
  require 'webgen/website'
133
- website = Webgen::Website.new(@directory, Webgen::Logger.new($stdout), &@config_block)
134
- website.logger.verbosity = args[:verbosity].to_s.intern unless args[:verbosity].to_s.empty?
135
- website.logger.level = args[:log_level].to_i if args[:log_level]
136
- website.render
135
+ require 'webgen/cli'
136
+ website = Webgen::Website.new(@directory, Webgen::CLI::Logger.new($stdout), &@config_block)
137
+ website.logger.verbose = args[:verbose] && args[:verbose].to_s == 'true'
138
+ website.logger.level = (args[:debug] && args[:debug].to_s == 'true' ? ::Logger::DEBUG : ::Logger::INFO)
139
+ website.execute_task(:generate_website)
137
140
  end
138
141
 
139
142
  task :clobber => paste('clobber_', @name)
@@ -141,8 +144,9 @@ module Webgen
141
144
  desc "Remove webgen products"
142
145
  task paste('clobber_', @name) do
143
146
  require 'webgen/website'
144
- website = Webgen::Website.new(@directory, Webgen::Logger.new($stdout), &@config_block)
145
- website.clean(@clobber_outdir)
147
+ require 'webgen/cli'
148
+ website = Webgen::Website.new(@directory, Webgen::CLI::Logger.new($stdout), &@config_block)
149
+ website.ext.destination.delete('/')
146
150
  end
147
151
  end
148
152
 
data/lib/webgen/source.rb CHANGED
@@ -1,28 +1,44 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
+ require 'webgen/extension_manager'
4
+ require 'webgen/path'
5
+
3
6
  module Webgen
4
7
 
5
8
  # Namespace for all classes that provide source paths.
6
9
  #
7
- # == Implementing a source class
10
+ # == About
11
+ #
12
+ # This class is used to manage source classes. A source class is a class that returns a set of
13
+ # Path objects when the \#paths method is called. For example, the FileSystem class uses the file
14
+ # system as the source for the source paths.
8
15
  #
9
- # Source classes provide access to the source paths on which the source handlers act.
16
+ # The #register method is used for registering new source classes.
10
17
  #
11
- # A source class only needs to respond to the method +paths+ which needs to return a set of paths
12
- # for the source. The returned paths must respond to the method <tt>changed?</tt> (has to return
13
- # +true+ if the paths has changed since the last webgen run). If a path represents a directory, it
14
- # needs to have a trailing slash! The default implementation in the Path class just returns
15
- # +true+. One can either derive a specialized path class or define singleton methods on each path
16
- # object.
18
+ # To get all configured source paths, use the #paths method of this class.
17
19
  #
18
- # Also note that the returned Path objects should have the meta information <tt>modified_at</tt>
19
- # set to the correct last modification time of the path, ie. the value has to be a Time object!
20
+ # Extension writers may be interested in the #passive_sources accessor which allows one to
21
+ # register sources that provide paths that are only used when actually referenced.
22
+ #
23
+ # == Implementing a source class
20
24
  #
21
- # == Sample Source Class
25
+ # A source class only needs to respond to the method +paths+ which needs to return a set of Path
26
+ # objects for the source. It is expected that after a source object is initialized it always
27
+ # returns the same path objects. The +initialize+ method of a source class must take the website
28
+ # object as first argument and may take an arbitrary number of additional arguments.
22
29
  #
23
- # Following is a simple source class which has stored the paths and their contents in a hash:
30
+ # Note that the returned Path objects need to have the meta information 'modified_at' set to the
31
+ # correct last modification time of the path, i.e. the value has to be a Time object! This is
32
+ # needed to determine whether the content of the path has been changed since the last invocation
33
+ # of webgen.
34
+ #
35
+ # == Sample source class
36
+ #
37
+ # Following is a simple source class which stores the paths and their contents in a hash:
24
38
  #
25
39
  # require 'stringio'
40
+ # require 'set'
41
+ # require 'webgen/path'
26
42
  #
27
43
  # class MemorySource
28
44
  #
@@ -31,26 +47,92 @@ module Webgen
31
47
  # '/directory/file.page' => "This is the content of the file"
32
48
  # }
33
49
  #
50
+ # def initialize(website, data = {})
51
+ # @data = data
52
+ # end
53
+ #
34
54
  # def paths
35
- # CONTENT.collect do |path, content|
36
- # Webgen::Path.new(path) { StringIO.new(content.to_s) }
55
+ # CONTENT.merge(@data).collect do |path, content|
56
+ # Webgen::Path.new(path, 'modified_at' => Time.now) { StringIO.new(content.to_s) }
37
57
  # end.to_set
38
58
  # end
39
59
  #
40
60
  # end
41
61
  #
42
- # You can use this source class in your website (after placing the code in, for example,
43
- # <tt>ext/init.rb</tt>) by updating the <tt>sources</tt> configuration option:
62
+ # website.ext.source.register MemorySource, :name => 'memory'
44
63
  #
45
- # WebsiteAccess.website.config['sources'] << ['/', 'MemorySource']
46
- #
47
- module Source
64
+ class Source
65
+
66
+ include Webgen::ExtensionManager
67
+
68
+
69
+ # An array with one or more passive source definitions (a source definition is an array
70
+ # containing a mount point, the short name for a Source class and its arguments).
71
+ #
72
+ # The paths read from these sources will automatically be tagged with the 'passive' meta
73
+ # information key so that they are only used when referenced.
74
+ #
75
+ # This is very useful for providing templates, images and other paths in webgen extensions that
76
+ # should only be rendered when actually being referenced.
77
+ attr_reader :passive_sources
78
+
79
+
80
+ # Create a new source manager object for the given website.
81
+ def initialize(website)
82
+ super()
83
+ @website = website
84
+ @passive_sources = []
85
+ end
86
+
87
+ # Register a source class.
88
+ #
89
+ # The parameter +klass+ has to contain the name of the source class or the class object itself.
90
+ # If the class is located under this namespace, only the class name without the hierarchy part
91
+ # is needed, otherwise the full class name including parent module/class names is needed.
92
+ #
93
+ # === Options:
94
+ #
95
+ # [:name] The name for the source. If not set, it defaults to the snake-case version (i.e.
96
+ # FileSystem → file_system) of the class name (without the hierarchy part). It should
97
+ # only contain letters.
98
+ #
99
+ # === Examples:
100
+ #
101
+ # source.register('FileSystem') # registers Webgen::Source::FileSystem
102
+ #
103
+ # source.register('::FileSystem') # registers FileSystem !!!
104
+ #
105
+ # source.register('MyModule::Doit', name: 'my_doit')
106
+ #
107
+ def register(klass, options={}, &block)
108
+ do_register(klass, options, false, &block)
109
+ end
110
+
111
+ # Return all configured source paths.
112
+ #
113
+ # The source paths are taken from the sources specified in the "sources" configuration option
114
+ # and from passive sources array (see #passive_sources). All paths that additionally match one
115
+ # of the "sources.ignore_paths" patterns are ignored.
116
+ def paths
117
+ if !defined?(@paths)
118
+ active_source = extension('stacked').new(@website, @website.config['sources'].collect do |mp, name, *args|
119
+ [mp, extension(name).new(@website, *args)]
120
+ end)
121
+ passive_source = extension('stacked').new(@website, @passive_sources.collect do |mp, name, *args|
122
+ [mp, extension(name).new(@website, *args)]
123
+ end)
124
+ passive_source.paths.each {|path| path['passive'] = true}
125
+ source = extension('stacked').new(@website, [['/', active_source], ['/', passive_source]])
48
126
 
49
- autoload :Base, 'webgen/source/base'
50
- autoload :FileSystem, 'webgen/source/filesystem'
51
- autoload :Stacked, 'webgen/source/stacked'
52
- autoload :Resource, 'webgen/source/resource'
53
- autoload :TarArchive, 'webgen/source/tararchive'
127
+ @paths = []
128
+ source.paths.each do |path|
129
+ if !(@website.config['sources.ignore_paths'].any? {|pat| Webgen::Path.matches_pattern?(path, pat)})
130
+ @paths << path
131
+ end
132
+ end
133
+ end
134
+ @paths
135
+ end
54
136
 
55
137
  end
56
138
 
@@ -0,0 +1,41 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'pathname'
4
+ require 'set'
5
+ require 'webgen/source'
6
+ require 'webgen/path'
7
+
8
+ module Webgen
9
+ class Source
10
+
11
+ # This class is used to read source paths from a directory in the file system.
12
+ class FileSystem
13
+
14
+ # The root path from which paths are read.
15
+ attr_reader :root
16
+
17
+ # The glob (see Dir.glob for details) that is used to specify which paths under the root path
18
+ # should be returned by #paths.
19
+ attr_reader :glob
20
+
21
+ # Create a new file system source for the root path +root+ using the provided +glob+. If
22
+ # +root+ is not an absolute path, the website directory will be prepended.
23
+ def initialize(website, root, glob = '**/*')
24
+ @root = File.absolute_path(root, website.directory)
25
+ @glob = glob
26
+ end
27
+
28
+ # Return all paths under the root path which match the glob.
29
+ def paths
30
+ @paths ||= Dir.glob(File.join(@root, @glob), File::FNM_DOTMATCH|File::FNM_CASEFOLD).collect do |f|
31
+ next unless File.exists?(f) # handle invalid links
32
+ temp = Pathname.new(f.sub(/^#{Regexp.escape(@root)}\/?/, '/')).cleanpath.to_s
33
+ temp += '/' if File.directory?(f) && temp[-1] != ?/
34
+ Path.new(temp, 'modified_at' => File.mtime(f)) {|mode| File.open(f, mode)}
35
+ end.compact.to_set
36
+ end
37
+
38
+ end
39
+
40
+ end
41
+ end
@@ -1,63 +1,59 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
- module Webgen::Source
4
-
5
- # This source class is used to stack several sources together.
6
- #
7
- # It serves two purposes:
8
- #
9
- # * First, it can be used to access more than one source. This is useful when your website
10
- # consists of more than one source directory and you want to use all of them.
11
- #
12
- # * Second, sources can be mounted on specific directories. For example, a folder with images that
13
- # you don't want to copy to the website source directory can be mounted under <tt>/images</tt>
14
- # sothat they are available nonetheless.
15
- #
16
- # Also be aware that when a path is returned by a source that has already be returned by a prior
17
- # source, it is discarded and not used.
18
- class Stacked
19
-
20
- # Return the stack of mount point to Webgen::Source object maps.
21
- attr_reader :stack
22
-
23
- # Specifies whether the result of #paths calls should be cached (default: +false+). If caching
24
- # is activated, new maps cannot be added to the stacked source anymore!
25
- attr_accessor :cache_paths
26
-
27
- # Create a new stack. The optional +map+ parameter can be used to provide initial mappings of
28
- # mount points to source objects (see #add for details). You cannot add other maps after a call
29
- # to #paths if +cache_paths+ is +true+
30
- def initialize(map = {}, cache_paths = false)
31
- @stack = []
32
- @cache_paths = cache_paths
33
- add(map)
34
- end
35
-
36
- # Add all mappings found in +maps+ to the stack. The parameter +maps+ should be an array of
37
- # two-element arrays which contain an absolute directory (ie. starting and ending with a slash)
38
- # and a source object.
39
- def add(maps)
40
- raise "Cannot add new maps since caching is activated for this source" if defined?(@paths) && @cache_paths
41
- maps.each do |mp, source|
42
- raise "Invalid mount point specified: #{mp}" unless mp =~ /^\//
43
- @stack << [mp, source]
3
+ require 'webgen/source'
4
+ require 'set'
5
+
6
+ module Webgen
7
+ class Source
8
+
9
+ # This source class is used to stack several sources together.
10
+ #
11
+ # It serves two purposes:
12
+ #
13
+ # * First, it can be used to access more than one source. This is useful when your website
14
+ # consists of more than one source directory and you want to use all of them.
15
+ #
16
+ # * Second, sources can be mounted on specific directories. For example, a folder with images
17
+ # that you don't want to copy to the main website source directory can be mounted under
18
+ # '/images' so that they are available nonetheless.
19
+ #
20
+ # Also be aware that when a path is returned by a source that has already be returned by a prior
21
+ # source, it is discarded and not used.
22
+ class Stacked
23
+
24
+ # Return the stack of [mount point, source object] entries.
25
+ attr_reader :stack
26
+
27
+ # Create a new stack.
28
+ #
29
+ # The optional +map+ parameter is used to provide mappings of mount points to source objects.
30
+ # It should be an array of two-element arrays which contain an absolute directory (ie.
31
+ # starting and ending with a slash) and a source object.
32
+ def initialize(website, map = {})
33
+ @stack = []
34
+ map.each do |mp, source|
35
+ raise "Invalid mount point specified: #{mp}" unless mp =~ /^\//
36
+ @stack << [mp, source]
37
+ end
44
38
  end
45
- end
46
39
 
47
- # Return all paths returned by the sources in the stack. Since the stack is ordered, paths
48
- # returned by later source objects are not used if a prior source object has returned the same
49
- # path.
50
- def paths
51
- return @paths if defined?(@paths) && @cache_paths
52
- @paths = Set.new
53
- @stack.each do |mp, source|
54
- source.paths.each do |path|
55
- @paths.add?(path.mount_at(mp))
40
+ # Return all paths returned by the sources in the stack.
41
+ #
42
+ # Since the stack is ordered, paths returned by later source objects are not used if a prior
43
+ # source object has returned the same path.
44
+ def paths
45
+ if !defined?(@paths)
46
+ @paths = Set.new
47
+ @stack.each do |mp, source|
48
+ source.paths.each do |path|
49
+ @paths.add?(path.mount_at(mp))
50
+ end
51
+ end
56
52
  end
53
+ @paths
57
54
  end
58
- @paths
55
+
59
56
  end
60
57
 
61
58
  end
62
-
63
59
  end