webgen 0.5.17 → 1.0.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (408) hide show
  1. data/API.rdoc +143 -0
  2. data/AUTHORS +0 -1
  3. data/COPYING +17 -8
  4. data/ChangeLog +4456 -0
  5. data/GPL +623 -289
  6. data/README.md +71 -0
  7. data/Rakefile +87 -99
  8. data/VERSION +1 -1
  9. data/bin/webgen +1 -7
  10. data/data/webgen/basic_website_template/ext/init.rb +15 -0
  11. data/data/webgen/basic_website_template/webgen.config +18 -0
  12. data/data/webgen/bundle_template_files/README.md.erb +24 -0
  13. data/data/webgen/bundle_template_files/Rakefile.erb +36 -0
  14. data/data/webgen/bundle_template_files/info.yaml.erb +16 -0
  15. data/data/webgen/bundle_template_files/init.rb.erb +1 -0
  16. data/data/webgen/passive_sources/default.metainfo +32 -0
  17. data/data/webgen/passive_sources/stylesheets/coderay-default.css +109 -118
  18. data/data/webgen/passive_sources/templates/feed.template +62 -0
  19. data/data/webgen/passive_sources/templates/sitemap.template +3 -6
  20. data/data/webgen/passive_sources/templates/tag.template +42 -0
  21. data/data/webgen/website_bundles/default/README +2 -2
  22. data/lib/webgen/blackboard.rb +15 -51
  23. data/lib/webgen/bundle/built-in-show-changes/init.rb +54 -0
  24. data/lib/webgen/bundle/built-in/init.rb +366 -0
  25. data/lib/webgen/bundle_loader.rb +126 -0
  26. data/lib/webgen/cache.rb +9 -18
  27. data/lib/webgen/cli.rb +131 -58
  28. data/lib/webgen/cli/bundle_command.rb +30 -0
  29. data/lib/webgen/cli/create_bundle_command.rb +46 -0
  30. data/lib/webgen/cli/create_command.rb +48 -60
  31. data/lib/webgen/cli/generate_command.rb +25 -0
  32. data/lib/webgen/cli/install_bundle_command.rb +34 -0
  33. data/lib/webgen/cli/list_bundle_command.rb +108 -0
  34. data/lib/webgen/cli/logger.rb +45 -0
  35. data/lib/webgen/cli/show_command.rb +30 -0
  36. data/lib/webgen/cli/show_config_command.rb +63 -0
  37. data/lib/webgen/cli/show_dependencies_command.rb +103 -0
  38. data/lib/webgen/cli/show_extensions_command.rb +74 -0
  39. data/lib/webgen/cli/utils.rb +68 -95
  40. data/lib/webgen/configuration.rb +143 -105
  41. data/lib/webgen/content_processor.rb +160 -0
  42. data/lib/webgen/content_processor/blocks.rb +96 -0
  43. data/lib/webgen/content_processor/builder.rb +25 -0
  44. data/lib/webgen/content_processor/erb.rb +25 -0
  45. data/lib/webgen/content_processor/erubis.rb +31 -0
  46. data/lib/webgen/content_processor/fragments.rb +82 -0
  47. data/lib/webgen/content_processor/haml.rb +25 -0
  48. data/lib/webgen/content_processor/html_head.rb +157 -0
  49. data/lib/webgen/content_processor/kramdown.rb +49 -0
  50. data/lib/webgen/content_processor/maruku.rb +39 -0
  51. data/lib/webgen/content_processor/r_discount.rb +21 -0
  52. data/lib/webgen/content_processor/rdoc.rb +22 -0
  53. data/lib/webgen/content_processor/redcloth.rb +23 -0
  54. data/lib/webgen/content_processor/ruby.rb +20 -0
  55. data/lib/webgen/content_processor/sass.rb +145 -0
  56. data/lib/webgen/content_processor/scss.rb +23 -0
  57. data/lib/webgen/content_processor/tags.rb +30 -0
  58. data/lib/webgen/content_processor/tidy.rb +32 -0
  59. data/lib/webgen/content_processor/tikz.rb +116 -0
  60. data/lib/webgen/content_processor/xmllint.rb +31 -0
  61. data/lib/webgen/context.rb +57 -29
  62. data/lib/webgen/context/html_head.rb +60 -0
  63. data/lib/webgen/context/nodes.rb +32 -27
  64. data/lib/webgen/context/rendering.rb +39 -0
  65. data/lib/webgen/context/webgen_tags.rb +25 -0
  66. data/lib/webgen/core_ext.rb +25 -0
  67. data/lib/webgen/destination.rb +151 -0
  68. data/lib/webgen/destination/file_system.rb +62 -0
  69. data/lib/webgen/error.rb +59 -49
  70. data/lib/webgen/extension_manager.rb +121 -0
  71. data/lib/webgen/item_tracker.rb +237 -0
  72. data/lib/webgen/item_tracker/file.rb +39 -0
  73. data/lib/webgen/item_tracker/missing_node.rb +61 -0
  74. data/lib/webgen/item_tracker/node_content.rb +40 -0
  75. data/lib/webgen/item_tracker/node_meta_info.rb +53 -0
  76. data/lib/webgen/item_tracker/nodes.rb +92 -0
  77. data/lib/webgen/logger.rb +26 -82
  78. data/lib/webgen/node.rb +122 -367
  79. data/lib/webgen/node_finder.rb +336 -0
  80. data/lib/webgen/page.rb +48 -85
  81. data/lib/webgen/path.rb +218 -156
  82. data/lib/webgen/path_handler.rb +400 -0
  83. data/lib/webgen/path_handler/base.rb +220 -0
  84. data/lib/webgen/path_handler/copy.rb +78 -0
  85. data/lib/webgen/path_handler/directory.rb +21 -0
  86. data/lib/webgen/path_handler/feed.rb +82 -0
  87. data/lib/webgen/path_handler/meta_info.rb +84 -0
  88. data/lib/webgen/path_handler/page.rb +38 -0
  89. data/lib/webgen/path_handler/page_utils.rb +79 -0
  90. data/lib/webgen/path_handler/sitemap.rb +52 -0
  91. data/lib/webgen/path_handler/template.rb +96 -0
  92. data/lib/webgen/path_handler/virtual.rb +85 -0
  93. data/lib/webgen/{webgentask.rb → rake_task.rb} +31 -27
  94. data/lib/webgen/source.rb +106 -24
  95. data/lib/webgen/source/file_system.rb +41 -0
  96. data/lib/webgen/source/stacked.rb +49 -53
  97. data/lib/webgen/source/tar_archive.rb +59 -0
  98. data/lib/webgen/tag.rb +250 -19
  99. data/lib/webgen/tag/breadcrumb_trail.rb +65 -0
  100. data/lib/webgen/tag/coderay.rb +32 -35
  101. data/lib/webgen/tag/date.rb +9 -9
  102. data/lib/webgen/tag/execute_command.rb +31 -0
  103. data/lib/webgen/tag/include_file.rb +32 -0
  104. data/lib/webgen/tag/langbar.rb +31 -47
  105. data/lib/webgen/tag/link.rb +17 -18
  106. data/lib/webgen/tag/menu.rb +27 -189
  107. data/lib/webgen/tag/meta_info.rb +31 -0
  108. data/lib/webgen/tag/relocatable.rb +48 -39
  109. data/lib/webgen/tag/tikz.rb +24 -100
  110. data/lib/webgen/task.rb +99 -0
  111. data/lib/webgen/task/create_bundle.rb +73 -0
  112. data/lib/webgen/task/create_website.rb +94 -0
  113. data/lib/webgen/task/generate_website.rb +47 -0
  114. data/lib/webgen/test_helper.rb +183 -0
  115. data/lib/webgen/tree.rb +95 -46
  116. data/lib/webgen/utils.rb +39 -0
  117. data/lib/webgen/utils/external_command.rb +27 -0
  118. data/lib/webgen/utils/tag_parser.rb +124 -0
  119. data/lib/webgen/version.rb +1 -1
  120. data/lib/webgen/website.rb +134 -296
  121. data/setup.rb +1 -1
  122. data/test/test_documentation.rb +43 -0
  123. data/test/webgen/cli/test_logger.rb +41 -0
  124. data/test/{test_contentprocessor_blocks.rb → webgen/content_processor/test_blocks.rb} +30 -28
  125. data/test/webgen/content_processor/test_builder.rb +25 -0
  126. data/test/webgen/content_processor/test_erb.rb +21 -0
  127. data/test/webgen/content_processor/test_erubis.rb +33 -0
  128. data/test/webgen/content_processor/test_fragments.rb +96 -0
  129. data/test/webgen/content_processor/test_haml.rb +24 -0
  130. data/test/webgen/content_processor/test_html_head.rb +78 -0
  131. data/test/webgen/content_processor/test_kramdown.rb +49 -0
  132. data/test/webgen/content_processor/test_maruku.rb +30 -0
  133. data/test/webgen/content_processor/test_r_discount.rb +18 -0
  134. data/test/webgen/content_processor/test_rdoc.rb +18 -0
  135. data/test/webgen/content_processor/test_redcloth.rb +23 -0
  136. data/test/webgen/content_processor/test_ruby.rb +24 -0
  137. data/test/webgen/content_processor/test_sass.rb +44 -0
  138. data/test/webgen/content_processor/test_scss.rb +23 -0
  139. data/test/webgen/content_processor/test_tags.rb +44 -0
  140. data/test/webgen/content_processor/test_tidy.rb +31 -0
  141. data/test/webgen/content_processor/test_tikz.rb +33 -0
  142. data/test/webgen/content_processor/test_xmllint.rb +32 -0
  143. data/test/webgen/destination/test_file_system.rb +54 -0
  144. data/test/webgen/item_tracker/test_file.rb +31 -0
  145. data/test/webgen/item_tracker/test_missing_node.rb +70 -0
  146. data/test/webgen/item_tracker/test_node_content.rb +42 -0
  147. data/test/webgen/item_tracker/test_node_meta_info.rb +44 -0
  148. data/test/webgen/item_tracker/test_nodes.rb +61 -0
  149. data/test/webgen/path_handler/test_base.rb +153 -0
  150. data/test/webgen/path_handler/test_copy.rb +56 -0
  151. data/test/webgen/path_handler/test_feed.rb +85 -0
  152. data/test/webgen/path_handler/test_meta_info.rb +98 -0
  153. data/test/webgen/path_handler/test_page.rb +25 -0
  154. data/test/webgen/path_handler/test_page_utils.rb +59 -0
  155. data/test/webgen/path_handler/test_sitemap.rb +95 -0
  156. data/test/webgen/path_handler/test_template.rb +64 -0
  157. data/test/webgen/path_handler/test_virtual.rb +87 -0
  158. data/test/webgen/source/test_file_system.rb +51 -0
  159. data/test/webgen/source/test_stacked.rb +35 -0
  160. data/test/{test_source_tararchive.rb → webgen/source/test_tar_archive.rb} +10 -25
  161. data/test/webgen/tag/test_breadcrumb_trail.rb +66 -0
  162. data/test/webgen/tag/test_coderay.rb +34 -0
  163. data/test/webgen/tag/test_date.rb +18 -0
  164. data/test/webgen/tag/test_execute_command.rb +36 -0
  165. data/test/webgen/tag/test_include_file.rb +35 -0
  166. data/test/webgen/tag/test_langbar.rb +50 -0
  167. data/test/webgen/tag/test_link.rb +40 -0
  168. data/test/webgen/tag/test_menu.rb +61 -0
  169. data/test/webgen/tag/test_meta_info.rb +25 -0
  170. data/test/webgen/tag/test_relocatable.rb +50 -0
  171. data/test/webgen/tag/test_tikz.rb +41 -0
  172. data/test/webgen/task/test_create_website.rb +46 -0
  173. data/test/webgen/test_blackboard.rb +31 -0
  174. data/test/webgen/test_bundle_loader.rb +55 -0
  175. data/test/{test_cache.rb → webgen/test_cache.rb} +3 -15
  176. data/test/webgen/test_cli.rb +41 -0
  177. data/test/webgen/test_configuration.rb +131 -0
  178. data/test/webgen/test_content_processor.rb +86 -0
  179. data/test/webgen/test_context.rb +73 -0
  180. data/test/webgen/test_core_ext.rb +20 -0
  181. data/test/webgen/test_destination.rb +48 -0
  182. data/test/webgen/test_error.rb +121 -0
  183. data/test/webgen/test_extension_manager.rb +70 -0
  184. data/test/webgen/test_item_tracker.rb +106 -0
  185. data/test/{test_languages.rb → webgen/test_languages.rb} +4 -4
  186. data/test/webgen/test_logger.rb +46 -0
  187. data/test/webgen/test_node.rb +178 -0
  188. data/test/webgen/test_node_finder.rb +127 -0
  189. data/test/{test_page.rb → webgen/test_page.rb} +44 -48
  190. data/test/webgen/test_path.rb +271 -0
  191. data/test/{test_webgentask.rb → webgen/test_rake_task.rb} +4 -4
  192. data/test/webgen/test_source.rb +59 -0
  193. data/test/webgen/test_tag.rb +137 -0
  194. data/test/webgen/test_task.rb +40 -0
  195. data/test/webgen/test_tree.rb +147 -0
  196. data/test/webgen/test_utils.rb +16 -0
  197. data/test/webgen/test_website.rb +45 -0
  198. data/test/webgen/utils/test_tag_parser.rb +99 -0
  199. metadata +292 -344
  200. data/data/webgen/passive_sources/templates/atom_feed.template +0 -39
  201. data/data/webgen/passive_sources/templates/rss_feed.template +0 -28
  202. data/data/webgen/resources.yaml +0 -4
  203. data/data/webgen/webgui/app.rb +0 -11
  204. data/data/webgen/webgui/controller/main.rb +0 -135
  205. data/data/webgen/webgui/layout/default.xhtml +0 -40
  206. data/data/webgen/webgui/overrides/win32console.rb +0 -0
  207. data/data/webgen/webgui/public/css/jquery.autocomplete.css +0 -50
  208. data/data/webgen/webgui/public/css/ramaze_error.css +0 -90
  209. data/data/webgen/webgui/public/css/style.css +0 -55
  210. data/data/webgen/webgui/public/img/headerbg.jpg +0 -0
  211. data/data/webgen/webgui/public/img/webgen_logo.png +0 -0
  212. data/data/webgen/webgui/public/js/jquery.autocomplete.js +0 -15
  213. data/data/webgen/webgui/public/js/jquery.js +0 -32
  214. data/data/webgen/webgui/start.rb +0 -9
  215. data/data/webgen/webgui/view/create_website.xhtml +0 -14
  216. data/data/webgen/webgui/view/error.xhtml +0 -64
  217. data/data/webgen/webgui/view/index.xhtml +0 -22
  218. data/data/webgen/webgui/view/manage_website.xhtml +0 -18
  219. data/data/webgen/website_skeleton/README +0 -10
  220. data/data/webgen/website_skeleton/Rakefile +0 -69
  221. data/data/webgen/website_skeleton/config.yaml +0 -35
  222. data/data/webgen/website_skeleton/ext/init.rb +0 -10
  223. data/doc/contentprocessor.template +0 -11
  224. data/doc/contentprocessor/blocks.page +0 -129
  225. data/doc/contentprocessor/builder.page +0 -79
  226. data/doc/contentprocessor/erb.page +0 -60
  227. data/doc/contentprocessor/erubis.page +0 -46
  228. data/doc/contentprocessor/fragments.page +0 -26
  229. data/doc/contentprocessor/haml.page +0 -46
  230. data/doc/contentprocessor/head.page +0 -31
  231. data/doc/contentprocessor/kramdown.page +0 -49
  232. data/doc/contentprocessor/less.page +0 -34
  233. data/doc/contentprocessor/maruku.page +0 -44
  234. data/doc/contentprocessor/rdiscount.page +0 -37
  235. data/doc/contentprocessor/rdoc.page +0 -36
  236. data/doc/contentprocessor/redcloth.page +0 -41
  237. data/doc/contentprocessor/sass.page +0 -31
  238. data/doc/contentprocessor/scss.page +0 -39
  239. data/doc/contentprocessor/tags.page +0 -73
  240. data/doc/contentprocessor/tidy.page +0 -14
  241. data/doc/contentprocessor/xmllint.page +0 -14
  242. data/doc/extensions.metainfo +0 -29
  243. data/doc/extensions.page +0 -15
  244. data/doc/extensions.template +0 -17
  245. data/doc/faq.page +0 -222
  246. data/doc/getting_started.page +0 -135
  247. data/doc/index.page +0 -71
  248. data/doc/manual.page +0 -727
  249. data/doc/reference_configuration.page +0 -1254
  250. data/doc/reference_metainfo.page +0 -265
  251. data/doc/reference_website_styles.page +0 -32
  252. data/doc/source/filesystem.page +0 -41
  253. data/doc/source/tararchive.page +0 -40
  254. data/doc/sourcehandler.template +0 -23
  255. data/doc/sourcehandler/copy.page +0 -19
  256. data/doc/sourcehandler/directory.page +0 -27
  257. data/doc/sourcehandler/feed.page +0 -102
  258. data/doc/sourcehandler/metainfo.page +0 -48
  259. data/doc/sourcehandler/page.page +0 -14
  260. data/doc/sourcehandler/sitemap.page +0 -46
  261. data/doc/sourcehandler/template.page +0 -45
  262. data/doc/sourcehandler/virtual.page +0 -49
  263. data/doc/tag.template +0 -25
  264. data/doc/tag/breadcrumbtrail.page +0 -40
  265. data/doc/tag/coderay.page +0 -53
  266. data/doc/tag/date.page +0 -31
  267. data/doc/tag/executecommand.page +0 -26
  268. data/doc/tag/includefile.page +0 -32
  269. data/doc/tag/langbar.page +0 -47
  270. data/doc/tag/link.page +0 -44
  271. data/doc/tag/menu.page +0 -109
  272. data/doc/tag/metainfo.page +0 -29
  273. data/doc/tag/relocatable.page +0 -38
  274. data/doc/tag/sitemap.page +0 -31
  275. data/doc/tag/tikz.page +0 -159
  276. data/doc/upgrading.page +0 -138
  277. data/doc/webgen_page_format.page +0 -129
  278. data/doc/website_styles.metainfo +0 -8
  279. data/lib/webgen/cli/apply_command.rb +0 -66
  280. data/lib/webgen/cli/run_command.rb +0 -22
  281. data/lib/webgen/cli/webgui_command.rb +0 -68
  282. data/lib/webgen/common.rb +0 -27
  283. data/lib/webgen/common/sitemap.rb +0 -83
  284. data/lib/webgen/contentprocessor.rb +0 -117
  285. data/lib/webgen/contentprocessor/blocks.rb +0 -92
  286. data/lib/webgen/contentprocessor/builder.rb +0 -29
  287. data/lib/webgen/contentprocessor/erb.rb +0 -26
  288. data/lib/webgen/contentprocessor/erubis.rb +0 -39
  289. data/lib/webgen/contentprocessor/fragments.rb +0 -25
  290. data/lib/webgen/contentprocessor/haml.rb +0 -34
  291. data/lib/webgen/contentprocessor/head.rb +0 -128
  292. data/lib/webgen/contentprocessor/kramdown.rb +0 -27
  293. data/lib/webgen/contentprocessor/kramdown/html.rb +0 -36
  294. data/lib/webgen/contentprocessor/less.rb +0 -35
  295. data/lib/webgen/contentprocessor/maruku.rb +0 -36
  296. data/lib/webgen/contentprocessor/rdiscount.rb +0 -19
  297. data/lib/webgen/contentprocessor/rdoc.rb +0 -20
  298. data/lib/webgen/contentprocessor/redcloth.rb +0 -21
  299. data/lib/webgen/contentprocessor/sass.rb +0 -22
  300. data/lib/webgen/contentprocessor/scss.rb +0 -22
  301. data/lib/webgen/contentprocessor/tags.rb +0 -170
  302. data/lib/webgen/contentprocessor/tidy.rb +0 -38
  303. data/lib/webgen/contentprocessor/xmllint.rb +0 -37
  304. data/lib/webgen/context/render.rb +0 -32
  305. data/lib/webgen/context/tags.rb +0 -20
  306. data/lib/webgen/coreext.rb +0 -13
  307. data/lib/webgen/default_config.rb +0 -240
  308. data/lib/webgen/loggable.rb +0 -25
  309. data/lib/webgen/output.rb +0 -86
  310. data/lib/webgen/output/filesystem.rb +0 -69
  311. data/lib/webgen/source/filesystem.rb +0 -61
  312. data/lib/webgen/source/resource.rb +0 -45
  313. data/lib/webgen/source/tararchive.rb +0 -78
  314. data/lib/webgen/sourcehandler.rb +0 -275
  315. data/lib/webgen/sourcehandler/base.rb +0 -281
  316. data/lib/webgen/sourcehandler/copy.rb +0 -44
  317. data/lib/webgen/sourcehandler/directory.rb +0 -30
  318. data/lib/webgen/sourcehandler/feed.rb +0 -92
  319. data/lib/webgen/sourcehandler/fragment.rb +0 -70
  320. data/lib/webgen/sourcehandler/memory.rb +0 -42
  321. data/lib/webgen/sourcehandler/metainfo.rb +0 -128
  322. data/lib/webgen/sourcehandler/page.rb +0 -64
  323. data/lib/webgen/sourcehandler/sitemap.rb +0 -60
  324. data/lib/webgen/sourcehandler/template.rb +0 -66
  325. data/lib/webgen/sourcehandler/virtual.rb +0 -117
  326. data/lib/webgen/tag/base.rb +0 -170
  327. data/lib/webgen/tag/breadcrumbtrail.rb +0 -70
  328. data/lib/webgen/tag/executecommand.rb +0 -31
  329. data/lib/webgen/tag/includefile.rb +0 -42
  330. data/lib/webgen/tag/metainfo.rb +0 -27
  331. data/lib/webgen/tag/sitemap.rb +0 -41
  332. data/lib/webgen/websiteaccess.rb +0 -31
  333. data/lib/webgen/websitemanager.rb +0 -125
  334. data/misc/default.css +0 -403
  335. data/misc/default.template +0 -76
  336. data/misc/htmldoc.metainfo +0 -26
  337. data/misc/htmldoc.virtual +0 -17
  338. data/misc/images/arrow.gif +0 -0
  339. data/misc/images/error.png +0 -0
  340. data/misc/images/headerbg.jpg +0 -0
  341. data/misc/images/important.png +0 -0
  342. data/misc/images/information.png +0 -0
  343. data/misc/images/quote.gif +0 -0
  344. data/misc/images/warning.png +0 -0
  345. data/misc/logo.svg +0 -313
  346. data/misc/style.page +0 -33
  347. data/test/helper.rb +0 -61
  348. data/test/test_blackboard.rb +0 -60
  349. data/test/test_cli.rb +0 -119
  350. data/test/test_common_sitemap.rb +0 -58
  351. data/test/test_configuration.rb +0 -68
  352. data/test/test_contentprocessor.rb +0 -39
  353. data/test/test_contentprocessor_builder.rb +0 -41
  354. data/test/test_contentprocessor_erb.rb +0 -33
  355. data/test/test_contentprocessor_erubis.rb +0 -62
  356. data/test/test_contentprocessor_fragments.rb +0 -43
  357. data/test/test_contentprocessor_haml.rb +0 -39
  358. data/test/test_contentprocessor_head.rb +0 -96
  359. data/test/test_contentprocessor_kramdown.rb +0 -56
  360. data/test/test_contentprocessor_less.rb +0 -40
  361. data/test/test_contentprocessor_maruku.rb +0 -33
  362. data/test/test_contentprocessor_rdiscount.rb +0 -21
  363. data/test/test_contentprocessor_rdoc.rb +0 -22
  364. data/test/test_contentprocessor_redcloth.rb +0 -26
  365. data/test/test_contentprocessor_sass.rb +0 -28
  366. data/test/test_contentprocessor_scss.rb +0 -28
  367. data/test/test_contentprocessor_tags.rb +0 -122
  368. data/test/test_contentprocessor_tidy.rb +0 -34
  369. data/test/test_contentprocessor_xmllint.rb +0 -38
  370. data/test/test_context.rb +0 -81
  371. data/test/test_error.rb +0 -93
  372. data/test/test_loggable.rb +0 -32
  373. data/test/test_logger.rb +0 -94
  374. data/test/test_node.rb +0 -469
  375. data/test/test_output_filesystem.rb +0 -60
  376. data/test/test_path.rb +0 -241
  377. data/test/test_source_filesystem.rb +0 -76
  378. data/test/test_source_resource.rb +0 -28
  379. data/test/test_source_stacked.rb +0 -49
  380. data/test/test_sourcehandler_base.rb +0 -136
  381. data/test/test_sourcehandler_copy.rb +0 -47
  382. data/test/test_sourcehandler_directory.rb +0 -38
  383. data/test/test_sourcehandler_feed.rb +0 -88
  384. data/test/test_sourcehandler_fragment.rb +0 -70
  385. data/test/test_sourcehandler_main.rb +0 -39
  386. data/test/test_sourcehandler_memory.rb +0 -44
  387. data/test/test_sourcehandler_metainfo.rb +0 -127
  388. data/test/test_sourcehandler_page.rb +0 -73
  389. data/test/test_sourcehandler_sitemap.rb +0 -68
  390. data/test/test_sourcehandler_template.rb +0 -68
  391. data/test/test_sourcehandler_virtual.rb +0 -106
  392. data/test/test_tag_base.rb +0 -62
  393. data/test/test_tag_breadcrumbtrail.rb +0 -91
  394. data/test/test_tag_coderay.rb +0 -45
  395. data/test/test_tag_date.rb +0 -18
  396. data/test/test_tag_executecommand.rb +0 -41
  397. data/test/test_tag_includefile.rb +0 -50
  398. data/test/test_tag_langbar.rb +0 -71
  399. data/test/test_tag_link.rb +0 -70
  400. data/test/test_tag_menu.rb +0 -207
  401. data/test/test_tag_metainfo.rb +0 -26
  402. data/test/test_tag_relocatable.rb +0 -60
  403. data/test/test_tag_sitemap.rb +0 -47
  404. data/test/test_tag_tikz.rb +0 -69
  405. data/test/test_tree.rb +0 -70
  406. data/test/test_website.rb +0 -130
  407. data/test/test_websiteaccess.rb +0 -25
  408. data/test/test_websitemanager.rb +0 -65
@@ -1,70 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- module Webgen::SourceHandler
4
-
5
- # Handles page fragment nodes and provides utility methods for parsing HTML headers and generating
6
- # fragment nodes from them.
7
- class Fragment
8
-
9
- include Base
10
- include Webgen::WebsiteAccess
11
-
12
- HTML_HEADER_REGEXP = /<h([123456])(?:>|\s([^>]*)>)(.*?)<\/h\1\s*>/i
13
- HTML_ATTR_REGEXP = /\s*(\w+)\s*=\s*('|")(.+?)\2\s*/
14
-
15
- # Parse the string +content+ for headers +h1+, ..., +h6+ and return the found, nested sections.
16
- #
17
- # Only those headers are used which have an +id+ attribute set. The method returns a list of
18
- # arrays with entries <tt>level, id, title, sub sections</tt> where <tt>sub sections</tt> is
19
- # such a list again.
20
- def parse_html_headers(content)
21
- sections = []
22
- stack = []
23
- content.scan(HTML_HEADER_REGEXP).each do |level,attrs,title|
24
- next if attrs.nil?
25
- id_attr = attrs.scan(HTML_ATTR_REGEXP).find {|name,sep,value| name == 'id'}
26
- next if id_attr.nil?
27
- id = id_attr[2]
28
-
29
- section = [level.to_i, id, title, []]
30
- success = false
31
- while !success
32
- if stack.empty?
33
- sections << section
34
- stack << section
35
- success = true
36
- elsif stack.last.first < section.first
37
- stack.last.last << section
38
- stack << section
39
- success = true
40
- else
41
- stack.pop
42
- end
43
- end
44
- end
45
- sections
46
- end
47
-
48
- # Create nested fragment nodes under +parent+ from +sections+ (which can be created using
49
- # +parse_html_headers+). +path+ is the source path that defines the fragments (which is not the
50
- # same as the creation path for +parent+). The meta information +in_menu+ of the fragment nodes
51
- # is set to the parameter +in_menu+ and the meta info +sort_info+ is calculated from the base
52
- # +si+ value.
53
- def create_fragment_nodes(sections, parent, path, in_menu, si = 1000)
54
- sections.each do |level, id, title, sub_sections|
55
- fragment_path = parent.alcn.sub(/#.*$/, '') + '#' + id
56
- node = website.blackboard.invoke(:create_nodes,
57
- Webgen::Path.new(fragment_path, path.source_path),
58
- self) do |cn_path|
59
- cn_path.meta_info['title'] = title
60
- cn_path.meta_info['in_menu'] = in_menu
61
- cn_path.meta_info['sort_info'] = si = si.succ
62
- create_node(cn_path, :parent => parent)
63
- end.first
64
- create_fragment_nodes(sub_sections, node, path, in_menu, si.succ)
65
- end
66
- end
67
-
68
- end
69
-
70
- end
@@ -1,42 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- module Webgen::SourceHandler
4
-
5
- # This source handler should be used for handling nodes that are created during the write
6
- # phase.
7
- class Memory
8
-
9
- include Webgen::WebsiteAccess
10
- include Base
11
-
12
- def initialize #:nodoc:
13
- website.blackboard.add_listener(:node_flagged) do |node, *flags|
14
- node.tree[node.node_info[:memory_source_alcn]].flag(:dirty) if node.node_info[:memory_source_alcn]
15
- end
16
- end
17
-
18
- # Create a node for the +path+. The +source_alcn+ specifies the node that creates this memory
19
- # node when written. You have two options for providing the content for this node: either you
20
- # set +data+ to a string (or a Webgen::Path::SourceIO object) or you provide a block which takes
21
- # the created node as argument and returns a string (or a Webgen::Path::SourceIO object).
22
- def create_node(path, source_alcn, data = nil)
23
- super(path) do |node|
24
- node.node_info[:memory_source_alcn] = source_alcn
25
- (@data ||= {})[node.alcn] = lambda { data || yield(node) }
26
- end
27
- end
28
-
29
- # Return the content of the memory +node+. If the memory node was not created in this webgen
30
- # run, it will be flagged for reinitialization (and therefore recreation).
31
- def content(node)
32
- if @data && @data[node.alcn]
33
- @data[node.alcn].call
34
- else
35
- node.flag(:reinit)
36
- nil
37
- end
38
- end
39
-
40
- end
41
-
42
- end
@@ -1,128 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require 'pathname'
4
- require 'yaml'
5
-
6
- module Webgen::SourceHandler
7
-
8
- # Handles meta information files which provide meta information for other files.
9
- class Metainfo
10
-
11
- include Base
12
- include Webgen::WebsiteAccess
13
-
14
- CKEY = [:metainfo, :nodes]
15
-
16
- # Upon creation the object registers itself as listener for some node hooks.
17
- def initialize
18
- website.blackboard.add_listener(:node_meta_info_changed?, method(:node_meta_info_changed?))
19
- website.blackboard.add_listener(:before_node_created, method(:before_node_created))
20
- website.blackboard.add_listener(:before_node_deleted, method(:before_node_deleted))
21
- website.blackboard.add_listener(:after_node_created, method(:after_node_created))
22
- self.nodes ||= []
23
- end
24
-
25
- # Create a meta info node from +path+.
26
- def create_node(path)
27
- page = page_from_path(path)
28
- super(path) do |node|
29
- [[:mi_paths, 'paths'], [:mi_alcn, 'alcn']].each do |mi_key, block_name|
30
- node.node_info[mi_key] = {}
31
- if page.blocks.has_key?(block_name) && (data = YAML::load(page.blocks[block_name].content))
32
- data.each do |key, value|
33
- key = Webgen::Path.make_absolute(path.parent_path, key)
34
- node.node_info[mi_key][key] = value
35
- end
36
- end
37
- end
38
-
39
- mark_all_matched_dirty(node, :no_old_data)
40
-
41
- website.cache.permanent[[:sh_metainfo_node_mi, node.alcn]] = {
42
- :mi_paths => node.node_info[:mi_paths],
43
- :mi_alcn => node.node_info[:mi_alcn]
44
- }
45
-
46
- self.nodes << node unless self.nodes.include?(node)
47
- self.nodes = self.nodes.sort_by {|n| n.alcn}
48
- end
49
- end
50
-
51
- def nodes #:nodoc:
52
- website.cache.permanent[CKEY]
53
- end
54
-
55
- def nodes=(val) #:nodoc:
56
- website.cache.permanent[CKEY] = val
57
- end
58
-
59
- #######
60
- private
61
- #######
62
-
63
- # Return +true+ if any meta information for +node+ provided by +mi_node+ has changed.
64
- def meta_info_changed?(mi_node, node, option = nil)
65
- cached = website.cache.permanent[[:sh_metainfo_node_mi, mi_node.alcn]]
66
- (mi_node.node_info[:mi_paths].any? do |pattern, mi|
67
- Webgen::Path.match(node.node_info[:creation_path], pattern) &&
68
- (option == :force || (!cached && option == :no_old_data) || mi != cached[:mi_paths][pattern])
69
- end || mi_node.node_info[:mi_alcn].any? do |pattern, mi|
70
- node =~ pattern && (option == :force || (!cached && option == :no_old_data) || mi != cached[:mi_alcn][pattern])
71
- end || (option == :no_old_data && cached &&
72
- ((cached[:mi_paths].keys - mi_node.node_info[:mi_paths].keys).any? do |p|
73
- Webgen::Path.match(node.node_info[:creation_path], p)
74
- end || (cached[:mi_alcn].keys - mi_node.node_info[:mi_alcn].keys).any? do |p|
75
- node =~ p
76
- end)
77
- )
78
- )
79
- end
80
-
81
- # Mark all nodes that are matched by a path or an alcn specifcation in the meta info node +node+
82
- # as dirty.
83
- def mark_all_matched_dirty(node, option = nil)
84
- node.tree.node_access[:alcn].each do |path, n|
85
- n.flag(:dirty_meta_info) if meta_info_changed?(node, n, option)
86
- end
87
- end
88
-
89
- # Update the meta info of matched path before a node is created.
90
- def before_node_created(path)
91
- self.nodes.each do |node|
92
- node.node_info[:mi_paths].each do |pattern, mi|
93
- path.meta_info.update(mi) if Webgen::Path.match(path, pattern)
94
- end
95
- end
96
- end
97
-
98
- # Update the meta information of a matched alcn after the node has been created.
99
- def after_node_created(node)
100
- self.nodes.each do |n|
101
- n.node_info[:mi_alcn].each do |pattern, mi|
102
- node.meta_info.update(mi) if node =~ pattern
103
- end
104
- end
105
- end
106
-
107
- # Check if the +node+ has meta information from any meta info node and if so, if the meta info
108
- # node in question has changed.
109
- def node_meta_info_changed?(node)
110
- self.nodes.each do |n|
111
- if n.flagged?(:created) && meta_info_changed?(n, node)
112
- node.flag(:dirty_meta_info)
113
- return
114
- end
115
- end
116
- end
117
-
118
- # Delete the meta info node +node+ from the internal array.
119
- def before_node_deleted(node)
120
- return unless node.node_info[:processor] == self.class.name
121
- mark_all_matched_dirty(node, :force)
122
- website.cache.permanent.delete([:sh_metainfo_node_mi, node.alcn])
123
- self.nodes.delete(node)
124
- end
125
-
126
- end
127
-
128
- end
@@ -1,64 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- module Webgen::SourceHandler
4
-
5
- # Source handler for handling content files in Webgen Page Format.
6
- class Page
7
-
8
- include Webgen::WebsiteAccess
9
- include Base
10
-
11
- def initialize #:nodoc:
12
- website.blackboard.add_listener(:node_meta_info_changed?, method(:meta_info_changed?))
13
- end
14
-
15
- # Create a page file from +path+.
16
- def create_node(path)
17
- page = page_from_path(path)
18
- path.meta_info['lang'] ||= website.config['website.lang']
19
- path.ext = 'html' if path.ext == 'page'
20
-
21
- super(path) do |node|
22
- node.node_info[:sh_page_node_mi] = Webgen::Page.meta_info_from_data(path.io.data)
23
- node.node_info[:page] = page
24
- end
25
- end
26
-
27
- # Render the block called +block_name+ of the given +node+. The parameter +templates+ is set to
28
- # the default template chain for the given +node+ but you can assign a custom template chain (an
29
- # array of template nodes) if need arises. Return +nil+ if an error occurred.
30
- def render_node(node, block_name = 'content', templates = website.blackboard.invoke(:templates_for_node, node))
31
- chain = [templates, node].flatten
32
-
33
- if chain.first.node_info[:page].blocks.has_key?(block_name)
34
- node.node_info[:used_nodes] << chain.first.alcn
35
- context = chain.first.node_info[:page].blocks[block_name].render(Webgen::Context.new(:chain => chain))
36
- context.content
37
- else
38
- raise Webgen::RenderError.new("No block named '#{block_name}'",
39
- self.class.name, node, chain.first)
40
- end
41
- end
42
- alias_method :content, :render_node
43
-
44
- #######
45
- private
46
- #######
47
-
48
- # Checks if the meta information provided by the file in Webgen Page Format changed.
49
- def meta_info_changed?(node)
50
- path = website.blackboard.invoke(:source_paths)[node.node_info[:src]]
51
- return if node.node_info[:processor] != self.class.name || (path && !path.changed?)
52
-
53
- if !path
54
- node.flag(:dirty_meta_info)
55
- else
56
- old_mi = node.node_info[:sh_page_node_mi]
57
- new_mi = Webgen::Page.meta_info_from_data(path.io.data)
58
- node.flag(:dirty_meta_info) if old_mi && old_mi != new_mi
59
- end
60
- end
61
-
62
- end
63
-
64
- end
@@ -1,60 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require 'uri'
4
- require 'time'
5
-
6
- module Webgen::SourceHandler
7
-
8
- # Source handler for creating an XML sitemap based on the specification of http://sitemaps.org.
9
- #
10
- # Uses Webgen::Common::Sitemap to generate the needed sitemap tree and to check if a sitemap has
11
- # changed.
12
- class Sitemap
13
-
14
- include Webgen::WebsiteAccess
15
- include Base
16
-
17
- # Create an XML sitemap from +path+.
18
- def create_node(path)
19
- page = page_from_path(path)
20
- path.ext = 'xml'
21
- if path.meta_info['site_url'].nil?
22
- raise Webgen::NodeCreationError.new("Needed information site_url is missing",
23
- self.class.name, path)
24
- end
25
-
26
- super(path) do |node|
27
- node.node_info[:sitemap] = page
28
- end
29
- end
30
-
31
- # Return the rendered feed represented by +node+.
32
- def content(node)
33
- if node.node_info[:sitemap].blocks.has_key?('template')
34
- node.node_info[:sitemap].blocks['template'].render(Webgen::Context.new(:chain => [node])).content
35
- else
36
- chain = [node.resolve("/templates/sitemap.template"), node]
37
- node.node_info[:used_nodes] << chain.first.alcn
38
- chain.first.node_info[:page].blocks['content'].render(Webgen::Context.new(:chain => chain)).content
39
- end
40
- end
41
-
42
- # Return the alcns of the sitemap +node+ as a flat list.
43
- def alcns(node)
44
- website.blackboard.invoke(:create_sitemap, node, node.lang, options_for_node(node)).to_lcn_list.flatten
45
- end
46
-
47
- #######
48
- private
49
- #######
50
-
51
- # Return a hash with the sitemap-creation-options set on the +node+.
52
- def options_for_node(node)
53
- options = {}
54
- node.meta_info.each {|k,v| options[k] = v if k =~ /\./}
55
- options
56
- end
57
-
58
- end
59
-
60
- end
@@ -1,66 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- module Webgen::SourceHandler
4
-
5
- # Source handler for handling template files in Webgen Page Format.
6
- class Template
7
-
8
- include Webgen::WebsiteAccess
9
- include Webgen::Loggable
10
- include Base
11
-
12
- # Create a template node for +path+.
13
- def create_node(path)
14
- page = page_from_path(path)
15
- super(path) do |node|
16
- node.node_info[:page] = page
17
- end
18
- end
19
-
20
- # Return the template chain for +node+.
21
- def templates_for_node(node, lang = node.lang)
22
- cached_template = (website.cache.volatile[[node.alcn, :templates]] ||= {})
23
- if cached_template[lang]
24
- template_node = cached_template[lang]
25
- elsif node['template'].kind_of?(String)
26
- template_node = node.resolve(node['template'], lang)
27
- if template_node.nil?
28
- log(:warn) { "Specified template '#{node['template']}' for <#{node}> not found, using default template!" }
29
- template_node = default_template(node.parent, lang)
30
- end
31
- cached_template[lang] = template_node
32
- elsif node.meta_info.has_key?('template') && node['template'].nil?
33
- template_node = cached_template[lang] = nil
34
- else
35
- log(:info) { "Using default template in language '#{lang}' for <#{node}>" }
36
- template_node = default_template(node.parent, lang)
37
- if template_node == node && !node.parent.is_root?
38
- template_node = default_template(node.parent.parent, lang)
39
- end
40
- cached_template[lang] = template_node
41
- end
42
-
43
- if template_node.nil?
44
- []
45
- else
46
- (template_node == node ? [] : templates_for_node(template_node, lang) + [template_node])
47
- end
48
- end
49
-
50
- # Return the default template for the directory node +dir+. If the template node is not found,
51
- # the parent directories are searched.
52
- def default_template(dir_node, lang)
53
- template_node = dir_node.resolve(website.config['sourcehandler.template.default_template'], lang)
54
- if template_node.nil?
55
- if dir_node.is_root?
56
- log(:warn) { "No default template in root directory found!" }
57
- else
58
- template_node = default_template(dir_node.parent, lang)
59
- end
60
- end
61
- template_node
62
- end
63
-
64
- end
65
-
66
- end
@@ -1,117 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require 'uri'
4
- require 'yaml'
5
-
6
- module Webgen::SourceHandler
7
-
8
- # Handles files which contain specifications for "virtual" nodes, ie. nodes that don't have real
9
- # source path.
10
- #
11
- # This can be used, for example, to provide multiple links to the same node.
12
- class Virtual
13
-
14
- include Base
15
- include Webgen::WebsiteAccess
16
-
17
- def initialize # :nodoc:
18
- website.blackboard.add_listener(:node_meta_info_changed?, method(:node_meta_info_changed?))
19
- @path_data = {}
20
- end
21
-
22
- # Create all virtual nodes which are specified in +path+.
23
- def create_node(path)
24
- nodes = []
25
- read_data(path).each do |key, meta_info|
26
- cache_data = [key, meta_info.dup]
27
-
28
- key = Webgen::Path.make_absolute(path.parent_path, key) + (key =~ /\/$/ ? '/' : '')
29
- temp_parent = create_directories(File.dirname(key), path)
30
-
31
- output_path = meta_info.delete('url') || key
32
- output_path = (URI::parse(output_path).absolute? || output_path =~ /^\// ?
33
- output_path : File.join(temp_parent.alcn, output_path))
34
-
35
- if key =~ /\/$/
36
- nodes << create_directory(key, path, meta_info)
37
- else
38
- nodes += website.blackboard.invoke(:create_nodes, Webgen::Path.new(key, path.source_path), self) do |cn_path|
39
- cn_path.meta_info.update(meta_info)
40
- super(cn_path, :output_path => output_path) do |n|
41
- n.node_info[:sh_virtual_cache_data] = cache_data
42
- end
43
- end
44
- end
45
- end
46
- nodes.compact
47
- end
48
-
49
- #######
50
- private
51
- #######
52
-
53
- # Read the entries from the virtual file +data+ and yield the path, and the meta info hash for
54
- # each entry. The +parent+ parameter is used for making absolute path values if relative ones
55
- # are given.
56
- def read_data(path)
57
- if !@path_data.has_key?(path) || path.changed?
58
- page = page_from_path(path)
59
- @path_data[path] = YAML::load(page.blocks['content'].content).collect do |key, meta_info|
60
- meta_info ||= {}
61
- meta_info['modified_at'] = path.meta_info['modified_at']
62
- meta_info['no_output'] = true
63
- [key, meta_info]
64
- end if page.blocks.has_key?('content')
65
- @path_data[path] ||= []
66
- end
67
- @path_data[path]
68
- end
69
-
70
- # Create the needed parent directories for a virtual node.
71
- def create_directories(dirname, path)
72
- parent = website.tree.root
73
- dirname.sub(/^\//, '').split('/').inject('/') do |parent_path, dir|
74
- parent_path = File.join(parent_path, dir)
75
- parent = create_directory(parent_path, path)
76
- parent_path
77
- end
78
- parent
79
- end
80
-
81
- # Create a virtual directory if it does not already exist.
82
- def create_directory(dir, path, meta_info = nil)
83
- dir_handler = website.cache.instance('Webgen::SourceHandler::Directory')
84
- parent = website.tree.root
85
- website.blackboard.invoke(:create_nodes,
86
- Webgen::Path.new(File.join(dir, '/'), path.source_path),
87
- dir_handler) do |temp_path|
88
- parent = dir_handler.node_exists?(temp_path)
89
- if (parent && (parent.node_info[:src] == path.source_path) && !meta_info.nil?) ||
90
- !parent
91
- temp_path.meta_info.update(meta_info) if meta_info
92
- parent.flag(:reinit) if parent
93
- parent = dir_handler.create_node(temp_path)
94
- end
95
- parent
96
- end
97
- parent
98
- end
99
-
100
- # Check if the +node+ is virtual and if, if its meta information has changed. This can only be
101
- # the case if the node has been recreated in this run.
102
- def node_meta_info_changed?(node)
103
- path = website.blackboard.invoke(:source_paths)[node.node_info[:src]]
104
- return if node.node_info[:processor] != self.class.name || (path && !path.changed?)
105
-
106
- if !path
107
- node.flag(:dirty_meta_info)
108
- else
109
- old_data = node.node_info[:sh_virtual_cache_data]
110
- new_data = read_data(path).find {|key, mi| key == old_data.first}
111
- node.flag(:dirty_meta_info) if !new_data || old_data.last != new_data.last
112
- end
113
- end
114
-
115
- end
116
-
117
- end