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,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'cgi'
3
+
4
+ module Webgen
5
+ class Tag
6
+
7
+ # Provides easy access to the meta information of a node.
8
+ module MetaInfo
9
+
10
+ # Treat +tag+ as a meta information key and return its value from the content node.
11
+ def self.call(tag, body, context)
12
+ output = ''
13
+ if tag == 'lang'
14
+ output = context.content_node.lang
15
+ elsif context.content_node[tag]
16
+ output = context.content_node[tag].to_s
17
+ output = CGI::escapeHTML(output) if context[:config]['tag.meta_info.escape_html']
18
+ else
19
+ context.website.logger.error do
20
+ ["No meta info key '#{tag}' found in <#{context.content_node}> (referenced in <#{context.ref_node}>)",
21
+ "Add the meta info key '#{tag}' to <#{context.content_node}> or remove the" +
22
+ " reference in <#{context.ref_node}> to fix this error."]
23
+ end
24
+ end
25
+ output
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+ end
@@ -2,49 +2,58 @@
2
2
 
3
3
  require 'uri'
4
4
 
5
- module Webgen::Tag
6
-
7
- # Makes a path relative. This is very useful for templates. For example, you normally include a
8
- # stylesheet in a template. If you specify the filename of the stylesheet directly, the reference
9
- # to the stylesheet in the output file of a page file that is not in the same directory as the
10
- # template would be invalid.
11
- #
12
- # By using the +relocatable+ tag you ensure that the path stays valid.
13
- class Relocatable
14
-
15
- include Webgen::Tag::Base
16
-
17
- # Return the relativized path for the path provided in the tag definition.
18
- def call(tag, body, context)
19
- path = param('tag.relocatable.path')
20
- result = ''
21
- begin
22
- result = (Webgen::Node.url(path, false).absolute? ? path : resolve_path(path, context))
23
- rescue URI::InvalidURIError => e
24
- raise Webgen::RenderError.new("Error while parsing path '#{path}': #{e.message}",
25
- self.class.name, context.dest_node, context.ref_node)
5
+ module Webgen
6
+ class Tag
7
+
8
+ # Makes a path relative.
9
+ #
10
+ # For example, you normally include a stylesheet in a template. If you specify the path name of
11
+ # the stylesheet directly, the reference to the stylesheet in the output file of a page file
12
+ # that is not in the same directory as the template would be invalid.
13
+ #
14
+ # By using the relocatable tag you ensure that the path stays valid.
15
+ module Relocatable
16
+
17
+ # Return the relativized path for the path provided in the tag definition.
18
+ def self.call(tag, body, context)
19
+ path = context[:config]['tag.relocatable.path']
20
+ result = ''
21
+ begin
22
+ result = (Webgen::Path.url(path, false).absolute? ? path : resolve_path(path, context))
23
+ rescue URI::InvalidURIError => e
24
+ context.website.logger.warn do
25
+ ["Could not parse path '#{path}' for tag.relocatable in <#{context.ref_node}>",
26
+ e.message]
27
+ end
28
+ end
29
+ result
26
30
  end
27
- result
28
- end
29
31
 
30
- #######
31
- private
32
- #######
33
-
34
- # Resolve the path +path+ using the reference node and return the correct relative path from the
35
- # destination node.
36
- def resolve_path(path, context)
37
- dest_node = context.ref_node.resolve(path, context.dest_node.lang)
38
- if dest_node
39
- context.dest_node.node_info[:used_meta_info_nodes] << dest_node.alcn
40
- context.dest_node.route_to(dest_node)
41
- else
42
- log(:error) { "Could not resolve path '#{path}' in <#{context.ref_node}>" }
43
- context.dest_node.flag(:dirty)
44
- ''
32
+ # Resolve the path using the reference node and return the correct relative path from the
33
+ # destination node.
34
+ def self.resolve_path(path, context)
35
+ fragment = ''
36
+
37
+ if context[:config]['tag.relocatable.ignore_unknown_fragment']
38
+ file, *fragments = path.split('#')
39
+ fragment = '#' << fragments.join('#') unless fragments.empty?
40
+ dest_node = context.ref_node.resolve(file, context.dest_node.lang, true)
41
+ context.website.logger.vinfo do
42
+ "Ignoring unknown fragment part of path '#{path}' for tag.relocatable in <#{context.ref_node}>"
43
+ end if dest_node && fragment.length > 0
44
+ else
45
+ dest_node = context.ref_node.resolve(path, context.dest_node.lang, true)
46
+ end
47
+
48
+ if dest_node
49
+ context.website.ext.item_tracker.add(context.dest_node, :node_meta_info, dest_node.alcn)
50
+ context.dest_node.route_to(dest_node) + fragment
51
+ else
52
+ ''
53
+ end
45
54
  end
55
+
46
56
  end
47
57
 
48
58
  end
49
-
50
59
  end
@@ -1,116 +1,40 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
- require 'erb'
4
- require 'tempfile'
5
- require 'fileutils'
3
+ require 'webgen/path'
6
4
 
7
- module Webgen::Tag
5
+ module Webgen
6
+ class Tag
8
7
 
9
- # This tag allows the creation and inclusion of complex graphics using the PGF/TikZ library of
10
- # LaTeX. You will need a current LaTeX distribution and the +convert+ utility from ImageMagick.
11
- class TikZ
8
+ # This tag allows you to create and use complex graphics using the PGF/TikZ library of LaTeX. It
9
+ # uses Webgen::ContentProcessor::Tikz for doing the hard work.
10
+ module Tikz
12
11
 
13
- include Webgen::Tag::Base
14
- include Webgen::WebsiteAccess
12
+ # Create a graphic (i.e. an HTML img tag) from the commands in the body of the tag.
13
+ def self.call(tag, body, context)
14
+ path = Webgen::Path.append(context.ref_node.parent.alcn, context[:config]['tag.tikz.path'])
15
+ path = Webgen::Path.new(path)
15
16
 
16
- LATEX_TEMPLATE = <<EOF
17
- \\nonstopmode \\documentclass{article} \\usepackage{tikz} \\pagestyle{empty}
18
- <% if param('tag.tikz.libraries') %>
19
- \\usetikzlibrary{<%= param('tag.tikz.libraries').join(',') %>}
20
- <% end %>
21
- \\begin{document}
22
- <% if param('tag.tikz.opts') %>
23
- \\begin{tikzpicture}[<%= param('tag.tikz.opts') %>]
24
- <% else %>
25
- \\begin{tikzpicture}
26
- <% end %>
27
- <%= body %>
28
- \\end{tikzpicture}
29
- \\end{document}
30
- EOF
17
+ add_tikz_options!(path, context)
31
18
 
32
- # Create a graphic from the commands in the body of the tag.
33
- def call(tag, body, context)
34
- path = param('tag.tikz.path')
35
- path = Webgen::Path.make_absolute(context.ref_node.parent.alcn, path)
19
+ node = context.website.ext.path_handler.create_secondary_nodes(path, body, 'copy', context.ref_node.alcn).first
36
20
 
37
- mem_handler = website.cache.instance('Webgen::SourceHandler::Memory')
38
- src_path = context.ref_node.node_info[:src]
39
- parent = website.blackboard.invoke(:create_directories, context.ref_node.tree.root, File.dirname(path), src_path)
40
- params = @params
41
-
42
- node = website.blackboard.invoke(:create_nodes, Webgen::Path.new(path, src_path), mem_handler) do |node_path|
43
- mem_handler.create_node(node_path, context.ref_node.alcn) do |pic_node|
44
- set_params(params)
45
- document = ERB.new(LATEX_TEMPLATE).result(binding)
46
- pic_path = compile(document, File.extname(path), context)
47
- set_params(nil)
48
- if pic_path
49
- io = Webgen::Path::SourceIO.new { File.open(pic_path, 'rb') }
50
- else
51
- pic_node.flag(:dirty)
52
- nil
53
- end
54
- end
55
- end.first
56
- attrs = {'alt' => ''}.merge(param('tag.tikz.img_attr')).collect {|name,value| "#{name.to_s}=\"#{value}\"" }.sort.unshift('').join(' ')
57
- "<img src=\"#{context.dest_node.route_to(node)}\"#{attrs} />"
58
- end
59
-
60
- #######
61
- private
62
- #######
63
-
64
- # Compile the LaTeX +document+ and convert the resulting PDF to the correct output image format
65
- # specified by +ext+ (the extension needs to include the dot).
66
- def compile(document, ext, context)
67
- file = Tempfile.new('webgen-tikz')
68
- file.write(document)
69
- file.close
70
-
71
- FileUtils.mv(file.path, file.path + '.tex')
72
- cmd_prefix = "cd #{File.dirname(file.path)}; "
73
- output = `#{cmd_prefix} pdflatex --shell-escape -interaction=batchmode #{File.basename(file.path)}.tex`
74
- if $?.exitstatus != 0
75
- errors = output.scan(/^!(.*\n.*)/).join("\n")
76
- raise Webgen::RenderError.new("Error while creating a TikZ picture: #{errors}",
77
- self.class.name, context.dest_node, context.ref_node)
78
- else
79
- cmd = cmd_prefix + "pdfcrop #{File.basename(file.path)}.pdf #{File.basename(file.path)}.pdf; "
80
- return unless run_command(cmd, context)
81
-
82
- render_res, output_res = param('tag.tikz.resolution').split(' ')
83
- if param('tag.tikz.transparent') && ext =~ /\.png/i
84
- cmd = cmd_prefix +
85
- "gs -dSAFER -dBATCH -dNOPAUSE -r#{render_res} -sDEVICE=pngalpha -dGraphicsAlphaBits=4 -dTextAlphaBits=4 " +
86
- "-sOutputFile=#{File.basename(file.path)}#{ext} #{File.basename(file.path)}.pdf"
87
- else
88
- cmd = cmd_prefix + "convert -density #{render_res} #{File.basename(file.path)}.pdf #{File.basename(file.path)}#{ext}"
89
- end
90
- return unless run_command(cmd, context)
21
+ attrs = {'alt' => ''}.merge(context[:config]['tag.tikz.img_attr']).collect do |name, value|
22
+ "#{name.to_s}=\"#{value}\""
23
+ end.sort.unshift('').join(' ')
24
+ "<img src=\"#{context.dest_node.route_to(node)}\"#{attrs} />"
25
+ end
91
26
 
92
- if render_res != output_res
93
- cmd = cmd_prefix + "identify #{File.basename(file.path)}#{ext}"
94
- return unless (output = run_command(cmd, context))
95
- width, height = output.scan(/\s\d+x\d+\s/).first.strip.split('x').collect {|s| s.to_f * output_res.to_f / render_res.to_f }
96
- cmd = cmd_prefix + "convert -resize #{width}x#{height} #{File.basename(file.path)}#{ext} #{File.basename(file.path)}#{ext}"
97
- return unless run_command(cmd, context)
27
+ # Add all needed options for Webgen::ContentProcessor::Tikz to the given path.
28
+ def self.add_tikz_options!(path, context)
29
+ %w[content_processor.tikz.resolution content_processor.tikz.transparent
30
+ content_processor.tikz.libraries content_processor.tikz.opts].each do |opt|
31
+ path.meta_info[opt] = context[:config][opt]
98
32
  end
99
- file.path + ext
33
+ path.meta_info['pipeline'] = 'tikz'
100
34
  end
101
- end
35
+ private_class_method :add_tikz_options!
102
36
 
103
- # Runs the command +cmd+ and returns it's output if successful or +nil+ otherwise.
104
- def run_command(cmd, context)
105
- output = `#{cmd}`
106
- if $?.exitstatus != 0
107
- raise Webgen::RenderError.new("Error while running a command for a TikZ picture: #{output}",
108
- self.class.name, context.dest_node, context.ref_node)
109
- else
110
- output
111
- end
112
37
  end
113
38
 
114
39
  end
115
-
116
40
  end
@@ -0,0 +1,99 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/extension_manager'
4
+
5
+ module Webgen
6
+
7
+ # Namespace for all tasks.
8
+ #
9
+ # == About
10
+ #
11
+ # Tasks provide the main entrance point for doing things with a website, like creating it,
12
+ # generating it, and much more.
13
+ #
14
+ # == Implementing a task
15
+ #
16
+ # A task object only needs to respond to one method called +call+ which takes the website as first
17
+ # parameter and may take an arbitrary number of additional arguments. The method should return
18
+ # +true+ if the task was executed sucessfully or else +false+.
19
+ #
20
+ # Due to this there are basically two ways to implement a task since: Either as a class with a
21
+ # class method called +call+. Or as a Proc object.
22
+ #
23
+ # If the task needs to be configured to work correctly, use additional parameters or configuration
24
+ # options.
25
+ #
26
+ # The task has to be registered so that webgen knows about it, see #register for more information.
27
+ #
28
+ # == Sample Task
29
+ #
30
+ # The following sample task just outputs the value of its configuration option:
31
+ #
32
+ # class OutputTask
33
+ #
34
+ # def self.call(website, options)
35
+ # website.logger.vinfo("The output task configuration value follows")
36
+ # website.logger.info(website.config['task.output.option'])
37
+ # true
38
+ # end
39
+ #
40
+ # end
41
+ #
42
+ # website.config.define_option('task.output.option', nil, 'The configuration option')
43
+ # website.ext.task.register OutputTask, :name => 'output'
44
+ #
45
+ class Task
46
+
47
+ include Webgen::ExtensionManager
48
+
49
+ # Create a new task manager for the given website.
50
+ def initialize(website)
51
+ super()
52
+ @website = website
53
+ end
54
+
55
+ # Register a task.
56
+ #
57
+ # The parameter +klass+ can either be a String containing the name of a class/module (which has
58
+ # to respond to :call) or an object that responds to :call. If the class is located under this
59
+ # namespace, only the class name without the hierarchy part is needed, otherwise the full
60
+ # class/module name including parent module/class names is needed.
61
+ #
62
+ # Instead of registering an object that responds to :call, you can also provide a block.
63
+ #
64
+ # === Options:
65
+ #
66
+ # [:name] The name for the task. If not set, it defaults to the snake-case version of the class
67
+ # name (without the hierarchy part). It should only contain letters.
68
+ #
69
+ # [:data] Associates arbitrary data with the task object. This data can be retrieved using the
70
+ # #data method.
71
+ #
72
+ # === Examples:
73
+ #
74
+ # task.register('CreateWebsite') # registers Webgen::Task::CreateWebsite
75
+ #
76
+ # task.register('::CreateWebsite') # registers CreateWebsite !!!
77
+ #
78
+ # task.register('doit') do |website|
79
+ # # task commands go here
80
+ # end
81
+ #
82
+ def register(klass, options={}, &block)
83
+ name = do_register(klass, options, true, &block)
84
+ ext_data(name).data = options[:data]
85
+ end
86
+
87
+ # Execute the task identified by the given name.
88
+ def execute(name, *options)
89
+ extension(name).call(@website, *options)
90
+ end
91
+
92
+ # Return the task data for the given task.
93
+ def data(name)
94
+ ext_data(name).data
95
+ end
96
+
97
+ end
98
+
99
+ end
@@ -0,0 +1,73 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/task'
4
+ require 'webgen/utils'
5
+ require 'fileutils'
6
+
7
+ module Webgen
8
+ class Task
9
+
10
+ # Creates an extension bundle.
11
+ #
12
+ # An extension bundle is a collection of webgen extensions. This task can either create a local
13
+ # bundle (in the +ext+ directory of the current website) or a bundle which can be distributed
14
+ # via Rubygems.
15
+ #
16
+ module CreateBundle
17
+
18
+ TEMPLATE_DIR = 'bundle_template_files'
19
+
20
+ # Create an extension bundle with the given name and of the given type (either :local or :gem).
21
+ #
22
+ # If the type is :gem, the directory in which the bundle should be created can optionally be
23
+ # specified.
24
+ #
25
+ # Returns +true+ if the bundle has been created.
26
+ def self.call(website, name, type, directory = name)
27
+ dir = if type == :gem
28
+ create_distribution_bundle(website, directory, name)
29
+ else
30
+ create_local_bundle(website, name)
31
+ end
32
+ website.logger.info { "Bundle '#{name}' of type '#{type}' created at <#{dir}>" }
33
+
34
+ true
35
+ end
36
+
37
+ def self.create_distribution_bundle(website, directory, bundle_name) #:nodoc:
38
+ bundle_dir = File.join(directory, 'lib', 'webgen', 'bundle', bundle_name)
39
+
40
+ create_directory(directory)
41
+ create_directory(bundle_dir)
42
+ create_file(File.join(directory, 'Rakefile'), 'Rakefile.erb', bundle_name)
43
+ create_file(File.join(directory, 'README.md'), 'README.md.erb', bundle_name)
44
+ create_file(File.join(bundle_dir, 'info.yaml'), 'info.yaml.erb', bundle_name)
45
+ create_file(File.join(bundle_dir, 'init.rb'), 'init.rb.erb', bundle_name)
46
+ directory
47
+ end
48
+
49
+ def self.create_local_bundle(website, bundle_name) #:nodoc:
50
+ bundle_dir = File.join(website.directory, 'ext', bundle_name)
51
+
52
+ create_directory(bundle_dir)
53
+ create_file(File.join(bundle_dir, 'info.yaml'), 'info.yaml.erb', bundle_name)
54
+ create_file(File.join(bundle_dir, 'init.rb'), 'init.rb.erb', bundle_name)
55
+ bundle_dir
56
+ end
57
+
58
+ def self.create_directory(dir) #:nodoc:
59
+ raise "The directory '#{dir}' does already exist" if File.exist?(dir)
60
+ FileUtils.mkdir_p(dir)
61
+ end
62
+
63
+ def self.create_file(dest, source, bundle_name) #:nodoc:
64
+ File.open(dest, 'w+') do |f|
65
+ erb = ERB.new(File.read(File.join(Webgen::Utils.data_dir, TEMPLATE_DIR, source)))
66
+ f.write(erb.result(binding))
67
+ end
68
+ end
69
+
70
+ end
71
+
72
+ end
73
+ end
@@ -0,0 +1,94 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/website'
4
+ require 'webgen/task'
5
+ require 'webgen/error'
6
+ require 'tmpdir'
7
+
8
+ module Webgen
9
+ class Task
10
+
11
+ #
12
+ # == About
13
+ #
14
+ # Creates the website.
15
+ #
16
+ # This task assumes that the website directory does not exist and populates it from a specified
17
+ # template. webgen extensions can provide additional website templates, see below.
18
+ #
19
+ # For each created file a verbose log message is recorded in the format used when webgen
20
+ # generates a website (because, actually, webgen's website generating facilities are used to
21
+ # create the website structure).
22
+ #
23
+ # == Creating a website template
24
+ #
25
+ # A website template is just a directory holding all the files necessary for a webgen website
26
+ # and therefore looks very similar to an actual webgen website directory. However, the template
27
+ # is not just copied but processed ('generated') by webgen itself.
28
+ #
29
+ # What this means is:
30
+ #
31
+ # * A Webgen::Website object is created for a temporary directory.
32
+ # * The 'destination' configuration option is set to the to-be-created website directory (ie. to
33
+ # Website#directory of the current website).
34
+ # * The 'sources' configuration option is set to use the website template directory.
35
+ # * All path handlers are deactivated except Webgen::PathHandler::Copy and the latter is used
36
+ # for processing all source paths.
37
+ #
38
+ # Thus one can use Erb or any other supported content processor to customize the generated
39
+ # files!
40
+ #
41
+ # Once a website template has been created, it needs to be registered with a template name, like
42
+ # this:
43
+ #
44
+ # website.ext.task.data(:create_website)[:templates][TEMPLATE_NAME] = ABSOLUTE_DIR_PATH
45
+ #
46
+ module CreateWebsite
47
+
48
+ # This error is raised when there is a problem creating the website.
49
+ class Error < Webgen::Error; end
50
+
51
+ # Create the website from the given template.
52
+ #
53
+ # This actually uses webgen's file copying/generating facilities to populate the website
54
+ # directory. Kind of bootstrapping really.
55
+ #
56
+ # Returns +true+ if the website has been created.
57
+ def self.call(website, template = nil)
58
+ if File.exists?(website.directory)
59
+ raise Error.new("Directory <#{website.directory}> does already exist!")
60
+ end
61
+ if template && !website.ext.task.data(:create_website)[:templates].has_key?(template)
62
+ raise Error.new("Unknown template '#{template}' specified!")
63
+ end
64
+
65
+ begin
66
+ Dir.mktmpdir do |tmpdir|
67
+ ws = Webgen::Website.new(tmpdir) do |ws|
68
+ ws.config['sources'] = [['/', :file_system, File.join(Webgen::Utils.data_dir, 'basic_website_template')]]
69
+ if template
70
+ ws.config['sources'] = [(['/', :file_system, website.ext.task.data(:create_website)[:templates][template]])]
71
+ end
72
+ ws.config['destination'] = [:file_system, File.expand_path(website.directory)]
73
+ ws.ext.path_handler.registered_extensions.each do |name, data|
74
+ data.patterns = []
75
+ end
76
+ ws.ext.path_handler.registered_extensions[:copy].patterns = ['**/*', '**/']
77
+ ws.logger.level = ::Logger::INFO
78
+ ws.logger.formatter = Proc.new do |severity, timestamp, progname, msg|
79
+ website.logger.vinfo(msg) if msg =~ /\[create\]/
80
+ end
81
+ end
82
+ ws.execute_task(:generate_website)
83
+ end
84
+ rescue Webgen::Error => e
85
+ raise Error.new("Could not create website from template: #{e.message}")
86
+ end
87
+
88
+ true
89
+ end
90
+
91
+ end
92
+
93
+ end
94
+ end