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.
- data/AUTHORS +5 -0
- data/COPYING +10 -0
- data/GPL +340 -0
- data/Rakefile +324 -0
- data/THANKS +17 -0
- data/bin/webgen +10 -0
- data/data/webgen/resources.yaml +3 -0
- data/data/webgen/webgui/controller/main.rb +129 -0
- data/data/webgen/webgui/overrides/win32console.rb +0 -0
- data/data/webgen/webgui/public/css/jquery.autocomplete.css +50 -0
- data/data/webgen/webgui/public/css/ramaze_error.css +90 -0
- data/data/webgen/webgui/public/css/style.css +55 -0
- data/data/webgen/webgui/public/img/headerbg.jpg +0 -0
- data/data/webgen/webgui/public/img/webgen_logo.png +0 -0
- data/data/webgen/webgui/public/js/jquery.autocomplete.js +15 -0
- data/data/webgen/webgui/public/js/jquery.js +32 -0
- data/data/webgen/webgui/view/create_website.xhtml +22 -0
- data/data/webgen/webgui/view/error.xhtml +64 -0
- data/data/webgen/webgui/view/index.xhtml +22 -0
- data/data/webgen/webgui/view/manage_website.xhtml +18 -0
- data/data/webgen/webgui/view/page.xhtml +40 -0
- data/data/webgen/website_skeleton/README +10 -0
- data/data/webgen/website_skeleton/Rakefile +40 -0
- data/data/webgen/website_skeleton/config.yaml +17 -0
- data/data/webgen/website_skeleton/ext/init.rb +6 -0
- data/data/webgen/website_styles/1024px/README +13 -0
- data/data/webgen/website_styles/1024px/src/default.css +188 -0
- data/data/webgen/website_styles/1024px/src/default.template +60 -0
- data/data/webgen/website_styles/1024px/src/images/background.gif +0 -0
- data/data/webgen/website_styles/andreas00/README +13 -0
- data/data/webgen/website_styles/andreas00/src/default.css +290 -0
- data/data/webgen/website_styles/andreas00/src/default.template +60 -0
- data/data/webgen/website_styles/andreas00/src/images/bg.gif +0 -0
- data/data/webgen/website_styles/andreas00/src/images/front.jpg +0 -0
- data/data/webgen/website_styles/andreas00/src/images/menubg.gif +0 -0
- data/data/webgen/website_styles/andreas00/src/images/menubg2.gif +0 -0
- data/data/webgen/website_styles/andreas01/README +14 -0
- data/data/webgen/website_styles/andreas01/src/default.css +310 -0
- data/data/webgen/website_styles/andreas01/src/default.template +61 -0
- data/data/webgen/website_styles/andreas01/src/images/bg.gif +0 -0
- data/data/webgen/website_styles/andreas01/src/images/front.jpg +0 -0
- data/data/webgen/website_styles/andreas01/src/print.css +35 -0
- data/data/webgen/website_styles/andreas03/README +14 -0
- data/data/webgen/website_styles/andreas03/src/default.css +223 -0
- data/data/webgen/website_styles/andreas03/src/default.template +58 -0
- data/data/webgen/website_styles/andreas03/src/images/bodybg.png +0 -0
- data/data/webgen/website_styles/andreas03/src/images/contbg.png +0 -0
- data/data/webgen/website_styles/andreas03/src/images/footerbg.png +0 -0
- data/data/webgen/website_styles/andreas03/src/images/gradient1.png +0 -0
- data/data/webgen/website_styles/andreas03/src/images/gradient2.png +0 -0
- data/data/webgen/website_styles/andreas04/README +15 -0
- data/data/webgen/website_styles/andreas04/src/default.css +290 -0
- data/data/webgen/website_styles/andreas04/src/default.template +81 -0
- data/data/webgen/website_styles/andreas04/src/images/blinkarrow.gif +0 -0
- data/data/webgen/website_styles/andreas04/src/images/bodybg.png +0 -0
- data/data/webgen/website_styles/andreas04/src/images/contentbg.png +0 -0
- data/data/webgen/website_styles/andreas04/src/images/entrybg.png +0 -0
- data/data/webgen/website_styles/andreas04/src/images/flash.gif +0 -0
- data/data/webgen/website_styles/andreas04/src/images/flash2.gif +0 -0
- data/data/webgen/website_styles/andreas04/src/images/globe.gif +0 -0
- data/data/webgen/website_styles/andreas04/src/images/globebottom.gif +0 -0
- data/data/webgen/website_styles/andreas04/src/images/linkarrow.gif +0 -0
- data/data/webgen/website_styles/andreas04/src/images/menuhover.png +0 -0
- data/data/webgen/website_styles/andreas05/README +14 -0
- data/data/webgen/website_styles/andreas05/src/default.css +33 -0
- data/data/webgen/website_styles/andreas05/src/default.template +40 -0
- data/data/webgen/website_styles/andreas05/src/images/bodybg.gif +0 -0
- data/data/webgen/website_styles/andreas05/src/images/front.png +0 -0
- data/data/webgen/website_styles/andreas06/README +14 -0
- data/data/webgen/website_styles/andreas06/src/default.css +354 -0
- data/data/webgen/website_styles/andreas06/src/default.template +70 -0
- data/data/webgen/website_styles/andreas06/src/images/bodybg.gif +0 -0
- data/data/webgen/website_styles/andreas06/src/images/boxbg.gif +0 -0
- data/data/webgen/website_styles/andreas06/src/images/greypx.gif +0 -0
- data/data/webgen/website_styles/andreas06/src/images/header.jpg +0 -0
- data/data/webgen/website_styles/andreas06/src/images/innerbg.gif +0 -0
- data/data/webgen/website_styles/andreas06/src/images/leaves.jpg +0 -0
- data/data/webgen/website_styles/andreas06/src/images/tabs.gif +0 -0
- data/data/webgen/website_styles/andreas07/README +15 -0
- data/data/webgen/website_styles/andreas07/src/browserfix.css +7 -0
- data/data/webgen/website_styles/andreas07/src/default.css +92 -0
- data/data/webgen/website_styles/andreas07/src/default.template +42 -0
- data/data/webgen/website_styles/andreas07/src/images/bodybg.gif +0 -0
- data/data/webgen/website_styles/andreas07/src/images/sidebarbg.gif +0 -0
- data/data/webgen/website_styles/andreas08/README +14 -0
- data/data/webgen/website_styles/andreas08/src/default.css +224 -0
- data/data/webgen/website_styles/andreas08/src/default.template +51 -0
- data/data/webgen/website_styles/andreas09/README +14 -0
- data/data/webgen/website_styles/andreas09/src/default.css +308 -0
- data/data/webgen/website_styles/andreas09/src/default.template +68 -0
- data/data/webgen/website_styles/andreas09/src/images/bodybg-black.jpg +0 -0
- data/data/webgen/website_styles/andreas09/src/images/bodybg-green.jpg +0 -0
- data/data/webgen/website_styles/andreas09/src/images/bodybg-orange.jpg +0 -0
- data/data/webgen/website_styles/andreas09/src/images/bodybg-purple.jpg +0 -0
- data/data/webgen/website_styles/andreas09/src/images/bodybg-red.jpg +0 -0
- data/data/webgen/website_styles/andreas09/src/images/bodybg.jpg +0 -0
- data/data/webgen/website_styles/andreas09/src/images/footerbg.jpg +0 -0
- data/data/webgen/website_styles/andreas09/src/images/menuhover-black.jpg +0 -0
- data/data/webgen/website_styles/andreas09/src/images/menuhover-green.jpg +0 -0
- data/data/webgen/website_styles/andreas09/src/images/menuhover-orange.jpg +0 -0
- data/data/webgen/website_styles/andreas09/src/images/menuhover-purple.jpg +0 -0
- data/data/webgen/website_styles/andreas09/src/images/menuhover-red.jpg +0 -0
- data/data/webgen/website_styles/andreas09/src/images/menuhover.jpg +0 -0
- data/data/webgen/website_styles/simple/README +6 -0
- data/data/webgen/website_styles/simple/src/default.css +84 -0
- data/data/webgen/website_styles/simple/src/default.template +36 -0
- data/data/webgen/website_templates/default/README +6 -0
- data/data/webgen/website_templates/default/src/index.page +8 -0
- data/data/webgen/website_templates/project/README +5 -0
- data/data/webgen/website_templates/project/src/about.page +12 -0
- data/data/webgen/website_templates/project/src/download.page +15 -0
- data/data/webgen/website_templates/project/src/features.page +8 -0
- data/data/webgen/website_templates/project/src/index.page +9 -0
- data/data/webgen/website_templates/project/src/screenshots.page +18 -0
- data/doc/contentprocessor.template +11 -0
- data/doc/contentprocessor/blocks.page +66 -0
- data/doc/contentprocessor/builder.page +80 -0
- data/doc/contentprocessor/erb.page +56 -0
- data/doc/contentprocessor/erubis.page +46 -0
- data/doc/contentprocessor/haml.page +47 -0
- data/doc/contentprocessor/maruku.page +41 -0
- data/doc/contentprocessor/rdiscount.page +37 -0
- data/doc/contentprocessor/rdoc.page +36 -0
- data/doc/contentprocessor/redcloth.page +39 -0
- data/doc/contentprocessor/sass.page +31 -0
- data/doc/contentprocessor/tags.page +73 -0
- data/doc/extensions.metainfo +29 -0
- data/doc/extensions.page +16 -0
- data/doc/extensions.template +17 -0
- data/doc/faq.page +214 -0
- data/doc/getting_started.page +134 -0
- data/doc/index.page +65 -0
- data/doc/manual.page +532 -0
- data/doc/reference_configuration.page +646 -0
- data/doc/reference_metainfo.page +213 -0
- data/doc/sourcehandler.template +21 -0
- data/doc/sourcehandler/copy.page +19 -0
- data/doc/sourcehandler/directory.page +27 -0
- data/doc/sourcehandler/feed.page +82 -0
- data/doc/sourcehandler/metainfo.page +41 -0
- data/doc/sourcehandler/page.page +30 -0
- data/doc/sourcehandler/sitemap.page +46 -0
- data/doc/sourcehandler/template.page +45 -0
- data/doc/sourcehandler/virtual.page +49 -0
- data/doc/tag.template +25 -0
- data/doc/tag/breadcrumbtrail.page +40 -0
- data/doc/tag/coderay.page +49 -0
- data/doc/tag/date.page +31 -0
- data/doc/tag/executecommand.page +26 -0
- data/doc/tag/includefile.page +32 -0
- data/doc/tag/langbar.page +22 -0
- data/doc/tag/menu.page +92 -0
- data/doc/tag/metainfo.page +29 -0
- data/doc/tag/relocatable.page +38 -0
- data/doc/tag/sitemap.page +31 -0
- data/doc/upgrading.page +139 -0
- data/doc/webgen_page_format.page +128 -0
- data/lib/webgen/blackboard.rb +73 -0
- data/lib/webgen/cache.rb +85 -0
- data/lib/webgen/cli.rb +118 -0
- data/lib/webgen/cli/create_command.rb +64 -0
- data/lib/webgen/cli/run_command.rb +20 -0
- data/lib/webgen/cli/utils.rb +86 -0
- data/lib/webgen/cli/webgui_command.rb +49 -0
- data/lib/webgen/common.rb +10 -0
- data/lib/webgen/common/sitemap.rb +76 -0
- data/lib/webgen/configuration.rb +147 -0
- data/lib/webgen/contentprocessor.rb +96 -0
- data/lib/webgen/contentprocessor/blocks.rb +46 -0
- data/lib/webgen/contentprocessor/builder.rb +26 -0
- data/lib/webgen/contentprocessor/context.rb +90 -0
- data/lib/webgen/contentprocessor/erb.rb +24 -0
- data/lib/webgen/contentprocessor/erubis.rb +40 -0
- data/lib/webgen/contentprocessor/haml.rb +25 -0
- data/lib/webgen/contentprocessor/maruku.rb +18 -0
- data/lib/webgen/contentprocessor/rdiscount.rb +15 -0
- data/lib/webgen/contentprocessor/rdoc.rb +17 -0
- data/lib/webgen/contentprocessor/redcloth.rb +15 -0
- data/lib/webgen/contentprocessor/sass.rb +18 -0
- data/lib/webgen/contentprocessor/tags.rb +134 -0
- data/lib/webgen/coreext.rb +10 -0
- data/lib/webgen/default_config.rb +198 -0
- data/lib/webgen/languages.rb +578 -0
- data/lib/webgen/loggable.rb +23 -0
- data/lib/webgen/logger.rb +78 -0
- data/lib/webgen/node.rb +347 -0
- data/lib/webgen/output.rb +37 -0
- data/lib/webgen/output/filesystem.rb +67 -0
- data/lib/webgen/page.rb +133 -0
- data/lib/webgen/path.rb +182 -0
- data/lib/webgen/source.rb +24 -0
- data/lib/webgen/source/filesystem.rb +58 -0
- data/lib/webgen/source/resource.rb +42 -0
- data/lib/webgen/source/stacked.rb +53 -0
- data/lib/webgen/sourcehandler.rb +202 -0
- data/lib/webgen/sourcehandler/base.rb +211 -0
- data/lib/webgen/sourcehandler/copy.rb +41 -0
- data/lib/webgen/sourcehandler/directory.rb +31 -0
- data/lib/webgen/sourcehandler/feed.rb +121 -0
- data/lib/webgen/sourcehandler/fragment.rb +71 -0
- data/lib/webgen/sourcehandler/metainfo.rb +117 -0
- data/lib/webgen/sourcehandler/page.rb +77 -0
- data/lib/webgen/sourcehandler/sitemap.rb +60 -0
- data/lib/webgen/sourcehandler/template.rb +68 -0
- data/lib/webgen/sourcehandler/virtual.rb +75 -0
- data/lib/webgen/tag.rb +23 -0
- data/lib/webgen/tag/base.rb +162 -0
- data/lib/webgen/tag/breadcrumbtrail.rb +71 -0
- data/lib/webgen/tag/coderay.rb +32 -0
- data/lib/webgen/tag/date.rb +18 -0
- data/lib/webgen/tag/executecommand.rb +29 -0
- data/lib/webgen/tag/includefile.rb +42 -0
- data/lib/webgen/tag/langbar.rb +52 -0
- data/lib/webgen/tag/menu.rb +186 -0
- data/lib/webgen/tag/metainfo.rb +25 -0
- data/lib/webgen/tag/relocatable.rb +53 -0
- data/lib/webgen/tag/sitemap.rb +42 -0
- data/lib/webgen/tree.rb +80 -0
- data/lib/webgen/version.rb +6 -0
- data/lib/webgen/webgentask.rb +148 -0
- data/lib/webgen/website.rb +214 -0
- data/lib/webgen/websiteaccess.rb +29 -0
- data/lib/webgen/websitemanager.rb +125 -0
- data/man/man1/webgen.1 +67 -0
- data/misc/default.css +360 -0
- data/misc/default.template +75 -0
- data/misc/htmldoc.metainfo +25 -0
- data/misc/htmldoc.virtual +5 -0
- data/misc/images/arrow.gif +0 -0
- data/misc/images/error.gif +0 -0
- data/misc/images/exclamation.gif +0 -0
- data/misc/images/headerbg.jpg +0 -0
- data/misc/images/information.gif +0 -0
- data/misc/images/quote.gif +0 -0
- data/setup.rb +1585 -0
- data/test/helper.rb +41 -0
- data/test/test_blackboard.rb +58 -0
- data/test/test_cache.rb +57 -0
- data/test/test_common_sitemap.rb +56 -0
- data/test/test_configuration.rb +66 -0
- data/test/test_contentprocessor.rb +31 -0
- data/test/test_contentprocessor_blocks.rb +34 -0
- data/test/test_contentprocessor_builder.rb +19 -0
- data/test/test_contentprocessor_context.rb +38 -0
- data/test/test_contentprocessor_erb.rb +20 -0
- data/test/test_contentprocessor_erubis.rb +47 -0
- data/test/test_contentprocessor_haml.rb +20 -0
- data/test/test_contentprocessor_maruku.rb +27 -0
- data/test/test_contentprocessor_rdiscount.rb +15 -0
- data/test/test_contentprocessor_rdoc.rb +16 -0
- data/test/test_contentprocessor_redcloth.rb +12 -0
- data/test/test_contentprocessor_sass.rb +20 -0
- data/test/test_contentprocessor_tags.rb +97 -0
- data/test/test_languages.rb +53 -0
- data/test/test_loggable.rb +30 -0
- data/test/test_logger.rb +73 -0
- data/test/test_node.rb +339 -0
- data/test/test_output_filesystem.rb +58 -0
- data/test/test_page.rb +203 -0
- data/test/test_path.rb +131 -0
- data/test/test_source_filesystem.rb +59 -0
- data/test/test_source_resource.rb +26 -0
- data/test/test_source_stacked.rb +34 -0
- data/test/test_sourcehandler_base.rb +92 -0
- data/test/test_sourcehandler_copy.rb +45 -0
- data/test/test_sourcehandler_directory.rb +25 -0
- data/test/test_sourcehandler_feed.rb +74 -0
- data/test/test_sourcehandler_fragment.rb +67 -0
- data/test/test_sourcehandler_metainfo.rb +93 -0
- data/test/test_sourcehandler_page.rb +70 -0
- data/test/test_sourcehandler_sitemap.rb +47 -0
- data/test/test_sourcehandler_template.rb +63 -0
- data/test/test_sourcehandler_virtual.rb +56 -0
- data/test/test_tag_base.rb +82 -0
- data/test/test_tag_breadcrumbtrail.rb +89 -0
- data/test/test_tag_coderay.rb +30 -0
- data/test/test_tag_date.rb +16 -0
- data/test/test_tag_executecommand.rb +39 -0
- data/test/test_tag_includefile.rb +48 -0
- data/test/test_tag_langbar.rb +60 -0
- data/test/test_tag_menu.rb +195 -0
- data/test/test_tag_metainfo.rb +17 -0
- data/test/test_tag_relocatable.rb +57 -0
- data/test/test_tag_sitemap.rb +44 -0
- data/test/test_tree.rb +69 -0
- data/test/test_webgentask.rb +21 -0
- data/test/test_website.rb +96 -0
- data/test/test_websiteaccess.rb +23 -0
- data/test/test_websitemanager.rb +68 -0
- 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
|