rack-codehighlighter 0.4.1 → 0.4.4
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/README.markdown +28 -5
- data/Rakefile +3 -10
- data/VERSION.yml +2 -2
- data/lib/rack/codehighlighter.rb +22 -4
- metadata +4 -4
data/README.markdown
CHANGED
@@ -12,6 +12,10 @@ It supports the most popular Ruby code highlighters of today:
|
|
12
12
|
* coderay
|
13
13
|
* syntax
|
14
14
|
|
15
|
+
As well as
|
16
|
+
|
17
|
+
* [Unofficial Pygments API](http://pygments.appspot.com/)
|
18
|
+
|
15
19
|
To ease testing it implements *censor* highlighter.
|
16
20
|
|
17
21
|
|
@@ -99,29 +103,48 @@ In examples displayed below, the default value of each option is used.
|
|
99
103
|
Coderay:
|
100
104
|
|
101
105
|
use Rack::Codehighlighter, :coderay,
|
102
|
-
:element => "pre", :pattern => /\A:::(\w+)\s
|
106
|
+
:element => "pre", :pattern => /\A:::(\w+)\s*(\n|
)/i, :logging => false
|
103
107
|
|
104
108
|
Ultraviolet:
|
105
109
|
|
106
110
|
use Rack::Codehighlighter, :ultraviolet, :theme => "dawn", :lines => false,
|
107
|
-
:element => "pre", :pattern => /\A:::(\w+)\s
|
111
|
+
:element => "pre", :pattern => /\A:::(\w+)\s*(\n|
)/i, :logging => false
|
112
|
+
|
113
|
+
or
|
114
|
+
|
115
|
+
use Rack::Codehighlighter, :ultraviolet, :markdown => true,
|
116
|
+
:theme => "minimal_theme", :lines => false, :element => "pre>code",
|
117
|
+
:pattern => /\A:::([-_+\w]+)\s*(\n|
)/, :logging => false,
|
118
|
+
:themes => {"vibrant_ink" => ["ruby"], "upstream_sunburst" => ["objective-c", "java"]}
|
119
|
+
|
120
|
+
Unofficial Pygments API:
|
121
|
+
|
122
|
+
use Rack::Codehighlighter, :pygments_api, :element => "pre",
|
123
|
+
:pattern => /\A:::([-_+\w]+)\s*(\n|
)/, :logging => false
|
108
124
|
|
109
125
|
Syntax:
|
110
126
|
|
111
127
|
use Rack::Codehighlighter, :syntax,
|
112
|
-
:element => "pre", :pattern => /\A:::(\w+)\s
|
128
|
+
:element => "pre", :pattern => /\A:::(\w+)\s*(\n|
)/i, :logging => false
|
113
129
|
|
114
130
|
Censor:
|
115
131
|
|
116
132
|
use Rack::Codehighlighter, :censor, :reason => "[[-- ugly code removed --]]",
|
117
|
-
:element => "pre", :pattern => /\A:::(\w+)\s
|
133
|
+
:element => "pre", :pattern => /\A:::(\w+)\s*(\n|
)/i, :logging => false
|
118
134
|
|
119
135
|
|
120
136
|
Markdown, Maruku and RDiscount processors, the code is wrapped with `pre>code`.
|
121
137
|
To remove this extra one level of nesting the `:markdown` option should be used:
|
122
138
|
|
123
139
|
use Rack::Codehighlighter, :coderay, :markdown => true,
|
124
|
-
:element => "pre>code", :pattern => /\A:::(\w+)\s
|
140
|
+
:element => "pre>code", :pattern => /\A:::(\w+)\s*(\n|
)/i, :logging => false
|
141
|
+
|
142
|
+
**Remark:** Within `pre` tag, HAML replaces each new line characters
|
143
|
+
with the `
` entity (line feed) so that it can ensure that it
|
144
|
+
doesn't adversely affect indentation.
|
145
|
+
This change confuses both rack-codehighlighter and the highlighters
|
146
|
+
themselves (e.g. Ultraviolet and Coderay). So, to support `pre` tags
|
147
|
+
as rendered by HAML, `
` was added to the default pattern.
|
125
148
|
|
126
149
|
Check the `examples` directory for working examples.
|
127
150
|
|
data/Rakefile
CHANGED
@@ -13,19 +13,12 @@ begin
|
|
13
13
|
gemspec.files = %w[LICENSE TODO Rakefile VERSION.yml] + FileList['lib/**/*.rb', "examples/**/*"]
|
14
14
|
|
15
15
|
gemspec.add_runtime_dependency 'rack', '>=1.0.0'
|
16
|
-
gemspec.add_runtime_dependency '
|
16
|
+
gemspec.add_runtime_dependency 'nokogiri', '>=1.4.1'
|
17
17
|
|
18
18
|
gemspec.add_development_dependency 'rack-test', '>=0.3.0'
|
19
19
|
end
|
20
20
|
Jeweler::GemcutterTasks.new
|
21
21
|
rescue LoadError
|
22
|
-
puts "Jeweler not available."
|
23
|
-
puts "
|
24
|
-
puts " sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
22
|
+
puts "Jeweler not available. Install it with:"
|
23
|
+
puts " sudo gem install jeweler"
|
25
24
|
end
|
26
|
-
|
27
|
-
#Rake::TestTask.new(:test) do |t|
|
28
|
-
# t.libs << 'lib' << 'test'
|
29
|
-
# t.pattern = 'test/**/*_test.rb'
|
30
|
-
# t.verbose = false
|
31
|
-
#end
|
data/VERSION.yml
CHANGED
data/lib/rack/codehighlighter.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'rack/utils'
|
2
|
-
require '
|
2
|
+
require 'nokogiri'
|
3
3
|
|
4
4
|
module Rack
|
5
5
|
class Codehighlighter
|
@@ -32,7 +32,7 @@ module Rack
|
|
32
32
|
|
33
33
|
content = ""
|
34
34
|
response.each { |part| content += part }
|
35
|
-
doc =
|
35
|
+
doc = Nokogiri::HTML(content)
|
36
36
|
nodes = doc.search(@opts[:element])
|
37
37
|
nodes.each do |node|
|
38
38
|
s = node.inner_html || "[++where is the code?++]"
|
@@ -130,15 +130,33 @@ module Rack
|
|
130
130
|
end
|
131
131
|
end
|
132
132
|
|
133
|
+
def pygments_api(string)
|
134
|
+
require 'net/http'
|
135
|
+
require 'uri'
|
136
|
+
lang = 'unknown'
|
137
|
+
refs = @opts[:pattern].match(string) # extract language name
|
138
|
+
if refs
|
139
|
+
lang = refs[1]
|
140
|
+
str = unescape_html(string.sub(@opts[:pattern], ""))
|
141
|
+
req = Net::HTTP.post_form(URI.parse('http://pygments.appspot.com/'),
|
142
|
+
{'lang' => lang, 'code' => str})
|
143
|
+
"#{req.body}"
|
144
|
+
else
|
145
|
+
"<pre>#{string}</pre>"
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
133
149
|
def ultraviolet(string)
|
134
|
-
opts = { :theme => 'dawn', :lines => false }
|
150
|
+
opts = { :theme => 'dawn', :lines => false, :themes => {} }
|
135
151
|
opts.merge! @opts
|
136
152
|
lang = 'text'
|
137
153
|
refs = @opts[:pattern].match(string) # extract language name
|
138
154
|
if refs
|
139
155
|
lang = refs[1]
|
156
|
+
theme = opts[:themes].collect do |k,v|
|
157
|
+
k if v.include? lang end.compact.first || opts[:theme]
|
140
158
|
str = unescape_html(string.sub(@opts[:pattern], ""))
|
141
|
-
"#{::Uv.parse(str, 'xhtml', lang, opts[:lines],
|
159
|
+
"#{::Uv.parse(str, 'xhtml', lang, opts[:lines], theme)}"
|
142
160
|
else
|
143
161
|
"<pre class='#{opts[:theme]}'>#{string}</pre>"
|
144
162
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-codehighlighter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wlodek Bzyl
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-02-14 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -23,14 +23,14 @@ dependencies:
|
|
23
23
|
version: 1.0.0
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
|
-
name:
|
26
|
+
name: nokogiri
|
27
27
|
type: :runtime
|
28
28
|
version_requirement:
|
29
29
|
version_requirements: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 1.4.1
|
34
34
|
version:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: rack-test
|