webgen 0.5.17 → 1.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
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