jekyll-rendering 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +7 -0
- data/README +12 -1
- data/lib/jekyll/rendering/version.rb +1 -1
- data/lib/jekyll/rendering.rb +84 -35
- metadata +4 -4
data/ChangeLog
CHANGED
data/README
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
== VERSION
|
4
4
|
|
5
|
-
This documentation refers to jekyll-rendering version 0.0.
|
5
|
+
This documentation refers to jekyll-rendering version 0.0.2
|
6
6
|
|
7
7
|
|
8
8
|
== DESCRIPTION
|
@@ -16,6 +16,11 @@ Add the following to your <tt>_plugins/ext.rb</tt> file:
|
|
16
16
|
Then set +engine+ in your <tt>_config.yml</tt>. The default engine is +liquid+.
|
17
17
|
|
18
18
|
|
19
|
+
== TODO
|
20
|
+
|
21
|
+
* Automatic engine detection by file extension? (<tt><NAME>.<FORMAT>.<ENGINE></tt>)
|
22
|
+
|
23
|
+
|
19
24
|
== LINKS
|
20
25
|
|
21
26
|
<b></b>
|
@@ -29,6 +34,12 @@ RubyGem:: <http://rubygems.org/gems/jekyll-rendering>
|
|
29
34
|
* Jens Wille <mailto:jens.wille@uni-koeln.de>
|
30
35
|
|
31
36
|
|
37
|
+
== CREDITS
|
38
|
+
|
39
|
+
* Arne Eilermann <mailto:arne.eilermann@uni-koeln.de> for the original idea
|
40
|
+
and implementation.
|
41
|
+
|
42
|
+
|
32
43
|
== LICENSE AND COPYRIGHT
|
33
44
|
|
34
45
|
Copyright (C) 2010 University of Cologne,
|
data/lib/jekyll/rendering.rb
CHANGED
@@ -36,6 +36,9 @@ module Jekyll
|
|
36
36
|
|
37
37
|
module Convertible
|
38
38
|
|
39
|
+
alias_method :_rendering_original_do_layout, :do_layout
|
40
|
+
|
41
|
+
# Overwrites the original method to use the configured rendering engine.
|
39
42
|
def do_layout(payload, layouts)
|
40
43
|
info = { :filters => [Jekyll::Filters], :registers => { :site => site } }
|
41
44
|
|
@@ -58,6 +61,11 @@ module Jekyll
|
|
58
61
|
end
|
59
62
|
end
|
60
63
|
|
64
|
+
# call-seq:
|
65
|
+
# engine => aClass
|
66
|
+
#
|
67
|
+
# Returns the Engine class according to the configuration setting for
|
68
|
+
# +engine+ (see subclasses of Engine::Base). Defaults to Engine::Liquid.
|
61
69
|
def engine
|
62
70
|
@engine ||= Engine[site.config['engine'] ||= 'liquid']
|
63
71
|
end
|
@@ -66,12 +74,20 @@ module Jekyll
|
|
66
74
|
|
67
75
|
module Engine
|
68
76
|
|
77
|
+
# call-seq:
|
78
|
+
# Engine[engine] => aClass
|
79
|
+
#
|
80
|
+
# Returns the subclass whose name corresponds to +engine+.
|
69
81
|
def self.[](engine)
|
70
82
|
const_get(engine.capitalize)
|
71
83
|
end
|
72
84
|
|
73
85
|
class Base
|
74
86
|
|
87
|
+
# call-seq:
|
88
|
+
# Engine::Base.render(*args)
|
89
|
+
#
|
90
|
+
# Renders the output. Defers to engine's render method.
|
75
91
|
def self.render(payload, content, info, layout = nil)
|
76
92
|
new(payload, content, info).render(layout || content)
|
77
93
|
end
|
@@ -83,6 +99,10 @@ module Jekyll
|
|
83
99
|
@payload, @content, @info = payload, content, info
|
84
100
|
end
|
85
101
|
|
102
|
+
# call-seq:
|
103
|
+
# render
|
104
|
+
#
|
105
|
+
# Renders the output. Must be implemented by subclass.
|
86
106
|
def render
|
87
107
|
raise NotImplementedError
|
88
108
|
end
|
@@ -91,6 +111,12 @@ module Jekyll
|
|
91
111
|
|
92
112
|
class Liquid < Base
|
93
113
|
|
114
|
+
# call-seq:
|
115
|
+
# engine.render
|
116
|
+
# engine.render(content)
|
117
|
+
#
|
118
|
+
# Renders the +content+ using ::Liquid::Template::parse and then
|
119
|
+
# calling ::Liquid::Template#render with +payload+ and +info+.
|
94
120
|
def render(content = content)
|
95
121
|
::Liquid::Template.parse(content).render(payload, info)
|
96
122
|
end
|
@@ -104,7 +130,7 @@ module Jekyll
|
|
104
130
|
def initialize(*args)
|
105
131
|
super
|
106
132
|
|
107
|
-
info[:filters].each { |
|
133
|
+
[Helpers, *info[:filters]].each { |mod| extend mod }
|
108
134
|
|
109
135
|
%w[site page paginator].each { |key|
|
110
136
|
value = payload[key] or next
|
@@ -112,58 +138,81 @@ module Jekyll
|
|
112
138
|
}
|
113
139
|
end
|
114
140
|
|
141
|
+
# call-seq:
|
142
|
+
# engine.render => aString
|
143
|
+
# engine.render(content) => aString
|
144
|
+
# engine.render(content, binding) => aString
|
145
|
+
#
|
146
|
+
# Renders the +content+ as ERB template. Uses optional +binding+
|
147
|
+
# if provided.
|
115
148
|
def render(content = content, binding = binding)
|
116
149
|
::ERB.new(content).result(binding)
|
117
150
|
end
|
118
151
|
|
119
|
-
|
120
|
-
|
121
|
-
|
152
|
+
module Helpers
|
153
|
+
|
154
|
+
# call-seq:
|
155
|
+
# include_file file => aString
|
156
|
+
# include_file file, binding => aString
|
157
|
+
#
|
158
|
+
# Includes file +file+ from <tt>_includes</tt> directory rendered
|
159
|
+
# as ERB template. Uses optional +binding+ if provided.
|
160
|
+
def include_file(file, binding = binding)
|
161
|
+
Dir.chdir(File.join(site.source, '_includes')) {
|
162
|
+
@choices ||= Dir['**/*'].reject { |x| File.symlink?(x) }
|
163
|
+
|
164
|
+
if @choices.include?(file = file.strip)
|
165
|
+
render(File.read(file), binding)
|
166
|
+
else
|
167
|
+
"Included file '#{file}' not found in _includes directory"
|
168
|
+
end
|
169
|
+
}
|
170
|
+
end
|
122
171
|
|
123
|
-
|
124
|
-
|
172
|
+
# call-seq:
|
173
|
+
# highlight text => aString
|
174
|
+
# highlight text, lang => aString
|
175
|
+
#
|
176
|
+
# Highlights +text+ according to +lang+ (defaults to Ruby).
|
177
|
+
def highlight(text, lang = :ruby)
|
178
|
+
if site.pygments
|
179
|
+
render_pygments(text, lang)
|
125
180
|
else
|
126
|
-
|
181
|
+
render_codehighlighter(text, lang)
|
127
182
|
end
|
128
|
-
}
|
129
|
-
end
|
130
|
-
|
131
|
-
def highlight(text, lang = :ruby)
|
132
|
-
if site.pygments
|
133
|
-
render_pygments(text, lang)
|
134
|
-
else
|
135
|
-
render_codehighlighter(text, lang)
|
136
183
|
end
|
137
|
-
end
|
138
184
|
|
139
|
-
|
185
|
+
protected
|
140
186
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
187
|
+
def render_pygments(text, lang)
|
188
|
+
output = add_code_tags(Albino.new(text, lang).to_s, lang)
|
189
|
+
"#{payload['pygments_prefix']}#{output}#{payload['pygments_suffix']}"
|
190
|
+
end
|
145
191
|
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
<div>
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
</div>
|
154
|
-
|
155
|
-
|
192
|
+
def render_codehighlighter(text, lang)
|
193
|
+
#The div is required because RDiscount blows ass
|
194
|
+
<<-HTML
|
195
|
+
<div>
|
196
|
+
<pre>
|
197
|
+
<code class="#{lang}">#{h(text).strip}</code>
|
198
|
+
</pre>
|
199
|
+
</div>
|
200
|
+
HTML
|
201
|
+
end
|
202
|
+
|
203
|
+
def add_code_tags(code, lang)
|
204
|
+
# Add nested <code> tags to code blocks
|
205
|
+
code.sub(%r{<pre>}, %Q{<pre><code class="#{lang}">}).
|
206
|
+
sub(%r{</pre>}, %q{</code></pre>})
|
207
|
+
end
|
156
208
|
|
157
|
-
def add_code_tags(code, lang)
|
158
|
-
# Add nested <code> tags to code blocks
|
159
|
-
code.sub(%r{<pre>}, %Q{<pre><code class="#{lang}">}).
|
160
|
-
sub(%r{</pre>}, %q{</code></pre>})
|
161
209
|
end
|
162
210
|
|
163
211
|
end
|
164
212
|
|
165
213
|
end
|
166
214
|
|
215
|
+
# Provide an engine-agnostic name for the hash representation.
|
167
216
|
[Post, Page, Pager].each { |klass|
|
168
217
|
klass.send(:alias_method, :to_hash, :to_liquid)
|
169
218
|
}
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-rendering
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jens Wille
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-07-01 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|