sixones-jekyll 0.4.1 → 0.5.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 CHANGED
@@ -1,4 +1,4 @@
1
- ==
1
+ == 0.5.0 / 2009-04-07
2
2
  * Minor Enhancements
3
3
  * Ability to set post categories via YAML [github.com/qrush]
4
4
  * Ability to set prevent a post from publishing via YAML [github.com/qrush]
@@ -13,6 +13,8 @@
13
13
  * Prevent _posts from being copied to the destination directory [github.com/bdimcheff]
14
14
  * Refactors
15
15
  * Factored the filtering code into a method [github.com/Chrononaut]
16
+ * Fix tests and convert to Shoulda [github.com/qrush, github.com/technicalpickles]
17
+ * Add Cucumber acceptance test suite [github.com/qrush, github.com/technicalpickles]
16
18
 
17
19
  == 0.4.1
18
20
  * Minor Enhancements
data/README.textile CHANGED
@@ -174,6 +174,44 @@ leaf directory resulting in URLs like 2008/11/17/blogging-like-a-hacker/.
174
174
 
175
175
  $ jekyll --permalink [date|none|pretty]
176
176
 
177
+ h2. Configuration File
178
+
179
+ All of the options listed above can be specified on a site-by-site basis in
180
+ a '_config.yml' file at the root of the site's source. As the filename
181
+ suggests, the configuration is given in "YAML":http://www.yaml.org/. As
182
+ well as all of the options discussed in the last section, there are a few
183
+ additional options:
184
+
185
+ destination: [PATH] # Specify where the site should be rendered
186
+ markdown: [maruku|rdiscount] # Which markdown renderer to use?
187
+
188
+ maruku: # This is a YAML hash for Maruku settings
189
+ use_divs: [BOOLEAN] # Use the div element Maruku extension
190
+ use_tex: [BOOLEAN] # Use the LaTeX extension to Maruku
191
+ png_dir: [PATH] # Where should the math PNGs be stored?
192
+ png_url: [URL] # A relative URL for the PNGs
193
+
194
+ The default configuration is shown below as in YAML format:
195
+
196
+ destination: ./_site
197
+ auto: false
198
+ lsi: false
199
+ server_port: 4000
200
+ pygments: false
201
+ markdown: maruku
202
+ permalink: date
203
+ custom_filters: false
204
+
205
+ maruku:
206
+ use_tex: false
207
+ use_divs: false
208
+ png_dir: images/latex
209
+ png_url: /images/latex
210
+
211
+ Parameters set in a configuration file override the default values. Parameters
212
+ set using command line options override both the default values and those set
213
+ in a configuration file.
214
+
177
215
  h2. Data
178
216
 
179
217
  Jekyll traverses your site looking for files to process. Any files with YAML
@@ -333,12 +371,6 @@ Convert an array into a sentence.
333
371
  becomes
334
372
 
335
373
  foo, bar, and baz
336
-
337
- h3. Textilize
338
-
339
- Convert a Textile-formatted string into HTML, formatted via RedCloth
340
-
341
- {{ page.excerpt | textilize }}
342
374
 
343
375
  h3. Custom Filters
344
376
 
@@ -367,9 +399,17 @@ You would then be able to use the filter inside your templates:
367
399
 
368
400
  {{ "arg" | my_filter }}
369
401
 
370
- Custom filters can be disabled by running Jekyll with the disable flag:
402
+ Custom filters can be enable by running Jekyll with the flag:
371
403
 
372
- $ jekyll --disable-custom-filters
404
+ $ jekyll --custom-filters
405
+
406
+ You can also use the <code>custom_filters</code> property in the YML config.
407
+
408
+ h3. Textilize
409
+
410
+ Convert a Textile-formatted string into HTML, formatted via RedCloth
411
+
412
+ {{ page.excerpt | textilize }}
373
413
 
374
414
  h3. Include (Tag)
375
415
 
data/Rakefile ADDED
@@ -0,0 +1,91 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
5
+ begin
6
+ gem 'jeweler', '>= 0.11.0'
7
+ require 'jeweler'
8
+ Jeweler::Tasks.new do |s|
9
+ s.name = "jekyll"
10
+ s.summary = %Q{Jekyll is a simple, blog aware, static site generator.}
11
+ s.email = "tom@mojombo.com"
12
+ s.homepage = "http://github.com/mojombo/jekyll"
13
+ s.description = "Jekyll is a simple, blog aware, static site generator."
14
+ s.authors = ["Tom Preston-Werner"]
15
+ s.rubyforge_project = "jekyll"
16
+ s.files.exclude 'test/dest'
17
+ s.test_files.exclude 'test/dest'
18
+ s.add_dependency('RedCloth', '>= 4.0.4')
19
+ s.add_dependency('liquid', '>= 1.9.0')
20
+ s.add_dependency('classifier', '>= 1.3.1')
21
+ s.add_dependency('maruku', '>= 0.5.9')
22
+ s.add_dependency('directory_watcher', '>= 1.1.1')
23
+ s.add_dependency('open4', '>= 0.9.6')
24
+ end
25
+ rescue LoadError
26
+ puts "Jeweler not available. Install it with: sudo gem install jeweler --version '>= 0.11.0'"
27
+ exit(1)
28
+ end
29
+
30
+ Rake::TestTask.new do |t|
31
+ t.libs << 'lib'
32
+ t.pattern = 'test/**/test_*.rb'
33
+ t.verbose = false
34
+ end
35
+
36
+ Rake::RDocTask.new do |rdoc|
37
+ rdoc.rdoc_dir = 'rdoc'
38
+ rdoc.title = 'jekyll'
39
+ rdoc.options << '--line-numbers' << '--inline-source'
40
+ rdoc.rdoc_files.include('README*')
41
+ rdoc.rdoc_files.include('lib/**/*.rb')
42
+ end
43
+
44
+ begin
45
+ require 'rcov/rcovtask'
46
+ Rcov::RcovTask.new do |t|
47
+ t.libs << 'test'
48
+ t.test_files = FileList['test/**/test_*.rb']
49
+ t.verbose = true
50
+ end
51
+ rescue LoadError
52
+ end
53
+
54
+ task :default => [:test, :features]
55
+
56
+ # console
57
+
58
+ desc "Open an irb session preloaded with this library"
59
+ task :console do
60
+ sh "irb -rubygems -I lib -r jekyll.rb"
61
+ end
62
+
63
+ # converters
64
+
65
+ namespace :convert do
66
+ desc "Migrate from mephisto in the current directory"
67
+ task :mephisto do
68
+ sh %q(ruby -r './lib/jekyll/converters/mephisto' -e 'Jekyll::Mephisto.postgres(:database => "#{ENV["DB"]}")')
69
+ end
70
+ desc "Migrate from Movable Type in the current directory"
71
+ task :mt do
72
+ sh %q(ruby -r './lib/jekyll/converters/mt' -e 'Jekyll::MT.process("#{ENV["DB"]}", "#{ENV["USER"]}", "#{ENV["PASS"]}")')
73
+ end
74
+ desc "Migrate from Typo in the current directory"
75
+ task :typo do
76
+ sh %q(ruby -r './lib/jekyll/converters/typo' -e 'Jekyll::Typo.process("#{ENV["DB"]}", "#{ENV["USER"]}", "#{ENV["PASS"]}")')
77
+ end
78
+ end
79
+
80
+ begin
81
+ require 'cucumber/rake/task'
82
+
83
+ Cucumber::Rake::Task.new(:features) do |t|
84
+ t.cucumber_opts = "--format pretty"
85
+ end
86
+ rescue LoadError
87
+ desc 'Cucumber rake task not available'
88
+ task :features do
89
+ abort 'Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin'
90
+ end
91
+ end
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
- :minor: 4
3
- :patch: 1
4
2
  :major: 0
3
+ :minor: 5
4
+ :patch: 0
data/bin/jekyll CHANGED
@@ -9,66 +9,82 @@ Basic Command Line Usage:
9
9
  jekyll # . -> ./_site
10
10
  jekyll <path to write generated site> # . -> <path>
11
11
  jekyll <path to source> <path to write generated site> # <path> -> <path>
12
-
13
- Options:
12
+
13
+ Configuration is read from '<source>/_config.yaml' but can be overriden
14
+ using the following options:
15
+
14
16
  HELP
15
17
 
16
18
  require 'optparse'
17
19
  require 'jekyll'
18
20
 
21
+ exec = {}
19
22
  options = {}
20
-
21
23
  opts = OptionParser.new do |opts|
22
24
  opts.banner = help
23
25
 
24
26
  opts.on("--auto", "Auto-regenerate") do
25
- options[:auto] = true
27
+ options['auto'] = true
26
28
  end
27
-
29
+
30
+ opts.on("--no-auto", "No auto-regenerate") do
31
+ options['auto'] = false
32
+ end
33
+
28
34
  opts.on("--server [PORT]", "Start web server (default port 4000)") do |port|
29
- options[:server] = true
30
- options[:server_port] = port || 4000
35
+ options['server'] = true
36
+ options['server_port'] = port unless port.nil?
31
37
  end
32
-
38
+
33
39
  opts.on("--lsi", "Use LSI for better related posts") do
34
- Jekyll.lsi = true
40
+ options['lsi'] = true
35
41
  end
36
-
42
+
37
43
  opts.on("--pygments", "Use pygments to highlight code") do
38
- Jekyll.pygments = true
44
+ options['pygments'] = true
39
45
  end
40
46
 
41
- opts.on("--rdiscount", "Use rdiscount gem for Markdown") do
42
- begin
43
- require 'rdiscount'
44
- Jekyll.markdown_proc = Proc.new { |x| RDiscount.new(x).to_html }
45
- puts 'Using rdiscount for Markdown'
46
- rescue LoadError
47
- puts 'You must have the rdiscount gem installed first'
48
- end
47
+ opts.on("--custom-filters", "Use custom filters in the _filters dir") do
48
+ options['custom_filters'] = true
49
49
  end
50
-
51
- opts.on("--permalink [TYPE]", "Use 'date' (default) for YYYY/MM/DD") do |style|
52
- Jekyll.permalink_style = (style || 'date').to_sym
50
+
51
+ opts.on("--rdiscount", "Use rdiscount gem for Markdown") do
52
+ options['markdown'] = 'rdiscount'
53
53
  end
54
-
55
- opts.on("--disable-custom-filters", "Disable's custom filters") do
56
- Jekyll.custom_filters = false
54
+
55
+ opts.on("--permalink [TYPE]", "Use 'date' (default) for YYYY/MM/DD") do |style|
56
+ options['permalink'] = style unless style.nil?
57
57
  end
58
-
58
+
59
59
  opts.on("--version", "Display current version") do
60
60
  puts "Jekyll " + Jekyll.version
61
61
  exit 0
62
62
  end
63
63
  end
64
64
 
65
+ # Read command line options into `options` hash
65
66
  opts.parse!
66
67
 
67
- def clean(dest)
68
- FileUtils.rm_rf(dest)
69
- FileUtils.mkdir_p(dest)
68
+ # Get source and destintation from command line
69
+ case ARGV.size
70
+ when 0
71
+ when 1
72
+ options['destination'] = ARGV[0]
73
+ when 2
74
+ options['source'] = ARGV[0]
75
+ options['destination'] = ARGV[1]
76
+ else
77
+ puts "Invalid options. Run `jekyll --help` for assistance."
78
+ exit(1)
70
79
  end
71
80
 
81
+ options = Jekyll.configuration(options)
82
+
83
+ # Get source and destination directories (possibly set by config file)
84
+ source = options['source']
85
+ destination = options['destination']
86
+
87
+ # Files to watch
72
88
  def globs(source)
73
89
  Dir.chdir(source) do
74
90
  dirs = Dir['*'].select { |x| File.directory?(x) }
@@ -78,63 +94,51 @@ def globs(source)
78
94
  end
79
95
  end
80
96
 
81
- source = nil
82
- destination = nil
83
-
84
- case ARGV.size
85
- when 0
86
- source = '.'
87
- destination = File.join('.', '_site')
88
- when 1
89
- source = '.'
90
- destination = ARGV[0]
91
- when 2
92
- source = ARGV[0]
93
- destination = ARGV[1]
94
- else
95
- puts "Invalid options. Run `jekyll --help` for assistance."
96
- exit(1)
97
- end
97
+ # Create the Site
98
+ site = Jekyll::Site.new(options)
98
99
 
99
- if options[:auto]
100
+ # Run the directory watcher for auto-generation, if required
101
+ if options['auto']
100
102
  require 'directory_watcher'
101
103
 
102
104
  puts "Auto-regenerating enabled: #{source} -> #{destination}"
103
-
105
+
104
106
  dw = DirectoryWatcher.new(source)
105
107
  dw.interval = 1
106
108
  dw.glob = globs(source)
107
-
109
+
108
110
  dw.add_observer do |*args|
109
111
  t = Time.now.strftime("%Y-%m-%d %H:%M:%S")
110
112
  puts "[#{t}] regeneration: #{args.size} files changed"
111
- Jekyll.process(source, destination)
113
+ site.process
112
114
  end
113
-
115
+
114
116
  dw.start
115
-
116
- unless options[:server]
117
+
118
+ unless options['server']
117
119
  loop { sleep 1000 }
118
120
  end
119
121
  else
120
- Jekyll.process(source, destination)
121
- puts "Successfully generated site in #{destination}"
122
+ puts "Building site: #{source} -> #{destination}"
123
+ site.process
124
+ puts "Successfully generated site: #{source} -> #{destination}"
122
125
  end
123
126
 
124
- if options[:server]
127
+ # Run the server on the specified port, if required
128
+ if options['server']
125
129
  require 'webrick'
126
130
  include WEBrick
127
-
131
+
128
132
  FileUtils.mkdir_p(destination)
129
133
 
130
134
  s = HTTPServer.new(
131
- :Port => options[:server_port],
135
+ :Port => options['server_port'],
132
136
  :DocumentRoot => destination
133
137
  )
134
138
  t = Thread.new {
135
139
  s.start
136
140
  }
137
-
141
+
138
142
  trap("INT") { s.shutdown }
139
143
  t.join()
140
144
  end
data/lib/jekyll/albino.rb CHANGED
@@ -38,7 +38,7 @@
38
38
  #
39
39
  # To see all lexers and formatters available, run `pygmentize -L`.
40
40
  #
41
- # Chris Wanstrath // chris@ozmm.org
41
+ # Chris Wanstrath // chris@ozmm.org
42
42
  # GitHub // http://github.com
43
43
  #
44
44
  require 'open4'
@@ -13,7 +13,7 @@ require File.join(File.dirname(__FILE__),"csv.rb")
13
13
  # installed, running the following commands should work:
14
14
  # $ sudo gem install sequel
15
15
  # $ sudo gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
16
-
16
+
17
17
  module Jekyll
18
18
  module Mephisto
19
19
  #Accepts a hash with database config variables, exports mephisto posts into a csv
@@ -38,24 +38,24 @@ module Jekyll
38
38
  # through the created posts to make sure nothing is accidently published.
39
39
 
40
40
  QUERY = "SELECT id, permalink, body, published_at, title FROM contents WHERE user_id = 1 AND type = 'Article' AND published_at IS NOT NULL ORDER BY published_at"
41
-
41
+
42
42
  def self.process(dbname, user, pass, host = 'localhost')
43
43
  db = Sequel.mysql(dbname, :user => user, :password => pass, :host => host)
44
-
44
+
45
45
  FileUtils.mkdir_p "_posts"
46
-
46
+
47
47
  db[QUERY].each do |post|
48
48
  title = post[:title]
49
49
  slug = post[:permalink]
50
50
  date = post[:published_at]
51
51
  content = post[:body]
52
52
  # more_content = ''
53
-
53
+
54
54
  # Be sure to include the body and extended body.
55
55
  # if more_content != nil
56
56
  # content = content + " \n" + more_content
57
57
  # end
58
-
58
+
59
59
  # Ideally, this script would determine the post format (markdown, html
60
60
  # , etc) and create files with proper extensions. At this point it
61
61
  # just assumes that markdown will be acceptable.
@@ -66,14 +66,14 @@ module Jekyll
66
66
  'title' => title.to_s,
67
67
  'mt_id' => post[:entry_id],
68
68
  }.delete_if { |k,v| v.nil? || v == ''}.to_yaml
69
-
69
+
70
70
  File.open("_posts/#{name}", "w") do |f|
71
71
  f.puts data
72
72
  f.puts "---"
73
73
  f.puts content
74
74
  end
75
75
  end
76
-
76
+
77
77
  end
78
78
  end
79
79
  end
@@ -11,31 +11,31 @@ require 'fileutils'
11
11
  # installed, running the following commands should work:
12
12
  # $ sudo gem install sequel
13
13
  # $ sudo gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
14
-
14
+
15
15
  module Jekyll
16
16
  module MT
17
17
  # This query will pull blog posts from all entries across all blogs. If
18
18
  # you've got unpublished, deleted or otherwise hidden posts please sift
19
19
  # through the created posts to make sure nothing is accidently published.
20
20
  QUERY = "SELECT entry_id, entry_basename, entry_text, entry_text_more, entry_created_on, entry_title FROM mt_entry"
21
-
21
+
22
22
  def self.process(dbname, user, pass, host = 'localhost')
23
23
  db = Sequel.mysql(dbname, :user => user, :password => pass, :host => host)
24
-
24
+
25
25
  FileUtils.mkdir_p "_posts"
26
-
26
+
27
27
  db[QUERY].each do |post|
28
28
  title = post[:entry_title]
29
29
  slug = post[:entry_basename]
30
30
  date = post[:entry_created_on]
31
31
  content = post[:entry_text]
32
32
  more_content = post[:entry_text_more]
33
-
33
+
34
34
  # Be sure to include the body and extended body.
35
35
  if more_content != nil
36
36
  content = content + " \n" + more_content
37
37
  end
38
-
38
+
39
39
  # Ideally, this script would determine the post format (markdown, html
40
40
  # , etc) and create files with proper extensions. At this point it
41
41
  # just assumes that markdown will be acceptable.
@@ -46,14 +46,14 @@ module Jekyll
46
46
  'title' => title.to_s,
47
47
  'mt_id' => post[:entry_id],
48
48
  }.delete_if { |k,v| v.nil? || v == ''}.to_yaml
49
-
49
+
50
50
  File.open("_posts/#{name}", "w") do |f|
51
51
  f.puts data
52
52
  f.puts "---"
53
53
  f.puts content
54
54
  end
55
55
  end
56
-
56
+
57
57
  end
58
58
  end
59
59
  end
@@ -18,20 +18,20 @@ module Jekyll
18
18
 
19
19
  def self.process(dbname, user, pass, host = 'localhost')
20
20
  db = Sequel.mysql(dbname, :user => user, :password => pass, :host => host)
21
-
21
+
22
22
  FileUtils.mkdir_p "_posts"
23
-
23
+
24
24
  db[QUERY].each do |post|
25
25
  # Get required fields and construct Jekyll compatible name
26
26
  title = post[:Title]
27
27
  slug = post[:url_title]
28
28
  date = post[:Posted]
29
29
  content = post[:Body]
30
-
30
+
31
31
  name = [date.strftime("%Y-%m-%d"), slug].join('-') + ".textile"
32
32
 
33
33
  # Get the relevant fields as a hash, delete empty fields and convert
34
- # to YAML for the header
34
+ # to YAML for the header
35
35
  data = {
36
36
  'layout' => 'post',
37
37
  'title' => title.to_s,
@@ -2,22 +2,22 @@
2
2
  require 'fileutils'
3
3
  require 'rubygems'
4
4
  require 'sequel'
5
-
5
+
6
6
  module Jekyll
7
7
  module Typo
8
- # this SQL *should* work for both MySQL and PostgreSQL, but I haven't
8
+ # this SQL *should* work for both MySQL and PostgreSQL, but I haven't
9
9
  # tested PostgreSQL yet (as of 2008-12-16)
10
10
  SQL = <<-EOS
11
11
  SELECT c.id id,
12
- c.title title,
13
- c.permalink slug,
12
+ c.title title,
13
+ c.permalink slug,
14
14
  c.body body,
15
- c.published_at date,
15
+ c.published_at date,
16
16
  c.state state,
17
17
  COALESCE(tf.name, 'html') filter
18
- FROM contents c
18
+ FROM contents c
19
19
  LEFT OUTER JOIN text_filters tf
20
- ON c.text_filter_id = tf.id
20
+ ON c.text_filter_id = tf.id
21
21
  EOS
22
22
 
23
23
  def self.process dbname, user, pass, host='localhost'
@@ -30,7 +30,7 @@ module Jekyll
30
30
  sprintf("%.02d", post[:date].month),
31
31
  sprintf("%.02d", post[:date].day),
32
32
  post[:slug].strip ].join('-')
33
- # Can have more than one text filter in this field, but we just want
33
+ # Can have more than one text filter in this field, but we just want
34
34
  # the first one for this
35
35
  name += '.' + post[:filter].split(' ')[0]
36
36
 
@@ -28,7 +28,6 @@ module Jekyll
28
28
  slug = post[:post_name]
29
29
  date = post[:post_date]
30
30
  content = post[:post_content]
31
-
32
31
  name = "%02d-%02d-%02d-%s.markdown" % [date.year, date.month, date.day,
33
32
  slug]
34
33
 
@@ -1,10 +1,15 @@
1
+ # Convertible provides methods for converting a pagelike item
2
+ # from a certain type of markup into actual content
3
+ #
4
+ # Requires
5
+ # self.site -> Jekyll::Site
1
6
  module Jekyll
2
7
  module Convertible
3
8
  # Return the contents as a string
4
9
  def to_s
5
10
  self.content || ''
6
11
  end
7
-
12
+
8
13
  # Read the YAML frontmatter
9
14
  # +base+ is the String path to the dir containing the file
10
15
  # +name+ is the String filename of the file
@@ -12,58 +17,64 @@ module Jekyll
12
17
  # Returns nothing
13
18
  def read_yaml(base, name)
14
19
  self.content = File.read(File.join(base, name))
15
-
20
+
16
21
  if self.content =~ /^(---\s*\n.*?)\n---\s*\n/m
17
22
  self.content = self.content[($1.size + 5)..-1]
18
-
23
+
19
24
  self.data = YAML.load($1)
20
25
  end
21
26
  end
22
-
27
+
23
28
  # Transform the contents based on the file extension.
24
29
  #
25
30
  # Returns nothing
26
31
  def transform
27
- case Jekyll.content_type
28
- when :textile
32
+ case self.content_type
33
+ when 'textile'
29
34
  self.ext = ".html"
30
- self.content = RedCloth.new(self.content).to_html
31
- when :markdown
35
+ self.content = self.site.textile(self.content)
36
+ when 'markdown'
32
37
  self.ext = ".html"
33
- self.content = Jekyll.markdown_proc.call(self.content)
38
+ self.content = self.site.markdown(self.content)
34
39
  end
35
40
  end
36
-
37
- def determine_content_type
41
+
42
+ # Determine which formatting engine to use based on this convertible's
43
+ # extension
44
+ #
45
+ # Returns one of :textile, :markdown or :unknown
46
+ def content_type
38
47
  case self.ext[1..-1]
39
48
  when /textile/i
40
- return :textile
49
+ return 'textile'
41
50
  when /markdown/i, /mkdn/i, /md/i
42
- return :markdown
43
- end
44
- return :unknown
51
+ return 'markdown'
52
+ end
53
+ return 'unknown'
45
54
  end
46
-
55
+
47
56
  # Add any necessary layouts to this convertible document
48
57
  # +layouts+ is a Hash of {"name" => "layout"}
49
58
  # +site_payload+ is the site payload hash
50
59
  #
51
60
  # Returns nothing
52
61
  def do_layout(payload, layouts)
62
+ info = { :filters => [Jekyll::Filters, Jekyll::Filters::Custom.extensions], :registers => { :site => self.site } }
63
+
53
64
  # render and transform content (this becomes the final content of the object)
54
- Jekyll.content_type = self.determine_content_type
55
- self.content = Liquid::Template.parse(self.content).render(payload, [Jekyll::Filters, Jekyll::Filters::Custom.extensions])
65
+ payload["content_type"] = self.content_type
66
+ self.content = Liquid::Template.parse(self.content).render(payload, info)
56
67
  self.transform
57
-
68
+
58
69
  # output keeps track of what will finally be written
59
70
  self.output = self.content
60
-
71
+
61
72
  # recursively render layouts
62
73
  layout = layouts[self.data["layout"]]
63
74
  while layout
64
75
  payload = payload.deep_merge({"content" => self.output, "page" => layout.data})
65
- self.output = Liquid::Template.parse(layout.content).render(payload, [Jekyll::Filters, Jekyll::Filters::Custom.extensions])
66
-
76
+ self.output = Liquid::Template.parse(layout.content).render(payload, info)
77
+
67
78
  layout = layouts[layout.data["layout"]]
68
79
  end
69
80
  end