rouge 3.3.0 → 3.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/Gemfile +14 -2
- data/lib/rouge.rb +45 -41
- data/lib/rouge/cli.rb +26 -2
- data/lib/rouge/demos/escape +3 -0
- data/lib/rouge/demos/supercollider +11 -0
- data/lib/rouge/demos/xojo +13 -0
- data/lib/rouge/formatter.rb +36 -0
- data/lib/rouge/formatters/html.rb +2 -0
- data/lib/rouge/formatters/html_linewise.rb +6 -11
- data/lib/rouge/formatters/html_table.rb +20 -31
- data/lib/rouge/formatters/terminal256.rb +1 -0
- data/lib/rouge/guessers/disambiguation.rb +13 -0
- data/lib/rouge/guessers/source.rb +1 -1
- data/lib/rouge/lexer.rb +44 -13
- data/lib/rouge/lexers/c.rb +6 -29
- data/lib/rouge/lexers/coffeescript.rb +14 -6
- data/lib/rouge/lexers/common_lisp.rb +1 -1
- data/lib/rouge/lexers/console.rb +2 -2
- data/lib/rouge/lexers/coq.rb +1 -1
- data/lib/rouge/lexers/csharp.rb +0 -1
- data/lib/rouge/lexers/diff.rb +8 -4
- data/lib/rouge/lexers/docker.rb +1 -1
- data/lib/rouge/lexers/escape.rb +55 -0
- data/lib/rouge/lexers/go.rb +1 -1
- data/lib/rouge/lexers/graphql.rb +10 -0
- data/lib/rouge/lexers/html.rb +1 -0
- data/lib/rouge/lexers/java.rb +4 -0
- data/lib/rouge/lexers/javascript.rb +12 -16
- data/lib/rouge/lexers/jinja.rb +15 -1
- data/lib/rouge/lexers/julia.rb +140 -17
- data/lib/rouge/lexers/kotlin.rb +11 -4
- data/lib/rouge/lexers/markdown.rb +21 -4
- data/lib/rouge/lexers/matlab.rb +9 -2
- data/lib/rouge/lexers/objective_c.rb +7 -12
- data/lib/rouge/lexers/perl.rb +38 -6
- data/lib/rouge/lexers/powershell.rb +1 -1
- data/lib/rouge/lexers/rust.rb +1 -1
- data/lib/rouge/lexers/scala.rb +28 -2
- data/lib/rouge/lexers/shell.rb +1 -1
- data/lib/rouge/lexers/slim.rb +2 -2
- data/lib/rouge/lexers/supercollider.rb +116 -0
- data/lib/rouge/lexers/xml.rb +1 -1
- data/lib/rouge/lexers/xojo.rb +61 -0
- data/lib/rouge/regex_lexer.rb +12 -12
- data/lib/rouge/themes/bw.rb +41 -0
- data/lib/rouge/token.rb +30 -22
- data/lib/rouge/version.rb +1 -1
- metadata +10 -4
data/lib/rouge/lexers/c.rb
CHANGED
@@ -106,7 +106,7 @@ module Rouge
|
|
106
106
|
rule /\d+[lu]*/i, Num::Integer
|
107
107
|
rule %r(\*/), Error
|
108
108
|
rule %r([~!%^&*+=\|?:<>/-]), Operator
|
109
|
-
rule /[()\[\]
|
109
|
+
rule /[()\[\],.;]/, Punctuation
|
110
110
|
rule /\bcase\b/, Keyword, :case
|
111
111
|
rule /(?:true|false|NULL)\b/, Name::Builtin
|
112
112
|
rule id do |m|
|
@@ -133,13 +133,11 @@ module Rouge
|
|
133
133
|
|
134
134
|
state :root do
|
135
135
|
mixin :expr_whitespace
|
136
|
-
|
137
|
-
# functions
|
138
136
|
rule %r(
|
139
137
|
([\w*\s]+?[\s*]) # return arguments
|
140
138
|
(#{id}) # function name
|
141
139
|
(\s*\([^;]*?\)) # signature
|
142
|
-
(#{ws})({)
|
140
|
+
(#{ws}?)({|;) # open brace or semicolon
|
143
141
|
)mx do |m|
|
144
142
|
# TODO: do this better.
|
145
143
|
recurse m[1]
|
@@ -147,33 +145,12 @@ module Rouge
|
|
147
145
|
recurse m[3]
|
148
146
|
recurse m[4]
|
149
147
|
token Punctuation, m[5]
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
# function declarations
|
154
|
-
rule %r(
|
155
|
-
([\w*\s]+?[\s*]) # return arguments
|
156
|
-
(#{id}) # function name
|
157
|
-
(\s*\([^;]*?\)) # signature
|
158
|
-
(#{ws})(;) # semicolon
|
159
|
-
)mx do |m|
|
160
|
-
# TODO: do this better.
|
161
|
-
recurse m[1]
|
162
|
-
token Name::Function, m[2]
|
163
|
-
recurse m[3]
|
164
|
-
recurse m[4]
|
165
|
-
token Punctuation, m[5]
|
166
|
-
push :statement
|
148
|
+
if m[5] == ?{
|
149
|
+
push :function
|
150
|
+
end
|
167
151
|
end
|
168
|
-
|
169
|
-
rule(//) { push :statement }
|
170
|
-
end
|
171
|
-
|
172
|
-
state :statement do
|
173
|
-
rule /;/, Punctuation, :pop!
|
174
|
-
mixin :expr_whitespace
|
152
|
+
rule /\{/, Punctuation, :function
|
175
153
|
mixin :statements
|
176
|
-
rule /[{}]/, Punctuation
|
177
154
|
end
|
178
155
|
|
179
156
|
state :function do
|
@@ -18,9 +18,17 @@ module Rouge
|
|
18
18
|
|
19
19
|
def self.keywords
|
20
20
|
@keywords ||= Set.new %w(
|
21
|
-
for
|
22
|
-
throw try catch finally
|
23
|
-
extends this class
|
21
|
+
for by while until loop break continue return
|
22
|
+
switch when then if else do yield throw try catch finally await
|
23
|
+
new delete typeof instanceof super extends this class
|
24
|
+
import export debugger
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.reserved
|
29
|
+
@reserved ||= Set.new %w(
|
30
|
+
case function var void with const let enum
|
31
|
+
native implements interface package private protected public static
|
24
32
|
)
|
25
33
|
end
|
26
34
|
|
@@ -43,7 +51,7 @@ module Rouge
|
|
43
51
|
|
44
52
|
state :comments_and_whitespace do
|
45
53
|
rule /\s+/m, Text
|
46
|
-
rule
|
54
|
+
rule /###[^#].*?###/m, Comment::Multiline
|
47
55
|
rule /#.*$/, Comment::Single
|
48
56
|
end
|
49
57
|
|
@@ -77,8 +85,8 @@ module Rouge
|
|
77
85
|
rule(%r(^(?=\s|/|<!--))) { push :slash_starts_regex }
|
78
86
|
mixin :comments_and_whitespace
|
79
87
|
rule %r(
|
80
|
-
[+][+]|--|~|&&|\band\b|\bor\b|\bis\b|\bisnt\b|\bnot\b|
|
81
|
-
[|][|]|\\(?=\n)|(<<|>>>?|==?|!=?|[-<>+*`%&|^/])=?
|
88
|
+
[+][+]|--|~|&&|\band\b|\bor\b|\bis\b|\bisnt\b|\bnot\b|\bin\b|\bof\b|
|
89
|
+
[?]|:|=|[|][|]|\\(?=\n)|(<<|>>>?|==?|!=?|[-<>+*`%&|^/])=?
|
82
90
|
)x, Operator, :slash_starts_regex
|
83
91
|
|
84
92
|
rule /[-=]>/, Name::Function
|
data/lib/rouge/lexers/console.rb
CHANGED
@@ -118,7 +118,7 @@ module Rouge
|
|
118
118
|
$' =~ /\A\s*/
|
119
119
|
yield Text, $& unless $&.empty?
|
120
120
|
|
121
|
-
lang_lexer.
|
121
|
+
lang_lexer.continue_lex($', &output)
|
122
122
|
elsif comment_regex =~ input[0].strip
|
123
123
|
puts "console: matched comment #{input[0].inspect}" if @debug
|
124
124
|
output_lexer.reset!
|
@@ -129,7 +129,7 @@ module Rouge
|
|
129
129
|
puts "console: matched output #{input[0].inspect}" if @debug
|
130
130
|
lang_lexer.reset!
|
131
131
|
|
132
|
-
output_lexer.
|
132
|
+
output_lexer.continue_lex(input[0], &output)
|
133
133
|
end
|
134
134
|
end
|
135
135
|
end
|
data/lib/rouge/lexers/coq.rb
CHANGED
data/lib/rouge/lexers/csharp.rb
CHANGED
data/lib/rouge/lexers/diff.rb
CHANGED
@@ -19,14 +19,18 @@ module Rouge
|
|
19
19
|
|
20
20
|
state :root do
|
21
21
|
rule(/^ .*$\n?/, Text)
|
22
|
-
rule(/^---$\n?/,
|
22
|
+
rule(/^---$\n?/, Punctuation)
|
23
|
+
rule(/^[+>]+.*$\n?/, Generic::Inserted)
|
23
24
|
rule(/^\+.*$\n?/, Generic::Inserted)
|
24
|
-
rule(
|
25
|
+
rule(/^[-<]+.*$\n?/, Generic::Deleted)
|
25
26
|
rule(/^!.*$\n?/, Generic::Strong)
|
26
|
-
rule(/^@.*$\n?/, Generic::Subheading)
|
27
27
|
rule(/^([Ii]ndex|diff).*$\n?/, Generic::Heading)
|
28
|
+
rule(/^(@@[^@]*@@)([^\n]*\n)/) do
|
29
|
+
groups Punctuation, Text
|
30
|
+
end
|
31
|
+
rule(/^\w.*$\n?/, Punctuation)
|
28
32
|
rule(/^=.*$\n?/, Generic::Heading)
|
29
|
-
rule(
|
33
|
+
rule(/\s.*$\n?/, Text)
|
30
34
|
end
|
31
35
|
end
|
32
36
|
end
|
data/lib/rouge/lexers/docker.rb
CHANGED
@@ -0,0 +1,55 @@
|
|
1
|
+
module Rouge
|
2
|
+
module Lexers
|
3
|
+
class Escape < Lexer
|
4
|
+
tag 'escape'
|
5
|
+
aliases 'esc'
|
6
|
+
|
7
|
+
desc 'A generic lexer for including escaped content - see Formatter.enable_escape!'
|
8
|
+
|
9
|
+
option :start, 'the beginning of the escaped section, default "<!"'
|
10
|
+
option :end, 'the end of the escaped section, e.g. "!>"'
|
11
|
+
option :lang, 'the language to lex in unescaped sections'
|
12
|
+
|
13
|
+
attr_reader :start
|
14
|
+
attr_reader :end
|
15
|
+
attr_reader :lang
|
16
|
+
|
17
|
+
def initialize(*)
|
18
|
+
super
|
19
|
+
@start = string_option(:start) { '<!' }
|
20
|
+
@end = string_option(:end) { '!>' }
|
21
|
+
@lang = lexer_option(:lang) { PlainText.new }
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_start_regex
|
25
|
+
@to_start_regex ||= /(.*?)(#{Regexp.escape(@start)})/m
|
26
|
+
end
|
27
|
+
|
28
|
+
def to_end_regex
|
29
|
+
@to_end_regex ||= /(.*?)(#{Regexp.escape(@end)})/m
|
30
|
+
end
|
31
|
+
|
32
|
+
def stream_tokens(str, &b)
|
33
|
+
stream = StringScanner.new(str)
|
34
|
+
|
35
|
+
loop do
|
36
|
+
if stream.scan(to_start_regex)
|
37
|
+
puts "pre-escape: #{stream[1].inspect}" if @debug
|
38
|
+
@lang.continue_lex(stream[1], &b)
|
39
|
+
else
|
40
|
+
# no more start delimiters, scan til the end
|
41
|
+
@lang.continue_lex(stream.rest, &b)
|
42
|
+
return
|
43
|
+
end
|
44
|
+
|
45
|
+
if stream.scan(to_end_regex)
|
46
|
+
yield Token::Tokens::Escape, stream[1]
|
47
|
+
else
|
48
|
+
yield Token::Tokens::Escape, stream.rest
|
49
|
+
return
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/lib/rouge/lexers/go.rb
CHANGED
data/lib/rouge/lexers/graphql.rb
CHANGED
@@ -27,6 +27,13 @@ module Rouge
|
|
27
27
|
rule /\bunion\b/, Keyword, :union_definition
|
28
28
|
|
29
29
|
mixin :basic
|
30
|
+
|
31
|
+
# Markdown descriptions
|
32
|
+
rule /(""")(.*?)(""")/m do |m|
|
33
|
+
token Str::Double, m[1]
|
34
|
+
delegate Markdown, m[2]
|
35
|
+
token Str::Double, m[3]
|
36
|
+
end
|
30
37
|
end
|
31
38
|
|
32
39
|
state :basic do
|
@@ -227,6 +234,9 @@ module Rouge
|
|
227
234
|
}
|
228
235
|
}
|
229
236
|
|
237
|
+
# Multiline strings
|
238
|
+
rule /""".*?"""/m, Str::Double
|
239
|
+
|
230
240
|
rule /\$#{name}\b/, &pop_unless_list[Name::Variable]
|
231
241
|
rule /\b(?:true|false|null)\b/, &pop_unless_list[Keyword::Constant]
|
232
242
|
rule /[+-]?[0-9]+\.[0-9]+(?:[eE][+-]?[0-9]+)?/, &pop_unless_list[Num::Float]
|
data/lib/rouge/lexers/html.rb
CHANGED
data/lib/rouge/lexers/java.rb
CHANGED
@@ -24,6 +24,8 @@ module Rouge
|
|
24
24
|
types = %w(boolean byte char double float int long short var void)
|
25
25
|
|
26
26
|
id = /[a-zA-Z_][a-zA-Z0-9_]*/
|
27
|
+
const_name = /[A-Z][A-Z0-9_]*\b/
|
28
|
+
class_name = /[A-Z][a-zA-Z0-9]*\b/
|
27
29
|
|
28
30
|
state :root do
|
29
31
|
rule /[^\S\n]+/, Text
|
@@ -59,6 +61,8 @@ module Rouge
|
|
59
61
|
end
|
60
62
|
|
61
63
|
rule /#{id}:/, Name::Label
|
64
|
+
rule const_name, Name::Constant
|
65
|
+
rule class_name, Name::Class
|
62
66
|
rule /\$?#{id}/, Name
|
63
67
|
rule /[~^*!%&\[\](){}<>\|+=:;,.\/?-]/, Operator
|
64
68
|
|
@@ -98,26 +98,23 @@ module Rouge
|
|
98
98
|
|
99
99
|
def self.keywords
|
100
100
|
@keywords ||= Set.new %w(
|
101
|
-
|
102
|
-
|
103
|
-
|
101
|
+
as async await break case catch continue debugger default delete
|
102
|
+
do else export finally from for if import in instanceof new of
|
103
|
+
return super switch this throw try typeof void while yield
|
104
104
|
)
|
105
105
|
end
|
106
106
|
|
107
107
|
def self.declarations
|
108
108
|
@declarations ||= Set.new %w(
|
109
109
|
var let const with function class
|
110
|
-
extends constructor get set
|
110
|
+
extends constructor get set static
|
111
111
|
)
|
112
112
|
end
|
113
113
|
|
114
114
|
def self.reserved
|
115
115
|
@reserved ||= Set.new %w(
|
116
|
-
|
117
|
-
|
118
|
-
long native package private protected public short static
|
119
|
-
synchronized throws transient volatile
|
120
|
-
eval arguments await
|
116
|
+
enum implements interface
|
117
|
+
package private protected public
|
121
118
|
)
|
122
119
|
end
|
123
120
|
|
@@ -200,22 +197,21 @@ module Rouge
|
|
200
197
|
rule /0b[01][01_]*/i, Num::Bin
|
201
198
|
rule /[0-9]+/, Num::Integer
|
202
199
|
|
203
|
-
rule /"/, Str::
|
204
|
-
rule /'/, Str::
|
200
|
+
rule /"/, Str::Delimiter, :dq
|
201
|
+
rule /'/, Str::Delimiter, :sq
|
205
202
|
rule /:/, Punctuation
|
206
203
|
end
|
207
204
|
|
208
205
|
state :dq do
|
206
|
+
rule /\\[\\nrt"]?/, Str::Escape
|
209
207
|
rule /[^\\"]+/, Str::Double
|
210
|
-
rule
|
211
|
-
rule /\\"/, Str::Escape
|
212
|
-
rule /"/, Str::Double, :pop!
|
208
|
+
rule /"/, Str::Delimiter, :pop!
|
213
209
|
end
|
214
210
|
|
215
211
|
state :sq do
|
212
|
+
rule /\\[\\nrt']?/, Str::Escape
|
216
213
|
rule /[^\\']+/, Str::Single
|
217
|
-
rule
|
218
|
-
rule /'/, Str::Single, :pop!
|
214
|
+
rule /'/, Str::Delimiter, :pop!
|
219
215
|
end
|
220
216
|
|
221
217
|
# braced parts that aren't object literals
|
data/lib/rouge/lexers/jinja.rb
CHANGED
@@ -82,7 +82,7 @@ module Rouge
|
|
82
82
|
|
83
83
|
# Arithmetic operators (+, -, *, **, //, /)
|
84
84
|
# TODO : implement modulo (%)
|
85
|
-
rule /(
|
85
|
+
rule /(\+|\-|\*|\/\/?|\*\*?|=)/, Operator
|
86
86
|
|
87
87
|
# Comparisons operators (<=, <, >=, >, ==, ===, !=)
|
88
88
|
rule /(<=?|>=?|===?|!=)/, Operator
|
@@ -112,6 +112,11 @@ module Rouge
|
|
112
112
|
end
|
113
113
|
|
114
114
|
state :statement do
|
115
|
+
rule /(raw|verbatim)(\s+)(\%\})/ do
|
116
|
+
groups Keyword, Text, Comment::Preproc
|
117
|
+
goto :raw
|
118
|
+
end
|
119
|
+
|
115
120
|
rule /(\w+\.?)/ do |m|
|
116
121
|
if self.class.keywords.include?(m[0])
|
117
122
|
groups Keyword
|
@@ -133,6 +138,15 @@ module Rouge
|
|
133
138
|
|
134
139
|
rule /\%\}/, Comment::Preproc, :pop!
|
135
140
|
end
|
141
|
+
|
142
|
+
state :raw do
|
143
|
+
rule %r{(\{\%)(\s+)(endverbatim|endraw)(\s+)(\%\})} do
|
144
|
+
groups Comment::Preproc, Text, Keyword, Text, Comment::Preproc
|
145
|
+
pop!
|
146
|
+
end
|
147
|
+
|
148
|
+
rule /(.+?)/m, Text
|
149
|
+
end
|
136
150
|
end
|
137
151
|
end
|
138
152
|
end
|
data/lib/rouge/lexers/julia.rb
CHANGED
@@ -21,6 +21,8 @@ module Rouge
|
|
21
21
|
| NaN | NaN16 | NaN32 | NaN64
|
22
22
|
| stdout | stderr | stdin | devnull
|
23
23
|
| pi | π | ℯ | im
|
24
|
+
| ARGS | C_NULL | ENV | ENDIAN_BOM
|
25
|
+
| VERSION | undef | (LOAD|DEPOT)_PATH
|
24
26
|
)\b/x
|
25
27
|
|
26
28
|
KEYWORDS = /\b(?:
|
@@ -30,21 +32,137 @@ module Rouge
|
|
30
32
|
| const | local | global | using | struct
|
31
33
|
| mutable struct | abstract type | finally
|
32
34
|
| begin | do | quote | macro | for outer
|
35
|
+
| where
|
33
36
|
)\b/x
|
34
37
|
|
38
|
+
# NOTE: The list of types was generated automatically using the following script:
|
39
|
+
# using Pkg, InteractiveUtils
|
40
|
+
#
|
41
|
+
# allnames = [names(Core); names(Base, imported=true)]
|
42
|
+
#
|
43
|
+
# for stdlib in readdir(Pkg.Types.stdlib_dir())
|
44
|
+
# mod = Symbol(basename(stdlib))
|
45
|
+
# @eval begin
|
46
|
+
# using $mod
|
47
|
+
# append!(allnames, names($mod))
|
48
|
+
# end
|
49
|
+
# end
|
50
|
+
#
|
51
|
+
# sort!(unique!(allnames))
|
52
|
+
#
|
53
|
+
# i = 1
|
54
|
+
# for sym in allnames
|
55
|
+
# global i # needed at the top level, e.g. in the REPL
|
56
|
+
# isdefined(Main, sym) || continue
|
57
|
+
# getfield(which(Main, sym), sym) isa Type || continue
|
58
|
+
# sym === :(=>) && continue # Actually an alias for Pair
|
59
|
+
# print("| ", sym)
|
60
|
+
# i % 3 == 0 ? println() : print(" ") # print 3 to a line
|
61
|
+
# i += 1
|
62
|
+
# end
|
35
63
|
TYPES = /\b(?:
|
36
|
-
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
64
|
+
ARPACKException | AbstractArray | AbstractChannel
|
65
|
+
| AbstractChar | AbstractDict | AbstractDisplay
|
66
|
+
| AbstractFloat | AbstractIrrational | AbstractLogger
|
67
|
+
| AbstractMatrix | AbstractREPL | AbstractRNG
|
68
|
+
| AbstractRange | AbstractSerializer | AbstractSet
|
69
|
+
| AbstractSparseArray | AbstractSparseMatrix | AbstractSparseVector
|
70
|
+
| AbstractString | AbstractUnitRange | AbstractVecOrMat
|
71
|
+
| AbstractVector | AbstractWorkerPool | Adjoint
|
72
|
+
| Any | ArgumentError | Array
|
73
|
+
| AssertionError | Base64DecodePipe | Base64EncodePipe
|
74
|
+
| BasicREPL | Bidiagonal | BigFloat
|
75
|
+
| BigInt | BitArray | BitMatrix
|
76
|
+
| BitSet | BitVector | Bool
|
77
|
+
| BoundsError | BunchKaufman | CachingPool
|
78
|
+
| CapturedException | CartesianIndex | CartesianIndices
|
79
|
+
| Cchar | Cdouble | Cfloat
|
80
|
+
| Channel | Char | Cholesky
|
81
|
+
| CholeskyPivoted | Cint | Cintmax_t
|
82
|
+
| Clong | Clonglong | ClusterManager
|
83
|
+
| Cmd | Colon | Complex
|
84
|
+
| ComplexF16 | ComplexF32 | ComplexF64
|
85
|
+
| CompositeException | Condition | ConsoleLogger
|
86
|
+
| Cptrdiff_t | Cshort | Csize_t
|
87
|
+
| Cssize_t | Cstring | Cuchar
|
88
|
+
| Cuint | Cuintmax_t | Culong
|
89
|
+
| Culonglong | Cushort | Cvoid
|
90
|
+
| Cwchar_t | Cwstring | DataType
|
91
|
+
| Date | DateFormat | DatePeriod
|
92
|
+
| DateTime | Day | DenseArray
|
93
|
+
| DenseMatrix | DenseVecOrMat | DenseVector
|
94
|
+
| Diagonal | Dict | DimensionMismatch
|
95
|
+
| Dims | DivideError | DomainError
|
96
|
+
| EOFError | Eigen | Enum
|
97
|
+
| ErrorException | Exception | ExponentialBackOff
|
98
|
+
| Expr | FDWatcher | Factorization
|
99
|
+
| FileMonitor | Float16 | Float32
|
100
|
+
| Float64 | FolderMonitor | Function
|
101
|
+
| GeneralizedEigen | GeneralizedSVD | GeneralizedSchur
|
102
|
+
| GenericArray | GenericDict | GenericSet
|
103
|
+
| GenericString | GitConfig | GitRepo
|
104
|
+
| GlobalRef | HMAC_CTX | HTML
|
105
|
+
| Hermitian | Hessenberg | Hour
|
106
|
+
| IO | IOBuffer | IOContext
|
107
|
+
| IOStream | IPAddr | IPv4
|
108
|
+
| IPv6 | IdDict | IndexCartesian
|
109
|
+
| IndexLinear | IndexStyle | InexactError
|
110
|
+
| InitError | Int | Int128
|
111
|
+
| Int16 | Int32 | Int64
|
112
|
+
| Int8 | Integer | InterruptException
|
113
|
+
| InvalidStateException | Irrational | KeyError
|
114
|
+
| LAPACKException | LDLt | LQ
|
115
|
+
| LU | LinRange | LineEditREPL
|
116
|
+
| LineNumberNode | LinearIndices | LoadError
|
117
|
+
| LogLevel | LowerTriangular | MIME
|
118
|
+
| Matrix | MersenneTwister | Method
|
119
|
+
| MethodError | Microsecond | Millisecond
|
120
|
+
| Minute | Missing | MissingException
|
121
|
+
| Module | Month | NTuple
|
122
|
+
| NamedTuple | Nanosecond | Nothing
|
123
|
+
| NullLogger | Number | OrdinalRange
|
124
|
+
| OutOfMemoryError | OverflowError | PackageMode
|
125
|
+
| PackageSpec | Pair | PartialQuickSort
|
126
|
+
| Period | PermutedDimsArray | Pipe
|
127
|
+
| PollingFileWatcher | PosDefException | ProcessExitedException
|
128
|
+
| Ptr | QR | QRPivoted
|
129
|
+
| QuoteNode | RandomDevice | RankDeficientException
|
130
|
+
| Rational | RawFD | ReadOnlyMemoryError
|
131
|
+
| Real | ReentrantLock | Ref
|
132
|
+
| Regex | RegexMatch | RemoteChannel
|
133
|
+
| RemoteException | RoundingMode | SHA1_CTX
|
134
|
+
| SHA224_CTX | SHA256_CTX | SHA2_224_CTX
|
135
|
+
| SHA2_256_CTX | SHA2_384_CTX | SHA2_512_CTX
|
136
|
+
| SHA384_CTX | SHA3_224_CTX | SHA3_256_CTX
|
137
|
+
| SHA3_384_CTX | SHA3_512_CTX | SHA512_CTX
|
138
|
+
| SVD | Schur | Second
|
139
|
+
| SegmentationFault | Serializer | Set
|
140
|
+
| SharedArray | SharedMatrix | SharedVector
|
141
|
+
| Signed | SimpleLogger | SingularException
|
142
|
+
| Some | SparseMatrixCSC | SparseVector
|
143
|
+
| StackOverflowError | StepRange | StepRangeLen
|
144
|
+
| StreamREPL | StridedArray | StridedMatrix
|
145
|
+
| StridedVecOrMat | StridedVector | String
|
146
|
+
| StringIndexError | SubArray | SubString
|
147
|
+
| SubstitutionString | SymTridiagonal | Symbol
|
148
|
+
| Symmetric | SystemError | TCPSocket
|
149
|
+
| Task | TestSetException | Text
|
150
|
+
| TextDisplay | Time | TimePeriod
|
151
|
+
| TimeType | TimeZone | Timer
|
152
|
+
| Transpose | Tridiagonal | Tuple
|
153
|
+
| Type | TypeError | TypeVar
|
154
|
+
| UDPSocket | UInt | UInt128
|
155
|
+
| UInt16 | UInt32 | UInt64
|
156
|
+
| UInt8 | UTC | UUID
|
157
|
+
| UndefInitializer | UndefKeywordError | UndefRefError
|
158
|
+
| UndefVarError | UniformScaling | Union
|
159
|
+
| UnionAll | UnitLowerTriangular | UnitRange
|
160
|
+
| UnitUpperTriangular | Unsigned | UpgradeLevel
|
161
|
+
| UpperTriangular | Val | Vararg
|
162
|
+
| VecElement | VecOrMat | Vector
|
163
|
+
| VersionNumber | WeakKeyDict | WeakRef
|
164
|
+
| Week | WorkerConfig | WorkerPool
|
165
|
+
| Year
|
48
166
|
)\b/x
|
49
167
|
|
50
168
|
OPERATORS = / \+ | = | - | \* | \/
|
@@ -58,10 +176,10 @@ module Rouge
|
|
58
176
|
| :: | <: | -> | \? | \.\*
|
59
177
|
| \.\^ | \.\\ | \.\/ | \\ | <
|
60
178
|
| > | ÷ | >: | : | ===
|
61
|
-
| !==
|
179
|
+
| !== | =>
|
62
180
|
/x
|
63
181
|
|
64
|
-
PUNCTUATION = / [ \[ \] { } \( \) , ;
|
182
|
+
PUNCTUATION = / [ \[ \] { } \( \) , ; ] /x
|
65
183
|
|
66
184
|
|
67
185
|
state :root do
|
@@ -74,14 +192,14 @@ module Rouge
|
|
74
192
|
rule /\\/, Text
|
75
193
|
|
76
194
|
|
77
|
-
# functions
|
78
|
-
rule /(function)((?:\s|\\\s)+)/ do
|
195
|
+
# functions and macros
|
196
|
+
rule /(function|macro)((?:\s|\\\s)+)/ do
|
79
197
|
groups Keyword, Name::Function
|
80
198
|
push :funcname
|
81
199
|
end
|
82
200
|
|
83
201
|
# types
|
84
|
-
rule /(
|
202
|
+
rule /((mutable )?struct|(abstract|primitive) type)((?:\s|\\\s)+)/ do
|
85
203
|
groups Keyword, Name::Class
|
86
204
|
push :typename
|
87
205
|
end
|
@@ -91,8 +209,11 @@ module Rouge
|
|
91
209
|
rule /(local|global|const)\b/, Keyword::Declaration
|
92
210
|
rule KEYWORDS, Keyword
|
93
211
|
|
212
|
+
# TODO: end is a builtin when inside of an indexing expression
|
94
213
|
rule BUILTINS, Name::Builtin
|
95
214
|
|
215
|
+
# TODO: symbols
|
216
|
+
|
96
217
|
# backticks
|
97
218
|
rule /`.*?`/, Literal::String::Backtick
|
98
219
|
|
@@ -103,6 +224,8 @@ module Rouge
|
|
103
224
|
rule /(?<=[.\w)\]])\'+/, Operator
|
104
225
|
|
105
226
|
# strings
|
227
|
+
# TODO: triple quoted string literals
|
228
|
+
# TODO: Detect string interpolation
|
106
229
|
rule /(?:[IL])"/, Literal::String, :string
|
107
230
|
rule /[E]?"/, Literal::String, :string
|
108
231
|
|