Module: Jekyll::Convertible

Included in:
Layout, Page, Post
Defined in:
lib/jekyll/convertible.rb

Instance Method Summary collapse

Instance Method Details

#converterObject

Determine which converter to use based on this convertible’s extension.

Returns the Converter instance.



61
62
63
# File 'lib/jekyll/convertible.rb', line 61

def converter
  @converter ||= self.site.converters.find { |c| c.matches(self.ext) }
end

#do_layout(payload, layouts) ⇒ Object

Add any necessary layouts to this convertible document.

payload - The site payload Hash. layouts - A Hash of => “layout”.

Returns nothing.



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/jekyll/convertible.rb', line 71

def do_layout(payload, layouts)
  info = { :filters => [Jekyll::Filters], :registers => { :site => self.site } }

  # render and transform content (this becomes the final content of the object)
  payload["pygments_prefix"] = converter.pygments_prefix
  payload["pygments_suffix"] = converter.pygments_suffix

  begin
    self.content = Liquid::Template.parse(self.content).render(payload, info)
  rescue => e
    puts "Liquid Exception: #{e.message} in #{self.name}"
  end

  self.transform

  # output keeps track of what will finally be written
  self.output = self.content

  # recursively render layouts
  layout = layouts[self.data["layout"]]
  used = Set.new([layout])

  while layout
    payload = payload.deep_merge({"content" => self.output, "page" => layout.data})

    begin
      self.output = Liquid::Template.parse(layout.content).render(payload, info)
    rescue => e
      puts "Liquid Exception: #{e.message} in #{self.data["layout"]}"
    end

    if layout = layouts[layout.data["layout"]]
      if used.include?(layout)
        layout = nil # avoid recursive chain
      else
        used << layout
      end
    end
  end
end

#output_extObject

Determine the extension depending on content_type.

Returns the String extension for the output file.

e.g. ".html" for an HTML output file.


53
54
55
# File 'lib/jekyll/convertible.rb', line 53

def output_ext
  converter.output_ext(self.ext)
end

#read_yaml(base, name) ⇒ Object

Read the YAML frontmatter.

base - The String path to the dir containing the file. name - The String filename of the file.

Returns nothing.



27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/jekyll/convertible.rb', line 27

def read_yaml(base, name)
  self.content = File.read(File.join(base, name))

  begin
    if self.content =~ /^(---\s*\n.*?\n?)^(---\s*$\n?)/m
      self.content = $POSTMATCH
      self.data = YAML.load($1)
    end
  rescue => e
    puts "YAML Exception reading #{name}: #{e.message}"
  end

  self.data ||= {}
end

#to_sObject

Returns the contents as a String.



17
18
19
# File 'lib/jekyll/convertible.rb', line 17

def to_s
  self.content || ''
end

#transformObject

Transform the contents based on the content type.

Returns nothing.



45
46
47
# File 'lib/jekyll/convertible.rb', line 45

def transform
  self.content = converter.convert(self.content)
end