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,160 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/extension_manager'
4
+ require 'webgen/error'
5
+
6
+ module Webgen
7
+
8
+ # Namespace for all content processors.
9
+ #
10
+ # == About
11
+ #
12
+ # Content processors are used to process the content of paths, normally of paths in Webgen Page
13
+ # Format. However, they can potentially process any type of content, even binary content.
14
+ #
15
+ # == Implementing a content processor
16
+ #
17
+ # A content processor only needs to respond to one method called +call+. This method is invoked
18
+ # with a Webgen::Context object that provides the whole context (especially the content and the
19
+ # node chain) and the method needs to return this object. During processing a content processor
20
+ # normally changes the content of the context but it does not need to.
21
+ #
22
+ # This allows one to implement a content processor as a class with a class method called +call+.
23
+ # Or as a Proc object.
24
+ #
25
+ # The content processor has to be registered so that webgen knows about it, see
26
+ # ContentProcessor.register for more information.
27
+ #
28
+ # == Sample Content Processor
29
+ #
30
+ # The following sample content processor checks for a meta information +replace_key+ and replaces
31
+ # strings of the form 'replace_key:path/to/node' with a link to the specified node if it is found.
32
+ #
33
+ # Note how the content node, the reference node and the destination node are used so that the
34
+ # correct meta information is used, the node is correctly resolved and the correct relative link
35
+ # is calculated respectively!
36
+ #
37
+ # class Replacer
38
+ #
39
+ # def self.call(context)
40
+ # if !context.content_node['replace_key'].to_s.empty?
41
+ # context.content.gsub!(/#{context.content_node['replace_key']}:([\w\/.]+)/ ) do |match|
42
+ # link_node = context.ref_node.resolve($1, context.content_node.lang)
43
+ # if link_node
44
+ # context.dest_node.link_to(link_node, context.content_node.lang)
45
+ # else
46
+ # match
47
+ # end
48
+ # end
49
+ # end
50
+ # context
51
+ # rescue Exception => e
52
+ # raise "Error while replacing special key: #{e.message}"
53
+ # end
54
+ #
55
+ # end
56
+ #
57
+ # website.ext.content_processor.register Replacer, :name => 'replacer'
58
+ #
59
+ class ContentProcessor
60
+
61
+ include Webgen::ExtensionManager
62
+
63
+ # Register a content processor.
64
+ #
65
+ # The parameter +klass+ can either be a String containing the name of a class/module (which has
66
+ # to respond to :call) or an object that responds to :call. If the class is located under this
67
+ # namespace, only the class name without the hierarchy part is needed, otherwise the full
68
+ # class/module name including parent module/class names is needed.
69
+ #
70
+ # Instead of registering an object that responds to \#call, you can also provide a block that
71
+ # has to take one parameter (the context object).
72
+ #
73
+ # === Options:
74
+ #
75
+ # [:name] The name for the content processor. If not set, it defaults to the snake-case version
76
+ # of the class name (without the hierarchy part). It should only contain letters.
77
+ #
78
+ # [:type] Defines which type of content the content processor can process. Can be set to either
79
+ # :text (the default) or :binary.
80
+ #
81
+ # [:ext_map] Defines a mapping of pre-processed file extension names to post-processed
82
+ # file extension names (e.g. {'sass' => 'css'}).
83
+ #
84
+ # === Examples:
85
+ #
86
+ # content_processor.register('Kramdown') # registers Webgen::ContentProcessor::Kramdown
87
+ #
88
+ # content_processor.register('::Kramdown') # registers Kramdown !!!
89
+ #
90
+ # content_processor.register('MyModule::Doit', type: :binary)
91
+ #
92
+ # content_processor.register('doit') do |context|
93
+ # context.content = 'Nothing left.'
94
+ # end
95
+ #
96
+ def register(klass, options={}, &block)
97
+ name = do_register(klass, options, true, &block)
98
+ ext_data(name).type = options[:type] || :text
99
+ ext_data(name).extension_map = options[:ext_map] || {}
100
+ end
101
+
102
+ # Call the content processor object identified by the given name with the given context.
103
+ def call(name, context)
104
+ extension(name).call(context)
105
+ rescue Webgen::Error => e
106
+ e.path = context.dest_node if e.path.to_s.empty?
107
+ raise
108
+ rescue Exception => e
109
+ ext = extension(name)
110
+ raise Webgen::RenderError.new(e, (ext.respond_to?(:name) ? ext.name : nil), context.dest_node)
111
+ end
112
+
113
+ # Normalize the content processor pipeline.
114
+ #
115
+ # The pipeline parameter can be a String in the format 'a,b,c' or 'a, b, c' or an array '[a, b,
116
+ # c]' with content processors a, b and c.
117
+ #
118
+ # Raises an error if an unknown content processor is found.
119
+ #
120
+ # Returns an array with valid content processors.
121
+ def normalize_pipeline(pipeline)
122
+ pipeline = (pipeline.kind_of?(String) ? pipeline.split(/,\s*/) : pipeline)
123
+ pipeline.each do |processor|
124
+ raise Webgen::Error.new("Unknown content processor '#{processor}'") if !registered?(processor)
125
+ end
126
+ pipeline
127
+ end
128
+
129
+ # Return whether the content processor is processing binary data.
130
+ def is_binary?(name)
131
+ registered?(name) && ext_data(name).type == :binary
132
+ end
133
+
134
+ # Return the mapping of pre-processed file extension names to post-processed file extension
135
+ # names for the given content processor or a combination of all mappings if +name+ is +nil+.
136
+ #
137
+ # An empty map is returned if the content processor is not registered.
138
+ def extension_map(name = nil)
139
+ if name.nil?
140
+ @extension_map ||= registered_extensions.inject({}) {|hash, data| hash.update(data.last.extension_map)}
141
+ elsif registered?(name)
142
+ ext_data(name).extension_map
143
+ else
144
+ {}
145
+ end
146
+ end
147
+
148
+ # Return the content processor name and the mapped extension of a pre-processed file extension
149
+ # or +nil+ if the extension cannot be mapped.
150
+ def map_extension(ext)
151
+ registered_extensions.each do |name, data|
152
+ mapped_ext = data.extension_map[ext]
153
+ return [name, mapped_ext] if mapped_ext
154
+ end
155
+ nil
156
+ end
157
+
158
+ end
159
+
160
+ end
@@ -0,0 +1,96 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/content_processor'
4
+ require 'webgen/error'
5
+
6
+ module Webgen
7
+ class ContentProcessor
8
+
9
+ # Replaces special XML tags with the rendered content of a node block.
10
+ #
11
+ # The module provides a ::call method so that it can be used by the content processor extension.
12
+ # However, it also provides the ::render_block method that contains the actual logic for
13
+ # rendering a block of a node given a render context.
14
+ module Blocks
15
+
16
+ BLOCK_RE = /<webgen:block\s*?((?:\s\w+=('|")[^'"]+\2)+)\s*\/>/ # :nodoc:
17
+ BLOCK_ATTR_RE = /(\w+)=('|")([^'"]+)\2/ # :nodoc:
18
+
19
+ # Replace the webgen:block xml tags with the rendered content of the specified node.
20
+ def self.call(context)
21
+ context.content.gsub!(BLOCK_RE) do |match|
22
+ attr = {}
23
+ match_object = $~
24
+ attr[:line_nr_proc] = lambda { match_object.pre_match.scan("\n").size + 1 }
25
+ match.scan(BLOCK_ATTR_RE) {|name, sep, content| attr[name.to_sym] = content}
26
+ render_block(context, attr)
27
+ end
28
+ context
29
+ end
30
+
31
+ # Render a block of a page node and return the result.
32
+ #
33
+ # The Webgen::Context object +context+ is used as the render context and the +options+ hash
34
+ # needs to hold all relevant information, that is:
35
+ #
36
+ # [:name (mandatory)]
37
+ # The name of the block that should be used.
38
+ #
39
+ # [:chain]
40
+ # The node chain used for rendering. If this is not specified, the node chain from the
41
+ # context is used. It needs to be a String in the format '(A)LCN;(A)LCN;...' or an array of
42
+ # nodes.
43
+ #
44
+ # [:node]
45
+ # Defines which node in the node chain should be used. Valid values are +next+ (= default
46
+ # value; the next node in the node chain), +first+ (the first node in the node chain with a
47
+ # block called +name+) or +current+ (the currently rendered node, ignores the +chain+ option).
48
+ #
49
+ # [:notfound]
50
+ # If this property is set to +ignore+, a missing block will not raise an error. It is unset by
51
+ # default, so missing blocks will raise errors.
52
+ #
53
+ def self.render_block(context, options)
54
+ if options[:chain].nil?
55
+ used_chain = (context[:chain].length > 1 ? context[:chain][1..-1] : context[:chain].dup)
56
+ elsif options[:chain].kind_of?(Array)
57
+ used_chain = options[:chain]
58
+ dest_node = context.dest_node
59
+ else
60
+ paths = options[:chain].split(';')
61
+ used_chain = paths.collect do |path|
62
+ context.ref_node.resolve(path.strip, context.dest_node.lang, true)
63
+ end.compact
64
+ return '' if used_chain.length != paths.length
65
+ dest_node = context.dest_node
66
+ end
67
+
68
+ if options[:node] == 'first'
69
+ used_chain.shift while used_chain.length > 0 && !used_chain.first.blocks.has_key?(options[:name])
70
+ elsif options[:node] == 'current'
71
+ used_chain = context[:chain].dup
72
+ end
73
+ block_node = used_chain.first
74
+
75
+ if !block_node || !block_node.blocks.has_key?(options[:name])
76
+ if options[:notfound] == 'ignore'
77
+ return ''
78
+ elsif block_node
79
+ raise Webgen::RenderError.new("No block named '#{options[:name]}' found in <#{block_node}>",
80
+ self.name, context.dest_node,
81
+ context.ref_node, (options[:line_nr_proc].call if options[:line_nr_proc]))
82
+ else
83
+ raise Webgen::RenderError.new("No node in the render chain has a block named '#{options[:name]}'",
84
+ self.name, context.dest_node,
85
+ context.ref_node, (options[:line_nr_proc].call if options[:line_nr_proc]))
86
+ end
87
+ end
88
+
89
+ tmp_context = block_node.render_block(options[:name], context.clone(:chain => used_chain, :dest_node => dest_node))
90
+ tmp_context.content
91
+ end
92
+
93
+ end
94
+
95
+ end
96
+ end
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/content_processor'
4
+ webgen_require 'builder'
5
+
6
+ module Webgen
7
+ class ContentProcessor
8
+
9
+ # Processes content that is valid Ruby to build an XML tree. This is done by using the +builder+
10
+ # library.
11
+ module Builder
12
+
13
+ # Process the content of +context+ which needs to be valid Ruby code. The special variable +xml+
14
+ # should be used to construct the XML content.
15
+ def self.call(context)
16
+ xml = ::Builder::XmlMarkup.new(:indent => 2)
17
+ eval(context.content, binding, context.ref_node.alcn)
18
+ context.content = xml.target!
19
+ context
20
+ end
21
+
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/content_processor'
4
+ require 'erb'
5
+
6
+ module Webgen
7
+ class ContentProcessor
8
+
9
+ # Processes embedded Ruby statements.
10
+ module Erb
11
+
12
+ extend ERB::Util
13
+
14
+ # Process the Ruby statements embedded in the content of +context+.
15
+ def self.call(context)
16
+ erb = ERB.new(context.content)
17
+ erb.filename = context.ref_node.alcn
18
+ context.content = erb.result(binding)
19
+ context
20
+ end
21
+
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/content_processor'
4
+ webgen_require 'erubis'
5
+
6
+ module Webgen
7
+ class ContentProcessor
8
+
9
+ # Processes embedded Ruby statements with the +erubis+ library.
10
+ module Erubis
11
+
12
+ # Including Erubis because of problem with resolving Erubis::XmlHelper et al
13
+ include ::Erubis
14
+
15
+ # Process the Ruby statements embedded in the content of +context+.
16
+ def self.call(context)
17
+ options = context.website.config['content_processor.erubis.options']
18
+ erubis = if context.website.config['content_processor.erubis.use_pi']
19
+ ::Erubis::PI::Eruby.new(context.content, options)
20
+ else
21
+ ::Erubis::Eruby.new(context.content, options)
22
+ end
23
+ erubis.filename = context.ref_node.alcn
24
+ context.content = erubis.result(binding)
25
+ context
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,82 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/content_processor'
4
+ require 'webgen/path'
5
+
6
+ module Webgen
7
+ class ContentProcessor
8
+
9
+ # Uses the HTML headers h1, h2, ..., h6 (only those with valid IDs) to generate nested fragment
10
+ # nodes.
11
+ module Fragments
12
+
13
+ # Create the nested fragment nodes from the content under the content node but only if there
14
+ # is no associated block or the block is named +content+.
15
+ def self.call(context)
16
+ if !context[:block_name] || context[:block_name] == 'content'
17
+ sections = parse_html_headers(context.content)
18
+ create_fragment_nodes(context, sections, context.content_node)
19
+ end
20
+ context
21
+ end
22
+
23
+ HTML_HEADER_REGEXP = /<h([123456])(?:>|\s([^>]*)>)(.*?)<\/h\1\s*>/i
24
+ HTML_ATTR_REGEXP = /\s*(\w+)\s*=\s*('|")(.+?)\2\s*/
25
+
26
+ # Parse the string +content+ for headers +h1+, ..., +h6+ and return the found, nested
27
+ # sections.
28
+ #
29
+ # Only those headers are used which have an +id+ attribute set. The method returns a list of
30
+ # arrays with entries 'level, id, title, sub sections' where 'sub sections' is such a list
31
+ # again.
32
+ def self.parse_html_headers(content)
33
+ sections = []
34
+ stack = []
35
+ content.scan(HTML_HEADER_REGEXP).each do |level,attrs,title|
36
+ next if attrs.nil?
37
+ id_attr = attrs.scan(HTML_ATTR_REGEXP).find {|name,sep,value| name == 'id'}
38
+ next if id_attr.nil?
39
+ id = id_attr[2]
40
+
41
+ section = [level.to_i, id, title, []]
42
+ success = false
43
+ while !success
44
+ if stack.empty?
45
+ sections << section
46
+ stack << section
47
+ success = true
48
+ elsif stack.last.first < section.first
49
+ stack.last.last << section
50
+ stack << section
51
+ success = true
52
+ else
53
+ stack.pop
54
+ end
55
+ end
56
+ end
57
+ sections
58
+ end
59
+
60
+ # Create nested fragment nodes under +parent+ from +sections+ (which can be created using
61
+ # #parse_html_headers).
62
+ #
63
+ # The meta info +sort_info+ is calculated from the base +si+ value.
64
+ def self.create_fragment_nodes(context, sections, parent, si = 1000)
65
+ sections.each do |level, id, title, sub_sections|
66
+ path = Webgen::Path.new(parent.alcn.sub(/#.*$/, '') + '#' + id)
67
+ path['parent_alcn'] = parent.alcn
68
+ path['handler'] = 'copy'
69
+ path['pipeline'] = []
70
+ path['no_output'] = true
71
+ path['title'] = title
72
+ path['sort_info'] = si = si.succ
73
+ node = context.website.ext.path_handler.create_secondary_nodes(path, '', context.content_node.alcn).first
74
+
75
+ create_fragment_nodes(context, sub_sections, node, si.succ)
76
+ end
77
+ end
78
+
79
+ end
80
+
81
+ end
82
+ end
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/content_processor'
4
+ webgen_require 'haml'
5
+
6
+ module Webgen
7
+ class ContentProcessor
8
+
9
+ # Processes content in Haml markup using the +haml+ library.
10
+ module Haml
11
+
12
+ # Convert the content in +haml+ markup to HTML.
13
+ def self.call(context)
14
+ context.content = ::Haml::Engine.new(context.content, :filename => context.ref_node.alcn).
15
+ render(Object.new, :context => context)
16
+ context
17
+ rescue ::Haml::Error => e
18
+ line = (e.line ? e.line + 1 : Webgen::Error.error_line(e))
19
+ raise Webgen::RenderError.new(e, self.class.name, context.dest_node, nil, line)
20
+ end
21
+
22
+ end
23
+
24
+ end
25
+ end