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.
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