gust 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/.travis.yml +4 -0
  2. data/gust.gemspec +5 -4
  3. data/lib/gust.rb +44 -8
  4. data/spec/gust_spec.rb +13 -5
  5. metadata +26 -31
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ rvm:
2
+ - 1.9.2
3
+
4
+ script: 'bundle exec rspec spec'
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.1.2'
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.2']
23
- s.add_dependency 'kramdown', ['~> 0.13.3']
24
- s.add_dependency 'RedCloth', ['~> 4.2.7']
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 'kramdown'
2
+ require 'redcarpet'
3
3
  require 'RedCloth'
4
+ require 'nokogiri'
4
5
 
5
6
  class Gust
7
+ extend Pygments
6
8
 
7
- def self.parse(code, options = {})
8
- return "<div class=\"highlight\"><pre>#{code}</pre></div>\n" unless options[:filename]
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=\"markup\">foo</div>\n" }
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
- end
44
+ context 'with a Github inline code block' do
45
45
 
46
- context 'with a markdown file that uses the (wrong) .md extension' do
46
+ subject { Gust.parse("``` ruby\nfoo\n```", :filename => 'foo.md') }
47
47
 
48
- subject { Gust.parse('*foo*', :filename => 'foo.md') }
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
- it_should_behave_like 'a markdown file'
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: false
5
- segments:
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-09 00:00:00 +02:00
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
- segments:
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: kramdown
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
- segments:
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
- segments:
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.3.6
113
+ rubygems_version: 1.5.2
119
114
  signing_key:
120
115
  specification_version: 3
121
116
  summary: Syntax highlighting and Markdown/Textile parsing