rouge 4.7.0 → 5.1.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/addmusick +12 -0
- data/lib/rouge/demos/dylan +8 -0
- data/lib/rouge/demos/java +3 -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 +75 -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/addmusick.rb +251 -0
- 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 +3 -3
- data/lib/rouge/lexers/apple_script.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/cypher.rb +0 -1
- 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 +15 -10
- 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/gdscript.rb +1 -1
- 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 +2 -2
- 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 +5 -7
- data/lib/rouge/lexers/haxe.rb +3 -3
- 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/java.rb +7 -4
- 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 +3 -3
- 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/lean.rb +0 -1
- 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/make.rb +2 -0
- data/lib/rouge/lexers/markdown.rb +7 -6
- 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 -3
- 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/perl.rb +140 -43
- data/lib/rouge/lexers/php/keywords.rb +136 -138
- data/lib/rouge/lexers/php.rb +59 -10
- data/lib/rouge/lexers/plist.rb +0 -1
- data/lib/rouge/lexers/plsql.rb +8 -9
- data/lib/rouge/lexers/postscript.rb +2 -2
- data/lib/rouge/lexers/powershell.rb +1 -1
- data/lib/rouge/lexers/prolog.rb +0 -1
- data/lib/rouge/lexers/prometheus.rb +0 -1
- data/lib/rouge/lexers/properties.rb +2 -2
- data/lib/rouge/lexers/python.rb +110 -65
- data/lib/rouge/lexers/qml.rb +2 -3
- data/lib/rouge/lexers/r.rb +1 -1
- 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/scala.rb +0 -1
- data/lib/rouge/lexers/scss.rb +2 -2
- data/lib/rouge/lexers/sed.rb +1 -1
- data/lib/rouge/lexers/shell.rb +23 -7
- data/lib/rouge/lexers/slice.rb +2 -2
- data/lib/rouge/lexers/smarty.rb +0 -1
- 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/tap.rb +0 -1
- 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/tulip.rb +0 -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/vhdl.rb +3 -1
- data/lib/rouge/lexers/viml/keywords.rb +5 -7
- data/lib/rouge/lexers/viml.rb +8 -10
- data/lib/rouge/lexers/vue.rb +20 -4
- 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 +37 -14
- data/lib/rouge/themes/gruvbox.rb +3 -0
- data/lib/rouge/themes/thankful_eyes.rb +2 -1
- 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 +43 -10
- data/lib/rouge/lexers/isbl/builtins.rb +0 -17
- data/lib/rouge/lexers/matlab/builtins.rb +0 -11
- /data/lib/rouge/demos/{applescript → apple_script} +0 -0
- /data/lib/rouge/demos/{coq → rocq} +0 -0
data/lib/rouge/lexers/perl.rb
CHANGED
|
@@ -17,13 +17,13 @@ module Rouge
|
|
|
17
17
|
return true if text.shebang? 'perl'
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
KEYWORDS = Set.new %w(
|
|
21
21
|
case continue do else elsif for foreach if last my next our
|
|
22
22
|
redo reset then unless until while use print new BEGIN CHECK
|
|
23
23
|
INIT END return
|
|
24
24
|
)
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
BUILTINS = Set.new %w(
|
|
27
27
|
abs accept alarm atan2 bind binmode bless caller chdir chmod
|
|
28
28
|
chomp chop chown chr chroot close closedir connect continue cos
|
|
29
29
|
crypt dbmclose dbmopen defined delete die dump each endgrent
|
|
@@ -49,25 +49,108 @@ module Rouge
|
|
|
49
49
|
utime values vec wait waitpid wantarray warn write
|
|
50
50
|
)
|
|
51
51
|
|
|
52
|
+
OPERATOR_WORDS = Set.new %w(eq lt gt le ge ne not and or cmp)
|
|
53
|
+
|
|
52
54
|
re_tok = Str::Regex
|
|
53
55
|
|
|
54
56
|
state :balanced_regex do
|
|
55
|
-
rule %r
|
|
56
|
-
rule %r
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
rule %r[\((\\[\\\)]|[^\)])*\)[egimosx]*], re_tok, :pop!
|
|
62
|
-
rule %r(@(\\[\\@]|[^@])*@[egimosx]*), re_tok, :pop!
|
|
63
|
-
rule %r(%(\\[\\%]|[^%])*%[egimosx]*), re_tok, :pop!
|
|
64
|
-
rule %r(\$(\\[\\\$]|[^\$])*\$[egimosx]*), re_tok, :pop!
|
|
57
|
+
rule %r/\s+/, Text
|
|
58
|
+
rule %r/./ do |m|
|
|
59
|
+
pop!
|
|
60
|
+
open_regex!(m[0])
|
|
61
|
+
token Str::Delimiter
|
|
62
|
+
end
|
|
65
63
|
end
|
|
66
64
|
|
|
67
|
-
state :
|
|
65
|
+
state :continued_regex do
|
|
66
|
+
mixin :regex
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
state :regex_flags do
|
|
70
|
+
rule %r/[msixpodualngcr]+/, Str::Affix
|
|
71
|
+
rule(//) { pop! }
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
state :regex_escapes do
|
|
75
|
+
rule %r/\\[0-7][0-7][0-7]/, Str::Escape
|
|
76
|
+
rule %r/\\x\h\h/, Str::Escape
|
|
77
|
+
rule %r/\\.(?:[{]\w+[}])?/, Str::Escape
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
state :regex do
|
|
81
|
+
rule %r/./ do |m|
|
|
82
|
+
if m[0] == @regex_end
|
|
83
|
+
token Str::Delimiter
|
|
84
|
+
goto :regex_flags
|
|
85
|
+
else
|
|
86
|
+
fallthrough!
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
mixin :regex_escapes
|
|
91
|
+
rule %r/[{]\d+(?:,\d+)?[}]/, Operator
|
|
92
|
+
rule %r/\[\^?/, Punctuation, :regex_char_class
|
|
93
|
+
rule %r/[?]|[.]|[|]|[*+][?]?/, Operator
|
|
94
|
+
rule %r/[(](?:[?][=!<:]?)?/, Punctuation
|
|
95
|
+
rule %r/[(][?]<!/, Punctuation
|
|
96
|
+
rule %r/[{})]/, Punctuation
|
|
97
|
+
rule %r/./, Str::Regex
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
state :regex_char_class do
|
|
101
|
+
rule(/\^/) { token Punctuation; goto :regex_char_class_inner }
|
|
102
|
+
rule(/-/) { token Str::Regex; goto :regex_char_class_inner }
|
|
103
|
+
rule(//) { goto :regex_char_class_inner }
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
state :regex_char_class_inner do
|
|
107
|
+
mixin :regex_escapes
|
|
108
|
+
rule %r/-(?!\])/, Punctuation
|
|
109
|
+
rule %r/\\./, Str::Escape
|
|
110
|
+
rule %r/[^-\]\\]+/, Str::Regex
|
|
111
|
+
rule %r/\]/, Punctuation, :pop!
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
BALANCED_DELIMITERS = {
|
|
115
|
+
'{' => '}',
|
|
116
|
+
'(' => ')',
|
|
117
|
+
'[' => ']',
|
|
118
|
+
'<' => '>',
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
def open_regex!(delimiter)
|
|
122
|
+
@regex_end = BALANCED_DELIMITERS.fetch(delimiter, delimiter)
|
|
123
|
+
push :regex
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def open_regex_operator!(delimiter)
|
|
127
|
+
if BALANCED_DELIMITERS.key?(delimiter)
|
|
128
|
+
push :balanced_regex
|
|
129
|
+
else
|
|
130
|
+
push :continued_regex
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
open_regex!(delimiter)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
state :expr_start do
|
|
137
|
+
mixin :whitespace
|
|
138
|
+
rule %r(/) do
|
|
139
|
+
open_regex!('/')
|
|
140
|
+
token Str::Delimiter
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
rule(//) { pop! }
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
state :whitespace do
|
|
68
147
|
rule %r/#.*/, Comment::Single
|
|
148
|
+
rule %r/\s+/, Text
|
|
69
149
|
rule %r/^=[a-zA-Z0-9]+\s+.*?\n=cut/m, Comment::Multiline
|
|
70
|
-
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
state :root do
|
|
153
|
+
mixin :whitespace
|
|
71
154
|
|
|
72
155
|
rule %r/(format)(\s+)([a-zA-Z0-9_]+)(\s*)(=)(\s*\n)/ do
|
|
73
156
|
groups Keyword, Text, Name, Text, Punctuation, Text
|
|
@@ -75,34 +158,37 @@ module Rouge
|
|
|
75
158
|
push :format
|
|
76
159
|
end
|
|
77
160
|
|
|
78
|
-
rule %r
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
rule %r((?:s|tr|y)\s+(\w)((\\\\|\\\1)|[^\1])*?\1((\\\\|\\\1)|[^\1])*?\1[msixpodualngcr]*)m, re_tok
|
|
89
|
-
|
|
90
|
-
# matches: common case, m-optional
|
|
91
|
-
rule %r(m?/(\\\\|\\/|[^/\n])*/[msixpodualngc]*), re_tok
|
|
92
|
-
rule %r(m(?=[/!\\{<\[\(@%\$])), re_tok, :balanced_regex
|
|
161
|
+
rule %r/\w+/ do |m|
|
|
162
|
+
w = m[0]
|
|
163
|
+
if KEYWORDS.include?(w)
|
|
164
|
+
token Keyword
|
|
165
|
+
elsif OPERATOR_WORDS.include?(w)
|
|
166
|
+
token Operator::Word
|
|
167
|
+
else
|
|
168
|
+
fallthrough!
|
|
169
|
+
end
|
|
170
|
+
end
|
|
93
171
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
172
|
+
rule %r{(?=[a-z_]\w*(\s*#.*\n)*\s*=>)}i do
|
|
173
|
+
push :fat_comma
|
|
174
|
+
end
|
|
97
175
|
|
|
98
|
-
|
|
99
|
-
|
|
176
|
+
# non-whitespace delimiters that match \w are allowed only
|
|
177
|
+
# if there is whitespace between the operator and the delimiter.
|
|
178
|
+
# here we use a \b to detect that case in a way that shouldn't
|
|
179
|
+
# cause backtracking explosion.
|
|
180
|
+
regex_delim = /[^\w\s]|\b\w/
|
|
100
181
|
|
|
101
|
-
rule %r
|
|
182
|
+
rule %r/(s|tr|y)(\s*)(#{regex_delim})/ do |m|
|
|
183
|
+
open_regex_operator!(m[3])
|
|
184
|
+
groups Str::Affix, Text, Str::Delimiter
|
|
185
|
+
end
|
|
102
186
|
|
|
103
|
-
rule
|
|
187
|
+
rule %r/(m)(\s*)(#{regex_delim})/ do |m|
|
|
188
|
+
open_regex!(m[3])
|
|
189
|
+
groups Str::Affix, Text, Str::Delimiter
|
|
190
|
+
end
|
|
104
191
|
|
|
105
|
-
rule %r/(?:#{builtins.join('|')})\b/, Name::Builtin
|
|
106
192
|
rule %r/((__(DIE|WARN)__)|(DATA|STD(IN|OUT|ERR)))\b/,
|
|
107
193
|
Name::Builtin::Pseudo
|
|
108
194
|
|
|
@@ -113,7 +199,9 @@ module Rouge
|
|
|
113
199
|
rule %r/\$[\\"'\[\]&`+*.,;=%~?@$!<>(^\|\/_-](?!\w)/, Name::Variable::Global
|
|
114
200
|
rule %r/[$@%&*][$@%&*#_]*(?=[a-z{\[;])/i, Name::Variable, :varname
|
|
115
201
|
|
|
116
|
-
rule %r
|
|
202
|
+
rule %r/\[\]|\*\*|::|<<|>>|>=|<=|<=>|={3}|!=|=~|!~|&&?|\|\||\.{1,3}/,
|
|
203
|
+
Operator, :expr_start
|
|
204
|
+
rule %r/[-+\/*%=<>&^\|!\\~]=?/, Operator, :expr_start
|
|
117
205
|
|
|
118
206
|
rule %r/0_?[0-7]+(_[0-7]+)*/, Num::Oct
|
|
119
207
|
rule %r/0x[0-9A-Fa-f]+(_[0-9A-Fa-f]+)*/, Num::Hex
|
|
@@ -133,11 +221,20 @@ module Rouge
|
|
|
133
221
|
rule %r/(q|qq|qw|qr|qx)</, Str::Other, :lt_string
|
|
134
222
|
rule %r/(q|qq|qw|qr|qx)(\W)(.|\n)*?\2/, Str::Other
|
|
135
223
|
|
|
136
|
-
rule %r/package\
|
|
137
|
-
rule %r/sub\
|
|
138
|
-
rule %r
|
|
139
|
-
|
|
140
|
-
|
|
224
|
+
rule %r/package\b/, Keyword, :modulename
|
|
225
|
+
rule %r/sub\b/, Keyword, :funcname
|
|
226
|
+
rule %r/[(]/, Punctuation, :expr_start
|
|
227
|
+
rule %r/[)\[\]:;,<>\/?{}]/, Punctuation
|
|
228
|
+
|
|
229
|
+
rule %r/[a-z]\w*/ do |m|
|
|
230
|
+
w = m[0]
|
|
231
|
+
if BUILTINS.include?(w)
|
|
232
|
+
token Name::Builtin
|
|
233
|
+
else
|
|
234
|
+
fallthrough!
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
|
|
141
238
|
rule(/(?=\w)/) { push :name }
|
|
142
239
|
end
|
|
143
240
|
|