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,18 +1,18 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
- module Webgen::Tag
3
+ module Webgen
4
+ class Tag
4
5
 
5
- # Prints out the date using a format string which will be passed to Time#strftime. Therefore you
6
- # can use everything Time#strftime offers.
7
- class Date
6
+ # Prints out the date using a format string which will be passed to Time#strftime. Therefore you
7
+ # can use everything Time#strftime offers.
8
+ module Date
8
9
 
9
- include Base
10
+ # Return the current date formatted as specified.
11
+ def self.call(tag, body, context)
12
+ Time.now.strftime(context[:config]['tag.date.format'])
13
+ end
10
14
 
11
- # Return the current date formatted as specified.
12
- def call(tag, body, context)
13
- Time.now.strftime(param('tag.date.format'))
14
15
  end
15
16
 
16
17
  end
17
-
18
18
  end
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'cgi'
4
+ require 'tempfile'
5
+ require 'rbconfig'
6
+
7
+ module Webgen
8
+ class Tag
9
+
10
+ # Executes the given command and returns the standard output. All special HTML characters are
11
+ # optionally escaped.
12
+ module ExecuteCommand
13
+
14
+ BIT_BUCKET = (RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ ? "nul" : "/dev/null")
15
+
16
+ # Execute the command and return the standard output.
17
+ def self.call(tag, body, context)
18
+ command = context[:config]['tag.execute_command.command']
19
+ output = `#{command} 2> #{BIT_BUCKET}`
20
+ if $?.exitstatus != 0
21
+ raise Webgen::RenderError.new("Command '#{command}' has return value != 0: #{output}",
22
+ self.name, context.dest_node, context.ref_node)
23
+ end
24
+ output = CGI::escapeHTML(output) if context[:config]['tag.execute_command.escape_html']
25
+ [output, context[:config]['tag.execute_command.process_output']]
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,32 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'cgi'
4
+
5
+ module Webgen
6
+ class Tag
7
+
8
+ # Includes a file verbatim and optionally escapes all special HTML characters and/or processes
9
+ # webgen tags in it.
10
+ module IncludeFile
11
+
12
+ # Include the specified file verbatim in the output, optionally escaping special HTML characters
13
+ # and/or processing tags in it.
14
+ def self.call(tag, body, context)
15
+ filename = context[:config]['tag.include_file.filename']
16
+ filename = File.join(context.website.directory, filename) unless filename =~ /^(\/|\w:)/
17
+ if !File.exists?(filename)
18
+ raise Webgen::RenderError.new("File '#{filename}' cannot be included because it does not exist",
19
+ self.name, context.dest_node, context.ref_node)
20
+ end
21
+
22
+ content = File.read(filename)
23
+ content = CGI::escapeHTML(content) if context[:config]['tag.include_file.escape_html']
24
+ context.website.ext.item_tracker.add(context.dest_node, :file, filename)
25
+
26
+ [content, context[:config]['tag.include_file.process_output']]
27
+ end
28
+
29
+ end
30
+
31
+ end
32
+ end
@@ -1,55 +1,39 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
- module Webgen::Tag
4
-
5
- # Generates a list with all the languages of the page.
6
- class Langbar
7
-
8
- include Webgen::Tag::Base
9
- include Webgen::WebsiteAccess
10
-
11
- def initialize #:nodoc:
12
- website.blackboard.add_listener(:node_changed?, method(:node_changed?))
13
- end
14
-
15
- # Return a list of all translations of the content page.
16
- def call(tag, body, context)
17
- lang_nodes = all_lang_nodes(context.content_node)
18
- (context.dest_node.node_info[:tag_langbar_data] ||= {})[context.content_node.acn] = lang_nodes.map {|n| n.alcn}
19
- result = lang_nodes.
20
- reject {|n| (context.content_node.lang == n.lang && !param('tag.langbar.show_own_lang'))}.
21
- sort {|a, b| a.lang <=> b.lang}.
22
- collect do |n|
23
- attrs = {:link_text => (param('tag.langbar.lang_names')[n.lang] || n.lang), :lang => n.lang}
24
- attrs['class'] = 'webgen-langbar-current-lang' if context.content_node.lang == n.lang
25
- context.dest_node.link_to(n, attrs)
26
- end.join(param('tag.langbar.separator'))
27
-
28
- [(param('tag.langbar.show_single_lang') || lang_nodes.length > 1 ? result : ""), param('tag.langbar.process_output')]
29
- end
30
-
31
- #######
32
- private
33
- #######
34
-
35
- # Return all nodes with the same absolute cn as +node+.
36
- def all_lang_nodes(node)
37
- node.tree.node_access[:acn][node.acn]
38
- end
39
-
40
- # Check if the langbar tag for +node+ changed.
41
- def node_changed?(node)
42
- return unless (cdata = node.node_info[:tag_langbar_data])
43
- cdata.each do |acn, clang_nodes|
44
- lang_nodes = all_lang_nodes(node.tree[acn, :acn]) rescue nil
45
- if !lang_nodes || lang_nodes.length != clang_nodes.length ||
46
- lang_nodes.any? {|n| n.meta_info_changed?}
47
- node.flag(:dirty)
48
- break
3
+ require 'webgen/tag'
4
+
5
+ module Webgen
6
+ class Tag
7
+
8
+ # Generates a list with all the languages of the page.
9
+ module Langbar
10
+
11
+ # Return a rendering of the list of all translations of the content node.
12
+ def self.call(tag, body, context)
13
+ context.website.ext.item_tracker.add(context.dest_node, :nodes,
14
+ ['Webgen::Tag::Langbar', 'node_translations'],
15
+ context.content_node.alcn, :meta_info)
16
+ nodes = node_translations(context.website, context.content_node.alcn)
17
+
18
+ if context[:config]['tag.langbar.show_single_lang'] || nodes.length > 1
19
+ context[:nodes] = nodes.
20
+ reject {|n| (context.content_node.lang == n.lang && !context[:config]['tag.langbar.show_own_lang'])}.
21
+ sort {|a, b| a.lang <=> b.lang}
22
+ Webgen::Tag.render_tag_template(context, 'langbar')
23
+ else
24
+ ''
49
25
  end
50
26
  end
27
+
28
+ # Generate the list of node translations given the options.
29
+ #
30
+ # This method is invoked by Webgen::ItemTracker::NodeList to retrieve the translations nodes
31
+ # when necessary.
32
+ def self.node_translations(website, node_alcn)
33
+ website.tree.translations(website.tree[node_alcn])
34
+ end
35
+
51
36
  end
52
37
 
53
38
  end
54
-
55
39
  end
@@ -1,27 +1,26 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
- module Webgen::Tag
3
+ module Webgen
4
+ class Tag
4
5
 
5
- # Create a link to a given (A)LCN.
6
- class Link
6
+ # Create a link to a given (A)LCN.
7
+ module Link
7
8
 
8
- include Webgen::Tag::Base
9
-
10
- # Return a HTML link to the given (A)LCN.
11
- def call(tag, body, context)
12
- if (dest_node = context.ref_node.resolve(param('tag.link.path').to_s, context.dest_node.lang))
13
- context.dest_node.node_info[:used_meta_info_nodes] << dest_node.alcn
14
- context.dest_node.link_to(dest_node, param('tag.link.attr').merge(:lang => context.content_node.lang))
15
- else
16
- log(:error) { "Could not resolve path '#{param('tag.link.path')}' in <#{context.ref_node}>" }
17
- context.dest_node.flag(:dirty)
18
- ''
9
+ # Return an HTML link to the given (A)LCN.
10
+ def self.call(tag, body, context)
11
+ path = context[:config]['tag.link.path'].to_s
12
+ if (dest_node = context.ref_node.resolve(path, context.dest_node.lang, true))
13
+ context.website.ext.item_tracker.add(context.dest_node, :node_meta_info, dest_node.alcn)
14
+ context.dest_node.link_to(dest_node, context.content_node.lang, context[:config]['tag.link.attr'])
15
+ else
16
+ ''
17
+ end
18
+ rescue URI::InvalidURIError => e
19
+ raise Webgen::RenderError.new("Error while parsing path '#{path}': #{e.message}",
20
+ self.name, context.dest_node, context.ref_node)
19
21
  end
20
- rescue URI::InvalidURIError => e
21
- raise Webgen::RenderError.new("Error while parsing path '#{param('tag.link.path')}': #{e.message}",
22
- self.class.name, context.dest_node, context.ref_node)
22
+
23
23
  end
24
24
 
25
25
  end
26
-
27
26
  end
@@ -1,207 +1,45 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
- module Webgen::Tag
3
+ require 'webgen/tag'
4
4
 
5
- # Generates a menu that can be configured extensively.
6
- class Menu
5
+ module Webgen
6
+ class Tag
7
7
 
8
- include Webgen::WebsiteAccess
9
- include Base
8
+ # Generates a menu that can be extensively configured by using the available Webgen::NodeFinder
9
+ # options.
10
+ module Menu
10
11
 
11
- # Special menu node class. It encapsulates the original node for later access.
12
- class MenuNode
12
+ # Generate the menu.
13
+ def self.call(tag, body, context)
14
+ options = context[:config]['tag.menu.options']
13
15
 
14
- # Array of the child nodes.
15
- attr_reader :children
16
+ context[:nodes] = context.website.ext.node_finder.find(options, context.content_node)
17
+ context.website.ext.item_tracker.add(context.dest_node, :nodes, :node_finder_option_set,
18
+ {:opts => options, :ref_alcn => context.content_node.alcn}, :meta_info)
16
19
 
17
- # The parent node.
18
- attr_reader :parent
19
-
20
- # The encapsulated node.
21
- attr_reader :node
22
-
23
- # Set to +true+ if the menu node is in the tree of files.
24
- attr_writer :is_in_tree_of_files
25
-
26
- # Create a new menu node under +parent+ for the real node +node+.
27
- def initialize(parent, node)
28
- @parent = parent
29
- @node = node
30
- @children = []
31
- end
32
-
33
- # Return +true+ if the menu node is in the menu tree of only files.
34
- def is_in_tree_of_files?
35
- @is_in_tree_of_files
36
- end
37
-
38
- # Sort recursively all children of the node using the wrapped nodes.
39
- def sort!
40
- self.children.sort! {|a,b| a.node <=> b.node}
41
- self.children.each {|child| child.sort!}
42
- self
43
- end
44
-
45
- # Return the menu tree under the node as nested list of alcn values.
46
- def to_lcn_list
47
- self.children.inject([]) {|temp, n| temp << n.node.alcn; temp += ((t = n.to_lcn_list).empty? ? [] : [t]) }
48
- end
49
-
50
- end
51
-
52
- def initialize #:nodoc:
53
- website.blackboard.add_listener(:node_changed?, method(:node_changed?))
54
- end
55
-
56
- # Generate the menu.
57
- def call(tag, body, context)
58
- tree = specific_menu_tree_for(context.content_node)
59
-
60
- (context.dest_node.node_info[:tag_menu_menus] ||= {})[[@params.to_a.sort, context.content_node.alcn]] = (tree ? tree.to_lcn_list : nil)
61
-
62
- if !tree || tree.children.empty?
63
- ''
64
- elsif param('tag.menu.nested')
65
- create_output_nested(context, tree)
66
- else
67
- create_output_not_nested(context, tree)
68
- end
69
- end
70
-
71
- #########
72
- protected
73
- #########
74
-
75
- # Check if the menus for +node+ have changed.
76
- def node_changed?(node)
77
- return if !node.node_info[:tag_menu_menus]
78
-
79
- node.node_info[:tag_menu_menus].each do |(params, cn_alcn), cached_tree|
80
- cn = node.tree[cn_alcn]
81
- menu_tree = menu_tree_for_lang(cn.lang, cn.tree.root)
82
-
83
- set_params(params.to_hash)
84
- tree = build_specific_menu_tree(cn, menu_tree)
85
- tree_list = tree.to_lcn_list if tree
86
- set_params({})
87
-
88
- if (tree.nil? && !cached_tree.nil?) || (tree_list && tree_list != cached_tree) ||
89
- (tree_list && tree_list.flatten.any? do |alcn|
90
- (n = node.tree[alcn]) && (r = n.routing_node(cn.lang)) && r != node && r.meta_info_changed?
91
- end)
92
- node.flag(:dirty)
93
- break
20
+ if context[:nodes].empty?
21
+ ''
22
+ else
23
+ Webgen::Tag.render_tag_template(context, "menu")
94
24
  end
95
25
  end
96
- end
97
-
98
- # Wrapper method for returning the specific menu tree for +content_node+.
99
- def specific_menu_tree_for(content_node)
100
- tree = menu_tree_for_lang(content_node.lang, content_node.tree.root)
101
- if param('tag.menu.used_nodes') == 'fragments'
102
- @params['tag.menu.start_level'] = param('tag.menu.start_level') + content_node.level
103
- end
104
- build_specific_menu_tree(content_node, tree)
105
- end
106
26
 
107
- # Build a menu tree for +content_node+ from the tree +menu_node+.
108
- def build_specific_menu_tree(content_node, menu_node, level = 1)
109
- if menu_node.nil? \
110
- || level > param('tag.menu.max_levels') + param('tag.menu.start_level') - 1 \
111
- || ((level > param('tag.menu.min_levels') + param('tag.menu.start_level') - 1) \
112
- && (menu_node.node.level >= content_node.level \
113
- || (param('tag.menu.show_current_subtree_only') && !content_node.in_subtree_of?(menu_node.node))
114
- )
115
- ) \
116
- || (level == param('tag.menu.start_level') && !content_node.in_subtree_of?(menu_node.node))
117
- return nil
118
- end
27
+ # Return style information (node is selected, ...) and a link from +dest_node+ to +node+.
28
+ #
29
+ # This method can be used in a menu template.
30
+ def self.menu_item_details(dest_node, node, lang, level, has_submenu)
31
+ styles = ['webgen-menu-level' + level.to_s]
32
+ styles << 'webgen-menu-submenu' if has_submenu
33
+ styles << 'webgen-menu-submenu-inhierarchy' if has_submenu && node.is_ancestor_of?(dest_node)
34
+ styles << 'webgen-menu-item-selected' if node == dest_node
35
+ style = "class=\"#{styles.join(' ')}\"" if styles.length > 0
119
36
 
120
- sub_menu_tree = MenuNode.new(nil, menu_node.node)
121
- menu_tree = MenuNode.new(nil, menu_node.node)
122
- menu_node.children.each do |child|
123
- next if param('tag.menu.used_nodes') == 'files' && !child.is_in_tree_of_files?
124
- menu_tree.children << (this_node = MenuNode.new(menu_tree, child.node))
125
- sub_node = child.children.length > 0 ? build_specific_menu_tree(content_node, child, level + 1) : nil
126
- sub_node.children.each {|n| this_node.children << n; sub_menu_tree.children << n} if sub_node
127
- end
37
+ link = dest_node.link_to(node, lang)
128
38
 
129
- if level < param('tag.menu.start_level')
130
- sub_menu_tree
131
- else
132
- menu_tree
39
+ [style, link]
133
40
  end
134
- end
135
-
136
- # Create the nested HTML menu of the +tree+ using the provided +context+.
137
- def create_output_nested(context, tree, level = 1)
138
- out = "<ul>"
139
- tree.children.each do |child|
140
- menu = child.children.length > 0 ? create_output_nested(context, child, level + 1) : ''
141
- style, link = menu_item_details(context.dest_node, child.node, context.content_node.lang, level)
142
41
 
143
- out << "<li #{style}>#{link}"
144
- out << menu
145
- out << "</li>"
146
- end
147
- out << "</ul>"
148
- out
149
- end
150
-
151
- # Create the not nested HTML menu of the +tree+ using the provided +context+.
152
- def create_output_not_nested(context, tree, level = 1)
153
- submenu = ''
154
- out = "<ul>"
155
- tree.children.each do |child|
156
- submenu << (child.children.length > 0 ? create_output_not_nested(context, child, level + 1) : '')
157
- style, link = menu_item_details(context.dest_node, child.node, context.content_node.lang, level)
158
-
159
- out << "<li #{style}>#{link}</li>"
160
- end
161
- out << "</ul>"
162
- out << submenu
163
- out
164
- end
165
-
166
- # Return style information (node is selected, ...) and a link from +dest_node+ to +node+.
167
- def menu_item_details(dest_node, node, lang, level)
168
- styles = ['webgen-menu-level' + level.to_s]
169
- styles << 'webgen-menu-submenu' if node.is_directory? || (node.is_fragment? && node.children.length > 0)
170
- styles << 'webgen-menu-submenu-inhierarchy' if (node.is_directory? || (node.is_fragment? && node.children.length > 0)) &&
171
- dest_node.in_subtree_of?(node)
172
- styles << 'webgen-menu-item-selected' if node == dest_node
173
- style = "class=\"#{styles.join(' ')}\"" if styles.length > 0
174
-
175
- link = dest_node.link_to(node, :lang => lang)
176
-
177
- [style, link]
178
- end
179
-
180
- # Return the menu tree for the language +lang+.
181
- def menu_tree_for_lang(lang, root)
182
- menus = (website.cache.volatile[:menutrees] ||= {})
183
- unless menus[lang]
184
- menus[lang] = create_menu_tree(root, nil, lang)
185
- menus[lang].sort! if menus[lang]
186
- end
187
- menus[lang]
188
- end
189
-
190
- # Create and return a menu tree if at least one node is in the menu or +nil+ otherwise.
191
- def create_menu_tree(node, parent, lang)
192
- menu_node = MenuNode.new(parent, node)
193
-
194
- node.children.select do |child|
195
- child.lang == lang || child.lang.nil? || child.is_directory?
196
- end.each do |child|
197
- sub_node = create_menu_tree(child, menu_node, lang)
198
- menu_node.children << sub_node unless sub_node.nil?
199
- end
200
- menu_node.is_in_tree_of_files = (!node.is_fragment? && node['in_menu']) || menu_node.children.any? {|c| c.is_in_tree_of_files?}
201
-
202
- menu_node.children.empty? ? (node['in_menu'] ? menu_node : nil) : menu_node
203
42
  end
204
43
 
205
44
  end
206
-
207
45
  end