gettalong-webgen 0.5.8.20090507 → 0.5.9.20090620
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/Rakefile +5 -6
- data/data/webgen/passive_sources/images/generated_by_webgen.png +0 -0
- data/data/webgen/passive_sources/images/webgen_logo.png +0 -0
- data/data/webgen/passive_sources/templates/atom_feed.template +38 -0
- data/data/webgen/passive_sources/templates/rss_feed.template +28 -0
- data/data/webgen/resources.yaml +2 -1
- data/doc/contentprocessor/builder.page +1 -1
- data/doc/contentprocessor/erb.page +5 -2
- data/doc/contentprocessor/erubis.page +2 -2
- data/doc/extensions.page +1 -1
- data/doc/manual.page +56 -26
- data/doc/reference_configuration.page +36 -1
- data/doc/reference_website_styles.page +1 -1
- data/doc/sourcehandler/feed.page +6 -11
- data/doc/tag/includefile.page +1 -1
- data/lib/webgen/cli/apply_command.rb +1 -1
- data/lib/webgen/cli/utils.rb +2 -2
- data/lib/webgen/common.rb +0 -9
- data/lib/webgen/contentprocessor/blocks.rb +60 -36
- data/lib/webgen/contentprocessor/builder.rb +2 -2
- data/lib/webgen/contentprocessor/erb.rb +3 -2
- data/lib/webgen/contentprocessor/erubis.rb +2 -2
- data/lib/webgen/contentprocessor/haml.rb +2 -2
- data/lib/webgen/contentprocessor/maruku.rb +1 -1
- data/lib/webgen/contentprocessor/sass.rb +2 -2
- data/lib/webgen/contentprocessor/tags.rb +25 -11
- data/lib/webgen/context.rb +4 -1
- data/lib/webgen/context/render.rb +32 -0
- data/lib/webgen/context/tags.rb +20 -0
- data/lib/webgen/default_config.rb +4 -1
- data/lib/webgen/deprecated.rb +37 -4
- data/lib/webgen/node.rb +37 -38
- data/lib/webgen/path.rb +151 -54
- data/lib/webgen/source.rb +6 -6
- data/lib/webgen/source/stacked.rb +13 -5
- data/lib/webgen/sourcehandler.rb +71 -45
- data/lib/webgen/sourcehandler/base.rb +51 -21
- data/lib/webgen/sourcehandler/copy.rb +4 -4
- data/lib/webgen/sourcehandler/directory.rb +3 -9
- data/lib/webgen/sourcehandler/feed.rb +23 -49
- data/lib/webgen/sourcehandler/fragment.rb +10 -8
- data/lib/webgen/sourcehandler/memory.rb +9 -10
- data/lib/webgen/sourcehandler/metainfo.rb +9 -9
- data/lib/webgen/sourcehandler/page.rb +5 -5
- data/lib/webgen/sourcehandler/sitemap.rb +3 -3
- data/lib/webgen/sourcehandler/template.rb +6 -6
- data/lib/webgen/sourcehandler/virtual.rb +19 -17
- data/lib/webgen/tag/base.rb +34 -26
- data/lib/webgen/tag/breadcrumbtrail.rb +3 -3
- data/lib/webgen/tag/executecommand.rb +3 -3
- data/lib/webgen/tag/langbar.rb +2 -2
- data/lib/webgen/tag/link.rb +3 -3
- data/lib/webgen/tag/menu.rb +2 -2
- data/lib/webgen/tag/metainfo.rb +1 -1
- data/lib/webgen/tag/relocatable.rb +17 -21
- data/lib/webgen/tag/tikz.rb +5 -6
- data/lib/webgen/tree.rb +7 -7
- data/lib/webgen/version.rb +1 -1
- data/lib/webgen/website.rb +4 -2
- data/misc/default.css +8 -2
- data/misc/default.template +2 -2
- data/misc/logo.svg +313 -0
- data/misc/style.page +1 -1
- data/test/helper.rb +2 -2
- data/test/test_common_sitemap.rb +1 -1
- data/test/test_contentprocessor_blocks.rb +12 -4
- data/test/test_contentprocessor_builder.rb +2 -1
- data/test/test_contentprocessor_erb.rb +2 -1
- data/test/test_contentprocessor_erubis.rb +1 -1
- data/test/test_contentprocessor_fragments.rb +12 -11
- data/test/test_contentprocessor_haml.rb +2 -1
- data/test/test_contentprocessor_maruku.rb +1 -0
- data/test/test_contentprocessor_rdiscount.rb +1 -0
- data/test/test_contentprocessor_rdoc.rb +1 -0
- data/test/test_contentprocessor_sass.rb +1 -0
- data/test/test_contentprocessor_tags.rb +13 -0
- data/test/test_context.rb +28 -0
- data/test/test_node.rb +40 -20
- data/test/test_path.rb +106 -65
- data/test/test_source_filesystem.rb +1 -1
- data/test/test_source_stacked.rb +19 -6
- data/test/test_sourcehandler_base.rb +53 -47
- data/test/test_sourcehandler_copy.rb +6 -6
- data/test/test_sourcehandler_directory.rb +8 -12
- data/test/test_sourcehandler_feed.rb +10 -6
- data/test/test_sourcehandler_fragment.rb +6 -5
- data/test/test_sourcehandler_main.rb +39 -0
- data/test/test_sourcehandler_memory.rb +4 -4
- data/test/test_sourcehandler_metainfo.rb +10 -10
- data/test/test_sourcehandler_page.rb +9 -9
- data/test/test_sourcehandler_sitemap.rb +4 -4
- data/test/test_sourcehandler_template.rb +14 -14
- data/test/test_sourcehandler_virtual.rb +9 -5
- data/test/test_tag_base.rb +2 -2
- data/test/test_tag_executecommand.rb +1 -1
- data/test/test_tag_link.rb +4 -3
- data/test/test_tag_menu.rb +15 -15
- data/test/test_tag_metainfo.rb +1 -0
- data/test/test_tag_relocatable.rb +2 -1
- data/test/test_tag_tikz.rb +3 -3
- data/test/test_tree.rb +8 -8
- data/test/test_website.rb +15 -0
- metadata +14 -14
- data/test/test_common.rb +0 -18
@@ -14,12 +14,12 @@ module Webgen::SourceHandler
|
|
14
14
|
include Webgen::WebsiteAccess
|
15
15
|
include Base
|
16
16
|
|
17
|
-
# Create an XML sitemap from +
|
18
|
-
def create_node(
|
17
|
+
# Create an XML sitemap from +path+.
|
18
|
+
def create_node(path)
|
19
19
|
page_from_path(path)
|
20
20
|
path.ext = 'xml'
|
21
21
|
raise "Needed information site_url missing for sitemap <#{path}>" if path.meta_info['site_url'].nil?
|
22
|
-
super(
|
22
|
+
super(path)
|
23
23
|
end
|
24
24
|
|
25
25
|
# Return the rendered feed represented by +node+.
|
@@ -9,30 +9,30 @@ module Webgen::SourceHandler
|
|
9
9
|
include Webgen::Loggable
|
10
10
|
include Base
|
11
11
|
|
12
|
-
# Create a template node
|
13
|
-
def create_node(
|
12
|
+
# Create a template node for +path+.
|
13
|
+
def create_node(path)
|
14
14
|
page = page_from_path(path)
|
15
|
-
super(
|
15
|
+
super(path) do |node|
|
16
16
|
node.node_info[:page] = page
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
# Return the template chain for +node+.
|
21
21
|
def templates_for_node(node, lang = node.lang)
|
22
|
-
cached_template = (website.cache.volatile[[node.
|
22
|
+
cached_template = (website.cache.volatile[[node.alcn, :templates]] ||= {})
|
23
23
|
if cached_template[lang]
|
24
24
|
template_node = cached_template[lang]
|
25
25
|
elsif node['template'].kind_of?(String)
|
26
26
|
template_node = node.resolve(node['template'], lang)
|
27
27
|
if template_node.nil?
|
28
|
-
log(:warn) { "Specified template '#{node['template']}' for <#{node.
|
28
|
+
log(:warn) { "Specified template '#{node['template']}' for <#{node.alcn}> not found, using default template!" }
|
29
29
|
template_node = default_template(node.parent, lang)
|
30
30
|
end
|
31
31
|
cached_template[lang] = template_node
|
32
32
|
elsif node.meta_info.has_key?('template') && node['template'].nil?
|
33
33
|
template_node = cached_template[lang] = nil
|
34
34
|
else
|
35
|
-
log(:info) { "Using default template in language '#{lang}' for <#{node.
|
35
|
+
log(:info) { "Using default template in language '#{lang}' for <#{node.alcn}>" }
|
36
36
|
template_node = default_template(node.parent, lang)
|
37
37
|
if template_node == node && !node.parent.is_root?
|
38
38
|
template_node = default_template(node.parent.parent, lang)
|
@@ -19,26 +19,25 @@ module Webgen::SourceHandler
|
|
19
19
|
@path_data = {}
|
20
20
|
end
|
21
21
|
|
22
|
-
# Create all virtual nodes
|
23
|
-
def create_node(
|
22
|
+
# Create all virtual nodes which are specified in +path+.
|
23
|
+
def create_node(path)
|
24
24
|
nodes = []
|
25
25
|
read_data(path).each do |key, meta_info|
|
26
26
|
cache_data = [key, meta_info.dup]
|
27
27
|
|
28
|
-
key = Webgen::
|
29
|
-
temp_parent = create_directories(
|
28
|
+
key = Webgen::Path.make_absolute(path.parent_path, key) + (key =~ /\/$/ ? '/' : '')
|
29
|
+
temp_parent = create_directories(File.dirname(key), path)
|
30
30
|
|
31
31
|
output_path = meta_info.delete('url') || key
|
32
32
|
output_path = (URI::parse(output_path).absolute? || output_path =~ /^\// ?
|
33
|
-
output_path : File.join(temp_parent.
|
33
|
+
output_path : File.join(temp_parent.alcn, output_path))
|
34
34
|
|
35
35
|
if key =~ /\/$/
|
36
|
-
nodes << create_directory(
|
36
|
+
nodes << create_directory(key, path, meta_info)
|
37
37
|
else
|
38
|
-
nodes += website.blackboard.invoke(:create_nodes,
|
39
|
-
Webgen::Path.new(key, path.source_path), self) do |cn_parent, cn_path|
|
38
|
+
nodes += website.blackboard.invoke(:create_nodes, Webgen::Path.new(key, path.source_path), self) do |cn_path|
|
40
39
|
cn_path.meta_info.update(meta_info)
|
41
|
-
super(
|
40
|
+
super(cn_path, :output_path => output_path) do |n|
|
42
41
|
n.node_info[:sh_virtual_cache_data] = cache_data
|
43
42
|
end
|
44
43
|
end
|
@@ -69,25 +68,28 @@ module Webgen::SourceHandler
|
|
69
68
|
end
|
70
69
|
|
71
70
|
# Create the needed parent directories for a virtual node.
|
72
|
-
def create_directories(
|
73
|
-
|
74
|
-
|
71
|
+
def create_directories(dirname, path)
|
72
|
+
parent = website.tree.root
|
73
|
+
dirname.sub(/^\//, '').split('/').inject('/') do |parent_path, dir|
|
74
|
+
parent_path = File.join(parent_path, dir)
|
75
|
+
parent = create_directory(parent_path, path)
|
75
76
|
end
|
76
77
|
parent
|
77
78
|
end
|
78
79
|
|
79
80
|
# Create a virtual directory if it does not already exist.
|
80
|
-
def create_directory(
|
81
|
+
def create_directory(dir, path, meta_info = nil)
|
81
82
|
dir_handler = website.cache.instance('Webgen::SourceHandler::Directory')
|
82
|
-
website.
|
83
|
+
parent = website.tree.root
|
84
|
+
website.blackboard.invoke(:create_nodes,
|
83
85
|
Webgen::Path.new(File.join(dir, '/'), path.source_path),
|
84
|
-
dir_handler) do |
|
85
|
-
parent = dir_handler.node_exists?(
|
86
|
+
dir_handler) do |temp_path|
|
87
|
+
parent = dir_handler.node_exists?(temp_path)
|
86
88
|
if (parent && (parent.node_info[:src] == path.source_path) && !meta_info.nil?) ||
|
87
89
|
!parent
|
88
90
|
temp_path.meta_info.update(meta_info) if meta_info
|
89
91
|
parent.flag(:reinit) if parent
|
90
|
-
parent = dir_handler.create_node(
|
92
|
+
parent = dir_handler.create_node(temp_path)
|
91
93
|
end
|
92
94
|
parent
|
93
95
|
end
|
data/lib/webgen/tag/base.rb
CHANGED
@@ -21,7 +21,7 @@ require 'webgen/websiteaccess'
|
|
21
21
|
# the actual processing. And the +initialize+ method must not take any parameters!
|
22
22
|
#
|
23
23
|
# Tag classes *can* also choose to not use this module. If they don't use it they have to provide
|
24
|
-
# the following methods: +set_params+, +create_tag_params+, +call+.
|
24
|
+
# the following methods: +set_params+, +create_tag_params+, +create_params_hash+, +call+.
|
25
25
|
#
|
26
26
|
# == Tag parameters
|
27
27
|
#
|
@@ -50,8 +50,8 @@ require 'webgen/websiteaccess'
|
|
50
50
|
#
|
51
51
|
# def call(tag, body, context)
|
52
52
|
# result = param('do_reverse') ? body.reverse : body
|
53
|
-
# result += "Node: " + context.content_node.
|
54
|
-
# result += "Reference node: " + context.ref_node.
|
53
|
+
# result += "Node: " + context.content_node.alcn + " (" + context.content_node['title'] + ")"
|
54
|
+
# result += "Reference node: " + context.ref_node.alcn
|
55
55
|
# result
|
56
56
|
# end
|
57
57
|
#
|
@@ -65,17 +65,44 @@ module Webgen::Tag::Base
|
|
65
65
|
include Webgen::Loggable
|
66
66
|
include Webgen::WebsiteAccess
|
67
67
|
|
68
|
-
#
|
68
|
+
# Create a hash with parameter values extracted from the string +tag_config+.
|
69
|
+
#
|
70
|
+
# Returns the parameter hash and a boolean which is +true+ if any mandatory parameters are
|
71
|
+
# missing.
|
69
72
|
def create_tag_params(tag_config, ref_node)
|
70
73
|
begin
|
71
74
|
config = YAML::load("--- #{tag_config}")
|
72
75
|
rescue ArgumentError => e
|
73
|
-
log(:error) { "Could not parse the tag params '#{tag_config}' in <#{ref_node.
|
76
|
+
log(:error) { "Could not parse the tag params '#{tag_config}' in <#{ref_node.alcn}>: #{e.message}" }
|
74
77
|
config = {}
|
75
78
|
end
|
76
79
|
create_params_hash(config, ref_node)
|
77
80
|
end
|
78
81
|
|
82
|
+
# Create and return the parameter hash from +config+ which needs to be a Hash, a String or +nil+.
|
83
|
+
#
|
84
|
+
# Returns the parameter hash and a boolean which is +true+ if any mandatory parameters are
|
85
|
+
# missing.
|
86
|
+
def create_params_hash(config, node)
|
87
|
+
params = tag_params_list
|
88
|
+
result = case config
|
89
|
+
when Hash then create_from_hash(config, params, node)
|
90
|
+
when String then create_from_string(config, params, node)
|
91
|
+
when NilClass then {}
|
92
|
+
else
|
93
|
+
log(:error) { "Invalid parameter type (#{config.class}) for tag '#{self.class.name}' in <#{node.alcn}>" }
|
94
|
+
{}
|
95
|
+
end
|
96
|
+
|
97
|
+
mandatory_params_missing = false
|
98
|
+
unless params.all? {|k| !website.config.meta_info[k][:mandatory] || result.has_key?(k)}
|
99
|
+
log(:error) { "Not all mandatory parameters for tag '#{self.class.name}' in <#{node.alcn}> set" }
|
100
|
+
mandatory_params_missing = true
|
101
|
+
end
|
102
|
+
|
103
|
+
[result, mandatory_params_missing]
|
104
|
+
end
|
105
|
+
|
79
106
|
# Set the current parameter configuration to +params+.
|
80
107
|
def set_params(params)
|
81
108
|
@params = params
|
@@ -122,25 +149,6 @@ module Webgen::Tag::Base
|
|
122
149
|
website.config.data.keys.select {|key| key =~ regexp}
|
123
150
|
end
|
124
151
|
|
125
|
-
# Create the parameter hash from +config+ which needs to be a Hash, a String or +nil+.
|
126
|
-
def create_params_hash(config, node)
|
127
|
-
params = tag_params_list
|
128
|
-
result = case config
|
129
|
-
when Hash then create_from_hash(config, params, node)
|
130
|
-
when String then create_from_string(config, params, node)
|
131
|
-
when NilClass then {}
|
132
|
-
else
|
133
|
-
log(:error) { "Invalid parameter type (#{config.class}) for tag '#{self.class.name}' in <#{node.absolute_lcn}>" }
|
134
|
-
{}
|
135
|
-
end
|
136
|
-
|
137
|
-
unless params.all? {|k| !website.config.meta_info[k][:mandatory] || result.has_key?(k)}
|
138
|
-
log(:error) { "Not all mandatory parameters for tag '#{self.class.name}' in <#{node.absolute_lcn}> set" }
|
139
|
-
end
|
140
|
-
|
141
|
-
result
|
142
|
-
end
|
143
|
-
|
144
152
|
# Return a valid parameter hash taking values from +config+ which has to be a Hash.
|
145
153
|
def create_from_hash(config, params, node)
|
146
154
|
result = {}
|
@@ -150,7 +158,7 @@ module Webgen::Tag::Base
|
|
150
158
|
elsif params.include?(tag_config_base + '.' + key)
|
151
159
|
result[tag_config_base + '.' + key] = value
|
152
160
|
else
|
153
|
-
log(:warn) { "Invalid parameter '#{key}' for tag '#{self.class.name}' in <#{node.
|
161
|
+
log(:warn) { "Invalid parameter '#{key}' for tag '#{self.class.name}' in <#{node.alcn}>" }
|
154
162
|
end
|
155
163
|
end
|
156
164
|
result
|
@@ -160,7 +168,7 @@ module Webgen::Tag::Base
|
|
160
168
|
def create_from_string(value, params, node)
|
161
169
|
param_name = params.find {|k| website.config.meta_info[k][:mandatory] == 'default'}
|
162
170
|
if param_name.nil?
|
163
|
-
log(:error) { "No default mandatory parameter specified for tag '#{self.class.name}' but set in <#{node.
|
171
|
+
log(:error) { "No default mandatory parameter specified for tag '#{self.class.name}' but set in <#{node.alcn}>"}
|
164
172
|
{}
|
165
173
|
else
|
166
174
|
{param_name => value}
|
@@ -16,10 +16,10 @@ module Webgen::Tag
|
|
16
16
|
# Create the breadcrumb trail.
|
17
17
|
def call(tag, body, context)
|
18
18
|
out = breadcrumb_trail_list(context.content_node)
|
19
|
-
(context.dest_node.node_info[:tag_breadcrumb_trail] ||= {})[[@params.to_a.sort, context.content_node.
|
19
|
+
(context.dest_node.node_info[:tag_breadcrumb_trail] ||= {})[[@params.to_a.sort, context.content_node.alcn]] = out.map {|n| n.alcn}
|
20
20
|
out = out.map {|n| context.dest_node.link_to(n, :lang => context.content_node.lang) }.
|
21
21
|
join(param('tag.breadcrumbtrail.separator'))
|
22
|
-
log(:debug) { "Breadcrumb trail for <#{context.content_node.
|
22
|
+
log(:debug) { "Breadcrumb trail for <#{context.content_node.alcn}>: #{out}" }
|
23
23
|
out
|
24
24
|
end
|
25
25
|
|
@@ -57,7 +57,7 @@ module Webgen::Tag
|
|
57
57
|
list = breadcrumb_trail_list(cn)
|
58
58
|
set_params({})
|
59
59
|
|
60
|
-
if (list.map {|n| n.
|
60
|
+
if (list.map {|n| n.alcn} != cached_list) ||
|
61
61
|
list.any? {|n| (r = n.routing_node(cn.lang)) && r != node && r.meta_info_changed?}
|
62
62
|
node.flag(:dirty)
|
63
63
|
break
|
@@ -12,14 +12,14 @@ module Webgen::Tag
|
|
12
12
|
|
13
13
|
include Webgen::Tag::Base
|
14
14
|
|
15
|
-
BIT_BUCKET = (Config::CONFIG['
|
15
|
+
BIT_BUCKET = (Config::CONFIG['host_os'] =~ /mswin|mingw/ ? "nul" : "/dev/null")
|
16
16
|
|
17
17
|
# Execute the command and return the standard output.
|
18
18
|
def call(tag, body, context)
|
19
19
|
command = param('tag.executecommand.command')
|
20
20
|
output = `#{command} 2> #{BIT_BUCKET}`
|
21
|
-
if
|
22
|
-
raise "Command '#{command}' in <#{context.ref_node.
|
21
|
+
if $?.exitstatus != 0
|
22
|
+
raise "Command '#{command}' in <#{context.ref_node.alcn}> has return value != 0: #{output}"
|
23
23
|
end
|
24
24
|
output = CGI::escapeHTML(output) if param('tag.executecommand.escape_html')
|
25
25
|
[output, param('tag.executecommand.process_output')]
|
data/lib/webgen/tag/langbar.rb
CHANGED
@@ -15,7 +15,7 @@ module Webgen::Tag
|
|
15
15
|
# Return a list of all translations of the content page.
|
16
16
|
def call(tag, body, context)
|
17
17
|
lang_nodes = all_lang_nodes(context.content_node)
|
18
|
-
(context.dest_node.node_info[:tag_langbar_data] ||= {})[context.content_node.
|
18
|
+
(context.dest_node.node_info[:tag_langbar_data] ||= {})[context.content_node.acn] = lang_nodes.map {|n| n.alcn}
|
19
19
|
result = lang_nodes.
|
20
20
|
reject {|n| (context.content_node.lang == n.lang && !param('tag.langbar.show_own_lang'))}.
|
21
21
|
sort {|a, b| a.lang <=> b.lang}.
|
@@ -31,7 +31,7 @@ module Webgen::Tag
|
|
31
31
|
|
32
32
|
# Return all nodes with the same absolute cn as +node+.
|
33
33
|
def all_lang_nodes(node)
|
34
|
-
node.tree.node_access[:acn][node.
|
34
|
+
node.tree.node_access[:acn][node.acn]
|
35
35
|
end
|
36
36
|
|
37
37
|
# Check if the langbar tag for +node+ changed.
|
data/lib/webgen/tag/link.rb
CHANGED
@@ -9,14 +9,14 @@ module Webgen::Tag
|
|
9
9
|
|
10
10
|
# Return a HTML link to the given (A)LCN.
|
11
11
|
def call(tag, body, context)
|
12
|
-
if (dest_node = context.ref_node.resolve(param('tag.link.path'), context.dest_node.lang))
|
13
|
-
context.dest_node.node_info[:used_meta_info_nodes] << dest_node.
|
12
|
+
if (dest_node = context.ref_node.resolve(param('tag.link.path').to_s, context.dest_node.lang))
|
13
|
+
context.dest_node.node_info[:used_meta_info_nodes] << dest_node.alcn
|
14
14
|
context.dest_node.link_to(dest_node, param('tag.link.attr').merge(:lang => context.content_node.lang))
|
15
15
|
else
|
16
16
|
raise ArgumentError, 'Resolving of path failed'
|
17
17
|
end
|
18
18
|
rescue ArgumentError, URI::InvalidURIError => e
|
19
|
-
log(:error) { "Could not link to path '#{param('tag.link.path')}' in <#{context.ref_node.
|
19
|
+
log(:error) { "Could not link to path '#{param('tag.link.path')}' in <#{context.ref_node.alcn}>: #{e.message}" }
|
20
20
|
context.dest_node.flag(:dirty)
|
21
21
|
''
|
22
22
|
end
|
data/lib/webgen/tag/menu.rb
CHANGED
@@ -44,7 +44,7 @@ module Webgen::Tag
|
|
44
44
|
|
45
45
|
# Return the menu tree under the node as nested list of alcn values.
|
46
46
|
def to_lcn_list
|
47
|
-
self.children.inject([]) {|temp, n| temp << n.node.
|
47
|
+
self.children.inject([]) {|temp, n| temp << n.node.alcn; temp += ((t = n.to_lcn_list).empty? ? [] : [t]) }
|
48
48
|
end
|
49
49
|
|
50
50
|
end
|
@@ -57,7 +57,7 @@ module Webgen::Tag
|
|
57
57
|
def call(tag, body, context)
|
58
58
|
tree = specific_menu_tree_for(context.content_node)
|
59
59
|
|
60
|
-
(context.dest_node.node_info[:tag_menu_menus] ||= {})[[@params.to_a.sort, context.content_node.
|
60
|
+
(context.dest_node.node_info[:tag_menu_menus] ||= {})[[@params.to_a.sort, context.content_node.alcn]] = (tree ? tree.to_lcn_list : nil)
|
61
61
|
|
62
62
|
if !tree || tree.children.empty?
|
63
63
|
''
|
data/lib/webgen/tag/metainfo.rb
CHANGED
@@ -15,7 +15,7 @@ module Webgen::Tag
|
|
15
15
|
elsif context.content_node[tag]
|
16
16
|
output = context.content_node[tag].to_s
|
17
17
|
else
|
18
|
-
log(:warn) { "No value for meta info key '#{tag}' in <#{context.ref_node.
|
18
|
+
log(:warn) { "No value for meta info key '#{tag}' in <#{context.ref_node.alcn}> found in <#{context.content_node.alcn}>" }
|
19
19
|
end
|
20
20
|
output
|
21
21
|
end
|
@@ -16,24 +16,13 @@ module Webgen::Tag
|
|
16
16
|
|
17
17
|
# Return the relativized path for the path provided in the tag definition.
|
18
18
|
def call(tag, body, context)
|
19
|
-
|
19
|
+
path = param('tag.relocatable.path')
|
20
20
|
result = ''
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
else
|
27
|
-
result = resolve_path(uri_string, context)
|
28
|
-
end
|
29
|
-
if result.empty?
|
30
|
-
log(:error) { "Could not resolve path '#{uri_string}' in <#{context.ref_node.absolute_lcn}>" }
|
31
|
-
context.dest_node.flag(:dirty)
|
32
|
-
end
|
33
|
-
rescue URI::InvalidURIError => e
|
34
|
-
log(:error) { "Error while parsing path for tag relocatable in <#{context.ref_node.absolute_lcn}>: #{e.message}" }
|
35
|
-
context.dest_node.flag(:dirty)
|
36
|
-
end
|
21
|
+
begin
|
22
|
+
result = (Webgen::Node.url(path, false).absolute? ? path : resolve_path(path, context))
|
23
|
+
rescue URI::InvalidURIError => e
|
24
|
+
log(:error) { "Error while parsing path for tag relocatable in <#{context.ref_node.alcn}>: #{e.message}" }
|
25
|
+
context.dest_node.flag(:dirty)
|
37
26
|
end
|
38
27
|
result
|
39
28
|
end
|
@@ -42,11 +31,18 @@ module Webgen::Tag
|
|
42
31
|
private
|
43
32
|
#######
|
44
33
|
|
45
|
-
# Resolve the path +
|
34
|
+
# Resolve the path +path+ using the reference node and return the correct relative path from the
|
46
35
|
# destination node.
|
47
|
-
def resolve_path(
|
48
|
-
dest_node = context.ref_node.resolve(
|
49
|
-
|
36
|
+
def resolve_path(path, context)
|
37
|
+
dest_node = context.ref_node.resolve(path, context.dest_node.lang)
|
38
|
+
if dest_node
|
39
|
+
context.dest_node.node_info[:used_meta_info_nodes] << dest_node.alcn
|
40
|
+
context.dest_node.route_to(dest_node)
|
41
|
+
else
|
42
|
+
log(:error) { "Could not resolve path '#{path}' in <#{context.ref_node.alcn}>" }
|
43
|
+
context.dest_node.flag(:dirty)
|
44
|
+
''
|
45
|
+
end
|
50
46
|
end
|
51
47
|
|
52
48
|
end
|
data/lib/webgen/tag/tikz.rb
CHANGED
@@ -32,16 +32,15 @@ EOF
|
|
32
32
|
# Create a graphic from the commands in the body of the tag.
|
33
33
|
def call(tag, body, context)
|
34
34
|
path = param('tag.tikz.path')
|
35
|
-
path = Webgen::
|
35
|
+
path = Webgen::Path.make_absolute(context.ref_node.parent.alcn, path)
|
36
36
|
|
37
37
|
mem_handler = website.cache.instance('Webgen::SourceHandler::Memory')
|
38
38
|
src_path = context.ref_node.node_info[:src]
|
39
39
|
parent = website.blackboard.invoke(:create_directories, context.ref_node.tree.root, File.dirname(path), src_path)
|
40
40
|
params = @params
|
41
41
|
|
42
|
-
node = website.blackboard.invoke(:create_nodes,
|
43
|
-
|
44
|
-
mem_handler.create_node(node_parent, node_path, context.ref_node.absolute_lcn) do |pic_node|
|
42
|
+
node = website.blackboard.invoke(:create_nodes, Webgen::Path.new(path, src_path), mem_handler) do |node_path|
|
43
|
+
mem_handler.create_node(node_path, context.ref_node.alcn) do |pic_node|
|
45
44
|
set_params(params)
|
46
45
|
document = ERB.new(LATEX_TEMPLATE).result(binding)
|
47
46
|
pic_path = compile(document, File.extname(path), context)
|
@@ -74,7 +73,7 @@ EOF
|
|
74
73
|
output = `#{cmd_prefix} pdflatex --shell-escape -interaction=batchmode #{File.basename(file.path)}.tex`
|
75
74
|
if $?.exitstatus != 0
|
76
75
|
errors = output.scan(/^!(.*\n.*)/).join("\n")
|
77
|
-
log(:error) { "There was an error creating a TikZ picture in <#{context.ref_node.
|
76
|
+
log(:error) { "There was an error creating a TikZ picture in <#{context.ref_node.alcn}>: #{errors}"}
|
78
77
|
context.dest_node.flag(:dirty)
|
79
78
|
nil
|
80
79
|
else
|
@@ -106,7 +105,7 @@ EOF
|
|
106
105
|
def run_command(cmd, context)
|
107
106
|
output = `#{cmd}`
|
108
107
|
if $?.exitstatus != 0
|
109
|
-
log(:error) { "There was an error running a command for a TikZ picture in <#{context.ref_node.
|
108
|
+
log(:error) { "There was an error running a command for a TikZ picture in <#{context.ref_node.alcn}>: #{output}"}
|
110
109
|
context.dest_node.flag(:dirty)
|
111
110
|
nil
|
112
111
|
else
|
data/lib/webgen/tree.rb
CHANGED
@@ -47,12 +47,12 @@ module Webgen
|
|
47
47
|
|
48
48
|
# A utility method called by Node#initialize. This method should not be used directly!
|
49
49
|
def register_node(node)
|
50
|
-
if @node_access[:alcn].has_key?(node.
|
51
|
-
raise "Can't have two nodes with same absolute lcn: #{node.
|
50
|
+
if @node_access[:alcn].has_key?(node.alcn)
|
51
|
+
raise "Can't have two nodes with same absolute lcn: #{node.alcn}"
|
52
52
|
else
|
53
|
-
@node_access[:alcn][node.
|
53
|
+
@node_access[:alcn][node.alcn] = node
|
54
54
|
end
|
55
|
-
(@node_access[:acn][node.
|
55
|
+
(@node_access[:acn][node.acn] ||= []) << node
|
56
56
|
register_path(node)
|
57
57
|
end
|
58
58
|
|
@@ -78,11 +78,11 @@ module Webgen
|
|
78
78
|
|
79
79
|
website.blackboard.dispatch_msg(:before_node_deleted, n)
|
80
80
|
n.parent.children.delete(n)
|
81
|
-
@node_access[:alcn].delete(n.
|
82
|
-
@node_access[:acn][n.
|
81
|
+
@node_access[:alcn].delete(n.alcn)
|
82
|
+
@node_access[:acn][n.acn].delete(n)
|
83
83
|
@node_access[:path].delete(n.path)
|
84
84
|
|
85
|
-
node_info.delete(n.
|
85
|
+
node_info.delete(n.alcn)
|
86
86
|
end
|
87
87
|
|
88
88
|
end
|