Module: Jekyll::Convertible

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

Instance Method Summary collapse

Instance Method Details

#determine_content_typeObject



37
38
39
40
41
42
43
44
45
# File 'lib/jekyll/convertible.rb', line 37

def determine_content_type
  case self.ext[1..-1]
  when /textile/i
    return :textile
  when /markdown/i, /mkdn/i, /md/i
    return :markdown
  end      
  return :unknown
end

#do_layout(payload, layouts) ⇒ Object

Add any necessary layouts to this convertible document

+layouts+ is a Hash of {"name" => "layout"}
+site_payload+ is the site payload hash

Returns nothing



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/jekyll/convertible.rb', line 52

def do_layout(payload, layouts)
  # render and transform content (this becomes the final content of the object)
  Jekyll.content_type = self.determine_content_type
  self.content = Liquid::Template.parse(self.content).render(payload, [Jekyll::Filters])
  self.transform
  
  # output keeps track of what will finally be written
  self.output = self.content
  
  # recursively render layouts
  layout = layouts[self.data["layout"]]
  while layout
    payload = payload.deep_merge({"content" => self.output, "page" => layout.data})
    self.output = Liquid::Template.parse(layout.content).render(payload, [Jekyll::Filters])
    
    layout = layouts[layout.data["layout"]]
  end
end

#read_yaml(base, name) ⇒ Object

Read the YAML frontmatter

+base+ is the String path to the dir containing the file
+name+ is the String filename of the file

Returns nothing



13
14
15
16
17
18
19
20
21
# File 'lib/jekyll/convertible.rb', line 13

def read_yaml(base, name)
  self.content = File.read(File.join(base, name))
  
  if self.content =~ /^(---\s*\n.*?)\n---\s*\n/m
    self.content = self.content[($1.size + 5)..-1]
    
    self.data = YAML.load($1)
  end
end

#to_sObject

Return the contents as a string



4
5
6
# File 'lib/jekyll/convertible.rb', line 4

def to_s
  self.content || ''
end

#transformObject

Transform the contents based on the file extension.

Returns nothing



26
27
28
29
30
31
32
33
34
35
# File 'lib/jekyll/convertible.rb', line 26

def transform
  case Jekyll.content_type
  when :textile
    self.ext = ".html"
    self.content = RedCloth.new(self.content).to_html
  when :markdown
    self.ext = ".html"
    self.content = Jekyll.markdown_proc.call(self.content)
  end
end