jekyll_prism 0.0.2 → 0.0.3
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 +4 -4
- data/jekyll_prism.gemspec +1 -1
- data/lib/jekyll_prism.rb +66 -14
- data/spec/jekyll_prism_spec.rb +14 -17
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a398817e4968243916001ca1528b3ef128cf1ec0
|
4
|
+
data.tar.gz: 173cb2f846cb487513110c4e209c63075276d3f7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2142b37f4d919e863ee38c672242c885fb58f85cc39bdd98755fa4052bc01f3279a2efa41030ee972ee736c2ee602b77e3745faf57a0e60d5991005d13c00106
|
7
|
+
data.tar.gz: 902af7f4ce3a0b87bb7b3de96211b29ec9167f2fe9f3388229e3eb4ae190a33ee4de8502c0c7ac5e6476ef8ef15b95d19d3a9e17906f908cda372b8ac21812df
|
data/jekyll_prism.gemspec
CHANGED
data/lib/jekyll_prism.rb
CHANGED
@@ -1,5 +1,61 @@
|
|
1
1
|
require 'liquid'
|
2
2
|
|
3
|
+
##
|
4
|
+
# Helpers for defining code HTML
|
5
|
+
module PrismHelpers
|
6
|
+
def parse_args(args)
|
7
|
+
args.each_with_object({}) do |arg, hash|
|
8
|
+
value, key = arg.split('=').reverse
|
9
|
+
key ||= 'lang'
|
10
|
+
hash[key.to_sym] = value
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def pre_attrs(opts)
|
15
|
+
s = ' class="'
|
16
|
+
s = add_line_numbers(s, opts)
|
17
|
+
s = add_lang(s, opts) if opts.include? :source
|
18
|
+
s << '"'
|
19
|
+
s = add_line_start(s, opts) unless [nil, 1].include? opts[:numbers]
|
20
|
+
s = add_source(s, opts) if opts.include? :source
|
21
|
+
s = add_highlights(s, opts) if opts.include? :highlights
|
22
|
+
s
|
23
|
+
end
|
24
|
+
|
25
|
+
def code_attrs(opts)
|
26
|
+
s = ' class="'
|
27
|
+
s = add_lang(s, opts) unless opts.include? :source
|
28
|
+
s << '"'
|
29
|
+
end
|
30
|
+
|
31
|
+
def add_line_numbers(s, opts)
|
32
|
+
s << 'line-numbers ' if opts.include? :numbers
|
33
|
+
s
|
34
|
+
end
|
35
|
+
|
36
|
+
def add_lang(s, opts)
|
37
|
+
s << "language-#{opts[:lang]}" if opts.include? :lang
|
38
|
+
s
|
39
|
+
end
|
40
|
+
|
41
|
+
def add_line_start(s, opts)
|
42
|
+
s << %Q( data-start="#{opts[:numbers]}")
|
43
|
+
end
|
44
|
+
|
45
|
+
def add_highlights(s, opts)
|
46
|
+
lines = if opts[:highlights] == 'all'
|
47
|
+
"1-#{opts[:linecount]}"
|
48
|
+
else
|
49
|
+
opts[:highlights]
|
50
|
+
end
|
51
|
+
s << %Q( data-line="#{lines}")
|
52
|
+
end
|
53
|
+
|
54
|
+
def add_source(s, opts)
|
55
|
+
s << %Q( data-src="#{opts[:source]}")
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
3
59
|
##
|
4
60
|
# Extend Jekyll to provide Prism helper blocks and tags
|
5
61
|
module Jekyll
|
@@ -7,23 +63,19 @@ module Jekyll
|
|
7
63
|
# Block object for Prism hilighting
|
8
64
|
class CodeBlock < Liquid::Block
|
9
65
|
include Liquid::StandardFilters
|
66
|
+
include PrismHelpers
|
10
67
|
|
11
68
|
def initialize(a, args, b)
|
12
69
|
super
|
13
|
-
options = args.split
|
14
|
-
@lang, @linenos = options.shift 2
|
15
|
-
true
|
70
|
+
@options = parse_args args.split
|
16
71
|
end
|
17
72
|
|
18
73
|
def render(_)
|
19
74
|
code = h(super).strip
|
20
|
-
|
21
|
-
linenos = @linenos == 'all' ? "1-#{code.lines.count}" : @linenos
|
22
|
-
linestring = linenos.nil? ? '' : %Q( data-line="#{linenos}")
|
23
|
-
langstring = @lang.nil? ? '' : %Q( class="language-#{@lang}")
|
75
|
+
@options[:linecount] = code.lines.count
|
24
76
|
|
25
77
|
<<-OUTPUT
|
26
|
-
<pre#{
|
78
|
+
<pre#{pre_attrs @options}><code#{code_attrs @options}>
|
27
79
|
#{code}
|
28
80
|
</code></pre>
|
29
81
|
OUTPUT
|
@@ -33,17 +85,17 @@ module Jekyll
|
|
33
85
|
##
|
34
86
|
# Tag object for Prism hilighting
|
35
87
|
class CodeTag < Liquid::Tag
|
88
|
+
include PrismHelpers
|
89
|
+
|
36
90
|
def initialize(_, args, _)
|
37
91
|
super
|
38
|
-
|
39
|
-
|
92
|
+
args = args.split
|
93
|
+
args[0] = "source=#{args[0]}"
|
94
|
+
@options = parse_args args
|
40
95
|
end
|
41
96
|
|
42
97
|
def render(_)
|
43
|
-
|
44
|
-
langstring = @lang.nil? ? '' : %Q( class="language-#{@lang}")
|
45
|
-
|
46
|
-
%Q(<pre data-src="#{@file}"#{langstring}#{linestring}></pre>)
|
98
|
+
%Q(<pre#{pre_attrs @options}></pre>)
|
47
99
|
end
|
48
100
|
end
|
49
101
|
end
|
data/spec/jekyll_prism_spec.rb
CHANGED
@@ -9,31 +9,28 @@ end
|
|
9
9
|
describe Jekyll::CodeBlock do
|
10
10
|
it 'renders code blocks' do
|
11
11
|
code = '{% code %}foobar{% endcode %}'
|
12
|
-
result = "<pre><code>\nfoobar\n</code></pre>\n"
|
12
|
+
result = "<pre class=\"\"><code class=\"\">\nfoobar\n</code></pre>\n"
|
13
13
|
test_template code, result
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'accepts a language parameter' do
|
17
17
|
code = '{% code ruby %}foobar{% endcode %}'
|
18
|
-
result = "<pre><code class=\"language-ruby\"
|
18
|
+
result = "<pre class=\"\"><code class=\"language-ruby\">
|
19
|
+
foobar\n</code></pre>\n"
|
19
20
|
test_template code, result
|
20
21
|
end
|
21
22
|
|
22
23
|
describe 'accepts a linenos parameter' do
|
23
24
|
it 'as line numbers' do
|
24
|
-
code = '{% code ruby 1,3-5,10 %}foobar{% endcode %}'
|
25
|
-
result = "<pre data-line=\"1,3-5,10\"
|
26
|
-
|
27
|
-
</code></pre>\n"
|
25
|
+
code = '{% code ruby highlights=1,3-5,10 %}foobar{% endcode %}'
|
26
|
+
result = "<pre class=\"\" data-line=\"1,3-5,10\">" \
|
27
|
+
"<code class=\"language-ruby\">\nfoobar\n</code></pre>\n"
|
28
28
|
test_template code, result
|
29
29
|
end
|
30
30
|
it 'as an "all" parameter' do
|
31
|
-
code = "{% code ruby all %}foo\nbar\nbaz{% endcode %}"
|
32
|
-
result = "<pre data-line=\"1-3\"
|
33
|
-
|
34
|
-
bar
|
35
|
-
baz
|
36
|
-
</code></pre>\n"
|
31
|
+
code = "{% code ruby highlights=all %}foo\nbar\nbaz{% endcode %}"
|
32
|
+
result = "<pre class=\"\" data-line=\"1-3\">"\
|
33
|
+
"<code class=\"language-ruby\">\nfoo\nbar\nbaz\n</code></pre>\n"
|
37
34
|
test_template code, result
|
38
35
|
end
|
39
36
|
end
|
@@ -42,21 +39,21 @@ end
|
|
42
39
|
describe Jekyll::CodeTag do
|
43
40
|
it 'renders external code objects' do
|
44
41
|
code = '{% ext_code sekrit.rb %}'
|
45
|
-
result = '<pre data-src="sekrit.rb"></pre>'
|
42
|
+
result = '<pre class="" data-src="sekrit.rb"></pre>'
|
46
43
|
test_template code, result
|
47
44
|
end
|
48
45
|
|
49
46
|
it 'accepts a language parameter' do
|
50
47
|
code = '{% ext_code sekrit.rb ruby %}'
|
51
|
-
result = '<pre data-src="sekrit.rb"
|
48
|
+
result = '<pre class="language-ruby" data-src="sekrit.rb"></pre>'
|
52
49
|
test_template code, result
|
53
50
|
end
|
54
51
|
|
55
52
|
describe 'accepts a linenos parameter' do
|
56
53
|
it 'as line numbers' do
|
57
|
-
code = '{% ext_code sekrit.rb ruby 1,3-5,10 %}'
|
58
|
-
result = '<pre data-src="sekrit.rb" ' \
|
59
|
-
'
|
54
|
+
code = '{% ext_code sekrit.rb ruby highlights=1,3-5,10 %}'
|
55
|
+
result = '<pre class="language-ruby" data-src="sekrit.rb" ' \
|
56
|
+
'data-line="1,3-5,10"></pre>'
|
60
57
|
test_template code, result
|
61
58
|
end
|
62
59
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll_prism
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Les Aker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: liquid
|