benoit 0.2.2 → 0.4.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.
- checksums.yaml +8 -8
- data/.gitignore +1 -2
- data/.rspec +1 -1
- data/Assetfile +19 -4
- data/Gemfile.lock +29 -5
- data/Guardfile +28 -0
- data/Rakefile +2 -0
- data/benoit.gemspec +5 -0
- data/bin/benoit +25 -7
- data/lib/benoit/cadenza.rb +2 -0
- data/lib/benoit/cadenza/blocks.rb +18 -0
- data/lib/benoit/compiler_error.rb +5 -1
- data/lib/benoit/filters/base_filter.rb +4 -5
- data/lib/benoit/filters/cadenza_filter.rb +19 -16
- data/lib/benoit/filters/markdown_filter.rb +36 -4
- data/lib/benoit/logger.rb +2 -2
- data/lib/benoit/pipeline_project.rb +23 -23
- data/lib/benoit/server.rb +47 -0
- data/lib/benoit/server/remote.rb +29 -0
- data/lib/benoit/utils/finds_layouts_for_template.rb +28 -30
- data/lib/benoit/version.rb +1 -1
- data/spec/features/build_command.feature +1 -1
- data/spec/features/frontmatter_metadata.feature +3 -21
- data/spec/features/javascript_files.feature +1 -0
- data/spec/features/markdown_files.feature +41 -0
- data/spec/features/output_filters.feature +2 -7
- data/spec/features/page_layouts.feature +4 -28
- data/spec/features/pagination.feature +1 -0
- data/spec/lib/filters/base_filter_spec.rb +4 -33
- data/spec/lib/filters/markdown_filter_spec.rb +31 -8
- data/spec/lib/filters/sass_filter_spec.rb +2 -2
- data/spec/lib/site_context_spec.rb +2 -2
- data/spec/steps/staticly_steps.rb +1 -1
- data/spec/support/spec_helpers/memory_file_wrapper.rb +2 -6
- data/vendor/rake-pipeline/GETTING_STARTED.md +11 -11
- data/vendor/rake-pipeline/bin/rakep +1 -1
- data/vendor/rake-pipeline/lib/rake-pipeline.rb +2 -49
- data/vendor/rake-pipeline/lib/rake-pipeline/cli.rb +0 -1
- data/vendor/rake-pipeline/lib/rake-pipeline/file_wrapper.rb +2 -9
- data/vendor/rake-pipeline/lib/rake-pipeline/filter.rb +1 -19
- data/vendor/rake-pipeline/lib/rake-pipeline/manifest.rb +4 -0
- data/vendor/rake-pipeline/lib/rake-pipeline/middleware.rb +1 -2
- data/vendor/rake-pipeline/lib/rake-pipeline/project.rb +3 -2
- data/vendor/rake-pipeline/rake-pipeline.gemspec +1 -1
- data/vendor/rake-pipeline/spec/cli_spec.rb +0 -2
- data/vendor/rake-pipeline/spec/concat_filter_spec.rb +4 -4
- data/vendor/rake-pipeline/spec/filter_spec.rb +0 -35
- data/vendor/rake-pipeline/spec/gsub_filter_spec.rb +5 -5
- data/vendor/rake-pipeline/spec/ordering_concat_filter_spec.rb +4 -4
- data/vendor/rake-pipeline/spec/rake_acceptance_spec.rb +18 -0
- data/vendor/rake-pipeline/spec/support/spec_helpers/filters.rb +1 -1
- data/vendor/rake-pipeline/spec/support/spec_helpers/memory_file_wrapper.rb +2 -6
- metadata +77 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MjFlM2RiMGE0N2VlNzNjYzA3YTcwYmMxMzZiNGU3NjAzN2U2MzViYQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YmZkZjFiNDZlMTgwY2UxZDdhZTVlNmJiMTA4Y2I4YmIyYTQxODM1YQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZWMyOGQwMTk4NGYwZjllNTMwZmY4M2RhNTJhYWRkMGQwMTRmYzY0NjE1YTcw
|
10
|
+
ZGM1MTg5ZDQzZDkyNzMzYTA3N2U1ZDUzMWRlZGRiYjBhNWE4OGMyZDFmMzdi
|
11
|
+
ZDFmNGU2ZjJkNzMyZTQ0MzE4NDVjMmNhNDU1NDhkYzYwNWNlZjc=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ODdjMjU4Njg0Y2E4MzFjNjczOTYxY2U2MDM4YTM3MDFmYjhhZTUwNjVlOTJl
|
14
|
+
NDgwYjY1ZThkZjBhMzI3NDRlZWMxNjFhZDQwOWM5MjE4MTA0ZmJlODZjNjg5
|
15
|
+
MjU4OWVhNTk1N2QxNzcyOTI5ZDAzOWU1NDExN2ZmYzA2MGNlYjY=
|
data/.gitignore
CHANGED
data/.rspec
CHANGED
@@ -1 +1 @@
|
|
1
|
-
-I ./lib
|
1
|
+
-I ./lib -I ./spec/support -I ./vendor/rake-pipeline/lib -fd
|
data/Assetfile
CHANGED
@@ -1,6 +1,23 @@
|
|
1
1
|
require 'benoit/pipeline/dsl_extensions'
|
2
2
|
|
3
|
-
before_filter Benoit::Filters::MetadataCleaner
|
3
|
+
# before_filter Benoit::Filters::MetadataCleaner
|
4
|
+
|
5
|
+
class EverythingElse < Rake::Pipeline::Filter
|
6
|
+
|
7
|
+
processes_binary_files
|
8
|
+
|
9
|
+
PROCESSED = %w(js html css scss)
|
10
|
+
|
11
|
+
def generate_output(inputs, output)
|
12
|
+
inputs.each do |input|
|
13
|
+
unless PROCESSED.include?(File.extname(input.path))
|
14
|
+
output.write input.read
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
after_filter EverythingElse
|
4
21
|
|
5
22
|
input Dir.pwd do
|
6
23
|
|
@@ -52,10 +69,8 @@ input Dir.pwd do
|
|
52
69
|
filter Benoit::Filters::SassFilter, additional_load_paths: ["styles", "css"]
|
53
70
|
end
|
54
71
|
|
55
|
-
needs_pagination "*.html"
|
56
|
-
|
57
72
|
match "**/*.html" do
|
58
|
-
filter Benoit::Filters::ContentPageFilter
|
73
|
+
# filter Benoit::Filters::ContentPageFilter
|
59
74
|
filter Benoit::Filters::CadenzaFilter
|
60
75
|
end
|
61
76
|
|
data/Gemfile.lock
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
benoit (0.
|
4
|
+
benoit (0.4.0)
|
5
5
|
cadenza (~> 0.8.0)
|
6
6
|
chunky_png (~> 1.2.0)
|
7
7
|
compass (~> 0.13.alpha)
|
8
8
|
gli (~> 2.5.3)
|
9
9
|
inflecto (~> 0.0.2)
|
10
|
+
kramdown (~> 1.1.0)
|
10
11
|
kronic (~> 1.1.3)
|
11
12
|
multi_json (~> 1.5.0)
|
12
13
|
rake-pipeline-web-filters (~> 0.7.0)
|
13
14
|
redcarpet (~> 2.2.2)
|
14
15
|
sass (~> 3.2.0)
|
15
16
|
stamp (~> 0.5.0)
|
17
|
+
thin (~> 1.5.1)
|
16
18
|
|
17
19
|
PATH
|
18
20
|
remote: vendor/frontmatter
|
@@ -24,7 +26,7 @@ PATH
|
|
24
26
|
specs:
|
25
27
|
rake-pipeline (0.8.0)
|
26
28
|
json
|
27
|
-
rake (~> 0.
|
29
|
+
rake (~> 10.0.0)
|
28
30
|
thor
|
29
31
|
|
30
32
|
GEM
|
@@ -50,15 +52,29 @@ GEM
|
|
50
52
|
diff-lcs (>= 1.1.3)
|
51
53
|
gherkin (~> 2.11.7)
|
52
54
|
multi_json (~> 1.3)
|
55
|
+
daemons (1.1.9)
|
53
56
|
diff-lcs (1.2.4)
|
57
|
+
eventmachine (1.0.3)
|
54
58
|
ffi (1.7.0)
|
59
|
+
formatador (0.2.4)
|
55
60
|
gherkin (2.11.8)
|
56
61
|
multi_json (~> 1.3)
|
57
62
|
gli (2.5.6)
|
63
|
+
guard (1.7.0)
|
64
|
+
formatador (>= 0.2.4)
|
65
|
+
listen (>= 0.6.0)
|
66
|
+
lumberjack (>= 1.0.2)
|
67
|
+
pry (>= 0.9.10)
|
68
|
+
thor (>= 0.14.6)
|
69
|
+
guard-rspec (2.5.4)
|
70
|
+
guard (>= 1.1)
|
71
|
+
rspec (~> 2.11)
|
58
72
|
inflecto (0.0.2)
|
59
|
-
json (1.
|
73
|
+
json (1.8.0)
|
74
|
+
kramdown (1.1.0)
|
60
75
|
kronic (1.1.3)
|
61
76
|
listen (0.7.3)
|
77
|
+
lumberjack (1.0.4)
|
62
78
|
method_source (0.8.1)
|
63
79
|
multi_json (1.5.1)
|
64
80
|
pry (0.9.12)
|
@@ -71,10 +87,11 @@ GEM
|
|
71
87
|
pry (~> 0.9)
|
72
88
|
slop (~> 3.0)
|
73
89
|
rack (1.5.2)
|
74
|
-
rake (0.
|
90
|
+
rake (10.0.4)
|
75
91
|
rake-pipeline-web-filters (0.7.0)
|
76
92
|
rack
|
77
93
|
rake-pipeline (~> 0.6)
|
94
|
+
rb-fsevent (0.9.3)
|
78
95
|
redcarpet (2.2.2)
|
79
96
|
rspec (2.13.0)
|
80
97
|
rspec-core (~> 2.13.0)
|
@@ -84,9 +101,13 @@ GEM
|
|
84
101
|
rspec-expectations (2.13.0)
|
85
102
|
diff-lcs (>= 1.1.3, < 2.0)
|
86
103
|
rspec-mocks (2.13.1)
|
87
|
-
sass (3.2.
|
104
|
+
sass (3.2.9)
|
88
105
|
slop (3.4.4)
|
89
106
|
stamp (0.5.0)
|
107
|
+
thin (1.5.1)
|
108
|
+
daemons (>= 1.0.9)
|
109
|
+
eventmachine (>= 0.12.6)
|
110
|
+
rack (>= 1.0.0)
|
90
111
|
thor (0.18.1)
|
91
112
|
turnip (1.1.0)
|
92
113
|
gherkin (>= 2.5)
|
@@ -101,10 +122,13 @@ DEPENDENCIES
|
|
101
122
|
aruba
|
102
123
|
benoit!
|
103
124
|
frontmatter!
|
125
|
+
guard
|
126
|
+
guard-rspec
|
104
127
|
pry
|
105
128
|
pry-nav
|
106
129
|
pry-remote
|
107
130
|
rake-pipeline!
|
131
|
+
rb-fsevent (~> 0.9)
|
108
132
|
rspec
|
109
133
|
turnip (~> 1.1.0)
|
110
134
|
turnip-kanban
|
data/Guardfile
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
group 'acceptance-tests' do
|
5
|
+
guard 'rspec', cli: '-O .rspec-turnip', turnip: true, spec_paths: ['spec/features'] do
|
6
|
+
|
7
|
+
watch('spec/turnip_helper.rb') { "spec/features" }
|
8
|
+
|
9
|
+
watch(%r{^lib/(.+)\.rb$}) { "spec/features" }
|
10
|
+
|
11
|
+
watch('Assetfile') { 'spec/features' }
|
12
|
+
|
13
|
+
# Turnip features and steps
|
14
|
+
watch(%r{^spec/features/(.+)\.feature$})
|
15
|
+
watch(%r{^spec/support/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/features' }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
group 'unit-tests' do
|
20
|
+
guard 'rspec' do
|
21
|
+
watch(%r{^spec/.+_spec\.rb$})
|
22
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
23
|
+
watch('spec/spec_helper.rb') { "spec" }
|
24
|
+
|
25
|
+
watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
data/Rakefile
CHANGED
data/benoit.gemspec
CHANGED
@@ -30,6 +30,7 @@ spec = Gem::Specification.new do |s|
|
|
30
30
|
s.add_dependency "sass", "~> 3.2.0"
|
31
31
|
s.add_dependency "multi_json", "~> 1.5.0"
|
32
32
|
s.add_dependency "redcarpet", "~> 2.2.2"
|
33
|
+
s.add_dependency "kramdown", "~> 1.1.0"
|
33
34
|
s.add_dependency "compass", "~> 0.13.alpha"
|
34
35
|
s.add_dependency "chunky_png", "~> 1.2.0"
|
35
36
|
s.add_dependency "inflecto", "~> 0.0.2"
|
@@ -37,6 +38,7 @@ spec = Gem::Specification.new do |s|
|
|
37
38
|
s.add_dependency "rake-pipeline-web-filters", "~> 0.7.0"
|
38
39
|
s.add_dependency "kronic", "~> 1.1.3"
|
39
40
|
s.add_dependency "stamp", "~> 0.5.0"
|
41
|
+
s.add_dependency "thin", "~> 1.5.1"
|
40
42
|
|
41
43
|
|
42
44
|
s.add_development_dependency "rspec"
|
@@ -46,5 +48,8 @@ spec = Gem::Specification.new do |s|
|
|
46
48
|
s.add_development_dependency "pry"
|
47
49
|
s.add_development_dependency "pry-nav"
|
48
50
|
s.add_development_dependency "pry-remote"
|
51
|
+
s.add_development_dependency "guard"
|
52
|
+
s.add_development_dependency "guard-rspec"
|
53
|
+
s.add_development_dependency "rb-fsevent", '~> 0.9'
|
49
54
|
|
50
55
|
end
|
data/bin/benoit
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
$:.unshift File.expand_path("../../bundle", __FILE__)
|
3
|
-
$:.unshift File.expand_path("../../lib", __FILE__)
|
4
2
|
$:.unshift File.expand_path("../../vendor/frontmatter/lib", __FILE__)
|
5
3
|
$:.unshift File.expand_path("../../vendor/rake-pipeline/lib", __FILE__)
|
4
|
+
require 'bundler/setup'
|
6
5
|
|
7
6
|
require 'benoit'
|
8
7
|
require 'gli'
|
@@ -65,11 +64,30 @@ command :build do |c|
|
|
65
64
|
end
|
66
65
|
end
|
67
66
|
|
68
|
-
|
69
|
-
|
70
|
-
|
67
|
+
command :server do |c|
|
68
|
+
|
69
|
+
c.desc 'Name of file containing files that should not be copied or processed to output directory'
|
70
|
+
c.default_value '.benoitignore'
|
71
|
+
c.flag [:g, :"ignorefile"]
|
72
|
+
|
71
73
|
c.action do |global_options,options,args|
|
72
|
-
|
74
|
+
|
75
|
+
STDOUT.sync = true
|
76
|
+
STDERR.sync = true
|
77
|
+
|
78
|
+
Benoit::Logger.notice "starting server.."
|
79
|
+
|
80
|
+
site_path = global_options[:"input-path"] || Dir.pwd
|
81
|
+
assetfile_path = File.join(File.expand_path("../../", __FILE__), "Assetfile")
|
82
|
+
Dir.chdir(site_path) do
|
83
|
+
Benoit.configure do |config|
|
84
|
+
puts "specified ignorefile: #{options[:"ignorefile"].inspect}"
|
85
|
+
config.ignorefile = options[:"ignorefile"]
|
86
|
+
end
|
87
|
+
require 'benoit/server'
|
88
|
+
project = Benoit::PipelineProject.new(assetfile_path, Benoit.config.output_path, Benoit.config.cache_path)
|
89
|
+
Benoit::Server.new(project, daemonize: false, server: 'thin').start
|
90
|
+
end
|
73
91
|
end
|
74
92
|
end
|
75
93
|
|
@@ -106,7 +124,7 @@ def default_output_path
|
|
106
124
|
end
|
107
125
|
|
108
126
|
def default_cache_path(site_name)
|
109
|
-
File.expand_path("
|
127
|
+
File.expand_path("/tmp/.benoit/tmpcache/#{site_name}")
|
110
128
|
end
|
111
129
|
|
112
130
|
post do |global,command,options,args|
|
data/lib/benoit/cadenza.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
require 'stamp'
|
2
|
+
require 'cadenza'
|
2
3
|
|
3
4
|
module Benoit
|
4
5
|
module Cadenza
|
5
6
|
|
6
7
|
def self.load_output_filters!
|
7
8
|
::Cadenza::BaseContext.instance_eval File.read(File.join(File.dirname(__FILE__), 'cadenza', 'output_filters.rb'))
|
9
|
+
::Cadenza::BaseContext.instance_eval File.read(File.join(File.dirname(__FILE__), 'cadenza', 'blocks.rb'))
|
8
10
|
end
|
9
11
|
|
10
12
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
define_block :times do |context, nodes, parameters|
|
2
|
+
from, to, *rest = parameters.map(&:value).map(&:to_i)
|
3
|
+
|
4
|
+
from, to = 1, from unless to
|
5
|
+
|
6
|
+
result = ""
|
7
|
+
|
8
|
+
from.upto(to) do |idx|
|
9
|
+
context.push(:counter => idx)
|
10
|
+
context.push(:counter0 => idx - from)
|
11
|
+
context.push(:first => idx == from)
|
12
|
+
context.push(:last => idx == to)
|
13
|
+
nodes.each {|child| result << ::Cadenza::TextRenderer.render(child, context) }
|
14
|
+
context.pop
|
15
|
+
end
|
16
|
+
|
17
|
+
result
|
18
|
+
end
|
@@ -9,7 +9,7 @@
|
|
9
9
|
class StandardError
|
10
10
|
|
11
11
|
def message
|
12
|
-
@message || "Staticly has encountered an internal error. Please contact @staticlyapp on Twitter to resolve this problem."
|
12
|
+
@message# || "Staticly has encountered an internal error. Please contact @staticlyapp on Twitter to resolve this problem."
|
13
13
|
end
|
14
14
|
|
15
15
|
def type
|
@@ -31,6 +31,10 @@ module Benoit
|
|
31
31
|
@original_error = original_error
|
32
32
|
end
|
33
33
|
|
34
|
+
def message
|
35
|
+
@message || (@original_error && @original_error.message)
|
36
|
+
end
|
37
|
+
|
34
38
|
def to_json
|
35
39
|
{ line_no: @line, message: @message, path: @file_path, original_error: @original_error, type: "error" }.to_json
|
36
40
|
end
|
@@ -27,16 +27,15 @@ module Benoit
|
|
27
27
|
|
28
28
|
def generate_output(inputs, output)
|
29
29
|
inputs.each do |input|
|
30
|
-
|
31
|
-
content
|
32
|
-
output.write(content || page["content"])
|
30
|
+
content = build_output(input) if builder
|
31
|
+
output.write(content || input.read)
|
33
32
|
end
|
34
33
|
end
|
35
34
|
|
36
35
|
private
|
37
36
|
|
38
|
-
def build_output(
|
39
|
-
builder.(
|
37
|
+
def build_output(input)
|
38
|
+
builder.(input)
|
40
39
|
end
|
41
40
|
|
42
41
|
end
|
@@ -13,7 +13,7 @@ class Benoit::Filters::CadenzaFilter < Rake::Pipeline::Filter
|
|
13
13
|
|
14
14
|
def generate_output(inputs, output)
|
15
15
|
|
16
|
-
site_context = current_site.to_context
|
16
|
+
# site_context = current_site.to_context
|
17
17
|
|
18
18
|
inputs.each do |input|
|
19
19
|
load_paths = [input.root, Dir.pwd, "#{Dir.pwd}/_layouts"]
|
@@ -24,20 +24,21 @@ class Benoit::Filters::CadenzaFilter < Rake::Pipeline::Filter
|
|
24
24
|
::Cadenza::BaseContext.add_load_path load_path
|
25
25
|
end
|
26
26
|
|
27
|
-
page = current_site[input.path].to_hash
|
27
|
+
# page = current_site[input.path].to_hash
|
28
28
|
|
29
29
|
# Leave the original page for paginated pages blank
|
30
30
|
# otherwise we will get an "iteration reached an end" error
|
31
31
|
# from trying to iterate past the end of the enumerator
|
32
|
-
if input.path !~ /\d+.html/ && page.keys.any? { |key| key =~ /\w+_per_page/ }
|
33
|
-
|
34
|
-
|
35
|
-
end
|
32
|
+
# if input.path !~ /\d+.html/ && page.keys.any? { |key| key =~ /\w+_per_page/ }
|
33
|
+
# output.write("")
|
34
|
+
# next
|
35
|
+
# end
|
36
36
|
|
37
|
-
context_hash = {
|
38
|
-
|
39
|
-
|
40
|
-
}
|
37
|
+
# context_hash = {
|
38
|
+
# "site" => site_context,
|
39
|
+
# "page" => page
|
40
|
+
# }
|
41
|
+
context_hash = {}
|
41
42
|
|
42
43
|
begin
|
43
44
|
compiled = ::Cadenza.render_template input.path, context_hash
|
@@ -45,11 +46,15 @@ class Benoit::Filters::CadenzaFilter < Rake::Pipeline::Filter
|
|
45
46
|
error = Benoit::FileMissingError.new(ex.message, nil, input.path, ex)
|
46
47
|
raise error
|
47
48
|
rescue ::Cadenza::FilterNotDefinedError => ex
|
48
|
-
missing_filter = ex.
|
49
|
+
missing_filter = ex.to_s.scan(/undefined filter '([\w\-]*)'/).flatten.first
|
49
50
|
error = Benoit::CompilerError.new(nil, input.path, ex)
|
50
51
|
error.message = "You used a filter named #{missing_filter.inspect}, but I could not find it. Maybe it's misspelled?"
|
51
52
|
raise error
|
52
|
-
rescue ::Cadenza::
|
53
|
+
rescue ::Cadenza::BlockNotDefinedError => ex
|
54
|
+
missing_block = ex.to_s.scan(/undefined block '([\w\-]*)'/).flatten.first
|
55
|
+
error = Benoit::CompilerError.new(nil, input.path, ex)
|
56
|
+
error.message = "You used a block named #{missing_block.inspect}, but I could not find it. Maybe it's misspelled?"
|
57
|
+
raise error
|
53
58
|
end
|
54
59
|
|
55
60
|
output.write compiled
|
@@ -59,14 +64,12 @@ class Benoit::Filters::CadenzaFilter < Rake::Pipeline::Filter
|
|
59
64
|
|
60
65
|
def page_layouts_for_input(input)
|
61
66
|
@page_layouts[input.path] ||=
|
62
|
-
FindsLayoutsForTemplate(input
|
67
|
+
FindsLayoutsForTemplate(input, root: input.root, load_paths: ["_layouts"])
|
63
68
|
end
|
64
69
|
|
65
70
|
def additional_dependencies(input=nil)
|
66
71
|
if input
|
67
|
-
|
68
|
-
f.gsub input.root, ""
|
69
|
-
end
|
72
|
+
page_layouts_for_input(input)
|
70
73
|
else
|
71
74
|
[]
|
72
75
|
end
|
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'redcarpet'
|
2
|
+
require 'kramdown'
|
3
|
+
require 'benoit/utils/finds_layouts_for_template'
|
2
4
|
|
3
5
|
module Benoit::Filters
|
4
6
|
class MarkdownFilter < BaseFilter
|
@@ -7,12 +9,42 @@ module Benoit::Filters
|
|
7
9
|
path.sub(/\.(md|mdown|mkdown|markdown)$/, '.html')
|
8
10
|
end
|
9
11
|
|
10
|
-
build_output do |
|
12
|
+
build_output do |input|
|
13
|
+
input_content = input.read
|
14
|
+
layout = Benoit::Utils::FindsLayoutsForTemplate.first_layout(input_content)
|
15
|
+
preserving_layout(layout, input_content) do |content|
|
16
|
+
render_markdown(:redcarpet, content)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.preserving_layout(layout, content, &block)
|
21
|
+
content = extract_layout(content) if layout
|
22
|
+
output = block.call(content)
|
23
|
+
output = prepend_layout(output, layout) if layout
|
24
|
+
output
|
25
|
+
end
|
11
26
|
|
12
|
-
|
13
|
-
|
27
|
+
def self.extract_layout(content)
|
28
|
+
first_nonblank_line =
|
29
|
+
content.lines.find_index do |line|
|
30
|
+
line !~ /extends/ and line.strip != ""
|
31
|
+
end
|
32
|
+
content.lines.to_a[first_nonblank_line..-1].join("")
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.prepend_layout(final_content, layout)
|
36
|
+
extends_line = %{{% extends "#{layout}" %}\n\n}
|
37
|
+
%{#{extends_line}#{final_content}}
|
38
|
+
end
|
14
39
|
|
15
|
-
|
40
|
+
def self.render_markdown(engine, content, options={})
|
41
|
+
case engine
|
42
|
+
when :redcarpet
|
43
|
+
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, fenced_code_blocks: true, filter_html: true)
|
44
|
+
markdown.render(content)
|
45
|
+
when :kramdown
|
46
|
+
Kramdown::Document.new(content).to_html
|
47
|
+
end
|
16
48
|
end
|
17
49
|
|
18
50
|
end
|