coderay 0.9.8.pre → 0.9.8
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.
@@ -198,7 +198,6 @@ module Encoders
|
|
198
198
|
else
|
199
199
|
styles = [k]
|
200
200
|
end
|
201
|
-
type = styles.first
|
202
201
|
classes = styles.map { |c| Tokens::ClassOfKind[c] }
|
203
202
|
if classes.first == :NO_HIGHLIGHT and not hint
|
204
203
|
h[k] = false
|
@@ -222,7 +221,7 @@ module Encoders
|
|
222
221
|
end
|
223
222
|
|
224
223
|
def finish options
|
225
|
-
|
224
|
+
@opened.shift
|
226
225
|
@out << '</span>' * @opened.size
|
227
226
|
unless @opened.empty?
|
228
227
|
warn '%d tokens still open: %p' % [@opened.size, @opened]
|
data/lib/coderay/scanner.rb
CHANGED
@@ -99,7 +99,7 @@ module Scanners
|
|
99
99
|
state = :initial
|
100
100
|
string_delimiter = nil
|
101
101
|
string_raw = false
|
102
|
-
|
102
|
+
last_token_dot = false
|
103
103
|
unicode = string.respond_to?(:encoding) && string.encoding.name == 'UTF-8'
|
104
104
|
from_import_state = []
|
105
105
|
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: coderay
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 43
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 9
|
9
9
|
- 8
|
10
|
-
|
11
|
-
version: 0.9.8.pre
|
10
|
+
version: 0.9.8
|
12
11
|
platform: ruby
|
13
12
|
authors:
|
14
13
|
- murphy
|
@@ -16,7 +15,7 @@ autorequire:
|
|
16
15
|
bindir: bin
|
17
16
|
cert_chain: []
|
18
17
|
|
19
|
-
date: 2011-
|
18
|
+
date: 2011-05-01 00:00:00 Z
|
20
19
|
dependencies: []
|
21
20
|
|
22
21
|
description: |
|
@@ -73,7 +72,6 @@ files:
|
|
73
72
|
- ./lib/coderay/scanners/html.rb
|
74
73
|
- ./lib/coderay/scanners/java/builtin_types.rb
|
75
74
|
- ./lib/coderay/scanners/java.rb
|
76
|
-
- ./lib/coderay/scanners/java_script-0.9.6.rb
|
77
75
|
- ./lib/coderay/scanners/java_script.rb
|
78
76
|
- ./lib/coderay/scanners/json.rb
|
79
77
|
- ./lib/coderay/scanners/nitro_xhtml.rb
|
@@ -131,14 +129,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
131
129
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
132
130
|
none: false
|
133
131
|
requirements:
|
134
|
-
- - "
|
132
|
+
- - ">="
|
135
133
|
- !ruby/object:Gem::Version
|
136
|
-
hash:
|
134
|
+
hash: 3
|
137
135
|
segments:
|
138
|
-
-
|
139
|
-
|
140
|
-
- 1
|
141
|
-
version: 1.3.1
|
136
|
+
- 0
|
137
|
+
version: "0"
|
142
138
|
requirements: []
|
143
139
|
|
144
140
|
rubyforge_project: coderay
|
@@ -1,224 +0,0 @@
|
|
1
|
-
module CodeRay
|
2
|
-
module Scanners
|
3
|
-
|
4
|
-
class JavaScript < Scanner
|
5
|
-
|
6
|
-
include Streamable
|
7
|
-
|
8
|
-
register_for :java_script
|
9
|
-
file_extension 'js'
|
10
|
-
|
11
|
-
# The actual JavaScript keywords.
|
12
|
-
KEYWORDS = %w[
|
13
|
-
break case catch continue default delete do else
|
14
|
-
finally for function if in instanceof new
|
15
|
-
return switch throw try typeof var void while with
|
16
|
-
]
|
17
|
-
PREDEFINED_CONSTANTS = %w[
|
18
|
-
false null true undefined
|
19
|
-
]
|
20
|
-
|
21
|
-
MAGIC_VARIABLES = %w[ this arguments ] # arguments was introduced in JavaScript 1.4
|
22
|
-
|
23
|
-
KEYWORDS_EXPECTING_VALUE = WordList.new.add %w[
|
24
|
-
case delete in instanceof new return throw typeof with
|
25
|
-
]
|
26
|
-
|
27
|
-
# Reserved for future use.
|
28
|
-
RESERVED_WORDS = %w[
|
29
|
-
abstract boolean byte char class debugger double enum export extends
|
30
|
-
final float goto implements import int interface long native package
|
31
|
-
private protected public short static super synchronized throws transient
|
32
|
-
volatile
|
33
|
-
]
|
34
|
-
|
35
|
-
IDENT_KIND = WordList.new(:ident).
|
36
|
-
add(RESERVED_WORDS, :reserved).
|
37
|
-
add(PREDEFINED_CONSTANTS, :pre_constant).
|
38
|
-
add(MAGIC_VARIABLES, :local_variable).
|
39
|
-
add(KEYWORDS, :keyword)
|
40
|
-
|
41
|
-
ESCAPE = / [bfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x
|
42
|
-
UNICODE_ESCAPE = / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x
|
43
|
-
REGEXP_ESCAPE = / [bBdDsSwW] /x
|
44
|
-
STRING_CONTENT_PATTERN = {
|
45
|
-
"'" => /[^\\']+/,
|
46
|
-
'"' => /[^\\"]+/,
|
47
|
-
'/' => /[^\\\/]+/,
|
48
|
-
}
|
49
|
-
KEY_CHECK_PATTERN = {
|
50
|
-
"'" => / [^\\']* (?: \\.? [^\\']* )* '? \s* : /x,
|
51
|
-
'"' => / [^\\"]* (?: \\.? [^\\"]* )* "? \s* : /x,
|
52
|
-
}
|
53
|
-
|
54
|
-
def scan_tokens tokens, options
|
55
|
-
|
56
|
-
state = :initial
|
57
|
-
string_delimiter = nil
|
58
|
-
value_expected = true
|
59
|
-
key_expected = false
|
60
|
-
function_expected = false
|
61
|
-
|
62
|
-
until eos?
|
63
|
-
|
64
|
-
kind = nil
|
65
|
-
match = nil
|
66
|
-
|
67
|
-
case state
|
68
|
-
|
69
|
-
when :initial
|
70
|
-
|
71
|
-
if match = scan(/ \s+ | \\\n /x)
|
72
|
-
value_expected = true if !value_expected && match.index(?\n)
|
73
|
-
tokens << [match, :space]
|
74
|
-
next
|
75
|
-
|
76
|
-
elsif scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx)
|
77
|
-
value_expected = true
|
78
|
-
kind = :comment
|
79
|
-
|
80
|
-
elsif check(/\.?\d/)
|
81
|
-
key_expected = value_expected = false
|
82
|
-
if scan(/0[xX][0-9A-Fa-f]+/)
|
83
|
-
kind = :hex
|
84
|
-
elsif scan(/(?>0[0-7]+)(?![89.eEfF])/)
|
85
|
-
kind = :oct
|
86
|
-
elsif scan(/\d+[fF]|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/)
|
87
|
-
kind = :float
|
88
|
-
elsif scan(/\d+/)
|
89
|
-
kind = :integer
|
90
|
-
end
|
91
|
-
|
92
|
-
elsif value_expected && match = scan(/<([[:alpha:]]\w*) (?: [^\/>]*\/> | .*?<\/\1>)/xim)
|
93
|
-
# FIXME: scan over nested tags
|
94
|
-
xml_scanner.tokenize match
|
95
|
-
value_expected = false
|
96
|
-
next
|
97
|
-
|
98
|
-
elsif match = scan(/ [-+*=<>?:;,!&^|(\[{~%]+ | \.(?!\d) /x)
|
99
|
-
value_expected = true
|
100
|
-
last_operator = match[-1]
|
101
|
-
key_expected = (last_operator == ?{) || (last_operator == ?,)
|
102
|
-
function_expected = false
|
103
|
-
kind = :operator
|
104
|
-
|
105
|
-
elsif scan(/ [)\]}]+ /x)
|
106
|
-
function_expected = key_expected = value_expected = false
|
107
|
-
kind = :operator
|
108
|
-
|
109
|
-
elsif match = scan(/ [$a-zA-Z_][A-Za-z_0-9$]* /x)
|
110
|
-
kind = IDENT_KIND[match]
|
111
|
-
value_expected = (kind == :keyword) && KEYWORDS_EXPECTING_VALUE[match]
|
112
|
-
# TODO: labels
|
113
|
-
if kind == :ident
|
114
|
-
if match.index(?$) # $ allowed inside an identifier
|
115
|
-
kind = :predefined
|
116
|
-
elsif function_expected
|
117
|
-
kind = :function
|
118
|
-
elsif check(/\s*[=:]\s*function\b/)
|
119
|
-
kind = :function
|
120
|
-
elsif key_expected && check(/\s*:/)
|
121
|
-
kind = :key
|
122
|
-
end
|
123
|
-
end
|
124
|
-
function_expected = (kind == :keyword) && (match == 'function')
|
125
|
-
key_expected = false
|
126
|
-
|
127
|
-
elsif match = scan(/["']/)
|
128
|
-
if key_expected && check(KEY_CHECK_PATTERN[match])
|
129
|
-
state = :key
|
130
|
-
else
|
131
|
-
state = :string
|
132
|
-
end
|
133
|
-
tokens << [:open, state]
|
134
|
-
string_delimiter = match
|
135
|
-
kind = :delimiter
|
136
|
-
|
137
|
-
elsif value_expected && (match = scan(/\/(?=\S)/))
|
138
|
-
tokens << [:open, :regexp]
|
139
|
-
state = :regexp
|
140
|
-
string_delimiter = '/'
|
141
|
-
kind = :delimiter
|
142
|
-
|
143
|
-
elsif scan(/ \/ /x)
|
144
|
-
value_expected = true
|
145
|
-
key_expected = false
|
146
|
-
kind = :operator
|
147
|
-
|
148
|
-
else
|
149
|
-
getch
|
150
|
-
kind = :error
|
151
|
-
|
152
|
-
end
|
153
|
-
|
154
|
-
when :string, :regexp, :key
|
155
|
-
if scan(STRING_CONTENT_PATTERN[string_delimiter])
|
156
|
-
kind = :content
|
157
|
-
elsif match = scan(/["'\/]/)
|
158
|
-
tokens << [match, :delimiter]
|
159
|
-
if state == :regexp
|
160
|
-
modifiers = scan(/[gim]+/)
|
161
|
-
tokens << [modifiers, :modifier] if modifiers && !modifiers.empty?
|
162
|
-
end
|
163
|
-
tokens << [:close, state]
|
164
|
-
string_delimiter = nil
|
165
|
-
key_expected = value_expected = false
|
166
|
-
state = :initial
|
167
|
-
next
|
168
|
-
elsif state != :regexp && (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox))
|
169
|
-
if string_delimiter == "'" && !(match == "\\\\" || match == "\\'")
|
170
|
-
kind = :content
|
171
|
-
else
|
172
|
-
kind = :char
|
173
|
-
end
|
174
|
-
elsif state == :regexp && scan(/ \\ (?: #{ESCAPE} | #{REGEXP_ESCAPE} | #{UNICODE_ESCAPE} ) /mox)
|
175
|
-
kind = :char
|
176
|
-
elsif scan(/\\./m)
|
177
|
-
kind = :content
|
178
|
-
elsif scan(/ \\ | $ /x)
|
179
|
-
tokens << [:close, state]
|
180
|
-
kind = :error
|
181
|
-
key_expected = value_expected = false
|
182
|
-
state = :initial
|
183
|
-
else
|
184
|
-
raise_inspect "else case \" reached; %p not handled." % peek(1), tokens
|
185
|
-
end
|
186
|
-
|
187
|
-
else
|
188
|
-
raise_inspect 'Unknown state', tokens
|
189
|
-
|
190
|
-
end
|
191
|
-
|
192
|
-
match ||= matched
|
193
|
-
if $CODERAY_DEBUG and not kind
|
194
|
-
raise_inspect 'Error token %p in line %d' %
|
195
|
-
[[match, kind], line], tokens
|
196
|
-
end
|
197
|
-
raise_inspect 'Empty token', tokens unless match
|
198
|
-
|
199
|
-
tokens << [match, kind]
|
200
|
-
|
201
|
-
end
|
202
|
-
|
203
|
-
if [:string, :regexp].include? state
|
204
|
-
tokens << [:close, state]
|
205
|
-
end
|
206
|
-
|
207
|
-
tokens
|
208
|
-
end
|
209
|
-
|
210
|
-
protected
|
211
|
-
|
212
|
-
def reset_instance
|
213
|
-
super
|
214
|
-
@xml_scanner.reset if defined? @xml_scanner
|
215
|
-
end
|
216
|
-
|
217
|
-
def xml_scanner
|
218
|
-
@xml_scanner ||= CodeRay.scanner :xml, :tokens => @tokens, :keep_tokens => true, :keep_state => false
|
219
|
-
end
|
220
|
-
|
221
|
-
end
|
222
|
-
|
223
|
-
end
|
224
|
-
end
|