gust 0.1.2 → 0.2.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/.travis.yml +4 -0
- data/gust.gemspec +5 -4
- data/lib/gust.rb +44 -8
- data/spec/gust_spec.rb +13 -5
- metadata +26 -31
data/.travis.yml
ADDED
data/gust.gemspec
CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "gust"
|
6
|
-
s.version = '0.
|
6
|
+
s.version = '0.2.0'
|
7
7
|
s.platform = Gem::Platform::RUBY
|
8
8
|
s.authors = ["Jeff Kreeftmeijer"]
|
9
9
|
s.email = ["jeff@kreeftmeijer.nl"]
|
@@ -19,7 +19,8 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
21
|
s.add_development_dependency 'rspec', ['~> 2.0']
|
22
|
-
s.add_dependency 'pygments.rb', ['~> 0.1
|
23
|
-
s.add_dependency '
|
24
|
-
s.add_dependency 'RedCloth', ['~> 4.2
|
22
|
+
s.add_dependency 'pygments.rb', ['~> 0.1']
|
23
|
+
s.add_dependency 'redcarpet', ['~> 1.17']
|
24
|
+
s.add_dependency 'RedCloth', ['~> 4.2']
|
25
|
+
s.add_dependency 'nokogiri', ['~> 1.5']
|
25
26
|
end
|
data/lib/gust.rb
CHANGED
@@ -1,19 +1,55 @@
|
|
1
1
|
require 'pygments'
|
2
|
-
require '
|
2
|
+
require 'redcarpet'
|
3
3
|
require 'RedCloth'
|
4
|
+
require 'nokogiri'
|
4
5
|
|
5
6
|
class Gust
|
7
|
+
extend Pygments
|
6
8
|
|
7
|
-
|
8
|
-
|
9
|
+
class << self
|
10
|
+
|
11
|
+
def parse(code, options = {})
|
12
|
+
return plain_text(code) unless options[:filename]
|
13
|
+
|
14
|
+
case options[:filename]
|
15
|
+
when /.*\.png$/ then image(options[:url])
|
16
|
+
when /.*\.markdown$/, /.*\.md$/ then markdown(code)
|
17
|
+
when /.*\.textile$/ then textile(code)
|
18
|
+
else highlight(code, options) rescue plain_text(code)
|
19
|
+
end
|
9
20
|
|
10
|
-
case options[:filename]
|
11
|
-
when /.*\.png$/ then "<div class=\"image\"><img src=\"#{options[:url]}\"/></div>\n"
|
12
|
-
when /.*\.markdown$/, /.*\.md$/ then "<div class=\"markup\">#{Kramdown::Document.new(code).to_html}</div>\n"
|
13
|
-
when /.*\.textile$/ then "<div class=\"markup\">#{RedCloth.new(code).to_html}</div>\n"
|
14
|
-
else Pygments.highlight(code, options) rescue "<div class=\"markup\">#{code}</div>\n"
|
15
21
|
end
|
16
22
|
|
23
|
+
protected
|
24
|
+
|
25
|
+
def image(src)
|
26
|
+
"<div class=\"image\"><img src=\"#{src}\"/></div>\n"
|
27
|
+
end
|
28
|
+
|
29
|
+
def markdown(markup)
|
30
|
+
inline_highlight(
|
31
|
+
"<div class=\"markup\">" <<
|
32
|
+
Redcarpet.new(markup, :fenced_code, :gh_blockcode).to_html <<
|
33
|
+
"</div>"
|
34
|
+
) << "\n"
|
35
|
+
end
|
36
|
+
|
37
|
+
def textile(markup)
|
38
|
+
"<div class=\"markup\">#{RedCloth.new(markup).to_html}</div>\n"
|
39
|
+
end
|
40
|
+
|
41
|
+
def plain_text(text)
|
42
|
+
"<div class=\"highlight\"><pre>#{text}</pre></div>\n"
|
43
|
+
end
|
44
|
+
|
45
|
+
def inline_highlight(html)
|
46
|
+
doc = Nokogiri::HTML(html)
|
47
|
+
doc.search("//pre[@lang]").each do |pre|
|
48
|
+
pre.replace highlight(pre.text.rstrip, :lexer => pre[:lang])
|
49
|
+
end
|
50
|
+
doc.xpath('//div[@class="markup"]').to_xml
|
51
|
+
end
|
52
|
+
|
17
53
|
end
|
18
54
|
|
19
55
|
end
|
data/spec/gust_spec.rb
CHANGED
@@ -23,7 +23,7 @@ describe Gust do
|
|
23
23
|
|
24
24
|
subject { Gust.parse('foo', :filename => 'foo.bar') }
|
25
25
|
|
26
|
-
it { should == "<div class=\"
|
26
|
+
it { should == "<div class=\"highlight\"><pre>foo</pre></div>\n" }
|
27
27
|
|
28
28
|
end
|
29
29
|
|
@@ -41,13 +41,21 @@ describe Gust do
|
|
41
41
|
|
42
42
|
it_should_behave_like 'a markdown file'
|
43
43
|
|
44
|
-
|
44
|
+
context 'with a Github inline code block' do
|
45
45
|
|
46
|
-
|
46
|
+
subject { Gust.parse("``` ruby\nfoo\n```", :filename => 'foo.md') }
|
47
47
|
|
48
|
-
|
48
|
+
it { should == "<div class=\"markup\"><div class=\"highlight\"><pre><span class=\"n\">foo</span>\n</pre>\n</div>\n\n</div>\n" }
|
49
49
|
|
50
|
-
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'when using the (wrong) .md extension' do
|
53
|
+
|
54
|
+
subject { Gust.parse('*foo*', :filename => 'foo.md') }
|
55
|
+
|
56
|
+
it_should_behave_like 'a markdown file'
|
57
|
+
|
58
|
+
end
|
51
59
|
|
52
60
|
end
|
53
61
|
|
metadata
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gust
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 1
|
8
|
-
- 2
|
9
|
-
version: 0.1.2
|
4
|
+
prerelease:
|
5
|
+
version: 0.2.0
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
8
|
- Jeff Kreeftmeijer
|
@@ -14,19 +10,17 @@ autorequire:
|
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
12
|
|
17
|
-
date: 2011-07-
|
13
|
+
date: 2011-07-25 00:00:00 +02:00
|
18
14
|
default_executable:
|
19
15
|
dependencies:
|
20
16
|
- !ruby/object:Gem::Dependency
|
21
17
|
name: rspec
|
22
18
|
prerelease: false
|
23
19
|
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
24
21
|
requirements:
|
25
22
|
- - ~>
|
26
23
|
- !ruby/object:Gem::Version
|
27
|
-
segments:
|
28
|
-
- 2
|
29
|
-
- 0
|
30
24
|
version: "2.0"
|
31
25
|
type: :development
|
32
26
|
version_requirements: *id001
|
@@ -34,44 +28,46 @@ dependencies:
|
|
34
28
|
name: pygments.rb
|
35
29
|
prerelease: false
|
36
30
|
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
37
32
|
requirements:
|
38
33
|
- - ~>
|
39
34
|
- !ruby/object:Gem::Version
|
40
|
-
|
41
|
-
- 0
|
42
|
-
- 1
|
43
|
-
- 2
|
44
|
-
version: 0.1.2
|
35
|
+
version: "0.1"
|
45
36
|
type: :runtime
|
46
37
|
version_requirements: *id002
|
47
38
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
39
|
+
name: redcarpet
|
49
40
|
prerelease: false
|
50
41
|
requirement: &id003 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
51
43
|
requirements:
|
52
44
|
- - ~>
|
53
45
|
- !ruby/object:Gem::Version
|
54
|
-
|
55
|
-
- 0
|
56
|
-
- 13
|
57
|
-
- 3
|
58
|
-
version: 0.13.3
|
46
|
+
version: "1.17"
|
59
47
|
type: :runtime
|
60
48
|
version_requirements: *id003
|
61
49
|
- !ruby/object:Gem::Dependency
|
62
50
|
name: RedCloth
|
63
51
|
prerelease: false
|
64
52
|
requirement: &id004 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
65
54
|
requirements:
|
66
55
|
- - ~>
|
67
56
|
- !ruby/object:Gem::Version
|
68
|
-
|
69
|
-
- 4
|
70
|
-
- 2
|
71
|
-
- 7
|
72
|
-
version: 4.2.7
|
57
|
+
version: "4.2"
|
73
58
|
type: :runtime
|
74
59
|
version_requirements: *id004
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: nokogiri
|
62
|
+
prerelease: false
|
63
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: "1.5"
|
69
|
+
type: :runtime
|
70
|
+
version_requirements: *id005
|
75
71
|
description: Syntax highlighting and Markdown/Textile parsing
|
76
72
|
email:
|
77
73
|
- jeff@kreeftmeijer.nl
|
@@ -84,6 +80,7 @@ extra_rdoc_files: []
|
|
84
80
|
files:
|
85
81
|
- .gitignore
|
86
82
|
- .rspec
|
83
|
+
- .travis.yml
|
87
84
|
- Gemfile
|
88
85
|
- README.markdown
|
89
86
|
- gust.gemspec
|
@@ -99,23 +96,21 @@ rdoc_options: []
|
|
99
96
|
require_paths:
|
100
97
|
- lib
|
101
98
|
required_ruby_version: !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
102
100
|
requirements:
|
103
101
|
- - ">="
|
104
102
|
- !ruby/object:Gem::Version
|
105
|
-
segments:
|
106
|
-
- 0
|
107
103
|
version: "0"
|
108
104
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
109
106
|
requirements:
|
110
107
|
- - ">="
|
111
108
|
- !ruby/object:Gem::Version
|
112
|
-
segments:
|
113
|
-
- 0
|
114
109
|
version: "0"
|
115
110
|
requirements: []
|
116
111
|
|
117
112
|
rubyforge_project: gust
|
118
|
-
rubygems_version: 1.
|
113
|
+
rubygems_version: 1.5.2
|
119
114
|
signing_key:
|
120
115
|
specification_version: 3
|
121
116
|
summary: Syntax highlighting and Markdown/Textile parsing
|