gettalong-webgen 0.5.8.20090507 → 0.5.9.20090620
Sign up to get free protection for your applications and to get access to all the features.
- 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
|