rouge 4.7.0 → 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/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/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 +2 -2
- data/lib/rouge/lexers/glsl/builtins.rb +17 -0
- data/lib/rouge/lexers/glsl.rb +50 -113
- data/lib/rouge/lexers/go.rb +1 -1
- data/lib/rouge/lexers/gradle.rb +2 -2
- data/lib/rouge/lexers/groovy.rb +6 -0
- data/lib/rouge/lexers/gts.rb +2 -2
- 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 -138
- data/lib/rouge/lexers/php.rb +58 -9
- 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 +110 -65
- 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 +2 -2
- 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 +40 -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
|
|
@@ -109,7 +110,7 @@ module Rouge
|
|
|
109
110
|
name = m[0].downcase
|
|
110
111
|
if self.class.keywords.include? name
|
|
111
112
|
token Keyword
|
|
112
|
-
elsif
|
|
113
|
+
elsif builtins.include? name
|
|
113
114
|
token Name::Builtin
|
|
114
115
|
else
|
|
115
116
|
token Name::Function
|
|
@@ -324,7 +325,7 @@ module Rouge
|
|
|
324
325
|
rule %r/=/, Operator, :in_assign
|
|
325
326
|
rule %r/\b(?:public|protected|private|readonly)(?:\(set\)|\b)/i, Keyword
|
|
326
327
|
rule %r/\breadonly\b/i, Keyword
|
|
327
|
-
rule %r/\??#{id}/, Keyword::Type, :
|
|
328
|
+
rule %r/\??#{id}/, Keyword::Type, :in_property
|
|
328
329
|
mixin :escape
|
|
329
330
|
mixin :whitespace
|
|
330
331
|
mixin :variables
|
|
@@ -388,7 +389,10 @@ module Rouge
|
|
|
388
389
|
rule %r/\b(?:public|protected|private)(?:\(set\)|\b)/i, Keyword
|
|
389
390
|
rule %r/\b(?:readonly|static)\b/i, Keyword
|
|
390
391
|
rule %r/(?=(abstract|const|function)\b)/i, Keyword, :pop!
|
|
391
|
-
rule %r/\??#{id}
|
|
392
|
+
rule %r/\??#{id}/ do
|
|
393
|
+
token Keyword::Type
|
|
394
|
+
goto :in_property
|
|
395
|
+
end
|
|
392
396
|
mixin :escape
|
|
393
397
|
mixin :whitespace
|
|
394
398
|
mixin :return
|
|
@@ -416,6 +420,51 @@ module Rouge
|
|
|
416
420
|
end
|
|
417
421
|
mixin :php
|
|
418
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
|
|
436
|
+
mixin :escape
|
|
437
|
+
mixin :whitespace
|
|
438
|
+
mixin :return
|
|
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
|
|
419
468
|
end
|
|
420
469
|
end
|
|
421
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,57 +72,49 @@ 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
119
|
rule %r/([rtfbu]{0,2})('''|"""|['"])/i do |m|
|
|
128
120
|
groups Str::Affix, Str::Heredoc
|
|
@@ -130,17 +122,15 @@ module Rouge
|
|
|
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)"
|