gettalong-webgen 0.5.4.20080929

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 (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,96 @@
1
+ module Webgen
2
+
3
+ # Namespace for all content processors.
4
+ #
5
+ # = Implementing a content processor
6
+ #
7
+ # Content processors are used to process the content of files, normally of files in Webgen Page
8
+ # Format. A content processor only needs to respond to one method called +call+ and must not take
9
+ # any parameters in the +initialize+ method. This method is invoked with a
10
+ # Webgen::ContentProcessor::Context object that provides the whole context (especially the content
11
+ # and the node chain) and the method needs to return this object. During processing a content
12
+ # processor normally changes the content of the context but it does not need to.
13
+ #
14
+ # A self-written content processor does not need to be in the Webgen::ContentProcessor namespace
15
+ # but all shipped ones do.
16
+ #
17
+ # After writing the content processor class, one needs to add it to the
18
+ # <tt>contentprocessor.map</tt> hash so that it is used by webgen. The key for the entry needs to
19
+ # be a short name without special characters or spaces and the value is the class name, not as
20
+ # constant but as a string.
21
+ #
22
+ # = Sample Content Processor
23
+ #
24
+ # The following sample content processor checks for a meta information +replace_key+ and replaces
25
+ # strings of the form <tt>replace_key:path/to/node</tt> with a link to the specified node if it is
26
+ # found.
27
+ #
28
+ # Note how the content node, the reference node and the destination node are used sothat the
29
+ # correct meta information is used, the node is correctly resolved and the correct relative link
30
+ # is calculated respectively!
31
+ #
32
+ # class SampleProcessor
33
+ #
34
+ # def call(context)
35
+ # if !context.content_node['replace_key'].to_s.empty?
36
+ # context.content.gsub!(/#{context.content_node['replace_key']}:([\w\/.]+)/ ) do |match|
37
+ # link_node = context.ref_node.resolve($1, context.content_node.lang)
38
+ # if link_node
39
+ # context.dest_node.link_to(link_node, :lang => context.content_node.lang)
40
+ # else
41
+ # match
42
+ # end
43
+ # end
44
+ # end
45
+ # context
46
+ # rescue Exception => e
47
+ # raise "Error while replacing special key: #{e.message}"
48
+ # end
49
+ #
50
+ # end
51
+ #
52
+ # WebsiteAccess.website.config['contentprocessor.map']['replacer'] = 'SampleProcessor'
53
+ #
54
+ module ContentProcessor
55
+
56
+ autoload :Context, 'webgen/contentprocessor/context'
57
+ autoload :Tags, 'webgen/contentprocessor/tags'
58
+ autoload :Blocks, 'webgen/contentprocessor/blocks'
59
+ autoload :Maruku, 'webgen/contentprocessor/maruku'
60
+ autoload :RedCloth, 'webgen/contentprocessor/redcloth'
61
+ autoload :Erb, 'webgen/contentprocessor/erb'
62
+ autoload :Haml, 'webgen/contentprocessor/haml'
63
+ autoload :Sass, 'webgen/contentprocessor/sass'
64
+ autoload :RDoc, 'webgen/contentprocessor/rdoc'
65
+ autoload :Builder, 'webgen/contentprocessor/builder'
66
+ autoload :Erubis, 'webgen/contentprocessor/erubis'
67
+ autoload :RDiscount, 'webgen/contentprocessor/rdiscount'
68
+
69
+ # Return the list of all available content processors.
70
+ def self.list
71
+ WebsiteAccess.website.config['contentprocessor.map'].keys
72
+ end
73
+
74
+ # Return the content processor object identified by +name+.
75
+ def self.for_name(name)
76
+ klass = WebsiteAccess.website.config['contentprocessor.map'][name]
77
+ klass.nil? ? nil : WebsiteAccess.website.cache.instance(klass)
78
+ end
79
+
80
+ # Helper class for accessing content processors in a Webgen::ContentProcessor::Context object.
81
+ class AccessHash
82
+
83
+ # Check if a content processor called +name+ exists.
84
+ def has_key?(name)
85
+ Webgen::ContentProcessor.list.include?(name)
86
+ end
87
+
88
+ # Return (and proboably initialize) the content processor called +name+.
89
+ def [](name)
90
+ Webgen::ContentProcessor.for_name(name)
91
+ end
92
+ end
93
+
94
+ end
95
+
96
+ end
@@ -0,0 +1,46 @@
1
+ require 'webgen/loggable'
2
+
3
+ module Webgen::ContentProcessor
4
+
5
+ # Replaces special xml tags with the rendered content of a node.
6
+ class Blocks
7
+
8
+ include Webgen::Loggable
9
+
10
+ BLOCK_RE = /<webgen:block\s+name=('|")(\w+)\1\s*(?:\schain=('|")([^'"]+)\3\s*)?\s*\/>/
11
+
12
+ # Replace that webgen:block xml tags with the rendered content of a node.
13
+ def call(context)
14
+ chain = context[:chain]
15
+ new_chain = (chain.length > 1 ? chain[1..-1] : chain)
16
+
17
+ context.content.gsub!(BLOCK_RE) do |match|
18
+ block_name = $2
19
+ if $4.nil?
20
+ used_chain = new_chain
21
+ else
22
+ paths = $4.split(';')
23
+ used_chain = paths.collect do |path|
24
+ temp_node = context.ref_node.resolve(path.strip, context.dest_node.lang)
25
+ log(:error) { "Could not resolve <#{path.strip}> in <#{context.ref_node.absolute_lcn}> in '#{match.to_s}'" } if temp_node.nil?
26
+ temp_node
27
+ end.compact
28
+ next match if used_chain.length != paths.length
29
+ dest_node = context.content_node
30
+ end
31
+ block_node = used_chain.first
32
+
33
+ if !block_node.node_info[:page].blocks.has_key?(block_name)
34
+ raise "Node <#{block_node.absolute_lcn}> has no block named '#{block_name}'"
35
+ end
36
+
37
+ context.dest_node.node_info[:used_nodes] << block_node.absolute_lcn
38
+ tmp_context = block_node.node_info[:page].blocks[block_name].render(context.clone(:chain => used_chain, :dest_node => dest_node))
39
+ tmp_context.content
40
+ end
41
+ context
42
+ end
43
+
44
+ end
45
+
46
+ end
@@ -0,0 +1,26 @@
1
+ module Webgen::ContentProcessor
2
+
3
+ # Processes content that is valid Ruby to build an XML tree. This is done by using the +builder+
4
+ # library.
5
+ class Builder
6
+
7
+ # Process the content of +context+ which needs to be valid Ruby code. The special variable +xml+
8
+ # should be used to construct the XML content.
9
+ def call(context)
10
+ require 'builder'
11
+
12
+ node = context.content_node
13
+ ref_node = context.ref_node
14
+ dest_node = context.dest_node
15
+
16
+ xml = ::Builder::XmlMarkup.new(:indent => 2)
17
+ eval(context.content, binding, context.ref_node.absolute_lcn)
18
+ context.content = xml.target!
19
+ context
20
+ rescue Exception => e
21
+ raise RuntimeError, "Error using Builder in <#{context.ref_node.absolute_lcn}> to generate XML: #{e.message}", e.backtrace
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,90 @@
1
+ require 'webgen/contentprocessor'
2
+ require 'webgen/websiteaccess'
3
+
4
+ module Webgen::ContentProcessor
5
+
6
+ # The context object that is passed to the +call+ method of a content processor.
7
+ #
8
+ # The needed context variables are stored in the +options+ hash. You can set any options you like,
9
+ # however, there are three noteworthy options:
10
+ #
11
+ # <tt>:content</tt>:: The content string that should be processed.
12
+ # <tt>:processors</tt>:: Normally an AccessHash object providing access to all available content processors.
13
+ # <tt>:chain</tt>:: The chain of nodes that is processed. There are some utiltity methods for getting
14
+ # special nodes of the chain (see #ref_node, #content_node).
15
+ class Context
16
+
17
+ include Webgen::WebsiteAccess
18
+ public :website
19
+
20
+ # Processing options
21
+ attr_accessor :options
22
+
23
+ # Create a new Context object. You can use the +options+ hash to set needed options. The
24
+ # <tt>:content</tt> option is set to an empty string if not specified in +options+ and
25
+ # <tt>:processors</tt> is set to a new AccessHash if not specified in +options+.
26
+ def initialize(options = {})
27
+ @options = {
28
+ :content => '',
29
+ :processors => Webgen::ContentProcessor::AccessHash.new
30
+ }.merge(options)
31
+ end
32
+
33
+ # Create a copy of the current object. You can use the +options+ parameter to override options
34
+ # of the current Context object in the newly created Context object.
35
+ def clone(options = {})
36
+ self.class.new(@options.merge(options))
37
+ end
38
+
39
+ # Return the value of the option +name+.
40
+ def [](name)
41
+ @options[name]
42
+ end
43
+
44
+ # Set the option +name+ to the given +value.
45
+ def []=(name, value)
46
+ @options[name] = value
47
+ end
48
+
49
+ # Return the <tt>:content</tt> option.
50
+ def content
51
+ @options[:content]
52
+ end
53
+
54
+ # Set the <tt>:content</tt> option to the given +value+.
55
+ def content=(value)
56
+ @options[:content] = value
57
+ end
58
+
59
+ # Return the node which represents the file into which everything gets rendered. This is
60
+ # normally the same node as <tt>#content_node</tt> but can differ in special cases. For example,
61
+ # when rendering the content of node called <tt>my.page</tt> into the output of the node
62
+ # <tt>this.page</tt>, <tt>this.page</tt> would be the +dest_node+ and <tt>my.page</tt> would be
63
+ # the +content_node+.
64
+ #
65
+ # The +dest_node+ is not included in the chain but can be set via the option
66
+ # <tt>:dest_node</tt>!
67
+ #
68
+ # The returned node should be used as source node for calculating relative paths to other nodes.
69
+ def dest_node
70
+ @options[:dest_node] || self.content_node
71
+ end
72
+
73
+ # Return the reference node, ie. the node which provided the original content for this context
74
+ # object.
75
+ #
76
+ # The returned node should be used, for example, for resolving relative paths.
77
+ def ref_node
78
+ @options[:chain] && @options[:chain].first
79
+ end
80
+
81
+ # Return the node that is ultimately rendered.
82
+ #
83
+ # This node should be used, for example, for retrieving meta information.
84
+ def content_node
85
+ @options[:chain] && @options[:chain].last
86
+ end
87
+
88
+ end
89
+
90
+ end
@@ -0,0 +1,24 @@
1
+ module Webgen::ContentProcessor
2
+
3
+ # Processes embedded Ruby statements.
4
+ class Erb
5
+
6
+ # Process the Ruby statements embedded in the content of +context+.
7
+ def call(context)
8
+ require 'erb'
9
+
10
+ node = context.content_node
11
+ ref_node = context.ref_node
12
+ dest_node = context.dest_node
13
+
14
+ erb = ERB.new(context.content)
15
+ erb.filename = context.ref_node.absolute_lcn
16
+ context.content = erb.result(binding)
17
+ context
18
+ rescue Exception => e
19
+ raise RuntimeError, "Erb processing failed in <#{context.ref_node.absolute_lcn}>: #{e.message}", e.backtrace
20
+ end
21
+
22
+ end
23
+
24
+ end
@@ -0,0 +1,40 @@
1
+ require 'webgen/websiteaccess'
2
+
3
+ module Webgen::ContentProcessor
4
+
5
+ # Processes embedded Ruby statements with the +erubis+ library.
6
+ class Erubis
7
+
8
+ include Webgen::WebsiteAccess
9
+
10
+ # Process the Ruby statements embedded in the content of +context+.
11
+ def call(context)
12
+ require 'erubis'
13
+ # including Erubis because of problem with resolving Erubis::XmlHelper et al
14
+ self.class.class_eval "include ::Erubis"
15
+
16
+ node = context.content_node
17
+ ref_node = context.ref_node
18
+ dest_node = context.dest_node
19
+
20
+ options = website.config['contentprocessor.erubis.options']
21
+ if context[:block]
22
+ use_pi = context[:block].options['erubis_use_pi']
23
+ context[:block].options.select {|k,v| k =~ /^erubis_/}.
24
+ each {|k,v| options[k.sub(/^erubis_/, '').to_sym] = v }
25
+ end
26
+ erubis = if (!use_pi.nil? && use_pi) || (use_pi.nil? && website.config['contentprocessor.erubis.use_pi'])
27
+ ::Erubis::PI::Eruby.new(context.content, options)
28
+ else
29
+ ::Erubis::Eruby.new(context.content, options)
30
+ end
31
+ erubis.filename = context.ref_node.absolute_lcn
32
+ context.content = erubis.result(binding)
33
+ context
34
+ rescue Exception => e
35
+ raise RuntimeError, "Erubis processing failed in <#{context.ref_node.absolute_lcn}>: #{e.message}", e.backtrace
36
+ end
37
+
38
+ end
39
+
40
+ end
@@ -0,0 +1,25 @@
1
+ module Webgen::ContentProcessor
2
+
3
+ # Processes content in Haml markup using the +haml+ library.
4
+ class Haml
5
+
6
+ # Convert the content in +haml+ markup to HTML.
7
+ def call(context)
8
+ require 'haml'
9
+
10
+ locals = {
11
+ :context => context,
12
+ :node => context.content_node,
13
+ :ref_node => context.ref_node,
14
+ :dest_node => context.dest_node,
15
+ }
16
+ context.content = ::Haml::Engine.new(context.content, :filename => context.ref_node.absolute_lcn).
17
+ render(Object.new, locals)
18
+ context
19
+ rescue Exception => e
20
+ raise RuntimeError, "Error converting Haml markup to HTML in <#{context.ref_node.absolute_lcn}>: #{e.message}", e.backtrace
21
+ end
22
+
23
+ end
24
+
25
+ end
@@ -0,0 +1,18 @@
1
+ module Webgen::ContentProcessor
2
+
3
+ # Processes content in Markdown format using the +maruku+ library.
4
+ class Maruku
5
+
6
+ # Convert the content in +context+ to HTML.
7
+ def call(context)
8
+ require 'maruku'
9
+ $uid = 0 #fix for invalid fragment ids on second run
10
+ context.content = ::Maruku.new(context.content, :on_error => :raise).to_html
11
+ context
12
+ rescue Exception => e
13
+ raise RuntimeError, "Maruku to HTML conversion failed for <#{context.ref_node.absolute_lcn}>: #{e.message}", e.backtrace
14
+ end
15
+
16
+ end
17
+
18
+ end
@@ -0,0 +1,15 @@
1
+ module Webgen::ContentProcessor
2
+
3
+ # Processes content in Markdown markup with the fast +rdiscount+ library.
4
+ class RDiscount
5
+
6
+ # Convert the content in +context+ to HTML.
7
+ def call(context)
8
+ require 'rdiscount'
9
+ context.content = ::RDiscount.new(context.content).to_html
10
+ context
11
+ end
12
+
13
+ end
14
+
15
+ end
@@ -0,0 +1,17 @@
1
+ module Webgen::ContentProcessor
2
+
3
+ # Converts content in RDoc markup (the native Ruby documentation format) to HTML. Needs the newer
4
+ # RDoc implementation provided as +rdoc+ gem!
5
+ class RDoc
6
+
7
+ # Convert the content in RDoc markup to HTML.
8
+ def call(context)
9
+ require 'rdoc/markup/to_html'
10
+
11
+ context.content = ::RDoc::Markup::ToHtml.new.convert(context.content)
12
+ context
13
+ end
14
+
15
+ end
16
+
17
+ end
@@ -0,0 +1,15 @@
1
+ module Webgen::ContentProcessor
2
+
3
+ # Processes content in Textile format using the +redcloth+ library.
4
+ class RedCloth
5
+
6
+ # Convert the content in +context+ to HTML.
7
+ def call(context)
8
+ require 'redcloth'
9
+ context.content = ::RedCloth.new(context.content).to_html
10
+ context
11
+ end
12
+
13
+ end
14
+
15
+ end
@@ -0,0 +1,18 @@
1
+ module Webgen::ContentProcessor
2
+
3
+ # Processes content in Sass markup (used for writing CSS files) using the +haml+ library.
4
+ class Sass
5
+
6
+ # Convert the content in +sass+ markup to CSS.
7
+ def call(context)
8
+ require 'sass'
9
+
10
+ context.content = ::Sass::Engine.new(context.content, :filename => context.ref_node.absolute_lcn).render
11
+ context
12
+ rescue Exception => e
13
+ raise RuntimeError, "Error converting Sass markup to CSS in <#{context.ref_node.absolute_lcn}>: #{e.message}", e.backtrace
14
+ end
15
+
16
+ end
17
+
18
+ end