coderay 0.8.260 → 0.8.263
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/lib/coderay/encoder.rb +9 -4
- data/lib/coderay/encoders/html.rb +46 -45
- data/lib/coderay/encoders/html/output.rb +1 -1
- data/lib/coderay/helpers/file_type.rb +5 -0
- data/lib/coderay/scanner.rb +10 -5
- data/lib/coderay/scanners/_map.rb +2 -1
- data/lib/coderay/scanners/css.rb +0 -1
- data/lib/coderay/scanners/html.rb +1 -3
- data/lib/coderay/scanners/json.rb +5 -5
- data/lib/coderay/scanners/ruby/patterns.rb +3 -2
- data/lib/coderay/scanners/yaml.rb +141 -0
- data/lib/coderay/styles/cycnus.rb +5 -4
- data/lib/coderay/token_classes.rb +1 -0
- metadata +4 -3
data/lib/coderay/encoder.rb
CHANGED
@@ -133,7 +133,7 @@ module CodeRay
|
|
133
133
|
# whether +text+ is a String.
|
134
134
|
def token text, kind
|
135
135
|
out =
|
136
|
-
if text.is_a? ::String
|
136
|
+
if text.is_a? ::String
|
137
137
|
text_token text, kind
|
138
138
|
elsif text.is_a? ::Symbol
|
139
139
|
block_token text, kind
|
@@ -171,9 +171,14 @@ module CodeRay
|
|
171
171
|
#
|
172
172
|
# The already created +tokens+ object must be used; it can be a
|
173
173
|
# TokenStream or a Tokens object.
|
174
|
-
|
175
|
-
|
176
|
-
|
174
|
+
if RUBY_VERSION >= '1.9'
|
175
|
+
def compile tokens, options
|
176
|
+
tokens.each { |text, kind| token text, kind } # FIXME for Ruby 1.9?
|
177
|
+
end
|
178
|
+
else
|
179
|
+
def compile tokens, options
|
180
|
+
tokens.each(&self)
|
181
|
+
end
|
177
182
|
end
|
178
183
|
|
179
184
|
end
|
@@ -220,8 +220,13 @@ module Encoders
|
|
220
220
|
super
|
221
221
|
end
|
222
222
|
|
223
|
-
def token text, type
|
224
|
-
|
223
|
+
def token text, type = :plain
|
224
|
+
case text
|
225
|
+
|
226
|
+
when nil
|
227
|
+
# raise 'Token with nil as text was given: %p' % [[text, type]]
|
228
|
+
|
229
|
+
when String
|
225
230
|
if text =~ /#{HTML_ESCAPE_PATTERN}/o
|
226
231
|
text = text.gsub(/#{HTML_ESCAPE_PATTERN}/o) { |m| @HTML_ESCAPE[m] }
|
227
232
|
end
|
@@ -231,53 +236,49 @@ module Encoders
|
|
231
236
|
else
|
232
237
|
@out << text
|
233
238
|
end
|
234
|
-
else
|
235
|
-
|
236
|
-
case text
|
237
|
-
|
238
|
-
# token groups, eg. strings
|
239
|
-
when :open
|
240
|
-
@opened[0] = type
|
241
|
-
@out << (@css_style[@opened] || '<span>')
|
242
|
-
@opened << type
|
243
|
-
when :close
|
244
|
-
if @opened.empty?
|
245
|
-
# nothing to close
|
246
|
-
else
|
247
|
-
if $DEBUG and (@opened.size == 1 or @opened.last != type)
|
248
|
-
raise 'Malformed token stream: Trying to close a token (%p) \
|
249
|
-
that is not open. Open are: %p.' % [type, @opened[1..-1]]
|
250
|
-
end
|
251
|
-
@out << '</span>'
|
252
|
-
@opened.pop
|
253
|
-
end
|
254
239
|
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
if @opened.
|
266
|
-
|
267
|
-
|
268
|
-
if $DEBUG and (@opened.size == 1 or @opened.last != type)
|
269
|
-
raise 'Malformed token stream: Trying to close a line (%p) \
|
270
|
-
that is not open. Open are: %p.' % [type, @opened[1..-1]]
|
271
|
-
end
|
272
|
-
@out << '</div>'
|
273
|
-
@opened.pop
|
240
|
+
|
241
|
+
# token groups, eg. strings
|
242
|
+
when :open
|
243
|
+
@opened[0] = type
|
244
|
+
@out << (@css_style[@opened] || '<span>')
|
245
|
+
@opened << type
|
246
|
+
when :close
|
247
|
+
if @opened.empty?
|
248
|
+
# nothing to close
|
249
|
+
else
|
250
|
+
if $DEBUG and (@opened.size == 1 or @opened.last != type)
|
251
|
+
raise 'Malformed token stream: Trying to close a token (%p) \
|
252
|
+
that is not open. Open are: %p.' % [type, @opened[1..-1]]
|
274
253
|
end
|
275
|
-
|
276
|
-
|
277
|
-
|
254
|
+
@out << '</span>'
|
255
|
+
@opened.pop
|
256
|
+
end
|
257
|
+
|
258
|
+
# whole lines to be highlighted, eg. a deleted line in a diff
|
259
|
+
when :begin_line
|
260
|
+
@opened[0] = type
|
261
|
+
if style = @css_style[@opened]
|
262
|
+
@out << style.sub('<span', '<div')
|
278
263
|
else
|
279
|
-
|
264
|
+
@out << '<div>'
|
280
265
|
end
|
266
|
+
@opened << type
|
267
|
+
when :end_line
|
268
|
+
if @opened.empty?
|
269
|
+
# nothing to close
|
270
|
+
else
|
271
|
+
if $DEBUG and (@opened.size == 1 or @opened.last != type)
|
272
|
+
raise 'Malformed token stream: Trying to close a line (%p) \
|
273
|
+
that is not open. Open are: %p.' % [type, @opened[1..-1]]
|
274
|
+
end
|
275
|
+
@out << '</div>'
|
276
|
+
@opened.pop
|
277
|
+
end
|
278
|
+
|
279
|
+
else
|
280
|
+
raise 'unknown token kind: %p' % [text]
|
281
|
+
|
281
282
|
end
|
282
283
|
end
|
283
284
|
|
@@ -177,7 +177,7 @@ module Encoders
|
|
177
177
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="de">
|
178
178
|
<head>
|
179
179
|
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
180
|
-
<title>CodeRay
|
180
|
+
<title>CodeRay Output</title>
|
181
181
|
<style type="text/css">
|
182
182
|
<%CSS%>
|
183
183
|
</style>
|
data/lib/coderay/scanner.rb
CHANGED
@@ -4,7 +4,7 @@ module CodeRay
|
|
4
4
|
|
5
5
|
# = Scanners
|
6
6
|
#
|
7
|
-
# $Id: scanner.rb
|
7
|
+
# $Id: scanner.rb 270 2009-01-01 03:19:28Z murphy $
|
8
8
|
#
|
9
9
|
# This module holds the Scanner class and its subclasses.
|
10
10
|
# For example, the Ruby scanner is named CodeRay::Scanners::Ruby
|
@@ -180,6 +180,11 @@ module CodeRay
|
|
180
180
|
def line
|
181
181
|
string[0..pos].count("\n") + 1
|
182
182
|
end
|
183
|
+
|
184
|
+
def column pos = self.pos
|
185
|
+
return 0 if pos <= 0
|
186
|
+
pos - (string.rindex(?\n, pos) || 0)
|
187
|
+
end
|
183
188
|
|
184
189
|
protected
|
185
190
|
|
@@ -216,7 +221,7 @@ module CodeRay
|
|
216
221
|
tokens:
|
217
222
|
%s
|
218
223
|
|
219
|
-
current line: %d pos
|
224
|
+
current line: %d column: %d pos: %d
|
220
225
|
matched: %p state: %p
|
221
226
|
bol? = %p, eos? = %p
|
222
227
|
|
@@ -231,10 +236,10 @@ surrounding code:
|
|
231
236
|
msg,
|
232
237
|
tokens.size,
|
233
238
|
tokens.last(10).map { |t| t.inspect }.join("\n"),
|
234
|
-
line, pos,
|
239
|
+
line, column, pos,
|
235
240
|
matched, state, bol?, eos?,
|
236
|
-
string[pos-ambit,ambit],
|
237
|
-
string[pos,ambit],
|
241
|
+
string[pos - ambit, ambit],
|
242
|
+
string[pos, ambit],
|
238
243
|
]
|
239
244
|
end
|
240
245
|
|
data/lib/coderay/scanners/css.rb
CHANGED
@@ -2,8 +2,6 @@ module CodeRay
|
|
2
2
|
module Scanners
|
3
3
|
|
4
4
|
# HTML Scanner
|
5
|
-
#
|
6
|
-
# $Id$
|
7
5
|
class HTML < Scanner
|
8
6
|
|
9
7
|
include Streamable
|
@@ -65,7 +63,7 @@ module Scanners
|
|
65
63
|
if scan(/<!--.*?-->/m)
|
66
64
|
kind = :comment
|
67
65
|
elsif scan(/<!DOCTYPE.*?>/m)
|
68
|
-
kind = :
|
66
|
+
kind = :doctype
|
69
67
|
elsif scan(/<\?xml.*?\?>/m)
|
70
68
|
kind = :preprocessor
|
71
69
|
elsif scan(/<\?.*?\?>|<%.*?%>/m)
|
@@ -34,11 +34,11 @@ module Scanners
|
|
34
34
|
elsif match = scan(/ [:,\[{\]}] /x)
|
35
35
|
kind = :operator
|
36
36
|
case match
|
37
|
-
when '{'
|
38
|
-
when '['
|
39
|
-
when ':'
|
40
|
-
when ','
|
41
|
-
when '}', ']'
|
37
|
+
when '{' then stack << :object; key_expected = true
|
38
|
+
when '[' then stack << :array
|
39
|
+
when ':' then key_expected = false
|
40
|
+
when ',' then key_expected = true if stack.last == :object
|
41
|
+
when '}', ']' then stack.pop # no error recovery, but works for valid JSON
|
42
42
|
end
|
43
43
|
elsif match = scan(/ true | false | null /x)
|
44
44
|
kind = IDENT_KIND[match]
|
@@ -166,13 +166,14 @@ module Scanners
|
|
166
166
|
{ }
|
167
167
|
] ]
|
168
168
|
|
169
|
-
CLOSING_PAREN.
|
169
|
+
CLOSING_PAREN.each { |k,v| k.freeze; v.freeze } # debug, if I try to change it with <<
|
170
170
|
OPENING_PAREN = CLOSING_PAREN.invert
|
171
171
|
|
172
172
|
STRING_PATTERN = Hash.new { |h, k|
|
173
173
|
delim, interpreted = *k
|
174
|
-
delim_pattern = Regexp.escape(delim
|
174
|
+
delim_pattern = Regexp.escape(delim)
|
175
175
|
if closing_paren = CLOSING_PAREN[delim]
|
176
|
+
delim_pattern = delim_pattern[0..-1] if defined? JRUBY_VERSION # JRuby fix
|
176
177
|
delim_pattern << Regexp.escape(closing_paren)
|
177
178
|
end
|
178
179
|
|
@@ -0,0 +1,141 @@
|
|
1
|
+
module CodeRay
|
2
|
+
module Scanners
|
3
|
+
|
4
|
+
# YAML Scanner
|
5
|
+
#
|
6
|
+
# Based on the YAML scanner from Syntax by Jamis Buck.
|
7
|
+
class YAML < Scanner
|
8
|
+
|
9
|
+
register_for :yaml
|
10
|
+
file_extension 'yml'
|
11
|
+
|
12
|
+
def scan_tokens tokens, options
|
13
|
+
|
14
|
+
value_expected = nil
|
15
|
+
state = :initial
|
16
|
+
key_indent = indent = 0
|
17
|
+
|
18
|
+
until eos?
|
19
|
+
|
20
|
+
kind = nil
|
21
|
+
match = nil
|
22
|
+
|
23
|
+
if bol?
|
24
|
+
key_indent = nil
|
25
|
+
if $DEBUG
|
26
|
+
indent = check(/ +/) ? matched.size : 0
|
27
|
+
tokens << [indent.to_s, :debug]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
if match = scan(/ +[\t ]*/)
|
32
|
+
kind = :space
|
33
|
+
|
34
|
+
elsif match = scan(/\n+/)
|
35
|
+
kind = :space
|
36
|
+
state = :initial if match.index(?\n)
|
37
|
+
|
38
|
+
elsif match = scan(/#.*/)
|
39
|
+
kind = :comment
|
40
|
+
|
41
|
+
elsif bol? and case
|
42
|
+
when match = scan(/---|\.\.\./)
|
43
|
+
tokens << [:open, :head]
|
44
|
+
tokens << [match, :head]
|
45
|
+
tokens << [:close, :head]
|
46
|
+
next
|
47
|
+
when match = scan(/%.*/)
|
48
|
+
tokens << [match, :doctype]
|
49
|
+
next
|
50
|
+
end
|
51
|
+
|
52
|
+
elsif state == :value and case
|
53
|
+
when !check(/(?:"[^"]*")(?=: |:$)/) && scan(/"/)
|
54
|
+
tokens << [:open, :string]
|
55
|
+
tokens << [matched, :delimiter]
|
56
|
+
tokens << [matched, :content] if scan(/ [^"\\]* (?: \\. [^"\\]* )* /mx)
|
57
|
+
tokens << [matched, :delimiter] if scan(/"/)
|
58
|
+
tokens << [:close, :string]
|
59
|
+
next
|
60
|
+
when match = scan(/[|>][-+]?/)
|
61
|
+
tokens << [:open, :string]
|
62
|
+
tokens << [match, :delimiter]
|
63
|
+
tokens << [matched, :content] if scan(/(?:\n+ {#{key_indent + 1}}.*)+/)
|
64
|
+
tokens << [:close, :string]
|
65
|
+
next
|
66
|
+
when match = scan(/(?![!"*&]).+?(?=$|\s+#)/)
|
67
|
+
tokens << [match, :string]
|
68
|
+
string_indent = key_indent || column(pos - match.size - 1)
|
69
|
+
tokens << [matched, :string] if scan(/(?:\n+ {#{string_indent + 1}}.*)+/)
|
70
|
+
next
|
71
|
+
end
|
72
|
+
|
73
|
+
elsif case
|
74
|
+
when match = scan(/[-:](?= |$)/)
|
75
|
+
state = :value if state == :colon && (match == ':' || match == '-')
|
76
|
+
state = :value if state == :initial && match == '-'
|
77
|
+
kind = :operator
|
78
|
+
when match = scan(/[,{}\[\]]/)
|
79
|
+
kind = :operator
|
80
|
+
when state == :initial && match = scan(/[\w.() ]*\S(?=: |:$)/)
|
81
|
+
kind = :key
|
82
|
+
key_indent = column(pos - match.size - 1)
|
83
|
+
# tokens << [key_indent.inspect, :debug]
|
84
|
+
state = :colon
|
85
|
+
when match = scan(/(?:"[^"\n]*"|'[^'\n]*')(?=: |:$)/)
|
86
|
+
tokens << [:open, :key]
|
87
|
+
tokens << [match[0,1], :delimiter]
|
88
|
+
tokens << [match[1..-2], :content]
|
89
|
+
tokens << [match[-1,1], :delimiter]
|
90
|
+
tokens << [:close, :key]
|
91
|
+
key_indent = column(pos - match.size - 1)
|
92
|
+
# tokens << [key_indent.inspect, :debug]
|
93
|
+
state = :colon
|
94
|
+
next
|
95
|
+
when scan(/(![\w\/]+)(:([\w:]+))?/)
|
96
|
+
tokens << [self[1], :type]
|
97
|
+
if self[2]
|
98
|
+
tokens << [':', :operator]
|
99
|
+
tokens << [self[3], :class]
|
100
|
+
end
|
101
|
+
next
|
102
|
+
when scan(/&\S+/)
|
103
|
+
kind = :variable
|
104
|
+
when scan(/\*\w+/)
|
105
|
+
kind = :global_variable
|
106
|
+
when scan(/<</)
|
107
|
+
kind = :class_variable
|
108
|
+
when scan(/\d\d:\d\d:\d\d/)
|
109
|
+
kind = :oct
|
110
|
+
when scan(/\d\d\d\d-\d\d-\d\d\s\d\d:\d\d:\d\d(\.\d+)? [-+]\d\d:\d\d/)
|
111
|
+
kind = :oct
|
112
|
+
when scan(/:\w+/)
|
113
|
+
kind = :symbol
|
114
|
+
when scan(/[^:\s]+(:(?! |$)[^:\s]*)* .*/)
|
115
|
+
kind = :error
|
116
|
+
when scan(/[^:\s]+(:(?! |$)[^:\s]*)*/)
|
117
|
+
kind = :error
|
118
|
+
end
|
119
|
+
|
120
|
+
else
|
121
|
+
getch
|
122
|
+
kind = :error
|
123
|
+
|
124
|
+
end
|
125
|
+
|
126
|
+
match ||= matched
|
127
|
+
|
128
|
+
raise_inspect 'Error token %p in line %d' % [[match, kind], line], tokens if $DEBUG && !kind
|
129
|
+
raise_inspect 'Empty token', tokens unless match
|
130
|
+
|
131
|
+
tokens << [match, kind]
|
132
|
+
|
133
|
+
end
|
134
|
+
|
135
|
+
tokens
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
end
|
@@ -64,6 +64,7 @@ ol.CodeRay li { white-space: pre }
|
|
64
64
|
.di { color:#088; font-weight:bold }
|
65
65
|
.dl { color:black }
|
66
66
|
.do { color:#970 }
|
67
|
+
.dt { color:#34b }
|
67
68
|
.ds { color:#D42; font-weight:bold }
|
68
69
|
.e { color:#666; font-weight:bold }
|
69
70
|
.en { color:#800; font-weight:bold }
|
@@ -107,15 +108,15 @@ ol.CodeRay li { white-space: pre }
|
|
107
108
|
.rx .mod { color:#C2C }
|
108
109
|
.rx .fu { color:#404; font-weight: bold }
|
109
110
|
|
110
|
-
.s { background-color:#fff0f0 }
|
111
|
+
.s { background-color:#fff0f0; color: #D20; }
|
111
112
|
.s .s { background-color:#ffe0e0 }
|
112
113
|
.s .s .s { background-color:#ffd0d0 }
|
113
|
-
.s .k {
|
114
|
+
.s .k { }
|
114
115
|
.s .ch { color: #b0b; }
|
115
116
|
.s .dl { color: #710; }
|
116
117
|
|
117
|
-
.sh { background-color:#f0fff0 }
|
118
|
-
.sh .k {
|
118
|
+
.sh { background-color:#f0fff0; color:#2B2 }
|
119
|
+
.sh .k { }
|
119
120
|
.sh .dl { color:#161 }
|
120
121
|
|
121
122
|
.sy { color:#A60 }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: coderay
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.263
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- murphy
|
@@ -9,7 +9,7 @@ autorequire: coderay
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-01-01 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -68,6 +68,7 @@ files:
|
|
68
68
|
- ./lib/coderay/scanners/sql.Keith.rb
|
69
69
|
- ./lib/coderay/scanners/sql.rb
|
70
70
|
- ./lib/coderay/scanners/xml.rb
|
71
|
+
- ./lib/coderay/scanners/yaml.rb
|
71
72
|
- ./lib/coderay/style.rb
|
72
73
|
- ./lib/coderay/styles/_map.rb
|
73
74
|
- ./lib/coderay/styles/cycnus.rb
|
@@ -104,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
104
105
|
requirements:
|
105
106
|
- strscan
|
106
107
|
rubyforge_project: coderay
|
107
|
-
rubygems_version: 1.3.
|
108
|
+
rubygems_version: 1.3.1
|
108
109
|
signing_key:
|
109
110
|
specification_version: 2
|
110
111
|
summary: CodeRay is a fast syntax highlighter engine for many languages.
|