nanoc 1.6.2 → 2.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/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
|