webgen 0.5.17 → 1.0.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (408) hide show
  1. data/API.rdoc +143 -0
  2. data/AUTHORS +0 -1
  3. data/COPYING +17 -8
  4. data/ChangeLog +4456 -0
  5. data/GPL +623 -289
  6. data/README.md +71 -0
  7. data/Rakefile +87 -99
  8. data/VERSION +1 -1
  9. data/bin/webgen +1 -7
  10. data/data/webgen/basic_website_template/ext/init.rb +15 -0
  11. data/data/webgen/basic_website_template/webgen.config +18 -0
  12. data/data/webgen/bundle_template_files/README.md.erb +24 -0
  13. data/data/webgen/bundle_template_files/Rakefile.erb +36 -0
  14. data/data/webgen/bundle_template_files/info.yaml.erb +16 -0
  15. data/data/webgen/bundle_template_files/init.rb.erb +1 -0
  16. data/data/webgen/passive_sources/default.metainfo +32 -0
  17. data/data/webgen/passive_sources/stylesheets/coderay-default.css +109 -118
  18. data/data/webgen/passive_sources/templates/feed.template +62 -0
  19. data/data/webgen/passive_sources/templates/sitemap.template +3 -6
  20. data/data/webgen/passive_sources/templates/tag.template +42 -0
  21. data/data/webgen/website_bundles/default/README +2 -2
  22. data/lib/webgen/blackboard.rb +15 -51
  23. data/lib/webgen/bundle/built-in-show-changes/init.rb +54 -0
  24. data/lib/webgen/bundle/built-in/init.rb +366 -0
  25. data/lib/webgen/bundle_loader.rb +126 -0
  26. data/lib/webgen/cache.rb +9 -18
  27. data/lib/webgen/cli.rb +131 -58
  28. data/lib/webgen/cli/bundle_command.rb +30 -0
  29. data/lib/webgen/cli/create_bundle_command.rb +46 -0
  30. data/lib/webgen/cli/create_command.rb +48 -60
  31. data/lib/webgen/cli/generate_command.rb +25 -0
  32. data/lib/webgen/cli/install_bundle_command.rb +34 -0
  33. data/lib/webgen/cli/list_bundle_command.rb +108 -0
  34. data/lib/webgen/cli/logger.rb +45 -0
  35. data/lib/webgen/cli/show_command.rb +30 -0
  36. data/lib/webgen/cli/show_config_command.rb +63 -0
  37. data/lib/webgen/cli/show_dependencies_command.rb +103 -0
  38. data/lib/webgen/cli/show_extensions_command.rb +74 -0
  39. data/lib/webgen/cli/utils.rb +68 -95
  40. data/lib/webgen/configuration.rb +143 -105
  41. data/lib/webgen/content_processor.rb +160 -0
  42. data/lib/webgen/content_processor/blocks.rb +96 -0
  43. data/lib/webgen/content_processor/builder.rb +25 -0
  44. data/lib/webgen/content_processor/erb.rb +25 -0
  45. data/lib/webgen/content_processor/erubis.rb +31 -0
  46. data/lib/webgen/content_processor/fragments.rb +82 -0
  47. data/lib/webgen/content_processor/haml.rb +25 -0
  48. data/lib/webgen/content_processor/html_head.rb +157 -0
  49. data/lib/webgen/content_processor/kramdown.rb +49 -0
  50. data/lib/webgen/content_processor/maruku.rb +39 -0
  51. data/lib/webgen/content_processor/r_discount.rb +21 -0
  52. data/lib/webgen/content_processor/rdoc.rb +22 -0
  53. data/lib/webgen/content_processor/redcloth.rb +23 -0
  54. data/lib/webgen/content_processor/ruby.rb +20 -0
  55. data/lib/webgen/content_processor/sass.rb +145 -0
  56. data/lib/webgen/content_processor/scss.rb +23 -0
  57. data/lib/webgen/content_processor/tags.rb +30 -0
  58. data/lib/webgen/content_processor/tidy.rb +32 -0
  59. data/lib/webgen/content_processor/tikz.rb +116 -0
  60. data/lib/webgen/content_processor/xmllint.rb +31 -0
  61. data/lib/webgen/context.rb +57 -29
  62. data/lib/webgen/context/html_head.rb +60 -0
  63. data/lib/webgen/context/nodes.rb +32 -27
  64. data/lib/webgen/context/rendering.rb +39 -0
  65. data/lib/webgen/context/webgen_tags.rb +25 -0
  66. data/lib/webgen/core_ext.rb +25 -0
  67. data/lib/webgen/destination.rb +151 -0
  68. data/lib/webgen/destination/file_system.rb +62 -0
  69. data/lib/webgen/error.rb +59 -49
  70. data/lib/webgen/extension_manager.rb +121 -0
  71. data/lib/webgen/item_tracker.rb +237 -0
  72. data/lib/webgen/item_tracker/file.rb +39 -0
  73. data/lib/webgen/item_tracker/missing_node.rb +61 -0
  74. data/lib/webgen/item_tracker/node_content.rb +40 -0
  75. data/lib/webgen/item_tracker/node_meta_info.rb +53 -0
  76. data/lib/webgen/item_tracker/nodes.rb +92 -0
  77. data/lib/webgen/logger.rb +26 -82
  78. data/lib/webgen/node.rb +122 -367
  79. data/lib/webgen/node_finder.rb +336 -0
  80. data/lib/webgen/page.rb +48 -85
  81. data/lib/webgen/path.rb +218 -156
  82. data/lib/webgen/path_handler.rb +400 -0
  83. data/lib/webgen/path_handler/base.rb +220 -0
  84. data/lib/webgen/path_handler/copy.rb +78 -0
  85. data/lib/webgen/path_handler/directory.rb +21 -0
  86. data/lib/webgen/path_handler/feed.rb +82 -0
  87. data/lib/webgen/path_handler/meta_info.rb +84 -0
  88. data/lib/webgen/path_handler/page.rb +38 -0
  89. data/lib/webgen/path_handler/page_utils.rb +79 -0
  90. data/lib/webgen/path_handler/sitemap.rb +52 -0
  91. data/lib/webgen/path_handler/template.rb +96 -0
  92. data/lib/webgen/path_handler/virtual.rb +85 -0
  93. data/lib/webgen/{webgentask.rb → rake_task.rb} +31 -27
  94. data/lib/webgen/source.rb +106 -24
  95. data/lib/webgen/source/file_system.rb +41 -0
  96. data/lib/webgen/source/stacked.rb +49 -53
  97. data/lib/webgen/source/tar_archive.rb +59 -0
  98. data/lib/webgen/tag.rb +250 -19
  99. data/lib/webgen/tag/breadcrumb_trail.rb +65 -0
  100. data/lib/webgen/tag/coderay.rb +32 -35
  101. data/lib/webgen/tag/date.rb +9 -9
  102. data/lib/webgen/tag/execute_command.rb +31 -0
  103. data/lib/webgen/tag/include_file.rb +32 -0
  104. data/lib/webgen/tag/langbar.rb +31 -47
  105. data/lib/webgen/tag/link.rb +17 -18
  106. data/lib/webgen/tag/menu.rb +27 -189
  107. data/lib/webgen/tag/meta_info.rb +31 -0
  108. data/lib/webgen/tag/relocatable.rb +48 -39
  109. data/lib/webgen/tag/tikz.rb +24 -100
  110. data/lib/webgen/task.rb +99 -0
  111. data/lib/webgen/task/create_bundle.rb +73 -0
  112. data/lib/webgen/task/create_website.rb +94 -0
  113. data/lib/webgen/task/generate_website.rb +47 -0
  114. data/lib/webgen/test_helper.rb +183 -0
  115. data/lib/webgen/tree.rb +95 -46
  116. data/lib/webgen/utils.rb +39 -0
  117. data/lib/webgen/utils/external_command.rb +27 -0
  118. data/lib/webgen/utils/tag_parser.rb +124 -0
  119. data/lib/webgen/version.rb +1 -1
  120. data/lib/webgen/website.rb +134 -296
  121. data/setup.rb +1 -1
  122. data/test/test_documentation.rb +43 -0
  123. data/test/webgen/cli/test_logger.rb +41 -0
  124. data/test/{test_contentprocessor_blocks.rb → webgen/content_processor/test_blocks.rb} +30 -28
  125. data/test/webgen/content_processor/test_builder.rb +25 -0
  126. data/test/webgen/content_processor/test_erb.rb +21 -0
  127. data/test/webgen/content_processor/test_erubis.rb +33 -0
  128. data/test/webgen/content_processor/test_fragments.rb +96 -0
  129. data/test/webgen/content_processor/test_haml.rb +24 -0
  130. data/test/webgen/content_processor/test_html_head.rb +78 -0
  131. data/test/webgen/content_processor/test_kramdown.rb +49 -0
  132. data/test/webgen/content_processor/test_maruku.rb +30 -0
  133. data/test/webgen/content_processor/test_r_discount.rb +18 -0
  134. data/test/webgen/content_processor/test_rdoc.rb +18 -0
  135. data/test/webgen/content_processor/test_redcloth.rb +23 -0
  136. data/test/webgen/content_processor/test_ruby.rb +24 -0
  137. data/test/webgen/content_processor/test_sass.rb +44 -0
  138. data/test/webgen/content_processor/test_scss.rb +23 -0
  139. data/test/webgen/content_processor/test_tags.rb +44 -0
  140. data/test/webgen/content_processor/test_tidy.rb +31 -0
  141. data/test/webgen/content_processor/test_tikz.rb +33 -0
  142. data/test/webgen/content_processor/test_xmllint.rb +32 -0
  143. data/test/webgen/destination/test_file_system.rb +54 -0
  144. data/test/webgen/item_tracker/test_file.rb +31 -0
  145. data/test/webgen/item_tracker/test_missing_node.rb +70 -0
  146. data/test/webgen/item_tracker/test_node_content.rb +42 -0
  147. data/test/webgen/item_tracker/test_node_meta_info.rb +44 -0
  148. data/test/webgen/item_tracker/test_nodes.rb +61 -0
  149. data/test/webgen/path_handler/test_base.rb +153 -0
  150. data/test/webgen/path_handler/test_copy.rb +56 -0
  151. data/test/webgen/path_handler/test_feed.rb +85 -0
  152. data/test/webgen/path_handler/test_meta_info.rb +98 -0
  153. data/test/webgen/path_handler/test_page.rb +25 -0
  154. data/test/webgen/path_handler/test_page_utils.rb +59 -0
  155. data/test/webgen/path_handler/test_sitemap.rb +95 -0
  156. data/test/webgen/path_handler/test_template.rb +64 -0
  157. data/test/webgen/path_handler/test_virtual.rb +87 -0
  158. data/test/webgen/source/test_file_system.rb +51 -0
  159. data/test/webgen/source/test_stacked.rb +35 -0
  160. data/test/{test_source_tararchive.rb → webgen/source/test_tar_archive.rb} +10 -25
  161. data/test/webgen/tag/test_breadcrumb_trail.rb +66 -0
  162. data/test/webgen/tag/test_coderay.rb +34 -0
  163. data/test/webgen/tag/test_date.rb +18 -0
  164. data/test/webgen/tag/test_execute_command.rb +36 -0
  165. data/test/webgen/tag/test_include_file.rb +35 -0
  166. data/test/webgen/tag/test_langbar.rb +50 -0
  167. data/test/webgen/tag/test_link.rb +40 -0
  168. data/test/webgen/tag/test_menu.rb +61 -0
  169. data/test/webgen/tag/test_meta_info.rb +25 -0
  170. data/test/webgen/tag/test_relocatable.rb +50 -0
  171. data/test/webgen/tag/test_tikz.rb +41 -0
  172. data/test/webgen/task/test_create_website.rb +46 -0
  173. data/test/webgen/test_blackboard.rb +31 -0
  174. data/test/webgen/test_bundle_loader.rb +55 -0
  175. data/test/{test_cache.rb → webgen/test_cache.rb} +3 -15
  176. data/test/webgen/test_cli.rb +41 -0
  177. data/test/webgen/test_configuration.rb +131 -0
  178. data/test/webgen/test_content_processor.rb +86 -0
  179. data/test/webgen/test_context.rb +73 -0
  180. data/test/webgen/test_core_ext.rb +20 -0
  181. data/test/webgen/test_destination.rb +48 -0
  182. data/test/webgen/test_error.rb +121 -0
  183. data/test/webgen/test_extension_manager.rb +70 -0
  184. data/test/webgen/test_item_tracker.rb +106 -0
  185. data/test/{test_languages.rb → webgen/test_languages.rb} +4 -4
  186. data/test/webgen/test_logger.rb +46 -0
  187. data/test/webgen/test_node.rb +178 -0
  188. data/test/webgen/test_node_finder.rb +127 -0
  189. data/test/{test_page.rb → webgen/test_page.rb} +44 -48
  190. data/test/webgen/test_path.rb +271 -0
  191. data/test/{test_webgentask.rb → webgen/test_rake_task.rb} +4 -4
  192. data/test/webgen/test_source.rb +59 -0
  193. data/test/webgen/test_tag.rb +137 -0
  194. data/test/webgen/test_task.rb +40 -0
  195. data/test/webgen/test_tree.rb +147 -0
  196. data/test/webgen/test_utils.rb +16 -0
  197. data/test/webgen/test_website.rb +45 -0
  198. data/test/webgen/utils/test_tag_parser.rb +99 -0
  199. metadata +292 -344
  200. data/data/webgen/passive_sources/templates/atom_feed.template +0 -39
  201. data/data/webgen/passive_sources/templates/rss_feed.template +0 -28
  202. data/data/webgen/resources.yaml +0 -4
  203. data/data/webgen/webgui/app.rb +0 -11
  204. data/data/webgen/webgui/controller/main.rb +0 -135
  205. data/data/webgen/webgui/layout/default.xhtml +0 -40
  206. data/data/webgen/webgui/overrides/win32console.rb +0 -0
  207. data/data/webgen/webgui/public/css/jquery.autocomplete.css +0 -50
  208. data/data/webgen/webgui/public/css/ramaze_error.css +0 -90
  209. data/data/webgen/webgui/public/css/style.css +0 -55
  210. data/data/webgen/webgui/public/img/headerbg.jpg +0 -0
  211. data/data/webgen/webgui/public/img/webgen_logo.png +0 -0
  212. data/data/webgen/webgui/public/js/jquery.autocomplete.js +0 -15
  213. data/data/webgen/webgui/public/js/jquery.js +0 -32
  214. data/data/webgen/webgui/start.rb +0 -9
  215. data/data/webgen/webgui/view/create_website.xhtml +0 -14
  216. data/data/webgen/webgui/view/error.xhtml +0 -64
  217. data/data/webgen/webgui/view/index.xhtml +0 -22
  218. data/data/webgen/webgui/view/manage_website.xhtml +0 -18
  219. data/data/webgen/website_skeleton/README +0 -10
  220. data/data/webgen/website_skeleton/Rakefile +0 -69
  221. data/data/webgen/website_skeleton/config.yaml +0 -35
  222. data/data/webgen/website_skeleton/ext/init.rb +0 -10
  223. data/doc/contentprocessor.template +0 -11
  224. data/doc/contentprocessor/blocks.page +0 -129
  225. data/doc/contentprocessor/builder.page +0 -79
  226. data/doc/contentprocessor/erb.page +0 -60
  227. data/doc/contentprocessor/erubis.page +0 -46
  228. data/doc/contentprocessor/fragments.page +0 -26
  229. data/doc/contentprocessor/haml.page +0 -46
  230. data/doc/contentprocessor/head.page +0 -31
  231. data/doc/contentprocessor/kramdown.page +0 -49
  232. data/doc/contentprocessor/less.page +0 -34
  233. data/doc/contentprocessor/maruku.page +0 -44
  234. data/doc/contentprocessor/rdiscount.page +0 -37
  235. data/doc/contentprocessor/rdoc.page +0 -36
  236. data/doc/contentprocessor/redcloth.page +0 -41
  237. data/doc/contentprocessor/sass.page +0 -31
  238. data/doc/contentprocessor/scss.page +0 -39
  239. data/doc/contentprocessor/tags.page +0 -73
  240. data/doc/contentprocessor/tidy.page +0 -14
  241. data/doc/contentprocessor/xmllint.page +0 -14
  242. data/doc/extensions.metainfo +0 -29
  243. data/doc/extensions.page +0 -15
  244. data/doc/extensions.template +0 -17
  245. data/doc/faq.page +0 -222
  246. data/doc/getting_started.page +0 -135
  247. data/doc/index.page +0 -71
  248. data/doc/manual.page +0 -727
  249. data/doc/reference_configuration.page +0 -1254
  250. data/doc/reference_metainfo.page +0 -265
  251. data/doc/reference_website_styles.page +0 -32
  252. data/doc/source/filesystem.page +0 -41
  253. data/doc/source/tararchive.page +0 -40
  254. data/doc/sourcehandler.template +0 -23
  255. data/doc/sourcehandler/copy.page +0 -19
  256. data/doc/sourcehandler/directory.page +0 -27
  257. data/doc/sourcehandler/feed.page +0 -102
  258. data/doc/sourcehandler/metainfo.page +0 -48
  259. data/doc/sourcehandler/page.page +0 -14
  260. data/doc/sourcehandler/sitemap.page +0 -46
  261. data/doc/sourcehandler/template.page +0 -45
  262. data/doc/sourcehandler/virtual.page +0 -49
  263. data/doc/tag.template +0 -25
  264. data/doc/tag/breadcrumbtrail.page +0 -40
  265. data/doc/tag/coderay.page +0 -53
  266. data/doc/tag/date.page +0 -31
  267. data/doc/tag/executecommand.page +0 -26
  268. data/doc/tag/includefile.page +0 -32
  269. data/doc/tag/langbar.page +0 -47
  270. data/doc/tag/link.page +0 -44
  271. data/doc/tag/menu.page +0 -109
  272. data/doc/tag/metainfo.page +0 -29
  273. data/doc/tag/relocatable.page +0 -38
  274. data/doc/tag/sitemap.page +0 -31
  275. data/doc/tag/tikz.page +0 -159
  276. data/doc/upgrading.page +0 -138
  277. data/doc/webgen_page_format.page +0 -129
  278. data/doc/website_styles.metainfo +0 -8
  279. data/lib/webgen/cli/apply_command.rb +0 -66
  280. data/lib/webgen/cli/run_command.rb +0 -22
  281. data/lib/webgen/cli/webgui_command.rb +0 -68
  282. data/lib/webgen/common.rb +0 -27
  283. data/lib/webgen/common/sitemap.rb +0 -83
  284. data/lib/webgen/contentprocessor.rb +0 -117
  285. data/lib/webgen/contentprocessor/blocks.rb +0 -92
  286. data/lib/webgen/contentprocessor/builder.rb +0 -29
  287. data/lib/webgen/contentprocessor/erb.rb +0 -26
  288. data/lib/webgen/contentprocessor/erubis.rb +0 -39
  289. data/lib/webgen/contentprocessor/fragments.rb +0 -25
  290. data/lib/webgen/contentprocessor/haml.rb +0 -34
  291. data/lib/webgen/contentprocessor/head.rb +0 -128
  292. data/lib/webgen/contentprocessor/kramdown.rb +0 -27
  293. data/lib/webgen/contentprocessor/kramdown/html.rb +0 -36
  294. data/lib/webgen/contentprocessor/less.rb +0 -35
  295. data/lib/webgen/contentprocessor/maruku.rb +0 -36
  296. data/lib/webgen/contentprocessor/rdiscount.rb +0 -19
  297. data/lib/webgen/contentprocessor/rdoc.rb +0 -20
  298. data/lib/webgen/contentprocessor/redcloth.rb +0 -21
  299. data/lib/webgen/contentprocessor/sass.rb +0 -22
  300. data/lib/webgen/contentprocessor/scss.rb +0 -22
  301. data/lib/webgen/contentprocessor/tags.rb +0 -170
  302. data/lib/webgen/contentprocessor/tidy.rb +0 -38
  303. data/lib/webgen/contentprocessor/xmllint.rb +0 -37
  304. data/lib/webgen/context/render.rb +0 -32
  305. data/lib/webgen/context/tags.rb +0 -20
  306. data/lib/webgen/coreext.rb +0 -13
  307. data/lib/webgen/default_config.rb +0 -240
  308. data/lib/webgen/loggable.rb +0 -25
  309. data/lib/webgen/output.rb +0 -86
  310. data/lib/webgen/output/filesystem.rb +0 -69
  311. data/lib/webgen/source/filesystem.rb +0 -61
  312. data/lib/webgen/source/resource.rb +0 -45
  313. data/lib/webgen/source/tararchive.rb +0 -78
  314. data/lib/webgen/sourcehandler.rb +0 -275
  315. data/lib/webgen/sourcehandler/base.rb +0 -281
  316. data/lib/webgen/sourcehandler/copy.rb +0 -44
  317. data/lib/webgen/sourcehandler/directory.rb +0 -30
  318. data/lib/webgen/sourcehandler/feed.rb +0 -92
  319. data/lib/webgen/sourcehandler/fragment.rb +0 -70
  320. data/lib/webgen/sourcehandler/memory.rb +0 -42
  321. data/lib/webgen/sourcehandler/metainfo.rb +0 -128
  322. data/lib/webgen/sourcehandler/page.rb +0 -64
  323. data/lib/webgen/sourcehandler/sitemap.rb +0 -60
  324. data/lib/webgen/sourcehandler/template.rb +0 -66
  325. data/lib/webgen/sourcehandler/virtual.rb +0 -117
  326. data/lib/webgen/tag/base.rb +0 -170
  327. data/lib/webgen/tag/breadcrumbtrail.rb +0 -70
  328. data/lib/webgen/tag/executecommand.rb +0 -31
  329. data/lib/webgen/tag/includefile.rb +0 -42
  330. data/lib/webgen/tag/metainfo.rb +0 -27
  331. data/lib/webgen/tag/sitemap.rb +0 -41
  332. data/lib/webgen/websiteaccess.rb +0 -31
  333. data/lib/webgen/websitemanager.rb +0 -125
  334. data/misc/default.css +0 -403
  335. data/misc/default.template +0 -76
  336. data/misc/htmldoc.metainfo +0 -26
  337. data/misc/htmldoc.virtual +0 -17
  338. data/misc/images/arrow.gif +0 -0
  339. data/misc/images/error.png +0 -0
  340. data/misc/images/headerbg.jpg +0 -0
  341. data/misc/images/important.png +0 -0
  342. data/misc/images/information.png +0 -0
  343. data/misc/images/quote.gif +0 -0
  344. data/misc/images/warning.png +0 -0
  345. data/misc/logo.svg +0 -313
  346. data/misc/style.page +0 -33
  347. data/test/helper.rb +0 -61
  348. data/test/test_blackboard.rb +0 -60
  349. data/test/test_cli.rb +0 -119
  350. data/test/test_common_sitemap.rb +0 -58
  351. data/test/test_configuration.rb +0 -68
  352. data/test/test_contentprocessor.rb +0 -39
  353. data/test/test_contentprocessor_builder.rb +0 -41
  354. data/test/test_contentprocessor_erb.rb +0 -33
  355. data/test/test_contentprocessor_erubis.rb +0 -62
  356. data/test/test_contentprocessor_fragments.rb +0 -43
  357. data/test/test_contentprocessor_haml.rb +0 -39
  358. data/test/test_contentprocessor_head.rb +0 -96
  359. data/test/test_contentprocessor_kramdown.rb +0 -56
  360. data/test/test_contentprocessor_less.rb +0 -40
  361. data/test/test_contentprocessor_maruku.rb +0 -33
  362. data/test/test_contentprocessor_rdiscount.rb +0 -21
  363. data/test/test_contentprocessor_rdoc.rb +0 -22
  364. data/test/test_contentprocessor_redcloth.rb +0 -26
  365. data/test/test_contentprocessor_sass.rb +0 -28
  366. data/test/test_contentprocessor_scss.rb +0 -28
  367. data/test/test_contentprocessor_tags.rb +0 -122
  368. data/test/test_contentprocessor_tidy.rb +0 -34
  369. data/test/test_contentprocessor_xmllint.rb +0 -38
  370. data/test/test_context.rb +0 -81
  371. data/test/test_error.rb +0 -93
  372. data/test/test_loggable.rb +0 -32
  373. data/test/test_logger.rb +0 -94
  374. data/test/test_node.rb +0 -469
  375. data/test/test_output_filesystem.rb +0 -60
  376. data/test/test_path.rb +0 -241
  377. data/test/test_source_filesystem.rb +0 -76
  378. data/test/test_source_resource.rb +0 -28
  379. data/test/test_source_stacked.rb +0 -49
  380. data/test/test_sourcehandler_base.rb +0 -136
  381. data/test/test_sourcehandler_copy.rb +0 -47
  382. data/test/test_sourcehandler_directory.rb +0 -38
  383. data/test/test_sourcehandler_feed.rb +0 -88
  384. data/test/test_sourcehandler_fragment.rb +0 -70
  385. data/test/test_sourcehandler_main.rb +0 -39
  386. data/test/test_sourcehandler_memory.rb +0 -44
  387. data/test/test_sourcehandler_metainfo.rb +0 -127
  388. data/test/test_sourcehandler_page.rb +0 -73
  389. data/test/test_sourcehandler_sitemap.rb +0 -68
  390. data/test/test_sourcehandler_template.rb +0 -68
  391. data/test/test_sourcehandler_virtual.rb +0 -106
  392. data/test/test_tag_base.rb +0 -62
  393. data/test/test_tag_breadcrumbtrail.rb +0 -91
  394. data/test/test_tag_coderay.rb +0 -45
  395. data/test/test_tag_date.rb +0 -18
  396. data/test/test_tag_executecommand.rb +0 -41
  397. data/test/test_tag_includefile.rb +0 -50
  398. data/test/test_tag_langbar.rb +0 -71
  399. data/test/test_tag_link.rb +0 -70
  400. data/test/test_tag_menu.rb +0 -207
  401. data/test/test_tag_metainfo.rb +0 -26
  402. data/test/test_tag_relocatable.rb +0 -60
  403. data/test/test_tag_sitemap.rb +0 -47
  404. data/test/test_tag_tikz.rb +0 -69
  405. data/test/test_tree.rb +0 -70
  406. data/test/test_website.rb +0 -130
  407. data/test/test_websiteaccess.rb +0 -25
  408. data/test/test_websitemanager.rb +0 -65
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/content_processor/sass'
4
+
5
+ module Webgen
6
+ class ContentProcessor
7
+
8
+ # Processes content in sassy CSS markup (used for writing CSS files) using the +sass+ library.
9
+ module Scss
10
+
11
+ # Convert the content in +scss+ markup to CSS.
12
+ def self.call(context)
13
+ options = Webgen::ContentProcessor::Sass.default_options(context).merge(:syntax => :scss)
14
+ context.content = ::Sass::Engine.new(context.content, options).render
15
+ context
16
+ rescue ::Sass::SyntaxError => e
17
+ raise Webgen::RenderError.new(e, self.class.name, context.dest_node, nil, (e.sass_line if e.sass_line))
18
+ end
19
+
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,30 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/content_processor'
4
+
5
+ module Webgen
6
+ class ContentProcessor
7
+
8
+ # Processes special webgen tags to provide dynamic content.
9
+ #
10
+ # webgen tags are an easy way to add dynamically generated content to websites, for example menus
11
+ # or breadcrumb trails.
12
+ #
13
+ # See Webgen::Tag and all the classes in its namespace for further information.
14
+ module Tags
15
+
16
+ # Replace all webgen tags in the content of +context+ with the rendered content.
17
+ def self.call(context)
18
+ context.website.ext.tag.replace_tags(context.content) do |tag, params, body|
19
+ context.website.logger.debug do
20
+ "Replacing tag #{tag} with data #{params.inspect} and body '#{body}' in <#{context.ref_node}>"
21
+ end
22
+ context.website.ext.tag.call(tag, params, body, context)
23
+ end
24
+ context
25
+ end
26
+
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,32 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/content_processor'
4
+ require 'webgen/utils/external_command'
5
+
6
+ module Webgen
7
+ class ContentProcessor
8
+
9
+ # Uses the external +tidy+ program to format the content as valid (X)HTML.
10
+ module Tidy
11
+
12
+ # Process the content of +context+ with the +tidy+ program.
13
+ def self.call(context)
14
+ Webgen::Utils::ExternalCommand.ensure_available!('tidy', '-v')
15
+
16
+ cmd = "tidy -q #{context.website.config['content_processor.tidy.options']}"
17
+ status, stdout, stderr = systemu(cmd, 'stdin' => context.content)
18
+ if status.exitstatus != 0
19
+ stderr.split(/\n/).each do |line|
20
+ context.website.logger.send(status.exitstatus == 1 ? :warn : :error) do
21
+ "Tidy reported problems for <#{context.dest_node.alcn}>: #{line}"
22
+ end
23
+ end
24
+ end
25
+ context.content = stdout
26
+ context
27
+ end
28
+
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,116 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'erb'
4
+ require 'tempfile'
5
+ require 'fileutils'
6
+ require 'webgen/content_processor'
7
+ require 'webgen/utils/external_command'
8
+
9
+ Webgen::Utils::ExternalCommand.ensure_available!('pdflatex', '-v')
10
+ Webgen::Utils::ExternalCommand.ensure_available!('pdfcrop', '--version')
11
+ Webgen::Utils::ExternalCommand.ensure_available!('gs', '-v')
12
+ Webgen::Utils::ExternalCommand.ensure_available!('convert', '-version')
13
+ Webgen::Utils::ExternalCommand.ensure_available!('identify', '-version')
14
+
15
+ module Webgen
16
+ class ContentProcessor
17
+
18
+ # Uses LaTeX and the TikZ library for creating images from LaTeX code.
19
+ module Tikz
20
+
21
+ LATEX_TEMPLATE = <<EOF
22
+ \\nonstopmode \\documentclass{article} \\usepackage{tikz} \\pagestyle{empty}
23
+ <% if context['content_processor.tikz.libraries'] %>
24
+ \\usetikzlibrary{<%= context['content_processor.tikz.libraries'].join(',') %>}
25
+ <% end %>
26
+ \\begin{document}
27
+ \\begin{tikzpicture}[<%= context['content_processor.tikz.opts'] %>]
28
+ <%= context.content %>
29
+ \\end{tikzpicture}
30
+ \\end{document}
31
+ EOF
32
+
33
+ # Process the content with LaTeX to generate a TikZ image.
34
+ def self.call(context)
35
+ prepare_options(context)
36
+ context.content = ERB.new(LATEX_TEMPLATE).result(binding)
37
+ context.content = File.binread(compile(context))
38
+ context
39
+ end
40
+
41
+ # Collect the necessary options and save them in the context object.
42
+ def self.prepare_options(context)
43
+ %w[content_processor.tikz.resolution content_processor.tikz.transparent
44
+ content_processor.tikz.libraries content_processor.tikz.opts].each do |opt|
45
+ context[opt] = context.content_node[opt] || context.website.config[opt]
46
+ end
47
+ end
48
+ private_class_method :prepare_options
49
+
50
+ # Compile the LaTeX document stored in the Context and convert the resulting PDF to the
51
+ # correct output image format specified by context[:ext] (the extension needs to include the
52
+ # dot).
53
+ #
54
+ # Returns the path to the created image.
55
+ def self.compile(context)
56
+ cwd = context.website.tmpdir('content_processor.tikz')
57
+ FileUtils.mkdir_p(cwd)
58
+ tempfile = Tempfile.open(['webgen-tikz', '.tex'], cwd)
59
+ tempfile.write(context.content)
60
+ tempfile.close
61
+
62
+ file = File.basename(tempfile.path, '.tex')
63
+ ext = File.extname(context.dest_node.dest_path)
64
+ render_res, output_res = context['content_processor.tikz.resolution'].split(' ')
65
+
66
+ execute("pdflatex --shell-escape -interaction=batchmode #{file}.tex", cwd, context) do |status, stdout, stderr|
67
+ errors = stderr.scan(/^!(.*\n.*)/).join("\n")
68
+ raise Webgen::RenderError.new("Error while parsing TikZ picture commands with PDFLaTeX: #{errors}",
69
+ self.name, context.dest_node, context.ref_node)
70
+ end
71
+
72
+ execute("pdfcrop #{file}.pdf #{file}.pdf", cwd, context)
73
+
74
+ if context['content_processor.tikz.transparent'] && ext =~ /\.png/i
75
+ cmd = "gs -dSAFER -dBATCH -dNOPAUSE -r#{render_res} -sDEVICE=pngalpha -dGraphicsAlphaBits=4 " +
76
+ "-dTextAlphaBits=4 -sOutputFile=#{file}#{ext} #{file}.pdf"
77
+ else
78
+ cmd = "convert -density #{render_res} #{file}.pdf #{file}#{ext}"
79
+ end
80
+ execute(cmd, cwd, context)
81
+
82
+ if render_res != output_res
83
+ status, stdout, stderr = execute("identify #{file}#{ext}", cwd, context)
84
+ width, height = stdout.scan(/\s\d+x\d+\s/).first.strip.split('x').collect do |s|
85
+ s.to_f * output_res.to_f / render_res.to_f
86
+ end
87
+ execute("convert -resize #{width}x#{height} #{file}#{ext} #{file}#{ext}", cwd, context)
88
+ end
89
+ File.join(cwd, file + ext)
90
+ end
91
+ private_class_method :compile
92
+
93
+ # Execute the command +cmd+ in the working directory +cwd+.
94
+ #
95
+ # If the exit status is not zero, yields to the given block if one is given, or raises an error
96
+ # otherwise.
97
+ #
98
+ # Returns [status, stdout, stderr]
99
+ def self.execute(cmd, cwd, context)
100
+ status, stdout, stderr = systemu(cmd, :cwd => cwd)
101
+ if status.exitstatus != 0
102
+ if block_given?
103
+ yield(status, stdout, stderr)
104
+ else
105
+ raise Webgen::RenderError.new("Error while running a command for a TikZ picture: #{stdout + "\n" + stderr}",
106
+ self.name, context.dest_node, context.ref_node)
107
+ end
108
+ end
109
+ [status, stdout, stderr]
110
+ end
111
+ private_class_method :execute
112
+
113
+ end
114
+
115
+ end
116
+ end
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/content_processor'
4
+ require 'webgen/utils/external_command'
5
+
6
+ module Webgen
7
+ class ContentProcessor
8
+
9
+ # Uses the external +xmllint+ program to check if the content is valid (X)HTML.
10
+ module Xmllint
11
+
12
+ # Checks the content of +context+ with the +xmllint+ program for validness.
13
+ def self.call(context)
14
+ Webgen::Utils::ExternalCommand.ensure_available!('xmllint', '--version')
15
+
16
+ cmd = "xmllint #{context.website.config['content_processor.xmllint.options']} -"
17
+ status, stdout, stderr = systemu(cmd, 'stdin' => context.content)
18
+ if status.exitstatus != 0
19
+ stderr.scan(/^-:(\d+):(.*?\n)(.*?\n)/).each do |line, error_msg, line_context|
20
+ context.website.logger.warn do
21
+ "xmllint reported problems for <#{context.dest_node.alcn}:~#{line}>: #{error_msg.strip} (context: #{line_context.strip})"
22
+ end
23
+ end
24
+ end
25
+ context
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+ end
@@ -1,60 +1,88 @@
1
1
  # -*- encoding: utf-8 -*-
2
- require 'webgen/context/nodes'
3
- require 'webgen/context/tags'
4
- require 'webgen/context/render'
5
2
 
6
3
  module Webgen
7
4
 
8
5
  # This class represents the context object that is passed, for example, to the +call+ method of a
9
6
  # content processor.
10
7
  #
11
- # The needed context variables are stored in the +options+ hash. You can set any options you like,
12
- # however, there are three noteworthy options:
8
+ # == About
13
9
  #
14
- # [<tt>:content</tt>]
15
- # The content string that should be processed.
10
+ # A context object provides information about the render context as well as access to the website
11
+ # that is rendered. The needed context variables are stored in the +options+ hash. You can set any
12
+ # options you like, however, there are two noteworthy options:
16
13
  #
17
- # [<tt>:processors</tt>]
18
- # Normally an ContentProcessor::AccessHash object providing access to all available content
19
- # processors.
14
+ # [:content]
15
+ # The content string that should be processed. This option is always set.
20
16
  #
21
- # [<tt>:chain</tt>]
17
+ # [:chain]
22
18
  # The chain of nodes that is processed. There are some utiltity methods for getting
23
- # special nodes of the chain (see #ref_node, #content_node and #dest_node).
19
+ # special nodes of the chain (see Nodes#ref_node, Nodes#content_node and Nodes#dest_node).
24
20
  #
25
21
  # The +persistent+ options hash is shared by all cloned Context objects.
22
+ #
23
+ # == Adding custom methods
24
+ #
25
+ # If you want to add custom methods to each context object of your website that is created, you
26
+ # just need to define one or more modules in which your custom methods are defined and then add
27
+ # the modules to the 'website.ext.context_modules' array.
28
+ #
29
+ # Here is a simple example:
30
+ #
31
+ # module MyContextMethods
32
+ #
33
+ # def my_method
34
+ # # do something useful here
35
+ # end
36
+ #
37
+ # end
38
+ #
39
+ # website.ext.context_modules << MyContextMethods
40
+ #
26
41
  class Context
27
42
 
28
- include Webgen::WebsiteAccess
29
- public :website
43
+ require 'webgen/context/nodes'
44
+ require 'webgen/context/webgen_tags'
45
+ require 'webgen/context/rendering'
46
+ require 'webgen/context/html_head'
47
+
48
+ include Nodes
49
+ include WebgenTags
50
+ include Rendering
51
+ include HtmlHead
52
+
30
53
 
31
54
  # The persistent options. Once initialized, all cloned objects refer to the same hash.
32
55
  attr_reader :persistent
33
56
 
34
57
  # Processing options.
35
- attr_accessor :options
58
+ attr_reader :options
36
59
 
37
- # Create a new Context object. You can use the +options+ hash to set needed options.
60
+ # The website object to which the render context belongs.
61
+ attr_reader :website
62
+
63
+ # Create a new Context object belonging to the website object +website+.
64
+ #
65
+ # All modules listed in the array 'website.ext.context_modules' are automatically used to extend
66
+ # the Context object.
38
67
  #
39
68
  # The following options are set by default and can be overridden via the +options+ hash:
40
69
  #
41
- # [<tt>:content</tt>]
70
+ # [:content]
42
71
  # Is set to an empty string.
43
72
  #
44
- # [<tt>:processors</tt>]
45
- # Is set to a new AccessHash.
46
- def initialize(options = {}, persistent = {})
47
- @options = {
48
- :content => '',
49
- :processors => Webgen::ContentProcessor::AccessHash.new
50
- }.merge(options)
73
+ def initialize(website, options = {}, persistent = {})
74
+ @website = website
75
+ (website.ext.context_modules || []).each {|m| self.extend(m)}
76
+ @options = {:content => ''}.merge(options)
51
77
  @persistent = persistent
52
78
  end
53
79
 
54
- # Create a copy of the current object. You can use the +options+ parameter to override options
55
- # of the current Context object in the newly created Context object.
80
+ # Create a copy of the current object.
81
+ #
82
+ # You can use the +options+ parameter to override options of the current Context object in the
83
+ # newly created Context object.
56
84
  def clone(options = {})
57
- self.class.new(@options.merge(options), @persistent)
85
+ self.class.new(@website, @options.merge(options), @persistent)
58
86
  end
59
87
 
60
88
  # Return the value of the option +name+.
@@ -67,12 +95,12 @@ module Webgen
67
95
  @options[name] = value
68
96
  end
69
97
 
70
- # Return the <tt>:content</tt> option.
98
+ # Return the :content option.
71
99
  def content
72
100
  @options[:content]
73
101
  end
74
102
 
75
- # Set the <tt>:content</tt> option to the given +value+.
103
+ # Set the :content option to the given +value+.
76
104
  def content=(value)
77
105
  @options[:content] = value
78
106
  end
@@ -0,0 +1,60 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/error'
4
+
5
+ module Webgen
6
+ class Context
7
+
8
+ # Provides methods for adding data for Webgen::ContentProcessor::HtmlHead.
9
+ module HtmlHead
10
+
11
+ # Proxy object for working with the data structure needed by
12
+ # Webgen::ContentProcessor::HtmlHead.
13
+ class Proxy
14
+
15
+ def initialize(context) #:nodoc:
16
+ @context = context
17
+ end
18
+
19
+ # Add a link to the given file in the HTML head section.
20
+ #
21
+ # The type can either be :css for CSS files or :js for javascript files. The path to the
22
+ # file is resolved using the "relocatable" tag (see Webgen::Tag::Relocatable).
23
+ def link_file(type, file)
24
+ type_check!(type)
25
+ (cp_hash["#{type}_file".intern] ||= []) << @context.tag('relocatable', file)
26
+ end
27
+
28
+ # Add inline CSS or JS fragments to the HTML head section.
29
+ #
30
+ # The type can either be :css for a CSS fragment or :js for a javascript fragment.
31
+ def inline_fragment(type, content)
32
+ type_check!(type)
33
+ (cp_hash["#{type}_inline".intern] ||= []) << content
34
+ end
35
+
36
+ def type_check!(type) #:nodoc:
37
+ if ![:css, :js].include?(type)
38
+ raise Webgen::RenderError.new("Type must either be :css or :js, not #{type}",
39
+ self.class.name, @context.dest_node, @context.ref_node)
40
+ end
41
+ end
42
+ private :type_check!
43
+
44
+ def cp_hash #:nodoc:
45
+ @context.persistent[:cp_html_head] ||= {}
46
+ end
47
+ private :cp_hash
48
+
49
+ end
50
+
51
+ # Return the Proxy object for adding data to the context for
52
+ # Webgen::ContentProcessor::HtmlHead.
53
+ def html_head
54
+ Proxy.new(self)
55
+ end
56
+
57
+ end
58
+
59
+ end
60
+ end
@@ -1,36 +1,41 @@
1
- module Webgen
1
+ # -*- encoding: utf-8 -*-
2
2
 
3
+ module Webgen
3
4
  class Context
4
5
 
5
- # Return the node which represents the file into which everything gets rendered. This is normally
6
- # the same node as <tt>#content_node</tt> but can differ in special cases. For example, when
7
- # rendering the content of node called <tt>my.page</tt> into the output of the node
8
- # <tt>this.page</tt>, <tt>this.page</tt> would be the +dest_node+ and <tt>my.page</tt> would be
9
- # the +content_node+.
10
- #
11
- # The +dest_node+ is not included in the chain but can be set via the option <tt>:dest_node</tt>!
12
- #
13
- # The returned node should be used as source node for calculating relative paths to other nodes.
14
- def dest_node
15
- @options[:dest_node] || self.content_node
16
- end
6
+ # Provides quick access to special nodes of the node chain of a context object.
7
+ module Nodes
17
8
 
18
- # Return the reference node, ie. the node which provided the original content for this context
19
- # object.
20
- #
21
- # The returned node should be used, for example, for resolving relative paths.
22
- def ref_node
23
- @options[:chain] && @options[:chain].first
24
- end
9
+ # Return the node which represents the file into which everything gets rendered.
10
+ #
11
+ # This is normally the same node as #content_node but can differ in special cases. For
12
+ # example, when rendering the content of node called 'my.page' into the output of the node
13
+ # 'this.page', 'this.page' would be the #dest_node and 'my.page' would be the #content_node.
14
+ #
15
+ # The #dest_node is not included in the chain but can be set via the option +:dest_node+!
16
+ #
17
+ # The returned node should be used as source node for calculating relative paths to other nodes.
18
+ def dest_node
19
+ @options[:dest_node] || self.content_node
20
+ end
21
+
22
+ # Return the reference node, ie. the node which provided the original content for this context
23
+ # object.
24
+ #
25
+ # The returned node should be used, for example, for resolving relative paths.
26
+ def ref_node
27
+ @options[:chain] && @options[:chain].first
28
+ end
29
+
30
+ # Return the node that is ultimately rendered.
31
+ #
32
+ # This node should be used, for example, for retrieving meta information.
33
+ def content_node
34
+ @options[:chain] && @options[:chain].last
35
+ end
36
+ alias :node :content_node
25
37
 
26
- # Return the node that is ultimately rendered.
27
- #
28
- # This node should be used, for example, for retrieving meta information.
29
- def content_node
30
- @options[:chain] && @options[:chain].last
31
38
  end
32
- alias :node :content_node
33
39
 
34
40
  end
35
-
36
41
  end