nanoc 1.6.2 → 2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +27 -0
- data/Rakefile +34 -27
- data/bin/nanoc +153 -49
- data/lib/nanoc.rb +15 -33
- data/lib/nanoc/base/auto_compiler.rb +124 -0
- data/lib/nanoc/base/compiler.rb +55 -0
- data/lib/nanoc/base/core_ext/hash.rb +34 -0
- data/lib/nanoc/base/data_source.rb +53 -0
- data/lib/nanoc/base/enhancements.rb +89 -0
- data/lib/nanoc/base/filter.rb +16 -0
- data/lib/nanoc/base/layout_processor.rb +33 -0
- data/lib/nanoc/base/page.rb +155 -0
- data/lib/nanoc/base/page_proxy.rb +31 -0
- data/lib/nanoc/base/plugin.rb +19 -0
- data/lib/nanoc/base/plugin_manager.rb +33 -0
- data/lib/nanoc/base/site.rb +143 -0
- data/lib/nanoc/data_sources/database.rb +259 -0
- data/lib/nanoc/data_sources/filesystem.rb +308 -0
- data/lib/nanoc/data_sources/trivial.rb +145 -0
- data/lib/nanoc/filters/erb.rb +34 -0
- data/lib/nanoc/filters/haml.rb +16 -0
- data/lib/nanoc/filters/markaby.rb +15 -0
- data/lib/nanoc/filters/markdown.rb +13 -0
- data/lib/nanoc/filters/rdoc.rb +14 -0
- data/lib/nanoc/filters/smartypants.rb +13 -0
- data/lib/nanoc/filters/textile.rb +13 -0
- data/lib/nanoc/layout_processors/erb.rb +35 -0
- data/lib/nanoc/layout_processors/haml.rb +18 -0
- data/lib/nanoc/layout_processors/markaby.rb +16 -0
- metadata +37 -30
- data/lib/nanoc/compiler.rb +0 -145
- data/lib/nanoc/core_ext.rb +0 -1
- data/lib/nanoc/core_ext/array.rb +0 -17
- data/lib/nanoc/core_ext/hash.rb +0 -43
- data/lib/nanoc/core_ext/string.rb +0 -13
- data/lib/nanoc/core_ext/yaml.rb +0 -10
- data/lib/nanoc/creator.rb +0 -180
- data/lib/nanoc/enhancements.rb +0 -101
- data/lib/nanoc/filters.rb +0 -7
- data/lib/nanoc/filters/eruby_filter.rb +0 -39
- data/lib/nanoc/filters/haml_filter.rb +0 -18
- data/lib/nanoc/filters/liquid_filter.rb +0 -47
- data/lib/nanoc/filters/markaby_filter.rb +0 -15
- data/lib/nanoc/filters/markdown_filter.rb +0 -13
- data/lib/nanoc/filters/rdoc_filter.rb +0 -15
- data/lib/nanoc/filters/sass_filter.rb +0 -13
- data/lib/nanoc/filters/smartypants_filter.rb +0 -13
- data/lib/nanoc/filters/textile_filter.rb +0 -13
- data/lib/nanoc/page.rb +0 -171
- data/lib/nanoc/page_drop.rb +0 -18
- data/lib/nanoc/page_proxy.rb +0 -30
@@ -0,0 +1,34 @@
|
|
1
|
+
module Nanoc::Filter::ERB
|
2
|
+
|
3
|
+
class ERBContext
|
4
|
+
|
5
|
+
def initialize(hash)
|
6
|
+
hash.each_pair do |key, value|
|
7
|
+
instance_variable_set('@' + key.to_s, value)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def get_binding
|
12
|
+
binding
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
class ERBFilter < Nanoc::Filter
|
18
|
+
|
19
|
+
identifiers :erb, :eruby
|
20
|
+
|
21
|
+
def run(content)
|
22
|
+
nanoc_require 'erb'
|
23
|
+
|
24
|
+
# Create context
|
25
|
+
assigns = { :page => @page, :pages => @pages, :config => @config, :site => @site }
|
26
|
+
context = ERBContext.new(assigns)
|
27
|
+
|
28
|
+
# Get result
|
29
|
+
::ERB.new(content).result(context.get_binding)
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Nanoc::Filter::Haml
|
2
|
+
class HamlFilter < Nanoc::Filter
|
3
|
+
|
4
|
+
identifiers :haml
|
5
|
+
|
6
|
+
def run(content)
|
7
|
+
nanoc_require 'haml'
|
8
|
+
|
9
|
+
options = @page.haml_options || {}
|
10
|
+
options[:locals] = { :page => @page, :pages => @pages, :config => @config, :site => @site }
|
11
|
+
|
12
|
+
::Haml::Engine.new(content, options).to_html
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Nanoc::Filter::Markaby
|
2
|
+
class MarkabyFilter < Nanoc::Filter
|
3
|
+
|
4
|
+
identifiers :markaby
|
5
|
+
|
6
|
+
def run(content)
|
7
|
+
nanoc_require 'markaby'
|
8
|
+
|
9
|
+
assigns = { :page => @page, :pages => @pages, :config => @config, :site => @site }
|
10
|
+
|
11
|
+
::Markaby::Builder.new(assigns).instance_eval(content).to_s
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Nanoc::Filter::RDoc
|
2
|
+
class RDocFilter < Nanoc::Filter
|
3
|
+
|
4
|
+
identifiers :rdoc
|
5
|
+
|
6
|
+
def run(content)
|
7
|
+
nanoc_require 'rdoc/markup/simple_markup'
|
8
|
+
nanoc_require 'rdoc/markup/simple_markup/to_html'
|
9
|
+
|
10
|
+
::SM::SimpleMarkup.new.convert(content, SM::ToHtml.new)
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Nanoc::LayoutProcessor::ERB
|
2
|
+
|
3
|
+
class ERBContext
|
4
|
+
|
5
|
+
def initialize(hash)
|
6
|
+
hash.each_pair do |key, value|
|
7
|
+
instance_variable_set('@' + key.to_s, value)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def get_binding
|
12
|
+
binding
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
class ERBLayoutProcessor < Nanoc::LayoutProcessor
|
18
|
+
|
19
|
+
identifiers :erb, :eruby
|
20
|
+
extensions '.erb', '.rhtml'
|
21
|
+
|
22
|
+
def run(layout)
|
23
|
+
nanoc_require 'erb'
|
24
|
+
|
25
|
+
# Create context
|
26
|
+
assigns = @other_assigns.merge({ :page => @page, :pages => @pages, :config => @config, :site => @site })
|
27
|
+
context = ERBContext.new(assigns)
|
28
|
+
|
29
|
+
# Get result
|
30
|
+
::ERB.new(layout).result(context.get_binding)
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Nanoc::LayoutProcessor::Haml
|
2
|
+
class HamlLayoutProcessor < Nanoc::LayoutProcessor
|
3
|
+
|
4
|
+
identifiers :haml
|
5
|
+
extensions '.haml'
|
6
|
+
|
7
|
+
def run(layout)
|
8
|
+
nanoc_require 'haml'
|
9
|
+
|
10
|
+
options = @page[:haml_options] || {}
|
11
|
+
assigns = @other_assigns.merge({ :page => @page, :pages => @pages, :config => @config, :site => @site })
|
12
|
+
options[:locals] = assigns
|
13
|
+
|
14
|
+
::Haml::Engine.new(layout, options).to_html
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Nanoc::LayoutProcessor::Markaby
|
2
|
+
class MarkabyLayoutProcessor < Nanoc::LayoutProcessor
|
3
|
+
|
4
|
+
identifiers :markaby
|
5
|
+
extensions '.mab'
|
6
|
+
|
7
|
+
def run(layout)
|
8
|
+
nanoc_require 'markaby'
|
9
|
+
|
10
|
+
assigns = @other_assigns.merge({ :page => @page, :pages => @pages, :config => @config, :site => @site })
|
11
|
+
|
12
|
+
::Markaby::Builder.new(assigns).instance_eval(layout).to_s
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.
|
2
|
+
rubygems_version: 0.9.4
|
3
3
|
specification_version: 1
|
4
4
|
name: nanoc
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version:
|
7
|
-
date: 2007-
|
8
|
-
summary: a
|
6
|
+
version: "2.0"
|
7
|
+
date: 2007-12-25 00:00:00 +01:00
|
8
|
+
summary: a tool that runs on your local computer and compiles Markdown, Textile, Haml, ... documents into static web pages
|
9
9
|
require_paths:
|
10
10
|
- lib
|
11
11
|
email: denis.defreyne@stoneship.org
|
12
12
|
homepage: http://nanoc.stoneship.org/
|
13
|
-
rubyforge_project:
|
14
|
-
description: a
|
13
|
+
rubyforge_project: nanoc
|
14
|
+
description: a tool that runs on your local computer and compiles Markdown, Textile, Haml, ... documents into static web pages
|
15
15
|
autorequire:
|
16
16
|
default_executable:
|
17
17
|
bindir: bin
|
@@ -26,8 +26,8 @@ platform: ruby
|
|
26
26
|
signing_key:
|
27
27
|
cert_chain:
|
28
28
|
post_install_message:
|
29
|
-
authors:
|
30
|
-
|
29
|
+
authors:
|
30
|
+
- Denis Defreyne
|
31
31
|
files:
|
32
32
|
- README
|
33
33
|
- LICENSE
|
@@ -35,29 +35,36 @@ files:
|
|
35
35
|
- Rakefile
|
36
36
|
- bin/nanoc
|
37
37
|
- lib/nanoc
|
38
|
-
- lib/nanoc/
|
39
|
-
- lib/nanoc/
|
40
|
-
- lib/nanoc/
|
41
|
-
- lib/nanoc/core_ext
|
42
|
-
- lib/nanoc/core_ext/
|
43
|
-
- lib/nanoc/
|
44
|
-
- lib/nanoc/
|
45
|
-
- lib/nanoc/
|
46
|
-
- lib/nanoc/
|
38
|
+
- lib/nanoc/base
|
39
|
+
- lib/nanoc/base/auto_compiler.rb
|
40
|
+
- lib/nanoc/base/compiler.rb
|
41
|
+
- lib/nanoc/base/core_ext
|
42
|
+
- lib/nanoc/base/core_ext/hash.rb
|
43
|
+
- lib/nanoc/base/data_source.rb
|
44
|
+
- lib/nanoc/base/enhancements.rb
|
45
|
+
- lib/nanoc/base/filter.rb
|
46
|
+
- lib/nanoc/base/layout_processor.rb
|
47
|
+
- lib/nanoc/base/page.rb
|
48
|
+
- lib/nanoc/base/page_proxy.rb
|
49
|
+
- lib/nanoc/base/plugin.rb
|
50
|
+
- lib/nanoc/base/plugin_manager.rb
|
51
|
+
- lib/nanoc/base/site.rb
|
52
|
+
- lib/nanoc/data_sources
|
53
|
+
- lib/nanoc/data_sources/database.rb
|
54
|
+
- lib/nanoc/data_sources/filesystem.rb
|
55
|
+
- lib/nanoc/data_sources/trivial.rb
|
47
56
|
- lib/nanoc/filters
|
48
|
-
- lib/nanoc/filters/
|
49
|
-
- lib/nanoc/filters/
|
50
|
-
- lib/nanoc/filters/
|
51
|
-
- lib/nanoc/filters/
|
52
|
-
- lib/nanoc/filters/
|
53
|
-
- lib/nanoc/filters/
|
54
|
-
- lib/nanoc/filters/
|
55
|
-
- lib/nanoc/
|
56
|
-
- lib/nanoc/
|
57
|
-
- lib/nanoc/
|
58
|
-
- lib/nanoc/
|
59
|
-
- lib/nanoc/page_drop.rb
|
60
|
-
- lib/nanoc/page_proxy.rb
|
57
|
+
- lib/nanoc/filters/erb.rb
|
58
|
+
- lib/nanoc/filters/haml.rb
|
59
|
+
- lib/nanoc/filters/markaby.rb
|
60
|
+
- lib/nanoc/filters/markdown.rb
|
61
|
+
- lib/nanoc/filters/rdoc.rb
|
62
|
+
- lib/nanoc/filters/smartypants.rb
|
63
|
+
- lib/nanoc/filters/textile.rb
|
64
|
+
- lib/nanoc/layout_processors
|
65
|
+
- lib/nanoc/layout_processors/erb.rb
|
66
|
+
- lib/nanoc/layout_processors/haml.rb
|
67
|
+
- lib/nanoc/layout_processors/markaby.rb
|
61
68
|
- lib/nanoc.rb
|
62
69
|
test_files: []
|
63
70
|
|
data/lib/nanoc/compiler.rb
DELETED
@@ -1,145 +0,0 @@
|
|
1
|
-
module Nanoc
|
2
|
-
class Compiler
|
3
|
-
|
4
|
-
DEFAULT_CONFIG = {
|
5
|
-
:output_dir => 'output',
|
6
|
-
:eruby_engine => 'erb'
|
7
|
-
}
|
8
|
-
|
9
|
-
FILE_TYPES = {
|
10
|
-
'.erb' => :eruby,
|
11
|
-
'.rhtml' => :eruby,
|
12
|
-
'.haml' => :haml,
|
13
|
-
'.mab' => :markaby,
|
14
|
-
'.liquid' => :liquid
|
15
|
-
}
|
16
|
-
|
17
|
-
PAGE_DEFAULTS = {
|
18
|
-
:custom_path => nil,
|
19
|
-
:filename => 'index',
|
20
|
-
:extension => 'html',
|
21
|
-
:filters => [],
|
22
|
-
:is_draft => false,
|
23
|
-
:layout => 'default'
|
24
|
-
}
|
25
|
-
|
26
|
-
attr_reader :config, :stack, :pages
|
27
|
-
|
28
|
-
def initialize
|
29
|
-
@filters = {}
|
30
|
-
end
|
31
|
-
|
32
|
-
def run
|
33
|
-
# Make sure we're in a nanoc site
|
34
|
-
Nanoc.ensure_in_site
|
35
|
-
|
36
|
-
# Load some configuration stuff
|
37
|
-
@config = DEFAULT_CONFIG.merge(YAML.load_file_and_clean('config.yaml'))
|
38
|
-
@global_page = PAGE_DEFAULTS.merge(YAML.load_file_and_clean('meta.yaml'))
|
39
|
-
|
40
|
-
# Require all Ruby source files in lib/
|
41
|
-
Dir['lib/*.rb'].each { |f| require f }
|
42
|
-
|
43
|
-
# Create output directory if necessary
|
44
|
-
FileUtils.mkdir_p(@config[:output_dir])
|
45
|
-
|
46
|
-
# Get all pages
|
47
|
-
@pages = find_uncompiled_pages
|
48
|
-
|
49
|
-
# Filter, layout, and filter again
|
50
|
-
filter(:pre)
|
51
|
-
layout
|
52
|
-
filter(:post)
|
53
|
-
|
54
|
-
# Save pages
|
55
|
-
save_pages
|
56
|
-
end
|
57
|
-
|
58
|
-
# Filter management
|
59
|
-
|
60
|
-
def register_filter(name, &block)
|
61
|
-
@filters[name.to_sym] = block
|
62
|
-
end
|
63
|
-
|
64
|
-
def filter_named(name)
|
65
|
-
@filters[name.to_sym]
|
66
|
-
end
|
67
|
-
|
68
|
-
private
|
69
|
-
|
70
|
-
# Main methods
|
71
|
-
|
72
|
-
def find_uncompiled_pages
|
73
|
-
# Read all meta files
|
74
|
-
Dir['content/**/meta.yaml'].inject([]) do |pages, filename|
|
75
|
-
# Read the meta file
|
76
|
-
hash = @global_page.merge(YAML.load_file_and_clean(filename))
|
77
|
-
|
78
|
-
# Fix the path
|
79
|
-
hash[:path] = filename.sub(/^content/, '').sub('meta.yaml', '')
|
80
|
-
|
81
|
-
# Convert to a Page instance
|
82
|
-
page = Page.new(hash, self)
|
83
|
-
|
84
|
-
# Get the content filename
|
85
|
-
page.content_filename = content_filename_for_meta_filename(filename)
|
86
|
-
|
87
|
-
# Skip drafts
|
88
|
-
hash[:is_draft] ? pages : pages + [ page ]
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
def filter(stage)
|
93
|
-
# Reset filter stack
|
94
|
-
@stack = []
|
95
|
-
|
96
|
-
# Prepare pages
|
97
|
-
@pages.each do |page|
|
98
|
-
page.stage = stage
|
99
|
-
page.is_filtered = false
|
100
|
-
end
|
101
|
-
|
102
|
-
# Filter pages
|
103
|
-
@pages.each { |page| page.filter! }
|
104
|
-
end
|
105
|
-
|
106
|
-
def layout
|
107
|
-
# For each page (ignoring drafts)
|
108
|
-
@pages.reject { |page| page.attributes[:skip_output] }.each do |page|
|
109
|
-
begin
|
110
|
-
# Layout the page
|
111
|
-
page.layout!
|
112
|
-
rescue => exception
|
113
|
-
handle_exception(exception, "layouting page '#{page.content_filename}' in layout '#{page.attributes[:layout]}'")
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
def save_pages
|
119
|
-
@pages.reject { |page| page.attributes[:skip_output] }.each do |page|
|
120
|
-
# Write page with layout
|
121
|
-
FileManager.create_file(page.path) { page.content }
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
# Helper methods
|
126
|
-
|
127
|
-
def content_filename_for_meta_filename(filename)
|
128
|
-
# Find all files with base name of parent directory
|
129
|
-
content_filenames = Dir[filename.sub('meta.yaml', File.basename(File.dirname(filename)) + '.*')]
|
130
|
-
|
131
|
-
# Find all index.* files (used to be a fallback for nanoc 1.0, kinda...)
|
132
|
-
content_filenames += Dir["#{File.dirname(filename)}/index.*"]
|
133
|
-
|
134
|
-
# Reject backups
|
135
|
-
content_filenames.reject! { |f| f =~ /~$/ }
|
136
|
-
|
137
|
-
# Make sure there is only one content file
|
138
|
-
content_filenames.ensure_single('content files', File.dirname(filename))
|
139
|
-
|
140
|
-
# Return the first (and only one)
|
141
|
-
content_filenames[0]
|
142
|
-
end
|
143
|
-
|
144
|
-
end
|
145
|
-
end
|
data/lib/nanoc/core_ext.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
Dir[File.join(File.dirname(__FILE__), 'core_ext', '*.rb')].each { |f| require f }
|
data/lib/nanoc/core_ext/array.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
class Array
|
2
|
-
# Ensures that the array contains only one element
|
3
|
-
def ensure_single(a_noun, a_context)
|
4
|
-
if self.size != 1
|
5
|
-
$stderr.puts "ERROR: expected 1 #{a_noun}, found #{self.size} (#{a_context})" unless $quiet
|
6
|
-
exit
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
# Pushes the object on the stack, yields, and pops stack
|
11
|
-
def pushing(obj)
|
12
|
-
push(obj)
|
13
|
-
yield
|
14
|
-
ensure
|
15
|
-
pop
|
16
|
-
end
|
17
|
-
end
|