octopress-pygments 1.0.0 → 1.1.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/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,2 @@
1
+ language: ruby
2
+ script: bundle exec rake spec
data/Rakefile CHANGED
@@ -1 +1,6 @@
1
1
  require "bundler/gem_tasks"
2
+
3
+ task :spec do
4
+ rm_rf ".pygments-cache"
5
+ sh "bundle exec rspec"
6
+ end
@@ -9,178 +9,20 @@ FileUtils.mkdir_p(PYGMENTS_CACHE_DIR)
9
9
 
10
10
  module Octopress
11
11
  module Pygments
12
-
13
- def self.render_pygments(code, lang)
14
- highlighted_code = ::Pygments.highlight(code, :lexer => lang, :formatter => 'html', :options => {:encoding => 'utf-8'})
15
- highlighted_code = highlighted_code.gsub(/{{/, '{{').gsub(/{%/, '{%')
16
- highlighted_code.to_s
17
- end
12
+ autoload :Cache, 'octopress-pygments/cache'
13
+ autoload :OptionsParser, 'octopress-pygments/options_parser'
14
+ autoload :Renderer, 'octopress-pygments/renderer'
18
15
 
19
16
  def self.highlight(code, options = {})
20
- lang = options[:lang]
21
- lang = 'ruby' if lang == 'ru'
22
- lang = 'objc' if lang == 'm'
23
- lang = 'perl' if lang == 'pl'
24
- lang = 'yaml' if lang == 'yml'
25
- lang = 'coffeescript' if lang == 'coffee'
26
- lang = 'csharp' if lang == 'cs'
27
- lang = 'plain' if lang == '' or lang.nil? or !lang
28
-
29
- options[:lang] = lang
30
- options[:title] ||= ' ' if options[:url]
31
-
32
- # Attempt to retrieve cached code
33
- cache = nil
34
- unless options[:no_cache]
35
- path = options[:cache_path] || get_cache_path(PYGMENTS_CACHE_DIR, options[:lang], options.to_s + code)
36
- cache = read_cache(path)
37
- end
38
-
39
- unless cache
40
- if options[:lang] == 'plain'
41
- # Escape html tags
42
- code = code.gsub('<','&lt;')
43
- else
44
- code = render_pygments(code, options[:lang]).match(/<pre>(.+)<\/pre>/m)[1].gsub(/ *$/, '') #strip out divs <div class="highlight">
45
- end
46
- code = tableize_code(code, options[:lang], {linenos: options[:linenos], start: options[:start], marks: options[:marks]})
47
- title = captionize(options[:title], options[:url], options[:link_text]) if options[:title]
48
- code = "<figure class='code'>#{title}#{code}</figure>"
49
- File.open(path, 'w') {|f| f.print(code) } unless options[:no_cache]
50
- end
51
- cache || code
52
- end
53
-
54
- def self.read_cache (path)
55
- File.exist?(path) ? File.read(path) : nil unless path.nil?
56
- end
57
-
58
- def self.get_cache_path (dir, name, str)
59
- File.join(dir, "#{name}-#{Digest::MD5.hexdigest(str)}.html")
60
- end
61
-
62
- def self.captionize (caption, url, link_text)
63
- figcaption = "<figcaption>#{caption}"
64
- figcaption += "<a href='#{url}'>#{(link_text || 'link').strip}</a>" if url
65
- figcaption += "</figcaption>"
66
- end
67
-
68
- def self.tableize_code (code, lang, options = {})
69
- start = options[:start] || 1
70
- lines = options[:linenos] || true
71
- marks = options[:marks] || []
72
- table = "<div class='highlight'><table><tr>"
73
- table += number_lines(start, code.lines.count, marks) if lines
74
- table += "<td class='main #{'unnumbered' unless lines} #{lang}'><pre>"
75
- code.lines.each_with_index do |line,index|
76
- classes = 'line'
77
- if marks.include? index + start
78
- classes += ' marked'
79
- classes += ' start' unless marks.include? index - 1 + start
80
- classes += ' end' unless marks.include? index + 1 + start
81
- end
82
- line = line.strip.empty? ? ' ' : line
83
- table += "<div class='#{classes}'>#{line}</div>"
84
- end
85
- table +="</pre></td></tr></table></div>"
86
- end
87
-
88
- def self.number_lines (start, count, marks)
89
- start ||= 1
90
- lines = "<td class='line-numbers' aria-hidden='true'><pre>"
91
- count.times do |index|
92
- classes = 'line-number'
93
- if marks.include? index + start
94
- classes += ' marked'
95
- classes += ' start' unless marks.include? index - 1 + start
96
- classes += ' end' unless marks.include? index + 1 + start
97
- end
98
- lines += "<div data-line='#{index + start}' class='#{classes}'></div>"
99
- end
100
- lines += "</pre></td>"
101
- end
102
-
103
- def self.parse_markup (input, defaults={})
104
- lang = input.match(/\s*lang:\s*(\S+)/i)
105
- lang = (lang.nil? ? nil : lang[1])
106
-
107
- url = input.match(/\s*url:\s*(("(.+?)")|('(.+?)')|(\S+))/i)
108
- url = (url.nil? ? nil : url[3] || url[5] || url[6])
109
-
110
- title = input.match(/\s*title:\s*(("(.+?)")|('(.+?)')|(\S+))/i)
111
- title = (title.nil? ? nil : title[3] || title[5] || title[6])
112
- title ||= ' ' if url
113
-
114
- linenos = input.match(/\s*linenos:\s*(\w+)/i)
115
- linenos = (linenos.nil? ? nil : linenos[1])
116
-
117
- marks = get_marks(input)
118
-
119
- link_text = input.match(/\s*link[-_]text:\s*(("(.+?)")|('(.+?)')|(\S+))/i)
120
- link_text = (link_text.nil? ? 'link' : link_text[3] || link_text[5] || link_text[6])
121
-
122
- start = input.match(/\s*start:\s*(\d+)/i)
123
- start = (start.nil? ? nil : start[1].to_i)
124
-
125
- endline = input.match(/\s*end:\s*(\d+)/i)
126
- endline = (endline.nil? ? nil : endline[1].to_i)
127
-
128
- if input =~ / *range:(\d+)-(\d+)/i
129
- start = $1.to_i
130
- endline = $2.to_i
131
- end
132
-
133
- options = {
134
- lang: lang,
135
- url: url,
136
- title: title,
137
- linenos: linenos,
138
- marks: marks,
139
- link_text: link_text,
140
- start: start,
141
- end: endline
142
- }
143
-
144
- defaults.each { |k,v| options[k] ||= defaults[k] }
145
- options
146
- end
147
-
148
- def self.clean_markup (input)
149
- input.sub(/\s*lang:\s*\S+/i,''
150
- ).sub(/\s*title:\s*(("(.+?)")|('(.+?)')|(\S+))/i,''
151
- ).sub(/\s*url:\s*(\S+)/i,''
152
- ).sub(/\s*link_text:\s*(("(.+?)")|('(.+?)')|(\S+))/i,''
153
- ).sub(/\s*mark:\s*\d\S*/i,''
154
- ).sub(/\s*linenos:\s*\w+/i,''
155
- ).sub(/\s*start:\s*\d+/i,''
156
- ).sub(/\s*end:\s*\d+/i,''
157
- ).sub(/\s*range:\s*\d+-\d+/i,'')
17
+ Renderer.new(code, options).highlight
158
18
  end
159
19
 
160
- def self.get_marks (input)
161
- # Matches pattern for line marks and returns array of line numbers to mark
162
- # Example input mark:1,5-10,2
163
- # Outputs: [1,2,5,6,7,8,9,10]
164
- marks = []
165
- if input =~ / *mark:(\d\S*)/i
166
- marks = $1.gsub /(\d+)-(\d+)/ do
167
- ($1.to_i..$2.to_i).to_a.join(',')
168
- end
169
- marks = marks.split(',').collect {|s| s.to_i}.sort
170
- end
171
- marks
20
+ def self.parse_markup(input, defaults={})
21
+ OptionsParser.new(input).parse_markup(defaults)
172
22
  end
173
23
 
174
- def self.get_range (code, start, endline)
175
- length = code.lines.count
176
- start ||= 1
177
- endline ||= length
178
- if start > 1 or endline < length
179
- raise "#{filepath} is #{length} lines long, cannot begin at line #{start}" if start > length
180
- raise "#{filepath} is #{length} lines long, cannot read beyond line #{endline}" if endline > length
181
- code = code.split(/\n/).slice(start - 1, endline + 1 - start).join("\n")
182
- end
183
- code
24
+ def self.clean_markup(input)
25
+ OptionsParser.new(input).clean_markup
184
26
  end
185
27
 
186
28
  def self.highlight_failed(error, syntax, markup, code, file = nil)
@@ -0,0 +1,30 @@
1
+ module Octopress
2
+ module Pygments
3
+ class Cache
4
+ PYGMENTS_CACHE_DIR = '.pygments-cache'
5
+
6
+ class << self
7
+ def fetch_from_cache(code, options)
8
+ path = options[:cache_path] || get_cache_path(PYGMENTS_CACHE_DIR, options[:lang], options.to_s + code)
9
+ cache = read_cache(path)
10
+ end
11
+
12
+ def write_to_cache(contents, options)
13
+ FileUtils.mkdir_p(PYGMENTS_CACHE_DIR) unless File.directory?(PYGMENTS_CACHE_DIR)
14
+ path = options[:cache_path] || get_cache_path(PYGMENTS_CACHE_DIR, options[:lang], options.to_s + contents)
15
+ File.open(path, 'w') do |f|
16
+ f.print(contents)
17
+ end
18
+ end
19
+
20
+ def read_cache(path)
21
+ File.exist?(path) ? File.read(path) : nil unless path.nil?
22
+ end
23
+
24
+ def get_cache_path(dir, name, str)
25
+ File.join(dir, "#{name}-#{Digest::MD5.hexdigest(str)}.html")
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,109 @@
1
+ module Octopress
2
+ module Pygments
3
+ class OptionsParser
4
+ attr_accessor :input
5
+
6
+ def initialize(markup)
7
+ @input = markup.strip
8
+ end
9
+
10
+ def clean_markup
11
+ input.sub(/\s*lang:\s*\S+/i,'')
12
+ .sub(/\s*title:\s*(("(.+?)")|('(.+?)')|(\S+))/i,'')
13
+ .sub(/\s*url:\s*(\S+)/i,'')
14
+ .sub(/\s*link_text:\s*(("(.+?)")|('(.+?)')|(\S+))/i,'')
15
+ .sub(/\s*mark:\s*\d\S*/i,'')
16
+ .sub(/\s*linenos:\s*\w+/i,'')
17
+ .sub(/\s*start:\s*\d+/i,'')
18
+ .sub(/\s*end:\s*\d+/i,'')
19
+ .sub(/\s*range:\s*\d+-\d+/i,'')
20
+ end
21
+
22
+ def parse_markup(defaults = {})
23
+ defaults.merge({
24
+ lang: lang,
25
+ url: url,
26
+ title: title,
27
+ linenos: linenos,
28
+ marks: marks,
29
+ link_text: link_text,
30
+ start: start,
31
+ end: endline
32
+ })
33
+ end
34
+
35
+ def lang
36
+ extract(/\s*lang:\s*(\S+)/i)
37
+ end
38
+
39
+ def url
40
+ extract(/\s*url:\s*(("(.+?)")|('(.+?)')|(\S+))/i, [3, 5, 6])
41
+ end
42
+
43
+ def title
44
+ extract(/\s*title:\s*(("(.+?)")|('(.+?)')|(\S+))/i, [3, 5, 6])
45
+ end
46
+
47
+ def linenos
48
+ extract(/\s*linenos:\s*(\w+)/i)
49
+ end
50
+
51
+ # Public: Matches pattern for line marks and returns array of line
52
+ # numbers to mark
53
+ #
54
+ # Example input
55
+ # Input: "mark:1,5-10,2"
56
+ # Output: [1,2,5,6,7,8,9,10]
57
+ #
58
+ # Returns an array of integers corresponding to the lines which are
59
+ # indicated as marked
60
+ def marks
61
+ marks = []
62
+ if input =~ / *mark:(\d\S*)/i
63
+ marks = $1.gsub /(\d+)-(\d+)/ do
64
+ ($1.to_i..$2.to_i).to_a.join(',')
65
+ end
66
+ marks = marks.split(',').collect {|s| s.to_i}.sort
67
+ end
68
+ marks
69
+ end
70
+
71
+ def link_text
72
+ extract(/\s*link[-_]text:\s*(("(.+?)")|('(.+?)')|(\S+))/i, [3, 5, 6], 'link')
73
+ end
74
+
75
+ def start
76
+ if range
77
+ range.first
78
+ else
79
+ extract(/\s*start:\s*(\d+)/i).to_i
80
+ end
81
+ end
82
+
83
+ def endline
84
+ if range
85
+ range.last
86
+ else
87
+ extract(/\s*end:\s*(\d+)/i).to_i
88
+ end
89
+ end
90
+
91
+ def range
92
+ if input.match(/ *range:(\d+)-(\d+)/i)
93
+ [$1.to_i, $2.to_i]
94
+ end
95
+ end
96
+
97
+ def extract(regexp, indices_to_try = [1], default = nil)
98
+ thing = input.match(regexp)
99
+ if thing.nil?
100
+ default
101
+ else
102
+ indices_to_try.each do |index|
103
+ return thing[index] if thing[index]
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,111 @@
1
+ module Octopress
2
+ module Pygments
3
+ class Renderer
4
+ attr_accessor :code, :options, :lang
5
+
6
+ def initialize(code, options = {})
7
+ @code = code
8
+ @options = options
9
+ @lang = determine_lang
10
+ end
11
+
12
+ def highlight
13
+ @options[:title] ||= ' ' if @options[:url]
14
+ cache = Cache.fetch_from_cache(code, options)
15
+ unless cache
16
+ if @lang == 'plain'
17
+ rendered_code = code.to_s.gsub('<','&lt;')
18
+ else
19
+ rendered_code = render_pygments(code, options[:lang]).match(/<pre>(.+)<\/pre>/m)[1].gsub(/ *$/, '') #strip out divs <div class="highlight">
20
+ end
21
+ rendered_code = tableize_code(rendered_code, options[:lang], {linenos: options[:linenos], start: options[:start], marks: options[:marks]})
22
+ title = captionize(options[:title], options[:url], options[:link_text]) if options[:title]
23
+ rendered_code = "<figure class='code'>#{title}#{rendered_code}</figure>"
24
+ Cache.write_to_cache(rendered_code, options) unless options[:no_cache]
25
+ end
26
+ cache || rendered_code
27
+ end
28
+
29
+ def determine_lang
30
+ lang = options[:lang]
31
+ lang = 'ruby' if lang == 'ru'
32
+ lang = 'objc' if lang == 'm'
33
+ lang = 'perl' if lang == 'pl'
34
+ lang = 'yaml' if lang == 'yml'
35
+ lang = 'coffeescript' if lang == 'coffee'
36
+ lang = 'csharp' if lang == 'cs'
37
+ lang = 'plain' if lang == '' or lang.nil? or !lang
38
+ options[:lang] = lang
39
+ end
40
+
41
+ def render_pygments(code, lang)
42
+ highlighted_code = ::Pygments.highlight(
43
+ code,
44
+ {
45
+ lexer: lang,
46
+ formatter: 'html',
47
+ options: {
48
+ encoding: 'utf-8'
49
+ }
50
+ }
51
+ )
52
+ encode_liquid(highlighted_code).to_s
53
+ end
54
+
55
+ def tableize_code (code, lang, options = {})
56
+ start = options[:start] || 1
57
+ lines = options[:linenos] || true
58
+ marks = options[:marks] || []
59
+ table = "<div class='highlight'><table><tr>"
60
+ table += number_lines(start, code.lines.count, marks) if lines
61
+ table += "<td class='main #{'unnumbered' unless lines} #{lang}'><pre>"
62
+ code.lines.each_with_index do |line,index|
63
+ classes = 'line'
64
+ if marks.include? index + start
65
+ classes += ' marked'
66
+ classes += ' start' unless marks.include? index - 1 + start
67
+ classes += ' end' unless marks.include? index + 1 + start
68
+ end
69
+ line = line.strip.empty? ? ' ' : line
70
+ table += "<div class='#{classes}'>#{line}</div>"
71
+ end
72
+ table +="</pre></td></tr></table></div>"
73
+ end
74
+
75
+ def number_lines (start, count, marks)
76
+ start ||= 1
77
+ lines = "<td class='line-numbers' aria-hidden='true'><pre>"
78
+ count.times do |index|
79
+ classes = 'line-number'
80
+ if marks.include? index + start
81
+ classes += ' marked'
82
+ classes += ' start' unless marks.include? index - 1 + start
83
+ classes += ' end' unless marks.include? index + 1 + start
84
+ end
85
+ lines += "<div data-line='#{index + start}' class='#{classes}'></div>"
86
+ end
87
+ lines += "</pre></td>"
88
+ end
89
+
90
+ # Public:
91
+ #
92
+ #
93
+ def get_range(code, start, endline)
94
+ length = code.lines.count
95
+ start ||= 1
96
+ endline ||= length
97
+ if start > 1 or endline < length
98
+ raise "#{filepath} is #{length} lines long, cannot begin at line #{start}" if start > length
99
+ raise "#{filepath} is #{length} lines long, cannot read beyond line #{endline}" if endline > length
100
+ code = code.split(/\n/).slice(start - 1, endline + 1 - start).join("\n")
101
+ end
102
+ code
103
+ end
104
+
105
+ def encode_liquid(code)
106
+ code.gsub(/{{/, '&#x7b;&#x7b;')
107
+ .gsub(/{%/, '&#x7b;&#x25;')
108
+ end
109
+ end
110
+ end
111
+ end
@@ -1,5 +1,5 @@
1
1
  module Octopress
2
2
  module Pygments
3
- VERSION = "1.0.0"
3
+ VERSION = "1.1.0"
4
4
  end
5
5
  end
@@ -13,7 +13,11 @@ Gem::Specification.new do |gem|
13
13
  gem.homepage = "https://github.com/octopress/octopress-pygments"
14
14
  gem.license = "MIT"
15
15
 
16
- gem.add_runtime_dependency 'pygments.rb >= 0.5'
16
+ gem.add_runtime_dependency 'pygments.rb', '>= 0.5'
17
+ gem.add_runtime_dependency 'colorator', '~> 0.1.0'
18
+
19
+ gem.add_development_dependency 'rake'
20
+ gem.add_development_dependency 'rspec'
17
21
 
18
22
  gem.files = `git ls-files`.split($/)
19
23
  gem.require_paths = ["lib"]
File without changes
@@ -0,0 +1,146 @@
1
+ require 'spec_helper'
2
+
3
+ describe Octopress::Pygments do
4
+ let(:wrapper) do
5
+ Proc.new do |stuff, numbers|
6
+ [
7
+ "<figure class='code'>",
8
+ "<div class='highlight'>",
9
+ "<table><tr>",
10
+ "<td class='line-numbers' aria-hidden='true'>",
11
+ "<pre>#{numbers}</pre>",
12
+ "</td>",
13
+ "<td class='main plain'>",
14
+ "<pre>#{stuff}</pre>",
15
+ "</td></tr>",
16
+ "</table></div></figure>"
17
+ ].join
18
+ end
19
+ end
20
+
21
+ let(:expected_output_no_options) do
22
+ stuff = <<-EOF
23
+ <figure class='code'><div class='highlight'><table><tr><td class='line-numbers' aria-hidden='true'><pre><div data-line='1' class='line-number'></div><div data-line='2' class='line-number'></div><div data-line='3' class='line-number'></div><div data-line='4' class='line-number'></div><div data-line='5' class='line-number'></div><div data-line='6' class='line-number'></div><div data-line='7' class='line-number'></div><div data-line='8' class='line-number'></div></pre></td><td class='main plain'><pre><div class='line'> require "hi-there-honey"
24
+ </div><div class='line'> </div><div class='line'> def hi-there-honey
25
+ </div><div class='line'> HiThereHoney.new("your name")
26
+ </div><div class='line'> end
27
+ </div><div class='line'> </div><div class='line'> hi-there-honey
28
+ </div><div class='line'> # => "Hi, your name"
29
+ </div></pre></td></tr></table></div></figure>
30
+ EOF
31
+ stuff.strip
32
+ end
33
+
34
+ let(:expected_output_lang_ruby) do
35
+ stuff = <<-EOF
36
+ <figure class='code'><div class='highlight'><table><tr><td class='line-numbers' aria-hidden='true'><pre><div data-line='1' class='line-number'></div><div data-line='2' class='line-number'></div><div data-line='3' class='line-number'></div><div data-line='4' class='line-number'></div><div data-line='5' class='line-number'></div><div data-line='6' class='line-number'></div><div data-line='7' class='line-number'></div><div data-line='8' class='line-number'></div></pre></td><td class='main ruby'><pre><div class='line'> <span class="nb">require</span> <span class="s2">&quot;hi-there-honey&quot;</span>
37
+ </div><div class='line'> </div><div class='line'> <span class="k">def</span> <span class="nf">hi</span><span class="o">-</span><span class="n">there</span><span class="o">-</span><span class="n">honey</span>
38
+ </div><div class='line'> <span class="no">HiThereHoney</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="s2">&quot;your name&quot;</span><span class="p">)</span>
39
+ </div><div class='line'> <span class="k">end</span>
40
+ </div><div class='line'> </div><div class='line'> <span class="n">hi</span><span class="o">-</span><span class="n">there</span><span class="o">-</span><span class="n">honey</span>
41
+ </div><div class='line'> <span class="c1"># =&gt; &quot;Hi, your name&quot;</span>
42
+ </div></pre></td></tr></table></div></figure>
43
+ EOF
44
+ end
45
+
46
+ let(:code) do
47
+ <<-EOF
48
+ require "hi-there-honey"
49
+
50
+ def hi-there-honey
51
+ HiThereHoney.new("your name")
52
+ end
53
+
54
+ hi-there-honey
55
+ # => "Hi, your name"
56
+ EOF
57
+ end
58
+
59
+ let(:markup) do
60
+ [
61
+ "lang:ruby",
62
+ 'title:"Hello"',
63
+ "url:http://something.com/hi/fuaiofnioaf.html",
64
+ "link_text:'get it here'",
65
+ "mark:5,8-10,15",
66
+ "linenos: yes",
67
+ "start: 5",
68
+ "end: 15",
69
+ "range: 5-15"
70
+ ].join(" ")
71
+ end
72
+
73
+ let(:bad_markup) do
74
+ [
75
+ "lang:ruby",
76
+ 'title:"Hello"',
77
+ "url:http://something.com/hi/fuaiofnioaf.html",
78
+ "link_text: get it here",
79
+ "mark:5,8-10,15",
80
+ "linenos: yes",
81
+ "start: 5",
82
+ "end: 15",
83
+ "range: 5-15"
84
+ ].join(" ")
85
+ end
86
+
87
+ let(:options) do
88
+ {
89
+ lang: "ruby",
90
+ url: "http://something.com/hi/fuaiofnioaf.html",
91
+ title: "Hello",
92
+ linenos: "yes",
93
+ marks: [5, 8, 9, 10, 15],
94
+ link_text: "get it here",
95
+ start: 5,
96
+ end: 15
97
+ }
98
+ end
99
+
100
+ describe ".highlight" do
101
+ it "returns HTML for an empty code block" do
102
+ expect(described_class.highlight("", {})).to eql(wrapper.call("", ""))
103
+ end
104
+
105
+ context "with no options" do
106
+ it "returns the right HTML for a given set of code" do
107
+ expect(described_class.highlight(code, {})).to eql(expected_output_no_options)
108
+ end
109
+ end
110
+
111
+ context "with a language" do
112
+ it "returns the right HTML for a given set of code" do
113
+ expect(described_class.highlight(code, { lang: 'ruby' })).to eql(expected_output_lang_ruby.chop)
114
+ end
115
+ end
116
+ end
117
+
118
+ describe ".highlight_failed" do
119
+ #described_class.highlight_failed(error, syntax, markup, code, file = nil)
120
+ end
121
+
122
+ describe ".parse_markup" do
123
+ context "with no defaults" do
124
+ it "parses the defaults correctly" do
125
+ expect(described_class.parse_markup(markup, {})).to eql(options)
126
+ end
127
+ end
128
+
129
+ context "with defaults with a nil value" do
130
+ it "overrides the nil values" do
131
+ expect(described_class.parse_markup(markup, { lang: nil })).to eql(options)
132
+ end
133
+ end
134
+ end
135
+
136
+ describe ".clean_markup" do
137
+
138
+ it "returns an empty string with good markup" do
139
+ expect(described_class.clean_markup(markup)).to eql("")
140
+ end
141
+
142
+ it "returns erroneous text that isn't part of the markup" do
143
+ expect(described_class.clean_markup(bad_markup)).to eql(" it here")
144
+ end
145
+ end
146
+ end
@@ -0,0 +1,3 @@
1
+ $:.unshift(File.expand_path("../lib", File.dirname(__FILE__)))
2
+ require "octopress-pygments"
3
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: octopress-pygments
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,15 +12,63 @@ cert_chain: []
12
12
  date: 2013-08-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: pygments.rb >= 0.5
15
+ name: pygments.rb
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: '0'
21
+ version: '0.5'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0.5'
30
+ - !ruby/object:Gem::Dependency
31
+ name: colorator
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 0.1.0
22
38
  type: :runtime
23
39
  prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.1.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rspec
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
24
72
  version_requirements: !ruby/object:Gem::Requirement
25
73
  none: false
26
74
  requirements:
@@ -35,13 +83,21 @@ extensions: []
35
83
  extra_rdoc_files: []
36
84
  files:
37
85
  - .gitignore
86
+ - .rspec
87
+ - .travis.yml
38
88
  - Gemfile
39
89
  - LICENSE.txt
40
90
  - README.md
41
91
  - Rakefile
42
92
  - lib/octopress-pygments.rb
93
+ - lib/octopress-pygments/cache.rb
94
+ - lib/octopress-pygments/options_parser.rb
95
+ - lib/octopress-pygments/renderer.rb
43
96
  - lib/octopress-pygments/version.rb
44
97
  - octopress-pygments.gemspec
98
+ - spec/octopress-pygments_spec.rb
99
+ - spec/pygments_spec.rb
100
+ - spec/spec_helper.rb
45
101
  homepage: https://github.com/octopress/octopress-pygments
46
102
  licenses:
47
103
  - MIT