dokkit 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|