coderay 0.9.8.pre → 0.9.8
Sign up to get free protection for your applications and to get access to all the features.
@@ -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
|