rouge 3.21.0 → 3.30.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +6 -1
- data/lib/rouge/cli.rb +55 -22
- data/lib/rouge/demos/brainfuck +1 -1
- data/lib/rouge/demos/brightscript +1 -1
- data/lib/rouge/demos/bsl +1 -1
- data/lib/rouge/demos/cfscript +1 -1
- data/lib/rouge/demos/coq +1 -1
- data/lib/rouge/demos/csvs +1 -1
- data/lib/rouge/demos/dafny +16 -0
- data/lib/rouge/demos/datastudio +0 -1
- data/lib/rouge/demos/ecl +0 -1
- data/lib/rouge/demos/email +11 -0
- data/lib/rouge/demos/erlang +1 -1
- data/lib/rouge/demos/fluent +13 -0
- data/lib/rouge/demos/fsharp +1 -1
- data/lib/rouge/demos/glsl +1 -1
- data/lib/rouge/demos/haxe +0 -1
- data/lib/rouge/demos/idris +13 -0
- data/lib/rouge/demos/isabelle +16 -0
- data/lib/rouge/demos/j +12 -0
- data/lib/rouge/demos/lean +8 -0
- data/lib/rouge/demos/meson +10 -0
- data/lib/rouge/demos/nesasm +1 -1
- data/lib/rouge/demos/nial +35 -0
- data/lib/rouge/demos/ocl +4 -0
- data/lib/rouge/demos/opentype_feature_file +0 -1
- data/lib/rouge/demos/plsql +2 -0
- data/lib/rouge/demos/postscript +9 -0
- data/lib/rouge/demos/rescript +26 -0
- data/lib/rouge/demos/smarty +0 -1
- data/lib/rouge/demos/stan +13 -0
- data/lib/rouge/demos/stata +14 -0
- data/lib/rouge/demos/systemd +4 -0
- data/lib/rouge/demos/syzlang +15 -0
- data/lib/rouge/demos/syzprog +8 -0
- data/lib/rouge/formatter.rb +2 -2
- data/lib/rouge/formatters/html_inline.rb +0 -1
- data/lib/rouge/formatters/html_line_highlighter.rb +24 -0
- data/lib/rouge/formatters/html_line_table.rb +1 -3
- data/lib/rouge/formatters/html_linewise.rb +2 -3
- data/lib/rouge/guessers/disambiguation.rb +7 -0
- data/lib/rouge/lexer.rb +40 -22
- data/lib/rouge/lexers/apache/keywords.rb +1 -1
- data/lib/rouge/lexers/apex.rb +9 -7
- data/lib/rouge/lexers/apple_script.rb +1 -1
- data/lib/rouge/lexers/batchfile.rb +2 -1
- data/lib/rouge/lexers/c.rb +12 -2
- data/lib/rouge/lexers/ceylon.rb +2 -2
- data/lib/rouge/lexers/cmake.rb +10 -0
- data/lib/rouge/lexers/console.rb +1 -1
- data/lib/rouge/lexers/cpp.rb +9 -6
- data/lib/rouge/lexers/crystal.rb +14 -9
- data/lib/rouge/lexers/cypher.rb +8 -0
- data/lib/rouge/lexers/dafny.rb +128 -0
- data/lib/rouge/lexers/dart.rb +10 -9
- data/lib/rouge/lexers/docker.rb +5 -1
- data/lib/rouge/lexers/eex.rb +2 -2
- data/lib/rouge/lexers/eiffel.rb +0 -1
- data/lib/rouge/lexers/elm.rb +5 -5
- data/lib/rouge/lexers/email.rb +39 -0
- data/lib/rouge/lexers/factor.rb +2 -2
- data/lib/rouge/lexers/fluent.rb +74 -0
- data/lib/rouge/lexers/ghc_core.rb +3 -2
- data/lib/rouge/lexers/gherkin/keywords.rb +1 -1
- data/lib/rouge/lexers/graphql.rb +1 -1
- data/lib/rouge/lexers/groovy.rb +1 -1
- data/lib/rouge/lexers/hack.rb +1 -1
- data/lib/rouge/lexers/handlebars.rb +1 -1
- data/lib/rouge/lexers/hcl.rb +1 -0
- data/lib/rouge/lexers/http.rb +8 -2
- data/lib/rouge/lexers/hylang.rb +0 -1
- data/lib/rouge/lexers/idris.rb +210 -0
- data/lib/rouge/lexers/isabelle.rb +251 -0
- data/lib/rouge/lexers/isbl.rb +2 -2
- data/lib/rouge/lexers/j.rb +244 -0
- data/lib/rouge/lexers/janet.rb +9 -8
- data/lib/rouge/lexers/javascript.rb +9 -3
- data/lib/rouge/lexers/jsl.rb +25 -14
- data/lib/rouge/lexers/jsonnet.rb +4 -3
- data/lib/rouge/lexers/jsp.rb +2 -3
- data/lib/rouge/lexers/jsx.rb +1 -2
- data/lib/rouge/lexers/kotlin.rb +11 -5
- data/lib/rouge/lexers/lasso/keywords.rb +1 -1
- data/lib/rouge/lexers/lean.rb +164 -0
- data/lib/rouge/lexers/llvm/keywords.rb +1 -1
- data/lib/rouge/lexers/lua/keywords.rb +1 -1
- data/lib/rouge/lexers/mathematica/keywords.rb +1 -1
- data/lib/rouge/lexers/matlab/keywords.rb +1 -1
- data/lib/rouge/lexers/matlab.rb +3 -2
- data/lib/rouge/lexers/meson.rb +159 -0
- data/lib/rouge/lexers/nial.rb +166 -0
- data/lib/rouge/lexers/ocaml/common.rb +1 -1
- data/lib/rouge/lexers/ocl.rb +84 -0
- data/lib/rouge/lexers/opentype_feature_file.rb +0 -1
- data/lib/rouge/lexers/pascal.rb +2 -1
- data/lib/rouge/lexers/perl.rb +6 -4
- data/lib/rouge/lexers/php/keywords.rb +1 -1
- data/lib/rouge/lexers/php.rb +276 -128
- data/lib/rouge/lexers/plsql.rb +578 -0
- data/lib/rouge/lexers/postscript.rb +93 -0
- data/lib/rouge/lexers/powershell.rb +39 -29
- data/lib/rouge/lexers/prometheus.rb +0 -1
- data/lib/rouge/lexers/python.rb +4 -2
- data/lib/rouge/lexers/q.rb +1 -2
- data/lib/rouge/lexers/reasonml.rb +6 -5
- data/lib/rouge/lexers/rescript.rb +119 -0
- data/lib/rouge/lexers/ruby.rb +1 -1
- data/lib/rouge/lexers/rust.rb +84 -18
- data/lib/rouge/lexers/smarty.rb +1 -1
- data/lib/rouge/lexers/sparql.rb +5 -4
- data/lib/rouge/lexers/sqf/keywords.rb +1 -1
- data/lib/rouge/lexers/sql.rb +7 -7
- data/lib/rouge/lexers/stan.rb +451 -0
- data/lib/rouge/lexers/stata.rb +165 -0
- data/lib/rouge/lexers/supercollider.rb +0 -1
- data/lib/rouge/lexers/swift.rb +3 -3
- data/lib/rouge/lexers/systemd.rb +34 -0
- data/lib/rouge/lexers/syzlang.rb +317 -0
- data/lib/rouge/lexers/syzprog.rb +122 -0
- data/lib/rouge/lexers/tap.rb +0 -1
- data/lib/rouge/lexers/toml.rb +16 -9
- data/lib/rouge/lexers/tsx.rb +0 -1
- data/lib/rouge/lexers/tulip.rb +0 -1
- data/lib/rouge/lexers/velocity.rb +1 -1
- data/lib/rouge/lexers/viml/keywords.rb +1 -1
- data/lib/rouge/lexers/wollok.rb +0 -1
- data/lib/rouge/lexers/yaml.rb +1 -1
- data/lib/rouge/regex_lexer.rb +56 -1
- data/lib/rouge/themes/base16.rb +1 -0
- data/lib/rouge/themes/bw.rb +1 -0
- data/lib/rouge/themes/colorful.rb +1 -0
- data/lib/rouge/themes/github.rb +1 -0
- data/lib/rouge/themes/gruvbox.rb +2 -0
- data/lib/rouge/themes/igor_pro.rb +1 -0
- data/lib/rouge/themes/magritte.rb +1 -0
- data/lib/rouge/themes/monokai.rb +1 -0
- data/lib/rouge/themes/pastie.rb +1 -0
- data/lib/rouge/themes/thankful_eyes.rb +1 -0
- data/lib/rouge/themes/tulip.rb +1 -0
- data/lib/rouge/version.rb +1 -1
- data/lib/rouge.rb +1 -0
- metadata +43 -6
@@ -0,0 +1,317 @@
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Rouge
|
5
|
+
module Lexers
|
6
|
+
class Syzlang < RegexLexer
|
7
|
+
title "Syzlang"
|
8
|
+
desc "Syscall description language used by syzkaller"
|
9
|
+
tag 'syzlang'
|
10
|
+
|
11
|
+
def self.keywords
|
12
|
+
@keywords ||= Set.new %w(
|
13
|
+
align breaks_returns dec define disabled hex ignore_return in incdir
|
14
|
+
include inet inout oct opt out packed parent prog_timeout pseudo
|
15
|
+
resource size syscall timeout type varlen
|
16
|
+
)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.keywords_type
|
20
|
+
@keywords_type ||= Set.new %w(
|
21
|
+
array bitsize bool16 bool32 bool64 bool8 boolptr buffer bytesize
|
22
|
+
bytesize2 bytesize4 bytesize8 const csum filename fileoff flags fmt
|
23
|
+
int16 int16be int32 int32be int64 int64be int8 int8be intptr len
|
24
|
+
offsetof optional proc ptr ptr64 string stringnoz text vma vma64 void
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
comment = /#.*$/
|
29
|
+
inline_spaces = /[ \t]+/
|
30
|
+
eol_spaces = /[\n\r]+/
|
31
|
+
spaces = /\s+/
|
32
|
+
|
33
|
+
state :inline_break do
|
34
|
+
rule inline_spaces, Text
|
35
|
+
rule %r//, Text, :pop!
|
36
|
+
end
|
37
|
+
|
38
|
+
state :space_break do
|
39
|
+
rule spaces, Text
|
40
|
+
rule comment, Comment
|
41
|
+
rule %r//, Text, :pop!
|
42
|
+
end
|
43
|
+
|
44
|
+
id = /[a-zA-Z_][a-zA-Z0-9_]*/
|
45
|
+
num_id = /[a-zA-Z0-9_]+/
|
46
|
+
|
47
|
+
state :mixin_name do
|
48
|
+
rule id, Name
|
49
|
+
end
|
50
|
+
|
51
|
+
state :mixin_number do
|
52
|
+
rule %r/-?0x[\da-f]+/i, Num::Hex
|
53
|
+
rule %r/-?\d+/, Num::Integer
|
54
|
+
rule %r/'[^']?'/, Str::Char
|
55
|
+
end
|
56
|
+
|
57
|
+
state :mixin_string do
|
58
|
+
rule %r/"[^"]*"/, Str::Double
|
59
|
+
rule %r/`[^`]*`/, Str::Backtick
|
60
|
+
end
|
61
|
+
|
62
|
+
state :mixin_term do
|
63
|
+
mixin :mixin_number
|
64
|
+
mixin :mixin_string
|
65
|
+
|
66
|
+
# Keywords.
|
67
|
+
rule id do |m|
|
68
|
+
if self.class.keywords.include?(m[0])
|
69
|
+
token Keyword
|
70
|
+
elsif self.class.keywords_type.include?(m[0])
|
71
|
+
token Keyword::Type
|
72
|
+
else
|
73
|
+
token Name
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# Ranges.
|
78
|
+
rule %r/:/, Punctuation
|
79
|
+
|
80
|
+
# "struct$type" struct name format.
|
81
|
+
rule %r/\$/, Name
|
82
|
+
end
|
83
|
+
|
84
|
+
state :term_list do
|
85
|
+
rule spaces, Text
|
86
|
+
rule comment, Comment
|
87
|
+
mixin :mixin_term
|
88
|
+
rule %r/\[/, Punctuation, :term_list
|
89
|
+
rule %r/,/, Punctuation
|
90
|
+
rule %r/[\]\)]/, Punctuation, :pop!
|
91
|
+
end
|
92
|
+
|
93
|
+
state :arg_type do
|
94
|
+
mixin :mixin_term
|
95
|
+
rule %r/\[/, Punctuation, :term_list
|
96
|
+
rule %r//, Text, :pop!
|
97
|
+
end
|
98
|
+
|
99
|
+
state :include do
|
100
|
+
rule %r/(<)([^>]+)(>)/ do |m|
|
101
|
+
groups Punctuation, Str, Punctuation
|
102
|
+
end
|
103
|
+
rule %r//, Text, :pop!
|
104
|
+
end
|
105
|
+
|
106
|
+
state :define_name do
|
107
|
+
mixin :mixin_name
|
108
|
+
rule %r//, Text, :pop!
|
109
|
+
end
|
110
|
+
|
111
|
+
state :define_exp do
|
112
|
+
mixin :mixin_name
|
113
|
+
mixin :mixin_number
|
114
|
+
mixin :mixin_string
|
115
|
+
rule %r/[~!%\^&\*\-\+\/\|<>\?:]/, Operator
|
116
|
+
rule %r/[\(\){}\[\];,]/, Punctuation
|
117
|
+
rule inline_spaces, Text
|
118
|
+
rule %r//, Text, :pop!
|
119
|
+
end
|
120
|
+
|
121
|
+
state :resource_name do
|
122
|
+
mixin :mixin_name
|
123
|
+
rule %r//, Text, :pop!
|
124
|
+
end
|
125
|
+
|
126
|
+
state :resource_type do
|
127
|
+
rule %r/\[/, Punctuation, :arg_type
|
128
|
+
rule %r/\]/, Punctuation, :pop!
|
129
|
+
end
|
130
|
+
|
131
|
+
state :resource_values do
|
132
|
+
rule %r/:/ do
|
133
|
+
token Punctuation
|
134
|
+
push :resource_values_list
|
135
|
+
push :space_break
|
136
|
+
end
|
137
|
+
rule %r//, Text, :pop!
|
138
|
+
end
|
139
|
+
|
140
|
+
state :resource_values_list do
|
141
|
+
rule inline_spaces, Text
|
142
|
+
mixin :mixin_name
|
143
|
+
mixin :mixin_number
|
144
|
+
mixin :mixin_string
|
145
|
+
rule %r/,/, Punctuation, :space_break
|
146
|
+
rule %r//, Text, :pop!
|
147
|
+
end
|
148
|
+
|
149
|
+
state :flags_list do
|
150
|
+
rule inline_spaces, Text
|
151
|
+
rule %r/\./, Punctuation
|
152
|
+
mixin :mixin_name
|
153
|
+
mixin :mixin_number
|
154
|
+
mixin :mixin_string
|
155
|
+
rule %r/,/, Punctuation, :space_break
|
156
|
+
rule %r//, Punctuation, :pop!
|
157
|
+
end
|
158
|
+
|
159
|
+
state :syscall_args do
|
160
|
+
rule spaces, Text
|
161
|
+
rule comment, Comment
|
162
|
+
rule %r/\./, Punctuation
|
163
|
+
rule id do
|
164
|
+
token Name
|
165
|
+
push :arg_type
|
166
|
+
push :space_break
|
167
|
+
end
|
168
|
+
rule %r/,/, Punctuation
|
169
|
+
rule %r/\)/, Punctuation, :pop!
|
170
|
+
end
|
171
|
+
|
172
|
+
state :syscall_retval do
|
173
|
+
mixin :mixin_name
|
174
|
+
rule %r//, Text, :pop!
|
175
|
+
end
|
176
|
+
|
177
|
+
state :syscall_mods do
|
178
|
+
rule %r/\(/, Punctuation, :term_list
|
179
|
+
rule %r//, Text, :pop!
|
180
|
+
end
|
181
|
+
|
182
|
+
state :struct_fields do
|
183
|
+
rule id do
|
184
|
+
token Name
|
185
|
+
push :space_break
|
186
|
+
push :struct_field_mods
|
187
|
+
push :inline_break
|
188
|
+
push :arg_type
|
189
|
+
push :space_break
|
190
|
+
end
|
191
|
+
rule %r/[}\]]/, Punctuation, :pop!
|
192
|
+
end
|
193
|
+
|
194
|
+
state :struct_field_mods do
|
195
|
+
rule %r/\(/, Punctuation, :term_list
|
196
|
+
rule %r//, Text, :pop!
|
197
|
+
end
|
198
|
+
|
199
|
+
state :struct_mods do
|
200
|
+
rule %r/\[/, Punctuation, :term_list
|
201
|
+
rule %r//, Text, :pop!
|
202
|
+
end
|
203
|
+
|
204
|
+
state :type_name do
|
205
|
+
mixin :mixin_name
|
206
|
+
rule %r//, Text, :pop!
|
207
|
+
end
|
208
|
+
|
209
|
+
state :type_args do
|
210
|
+
rule %r/\[/, Punctuation, :type_args_list
|
211
|
+
rule %r//, Text, :pop!
|
212
|
+
end
|
213
|
+
|
214
|
+
state :type_args_list do
|
215
|
+
rule spaces, Text
|
216
|
+
rule comment, Comment
|
217
|
+
mixin :mixin_name
|
218
|
+
rule %r/,/, Punctuation
|
219
|
+
rule %r/\]/, Punctuation, :pop!
|
220
|
+
end
|
221
|
+
|
222
|
+
state :type_body do
|
223
|
+
rule %r/[{\[]/ do
|
224
|
+
token Punctuation
|
225
|
+
pop!
|
226
|
+
push :space_break
|
227
|
+
push :struct_mods
|
228
|
+
push :inline_break
|
229
|
+
push :struct_fields
|
230
|
+
push :space_break
|
231
|
+
end
|
232
|
+
rule %r// do
|
233
|
+
pop!
|
234
|
+
push :arg_type
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
state :root do
|
239
|
+
# Whitespace.
|
240
|
+
rule spaces, Text
|
241
|
+
|
242
|
+
# Comments.
|
243
|
+
rule comment, Comment
|
244
|
+
|
245
|
+
# Includes.
|
246
|
+
rule %r/(include|incdir)/ do
|
247
|
+
token Keyword
|
248
|
+
push :include
|
249
|
+
push :space_break
|
250
|
+
end
|
251
|
+
|
252
|
+
# Defines.
|
253
|
+
rule %r/define/ do
|
254
|
+
token Keyword
|
255
|
+
push :define_exp
|
256
|
+
push :space_break
|
257
|
+
push :define_name
|
258
|
+
push :space_break
|
259
|
+
end
|
260
|
+
|
261
|
+
# Resources.
|
262
|
+
rule %r/resource/ do
|
263
|
+
token Keyword
|
264
|
+
push :resource_values
|
265
|
+
push :inline_break
|
266
|
+
push :resource_type
|
267
|
+
push :inline_break
|
268
|
+
push :resource_name
|
269
|
+
push :space_break
|
270
|
+
end
|
271
|
+
|
272
|
+
# Flags and strings.
|
273
|
+
rule %r/(#{id}|_)(#{spaces})(=)/ do |m|
|
274
|
+
if m[1] == "_"
|
275
|
+
groups Keyword, Text, Punctuation
|
276
|
+
else
|
277
|
+
groups Name, Text, Punctuation
|
278
|
+
end
|
279
|
+
push :flags_list
|
280
|
+
push :space_break
|
281
|
+
end
|
282
|
+
|
283
|
+
# Syscalls.
|
284
|
+
rule %r/(#{id})(\$)?(#{num_id})?(#{spaces})?(\()/ do |m|
|
285
|
+
groups Name::Function, Punctuation, Name::Function::Magic, Text, Punctuation
|
286
|
+
push :syscall_mods
|
287
|
+
push :inline_break
|
288
|
+
push :syscall_retval
|
289
|
+
push :inline_break
|
290
|
+
push :syscall_args
|
291
|
+
push :space_break
|
292
|
+
end
|
293
|
+
|
294
|
+
# Structs and unions.
|
295
|
+
rule %r/(#{id}|#{id}\$#{num_id})(#{spaces})?([{\[])/ do |m|
|
296
|
+
groups Name, Text, Punctuation
|
297
|
+
push :inline_break
|
298
|
+
push :struct_mods
|
299
|
+
push :inline_break
|
300
|
+
push :struct_fields
|
301
|
+
push :space_break
|
302
|
+
end
|
303
|
+
|
304
|
+
# Types.
|
305
|
+
rule %r/type/ do
|
306
|
+
token Keyword
|
307
|
+
push :type_body
|
308
|
+
push :space_break
|
309
|
+
push :type_args
|
310
|
+
push :type_name
|
311
|
+
push :space_break
|
312
|
+
end
|
313
|
+
end
|
314
|
+
|
315
|
+
end
|
316
|
+
end
|
317
|
+
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
# -*- coding: utf-8 -*- #
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module Rouge
|
5
|
+
module Lexers
|
6
|
+
class Syzprog < RegexLexer
|
7
|
+
title "Syzprog"
|
8
|
+
desc "Program description language used by syzkaller"
|
9
|
+
tag 'syzprog'
|
10
|
+
|
11
|
+
def self.keywords
|
12
|
+
@keywords ||= Set.new %w(
|
13
|
+
ANY ANYBLOB ANYPTR ANYPTR64 ANYPTRS ANYRES16 ANYRES32 ANYRES64
|
14
|
+
ANYRESDEC ANYRESHEX ANYRESOCT ANYUNION AUTO false nil true void
|
15
|
+
async fail_nth rerun
|
16
|
+
)
|
17
|
+
end
|
18
|
+
|
19
|
+
comment = /#.*$/
|
20
|
+
inline_spaces = /[ \t]+/
|
21
|
+
eol_spaces = /[\n\r]+/
|
22
|
+
spaces = /\s+/
|
23
|
+
|
24
|
+
id = /[a-zA-Z_][a-zA-Z0-9_]*/
|
25
|
+
num_id = /[a-zA-Z0-9_]+/
|
26
|
+
res_id = /r[0-9]+/
|
27
|
+
|
28
|
+
state :inline_break do
|
29
|
+
rule inline_spaces, Text
|
30
|
+
rule %r//, Text, :pop!
|
31
|
+
end
|
32
|
+
|
33
|
+
state :eol_break do
|
34
|
+
rule eol_spaces, Text
|
35
|
+
rule comment, Comment
|
36
|
+
rule %r//, Text, :pop!
|
37
|
+
end
|
38
|
+
|
39
|
+
state :space_break do
|
40
|
+
rule spaces, Text
|
41
|
+
rule comment, Comment
|
42
|
+
rule %r//, Text, :pop!
|
43
|
+
end
|
44
|
+
|
45
|
+
state :mixin_number do
|
46
|
+
rule %r/-?0x[\da-f]+/i, Num::Hex
|
47
|
+
rule %r/-?\d+/, Num::Integer
|
48
|
+
end
|
49
|
+
|
50
|
+
state :mixin_string do
|
51
|
+
rule %r/"[^"]*"/, Str::Double
|
52
|
+
rule %r/`[^`]*`/, Str::Backtick
|
53
|
+
rule %r/'[^']*'/, Str::Single
|
54
|
+
end
|
55
|
+
|
56
|
+
state :mixin_term do
|
57
|
+
mixin :mixin_number
|
58
|
+
mixin :mixin_string
|
59
|
+
|
60
|
+
rule %r/#{res_id}/, Keyword::Pseudo
|
61
|
+
rule id do |m|
|
62
|
+
if self.class.keywords.include?(m[0])
|
63
|
+
token Keyword
|
64
|
+
else
|
65
|
+
token Name
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
state :mods_list do
|
71
|
+
rule spaces, Text
|
72
|
+
rule comment, Comment
|
73
|
+
mixin :mixin_term
|
74
|
+
rule %r/[,:]/, Punctuation
|
75
|
+
rule %r/\)/, Punctuation, :pop!
|
76
|
+
end
|
77
|
+
|
78
|
+
state :syscall_mods do
|
79
|
+
rule %r/\(/, Punctuation, :mods_list
|
80
|
+
rule %r//, Text, :pop!
|
81
|
+
end
|
82
|
+
|
83
|
+
state :syscall_args do
|
84
|
+
rule spaces, Text
|
85
|
+
rule comment, Comment
|
86
|
+
mixin :mixin_term
|
87
|
+
mixin :mixin_number
|
88
|
+
mixin :mixin_string
|
89
|
+
# This punctuation is a part of the syntax:
|
90
|
+
rule %r/[@&=,<>{}\[\]]/, Punctuation
|
91
|
+
# This punctuation is not, highlight just in case:
|
92
|
+
rule %r/[!#\$%\^\*\-\+\/\|~:;.\?]/, Punctuation
|
93
|
+
rule %r/\(/, Punctuation, :syscall_args
|
94
|
+
rule %r/\)/, Punctuation, :pop!
|
95
|
+
end
|
96
|
+
|
97
|
+
state :root do
|
98
|
+
# Whitespace.
|
99
|
+
rule spaces, Text
|
100
|
+
|
101
|
+
# Comments.
|
102
|
+
rule comment, Comment
|
103
|
+
|
104
|
+
# Return values.
|
105
|
+
rule %r/(#{res_id})(#{spaces})(=)/ do
|
106
|
+
groups Keyword::Pseudo, Text, Punctuation
|
107
|
+
end
|
108
|
+
|
109
|
+
# Syscalls.
|
110
|
+
rule %r/(#{id})(\$)?(#{num_id})?(#{spaces})?(\()/ do |m|
|
111
|
+
groups Name::Function, Punctuation, Name::Function::Magic, Text, Punctuation
|
112
|
+
push :syscall_mods
|
113
|
+
push :inline_break
|
114
|
+
push :syscall_args
|
115
|
+
push :space_break
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
data/lib/rouge/lexers/tap.rb
CHANGED
data/lib/rouge/lexers/toml.rb
CHANGED
@@ -11,14 +11,15 @@ module Rouge
|
|
11
11
|
filenames '*.toml', 'Pipfile'
|
12
12
|
mimetypes 'text/x-toml'
|
13
13
|
|
14
|
-
|
14
|
+
# bare keys and quoted keys
|
15
|
+
identifier = %r/(?:\S+|"[^"]+"|'[^']+')/
|
15
16
|
|
16
17
|
state :basic do
|
17
18
|
rule %r/\s+/, Text
|
18
19
|
rule %r/#.*?$/, Comment
|
19
20
|
rule %r/(true|false)/, Keyword::Constant
|
20
21
|
|
21
|
-
rule %r/(
|
22
|
+
rule %r/(#{identifier})(\s*)(=)(\s*)(\{)/ do
|
22
23
|
groups Name::Namespace, Text, Operator, Text, Punctuation
|
23
24
|
push :inline
|
24
25
|
end
|
@@ -27,9 +28,14 @@ module Rouge
|
|
27
28
|
|
28
29
|
rule %r/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z/, Literal::Date
|
29
30
|
|
30
|
-
rule %r/(\d
|
31
|
-
rule %r
|
32
|
-
rule %r
|
31
|
+
rule %r/[+-]?\d+(?:_\d+)*\.\d+(?:_\d+)*(?:[eE][+-]?\d+(?:_\d+)*)?/, Num::Float
|
32
|
+
rule %r/[+-]?\d+(?:_\d+)*[eE][+-]?\d+(?:_\d+)*/, Num::Float
|
33
|
+
rule %r/[+-]?(?:nan|inf)/, Num::Float
|
34
|
+
|
35
|
+
rule %r/0x\h+(?:_\h+)*/, Num::Hex
|
36
|
+
rule %r/0o[0-7]+(?:_[0-7]+)*/, Num::Oct
|
37
|
+
rule %r/0b[01]+(?:_[01]+)*/, Num::Bin
|
38
|
+
rule %r/[+-]?\d+(?:_\d+)*/, Num::Integer
|
33
39
|
end
|
34
40
|
|
35
41
|
state :root do
|
@@ -48,6 +54,11 @@ module Rouge
|
|
48
54
|
|
49
55
|
state :content do
|
50
56
|
mixin :basic
|
57
|
+
|
58
|
+
rule %r/(#{identifier})(\s*)(=)/ do
|
59
|
+
groups Name::Property, Text, Punctuation
|
60
|
+
end
|
61
|
+
|
51
62
|
rule %r/"""/, Str, :mdq
|
52
63
|
rule %r/"/, Str, :dq
|
53
64
|
rule %r/'''/, Str, :msq
|
@@ -95,10 +106,6 @@ module Rouge
|
|
95
106
|
state :inline do
|
96
107
|
mixin :content
|
97
108
|
|
98
|
-
rule %r/(#{identifier})(\s*)(=)/ do
|
99
|
-
groups Name::Property, Text, Punctuation
|
100
|
-
end
|
101
|
-
|
102
109
|
rule %r/\}/, Punctuation, :pop!
|
103
110
|
end
|
104
111
|
end
|
data/lib/rouge/lexers/tsx.rb
CHANGED
data/lib/rouge/lexers/tulip.rb
CHANGED
@@ -63,7 +63,7 @@ module Rouge
|
|
63
63
|
rule %r/0[xX][0-9a-fA-F]+[Ll]?/, Num::Hex
|
64
64
|
rule %r/\b[0-9]+\b/, Num::Integer
|
65
65
|
rule %r/(true|false|null)\b/, Keyword::Constant
|
66
|
-
rule %r/[(\[]/, Punctuation, :push
|
66
|
+
rule %r/[(\[]/, Punctuation, :push
|
67
67
|
rule %r/[)\]}]/, Punctuation, :pop!
|
68
68
|
end
|
69
69
|
end
|
data/lib/rouge/lexers/wollok.rb
CHANGED
data/lib/rouge/lexers/yaml.rb
CHANGED
@@ -175,7 +175,7 @@ module Rouge
|
|
175
175
|
|
176
176
|
state :block_nodes do
|
177
177
|
# implicit key
|
178
|
-
rule %r/(
|
178
|
+
rule %r/([^#,:?\[\]{}"'\n]+)(:)(?=\s|$)/ do |m|
|
179
179
|
groups Name::Attribute, Punctuation::Indicator
|
180
180
|
set_indent m[0], :implicit => true
|
181
181
|
end
|
data/lib/rouge/regex_lexer.rb
CHANGED
@@ -6,6 +6,37 @@ module Rouge
|
|
6
6
|
# A stateful lexer that uses sets of regular expressions to
|
7
7
|
# tokenize a string. Most lexers are instances of RegexLexer.
|
8
8
|
class RegexLexer < Lexer
|
9
|
+
class InvalidRegex < StandardError
|
10
|
+
def initialize(re)
|
11
|
+
@re = re
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_s
|
15
|
+
"regex #{@re.inspect} matches empty string, but has no predicate!"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class ClosedState < StandardError
|
20
|
+
attr_reader :state
|
21
|
+
def initialize(state)
|
22
|
+
@state = state
|
23
|
+
end
|
24
|
+
|
25
|
+
def rule
|
26
|
+
@state.rules.last
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_s
|
30
|
+
rule = @state.rules.last
|
31
|
+
msg = "State :#{state.name} cannot continue after #{rule.inspect}, which will always match."
|
32
|
+
if rule.re.source.include?('*')
|
33
|
+
msg += " Consider replacing * with +."
|
34
|
+
end
|
35
|
+
|
36
|
+
msg
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
9
40
|
# A rule is a tuple of a regular expression to test, and a callback
|
10
41
|
# to perform if the test succeeds.
|
11
42
|
#
|
@@ -42,12 +73,13 @@ module Rouge
|
|
42
73
|
end
|
43
74
|
|
44
75
|
class StateDSL
|
45
|
-
attr_reader :rules
|
76
|
+
attr_reader :rules, :name
|
46
77
|
def initialize(name, &defn)
|
47
78
|
@name = name
|
48
79
|
@defn = defn
|
49
80
|
@rules = []
|
50
81
|
@loaded = false
|
82
|
+
@closed = false
|
51
83
|
end
|
52
84
|
|
53
85
|
def to_state(lexer_class)
|
@@ -95,10 +127,14 @@ module Rouge
|
|
95
127
|
# {RegexLexer#token}, and {RegexLexer#delegate}. The first
|
96
128
|
# argument can be used to access the match groups.
|
97
129
|
def rule(re, tok=nil, next_state=nil, &callback)
|
130
|
+
raise ClosedState.new(self) if @closed
|
131
|
+
|
98
132
|
if tok.nil? && callback.nil?
|
99
133
|
raise "please pass `rule` a token to yield or a callback"
|
100
134
|
end
|
101
135
|
|
136
|
+
matches_empty = re =~ ''
|
137
|
+
|
102
138
|
callback ||= case next_state
|
103
139
|
when :pop!
|
104
140
|
proc do |stream|
|
@@ -123,6 +159,9 @@ module Rouge
|
|
123
159
|
@stack.push(state)
|
124
160
|
end
|
125
161
|
when nil
|
162
|
+
# cannot use an empty-matching regexp with no predicate
|
163
|
+
raise InvalidRegex.new(re) if matches_empty
|
164
|
+
|
126
165
|
proc do |stream|
|
127
166
|
puts " yielding: #{tok.qualname}, #{stream[0].inspect}" if @debug
|
128
167
|
@output_stream.call(tok, stream[0])
|
@@ -132,6 +171,22 @@ module Rouge
|
|
132
171
|
end
|
133
172
|
|
134
173
|
rules << Rule.new(re, callback)
|
174
|
+
|
175
|
+
close! if matches_empty && !context_sensitive?(re)
|
176
|
+
end
|
177
|
+
|
178
|
+
def context_sensitive?(re)
|
179
|
+
source = re.source
|
180
|
+
return true if source =~ /[(][?]<?[!=]/
|
181
|
+
|
182
|
+
# anchors count as lookahead/behind
|
183
|
+
return true if source =~ /[$^]/
|
184
|
+
|
185
|
+
false
|
186
|
+
end
|
187
|
+
|
188
|
+
def close!
|
189
|
+
@closed = true
|
135
190
|
end
|
136
191
|
|
137
192
|
# Mix in the rules from another state into this state. The rules
|
data/lib/rouge/themes/base16.rb
CHANGED
data/lib/rouge/themes/bw.rb
CHANGED
@@ -37,6 +37,7 @@ module Rouge
|
|
37
37
|
style Name::Decorator, :fg => "#555", :bold => true
|
38
38
|
|
39
39
|
style Literal::String, :bg => "#fff0f0"
|
40
|
+
style Literal::String::Affix, :fg => "#080", :bold => true
|
40
41
|
style Literal::String::Char, :fg => "#04D"
|
41
42
|
style Literal::String::Doc, :fg => "#D42"
|
42
43
|
style Literal::String::Interpol, :bg => "#eee"
|
data/lib/rouge/themes/github.rb
CHANGED
@@ -35,6 +35,7 @@ module Rouge
|
|
35
35
|
style Literal::Number::Integer, :fg => '#009999'
|
36
36
|
style Literal::Number::Oct, :fg => '#009999'
|
37
37
|
style Literal::Number, :fg => '#009999'
|
38
|
+
style Literal::String::Affix, :fg => '#000000', :bold => true
|
38
39
|
style Literal::String::Backtick, :fg => '#d14'
|
39
40
|
style Literal::String::Char, :fg => '#d14'
|
40
41
|
style Literal::String::Doc, :fg => '#d14'
|
data/lib/rouge/themes/gruvbox.rb
CHANGED