dokkit 0.2.0 → 0.3.0
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/History.txt +4 -0
- data/Manifest.txt +125 -0
- data/README.txt +53 -0
- data/Rakefile +25 -167
- data/bin/dokkit +4 -60
- data/lib/dokkit/app.rb +63 -192
- data/lib/dokkit/builtintask.rb +85 -0
- data/lib/dokkit/cachemanager.rb +61 -0
- data/lib/dokkit/cleantask.rb +51 -0
- data/lib/dokkit/consolelog.rb +42 -0
- data/lib/dokkit/defaults.rb +19 -0
- data/lib/dokkit/document.rb +221 -0
- data/lib/dokkit/dokkitlib.rb +68 -0
- data/lib/dokkit/extension/extension.rb +15 -0
- data/lib/dokkit/extension/filehelper.rb +25 -0
- data/lib/dokkit/fileselection.rb +44 -0
- data/lib/dokkit/filters/all.rb +18 -0
- data/lib/dokkit/filters/base.rb +18 -0
- data/lib/dokkit/filters/deplate.rb +21 -25
- data/lib/dokkit/filters/maruku.rb +23 -0
- data/lib/dokkit/filters/nil.rb +23 -0
- data/lib/dokkit/filters.rb +29 -21
- data/lib/dokkit/logger.rb +73 -0
- data/lib/dokkit/model.rb +34 -0
- data/lib/dokkit/models/{Rakefile.tpl → simpledocument/model/Rakefile} +15 -2
- data/lib/dokkit/models/simpledocument/model/doc/configs/simpledocument.yaml +3 -0
- data/lib/dokkit/models/simpledocument/model/doc/layouts/simpledocument.html +9 -0
- data/lib/dokkit/models/simpledocument/model/doc/layouts/simpledocument.latex +8 -0
- data/lib/dokkit/models/simpledocument/model/doc/layouts/simpledocument.text +1 -0
- data/lib/dokkit/models/simpledocument/model/doc/pages/simpledocument.deplate +102 -0
- data/lib/dokkit/models/simpledocument/model/tasks/all.rb +3 -0
- data/lib/dokkit/models/simpledocument/model/tasks/clean.rake +3 -0
- data/lib/dokkit/models/simpledocument/model/tasks/render.rake +8 -0
- data/lib/dokkit/models/simpledocument/model/tasks/setup.rb +9 -0
- data/lib/dokkit/modeltask.rb +83 -0
- data/lib/dokkit/pathhelper.rb +46 -0
- data/lib/dokkit/recursivemerge.rb +59 -0
- data/lib/dokkit/rendertask.rb +101 -0
- data/lib/dokkit/resourcemanager.rb +177 -0
- data/lib/dokkit/taskconfig.rb +39 -0
- data/lib/dokkit/templatetask.rb +37 -0
- data/lib/dokkit.rb +2 -8
- data/spec/app_spec.rb +55 -0
- data/spec/builtintask_spec.rb +114 -0
- data/spec/cachemanager_spec.rb +107 -0
- data/spec/cleantask_spec.rb +72 -0
- data/spec/consolelog_spec.rb +69 -0
- data/{tests/data/projects/simple-document → spec/data/test_build}/Rakefile +8 -8
- data/spec/data/test_build/doc/configs/document_1.yaml +3 -0
- data/spec/data/test_build/doc/configs/required.yaml +3 -0
- data/spec/data/test_build/doc/configs/subdir/document_4.yaml +3 -0
- data/spec/data/test_build/doc/layouts/document_1.html +9 -0
- data/spec/data/test_build/doc/layouts/document_1.latex +8 -0
- data/spec/data/test_build/doc/layouts/document_with_partials.html +9 -0
- data/spec/data/test_build/doc/layouts/layout +0 -0
- data/spec/data/test_build/doc/layouts/layout.html +8 -0
- data/spec/data/test_build/doc/layouts/layout.html.backup +8 -0
- data/spec/data/test_build/doc/layouts/nested.html +3 -0
- data/spec/data/test_build/doc/layouts/partials/partial.html +4 -0
- data/spec/data/test_build/doc/pages/COMMON.yaml +6 -0
- data/spec/data/test_build/doc/pages/document_1 +20 -0
- data/spec/data/test_build/doc/pages/document_1.dep +4 -0
- data/spec/data/test_build/doc/pages/document_1.yaml +11 -0
- data/spec/data/test_build/doc/pages/document_2 +9 -0
- data/spec/data/test_build/doc/pages/document_2.dep +0 -0
- data/spec/data/test_build/doc/pages/document_2.yaml +6 -0
- data/spec/data/test_build/doc/pages/document_3 +13 -0
- data/spec/data/test_build/doc/pages/document_5.exclude +0 -0
- data/spec/data/test_build/doc/pages/document_7 +4 -0
- data/spec/data/test_build/doc/pages/document_7.yaml +5 -0
- data/spec/data/test_build/doc/pages/document_extended +1 -0
- data/spec/data/test_build/doc/pages/document_nested +6 -0
- data/spec/data/test_build/doc/pages/document_nested.yaml +5 -0
- data/spec/data/test_build/doc/pages/document_nolayout.ext +3 -0
- data/spec/data/test_build/doc/pages/document_nolayout.yaml +2 -0
- data/spec/data/test_build/doc/pages/document_with_partials +3 -0
- data/spec/data/test_build/doc/pages/document_with_partials.yaml +2 -0
- data/spec/data/test_build/doc/pages/partials/COMMON.yaml +5 -0
- data/spec/data/test_build/doc/pages/partials/circular_partial +2 -0
- data/spec/data/test_build/doc/pages/partials/circular_partial.yaml +3 -0
- data/spec/data/test_build/doc/pages/partials/partial +2 -0
- data/spec/data/test_build/doc/pages/subdir/COMMON.yaml +2 -0
- data/spec/data/test_build/doc/pages/subdir/document_4 +11 -0
- data/spec/data/test_build/doc/pages/subdir/subdir/COMMON.yaml +2 -0
- data/spec/data/test_build/doc/pages/subdir/subdir/document_6 +3 -0
- data/spec/data/test_build/tasks/all.rb +3 -0
- data/spec/data/test_build/tasks/clean.rake +3 -0
- data/spec/data/test_build/tasks/render.rake +8 -0
- data/spec/data/test_build/tasks/setup.rb +9 -0
- data/spec/data/test_build/tasks/template.rake +3 -0
- data/spec/data/test_build/templates/layouts/layout +0 -0
- data/spec/data/test_build/templates/pages/template +0 -0
- data/spec/document_spec.rb +321 -0
- data/spec/dokkitlib_spec.rb +63 -0
- data/spec/filehelper_spec.rb +34 -0
- data/spec/fileselection_spec.rb +101 -0
- data/spec/filter_base_spec.rb +29 -0
- data/spec/filter_deplate_spec.rb +48 -0
- data/spec/filter_maruku_spec.rb +29 -0
- data/spec/filter_nil_spec.rb +30 -0
- data/spec/filters_spec.rb +37 -0
- data/spec/logger_spec.rb +150 -0
- data/spec/model_spec.rb +45 -0
- data/spec/pathhelper_spec.rb +62 -0
- data/spec/recursivemerge_spec.rb +91 -0
- data/spec/rendertask_spec.rb +374 -0
- data/spec/spec_helper.rb +61 -0
- data/spec/taskconfig_spec.rb +45 -0
- data/spec/templatetask_spec.rb +72 -0
- data/tasks/annotations.rake +30 -0
- data/tasks/doc.rake +49 -0
- data/tasks/gem.rake +89 -0
- data/tasks/manifest.rake +41 -0
- data/tasks/rubyforge.rake +57 -0
- data/tasks/setup.rb +151 -0
- data/tasks/spec.rake +40 -0
- data/tasks/svn.rake +44 -0
- data/tasks/test.rake +40 -0
- metadata +188 -161
- data/CHANGES +0 -26
- data/LICENSE +0 -674
- data/README +0 -32
- data/lib/dokkit/#render_task_factory.rb# +0 -94
- data/lib/dokkit/dokkittasks.rb +0 -99
- data/lib/dokkit/hash.rb +0 -41
- data/lib/dokkit/models/share/builtin.rf +0 -28
- data/lib/dokkit/page.rb +0 -195
- data/lib/dokkit/render_task_factory.rb +0 -91
- data/tests/data/output/simple_document/README +0 -57
- data/tests/data/output/simple_document/Rakefile +0 -7
- data/tests/data/output/simple_document/doc/config/simple_document.yaml +0 -5
- data/tests/data/output/simple_document/doc/pages/simple_document.dpl +0 -12
- data/tests/data/output/website_project/README +0 -49
- data/tests/data/output/website_project/Rakefile +0 -82
- data/tests/data/output/website_project/doc/layouts/normal.thtml +0 -38
- data/tests/data/output/website_project/doc/pages/COMMON.rb +0 -9
- data/tests/data/output/website_project/doc/pages/deplate.dplhtml +0 -9
- data/tests/data/output/website_project/doc/pages/index.rb +0 -10
- data/tests/data/output/website_project/doc/pages/index.thtml +0 -12
- data/tests/data/output/website_project/doc/res/images/rote-tiny.png +0 -0
- data/tests/data/projects/simple-document/README +0 -57
- data/tests/data/projects/simple-document/doc/config/author.yaml +0 -4
- data/tests/data/projects/simple-document/doc/config/model.yaml +0 -18
- data/tests/data/projects/simple-document/doc/config/simple_document.yaml +0 -6
- data/tests/data/projects/simple-document/doc/layouts/another_simple_document.html +0 -8
- data/tests/data/projects/simple-document/doc/layouts/another_simple_document.tex +0 -10
- data/tests/data/projects/simple-document/doc/layouts/layout_with_custom_name.html +0 -8
- data/tests/data/projects/simple-document/doc/layouts/semantic.cache +0 -23
- data/tests/data/projects/simple-document/doc/pages/COMMON.yaml +0 -23
- data/tests/data/projects/simple-document/doc/pages/another_simple_document.dpl +0 -12
- data/tests/data/projects/simple-document/doc/pages/simple_document.dpl +0 -12
- data/tests/data/projects/simple-document/doc/pages/simple_document_without_layout.dpl +0 -12
- data/tests/data/projects/simple-document/doc/pages/subdir/COMMON.yaml +0 -4
- data/tests/data/projects/simple-document/doc/pages/subdir/simple_document_in_subdir.dpl +0 -12
- data/tests/data/projects/simple-document/doc/pages/subdir/simple_document_in_subdir.yaml +0 -3
- data/tests/data/projects/simple-document/doc/pages/subdir/subdir/COMMON.yaml +0 -2
- data/tests/data/projects/simple-document/doc/pages/subdir/subdir/another_simple_document_in_subdir.dpl +0 -12
- data/tests/data/projects/simple-document/doc/pages/yet_another_simple_document.dpl +0 -12
- data/tests/data/projects/simple-document/doc/pages/yet_another_simple_document.yaml +0 -8
- data/tests/gem_tests.rb +0 -4
- data/tests/spec_page.rb +0 -25
- data/tests/test.rb +0 -2
- data/tests/test_application.rb +0 -40
- data/tests/test_builtin_tasks.rb +0 -37
- data/tests/test_config.rb +0 -108
- data/tests/test_core.rb +0 -12
- data/tests/test_dokkit_commandline.rb +0 -18
- data/tests/test_exception.rb +0 -7
- data/tests/test_filters.rb +0 -46
- data/tests/test_layout.rb +0 -64
- data/tests/test_options.rb +0 -33
- data/tests/test_project_tasks.rb +0 -48
- data/tests/test_recursive_merge.rb +0 -42
- data/tests/test_task_factory.rb +0 -38
- /data/{CONTRIBUTORS → lib/dokkit/models/simpledocument/model/doc/data/css/style.css} +0 -0
- /data/{DONE → spec/data/test_build/doc/data/resource} +0 -0
- /data/{TODO → spec/data/test_build/doc/data/resource.exclude} +0 -0
- /data/{tests/pages/test.dpltex → spec/data/test_build/doc/data/subdir/resource.insubdir} +0 -0
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
#
|
|
2
|
+
# File 'document.rb' created on 13 gen 2008 at 18:49:57.
|
|
3
|
+
#
|
|
4
|
+
# See 'dokkit.rb' or +LICENSE+ for licence information.
|
|
5
|
+
#
|
|
6
|
+
# (C) 2006, 2007 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
require 'ostruct'
|
|
10
|
+
require 'yaml'
|
|
11
|
+
require 'erb'
|
|
12
|
+
require 'dokkit/logger'
|
|
13
|
+
require 'dokkit/consolelog'
|
|
14
|
+
require 'dokkit/pathhelper'
|
|
15
|
+
require 'dokkit/cachemanager'
|
|
16
|
+
require 'dokkit/recursivemerge'
|
|
17
|
+
require 'dokkit/pathhelper'
|
|
18
|
+
require 'dokkit/filters/all'
|
|
19
|
+
require 'dokkit/extension/filehelper'
|
|
20
|
+
|
|
21
|
+
module Dokkit
|
|
22
|
+
class Document
|
|
23
|
+
DEFAULT_FILTER_CHAIN = {
|
|
24
|
+
'html' => ['deplate-html'],
|
|
25
|
+
'latex' => ['deplate-latex'],
|
|
26
|
+
'text' => ['deplate-text'],
|
|
27
|
+
'nil' => ['nil']
|
|
28
|
+
}
|
|
29
|
+
include Extension::FileHelper, PathHelper
|
|
30
|
+
attr_reader :document, :taskconfig
|
|
31
|
+
attr_reader :document_basename
|
|
32
|
+
attr_reader :configs, :targets, :layouts
|
|
33
|
+
attr_reader :filter_chain
|
|
34
|
+
attr_reader :configuration
|
|
35
|
+
attr_reader :source_text
|
|
36
|
+
attr_reader :prerequisites
|
|
37
|
+
attr_reader :logger
|
|
38
|
+
def initialize(document, taskconfig, rendered = [], &blk)
|
|
39
|
+
@logger = Log::ConsoleLog.consolelog
|
|
40
|
+
@document, @taskconfig, @rendered = document, taskconfig, rendered
|
|
41
|
+
@document_basename = File.basename(document)
|
|
42
|
+
@stripped_document = strip_ext(@document)
|
|
43
|
+
@layouts, @targets, @prerequisites, @filter_chain = { }, { }, { }, { }
|
|
44
|
+
@configs = []
|
|
45
|
+
@configuration = Hash.new do |h, k|
|
|
46
|
+
@logger.warn("Configuration key '#{k}' not defined in '#{targets[@format]}'!")
|
|
47
|
+
h[k] = "'#{k}' not defined!"
|
|
48
|
+
end
|
|
49
|
+
@configuration.extend ConfigHash
|
|
50
|
+
@source_text = read_source
|
|
51
|
+
@cache = CacheManager.instance
|
|
52
|
+
|
|
53
|
+
yield self if block_given?
|
|
54
|
+
|
|
55
|
+
collect_resources
|
|
56
|
+
end
|
|
57
|
+
def render(format)
|
|
58
|
+
@format = format
|
|
59
|
+
unless @source_text.nil?
|
|
60
|
+
erb = ERB.new(@source_text)
|
|
61
|
+
erb.filename = @document
|
|
62
|
+
@content_for_layout = apply_filters(erb.result(binding), format)
|
|
63
|
+
end
|
|
64
|
+
unless @layouts[format].empty?
|
|
65
|
+
@layouts[format].each do |layout_fn|
|
|
66
|
+
erb = ERB.new(File.read(layout_fn))
|
|
67
|
+
erb.filename = layout_fn
|
|
68
|
+
@content_for_layout = erb.result(binding)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
@content_for_layout
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
private
|
|
75
|
+
|
|
76
|
+
def extract_meta!(text)
|
|
77
|
+
meta_regexp = /\A-{3}$(.*?)-{3}$/m
|
|
78
|
+
meta = text.scan(meta_regexp).to_s
|
|
79
|
+
text.sub!(meta_regexp, '')
|
|
80
|
+
return meta
|
|
81
|
+
end
|
|
82
|
+
def render_partial(document_fn, format = @format, &blk)
|
|
83
|
+
unless @rendered.include?(document)
|
|
84
|
+
result = Document.new(File.join(@taskconfig.document_dir, document_fn), @taskconfig, @rendered << document, &blk).render(format)
|
|
85
|
+
@cache.add_dependency(targets[format], File.join(@taskconfig.document_dir, document_fn))
|
|
86
|
+
@rendered.clear
|
|
87
|
+
else
|
|
88
|
+
@logger.error("Circular dependency detected in '#{document}', aborting.")
|
|
89
|
+
end
|
|
90
|
+
result
|
|
91
|
+
end
|
|
92
|
+
def collect_resources
|
|
93
|
+
collect_configs
|
|
94
|
+
collect_targets
|
|
95
|
+
collect_layouts
|
|
96
|
+
collect_prerequisites
|
|
97
|
+
end
|
|
98
|
+
def collect_prerequisites
|
|
99
|
+
@targets.each_key do |format|
|
|
100
|
+
@prerequisites[format] = []
|
|
101
|
+
@prerequisites[format] << document
|
|
102
|
+
@prerequisites[format].concat @configs
|
|
103
|
+
@prerequisites[format].concat(@layouts[format]) if @layouts[format]
|
|
104
|
+
@prerequisites
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
def collect_configs
|
|
108
|
+
@configs << (config_fn_helper(@stripped_document, @taskconfig)) if File.exists?(config_fn_helper(@stripped_document, @taskconfig))
|
|
109
|
+
@configs.concat(resolve_common_configs(File.dirname(@document)))
|
|
110
|
+
@configs << (@stripped_document + '.yaml') if File.exists?(@stripped_document + '.yaml')
|
|
111
|
+
|
|
112
|
+
meta_configuration = YAML::load(extract_meta!(@source_text))
|
|
113
|
+
if meta_configuration
|
|
114
|
+
if meta_configuration.has_key?('config')
|
|
115
|
+
(@configs << get_config_fns(meta_configuration['config'])).flatten!
|
|
116
|
+
meta_configuration.delete('config')
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
@configs.each do |config_fn|
|
|
121
|
+
@configuration.recursive_merge!(YAML::load(File.open(config_fn)))
|
|
122
|
+
if @configuration.has_key?('config')
|
|
123
|
+
(@configs << get_config_fns(@configuration['config'])).flatten!
|
|
124
|
+
@configuration.delete('config')
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
@configuration.recursive_merge!(meta_configuration) if meta_configuration
|
|
129
|
+
end
|
|
130
|
+
def resolve_common_configs(dir, arr = [])
|
|
131
|
+
parent = File.expand_path(File.join(dir, '..'))
|
|
132
|
+
resolve_common_configs(parent, arr) unless parent == dir # at root
|
|
133
|
+
fn = File.join(dir,'COMMON.yaml')
|
|
134
|
+
arr << fn if (File.exists?(fn) && File.readable?(fn))
|
|
135
|
+
arr
|
|
136
|
+
end
|
|
137
|
+
def build_config_fn(fn)
|
|
138
|
+
result_fn = fn
|
|
139
|
+
if File.extname(fn).empty?
|
|
140
|
+
result_fn += '.yaml'
|
|
141
|
+
end
|
|
142
|
+
result_fn = File.join(@taskconfig.config_dir, result_fn)
|
|
143
|
+
end
|
|
144
|
+
def get_config_fns(configuration)
|
|
145
|
+
if configuration.is_a?(String)
|
|
146
|
+
result = build_config_fn(configuration)
|
|
147
|
+
elsif configuration.is_a?(Array)
|
|
148
|
+
result = configuration.collect do |fn|
|
|
149
|
+
fn = build_config_fn(fn)
|
|
150
|
+
end
|
|
151
|
+
else
|
|
152
|
+
@logger.fail('Invalid config file value.')
|
|
153
|
+
end
|
|
154
|
+
result
|
|
155
|
+
end
|
|
156
|
+
def collect_targets
|
|
157
|
+
if @configuration.has_key?('render_in')
|
|
158
|
+
@configuration['render_in'].each do |fmt|
|
|
159
|
+
if fmt.class != Hash
|
|
160
|
+
@targets[fmt] = output_fn_helper(@stripped_document, ".#{fmt}", @taskconfig)
|
|
161
|
+
@filter_chain[fmt] = DEFAULT_FILTER_CHAIN[fmt]
|
|
162
|
+
else
|
|
163
|
+
fmt.each do |format, configuration|
|
|
164
|
+
if(configuration.empty?)
|
|
165
|
+
@targets[format] = output_fn_helper(@stripped_document, ".#{format}")
|
|
166
|
+
@filter_chain[fmt] = DEFAULT_FILTER_CHAIN[fmt]
|
|
167
|
+
else
|
|
168
|
+
output, ext = @taskconfig.output_dir, ".#{format}"
|
|
169
|
+
ext = configuration['ext'] if configuration.has_key?('ext')
|
|
170
|
+
output = File.join(@taskconfig.output_dir, configuration['output']) if configuration.has_key?('output')
|
|
171
|
+
@targets[format] = File.join(output, strip_ext(@document_basename) + ext)
|
|
172
|
+
if configuration.has_key?('filters')
|
|
173
|
+
@filter_chain[format] = configuration['filters']
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
else
|
|
180
|
+
@targets['html'] = output_fn_helper(@stripped_document, '.html', @taskconfig)
|
|
181
|
+
@filter_chain['html'] = DEFAULT_FILTER_CHAIN['html']
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
def collect_layouts
|
|
185
|
+
@targets.each do |format, target|
|
|
186
|
+
layout_fn = []
|
|
187
|
+
layout_ext = File.extname(target)
|
|
188
|
+
layout_fn << (layout_fn_helper(@stripped_document, layout_ext, @taskconfig)) if File.exists?(layout_fn_helper(@stripped_document, layout_ext, @taskconfig))
|
|
189
|
+
layout_fn << (@stripped_document + layout_ext) if File.exists?(@stripped_document + layout_ext)
|
|
190
|
+
if @configuration.has_key?('layout')
|
|
191
|
+
@configuration['layout'].each do |layout|
|
|
192
|
+
config_layout_fn = strip_ext(layout)
|
|
193
|
+
layout_fn << File.join(@taskconfig.layout_dir, config_layout_fn + layout_ext) if File.exists?(File.join(@taskconfig.layout_dir, config_layout_fn + layout_ext))
|
|
194
|
+
layout_fn << (config_layout_fn + layout_ext) if File.exists?(config_layout_fn + layout_ext)
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
@logger.warn("Layout not found for '#{target}'!") if layout_fn.empty?
|
|
198
|
+
@layouts[format] = layout_fn.uniq.reverse
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
def read_source
|
|
202
|
+
File.read(document)
|
|
203
|
+
end
|
|
204
|
+
def apply_filters(text, target)
|
|
205
|
+
filters = []
|
|
206
|
+
chain = @filter_chain[target]
|
|
207
|
+
if chain
|
|
208
|
+
@filter_chain[target].each do |name|
|
|
209
|
+
begin
|
|
210
|
+
filters << Filters[name]
|
|
211
|
+
rescue
|
|
212
|
+
@logger.warn("Filter '#{name}' not found, ignored.")
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
filters.inject(text) { |s, f| f.filter(s) }
|
|
216
|
+
else
|
|
217
|
+
@logger.error("Don't know how to render in '#{target}' format!")
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#
|
|
2
|
+
# File 'dokkitlib.rb' created on 18 feb 2008 at 17:54:20.
|
|
3
|
+
#
|
|
4
|
+
# See 'dokkit.rb' or +LICENSE+ for licence information.
|
|
5
|
+
#
|
|
6
|
+
# (C) 2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
require 'ostruct'
|
|
10
|
+
require 'rake'
|
|
11
|
+
require 'rake/tasklib'
|
|
12
|
+
require 'dokkit/defaults'
|
|
13
|
+
require 'dokkit/taskconfig'
|
|
14
|
+
require 'dokkit/pathhelper'
|
|
15
|
+
require 'dokkit/consolelog'
|
|
16
|
+
|
|
17
|
+
module Dokkit
|
|
18
|
+
class DokkitLib < Rake::TaskLib
|
|
19
|
+
include PathHelper, Rake::TaskManager
|
|
20
|
+
attr_reader :ns
|
|
21
|
+
attr_reader :logger
|
|
22
|
+
attr_reader :model
|
|
23
|
+
attr_accessor :config
|
|
24
|
+
def initialize(model, namespace = 'dokkit', opts = { })
|
|
25
|
+
@ns = namespace
|
|
26
|
+
@model = model
|
|
27
|
+
@config = model.config
|
|
28
|
+
@logger = Log::ConsoleLog.consolelog
|
|
29
|
+
|
|
30
|
+
pre_block_configuration
|
|
31
|
+
|
|
32
|
+
yield self if block_given?
|
|
33
|
+
|
|
34
|
+
post_block_configuration
|
|
35
|
+
|
|
36
|
+
check_directories if opts[:check_dir]
|
|
37
|
+
define_dokkit_tasks
|
|
38
|
+
end
|
|
39
|
+
def dokkit_task(*args, &block)
|
|
40
|
+
task_name, arg_names, needs = resolve_args(args.dup)
|
|
41
|
+
task(*args, &block) unless Rake::Task.task_defined?("#{@ns}:#{task_name}")
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
private
|
|
45
|
+
|
|
46
|
+
def check_directories
|
|
47
|
+
unless @config.directories.empty?
|
|
48
|
+
@config.directories.each_value do |dir|
|
|
49
|
+
@logger.error("Directory '#{dir}' does not exist") unless (dir =~ /output|cache/ || File.exists?(dir))
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
def pre_block_configuration
|
|
54
|
+
nil
|
|
55
|
+
end
|
|
56
|
+
def post_block_configuration
|
|
57
|
+
nil
|
|
58
|
+
end
|
|
59
|
+
def define_dokkit_tasks
|
|
60
|
+
namespace @ns do
|
|
61
|
+
private_methods.select { |meth| meth =~ /define_dokkit_/ and not meth =~ /define_dokkit_tasks/ }.each do |method|
|
|
62
|
+
self.send(method)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#
|
|
2
|
+
# File 'extension.rb' created on 28 feb 2008 at 16:39:38.
|
|
3
|
+
#
|
|
4
|
+
# See 'dokkit.rb' or +LICENSE+ for licence information.
|
|
5
|
+
#
|
|
6
|
+
# (C) 2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
require 'dokkit'
|
|
10
|
+
|
|
11
|
+
module Dokkit
|
|
12
|
+
module Extension
|
|
13
|
+
# space left blank
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#
|
|
2
|
+
# File 'filehelper.rb' created on 28 feb 2008 at 16:40:57.
|
|
3
|
+
#
|
|
4
|
+
# See 'dokkit.rb' or +LICENSE+ for licence information.
|
|
5
|
+
#
|
|
6
|
+
# (C) 2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
require 'dokkit/extension/extension'
|
|
10
|
+
|
|
11
|
+
module Dokkit
|
|
12
|
+
module Extension
|
|
13
|
+
module FileHelper
|
|
14
|
+
def relative(href)
|
|
15
|
+
thr = href
|
|
16
|
+
if thr.is_a?(String) && href[0,1] == '/'
|
|
17
|
+
dtfn = File.dirname(document[/^#{taskconfig.document_dir}\/(.*)/,1]) + '/'
|
|
18
|
+
count = dtfn == './' ? 0 : dtfn.split('/').length
|
|
19
|
+
thr = ('../' * count) + href[1..href.length]
|
|
20
|
+
end
|
|
21
|
+
thr
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#
|
|
2
|
+
# File 'fileselection.rb' created on 07 feb 2008 at 15:52:42.
|
|
3
|
+
#
|
|
4
|
+
# See 'dokkit.rb' or +LICENSE+ for licence information.
|
|
5
|
+
#
|
|
6
|
+
# (C) 2006, 2007 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
require 'rake'
|
|
10
|
+
|
|
11
|
+
module Dokkit
|
|
12
|
+
module ExtMapping
|
|
13
|
+
attr_reader :extmapping
|
|
14
|
+
def extend(regexp=/.*/, &blk)
|
|
15
|
+
@extmapping ||= { }
|
|
16
|
+
(files.select { |file| file =~ regexp }).each do |file|
|
|
17
|
+
@extmapping[file] = blk
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
class FileSelection
|
|
22
|
+
attr_accessor :base_dir
|
|
23
|
+
alias :dir :base_dir
|
|
24
|
+
alias :dir= :base_dir=
|
|
25
|
+
def initialize(base_dir = '.')
|
|
26
|
+
@base_dir = base_dir
|
|
27
|
+
@includes = []
|
|
28
|
+
@excludes = []
|
|
29
|
+
yield self if block_given?
|
|
30
|
+
end
|
|
31
|
+
def include(*patterns)
|
|
32
|
+
patterns.each { |pattern| @includes << pattern }
|
|
33
|
+
end
|
|
34
|
+
def exclude(*patterns)
|
|
35
|
+
patterns.each { |pattern| @excludes << pattern }
|
|
36
|
+
end
|
|
37
|
+
def files
|
|
38
|
+
FileList.new(@base_dir) do |fl|
|
|
39
|
+
fl.exclude *@excludes.collect { |exclude| File.join(@base_dir, exclude) } unless @excludes.empty?
|
|
40
|
+
fl.include *@includes.collect { |include| File.join(@base_dir, include) } unless @includes.empty?
|
|
41
|
+
end.uniq.select { |fn| not File.directory?(fn) }
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#
|
|
2
|
+
# File 'all_filters.rb' created on 18 feb 2008 at 17:13:12.
|
|
3
|
+
#
|
|
4
|
+
# See 'dokkit.rb' or +LICENSE+ for licence information.
|
|
5
|
+
#
|
|
6
|
+
# (C) 2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
require 'dokkit/filters/base'
|
|
10
|
+
|
|
11
|
+
Dir[File.join(File.dirname(__FILE__), '*.rb')].each do |fn|
|
|
12
|
+
begin
|
|
13
|
+
require fn unless fn =~ /[\\\/]base.rb$/ or fn == 'all.rb'
|
|
14
|
+
rescue LoadError
|
|
15
|
+
nil
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#
|
|
2
|
+
# File 'base.rb' created on 15 feb 2008 at 22:56:37.
|
|
3
|
+
#
|
|
4
|
+
# See 'dokkit.rb' or +LICENSE+ for licence information.
|
|
5
|
+
#
|
|
6
|
+
# (C) 2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
module Dokkit
|
|
10
|
+
module Filters
|
|
11
|
+
class Base
|
|
12
|
+
def filter(text)
|
|
13
|
+
nil
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
@@ -6,38 +6,34 @@
|
|
|
6
6
|
|
|
7
7
|
require 'deplate/converter'
|
|
8
8
|
require 'deplate/core'
|
|
9
|
-
require '
|
|
9
|
+
require 'dokkit/filters'
|
|
10
|
+
require 'dokkit/filters/base'
|
|
10
11
|
require 'dokkit/deplate/fmt/latex-notemplate'
|
|
11
12
|
require 'dokkit/deplate/fmt/html-notemplate'
|
|
12
13
|
|
|
13
14
|
module Dokkit
|
|
14
15
|
module Filters
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
#####
|
|
22
|
-
## Page filter that converts emacs-wiki formatting in various formats (tex, html,
|
|
23
|
-
## docbook, plain text, etc.) using deplate.
|
|
24
|
-
##
|
|
25
|
-
class Deplate < Rote::Filters::TextFilter
|
|
26
|
-
|
|
27
|
-
Filters.declare_formatters
|
|
28
|
-
|
|
29
|
-
# Create a new filter instance. If a block is defined returns a Deplate::Converter instance.
|
|
30
|
-
# You can supply options directly to the instance. See deplate docs for a full list
|
|
31
|
-
# of options.
|
|
32
|
-
def initialize(formatter)
|
|
33
|
-
super()
|
|
34
|
-
@deplate = ::Deplate::Converter.new(formatter) { |instance| yield(instance) if block_given? }
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def handler(text,page)
|
|
38
|
-
@deplate.convert_string(text)
|
|
16
|
+
class DeplateHTML < Base
|
|
17
|
+
def filter(text)
|
|
18
|
+
::Deplate::Core.declare_formatter(::Deplate::Formatter::HTMLNoTemplate,'html-notemplate')
|
|
19
|
+
::Deplate::Converter.new('html-notemplate').convert_string(text)
|
|
39
20
|
end
|
|
40
21
|
end
|
|
22
|
+
class DeplateLatex < Base
|
|
23
|
+
def filter(text)
|
|
24
|
+
::Deplate::Core.declare_formatter(::Deplate::Formatter::LatexNoTemplate,'latex-notemplate')
|
|
25
|
+
::Deplate::Converter.new('latex-notemplate').convert_string(text)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
class DeplateText < Base
|
|
29
|
+
def filter(text)
|
|
30
|
+
::Deplate::Converter.new('plain').convert_string(text)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
41
33
|
end
|
|
42
34
|
end
|
|
43
35
|
|
|
36
|
+
Dokkit::Filters.register('deplate-html') { Dokkit::Filters::DeplateHTML.new }
|
|
37
|
+
Dokkit::Filters.register('deplate-latex') { Dokkit::Filters::DeplateLatex.new }
|
|
38
|
+
Dokkit::Filters.register('deplate-text') { Dokkit::Filters::DeplateText.new }
|
|
39
|
+
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#
|
|
2
|
+
# File 'maruku.rb' created on 15 feb 2008 at 22:58:04.
|
|
3
|
+
#
|
|
4
|
+
# See 'dokkit.rb' or +LICENSE+ for licence information.
|
|
5
|
+
#
|
|
6
|
+
# (C) 2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
require 'dokkit/filters/base'
|
|
10
|
+
require 'dokkit/filters'
|
|
11
|
+
require 'maruku'
|
|
12
|
+
|
|
13
|
+
module Dokkit
|
|
14
|
+
module Filters
|
|
15
|
+
class MarukuHTML < Base
|
|
16
|
+
def filter(text)
|
|
17
|
+
Maruku.new(text).to_html
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
Dokkit::Filters.register('maruku-html') { Dokkit::Filters::MarukuHTML.new }
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#
|
|
2
|
+
# File 'nil.rb' created on 18 mar 2008 at 12:41:27.
|
|
3
|
+
#
|
|
4
|
+
# See 'dokkit.rb' or +LICENSE+ for licence information.
|
|
5
|
+
#
|
|
6
|
+
# (C) 2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
require 'dokkit/filters/base'
|
|
10
|
+
require 'dokkit/filters'
|
|
11
|
+
|
|
12
|
+
module Dokkit
|
|
13
|
+
module Filters
|
|
14
|
+
class Nil < Base
|
|
15
|
+
def filter(text)
|
|
16
|
+
text
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
Dokkit::Filters.register('nil') { Dokkit::Filters::Nil.new }
|
|
23
|
+
|
data/lib/dokkit/filters.rb
CHANGED
|
@@ -1,26 +1,34 @@
|
|
|
1
|
-
|
|
2
|
-
#
|
|
3
|
-
# (c)2005, 2006 Ross Bamford (and contributors)
|
|
1
|
+
#
|
|
2
|
+
# File 'filters.rb' created on 18 feb 2008 at 14:25:19.
|
|
4
3
|
#
|
|
5
|
-
# See '
|
|
6
|
-
#
|
|
7
|
-
|
|
4
|
+
# See 'dokkit.rb' or +LICENSE+ for licence information.
|
|
5
|
+
#
|
|
6
|
+
# (C) 2006, 2007 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
|
|
7
|
+
#
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
require '
|
|
11
|
-
|
|
12
|
-
# This now requires conservatively, ignoring any filters that
|
|
13
|
-
# throw a LoadError. This allows a simple 'require rote/filters' to
|
|
14
|
-
# be used to load all filters _for which dependencies are
|
|
15
|
-
# available_.
|
|
16
|
-
Dir[File.join(File.dirname(__FILE__), 'filters/*.rb')].each do |fn|
|
|
17
|
-
begin
|
|
18
|
-
require fn unless fn =~ /[\\\/]base.rb$/
|
|
19
|
-
rescue LoadError
|
|
20
|
-
|
|
21
|
-
# ignore, different filters require different library
|
|
22
|
-
# support.
|
|
9
|
+
require 'dokkit'
|
|
10
|
+
require 'dokkit/consolelog'
|
|
23
11
|
|
|
12
|
+
module Dokkit
|
|
13
|
+
module Filters
|
|
14
|
+
@filters = { }
|
|
15
|
+
@logger = Log::ConsoleLog.consolelog
|
|
16
|
+
def Filters.register(name, &blk)
|
|
17
|
+
@filters[name] = blk
|
|
18
|
+
end
|
|
19
|
+
def Filters.[](name)
|
|
20
|
+
filter = @filters[name]
|
|
21
|
+
if filter
|
|
22
|
+
@filters[name].call
|
|
23
|
+
else
|
|
24
|
+
@logger.error("Filter '#{name}' is not defined!")
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
def Filters.filters
|
|
28
|
+
return @filters
|
|
29
|
+
end
|
|
30
|
+
def Filters.clean
|
|
31
|
+
@filters = { }
|
|
32
|
+
end
|
|
24
33
|
end
|
|
25
34
|
end
|
|
26
|
-
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
#
|
|
2
|
+
# File 'logger.rb' created on 23 feb 2008 at 15:46:54.
|
|
3
|
+
#
|
|
4
|
+
# See 'dokkit.rb' or +LICENSE+ for licence information.
|
|
5
|
+
#
|
|
6
|
+
# (C) 2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
#require 'dokkit'
|
|
10
|
+
|
|
11
|
+
module Dokkit
|
|
12
|
+
module Log
|
|
13
|
+
ERROR = 0
|
|
14
|
+
WARNING = 1
|
|
15
|
+
INFO = 2
|
|
16
|
+
DEBUG = 3
|
|
17
|
+
class LogMessage
|
|
18
|
+
attr_reader :text
|
|
19
|
+
attr_reader :level
|
|
20
|
+
def initialize(text, level)
|
|
21
|
+
@text, @level = text, level
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
class Logger
|
|
25
|
+
class << self
|
|
26
|
+
def logger
|
|
27
|
+
@logger ||= Logger.new
|
|
28
|
+
end
|
|
29
|
+
def clear
|
|
30
|
+
@logger = nil
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
attr_reader :observers
|
|
34
|
+
attr_reader :last_message
|
|
35
|
+
attr_reader :level
|
|
36
|
+
def initialize
|
|
37
|
+
@observers = []
|
|
38
|
+
@level = INFO
|
|
39
|
+
end
|
|
40
|
+
def level=(new_level)
|
|
41
|
+
new_level = Log::DEBUG if new_level > Log::DEBUG
|
|
42
|
+
new_level = Log::ERROR if new_level < Log::ERROR
|
|
43
|
+
@level = new_level
|
|
44
|
+
end
|
|
45
|
+
def attach(observer)
|
|
46
|
+
(@observers << observer).last
|
|
47
|
+
end
|
|
48
|
+
def detach(observer)
|
|
49
|
+
@observers.delete(observer)
|
|
50
|
+
end
|
|
51
|
+
def notify
|
|
52
|
+
@observers.each { |observer| observer.update }
|
|
53
|
+
end
|
|
54
|
+
def message(message)
|
|
55
|
+
@last_message = message
|
|
56
|
+
notify
|
|
57
|
+
@last_message
|
|
58
|
+
end
|
|
59
|
+
def info(text)
|
|
60
|
+
message({ :text => text, :level => Log::INFO }) if level >= INFO
|
|
61
|
+
end
|
|
62
|
+
def error(text)
|
|
63
|
+
message({ :text => text, :level => ERROR }) if level >= ERROR
|
|
64
|
+
end
|
|
65
|
+
def warn(text)
|
|
66
|
+
message({ :text => text, :level => WARNING }) if level >= WARNING
|
|
67
|
+
end
|
|
68
|
+
def debug(text)
|
|
69
|
+
message({ :text => text, :level => Log::DEBUG }) if level >= DEBUG
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
data/lib/dokkit/model.rb
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#
|
|
2
|
+
# File 'model.rb' created on 10 mar 2008 at 13:39:48.
|
|
3
|
+
#
|
|
4
|
+
# See 'dokkit.rb' or +LICENSE+ for licence information.
|
|
5
|
+
#
|
|
6
|
+
# (C) 2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
|
|
7
|
+
#
|
|
8
|
+
|
|
9
|
+
require 'yaml'
|
|
10
|
+
require 'dokkit/taskconfig'
|
|
11
|
+
require 'dokkit/cachemanager'
|
|
12
|
+
|
|
13
|
+
module Dokkit
|
|
14
|
+
class Model
|
|
15
|
+
class << self
|
|
16
|
+
def init(name = 'model', &blk)
|
|
17
|
+
@model ||= Model.new(name, &blk)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
attr_accessor :config
|
|
21
|
+
attr_reader :name, :cache
|
|
22
|
+
def initialize(name, &blk)
|
|
23
|
+
@name = name
|
|
24
|
+
@config = TaskConfig.new
|
|
25
|
+
|
|
26
|
+
yield self if block_given?
|
|
27
|
+
|
|
28
|
+
@cache = CacheManager.instance
|
|
29
|
+
@cache.init('deps.yaml', @config.cache_dir)
|
|
30
|
+
|
|
31
|
+
self
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|