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,78 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/path_handler/base'
4
+ require 'webgen/context'
5
+
6
+ module Webgen
7
+ class PathHandler
8
+
9
+ # Simple path handler for copying files from the source to the destination, either without
10
+ # changing anything or by applying one or more content processors.
11
+ class Copy
12
+
13
+ include Base
14
+
15
+ # Create the node for +path+.
16
+ #
17
+ # The following order is used for finding the (optional) content processor pipeline:
18
+ #
19
+ # * If the pipeline meta info key is specified, it is used.
20
+ #
21
+ # * If the +path+ has the names of content processors as parts in the file extension, all
22
+ # extension parts until the first non-content processor part will be used for the pipeline
23
+ # and removed from the extension.
24
+ #
25
+ # If the last extension part is a file extension registered with a content processor (using
26
+ # the :ext_map facility), the corresponding content processor is appended to the pipeline
27
+ # and the post-process file extension name is used.
28
+ #
29
+ # Here are some examples:
30
+ #
31
+ # * pipeline = ['erb'] → only erb is used, extension is not modified
32
+ #
33
+ # * path = 'test.erb.kramdown.html', no pipeline → pipeline is set to ['erb', 'kramdown'] and
34
+ # path extension is changed to '.html', ie. path = 'test.html'
35
+ #
36
+ # * path = 'test.erb.kramdown.unknown.html', no pipeline → pipeline is set ['erb', 'kramdown']
37
+ # and path extension is changed to 'unknown.html', ie. path = 'test.unknown.html'
38
+ #
39
+ # * path = 'test.erb.sass', no pipeline → pipeline is set to ['erb', 'sass'] and path
40
+ # extension is changed to '.css', ie. path = 'test.css'
41
+ #
42
+ # * path = 'test.sass', no pipeline → pipeline is set to ['sass'] and path extension is
43
+ # changed to '.css', ie. path = 'test.css'
44
+ def create_nodes(path)
45
+ if !path.meta_info.has_key?('pipeline')
46
+ pipeline = []
47
+ exts = path.ext.split('.')
48
+ pipeline << exts.shift while exts.length > 1 && @website.ext.content_processor.registered?(exts.first)
49
+ if (data = @website.ext.content_processor.map_extension(exts.last))
50
+ pipeline << data.first
51
+ exts[-1] = data.last
52
+ end
53
+ path.meta_info['pipeline'] = pipeline unless pipeline.empty?
54
+ path.ext = exts.join('.')
55
+ end
56
+
57
+ create_node(path)
58
+ end
59
+
60
+ # Return the processed content of the +node+ if the pipeline meta info key is specified or the
61
+ # IO object for the node's source path.
62
+ def content(node)
63
+ if pipeline = node.meta_info['pipeline']
64
+ pipeline = @website.ext.content_processor.normalize_pipeline(pipeline)
65
+ is_binary = @website.ext.content_processor.is_binary?(pipeline.first)
66
+ context = Webgen::Context.new(@website, :chain => [node],
67
+ :content => node.node_info[:path].data(is_binary ? 'rb' : 'r'))
68
+ pipeline.each {|processor| @website.ext.content_processor.call(processor, context)}
69
+ context.content
70
+ else
71
+ node.node_info[:path]
72
+ end
73
+ end
74
+
75
+ end
76
+
77
+ end
78
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/path_handler/base'
4
+
5
+ module Webgen
6
+ class PathHandler
7
+
8
+ # Path handler for directory source paths. Has nothing special to do.
9
+ class Directory
10
+
11
+ include Base
12
+
13
+ # Create the node for +path+.
14
+ def create_nodes(path)
15
+ create_node(path)
16
+ end
17
+
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,82 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/path_handler/base'
4
+ require 'webgen/path_handler/page_utils'
5
+ require 'webgen/context'
6
+ require 'webgen/path'
7
+ require 'time'
8
+
9
+ module Webgen
10
+ class PathHandler
11
+
12
+ # Path handler for creating atom and/or rss feeds.
13
+ #
14
+ # When customizing a feed template one can use the following utiltity methods:
15
+ #
16
+ # * #feed_entries
17
+ # * #feed_link
18
+ # * #entry_content
19
+ #
20
+ # Have a look at the default feed templates to see them in action.
21
+ class Feed
22
+
23
+ include Base
24
+ include PageUtils
25
+
26
+ # The mandatory keys that need to be set in a feed file.
27
+ MANDATORY_INFOS = %W[site_url author entries]
28
+
29
+ # Create the feed nodes.
30
+ def create_nodes(path, blocks)
31
+ if MANDATORY_INFOS.any? {|t| path.meta_info[t].nil?}
32
+ raise Webgen::NodeCreationError.new("At least one of #{MANDATORY_INFOS.join('/')} is missing",
33
+ self.class.name, path)
34
+ end
35
+ if !['atom', 'rss'].include?(path['version'])
36
+ raise Webgen::NodeCreationError.new("Invalid version '#{path['version']}' for feed path specified, only atom and rss allowed",
37
+ self.class.name, path)
38
+ end
39
+
40
+ path.ext = path['version']
41
+ path['dest_path'] = '<parent><basename>(.<lang>)<ext>'
42
+ path['cn'] = '<basename><ext>'
43
+ create_node(path) do |node|
44
+ set_blocks(node, blocks)
45
+ node.meta_info['link'] ||= node.parent.alcn
46
+ @website.ext.item_tracker.add(node, :nodes, :node_finder_option_set,
47
+ {:opts => node['entries'], :ref_alcn => node.alcn}, :content)
48
+ end
49
+ end
50
+
51
+ # Return the rendered feed represented by +node+.
52
+ def content(node)
53
+ context = Webgen::Context.new(@website)
54
+ context.render_block(:name => "#{node['version']}_template", :node => 'first',
55
+ :chain => [node, node.resolve("/templates/feed.template", node.lang, true), node].compact)
56
+ end
57
+
58
+ # Return the entries for the feed node.
59
+ def feed_entries(node)
60
+ @website.ext.node_finder.find(node['entries'], node)
61
+ end
62
+
63
+ # Return the feed link URL for the feed node.
64
+ def feed_link(node)
65
+ Webgen::Path.url(File.join(node['site_url'], node.tree[node['link']].dest_path), false)
66
+ end
67
+
68
+ # Return the content of an +entry+ of the feed +node+.
69
+ def entry_content(node, entry)
70
+ block_name = node['content_block_name'] || 'content'
71
+ if entry.respond_to?(:render_block) && entry.blocks[block_name]
72
+ entry.render_block(block_name, Webgen::Context.new(@website, :chain => [entry])).content
73
+ else
74
+ @website.logger.warn { "Feed entry <#{entry}> not used, is not a renderable node" }
75
+ ''
76
+ end
77
+ end
78
+
79
+ end
80
+
81
+ end
82
+ end
@@ -0,0 +1,84 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'pathname'
4
+ require 'set'
5
+ require 'yaml'
6
+ require 'webgen/path_handler/base'
7
+ require 'webgen/path_handler/page_utils'
8
+
9
+ module Webgen
10
+ class PathHandler
11
+
12
+ # Handles meta information paths which provide meta information for other paths.
13
+ class MetaInfo
14
+
15
+ include Base
16
+ include PageUtils
17
+
18
+ # Upon creation the path handler registers itself as listener for the :apply_meta_info_to_path and
19
+ # :after_node_created hooks so that it can apply the meta information.
20
+ def initialize(website)
21
+ super
22
+ @website.blackboard.add_listener(:apply_meta_info_to_path, &method(:apply_meta_info_to_path))
23
+ @website.blackboard.add_listener(:after_node_created, &method(:after_node_created))
24
+ @paths = []
25
+ @alcns = []
26
+ end
27
+
28
+ # Create a meta info node from +path+.
29
+ def create_nodes(path, blocks)
30
+ @paths += add_data(path, blocks['paths'], 'paths')
31
+ entries = add_data(path, blocks['alcn'], 'alcn')
32
+ @alcns += entries
33
+ update_existing_nodes(entries)
34
+
35
+ nil
36
+ end
37
+
38
+ #######
39
+ private
40
+ #######
41
+
42
+ # Add the data from the given page block to the hash.
43
+ def add_data(path, content, block_name)
44
+ entries = []
45
+ if content && (data = YAML::load(content))
46
+ data.each do |(*keys), value|
47
+ value = Marshal.dump(value)
48
+ keys.each {|key| entries << [Webgen::Path.append(path.parent_path, key), value]}
49
+ end
50
+ end
51
+ entries
52
+ rescue Exception => e
53
+ raise Webgen::NodeCreationError.new("Could not parse block '#{block_name}': #{e.message}", self.class.name)
54
+ end
55
+
56
+ # Update already existing nodes with meta information from the given meta info node.
57
+ def update_existing_nodes(entries)
58
+ @website.tree.node_access[:alcn].each do |alcn, node|
59
+ entries.each do |pattern, mi|
60
+ node.meta_info.update(Marshal.load(mi)) if Webgen::Path.matches_pattern?(alcn, pattern)
61
+ end
62
+ end
63
+ end
64
+
65
+ # Update the meta info of matched path before a node is created.
66
+ def apply_meta_info_to_path(path)
67
+ hash = {}
68
+ @paths.each do |pattern, mi|
69
+ hash.merge!(Marshal.load(mi)) if Webgen::Path.matches_pattern?(path, pattern)
70
+ end
71
+ path.meta_info.replace(hash.merge!(path.meta_info)) if hash.length > 0
72
+ end
73
+
74
+ # Update the meta information of a matched alcn after the node has been created.
75
+ def after_node_created(node)
76
+ @alcns.each do |pattern, mi|
77
+ node.meta_info.update(Marshal.load(mi)) if Webgen::Path.matches_pattern?(node.alcn, pattern)
78
+ end
79
+ end
80
+
81
+ end
82
+
83
+ end
84
+ end
@@ -0,0 +1,38 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/path_handler/base'
4
+ require 'webgen/path_handler/page_utils'
5
+
6
+ module Webgen
7
+ class PathHandler
8
+
9
+ # Path handler for handling content files in Webgen Page Format.
10
+ class Page
11
+
12
+ include Base
13
+ include PageUtils
14
+
15
+ # Create a page file from +path+.
16
+ def create_nodes(path, blocks)
17
+ path.meta_info['lang'] ||= @website.config['website.lang']
18
+ path.ext = 'html' if path.ext == 'page'
19
+ create_node(path) do |node|
20
+ set_blocks(node, blocks)
21
+ end
22
+ end
23
+
24
+ # Render the block +block_name+ of the given +node+.
25
+ #
26
+ # If the parameter +chain+ (an array of template nodes) is not set, the default template chain
27
+ # for the given +node+ is used.
28
+ def content(node, block_name = 'content', chain = nil)
29
+ chain ||= @website.ext.path_handler.instance(:template).template_chain(node)
30
+ chain << node
31
+
32
+ chain.first.render_block(block_name, Webgen::Context.new(@website, :chain => chain)).content
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,79 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/path_handler'
4
+ require 'webgen/page'
5
+ require 'webgen/error'
6
+
7
+ module Webgen
8
+ class PathHandler
9
+
10
+ # This module should be used by path handlers that need to work with paths in Webgen Page Format.
11
+ #
12
+ # Note that this modules provides an implementation for the #parse_meta_info! method. If you
13
+ # also include the Base module, make sure that you include it before this module! Also make sure
14
+ # to override this method if you need custom behaviour!
15
+ module PageUtils
16
+
17
+ # Calls #parse_as_page! to update the meta information hash of +path+. Returns the found
18
+ # blocks which will be passed as second parameter to the #create_nodes method.
19
+ def parse_meta_info!(path)
20
+ parse_as_page!(path)
21
+ end
22
+
23
+ # Assume that the content of the given +path+ is in Webgen Page Format and parse it. Updates
24
+ # 'path.meta_info' with the meta info from the page and returns the content blocks.
25
+ def parse_as_page!(path)
26
+ begin
27
+ page = Webgen::Page.from_data(path.data)
28
+ rescue Webgen::Page::FormatError => e
29
+ raise Webgen::Error.new("Error reading source path: #{e.message}", self.class.name, path)
30
+ end
31
+ blocks = page.meta_info.delete('blocks') || {}
32
+ path.meta_info.merge!(page.meta_info)
33
+ blocks.each {|key, val| ((path.meta_info['blocks'] ||= {})[key] ||= {}).merge!(val)}
34
+ page.blocks
35
+ end
36
+ private :parse_as_page!
37
+
38
+ # Set the blocks (see #parse_as_page!) for the node.
39
+ def set_blocks(node, blocks)
40
+ node.node_info[:blocks] = blocks
41
+ end
42
+ private :set_blocks
43
+
44
+ # Return the blocks (see #parse_as_page!) for the node.
45
+ def blocks(node)
46
+ node.node_info[:blocks]
47
+ end
48
+
49
+ # Render the block +name+ of +node+ using the provided Context object.
50
+ #
51
+ # Uses the content processors specified for the block via the +blocks+ meta information key if
52
+ # the +pipeline+ parameter is not set.
53
+ #
54
+ # Returns the given context with the rendered content.
55
+ def render_block(node, name, context, pipeline = nil)
56
+ unless node.blocks.has_key?(name)
57
+ raise Webgen::RenderError.new("No block named '#{name}' found", self.class.name,
58
+ context.dest_node.alcn, node.alcn)
59
+ end
60
+
61
+ content_processor = context.website.ext.content_processor
62
+ context.website.ext.item_tracker.add(context.dest_node, :node_content, node.alcn)
63
+
64
+ context.content = node.blocks[name].dup
65
+ context[:block_name] = name
66
+ pipeline ||= ((node.meta_info['blocks'] || {})[name] || {})['pipeline'] ||
67
+ ((node.meta_info['blocks'] || {})['defaults'] || {})['pipeline'] ||
68
+ []
69
+ content_processor.normalize_pipeline(pipeline).each do |processor|
70
+ content_processor.call(processor, context)
71
+ end
72
+ context[:block_name] = nil
73
+ context
74
+ end
75
+
76
+ end
77
+
78
+ end
79
+ end
@@ -0,0 +1,52 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'uri'
4
+ require 'time'
5
+ require 'webgen/path_handler/base'
6
+ require 'webgen/path_handler/page_utils'
7
+ require 'webgen/context'
8
+
9
+ module Webgen
10
+ class PathHandler
11
+
12
+ # Path handler for creating an XML sitemap based on the specification of http://sitemaps.org.
13
+ class Sitemap
14
+
15
+ include Base
16
+ include PageUtils
17
+
18
+ # The mandatory keys that need to be set in a sitemap file.
19
+ MANDATORY_INFOS = %W[site_url entries]
20
+
21
+ # Create an XML sitemap from +path+.
22
+ def create_nodes(path, blocks)
23
+ if MANDATORY_INFOS.any? {|t| path.meta_info[t].nil?}
24
+ raise Webgen::NodeCreationError.new("At least one of #{MANDATORY_INFOS.join('/')} is missing",
25
+ self.class.name, path)
26
+ end
27
+
28
+ path.ext = 'xml'
29
+ create_node(path) do |node|
30
+ set_blocks(node, blocks)
31
+ node.node_info[:entries] = {:flatten => true, :and => node['entries']}
32
+ @website.ext.item_tracker.add(node, :nodes, :node_finder_option_set,
33
+ {:opts => node.node_info[:entries], :ref_alcn => node.alcn}, :meta_info)
34
+ end
35
+ end
36
+
37
+ # Return the rendered feed represented by +node+.
38
+ def content(node)
39
+ context = Webgen::Context.new(@website)
40
+ context.render_block(:name => "sitemap", :node => 'first',
41
+ :chain => [node, node.resolve("/templates/sitemap.template", node.lang, true), node].compact)
42
+ end
43
+
44
+ # Return the entries for the sitemap +node+.
45
+ def sitemap_entries(node)
46
+ @website.ext.node_finder.find(node.node_info[:entries], node)
47
+ end
48
+
49
+ end
50
+
51
+ end
52
+ end
@@ -0,0 +1,96 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/path_handler/base'
4
+ require 'webgen/path_handler/page_utils'
5
+
6
+ module Webgen
7
+ class PathHandler
8
+
9
+ # Path handler for handling template files in Webgen Page Format.
10
+ class Template
11
+
12
+ include Base
13
+ include PageUtils
14
+
15
+ # Create a template node for +path+.
16
+ def create_nodes(path, blocks)
17
+ create_node(path) do |node|
18
+ node.meta_info['no_output'] = true
19
+ set_blocks(node, blocks)
20
+ end
21
+ end
22
+
23
+ # Return the template chain for +node+
24
+ #
25
+ # When invoked directly, the +lang+ parameter should not be used. This parameter is necessary
26
+ # for the recursive invocation of the method so that the correct templates are used. Consider
27
+ # the following path hierarchy:
28
+ #
29
+ # /default.en.template
30
+ # /default.de.template
31
+ # /custom.template
32
+ # /index.de.page template: custom.template
33
+ # /index.en.page template: custom.template
34
+ #
35
+ # The template chains for index.en.page and index.de.page are therefore
36
+ #
37
+ # /default.en.template → /custom.template
38
+ # /default.de.template → /custom.template
39
+ #
40
+ # This means that the /custom.template needs to reference different templates depending on the
41
+ # language.
42
+ def template_chain(node, lang = node.lang)
43
+ cached_template = (@website.cache.volatile[[node.alcn, :templates]] ||= {})
44
+ if cached_template.has_key?(lang)
45
+ template_node = cached_template[lang]
46
+ elsif node['template'].kind_of?(String)
47
+ template_node = node.resolve(node['template'], lang, true)
48
+ if template_node.nil?
49
+ @website.logger.warn do
50
+ ["Template '#{node['template']}' for <#{node}> not found, using default template!",
51
+ 'Fix the value of the meta information \'template\' for <#{node}>']
52
+ end
53
+ template_node = default_template(node.parent, lang)
54
+ end
55
+ cached_template[lang] = template_node
56
+ elsif node.meta_info.has_key?('template') && node['template'].nil?
57
+ template_node = cached_template[lang] = nil
58
+ else
59
+ @website.logger.debug { "Using default template in language '#{lang}' for <#{node}>" }
60
+ template_node = default_template(node.parent, lang)
61
+ if template_node == node && !node.parent.is_root?
62
+ template_node = default_template(node.parent.parent, lang)
63
+ end
64
+ cached_template[lang] = template_node
65
+ end
66
+
67
+ if template_node.nil?
68
+ []
69
+ else
70
+ (template_node == node ? [] : template_chain(template_node, lang) + [template_node])
71
+ end
72
+ end
73
+
74
+ # Return the default template for the directory node +dir+ and language +lang+.
75
+ #
76
+ # If the template node is not found, the parent directories are searched.
77
+ def default_template(dir, lang)
78
+ default_template_name = @website.config['path_handler.template.default_template']
79
+ template = dir.resolve(default_template_name, lang)
80
+ if template.nil?
81
+ if dir.is_root?
82
+ @website.logger.warn do
83
+ ["Default template '#{default_template_name}' not found in root directory!",
84
+ 'Provide a </#{default_template_name}> to fix this warning.']
85
+ end
86
+ else
87
+ template = default_template(dir.parent, lang)
88
+ end
89
+ end
90
+ template
91
+ end
92
+
93
+ end
94
+
95
+ end
96
+ end