rouge 4.6.1 → 5.0.0
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.
- checksums.yaml +4 -4
- data/Gemfile +11 -4
- data/bin/rougify +3 -4
- data/lib/rouge/cli.rb +7 -10
- data/lib/rouge/demos/abap +30 -4
- data/lib/rouge/demos/dylan +8 -0
- data/lib/rouge/demos/gjs +23 -0
- data/lib/rouge/demos/gts +36 -0
- data/lib/rouge/demos/kick_assembler +14 -0
- data/lib/rouge/demos/pdf +29 -0
- data/lib/rouge/demos/thrift +15 -0
- data/lib/rouge/demos/veryl +24 -0
- data/lib/rouge/eager.rb +3 -0
- data/lib/rouge/formatters/html.rb +8 -1
- data/lib/rouge/formatters/html_debug.rb +16 -0
- data/lib/rouge/formatters/html_legacy.rb +15 -1
- data/lib/rouge/formatters/html_legacy_table.rb +57 -0
- data/lib/rouge/formatters/html_line_highlighter.rb +11 -4
- data/lib/rouge/formatters/html_line_table.rb +8 -3
- data/lib/rouge/formatters/html_linewise.rb +11 -2
- data/lib/rouge/formatters/html_pygments.rb +6 -1
- data/lib/rouge/formatters/html_table.rb +47 -21
- data/lib/rouge/formatters/terminal256.rb +3 -3
- data/lib/rouge/formatters/tex.rb +1 -1
- data/lib/rouge/guesser.rb +1 -1
- data/lib/rouge/guessers/disambiguation.rb +2 -2
- data/lib/rouge/guessers/glob_mapping.rb +2 -2
- data/lib/rouge/guessers/modeline.rb +2 -2
- data/lib/rouge/lexer.rb +40 -21
- data/lib/rouge/lexers/abap/builtins.rb +187 -0
- data/lib/rouge/lexers/abap.rb +70 -178
- data/lib/rouge/lexers/ada.rb +1 -1
- data/lib/rouge/lexers/apache/keywords.rb +3 -11
- data/lib/rouge/lexers/apache.rb +25 -24
- data/lib/rouge/lexers/apex.rb +2 -2
- data/lib/rouge/lexers/apiblueprint.rb +2 -2
- data/lib/rouge/lexers/bicep.rb +2 -2
- data/lib/rouge/lexers/biml.rb +36 -9
- data/lib/rouge/lexers/brightscript.rb +3 -4
- data/lib/rouge/lexers/c.rb +9 -5
- data/lib/rouge/lexers/cobol.rb +1 -1
- data/lib/rouge/lexers/console.rb +11 -5
- data/lib/rouge/lexers/cpp.rb +10 -12
- data/lib/rouge/lexers/crystal.rb +1 -1
- data/lib/rouge/lexers/css.rb +21 -2
- data/lib/rouge/lexers/cuda.rb +4 -4
- data/lib/rouge/lexers/cython.rb +26 -50
- data/lib/rouge/lexers/dafny.rb +1 -1
- data/lib/rouge/lexers/dart.rb +2 -0
- data/lib/rouge/lexers/datastudio.rb +1 -1
- data/lib/rouge/lexers/digdag.rb +2 -3
- data/lib/rouge/lexers/dylan.rb +109 -0
- data/lib/rouge/lexers/ecl.rb +3 -3
- data/lib/rouge/lexers/elixir.rb +14 -9
- data/lib/rouge/lexers/escape.rb +1 -1
- data/lib/rouge/lexers/factor.rb +1 -1
- data/lib/rouge/lexers/freefem.rb +2 -2
- data/lib/rouge/lexers/ghc_cmm.rb +1 -1
- data/lib/rouge/lexers/ghc_core.rb +1 -1
- data/lib/rouge/lexers/gherkin/keywords.rb +10 -6
- data/lib/rouge/lexers/gherkin.rb +28 -26
- data/lib/rouge/lexers/gjs.rb +39 -0
- data/lib/rouge/lexers/glsl/builtins.rb +17 -0
- data/lib/rouge/lexers/glsl.rb +50 -113
- data/lib/rouge/lexers/go.rb +8 -6
- data/lib/rouge/lexers/gradle.rb +2 -2
- data/lib/rouge/lexers/groovy.rb +6 -0
- data/lib/rouge/lexers/gts.rb +39 -0
- data/lib/rouge/lexers/hack.rb +4 -6
- data/lib/rouge/lexers/haxe.rb +2 -2
- data/lib/rouge/lexers/hlsl.rb +6 -6
- data/lib/rouge/lexers/hocon.rb +2 -2
- data/lib/rouge/lexers/hql.rb +15 -19
- data/lib/rouge/lexers/idris.rb +1 -1
- data/lib/rouge/lexers/igorpro/builtins.rb +1530 -0
- data/lib/rouge/lexers/igorpro.rb +49 -520
- data/lib/rouge/lexers/irb.rb +3 -3
- data/lib/rouge/lexers/isbl.rb +7 -43
- data/lib/rouge/lexers/j.rb +1 -1
- data/lib/rouge/lexers/json5.rb +2 -2
- data/lib/rouge/lexers/json_doc.rb +2 -2
- data/lib/rouge/lexers/jsp.rb +119 -119
- data/lib/rouge/lexers/jsx.rb +2 -2
- data/lib/rouge/lexers/kick_assembler.rb +100 -0
- data/lib/rouge/lexers/kotlin.rb +5 -0
- data/lib/rouge/lexers/lasso/keywords.rb +6 -6
- data/lib/rouge/lexers/lasso.rb +9 -11
- data/lib/rouge/lexers/liquid.rb +5 -6
- data/lib/rouge/lexers/llvm/keywords.rb +3 -12
- data/lib/rouge/lexers/llvm.rb +5 -16
- data/lib/rouge/lexers/lua/keywords.rb +11 -13
- data/lib/rouge/lexers/lua.rb +8 -7
- data/lib/rouge/lexers/lutin.rb +5 -4
- data/lib/rouge/lexers/m68k.rb +3 -3
- data/lib/rouge/lexers/mason.rb +110 -110
- data/lib/rouge/lexers/mathematica/keywords.rb +1 -3
- data/lib/rouge/lexers/mathematica.rb +6 -7
- data/lib/rouge/lexers/matlab/keywords.rb +2 -2
- data/lib/rouge/lexers/matlab.rb +5 -5
- data/lib/rouge/lexers/meson.rb +1 -1
- data/lib/rouge/lexers/mojo.rb +6 -2
- data/lib/rouge/lexers/moonscript.rb +19 -17
- data/lib/rouge/lexers/nesasm.rb +6 -6
- data/lib/rouge/lexers/nial.rb +7 -8
- data/lib/rouge/lexers/nim.rb +3 -3
- data/lib/rouge/lexers/nix.rb +10 -8
- data/lib/rouge/lexers/objective_c.rb +3 -3
- data/lib/rouge/lexers/objective_cpp.rb +3 -2
- data/lib/rouge/lexers/ocaml.rb +2 -2
- data/lib/rouge/lexers/openedge.rb +9 -9
- data/lib/rouge/lexers/pdf.rb +109 -0
- data/lib/rouge/lexers/php/keywords.rb +136 -188
- data/lib/rouge/lexers/php.rb +100 -11
- data/lib/rouge/lexers/plsql.rb +8 -9
- data/lib/rouge/lexers/postscript.rb +1 -1
- data/lib/rouge/lexers/powershell.rb +1 -1
- data/lib/rouge/lexers/python.rb +111 -66
- data/lib/rouge/lexers/qml.rb +2 -2
- data/lib/rouge/lexers/reasonml.rb +2 -2
- data/lib/rouge/lexers/rego.rb +53 -53
- data/lib/rouge/lexers/rescript.rb +2 -2
- data/lib/rouge/lexers/robot_framework.rb +12 -12
- data/lib/rouge/lexers/{coq.rb → rocq.rb} +15 -6
- data/lib/rouge/lexers/ruby.rb +33 -7
- data/lib/rouge/lexers/rust.rb +1 -0
- data/lib/rouge/lexers/sas.rb +164 -165
- data/lib/rouge/lexers/sass/common.rb +1 -1
- data/lib/rouge/lexers/sass.rb +2 -2
- data/lib/rouge/lexers/scss.rb +2 -2
- data/lib/rouge/lexers/sed.rb +1 -1
- data/lib/rouge/lexers/shell.rb +5 -5
- data/lib/rouge/lexers/slice.rb +2 -2
- data/lib/rouge/lexers/sparql.rb +1 -1
- data/lib/rouge/lexers/sqf/keywords.rb +5 -3
- data/lib/rouge/lexers/sqf.rb +3 -4
- data/lib/rouge/lexers/stan.rb +9 -15
- data/lib/rouge/lexers/svelte.rb +2 -2
- data/lib/rouge/lexers/swift.rb +2 -2
- data/lib/rouge/lexers/tcl.rb +1 -1
- data/lib/rouge/lexers/terraform.rb +3 -3
- data/lib/rouge/lexers/thrift.rb +120 -0
- data/lib/rouge/lexers/tsx.rb +3 -3
- data/lib/rouge/lexers/ttcn3.rb +1 -1
- data/lib/rouge/lexers/twig.rb +2 -2
- data/lib/rouge/lexers/typescript.rb +3 -3
- data/lib/rouge/lexers/varnish.rb +8 -8
- data/lib/rouge/lexers/veryl.rb +109 -0
- data/lib/rouge/lexers/viml/keywords.rb +5 -7
- data/lib/rouge/lexers/viml.rb +8 -10
- data/lib/rouge/lexers/vue.rb +2 -2
- data/lib/rouge/lexers/xquery.rb +2 -1
- data/lib/rouge/lexers/yaml.rb +13 -1
- data/lib/rouge/lexers/yang.rb +42 -74
- data/lib/rouge/lexers/zig.rb +10 -10
- data/lib/rouge/plugins/redcarpet.rb +3 -2
- data/lib/rouge/regex_lexer.rb +25 -14
- data/lib/rouge/themes/gruvbox.rb +3 -0
- data/lib/rouge/token.rb +1 -1
- data/lib/rouge/util.rb +1 -1
- data/lib/rouge/version.rb +1 -1
- data/lib/rouge.rb +70 -59
- data/lib/rubocop/cop/rouge/no_building_alternation_pattern_in_regexp.rb +71 -0
- data/lib/rubocop/cop/rouge/no_huge_collections.rb +37 -0
- data/rouge.gemspec +8 -5
- metadata +44 -9
- data/lib/rouge/lexers/isbl/builtins.rb +0 -17
- data/lib/rouge/lexers/matlab/builtins.rb +0 -11
- /data/lib/rouge/demos/{coq → rocq} +0 -0
data/lib/rouge/lexers/php.rb
CHANGED
|
@@ -18,6 +18,10 @@ module Rouge
|
|
|
18
18
|
option :funcnamehighlighting, 'Whether to highlight builtin functions (default: true)'
|
|
19
19
|
option :disabledmodules, 'Disable certain modules from being highlighted as builtins (default: empty)'
|
|
20
20
|
|
|
21
|
+
lazy auto: false do
|
|
22
|
+
require_relative "php/keywords"
|
|
23
|
+
end
|
|
24
|
+
|
|
21
25
|
def initialize(*)
|
|
22
26
|
super
|
|
23
27
|
|
|
@@ -26,6 +30,8 @@ module Rouge
|
|
|
26
30
|
@start_inline = bool_option(:start_inline) { :guess }
|
|
27
31
|
@funcnamehighlighting = bool_option(:funcnamehighlighting) { true }
|
|
28
32
|
@disabledmodules = list_option(:disabledmodules)
|
|
33
|
+
|
|
34
|
+
eager_load! if @funcnamehighlighting
|
|
29
35
|
end
|
|
30
36
|
|
|
31
37
|
def self.detect?(text)
|
|
@@ -48,16 +54,11 @@ module Rouge
|
|
|
48
54
|
)
|
|
49
55
|
end
|
|
50
56
|
|
|
51
|
-
def self.builtins
|
|
52
|
-
Kernel::load File.join(Lexers::BASE_DIR, 'php/keywords.rb')
|
|
53
|
-
builtins
|
|
54
|
-
end
|
|
55
|
-
|
|
56
57
|
def builtins
|
|
57
58
|
return [] unless @funcnamehighlighting
|
|
58
59
|
|
|
59
60
|
@builtins ||= Set.new.tap do |builtins|
|
|
60
|
-
|
|
61
|
+
BUILTINS.each do |mod, fns|
|
|
61
62
|
next if @disabledmodules.include? mod
|
|
62
63
|
builtins.merge(fns)
|
|
63
64
|
end
|
|
@@ -100,11 +101,16 @@ module Rouge
|
|
|
100
101
|
end
|
|
101
102
|
|
|
102
103
|
state :names do
|
|
104
|
+
rule %r/(?:public|protected|private)\(set\)/i do
|
|
105
|
+
push :in_visibility
|
|
106
|
+
token Keyword
|
|
107
|
+
end
|
|
108
|
+
|
|
103
109
|
rule %r/#{id_with_ns}(?=\s*\()/ do |m|
|
|
104
110
|
name = m[0].downcase
|
|
105
111
|
if self.class.keywords.include? name
|
|
106
112
|
token Keyword
|
|
107
|
-
elsif
|
|
113
|
+
elsif builtins.include? name
|
|
108
114
|
token Name::Builtin
|
|
109
115
|
else
|
|
110
116
|
token Name::Function
|
|
@@ -179,7 +185,7 @@ module Rouge
|
|
|
179
185
|
|
|
180
186
|
# numbers
|
|
181
187
|
rule %r/(\d[_\d]*)?\.(\d[_\d]*)?(e[+-]?\d[_\d]*)?/i, Num::Float
|
|
182
|
-
rule %r/
|
|
188
|
+
rule %r/0o?[0-7][0-7_]*/i, Num::Oct
|
|
183
189
|
rule %r/0b[01][01_]*/i, Num::Bin
|
|
184
190
|
rule %r/0x[a-f0-9][a-f0-9_]*/i, Num::Hex
|
|
185
191
|
rule %r/\d[_\d]*/, Num::Integer
|
|
@@ -243,6 +249,13 @@ module Rouge
|
|
|
243
249
|
groups Keyword::Declaration, Text, Name::Class
|
|
244
250
|
end
|
|
245
251
|
|
|
252
|
+
rule %r/(enum)
|
|
253
|
+
(\s+)
|
|
254
|
+
(#{id_with_ns})/ix do |m|
|
|
255
|
+
groups Keyword::Declaration, Text, Name::Class
|
|
256
|
+
push :in_enum
|
|
257
|
+
end
|
|
258
|
+
|
|
246
259
|
mixin :names
|
|
247
260
|
|
|
248
261
|
rule %r/[;,\(\)\{\}\[\]]/, Punctuation
|
|
@@ -280,6 +293,9 @@ module Rouge
|
|
|
280
293
|
end
|
|
281
294
|
|
|
282
295
|
state :in_const do
|
|
296
|
+
rule %r/(\??#{id})(\s+)(#{id})/i do
|
|
297
|
+
groups Keyword::Type, Text, Name::Constant
|
|
298
|
+
end
|
|
283
299
|
rule id, Name::Constant
|
|
284
300
|
rule %r/=/, Operator, :in_assign
|
|
285
301
|
mixin :escape
|
|
@@ -307,8 +323,9 @@ module Rouge
|
|
|
307
323
|
rule %r/,/, Punctuation
|
|
308
324
|
rule %r/[.]{3}/, Punctuation
|
|
309
325
|
rule %r/=/, Operator, :in_assign
|
|
310
|
-
rule %r/\b(?:public|protected|private|readonly)\b/i, Keyword
|
|
311
|
-
rule %r
|
|
326
|
+
rule %r/\b(?:public|protected|private|readonly)(?:\(set\)|\b)/i, Keyword
|
|
327
|
+
rule %r/\breadonly\b/i, Keyword
|
|
328
|
+
rule %r/\??#{id}/, Keyword::Type, :in_property
|
|
312
329
|
mixin :escape
|
|
313
330
|
mixin :whitespace
|
|
314
331
|
mixin :variables
|
|
@@ -369,13 +386,85 @@ module Rouge
|
|
|
369
386
|
end
|
|
370
387
|
|
|
371
388
|
state :in_visibility do
|
|
389
|
+
rule %r/\b(?:public|protected|private)(?:\(set\)|\b)/i, Keyword
|
|
372
390
|
rule %r/\b(?:readonly|static)\b/i, Keyword
|
|
373
391
|
rule %r/(?=(abstract|const|function)\b)/i, Keyword, :pop!
|
|
374
|
-
rule %r/\??#{id}
|
|
392
|
+
rule %r/\??#{id}/ do
|
|
393
|
+
token Keyword::Type
|
|
394
|
+
goto :in_property
|
|
395
|
+
end
|
|
396
|
+
mixin :escape
|
|
397
|
+
mixin :whitespace
|
|
398
|
+
mixin :return
|
|
399
|
+
end
|
|
400
|
+
|
|
401
|
+
state :in_enum do
|
|
402
|
+
rule %r/:/, Punctuation, :in_enum_base_type
|
|
403
|
+
rule %r/\{/, Punctuation, :in_enum_body
|
|
404
|
+
mixin :escape
|
|
405
|
+
mixin :whitespace
|
|
406
|
+
mixin :return
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
state :in_enum_base_type do
|
|
410
|
+
rule id, Keyword::Type, :pop!
|
|
411
|
+
mixin :escape
|
|
412
|
+
mixin :whitespace
|
|
413
|
+
mixin :return
|
|
414
|
+
end
|
|
415
|
+
|
|
416
|
+
state :in_enum_body do
|
|
417
|
+
rule %r/\}/, Punctuation, :pop!
|
|
418
|
+
rule %r/(case)(\s+)(#{id})/i do
|
|
419
|
+
groups Keyword, Text, Name::Constant
|
|
420
|
+
end
|
|
421
|
+
mixin :php
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
state :in_property do
|
|
425
|
+
rule %r/\$+#{id}/, Name::Variable
|
|
426
|
+
rule %r/\{/ do
|
|
427
|
+
token Punctuation
|
|
428
|
+
goto :in_property_hooks
|
|
429
|
+
end
|
|
430
|
+
rule %r/[;,]/, Punctuation, :pop!
|
|
431
|
+
rule %r/(?==)/ do
|
|
432
|
+
pop!
|
|
433
|
+
end
|
|
434
|
+
rule %r/[|&]/, Operator
|
|
435
|
+
rule %r/\??#{id}/, Keyword::Type
|
|
375
436
|
mixin :escape
|
|
376
437
|
mixin :whitespace
|
|
377
438
|
mixin :return
|
|
378
439
|
end
|
|
440
|
+
|
|
441
|
+
state :in_property_hooks do
|
|
442
|
+
rule %r/\}/, Punctuation, :pop!
|
|
443
|
+
rule %r/\bfinal\b/i, Keyword
|
|
444
|
+
rule %r/&(?=get\b)/, Operator
|
|
445
|
+
rule %r/(\bset\b)(\s*)(\()/ do
|
|
446
|
+
groups Keyword, Text, Punctuation
|
|
447
|
+
push :in_property_hook_params
|
|
448
|
+
end
|
|
449
|
+
rule %r/\b(?:get|set)\b/, Keyword
|
|
450
|
+
rule %r/\{/, Punctuation, :in_function_body
|
|
451
|
+
rule %r/[;,\(\)\[\]]/, Punctuation
|
|
452
|
+
mixin :escape
|
|
453
|
+
mixin :whitespace
|
|
454
|
+
mixin :variables
|
|
455
|
+
mixin :values
|
|
456
|
+
mixin :names
|
|
457
|
+
mixin :operators
|
|
458
|
+
rule %r/[=?]/, Operator
|
|
459
|
+
end
|
|
460
|
+
|
|
461
|
+
state :in_property_hook_params do
|
|
462
|
+
rule %r/\)/, Punctuation, :pop!
|
|
463
|
+
rule %r/\??#{id}/, Keyword::Type
|
|
464
|
+
mixin :escape
|
|
465
|
+
mixin :whitespace
|
|
466
|
+
mixin :variables
|
|
467
|
+
end
|
|
379
468
|
end
|
|
380
469
|
end
|
|
381
470
|
end
|
data/lib/rouge/lexers/plsql.rb
CHANGED
|
@@ -22,7 +22,7 @@ module Rouge
|
|
|
22
22
|
OCIDURATION OCIINTERVAL OCILOBLOCATOR OCINUMBER OCIRAW OCIREF OCIREFCURSOR
|
|
23
23
|
OCIROWID OCISTRING OCITYPE OF ON OPTION OR ORACLE ORADATA ORDER ORLANY ORLVARY
|
|
24
24
|
OUT OVERRIDING PARALLEL_ENABLE PARAMETER PASCAL PCTFREE PIPE PIPELINED POLYMORPHIC
|
|
25
|
-
PRAGMA PRIOR PUBLIC RAISE RECORD RELIES_ON REM RENAME RESOURCE RESULT REVOKE ROWID
|
|
25
|
+
PRAGMA PRIOR PUBLIC RAISE RECORD RELIES_ON REM RENAME RESOURCE RESULT REVOKE ROWID
|
|
26
26
|
SB1 SB2 SELECT SEPARATE SET SHARE SHORT SIZE SIZE_T SPARSE SQLCODE SQLDATA
|
|
27
27
|
SQLNAME SQLSTATE STANDARD START STORED STRUCT STYLE SYNONYM TABLE TDO THEN
|
|
28
28
|
TRANSACTIONAL TRIGGER UB1 UB4 UNION UNIQUE UNSIGNED UNTRUSTED UPDATE VALIST
|
|
@@ -414,7 +414,7 @@ module Rouge
|
|
|
414
414
|
PREDICTION PREDICTION_BOUNDS PREDICTION_COST PREDICTION_DETAILS PREDICTION_PROBABILITY
|
|
415
415
|
PREDICTION_SET PRESENTNNV PRESENTV PREVIOUS RANK RATIO_TO_REPORT RAWTOHEX
|
|
416
416
|
RAWTONHEX REFTOHEX REGEXP_COUNT REGEXP_INSTR REGEXP_REPLACE REGEXP_SUBSTR
|
|
417
|
-
REMAINDER REPLACE ROUND
|
|
417
|
+
REMAINDER REPLACE ROUND ROWIDTOCHAR ROWIDTONCHAR ROW_NUMBER RPAD RTRIM
|
|
418
418
|
SCN_TO_TIMESTAMP SESSIONTIMEZONE SET SIGN SIN SINH SOUNDEX SQRT STANDARD_HASH
|
|
419
419
|
STATS_BINOMIAL_TEST STATS_CROSSTAB STATS_F_TEST STATS_KS_TEST STATS_MODE STATS_MW_TEST
|
|
420
420
|
STATS_ONE_WAY_ANOVA STATS_WSR_TEST STDDEV STDDEV_POP STDDEV_SAMP SUBSTR SUM
|
|
@@ -439,9 +439,8 @@ module Rouge
|
|
|
439
439
|
DATE TIMESTAMP INTERVAL LOCAL TIME ZONE TO MONTH SECOND YEAR DAY
|
|
440
440
|
BLOB CLOB NCLOB BFILE
|
|
441
441
|
UROWID
|
|
442
|
-
CHARACTER VARYING VARCHAR NATIONAL
|
|
443
|
-
NUMERIC DECIMAL DEC INTEGER INT SMALLINT
|
|
444
|
-
FLOAT DOUBLE PRECISION REAL
|
|
442
|
+
CHARACTER VARYING VARCHAR NATIONAL
|
|
443
|
+
NUMERIC DECIMAL DEC INTEGER INT SMALLINT DOUBLE PRECISION REAL
|
|
445
444
|
SDO_GEOMETRY SDO_TOPO_GEOMETRY SDO_GEORASTER
|
|
446
445
|
REF ANYTYPE ANYDATA ANYDATASET XMLTYPE HTTPURITYPE XDBURITYPE DUBRITYPE
|
|
447
446
|
BOOLEAN PLS_INTEGER BINARY_INTEGER SIMPLE_FLOAT SIMPLE_INTEGER SIMPLE_DOUBLE SYS_REFCURSOR
|
|
@@ -479,7 +478,7 @@ module Rouge
|
|
|
479
478
|
# Numbers
|
|
480
479
|
rule %r/[+-]?(?:(?:\.\d+(?:[eE][+-]?\d+)?)|\d+\.(?:\d+(?:[eE][+-]?\d+)?)?)[fFdD]?/, Num::Float
|
|
481
480
|
rule %r/[+-]?\d+/, Num::Integer
|
|
482
|
-
|
|
481
|
+
|
|
483
482
|
# Operators
|
|
484
483
|
# Special semi-operator, but this seems an appropriate classification
|
|
485
484
|
rule %r/%(?:TYPE|ROWTYPE|FOUND|ISOPEN|NOTFOUND|ROWCOUNT)\b/i, Name::Attribute
|
|
@@ -517,7 +516,7 @@ module Rouge
|
|
|
517
516
|
#
|
|
518
517
|
rule %r/([a-zA-Z][\w$]*)(\.(?=\w))?/ do |m|
|
|
519
518
|
if self.class.keywords_type.include? m[1].upcase
|
|
520
|
-
tok = Keyword::Type
|
|
519
|
+
tok = Keyword::Type
|
|
521
520
|
elsif self.class.keywords_func.include? m[1].upcase
|
|
522
521
|
tok = Name::Function
|
|
523
522
|
elsif self.class.keywords_reserved.include? m[1].upcase
|
|
@@ -562,12 +561,12 @@ module Rouge
|
|
|
562
561
|
# this rule WILL be true if something pushed into our state. That is our state contract
|
|
563
562
|
rule %r/[a-zA-Z][\w\$]*/ do |m|
|
|
564
563
|
if self.class.keywords_func.include? m[0].upcase
|
|
565
|
-
# The Function lookup allows collection methods like COUNT, FIRST, LAST, etc.. to be
|
|
564
|
+
# The Function lookup allows collection methods like COUNT, FIRST, LAST, etc.. to be
|
|
566
565
|
# classified correctly. Occasionally misidentifies ordinary names as builtin functions,
|
|
567
566
|
# but seems to be as correct as we can get without becoming a full blown parser
|
|
568
567
|
token Name::Function
|
|
569
568
|
else
|
|
570
|
-
token Name
|
|
569
|
+
token Name
|
|
571
570
|
end
|
|
572
571
|
pop!
|
|
573
572
|
end
|
|
@@ -16,7 +16,7 @@ module Rouge
|
|
|
16
16
|
return true if /^%!/ =~ text
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
delimiter =
|
|
19
|
+
delimiter = :"()<>\\[\\]{}/%\\s"
|
|
20
20
|
delimiter_end = Regexp.new("(?=[#{delimiter}])")
|
|
21
21
|
valid_name_chars = Regexp.new("[^#{delimiter}]")
|
|
22
22
|
valid_name = /#{valid_name_chars}+#{delimiter_end}/
|
|
@@ -8,7 +8,7 @@ module Rouge
|
|
|
8
8
|
title 'powershell'
|
|
9
9
|
desc 'powershell'
|
|
10
10
|
tag 'powershell'
|
|
11
|
-
aliases 'posh', 'microsoftshell', 'msshell'
|
|
11
|
+
aliases 'posh', 'microsoftshell', 'msshell', 'pwsh'
|
|
12
12
|
filenames '*.ps1', '*.psm1', '*.psd1', '*.psrc', '*.pssc'
|
|
13
13
|
mimetypes 'text/x-powershell'
|
|
14
14
|
|
data/lib/rouge/lexers/python.rb
CHANGED
|
@@ -17,7 +17,7 @@ module Rouge
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def self.keywords
|
|
20
|
-
@keywords ||= %w(
|
|
20
|
+
@keywords ||= Set.new %w(
|
|
21
21
|
assert break continue del elif else except exec
|
|
22
22
|
finally for global if lambda pass print raise
|
|
23
23
|
return try while yield as with from import
|
|
@@ -26,7 +26,7 @@ module Rouge
|
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def self.builtins
|
|
29
|
-
@builtins ||= %w(
|
|
29
|
+
@builtins ||= Set.new %w(
|
|
30
30
|
__import__ abs aiter all anext any apply ascii
|
|
31
31
|
basestring bin bool buffer breakpoint bytearray bytes
|
|
32
32
|
callable chr classmethod cmp coerce compile complex
|
|
@@ -42,11 +42,11 @@ module Rouge
|
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
def self.builtins_pseudo
|
|
45
|
-
@builtins_pseudo ||= %w(None Ellipsis NotImplemented False True)
|
|
45
|
+
@builtins_pseudo ||= Set.new %w(None Ellipsis NotImplemented False True)
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
def self.exceptions
|
|
49
|
-
@exceptions ||= %w(
|
|
49
|
+
@exceptions ||= Set.new %w(
|
|
50
50
|
ArithmeticError AssertionError AttributeError BaseException
|
|
51
51
|
BaseExceptionGroup BlockingIOError BrokenPipeError BufferError
|
|
52
52
|
BytesWarning ChildProcessError ConnectionAbortedError ConnectionError
|
|
@@ -72,75 +72,65 @@ module Rouge
|
|
|
72
72
|
|
|
73
73
|
identifier = /[[:alpha:]_][[:alnum:]_]*/
|
|
74
74
|
dotted_identifier = /[[:alpha:]_.][[:alnum:]_.]*/
|
|
75
|
+
inline_ws = /(?:[ \t]|\\\n)*?/
|
|
76
|
+
inline_content = /(?:[^\\\n]|\\[\n.])*?/
|
|
75
77
|
|
|
76
78
|
def current_string
|
|
77
|
-
@
|
|
79
|
+
@current_string ||= StringRegister.new
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
operator_words = %r/(in|is|and|or|not)\b/
|
|
83
|
+
operators = %r{(<<|>>|//|[*][*])=?|!=|[-~+\/*%=<>&^|@]=?|!=}
|
|
84
|
+
|
|
85
|
+
start do
|
|
86
|
+
push :newline
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
state :inline_whitespace do
|
|
90
|
+
rule %r/[ \t]+/, Text
|
|
91
|
+
rule %r/\\\n/, Str::Escape
|
|
78
92
|
end
|
|
79
93
|
|
|
80
94
|
state :root do
|
|
81
|
-
rule %r/\n+/m, Text
|
|
95
|
+
rule %r/\n+/m, Text, :newline
|
|
82
96
|
rule %r/^(:)(\s*)([ru]{,2}""".*?""")/mi do
|
|
83
97
|
groups Punctuation, Text, Str::Doc
|
|
84
98
|
end
|
|
85
99
|
|
|
86
100
|
rule %r/\.\.\.\B$/, Name::Builtin::Pseudo
|
|
87
101
|
|
|
88
|
-
|
|
89
|
-
rule %r(#(.*)?\n?), Comment::Single
|
|
90
|
-
rule %r/[\[\]{}:(),;.]/, Punctuation
|
|
91
|
-
rule %r/\\\n/, Text
|
|
92
|
-
rule %r/\\/, Text
|
|
93
|
-
|
|
94
|
-
rule %r/@#{dotted_identifier}/i, Name::Decorator
|
|
102
|
+
mixin :inline_whitespace
|
|
95
103
|
|
|
96
|
-
rule %r
|
|
97
|
-
rule %r/(
|
|
98
|
-
rule %r/[
|
|
104
|
+
rule %r(#(.*)?\n?), Comment::Single, :newline
|
|
105
|
+
rule %r/[\[\]{}:(),;]/, Punctuation
|
|
106
|
+
rule %r/[.]/, Punctuation, :post_dot
|
|
107
|
+
rule %r/\\/, Str::Escape
|
|
99
108
|
|
|
100
|
-
rule %r
|
|
101
|
-
groups Keyword::Namespace,
|
|
102
|
-
Text,
|
|
103
|
-
Name,
|
|
104
|
-
Text,
|
|
105
|
-
Keyword::Namespace
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
rule %r/(import)(\s+)(#{dotted_identifier})/ do
|
|
109
|
-
groups Keyword::Namespace, Text, Name
|
|
110
|
-
end
|
|
109
|
+
rule %r/@#{dotted_identifier}/i, Name::Decorator
|
|
111
110
|
|
|
112
|
-
rule
|
|
113
|
-
|
|
114
|
-
push :funcname
|
|
115
|
-
end
|
|
111
|
+
rule operator_words, Operator::Word
|
|
112
|
+
rule operators, Operator
|
|
116
113
|
|
|
117
|
-
rule %r/
|
|
118
|
-
groups Keyword, Text
|
|
119
|
-
push :classname
|
|
120
|
-
end
|
|
114
|
+
rule %r/def\b/, Keyword, :funcname
|
|
121
115
|
|
|
122
|
-
rule %r/
|
|
123
|
-
rule %r/([A-Z_]\w*)[ \t]*(?=(\(.*\)))/m, Name::Class
|
|
116
|
+
rule %r/class\b/, Keyword, :classname
|
|
124
117
|
|
|
125
|
-
# TODO: not in python 3
|
|
126
118
|
rule %r/`.*?`/, Str::Backtick
|
|
127
|
-
rule %r/([
|
|
119
|
+
rule %r/([rtfbu]{0,2})('''|"""|['"])/i do |m|
|
|
128
120
|
groups Str::Affix, Str::Heredoc
|
|
129
121
|
current_string.register type: m[1].downcase, delim: m[2]
|
|
130
122
|
push :generic_string
|
|
131
123
|
end
|
|
132
124
|
|
|
133
|
-
mixin :soft_keywords
|
|
134
|
-
|
|
135
125
|
# using negative lookbehind so we don't match property names
|
|
136
126
|
rule %r/(?<!\.)#{identifier}/ do |m|
|
|
137
|
-
if self.class.keywords.include?
|
|
127
|
+
if self.class.keywords.include?(m[0])
|
|
138
128
|
token Keyword
|
|
139
|
-
elsif self.class.exceptions.include?
|
|
140
|
-
token Name::
|
|
141
|
-
elsif self.class.builtins.include?
|
|
129
|
+
elsif self.class.exceptions.include?(m[0])
|
|
130
|
+
token Name::Exception
|
|
131
|
+
elsif self.class.builtins.include?(m[0])
|
|
142
132
|
token Name::Builtin
|
|
143
|
-
elsif self.class.builtins_pseudo.include?
|
|
133
|
+
elsif self.class.builtins_pseudo.include?(m[0])
|
|
144
134
|
token Name::Builtin::Pseudo
|
|
145
135
|
else
|
|
146
136
|
token Name
|
|
@@ -163,34 +153,80 @@ module Rouge
|
|
|
163
153
|
rule %r/([1-9](_?[0-9])*|0(_?0)*)/, Num::Integer
|
|
164
154
|
end
|
|
165
155
|
|
|
156
|
+
state :import do
|
|
157
|
+
mixin :inline_whitespace
|
|
158
|
+
rule dotted_identifier, Name::Namespace, :pop!
|
|
159
|
+
rule(//) { pop! }
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
state :from do
|
|
163
|
+
mixin :inline_whitespace
|
|
164
|
+
|
|
165
|
+
rule dotted_identifier do
|
|
166
|
+
token Name::Namespace
|
|
167
|
+
goto :from_import
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
rule(//) { pop! }
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
# import after from, meaning we don't push the :import state
|
|
174
|
+
state :from_import do
|
|
175
|
+
mixin :inline_whitespace
|
|
176
|
+
rule %r/import\b/, Keyword::Namespace, :pop!
|
|
177
|
+
rule(//) { pop! }
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
state :post_dot do
|
|
181
|
+
mixin :inline_whitespace
|
|
182
|
+
rule %r/([A-Z]\w*)(?=#{inline_ws}[(])/m, Name::Class
|
|
183
|
+
rule %r/(#{identifier})(?=#{inline_ws}[(])/m, Name::Function
|
|
184
|
+
rule(//) { pop! }
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
state :newline do
|
|
188
|
+
mixin :inline_whitespace
|
|
189
|
+
|
|
190
|
+
rule %r/from\b/, Keyword::Namespace, :from
|
|
191
|
+
rule %r/import\b/, Keyword::Namespace, :import
|
|
192
|
+
|
|
193
|
+
# [jneen] This lookahead is a best-effort hack, since soft keywords are
|
|
194
|
+
# technically not possible to detect in the lexing stage. If we see an
|
|
195
|
+
# operator like `and`, `or`, inline `if`, etc which would expect an
|
|
196
|
+
# expression beforehand, we know that it is almost certainly not a keyword.
|
|
197
|
+
inline_ops = /#{operator_words}|if\b|#{operators}/
|
|
198
|
+
rule %r/(?:case|match)(?=#{inline_ws}#{inline_ops})/, Name::Other, :pop!
|
|
199
|
+
|
|
200
|
+
rule %r/(?:case|match)(?=#{inline_content}:#{inline_ws}[#\n])/ do |m|
|
|
201
|
+
token Keyword
|
|
202
|
+
if m[0] == 'case'
|
|
203
|
+
goto :case_pattern
|
|
204
|
+
else
|
|
205
|
+
pop!
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
rule(//) { pop! }
|
|
210
|
+
end
|
|
211
|
+
|
|
166
212
|
state :funcname do
|
|
213
|
+
mixin :inline_whitespace
|
|
167
214
|
rule identifier, Name::Function, :pop!
|
|
168
215
|
end
|
|
169
216
|
|
|
170
217
|
state :classname do
|
|
218
|
+
mixin :inline_whitespace
|
|
171
219
|
rule identifier, Name::Class, :pop!
|
|
172
220
|
end
|
|
173
221
|
|
|
174
|
-
state :
|
|
175
|
-
rule %r/
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
(?![ \t]*
|
|
179
|
-
(?:[:,;=^&|@~)\]}] |
|
|
180
|
-
(?:#{Python.keywords.join('|')})\b))
|
|
181
|
-
/x do |m|
|
|
182
|
-
token Text::Whitespace, m[1]
|
|
183
|
-
token Keyword, m[2]
|
|
184
|
-
push :soft_keywords_inner
|
|
185
|
-
end
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
state :soft_keywords_inner do
|
|
189
|
-
rule %r((\s+)([^\n_]*)(_\b)) do |m|
|
|
190
|
-
groups Text::Whitespace, Text, Keyword
|
|
222
|
+
state :case_pattern do
|
|
223
|
+
rule %r/\n/ do
|
|
224
|
+
token Text
|
|
225
|
+
goto :newline
|
|
191
226
|
end
|
|
192
227
|
|
|
193
|
-
rule
|
|
228
|
+
rule %r/_\b/, Keyword
|
|
229
|
+
mixin :root
|
|
194
230
|
end
|
|
195
231
|
|
|
196
232
|
state :raise do
|
|
@@ -207,8 +243,8 @@ module Rouge
|
|
|
207
243
|
end
|
|
208
244
|
|
|
209
245
|
state :generic_string do
|
|
210
|
-
rule %r
|
|
211
|
-
rule %r/[^'"\\{]
|
|
246
|
+
rule %r/\n/, Str, :generic_string_newline
|
|
247
|
+
rule %r/[^'"\\{\n]+/, Str
|
|
212
248
|
rule %r/{{/, Str
|
|
213
249
|
|
|
214
250
|
rule %r/'''|"""|['"]/ do |m|
|
|
@@ -231,6 +267,15 @@ module Rouge
|
|
|
231
267
|
end
|
|
232
268
|
end
|
|
233
269
|
|
|
270
|
+
state :generic_string_newline do
|
|
271
|
+
rule %r/[ \t]+/, Str
|
|
272
|
+
rule %r/(>>>|\.\.\.)\B/ do
|
|
273
|
+
token Generic::Prompt
|
|
274
|
+
goto :doctest
|
|
275
|
+
end
|
|
276
|
+
rule(//) { pop! }
|
|
277
|
+
end
|
|
278
|
+
|
|
234
279
|
state :generic_escape do
|
|
235
280
|
rule %r(\\
|
|
236
281
|
( [\\abfnrtv"']
|
data/lib/rouge/lexers/qml.rb
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*- #
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
|
+
require_relative 'ocaml/common'
|
|
5
|
+
|
|
4
6
|
module Rouge
|
|
5
7
|
module Lexers
|
|
6
|
-
load_lexer 'ocaml/common.rb'
|
|
7
|
-
|
|
8
8
|
class ReasonML < OCamlCommon
|
|
9
9
|
title "ReasonML"
|
|
10
10
|
desc 'New syntax on top of OCaml ecosystem (reasonml.github.io)'
|
data/lib/rouge/lexers/rego.rb
CHANGED
|
@@ -2,59 +2,59 @@
|
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
module Rouge
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
end
|
|
57
|
-
end
|
|
5
|
+
module Lexers
|
|
6
|
+
class Rego < RegexLexer
|
|
7
|
+
title "Rego"
|
|
8
|
+
desc "The Rego open-policy-agent (OPA) policy language (openpolicyagent.org)"
|
|
9
|
+
tag 'rego'
|
|
10
|
+
filenames '*.rego'
|
|
11
|
+
|
|
12
|
+
def self.constants
|
|
13
|
+
@constants ||= Set.new %w(
|
|
14
|
+
true false null
|
|
15
|
+
)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.operators
|
|
19
|
+
@operators ||= Set.new %w(
|
|
20
|
+
as default else import not package some with
|
|
21
|
+
)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
state :basic do
|
|
25
|
+
rule %r/\s+/, Text
|
|
26
|
+
rule %r/#.*/, Comment::Single
|
|
27
|
+
|
|
28
|
+
rule %r/[\[\](){}|.,;!]/, Punctuation
|
|
29
|
+
|
|
30
|
+
rule %r/"[^"]*"/, Str::Double
|
|
31
|
+
|
|
32
|
+
rule %r/-?\d+\.\d+([eE][+-]?\d+)?/, Num::Float
|
|
33
|
+
rule %r/-?\d+([eE][+-]?\d+)?/, Num
|
|
34
|
+
|
|
35
|
+
rule %r/\\u[0-9a-fA-F]{4}/, Num::Hex
|
|
36
|
+
rule %r/\\["\/bfnrt]/, Str::Escape
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
state :operators do
|
|
40
|
+
rule %r/(=|!=|>=|<=|>|<|\+|-|\*|%|\/|\||&|:=)/, Operator
|
|
41
|
+
rule %r/[\/:?@^~]+/, Operator
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
state :root do
|
|
45
|
+
mixin :basic
|
|
46
|
+
mixin :operators
|
|
47
|
+
|
|
48
|
+
rule %r/[[:word:]]+/ do |m|
|
|
49
|
+
if self.class.constants.include? m[0]
|
|
50
|
+
token Keyword::Constant
|
|
51
|
+
elsif self.class.operators.include? m[0]
|
|
52
|
+
token Operator::Word
|
|
53
|
+
else
|
|
54
|
+
token Name
|
|
55
|
+
end
|
|
58
56
|
end
|
|
57
|
+
end
|
|
59
58
|
end
|
|
59
|
+
end
|
|
60
60
|
end
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*- #
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
|
+
require_relative 'ocaml/common'
|
|
5
|
+
|
|
4
6
|
module Rouge
|
|
5
7
|
module Lexers
|
|
6
|
-
load_lexer 'ocaml/common.rb'
|
|
7
|
-
|
|
8
8
|
class ReScript < OCamlCommon
|
|
9
9
|
title "ReScript"
|
|
10
10
|
desc "The ReScript programming language (rescript-lang.org)"
|