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,157 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'erb'
4
+
5
+ module Webgen
6
+ class ContentProcessor
7
+
8
+ # == General information
9
+ #
10
+ # Inserts additional links to CSS/JS files and other HTML head meta info directly before the
11
+ # HTML head end tag.
12
+ #
13
+ # The data used by this content processor is taken from the Context object. Therefore this
14
+ # processor should be the last in the processing pipeline so that all other processors have been
15
+ # able to set the data.
16
+ #
17
+ # Use the methods defined on the special Context#html_head object to provide values.
18
+ #
19
+ # == Internal details
20
+ #
21
+ # The key ':cp_html_head' of 'context.persistent' is used (the normal 'context.options' won't do
22
+ # because the data needs to be shared 'backwards' during the rendering) and it has to be a Hash
23
+ # with the following values:
24
+ #
25
+ # [:js_file] An array of already resolved relative or absolute paths to Javascript files.
26
+ # [:js_inline] An array of Javascript fragments to be inserted directly into the head section.
27
+ # [:css_file] An array of already resolved relative or absolute paths to CSS files.
28
+ # [:css_inline] An array of CSS fragments to be inserted directly into the head section.
29
+ # [:meta] A hash with key-value pairs from which 'meta' tags are generated. The keys and the
30
+ # values will be properly escaped before insertion. The entries in the meta information
31
+ # 'meta' of the content node are also used and take precedence over these entries.
32
+ #
33
+ # Duplicate values will be removed from the above mentioned arrays before generating the output.
34
+ #
35
+ module HtmlHead
36
+
37
+ HTML_HEAD_END_RE = /<\/head\s*>/i #:nodoc:
38
+
39
+ # Insert the additional header information.
40
+ def self.call(context)
41
+ context.content.sub!(HTML_HEAD_END_RE) do |match|
42
+ result = ''
43
+ result << tags_from_context_data(context)
44
+ result << links_to_translations(context)
45
+ result << links_from_link_meta_info(context)
46
+ result << match
47
+ end
48
+ context
49
+ end
50
+
51
+ # Return a string containing the HTML tags corresponding to the information set in the given
52
+ # Context object and the values of the meta info key +meta+ of the content node.
53
+ def self.tags_from_context_data(context)
54
+ result = ''
55
+ if context.persistent[:cp_html_head].kind_of?(Hash)
56
+ process_data_array(context, :js_file) do |js_file|
57
+ result += "\n<script type=\"text/javascript\" src=\"#{js_file}\"></script>"
58
+ end
59
+
60
+ process_data_array(context, :js_inline) do |content|
61
+ result += "\n<script type=\"text/javascript\">//<![CDATA[\n#{content}\n//]]></script>"
62
+ end
63
+
64
+ process_data_array(context, :css_file) do |css_file|
65
+ result += "\n<link rel=\"stylesheet\" href=\"#{css_file}\" type=\"text/css\"/>"
66
+ end
67
+
68
+ process_data_array(context, :css_inline) do |content|
69
+ result += "\n<style type=\"text/css\">/*<![CDATA[/*/\n#{content}\n/*]]>*/</style>"
70
+ end
71
+
72
+ (context.persistent[:cp_html_head][:meta] || {}).merge(context.content_node['meta'] || {}).each do |name, content|
73
+ result += "\n<meta name=\"#{ERB::Util.h(name)}\" content=\"#{ERB::Util.h(content)}\" />"
74
+ end
75
+ end
76
+ result
77
+ end
78
+
79
+ # Yield the values of the specified array.
80
+ def self.process_data_array(context, array_name, &block)
81
+ (context.persistent[:cp_html_head][array_name] || []).uniq.each(&block)
82
+ end
83
+
84
+ # Return a string containing HTML link tags to translations of the destination node.
85
+ def self.links_to_translations(context)
86
+ context.website.tree.translations(context.dest_node).map do |node|
87
+ next '' if node.alcn == context.dest_node.alcn
88
+ context.website.ext.item_tracker.add(context.dest_node, :node_meta_info, node.alcn)
89
+
90
+ result = "\n<link type=\"text/html\" rel=\"alternate\" hreflang=\"#{node.lang}\" "
91
+ result << "href=\"#{context.dest_node.route_to(node)}\" "
92
+ if node['title'] && !node['title'].empty?
93
+ result << "lang=\"#{node.lang}\" title=\"#{ERB::Util.h(node['title'])}\" "
94
+ end
95
+ result << "/>"
96
+ end.join('')
97
+ end
98
+
99
+ # Given an array of path names, add tracker information for the resolved nodes (reference node
100
+ # is the content node) and return the relative paths to them.
101
+ def self.resolve_paths(context, paths)
102
+ [paths].flatten.compact.collect do |path|
103
+ next path if Webgen::Path.url(path, false).absolute?
104
+ node = context.content_node.resolve(path, context.dest_node.lang, true)
105
+ if node
106
+ context.website.ext.item_tracker.add(context.dest_node, :node_meta_info, node.alcn)
107
+ context.dest_node.route_to(node)
108
+ else
109
+ nil
110
+ end
111
+ end.compact
112
+ end
113
+
114
+ LINK_DOCUMENT_ATTRS = {'type' => 'text/html'} #:nodoc:
115
+ LINK_DOCUMENT_TYPES = %w{start next prev contents index glossary chapter section subsection appendix help} #:nodoc:
116
+
117
+ # Return a string containing HTML link tags to the links from the 'link' meta information.
118
+ def self.links_from_link_meta_info(context)
119
+ link_mi = Marshal.load(Marshal.dump(context.content_node['link'] || {}))
120
+ result = ''
121
+
122
+ # Add user defined javascript and CSS links
123
+ resolve_paths(context, link_mi.delete('javascript')).each do |file|
124
+ result += "\n<script type=\"text/javascript\" src=\"#{file}\"></script>"
125
+ end
126
+ resolve_paths(context, link_mi.delete('css')).each do |file|
127
+ result += "\n<link rel=\"stylesheet\" href=\"#{file}\" type=\"text/css\" />"
128
+ end
129
+
130
+ # add generic links
131
+ link_mi.sort.each do |link_type, vals|
132
+ link_type = link_type.downcase
133
+ [vals].flatten.each do |val|
134
+ val = {'href' => val} if val.kind_of?(String)
135
+ val['rel'] ||= link_type
136
+ val = LINK_DOCUMENT_ATTRS.merge(val) if LINK_DOCUMENT_TYPES.include?(link_type)
137
+ href = val.delete('href')
138
+ href = resolve_paths(context, href).first if href
139
+ if href
140
+ result << "\n<link href=\"#{href}\" "
141
+ val.sort.each {|k,v| result << "#{k}=\"#{ERB::Util.h(v)}\" "}
142
+ result << "/>"
143
+ else
144
+ context.website.logger.error do
145
+ "No link target specified for link type '#{link_type}' in 'link' meta information in <#{context.content_node}>"
146
+ end
147
+ end
148
+ end
149
+ end
150
+
151
+ result
152
+ end
153
+
154
+ end
155
+
156
+ end
157
+ end
@@ -0,0 +1,49 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/content_processor'
4
+ webgen_require 'kramdown'
5
+
6
+ module Webgen
7
+ class ContentProcessor
8
+
9
+ # Processes content in kramdown format (based on Markdown) using the +kramdown+ library.
10
+ module Kramdown
11
+
12
+ class CustomHtmlConverter < ::Kramdown::Converter::Html #:nodoc:
13
+ public_class_method(:new)
14
+
15
+ def initialize(root, options, context)
16
+ super(root, options)
17
+ @context = context
18
+ @do_convert = context.website.config['content_processor.kramdown.handle_links']
19
+ @ignore_fragments = context.website.config['content_processor.kramdown.ignore_unknown_fragments']
20
+ end
21
+
22
+ def convert_a(el, indent)
23
+ el.attr['href'] = @context.tag('relocatable', {'path' => el.attr['href'],
24
+ 'ignore_unknown_fragment' => @ignore_fragments}) if @do_convert
25
+ super
26
+ end
27
+
28
+ def convert_img(el, indent)
29
+ el.attr['src'] = @context.tag('relocatable', {'path' => el.attr['src'],
30
+ 'ignore_unknown_fragment' => @ignore_fragments}) if @do_convert
31
+ super
32
+ end
33
+
34
+ end
35
+
36
+ # Convert the content in +context+ to HTML.
37
+ def self.call(context)
38
+ doc = ::Kramdown::Document.new(context.content, context.website.config['content_processor.kramdown.options'])
39
+ context.content = CustomHtmlConverter.new(doc.root, doc.options, context).convert(doc.root)
40
+ doc.warnings.each do |warn|
41
+ context.website.logger.warn { "kramdown warning while parsing <#{context.ref_node}>: #{warn}" }
42
+ end
43
+ context
44
+ end
45
+
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,39 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/content_processor'
4
+ require 'rexml/parsers/baseparser'
5
+ webgen_require 'maruku'
6
+
7
+
8
+ # :stopdoc:
9
+ # Fixes a problem when parsing Markdown with <webgen>-tags in Maruku.
10
+ class REXML::Parsers::BaseParser
11
+
12
+ alias_method :"old_stream=", :"stream="
13
+
14
+ def stream=(source)
15
+ self.old_stream = source
16
+ @nsstack << Set.new(['webgen'])
17
+ end
18
+
19
+ end
20
+ # :startdoc:
21
+
22
+
23
+ module Webgen
24
+ class ContentProcessor
25
+
26
+ # Processes content in Markdown format using the +maruku+ library.
27
+ module Maruku
28
+
29
+ # Convert the content in +context+ to HTML.
30
+ def self.call(context)
31
+ $uid = 0 # fix for invalid fragment IDs on second run
32
+ context.content = ::Maruku.new(context.content, :on_error => :raise).to_html
33
+ context
34
+ end
35
+
36
+ end
37
+
38
+ end
39
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/content_processor'
4
+ webgen_require 'rdiscount'
5
+
6
+ module Webgen
7
+ class ContentProcessor
8
+
9
+ # Processes content in Markdown markup with the fast +rdiscount+ library.
10
+ module RDiscount
11
+
12
+ # Convert the content in +context+ to HTML.
13
+ def self.call(context)
14
+ context.content = ::RDiscount.new(context.content).to_html
15
+ context
16
+ end
17
+
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/content_processor'
4
+ webgen_require 'rdoc/markup/to_html', 'rdoc'
5
+
6
+ module Webgen
7
+ class ContentProcessor
8
+
9
+ # Converts content in RDoc markup (the native Ruby documentation format) to HTML. Needs the newer
10
+ # RDoc implementation (version >= 2.4.x).
11
+ module RDoc
12
+
13
+ # Convert the content in RDoc markup to HTML.
14
+ def self.call(context)
15
+ context.content = ::RDoc::Markup::ToHtml.new.convert(context.content)
16
+ context
17
+ end
18
+
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/content_processor'
4
+ webgen_require 'redcloth', 'RedCloth'
5
+
6
+ module Webgen
7
+ class ContentProcessor
8
+
9
+ # Processes content in Textile format using the +redcloth+ library.
10
+ module RedCloth
11
+
12
+ # Convert the content in +context+ to HTML.
13
+ def self.call(context)
14
+ doc = ::RedCloth.new(context.content)
15
+ doc.hard_breaks = context.website.config['content_processor.redcloth.hard_breaks']
16
+ context.content = doc.to_html
17
+ context
18
+ end
19
+
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/content_processor'
4
+
5
+ module Webgen
6
+ class ContentProcessor
7
+
8
+ # Processes the content that is valid Ruby to generate new content.
9
+ module Ruby
10
+
11
+ # Process the content of +context+ which needs to be valid Ruby code.
12
+ def self.call(context)
13
+ eval(context.content, binding, context.ref_node.alcn)
14
+ context
15
+ end
16
+
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,145 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'webgen/content_processor'
4
+ require 'webgen/path'
5
+ webgen_require 'sass'
6
+
7
+ module Webgen
8
+ class ContentProcessor
9
+
10
+ # Processes content in Sass markup (used for writing CSS files).
11
+ module Sass
12
+
13
+ # Custom importer for Sass to load files from the file system but resolves absolute paths from
14
+ # the given root directory and not from the filesystem root!
15
+ class FileSystemImporter < ::Sass::Importers::Filesystem
16
+
17
+ def find_real_file(dir, name, options = {}) #:nodoc:
18
+ for (f,s) in possible_files(remove_root(name))
19
+ if full_path = Dir["#{dir}/#{f}"].first
20
+ full_path.gsub!(REDUNDANT_DIRECTORY,File::SEPARATOR)
21
+ return full_path, s
22
+ end
23
+ end
24
+ nil
25
+ end
26
+
27
+ end
28
+
29
+ # Custom importer for Sass to load files by resolving them in the node tree.
30
+ class NodeTreeImporter < ::Sass::Importers::Base
31
+
32
+ # Creates a new importer that imports files from the node tree relative to the given node alcn.
33
+ def initialize(website, alcn)
34
+ @website = website
35
+ @alcn = alcn
36
+ end
37
+
38
+ # @see Base#find_relative
39
+ def find_relative(name, base, options)
40
+ _find(base, name, options)
41
+ end
42
+
43
+ # @see Base#find
44
+ def find(name, options)
45
+ _find(@alcn, name, options)
46
+ end
47
+
48
+ def mtime(name, options) #:nodoc:
49
+ node = resolve_node(@alcn, name)
50
+ node['modified_at'] if node
51
+ end
52
+
53
+ def key(name, options) #:nodoc:
54
+ ["webgen:", name]
55
+ end
56
+
57
+ def to_s #:nodoc:
58
+ "webgen: #{@alcn}"
59
+ end
60
+
61
+ #######
62
+ private
63
+ #######
64
+
65
+ # Find the @import-ed name under the given base filename.
66
+ #
67
+ # Returns a Sass::Engine object if found or +nil+ otherwise.
68
+ def _find(base, name, options)
69
+ node, syntax = resolve_node(base, name)
70
+ return unless node
71
+
72
+ options[:syntax] = syntax
73
+ options[:filename] = node.alcn
74
+ options[:importer] = self
75
+ ::Sass::Engine.new(node.node_info[:path].data, options)
76
+ end
77
+
78
+ # Resolve the path using the given base filename.
79
+ #
80
+ # Returns [node, syntax] if a node was found or nil otherwise
81
+ def resolve_node(base, path)
82
+ possible_filenames(path).each do |filename, syntax|
83
+ node = @website.tree.resolve_node(Webgen::Path.append(base, filename), nil)
84
+ return [node, syntax] if node
85
+ end
86
+ nil
87
+ end
88
+
89
+ # Return an array of all possible (filename, syntax) pairs for the given path.
90
+ def possible_filenames(path)
91
+ dirname, basename = File.split(path)
92
+ basename, ext = basename.scan(/^(.*?)(?:\.(sass|scss))?$/).first
93
+ (ext.nil? ? %w{sass scss} : [ext]).map do |ext|
94
+ [["#{dirname}/_#{basename}.#{ext}", ext.to_sym], ["#{dirname}/#{basename}.#{ext}", ext.to_sym]]
95
+ end.flatten(1)
96
+ end
97
+
98
+ end
99
+
100
+ module ::Sass::Script::Functions
101
+
102
+ # Return the correct relative path for the given path.
103
+ def relocatable(path)
104
+ assert_type(path, :String)
105
+ context = options[:webgen_context]
106
+ path = path.value
107
+
108
+ dest_node = context.website.tree[options[:filename]].resolve(path, context.dest_node.lang, true)
109
+ if dest_node
110
+ context.website.ext.item_tracker.add(context.dest_node, :node_meta_info, dest_node.alcn)
111
+ result = context.dest_node.route_to(dest_node)
112
+ else
113
+ result = path
114
+ end
115
+ ::Sass::Script::String.new("url(\"#{result}\")")
116
+ end
117
+ declare :relocatable, [:string]
118
+
119
+ end
120
+
121
+ # Convert the content in +sass+ markup to CSS.
122
+ def self.call(context)
123
+ context.content = ::Sass::Engine.new(context.content, default_options(context)).render
124
+ context
125
+ rescue ::Sass::SyntaxError => e
126
+ raise Webgen::RenderError.new(e, self.class.name, context.dest_node, nil, (e.sass_line if e.sass_line))
127
+ end
128
+
129
+ def self.default_options(context) # :nodoc:
130
+ opts = context.website.config['content_processor.sass.options']
131
+ load_paths = context.website.ext.sass_load_paths + [NodeTreeImporter.new(context.website, '/')]
132
+ opts.merge({
133
+ :filename => context.ref_node.alcn,
134
+ :syntax => :sass,
135
+ :cache_store => ::Sass::CacheStores::Filesystem.new(context.website.tmpdir('sass')),
136
+ :filesystem_importer => FileSystemImporter,
137
+ :load_paths => load_paths,
138
+ :webgen_context => context
139
+ })
140
+ end
141
+
142
+ end
143
+
144
+ end
145
+ end