gettalong-webgen 0.5.4.20080929

Sign up to get free protection for your applications and to get access to all the features.
Files changed (290) hide show
  1. data/AUTHORS +5 -0
  2. data/COPYING +10 -0
  3. data/GPL +340 -0
  4. data/Rakefile +324 -0
  5. data/THANKS +17 -0
  6. data/bin/webgen +10 -0
  7. data/data/webgen/resources.yaml +3 -0
  8. data/data/webgen/webgui/controller/main.rb +129 -0
  9. data/data/webgen/webgui/overrides/win32console.rb +0 -0
  10. data/data/webgen/webgui/public/css/jquery.autocomplete.css +50 -0
  11. data/data/webgen/webgui/public/css/ramaze_error.css +90 -0
  12. data/data/webgen/webgui/public/css/style.css +55 -0
  13. data/data/webgen/webgui/public/img/headerbg.jpg +0 -0
  14. data/data/webgen/webgui/public/img/webgen_logo.png +0 -0
  15. data/data/webgen/webgui/public/js/jquery.autocomplete.js +15 -0
  16. data/data/webgen/webgui/public/js/jquery.js +32 -0
  17. data/data/webgen/webgui/view/create_website.xhtml +22 -0
  18. data/data/webgen/webgui/view/error.xhtml +64 -0
  19. data/data/webgen/webgui/view/index.xhtml +22 -0
  20. data/data/webgen/webgui/view/manage_website.xhtml +18 -0
  21. data/data/webgen/webgui/view/page.xhtml +40 -0
  22. data/data/webgen/website_skeleton/README +10 -0
  23. data/data/webgen/website_skeleton/Rakefile +40 -0
  24. data/data/webgen/website_skeleton/config.yaml +17 -0
  25. data/data/webgen/website_skeleton/ext/init.rb +6 -0
  26. data/data/webgen/website_styles/1024px/README +13 -0
  27. data/data/webgen/website_styles/1024px/src/default.css +188 -0
  28. data/data/webgen/website_styles/1024px/src/default.template +60 -0
  29. data/data/webgen/website_styles/1024px/src/images/background.gif +0 -0
  30. data/data/webgen/website_styles/andreas00/README +13 -0
  31. data/data/webgen/website_styles/andreas00/src/default.css +290 -0
  32. data/data/webgen/website_styles/andreas00/src/default.template +60 -0
  33. data/data/webgen/website_styles/andreas00/src/images/bg.gif +0 -0
  34. data/data/webgen/website_styles/andreas00/src/images/front.jpg +0 -0
  35. data/data/webgen/website_styles/andreas00/src/images/menubg.gif +0 -0
  36. data/data/webgen/website_styles/andreas00/src/images/menubg2.gif +0 -0
  37. data/data/webgen/website_styles/andreas01/README +14 -0
  38. data/data/webgen/website_styles/andreas01/src/default.css +310 -0
  39. data/data/webgen/website_styles/andreas01/src/default.template +61 -0
  40. data/data/webgen/website_styles/andreas01/src/images/bg.gif +0 -0
  41. data/data/webgen/website_styles/andreas01/src/images/front.jpg +0 -0
  42. data/data/webgen/website_styles/andreas01/src/print.css +35 -0
  43. data/data/webgen/website_styles/andreas03/README +14 -0
  44. data/data/webgen/website_styles/andreas03/src/default.css +223 -0
  45. data/data/webgen/website_styles/andreas03/src/default.template +58 -0
  46. data/data/webgen/website_styles/andreas03/src/images/bodybg.png +0 -0
  47. data/data/webgen/website_styles/andreas03/src/images/contbg.png +0 -0
  48. data/data/webgen/website_styles/andreas03/src/images/footerbg.png +0 -0
  49. data/data/webgen/website_styles/andreas03/src/images/gradient1.png +0 -0
  50. data/data/webgen/website_styles/andreas03/src/images/gradient2.png +0 -0
  51. data/data/webgen/website_styles/andreas04/README +15 -0
  52. data/data/webgen/website_styles/andreas04/src/default.css +290 -0
  53. data/data/webgen/website_styles/andreas04/src/default.template +81 -0
  54. data/data/webgen/website_styles/andreas04/src/images/blinkarrow.gif +0 -0
  55. data/data/webgen/website_styles/andreas04/src/images/bodybg.png +0 -0
  56. data/data/webgen/website_styles/andreas04/src/images/contentbg.png +0 -0
  57. data/data/webgen/website_styles/andreas04/src/images/entrybg.png +0 -0
  58. data/data/webgen/website_styles/andreas04/src/images/flash.gif +0 -0
  59. data/data/webgen/website_styles/andreas04/src/images/flash2.gif +0 -0
  60. data/data/webgen/website_styles/andreas04/src/images/globe.gif +0 -0
  61. data/data/webgen/website_styles/andreas04/src/images/globebottom.gif +0 -0
  62. data/data/webgen/website_styles/andreas04/src/images/linkarrow.gif +0 -0
  63. data/data/webgen/website_styles/andreas04/src/images/menuhover.png +0 -0
  64. data/data/webgen/website_styles/andreas05/README +14 -0
  65. data/data/webgen/website_styles/andreas05/src/default.css +33 -0
  66. data/data/webgen/website_styles/andreas05/src/default.template +40 -0
  67. data/data/webgen/website_styles/andreas05/src/images/bodybg.gif +0 -0
  68. data/data/webgen/website_styles/andreas05/src/images/front.png +0 -0
  69. data/data/webgen/website_styles/andreas06/README +14 -0
  70. data/data/webgen/website_styles/andreas06/src/default.css +354 -0
  71. data/data/webgen/website_styles/andreas06/src/default.template +70 -0
  72. data/data/webgen/website_styles/andreas06/src/images/bodybg.gif +0 -0
  73. data/data/webgen/website_styles/andreas06/src/images/boxbg.gif +0 -0
  74. data/data/webgen/website_styles/andreas06/src/images/greypx.gif +0 -0
  75. data/data/webgen/website_styles/andreas06/src/images/header.jpg +0 -0
  76. data/data/webgen/website_styles/andreas06/src/images/innerbg.gif +0 -0
  77. data/data/webgen/website_styles/andreas06/src/images/leaves.jpg +0 -0
  78. data/data/webgen/website_styles/andreas06/src/images/tabs.gif +0 -0
  79. data/data/webgen/website_styles/andreas07/README +15 -0
  80. data/data/webgen/website_styles/andreas07/src/browserfix.css +7 -0
  81. data/data/webgen/website_styles/andreas07/src/default.css +92 -0
  82. data/data/webgen/website_styles/andreas07/src/default.template +42 -0
  83. data/data/webgen/website_styles/andreas07/src/images/bodybg.gif +0 -0
  84. data/data/webgen/website_styles/andreas07/src/images/sidebarbg.gif +0 -0
  85. data/data/webgen/website_styles/andreas08/README +14 -0
  86. data/data/webgen/website_styles/andreas08/src/default.css +224 -0
  87. data/data/webgen/website_styles/andreas08/src/default.template +51 -0
  88. data/data/webgen/website_styles/andreas09/README +14 -0
  89. data/data/webgen/website_styles/andreas09/src/default.css +308 -0
  90. data/data/webgen/website_styles/andreas09/src/default.template +68 -0
  91. data/data/webgen/website_styles/andreas09/src/images/bodybg-black.jpg +0 -0
  92. data/data/webgen/website_styles/andreas09/src/images/bodybg-green.jpg +0 -0
  93. data/data/webgen/website_styles/andreas09/src/images/bodybg-orange.jpg +0 -0
  94. data/data/webgen/website_styles/andreas09/src/images/bodybg-purple.jpg +0 -0
  95. data/data/webgen/website_styles/andreas09/src/images/bodybg-red.jpg +0 -0
  96. data/data/webgen/website_styles/andreas09/src/images/bodybg.jpg +0 -0
  97. data/data/webgen/website_styles/andreas09/src/images/footerbg.jpg +0 -0
  98. data/data/webgen/website_styles/andreas09/src/images/menuhover-black.jpg +0 -0
  99. data/data/webgen/website_styles/andreas09/src/images/menuhover-green.jpg +0 -0
  100. data/data/webgen/website_styles/andreas09/src/images/menuhover-orange.jpg +0 -0
  101. data/data/webgen/website_styles/andreas09/src/images/menuhover-purple.jpg +0 -0
  102. data/data/webgen/website_styles/andreas09/src/images/menuhover-red.jpg +0 -0
  103. data/data/webgen/website_styles/andreas09/src/images/menuhover.jpg +0 -0
  104. data/data/webgen/website_styles/simple/README +6 -0
  105. data/data/webgen/website_styles/simple/src/default.css +84 -0
  106. data/data/webgen/website_styles/simple/src/default.template +36 -0
  107. data/data/webgen/website_templates/default/README +6 -0
  108. data/data/webgen/website_templates/default/src/index.page +8 -0
  109. data/data/webgen/website_templates/project/README +5 -0
  110. data/data/webgen/website_templates/project/src/about.page +12 -0
  111. data/data/webgen/website_templates/project/src/download.page +15 -0
  112. data/data/webgen/website_templates/project/src/features.page +8 -0
  113. data/data/webgen/website_templates/project/src/index.page +9 -0
  114. data/data/webgen/website_templates/project/src/screenshots.page +18 -0
  115. data/doc/contentprocessor.template +11 -0
  116. data/doc/contentprocessor/blocks.page +66 -0
  117. data/doc/contentprocessor/builder.page +80 -0
  118. data/doc/contentprocessor/erb.page +56 -0
  119. data/doc/contentprocessor/erubis.page +46 -0
  120. data/doc/contentprocessor/haml.page +47 -0
  121. data/doc/contentprocessor/maruku.page +41 -0
  122. data/doc/contentprocessor/rdiscount.page +37 -0
  123. data/doc/contentprocessor/rdoc.page +36 -0
  124. data/doc/contentprocessor/redcloth.page +39 -0
  125. data/doc/contentprocessor/sass.page +31 -0
  126. data/doc/contentprocessor/tags.page +73 -0
  127. data/doc/extensions.metainfo +29 -0
  128. data/doc/extensions.page +16 -0
  129. data/doc/extensions.template +17 -0
  130. data/doc/faq.page +214 -0
  131. data/doc/getting_started.page +134 -0
  132. data/doc/index.page +65 -0
  133. data/doc/manual.page +532 -0
  134. data/doc/reference_configuration.page +646 -0
  135. data/doc/reference_metainfo.page +213 -0
  136. data/doc/sourcehandler.template +21 -0
  137. data/doc/sourcehandler/copy.page +19 -0
  138. data/doc/sourcehandler/directory.page +27 -0
  139. data/doc/sourcehandler/feed.page +82 -0
  140. data/doc/sourcehandler/metainfo.page +41 -0
  141. data/doc/sourcehandler/page.page +30 -0
  142. data/doc/sourcehandler/sitemap.page +46 -0
  143. data/doc/sourcehandler/template.page +45 -0
  144. data/doc/sourcehandler/virtual.page +49 -0
  145. data/doc/tag.template +25 -0
  146. data/doc/tag/breadcrumbtrail.page +40 -0
  147. data/doc/tag/coderay.page +49 -0
  148. data/doc/tag/date.page +31 -0
  149. data/doc/tag/executecommand.page +26 -0
  150. data/doc/tag/includefile.page +32 -0
  151. data/doc/tag/langbar.page +22 -0
  152. data/doc/tag/menu.page +92 -0
  153. data/doc/tag/metainfo.page +29 -0
  154. data/doc/tag/relocatable.page +38 -0
  155. data/doc/tag/sitemap.page +31 -0
  156. data/doc/upgrading.page +139 -0
  157. data/doc/webgen_page_format.page +128 -0
  158. data/lib/webgen/blackboard.rb +73 -0
  159. data/lib/webgen/cache.rb +85 -0
  160. data/lib/webgen/cli.rb +118 -0
  161. data/lib/webgen/cli/create_command.rb +64 -0
  162. data/lib/webgen/cli/run_command.rb +20 -0
  163. data/lib/webgen/cli/utils.rb +86 -0
  164. data/lib/webgen/cli/webgui_command.rb +49 -0
  165. data/lib/webgen/common.rb +10 -0
  166. data/lib/webgen/common/sitemap.rb +76 -0
  167. data/lib/webgen/configuration.rb +147 -0
  168. data/lib/webgen/contentprocessor.rb +96 -0
  169. data/lib/webgen/contentprocessor/blocks.rb +46 -0
  170. data/lib/webgen/contentprocessor/builder.rb +26 -0
  171. data/lib/webgen/contentprocessor/context.rb +90 -0
  172. data/lib/webgen/contentprocessor/erb.rb +24 -0
  173. data/lib/webgen/contentprocessor/erubis.rb +40 -0
  174. data/lib/webgen/contentprocessor/haml.rb +25 -0
  175. data/lib/webgen/contentprocessor/maruku.rb +18 -0
  176. data/lib/webgen/contentprocessor/rdiscount.rb +15 -0
  177. data/lib/webgen/contentprocessor/rdoc.rb +17 -0
  178. data/lib/webgen/contentprocessor/redcloth.rb +15 -0
  179. data/lib/webgen/contentprocessor/sass.rb +18 -0
  180. data/lib/webgen/contentprocessor/tags.rb +134 -0
  181. data/lib/webgen/coreext.rb +10 -0
  182. data/lib/webgen/default_config.rb +198 -0
  183. data/lib/webgen/languages.rb +578 -0
  184. data/lib/webgen/loggable.rb +23 -0
  185. data/lib/webgen/logger.rb +78 -0
  186. data/lib/webgen/node.rb +347 -0
  187. data/lib/webgen/output.rb +37 -0
  188. data/lib/webgen/output/filesystem.rb +67 -0
  189. data/lib/webgen/page.rb +133 -0
  190. data/lib/webgen/path.rb +182 -0
  191. data/lib/webgen/source.rb +24 -0
  192. data/lib/webgen/source/filesystem.rb +58 -0
  193. data/lib/webgen/source/resource.rb +42 -0
  194. data/lib/webgen/source/stacked.rb +53 -0
  195. data/lib/webgen/sourcehandler.rb +202 -0
  196. data/lib/webgen/sourcehandler/base.rb +211 -0
  197. data/lib/webgen/sourcehandler/copy.rb +41 -0
  198. data/lib/webgen/sourcehandler/directory.rb +31 -0
  199. data/lib/webgen/sourcehandler/feed.rb +121 -0
  200. data/lib/webgen/sourcehandler/fragment.rb +71 -0
  201. data/lib/webgen/sourcehandler/metainfo.rb +117 -0
  202. data/lib/webgen/sourcehandler/page.rb +77 -0
  203. data/lib/webgen/sourcehandler/sitemap.rb +60 -0
  204. data/lib/webgen/sourcehandler/template.rb +68 -0
  205. data/lib/webgen/sourcehandler/virtual.rb +75 -0
  206. data/lib/webgen/tag.rb +23 -0
  207. data/lib/webgen/tag/base.rb +162 -0
  208. data/lib/webgen/tag/breadcrumbtrail.rb +71 -0
  209. data/lib/webgen/tag/coderay.rb +32 -0
  210. data/lib/webgen/tag/date.rb +18 -0
  211. data/lib/webgen/tag/executecommand.rb +29 -0
  212. data/lib/webgen/tag/includefile.rb +42 -0
  213. data/lib/webgen/tag/langbar.rb +52 -0
  214. data/lib/webgen/tag/menu.rb +186 -0
  215. data/lib/webgen/tag/metainfo.rb +25 -0
  216. data/lib/webgen/tag/relocatable.rb +53 -0
  217. data/lib/webgen/tag/sitemap.rb +42 -0
  218. data/lib/webgen/tree.rb +80 -0
  219. data/lib/webgen/version.rb +6 -0
  220. data/lib/webgen/webgentask.rb +148 -0
  221. data/lib/webgen/website.rb +214 -0
  222. data/lib/webgen/websiteaccess.rb +29 -0
  223. data/lib/webgen/websitemanager.rb +125 -0
  224. data/man/man1/webgen.1 +67 -0
  225. data/misc/default.css +360 -0
  226. data/misc/default.template +75 -0
  227. data/misc/htmldoc.metainfo +25 -0
  228. data/misc/htmldoc.virtual +5 -0
  229. data/misc/images/arrow.gif +0 -0
  230. data/misc/images/error.gif +0 -0
  231. data/misc/images/exclamation.gif +0 -0
  232. data/misc/images/headerbg.jpg +0 -0
  233. data/misc/images/information.gif +0 -0
  234. data/misc/images/quote.gif +0 -0
  235. data/setup.rb +1585 -0
  236. data/test/helper.rb +41 -0
  237. data/test/test_blackboard.rb +58 -0
  238. data/test/test_cache.rb +57 -0
  239. data/test/test_common_sitemap.rb +56 -0
  240. data/test/test_configuration.rb +66 -0
  241. data/test/test_contentprocessor.rb +31 -0
  242. data/test/test_contentprocessor_blocks.rb +34 -0
  243. data/test/test_contentprocessor_builder.rb +19 -0
  244. data/test/test_contentprocessor_context.rb +38 -0
  245. data/test/test_contentprocessor_erb.rb +20 -0
  246. data/test/test_contentprocessor_erubis.rb +47 -0
  247. data/test/test_contentprocessor_haml.rb +20 -0
  248. data/test/test_contentprocessor_maruku.rb +27 -0
  249. data/test/test_contentprocessor_rdiscount.rb +15 -0
  250. data/test/test_contentprocessor_rdoc.rb +16 -0
  251. data/test/test_contentprocessor_redcloth.rb +12 -0
  252. data/test/test_contentprocessor_sass.rb +20 -0
  253. data/test/test_contentprocessor_tags.rb +97 -0
  254. data/test/test_languages.rb +53 -0
  255. data/test/test_loggable.rb +30 -0
  256. data/test/test_logger.rb +73 -0
  257. data/test/test_node.rb +339 -0
  258. data/test/test_output_filesystem.rb +58 -0
  259. data/test/test_page.rb +203 -0
  260. data/test/test_path.rb +131 -0
  261. data/test/test_source_filesystem.rb +59 -0
  262. data/test/test_source_resource.rb +26 -0
  263. data/test/test_source_stacked.rb +34 -0
  264. data/test/test_sourcehandler_base.rb +92 -0
  265. data/test/test_sourcehandler_copy.rb +45 -0
  266. data/test/test_sourcehandler_directory.rb +25 -0
  267. data/test/test_sourcehandler_feed.rb +74 -0
  268. data/test/test_sourcehandler_fragment.rb +67 -0
  269. data/test/test_sourcehandler_metainfo.rb +93 -0
  270. data/test/test_sourcehandler_page.rb +70 -0
  271. data/test/test_sourcehandler_sitemap.rb +47 -0
  272. data/test/test_sourcehandler_template.rb +63 -0
  273. data/test/test_sourcehandler_virtual.rb +56 -0
  274. data/test/test_tag_base.rb +82 -0
  275. data/test/test_tag_breadcrumbtrail.rb +89 -0
  276. data/test/test_tag_coderay.rb +30 -0
  277. data/test/test_tag_date.rb +16 -0
  278. data/test/test_tag_executecommand.rb +39 -0
  279. data/test/test_tag_includefile.rb +48 -0
  280. data/test/test_tag_langbar.rb +60 -0
  281. data/test/test_tag_menu.rb +195 -0
  282. data/test/test_tag_metainfo.rb +17 -0
  283. data/test/test_tag_relocatable.rb +57 -0
  284. data/test/test_tag_sitemap.rb +44 -0
  285. data/test/test_tree.rb +69 -0
  286. data/test/test_webgentask.rb +21 -0
  287. data/test/test_website.rb +96 -0
  288. data/test/test_websiteaccess.rb +23 -0
  289. data/test/test_websitemanager.rb +68 -0
  290. metadata +575 -0
@@ -0,0 +1,38 @@
1
+ ---
2
+ title: Webgen::Tag::Relocatable
3
+ used_options:
4
+ - tag.relocatable.path
5
+ ---
6
+ ## Description
7
+
8
+ This tag ensures that the relative path to the specified path is always correct.
9
+
10
+ When the tag is used, it changes the directory part of the supplied path name to a relative path to
11
+ the destination and is most often used in template files. A relocatable tag looks like this:
12
+ `\{relocatable: default.css}`. If this was put into a template and the template was used by a file
13
+ in a subdirectory, then the `relocatable` tag would put `../default.css` into the output file; thus
14
+ ensuring that the relative path to file is valid.
15
+
16
+ > You can only use the `relocatable` tag with paths that are handled by webgen. If you want to
17
+ > handle paths that are not normally handled by webgen, create a virtual path for them.
18
+ {.exclamation}
19
+
20
+ If the specified path is an absolute URL (like `http://webgen.rubyforge.org`), it will just return
21
+ it. And if you specify an URL fragment, this fragment has to exist. If you don't want to resolve a
22
+ fragment, just don't specify it in the tag but afterwards!
23
+
24
+ ## Examples
25
+
26
+ <table class="examples">
27
+ <tr>
28
+ <th>Usage</th><th>Output</th>
29
+ </tr>
30
+ <tr>
31
+ <td>\{relocatable: /default.css}</td>
32
+ <td>{relocatable: /default.css}</td>
33
+ </tr>
34
+ <tr>
35
+ <td>\{relocatable: ../}</td>
36
+ <td>{relocatable: ../}</td>
37
+ </tr>
38
+ </table>
@@ -0,0 +1,31 @@
1
+ ---
2
+ title: Webgen::Tag::Sitemap
3
+ used_options:
4
+ - common.sitemap.honor_in_menu
5
+ - common.sitemap.any_lang
6
+ - common.sitemap.used_kinds
7
+ ---
8
+ ## Description
9
+
10
+ This tag is used to display a site map of the current website. The used nodes can be customized by
11
+ setting the above mentioned configuration options accordingly.
12
+
13
+ ## Examples
14
+
15
+ <table class="examples">
16
+ <tr>
17
+ <th>Usage</th><th>Output</th>
18
+ </tr>
19
+ <tr>
20
+ <td>\{sitemap: }</td>
21
+ <td>{sitemap: }</td>
22
+ </tr>
23
+ <tr>
24
+ <td>\{sitemap: {honor_in_menu: true}}</td>
25
+ <td>{sitemap: {honor_in_menu: true}}</td>
26
+ </tr>
27
+ <tr>
28
+ <td>\{sitemap: {honor_in_menu: true, used_kinds: []}}</td>
29
+ <td>{sitemap: {honor_in_menu: true, used_kinds: []}}</td>
30
+ </tr>
31
+ </table>
@@ -0,0 +1,139 @@
1
+ ---
2
+ title: Upgrading from 0.4.x
3
+ ---
4
+ # Upgrading
5
+
6
+ Here are step-by-step instructions on how to update your webgen website from 0.4.x to 0.5.x:
7
+
8
+ * **Update the configuration file `config.yaml`**
9
+
10
+ The configuration file syntax as well as the names of the configuration options and some defaults
11
+ changed. For example, the default processing pipeline now uses Maruku (a Markdown converter) as
12
+ markup language processor instead of Textile. You can find an overview over all available
13
+ configuration options in the [configuration option reference]({relocatable:
14
+ reference_configuration.html}). Also have a look at the [configuration file
15
+ documentation]({relocatable: manual.html#website-configfile}) for more information on the syntax
16
+ of this file and the available helpers.
17
+
18
+ * Name changes: All configuration options now use underscores to separate word parts instead of
19
+ camelCase.
20
+ * Syntax changes: The configuration options are not specific to a certain extension anymore. You
21
+ now need the full configuration option name to specify it. So instead of
22
+
23
+ Tag/Menu:
24
+ maxLevels: 4
25
+
26
+ you now use
27
+
28
+ tag.menu.max_levels: 4
29
+
30
+ * **Convert your `metainfo.yaml`**
31
+
32
+ This file is not supported anymore since webgen 0.5.x uses a more flexible way for specifying meta
33
+ information and virtual paths. You need to migrate its data to `metainfo` and `virtual` files in
34
+ the source directory. Have a look at the documentation of the [metainfo source
35
+ handler]({relocatable: sourcehandler/metainfo.html}) and the [virtual source
36
+ handler]({relocatable: sourcehandler/virtual.html}).
37
+
38
+ * **Update meta information names and values**
39
+
40
+ The names of some meta information keys have been changed. Meta information names are not
41
+ specified in camelCase anymore but with under\_scores. You can find a complete list of supported
42
+ meta information names in the [meta information reference]({relocatable:
43
+ reference_metainfo.html}). The most notable changes are:
44
+
45
+ * directoryName → routed\_title
46
+ * inMenu → in\_menu
47
+ * indexFile → index\_path
48
+ * omitIndexPath → omit\_index\_path
49
+ * outputNameStyle → output\_path\_style
50
+ * orderInfo → sort\_info
51
+
52
+ Also be aware that the syntax of some meta information keys has changed. For example, all meta
53
+ information keys that took a source path name, e.g. `index_path`, now take an localized canonical
54
+ name.
55
+
56
+ You need to change the names/value in all places where meta information can be specified:
57
+
58
+ * `metainfo` files
59
+ * `virtual` files
60
+ * page and template files
61
+
62
+ * **Files in [Webgen Page Format]({relocatable: webgen_page_format.html})**
63
+
64
+ Since the format of these files changed a little bit you may need to adapt all your files that use
65
+ it, that are primarily page and template files. The main change in the format was a different use
66
+ of the block start line. Whereas before you would write
67
+
68
+ --- content, textile
69
+
70
+ for specifying the name of the block and its processor, you now can specify any number of
71
+ options. Two options are currently used by webgen: `name` and `pipeline`. So you could change the
72
+ name and the processing pipeline of a block by using a block start line like:
73
+
74
+ --- name:other pipeline:tags,maruku,blocks
75
+
76
+ * **Block inclusion in template/page files**
77
+
78
+ The way how named blocks are included has changed. This feature is now provided by the content
79
+ processor [blocks]({relocatable: contentprocessor/blocks.html}) instead of the tag `block`. This
80
+ allows you to specify the point in the processing pipeline when a block should be included. So you
81
+ definitely need to update your `default.template` file as well as any other page/template file
82
+ where you used the `block` tag.
83
+
84
+ So you need to look for `\{block: content}` tags (where `content` is just a place holder for the
85
+ name of the block that should be included) and replace them with `<webgen:block name='content'
86
+ />`.
87
+
88
+ * **Update tag names and parameters**
89
+
90
+ Since the names of the configuration options changed (from using camelCase to using under\_scores)
91
+ and some tags have different options, you need to change all tag parameters. You may also need to
92
+ convert old tag names to new ones (same reason: camelCase to under\_score), for example,
93
+ `includeFile` is now `include_file`.
94
+
95
+ * **Update your ERB code**
96
+
97
+ If you have any ERB code in your template or page files you will most certainly have to adapt them
98
+ to the new [API]({relocatable: api.html}). One thing that has been used often is the check if a
99
+ page file has a certain block:
100
+
101
+ <%% if node.node_info[:page_data].blocks.has_key?('NAME') %>
102
+ ...
103
+ <%% end %>
104
+
105
+ This needs to be changed into the following:
106
+
107
+ <%% if context.content_node.node_info[:page].blocks.has_key?('NAME') %>
108
+ ...
109
+ <%% end %>
110
+
111
+ * **Extensions development**
112
+
113
+ Since the complete core of webgen has changed you need to rewrite all your plugins for the 0.5.x
114
+ series. Howver, webgen has complete [API documentation]({relocatable: api.html}) now which
115
+ provides you with all needed information as well as examples on how to implement source handlers,
116
+ tags, content processors, ... If you still have any questions, don't hesitate to contact me or
117
+ write a mail to the mailing list!
118
+
119
+ * **Running webgen on the converted website**
120
+
121
+ You now can run webgen 0.5.x on the converted website. This helps in ironing out the remaining
122
+ errors, for example:
123
+
124
+ * If you have forgotten to change a block start line, you will get an application error and the
125
+ name of the file where the error occured.
126
+
127
+ * If you have overlooked changing a tag parameter, you will find `ERROR` and `WARN` lines in the
128
+ log output showing you what still needs to be changed.
129
+
130
+ * **Not Implement Yet**: There are several features of the 0.4.x series which are currently not
131
+ implemented in the 0.5.x series:
132
+
133
+ * source handlers: gallery, sipttra
134
+ * tags: customvar (won't be ported), download, htmlmetainfo, news (won't be ported, superceded
135
+ by blogging support), resource, wikilink
136
+ * misc: smiley replacer, html validators
137
+ * CLI commands: check, show, use
138
+
139
+ If you need any of those you have to wait till they are implemented or port them on your on.
@@ -0,0 +1,128 @@
1
+ ---
2
+ title: Webgen Page Format
3
+ ---
4
+ ## Webgen Page Format
5
+
6
+ The Webgen Page Format is a custom format designed primarily for page and template files. It
7
+ consists of an optional meta information block and one or more blocks of data; it is very simple and
8
+ easy to use.
9
+
10
+ ## Structure
11
+
12
+ A file using the Webgen Page Format consists of one or more blocks which are the smallest units
13
+ recongnized. Blocks are separated from each other through a line containing three dashes. This is
14
+ illustrated in the following examples which are all valid files in WebPage Format:
15
+
16
+ Example 1:
17
+
18
+ Here is a block!
19
+
20
+ Example 2:
21
+
22
+ This is one block of the file
23
+ ---
24
+ This is another block.
25
+
26
+ Example 3:
27
+
28
+ Block 1
29
+ --- name:block2
30
+ Block 2
31
+ --- name:block3
32
+ Block 3...
33
+
34
+ If you want to use three dashes in a block but you don't want to end the block, you have to escape
35
+ them with a backslash character, like this:
36
+
37
+ Block 1
38
+ \---
39
+ still Block 1
40
+ --- name:block2
41
+ Block 2
42
+
43
+ All of the above examples show one kind of block, the content block. However, there may also be
44
+ another type of block: the meta information block. Following is a short description of both kinds,
45
+ starting with the meta information block.
46
+
47
+
48
+ ### Meta Information Block
49
+
50
+ Each file in Webgen Page Format can have zero or one meta information blocks. This block is
51
+ specified at the beginning of the file. To tell the parser that the first block is the meta
52
+ information block and not a content block, you have to start the file with three dashes:
53
+
54
+ ---
55
+ title: The title set by Meta info
56
+ ---
57
+ This is the content of the file
58
+
59
+ The above defines a meta information block and a content block. The meta information block has to be
60
+ in YAML format and should contain key-value pairs of meta information. [YAML](http://www.yaml.org)
61
+ is a simple markup language designed for ease of use and although you define structured data with
62
+ it, it feels like just writing a plain text document.
63
+
64
+
65
+ ### Content Blocks
66
+
67
+ A content block is used to provide content in a specific format. Each file in Webgen Page Format
68
+ needs to have at least one content block which may be empty. However, it can have as many content
69
+ blocks as necessary. Each content block needs to have a unique name and additional options can also
70
+ be set.
71
+
72
+ The name uniquely identifies a content block and is used to access it. The only option used by
73
+ webgen is the `pipeline` option which specifies the processing pipeline for the block. The
74
+ processing pipeline is used for rendering the block by using the specified content processors in the
75
+ specified order. There are many different content processors available - have a look at the
76
+ [extensions page]({relocatable: extensions.html}) for an overview.
77
+
78
+ There are also defaults for the name and the options of a block but they can be overwritten. You can
79
+ use one of two ways to do this:
80
+
81
+ * you either specify the name and additional options of the block on the starting line with the
82
+ three dashes
83
+
84
+ * or you use the special meta information `block` to define the names and options of one or all
85
+ blocks.
86
+
87
+ The following example uses the first technique to override the name and/or the `pipeline` option:
88
+
89
+ 1. content block of the file
90
+ --- name:sidebar pipeline:maruku,tags
91
+ 2. content block of the file
92
+ --- name:other
93
+ 3. content block of the file
94
+
95
+ The first block has no identifieres set (there is no line with three dashes and the identifieres).
96
+ Therefore the default value for the name is used: `content`. The second block is named `sidebar` and
97
+ uses the processing pipeline `maruku,tags`. As you can see, the name of a block as well as
98
+ additional options are specified by stating the key (e.g. `name` or `pipeline`) followed by a colon
99
+ and the value. Multiple options are separated via one or more spaces. The value of a block option is
100
+ parsed with YAML. For example, when specifying `use_something:true` the value `true` is
101
+ automatically converted from the string `true` to the boolean `true`.
102
+
103
+ > Only the first block gets the default name of `content`. The second and following blocks have
104
+ > numbered names like `block2`, `block3` and so on.
105
+ {.information}
106
+
107
+ You can also set the name and additional options of the content blocks by using the special `blocks`
108
+ meta information. It is a hash using the index of a block (or the special value `default`) as key
109
+ and the options as values. The above example can therefore also be written like this:
110
+
111
+ ---
112
+ blocks: \{2: {name: sidebar, pipeline: maruku,tags}, 3: {name: other}}
113
+ ---
114
+ 1. content block of the file
115
+ ---
116
+ 2. content block of the file
117
+ ---
118
+ 3. content block of the file
119
+
120
+ When selecting a value for the name of a block or an option, the following precedence is used (from
121
+ low to high):
122
+
123
+ * global defaults set via the `default` key of the meta information `blocks`
124
+ * block defaults set via the meta information `blocks`
125
+ * the `--- line` options
126
+
127
+ As stated above, the "option" `name` is special insofar that when it is not set, an automatic name
128
+ gets generated.
@@ -0,0 +1,73 @@
1
+ module Webgen
2
+
3
+ # A blackboard object provides two features for inter-object communication:
4
+ #
5
+ # * services: An object can add a service to the blackboard which can be called by any other
6
+ # object by just specifing the service name. Therefore it is easy to change the
7
+ # underlying implementation of the service and there are no hard dependencies on
8
+ # specific class or method names.
9
+ #
10
+ # * listeners: Objects may register themselves for specific messsage names and get notified when
11
+ # such a message gets dispatched.
12
+ class Blackboard
13
+
14
+ # Create a new Blackboard object.
15
+ def initialize
16
+ @listener = {}
17
+ @services = {}
18
+ end
19
+
20
+ # Add the +callable_object+ or the given block as listener for the messages +msg_names+ (one
21
+ # message name or an array of message names).
22
+ def add_listener(msg_names = nil, callable_object = nil, &block)
23
+ callable_object = callable_object || block
24
+ if !callable_object.nil?
25
+ raise ArgumentError, "The listener needs to respond to 'call'" unless callable_object.respond_to?(:call)
26
+ [msg_names].flatten.compact.each {|name| (@listener[name] ||= []) << callable_object}
27
+ else
28
+ raise ArgumentError, "You have to provide a callback object or a block"
29
+ end
30
+ end
31
+
32
+ # Remove the given object from the dispatcher queues of the message names specified in
33
+ # +msg_names+.
34
+ def del_listener(msg_names, callable_object)
35
+ [msg_names].flatten.each {|name| @listener[name].delete(callable_object) if @listener[name]}
36
+ end
37
+
38
+ # Dispatch the message +msg_name+ to all listeners for this message, passing the given
39
+ # arguments.
40
+ def dispatch_msg(msg_name, *args)
41
+ return unless @listener[msg_name]
42
+ @listener[msg_name].each {|obj| obj.call(*args)}
43
+ end
44
+
45
+ # Add a service named +service_name+ provided by the +callable_object+ or a block to the
46
+ # blackboard.
47
+ def add_service(service_name, callable_object = nil, &block)
48
+ callable_object = callable_object || block
49
+ if @services.has_key?(service_name)
50
+ raise "The service name '#{service_name}' is already taken"
51
+ else
52
+ raise ArgumentError, "An object providing a service needs to respond to 'call'" unless callable_object.respond_to?(:call)
53
+ @services[service_name] = callable_object
54
+ end
55
+ end
56
+
57
+ # Delete the service +service_name+.
58
+ def del_service(service_name)
59
+ @services.delete(service_name)
60
+ end
61
+
62
+ # Invoke the service called +service_name+ with the given arguments.
63
+ def invoke(service_name, *args, &block)
64
+ if @services.has_key?(service_name)
65
+ @services[service_name].call(*args, &block)
66
+ else
67
+ raise ArgumentError, "No such service named '#{service_name}' available"
68
+ end
69
+ end
70
+
71
+ end
72
+
73
+ end
@@ -0,0 +1,85 @@
1
+ require 'set'
2
+ require 'facets/kernel/constant'
3
+
4
+ module Webgen
5
+
6
+ # A cache object provides access to various caches to speed up rendering of a website.
7
+ #
8
+ # permanent:: The permanent cache should be used for data that should be available between webgen
9
+ # runs.
10
+ #
11
+ # volatile:: The volatile cache is used for data that can easily be regenerated but might be
12
+ # expensive to do so. This cache is not stored between webgen runs.
13
+ #
14
+ # standard:: The standard cache saves data between webgen runs and returns the cached data (not
15
+ # the newly set data) if it is available. This is useful, for example, to store file
16
+ # modifcation times and check if a file has been changed between runs.
17
+ #
18
+ # The standard cache should be accessed through the <tt>[]</tt> method which returns the correct
19
+ # value and the <tt>[]=</tt> method should be used for setting the new value. However, if you
20
+ # really need to access a particular value of the old or new standard cache, you can use the
21
+ # accessors +old_data+ and +new_data+.
22
+ class Cache
23
+
24
+ # The permanent cache hash.
25
+ attr_reader :permanent
26
+
27
+ # The volatile cache hash.
28
+ attr_reader :volatile
29
+
30
+ # The cache data stored in the previous webgen run.
31
+ attr_reader :old_data
32
+
33
+ # The cache data stored in the current webgen run.
34
+ attr_reader :new_data
35
+
36
+ # Create a new cache object.
37
+ def initialize()
38
+ @old_data = {}
39
+ @new_data = {}
40
+ @volatile = {}
41
+ @permanent = {:classes => []}
42
+ end
43
+
44
+ # Return the cached data (or, if it is not available, the new data) identified by +key+ from the
45
+ # standard cache.
46
+ def [](key)
47
+ if @old_data.has_key?(key)
48
+ @old_data[key]
49
+ else
50
+ @new_data[key]
51
+ end
52
+ end
53
+
54
+ # Store +value+ identified by +key+ in the standard cache.
55
+ def []=(key, value)
56
+ @new_data[key] = value
57
+ end
58
+
59
+ # Restore the caches from +data+ and recreate all cached instances (see #instance).
60
+ def restore(data)
61
+ @old_data, @permanent = *data
62
+ @permanent[:classes].each {|klass| instance(klass)}
63
+ end
64
+
65
+ # Return all caches that should be available between webgen runs.
66
+ def dump
67
+ [@old_data.merge(@new_data), @permanent]
68
+ end
69
+
70
+ # Reset the volatile cache.
71
+ def reset_volatile_cache
72
+ @volatile = {:classes => @volatile[:classes]}
73
+ end
74
+
75
+ # Return the unique instance of the class +name+. This method should be used when it is
76
+ # essential that webgen uses only one object of a class or when an object should automatically
77
+ # be recreated upon cache restoration (see #restore).
78
+ def instance(name)
79
+ @permanent[:classes] << name unless @permanent[:classes].include?(name)
80
+ (@volatile[:classes] ||= {})[name] ||= constant(name).new
81
+ end
82
+
83
+ end
84
+
85
+ end