coderay 1.1.0.rc2 → 1.1.0.rc3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/coderay/encoders/debug_lint.rb +2 -1
- data/lib/coderay/encoders/html.rb +6 -3
- data/lib/coderay/encoders/lint.rb +3 -1
- data/lib/coderay/helpers/plugin.rb +11 -11
- data/lib/coderay/scanners/debug.rb +18 -8
- data/lib/coderay/scanners/raydebug.rb +20 -11
- data/lib/coderay/scanners/ruby/patterns.rb +4 -1
- data/lib/coderay/scanners/ruby/string_state.rb +7 -7
- data/lib/coderay/styles/alpha.rb +1 -1
- data/lib/coderay/token_kinds.rb +3 -5
- data/test/functional/basic.rb +1 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8bff592dbd8aa41d4ddeb5670a64cd73885d82c2
|
4
|
+
data.tar.gz: 662f10398eb79840e188251c077a62985a68ee2e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 937b65024bdd37d6ebd39af906f12d3f4e8a43b58631ad72c48c310ef4802828cda9c4c74a9a644799bf59c56c7bafeae86d559e39833bf61f50e4a59893a861
|
7
|
+
data.tar.gz: da3ae5dd02dfa9df53d1d22f99ec133c1823df1c657afa34c77f34fb152cbe426fe4869464200f4ce4fd7da66c3aff6b37611da8d2ef38ea94756421b14ad3c7
|
@@ -18,7 +18,8 @@ module Encoders
|
|
18
18
|
register_for :debug_lint
|
19
19
|
|
20
20
|
def text_token text, kind
|
21
|
-
raise Lint::EmptyToken,
|
21
|
+
raise Lint::EmptyToken, 'empty token for %p' % [kind] if text.empty?
|
22
|
+
raise Lint::UnknownTokenKind, 'unknown token kind %p (text was %p)' % [kind, text] unless TokenKinds.has_key? kind
|
22
23
|
super
|
23
24
|
end
|
24
25
|
|
@@ -285,7 +285,7 @@ module Encoders
|
|
285
285
|
|
286
286
|
def make_span_for_kinds method, hint
|
287
287
|
Hash.new do |h, kinds|
|
288
|
-
|
288
|
+
begin
|
289
289
|
css_class = css_class_for_kinds(kinds)
|
290
290
|
title = HTML.token_path_to_hint hint, kinds if hint
|
291
291
|
|
@@ -297,6 +297,9 @@ module Encoders
|
|
297
297
|
"<span#{title}#{" class=\"#{css_class}\"" if css_class}>"
|
298
298
|
end
|
299
299
|
end
|
300
|
+
end.tap do |span|
|
301
|
+
h.clear if h.size >= 100
|
302
|
+
h[kinds] = span
|
300
303
|
end
|
301
304
|
end
|
302
305
|
end
|
@@ -309,8 +312,8 @@ module Encoders
|
|
309
312
|
|
310
313
|
def break_lines text, style
|
311
314
|
reopen = ''
|
312
|
-
@opened.each_with_index do |
|
313
|
-
reopen << (@span_for_kinds[index > 0 ? [
|
315
|
+
@opened.each_with_index do |kind, index|
|
316
|
+
reopen << (@span_for_kinds[index > 0 ? [kind, *@opened[0...index]] : kind] || '<span>')
|
314
317
|
end
|
315
318
|
text.gsub("\n", "#{'</span>' * @opened.size}#{'</span>' if style}\n#{reopen}#{style}")
|
316
319
|
end
|
@@ -17,10 +17,12 @@ module Encoders
|
|
17
17
|
|
18
18
|
InvalidTokenStream = Class.new StandardError
|
19
19
|
EmptyToken = Class.new InvalidTokenStream
|
20
|
+
UnknownTokenKind = Class.new InvalidTokenStream
|
20
21
|
IncorrectTokenGroupNesting = Class.new InvalidTokenStream
|
21
22
|
|
22
23
|
def text_token text, kind
|
23
|
-
raise EmptyToken,
|
24
|
+
raise EmptyToken, 'empty token for %p' % [kind] if text.empty?
|
25
|
+
raise UnknownTokenKind, 'unknown token kind %p (text was %p)' % [kind, text] unless TokenKinds.has_key? kind
|
24
26
|
end
|
25
27
|
|
26
28
|
def begin_group kind
|
@@ -30,7 +30,7 @@ module CodeRay
|
|
30
30
|
# * a file could not be found
|
31
31
|
# * the requested Plugin is not registered
|
32
32
|
PluginNotFound = Class.new LoadError
|
33
|
-
HostNotFound
|
33
|
+
HostNotFound = Class.new LoadError
|
34
34
|
|
35
35
|
PLUGIN_HOSTS = []
|
36
36
|
PLUGIN_HOSTS_BY_ID = {} # dummy hash
|
@@ -49,8 +49,8 @@ module CodeRay
|
|
49
49
|
def [] id, *args, &blk
|
50
50
|
plugin = validate_id(id)
|
51
51
|
begin
|
52
|
-
plugin = plugin_hash.[]
|
53
|
-
end while plugin.is_a?
|
52
|
+
plugin = plugin_hash.[](plugin, *args, &blk)
|
53
|
+
end while plugin.is_a? String
|
54
54
|
plugin
|
55
55
|
end
|
56
56
|
|
@@ -95,7 +95,7 @@ module CodeRay
|
|
95
95
|
def map hash
|
96
96
|
for from, to in hash
|
97
97
|
from = validate_id from
|
98
|
-
to
|
98
|
+
to = validate_id to
|
99
99
|
plugin_hash[from] = to unless plugin_hash.has_key? from
|
100
100
|
end
|
101
101
|
end
|
@@ -197,22 +197,22 @@ module CodeRay
|
|
197
197
|
File.join plugin_path, "#{plugin_id}.rb"
|
198
198
|
end
|
199
199
|
|
200
|
-
# Converts +id+ to a
|
201
|
-
# or returns +id+ if it already is a Symbol.
|
200
|
+
# Converts +id+ to a valid plugin ID String, or returns +nil+.
|
202
201
|
#
|
203
202
|
# Raises +ArgumentError+ for all other objects, or if the
|
204
203
|
# given String includes non-alphanumeric characters (\W).
|
205
204
|
def validate_id id
|
206
|
-
|
207
|
-
|
208
|
-
|
205
|
+
case id
|
206
|
+
when Symbol
|
207
|
+
id.to_s
|
208
|
+
when String
|
209
209
|
if id[/\w+/] == id
|
210
|
-
id.downcase
|
210
|
+
id.downcase
|
211
211
|
else
|
212
212
|
raise ArgumentError, "Invalid id given: #{id}"
|
213
213
|
end
|
214
214
|
else
|
215
|
-
raise ArgumentError, "
|
215
|
+
raise ArgumentError, "Symbol or String expected, but #{id.class} given."
|
216
216
|
end
|
217
217
|
end
|
218
218
|
|
@@ -1,9 +1,11 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
1
3
|
module CodeRay
|
2
4
|
module Scanners
|
3
5
|
|
4
6
|
# = Debug Scanner
|
5
7
|
#
|
6
|
-
# Interprets the output of the Encoders::Debug encoder.
|
8
|
+
# Interprets the output of the Encoders::Debug encoder (basically the inverse function).
|
7
9
|
class Debug < Scanner
|
8
10
|
|
9
11
|
register_for :debug
|
@@ -11,6 +13,11 @@ module Scanners
|
|
11
13
|
|
12
14
|
protected
|
13
15
|
|
16
|
+
def setup
|
17
|
+
super
|
18
|
+
@known_token_kinds = TokenKinds.keys.map(&:to_s).to_set
|
19
|
+
end
|
20
|
+
|
14
21
|
def scan_tokens encoder, options
|
15
22
|
|
16
23
|
opened_tokens = []
|
@@ -21,16 +28,19 @@ module Scanners
|
|
21
28
|
encoder.text_token match, :space
|
22
29
|
|
23
30
|
elsif match = scan(/ (\w+) \( ( [^\)\\]* ( \\. [^\)\\]* )* ) \)? /x)
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
match = matched
|
31
|
+
if @known_token_kinds.include? self[1]
|
32
|
+
encoder.text_token self[2].gsub(/\\(.)/m, '\1'), self[1].to_sym
|
33
|
+
else
|
34
|
+
encoder.text_token matched, :unknown
|
29
35
|
end
|
30
|
-
encoder.text_token match, kind
|
31
36
|
|
32
37
|
elsif match = scan(/ (\w+) ([<\[]) /x)
|
33
|
-
|
38
|
+
if @known_token_kinds.include? self[1]
|
39
|
+
kind = self[1].to_sym
|
40
|
+
else
|
41
|
+
kind = :unknown
|
42
|
+
end
|
43
|
+
|
34
44
|
opened_tokens << kind
|
35
45
|
case self[2]
|
36
46
|
when '<'
|
@@ -1,9 +1,11 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
1
3
|
module CodeRay
|
2
4
|
module Scanners
|
3
5
|
|
4
|
-
# =
|
6
|
+
# = Raydebug Scanner
|
5
7
|
#
|
6
|
-
#
|
8
|
+
# Highlights the output of the Encoders::Debug encoder.
|
7
9
|
class Raydebug < Scanner
|
8
10
|
|
9
11
|
register_for :raydebug
|
@@ -12,6 +14,11 @@ module Scanners
|
|
12
14
|
|
13
15
|
protected
|
14
16
|
|
17
|
+
def setup
|
18
|
+
super
|
19
|
+
@known_token_kinds = TokenKinds.keys.map(&:to_s).to_set
|
20
|
+
end
|
21
|
+
|
15
22
|
def scan_tokens encoder, options
|
16
23
|
|
17
24
|
opened_tokens = []
|
@@ -26,20 +33,22 @@ module Scanners
|
|
26
33
|
encoder.text_token kind, :class
|
27
34
|
encoder.text_token '(', :operator
|
28
35
|
match = self[2]
|
29
|
-
|
36
|
+
unless match.empty?
|
37
|
+
if @known_token_kinds.include? kind
|
38
|
+
encoder.text_token match, kind.to_sym
|
39
|
+
else
|
40
|
+
encoder.text_token match, :plain
|
41
|
+
end
|
42
|
+
end
|
30
43
|
encoder.text_token match, :operator if match = scan(/\)/)
|
31
44
|
|
32
45
|
elsif match = scan(/ (\w+) ([<\[]) /x)
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
encoder.text_token kind, :class
|
37
|
-
when '['
|
38
|
-
encoder.text_token kind, :class
|
46
|
+
encoder.text_token self[1], :class
|
47
|
+
if @known_token_kinds.include? self[1]
|
48
|
+
kind = self[1].to_sym
|
39
49
|
else
|
40
|
-
|
50
|
+
kind = :unknown
|
41
51
|
end
|
42
|
-
kind = kind.to_sym
|
43
52
|
opened_tokens << kind
|
44
53
|
encoder.begin_group kind
|
45
54
|
encoder.text_token self[2], :operator
|
@@ -157,13 +157,16 @@ module Scanners
|
|
157
157
|
yield
|
158
158
|
])
|
159
159
|
|
160
|
-
FANCY_STRING_START = / % ( [
|
160
|
+
FANCY_STRING_START = / % ( [iIqQrswWx] | (?![a-zA-Z0-9]) ) ([^a-zA-Z0-9]) /x
|
161
161
|
FANCY_STRING_KIND = Hash.new(:string).merge({
|
162
|
+
'i' => :symbol,
|
163
|
+
'I' => :symbol,
|
162
164
|
'r' => :regexp,
|
163
165
|
's' => :symbol,
|
164
166
|
'x' => :shell,
|
165
167
|
})
|
166
168
|
FANCY_STRING_INTERPRETED = Hash.new(true).merge({
|
169
|
+
'i' => false,
|
167
170
|
'q' => false,
|
168
171
|
's' => false,
|
169
172
|
'w' => false,
|
@@ -16,7 +16,6 @@ module Scanners
|
|
16
16
|
|
17
17
|
STRING_PATTERN = Hash.new do |h, k|
|
18
18
|
delim, interpreted = *k
|
19
|
-
# delim = delim.dup # workaround for old Ruby
|
20
19
|
delim_pattern = Regexp.escape(delim)
|
21
20
|
if closing_paren = CLOSING_PAREN[delim]
|
22
21
|
delim_pattern << Regexp.escape(closing_paren)
|
@@ -29,12 +28,13 @@ module Scanners
|
|
29
28
|
# '| [|?*+(){}\[\].^$]'
|
30
29
|
# end
|
31
30
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
31
|
+
if interpreted && delim != '#'
|
32
|
+
/ (?= [#{delim_pattern}] | \# [{$@] ) /mx
|
33
|
+
else
|
34
|
+
/ (?= [#{delim_pattern}] ) /mx
|
35
|
+
end.tap do |pattern|
|
36
|
+
h[k] = pattern if (delim.respond_to?(:ord) ? delim.ord : delim[0]) < 256
|
37
|
+
end
|
38
38
|
end
|
39
39
|
|
40
40
|
def initialize kind, interpreted, delim, heredoc = false
|
data/lib/coderay/styles/alpha.rb
CHANGED
@@ -125,7 +125,7 @@ table.CodeRay td { padding: 2px 4px; vertical-align: top; }
|
|
125
125
|
.string .modifier { color: #E40 }
|
126
126
|
.symbol { color:#A60 }
|
127
127
|
.symbol .content { color:#A60 }
|
128
|
-
.symbol .delimiter { color:#
|
128
|
+
.symbol .delimiter { color:#740 }
|
129
129
|
.tag { color:#070; font-weight:bold }
|
130
130
|
.type { color:#339; font-weight:bold }
|
131
131
|
.value { color: #088 }
|
data/lib/coderay/token_kinds.rb
CHANGED
@@ -1,10 +1,7 @@
|
|
1
1
|
module CodeRay
|
2
2
|
|
3
3
|
# A Hash of all known token kinds and their associated CSS classes.
|
4
|
-
TokenKinds = Hash.new
|
5
|
-
warn 'Undefined Token kind: %p' % [k] if $CODERAY_DEBUG
|
6
|
-
false
|
7
|
-
end
|
4
|
+
TokenKinds = Hash.new(false)
|
8
5
|
|
9
6
|
# speedup
|
10
7
|
TokenKinds.compare_by_identity if TokenKinds.respond_to? :compare_by_identity
|
@@ -83,5 +80,6 @@ module CodeRay
|
|
83
80
|
:plain => false # almost all scanners
|
84
81
|
)
|
85
82
|
|
86
|
-
TokenKinds[:method]
|
83
|
+
TokenKinds[:method] = TokenKinds[:function]
|
84
|
+
TokenKinds[:unknown] = TokenKinds[:plain]
|
87
85
|
end
|
data/test/functional/basic.rb
CHANGED
@@ -164,9 +164,7 @@ more code # and another comment, in-line.
|
|
164
164
|
end
|
165
165
|
end
|
166
166
|
assert_equal 'reserved', CodeRay::TokenKinds[:reserved]
|
167
|
-
|
168
|
-
assert_equal false, CodeRay::TokenKinds[:shibboleet]
|
169
|
-
end
|
167
|
+
assert_equal false, CodeRay::TokenKinds[:shibboleet]
|
170
168
|
end
|
171
169
|
|
172
170
|
class Milk < CodeRay::Encoders::Encoder
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: coderay
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.0.
|
4
|
+
version: 1.1.0.rc3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kornelius Kalnbach
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-07-
|
11
|
+
date: 2013-07-25 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Fast and easy syntax highlighting for selected languages, written in
|
14
14
|
Ruby. Comes with RedCloth integration and LOC counter.
|