gitlab-rouge 1.9.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (185) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +23 -0
  3. data/LICENSE +186 -0
  4. data/bin/rougify +16 -0
  5. data/gitlab-rouge.gemspec +17 -0
  6. data/lib/rouge.rb +57 -0
  7. data/lib/rouge/cli.rb +363 -0
  8. data/lib/rouge/demos/apache +21 -0
  9. data/lib/rouge/demos/applescript +2 -0
  10. data/lib/rouge/demos/c +8 -0
  11. data/lib/rouge/demos/clojure +5 -0
  12. data/lib/rouge/demos/coffeescript +5 -0
  13. data/lib/rouge/demos/common_lisp +1 -0
  14. data/lib/rouge/demos/conf +4 -0
  15. data/lib/rouge/demos/cpp +8 -0
  16. data/lib/rouge/demos/csharp +5 -0
  17. data/lib/rouge/demos/css +4 -0
  18. data/lib/rouge/demos/dart +6 -0
  19. data/lib/rouge/demos/diff +7 -0
  20. data/lib/rouge/demos/elixir +1 -0
  21. data/lib/rouge/demos/erb +1 -0
  22. data/lib/rouge/demos/erlang +7 -0
  23. data/lib/rouge/demos/factor +5 -0
  24. data/lib/rouge/demos/gherkin +17 -0
  25. data/lib/rouge/demos/glsl +14 -0
  26. data/lib/rouge/demos/go +7 -0
  27. data/lib/rouge/demos/groovy +9 -0
  28. data/lib/rouge/demos/haml +5 -0
  29. data/lib/rouge/demos/handlebars +7 -0
  30. data/lib/rouge/demos/haskell +6 -0
  31. data/lib/rouge/demos/html +8 -0
  32. data/lib/rouge/demos/http +14 -0
  33. data/lib/rouge/demos/ini +4 -0
  34. data/lib/rouge/demos/io +11 -0
  35. data/lib/rouge/demos/java +5 -0
  36. data/lib/rouge/demos/javascript +1 -0
  37. data/lib/rouge/demos/json +1 -0
  38. data/lib/rouge/demos/json-doc +1 -0
  39. data/lib/rouge/demos/liquid +11 -0
  40. data/lib/rouge/demos/literate_coffeescript +3 -0
  41. data/lib/rouge/demos/literate_haskell +7 -0
  42. data/lib/rouge/demos/llvm +20 -0
  43. data/lib/rouge/demos/lua +12 -0
  44. data/lib/rouge/demos/make +6 -0
  45. data/lib/rouge/demos/markdown +4 -0
  46. data/lib/rouge/demos/matlab +6 -0
  47. data/lib/rouge/demos/moonscript +16 -0
  48. data/lib/rouge/demos/nginx +5 -0
  49. data/lib/rouge/demos/nim +27 -0
  50. data/lib/rouge/demos/objective_c +14 -0
  51. data/lib/rouge/demos/ocaml +12 -0
  52. data/lib/rouge/demos/perl +5 -0
  53. data/lib/rouge/demos/php +3 -0
  54. data/lib/rouge/demos/plaintext +1 -0
  55. data/lib/rouge/demos/powershell +49 -0
  56. data/lib/rouge/demos/prolog +9 -0
  57. data/lib/rouge/demos/properties +7 -0
  58. data/lib/rouge/demos/puppet +6 -0
  59. data/lib/rouge/demos/python +6 -0
  60. data/lib/rouge/demos/qml +9 -0
  61. data/lib/rouge/demos/r +8 -0
  62. data/lib/rouge/demos/racket +24 -0
  63. data/lib/rouge/demos/ruby +9 -0
  64. data/lib/rouge/demos/rust +12 -0
  65. data/lib/rouge/demos/sass +3 -0
  66. data/lib/rouge/demos/scala +3 -0
  67. data/lib/rouge/demos/scheme +4 -0
  68. data/lib/rouge/demos/scss +5 -0
  69. data/lib/rouge/demos/sed +4 -0
  70. data/lib/rouge/demos/shell +2 -0
  71. data/lib/rouge/demos/slim +17 -0
  72. data/lib/rouge/demos/smalltalk +6 -0
  73. data/lib/rouge/demos/sml +4 -0
  74. data/lib/rouge/demos/sql +1 -0
  75. data/lib/rouge/demos/swift +5 -0
  76. data/lib/rouge/demos/tcl +1 -0
  77. data/lib/rouge/demos/tex +1 -0
  78. data/lib/rouge/demos/toml +9 -0
  79. data/lib/rouge/demos/tulip +14 -0
  80. data/lib/rouge/demos/vb +4 -0
  81. data/lib/rouge/demos/viml +5 -0
  82. data/lib/rouge/demos/xml +2 -0
  83. data/lib/rouge/demos/yaml +4 -0
  84. data/lib/rouge/formatter.rb +50 -0
  85. data/lib/rouge/formatters/html.rb +117 -0
  86. data/lib/rouge/formatters/null.rb +19 -0
  87. data/lib/rouge/formatters/terminal256.rb +176 -0
  88. data/lib/rouge/lexer.rb +443 -0
  89. data/lib/rouge/lexers/apache.rb +68 -0
  90. data/lib/rouge/lexers/apache/keywords.yml +453 -0
  91. data/lib/rouge/lexers/apple_script.rb +367 -0
  92. data/lib/rouge/lexers/c.rb +212 -0
  93. data/lib/rouge/lexers/clojure.rb +112 -0
  94. data/lib/rouge/lexers/coffeescript.rb +174 -0
  95. data/lib/rouge/lexers/common_lisp.rb +345 -0
  96. data/lib/rouge/lexers/conf.rb +24 -0
  97. data/lib/rouge/lexers/cpp.rb +66 -0
  98. data/lib/rouge/lexers/csharp.rb +88 -0
  99. data/lib/rouge/lexers/css.rb +271 -0
  100. data/lib/rouge/lexers/dart.rb +104 -0
  101. data/lib/rouge/lexers/diff.rb +31 -0
  102. data/lib/rouge/lexers/elixir.rb +108 -0
  103. data/lib/rouge/lexers/erb.rb +56 -0
  104. data/lib/rouge/lexers/erlang.rb +118 -0
  105. data/lib/rouge/lexers/factor.rb +302 -0
  106. data/lib/rouge/lexers/gherkin.rb +137 -0
  107. data/lib/rouge/lexers/gherkin/keywords.rb +14 -0
  108. data/lib/rouge/lexers/glsl.rb +135 -0
  109. data/lib/rouge/lexers/go.rb +178 -0
  110. data/lib/rouge/lexers/groovy.rb +104 -0
  111. data/lib/rouge/lexers/haml.rb +228 -0
  112. data/lib/rouge/lexers/handlebars.rb +79 -0
  113. data/lib/rouge/lexers/haskell.rb +183 -0
  114. data/lib/rouge/lexers/html.rb +94 -0
  115. data/lib/rouge/lexers/http.rb +80 -0
  116. data/lib/rouge/lexers/ini.rb +57 -0
  117. data/lib/rouge/lexers/io.rb +68 -0
  118. data/lib/rouge/lexers/java.rb +76 -0
  119. data/lib/rouge/lexers/javascript.rb +297 -0
  120. data/lib/rouge/lexers/liquid.rb +287 -0
  121. data/lib/rouge/lexers/literate_coffeescript.rb +33 -0
  122. data/lib/rouge/lexers/literate_haskell.rb +36 -0
  123. data/lib/rouge/lexers/llvm.rb +84 -0
  124. data/lib/rouge/lexers/lua.rb +122 -0
  125. data/lib/rouge/lexers/lua/builtins.rb +22 -0
  126. data/lib/rouge/lexers/make.rb +116 -0
  127. data/lib/rouge/lexers/markdown.rb +154 -0
  128. data/lib/rouge/lexers/matlab.rb +74 -0
  129. data/lib/rouge/lexers/matlab/builtins.rb +11 -0
  130. data/lib/rouge/lexers/moonscript.rb +110 -0
  131. data/lib/rouge/lexers/nginx.rb +71 -0
  132. data/lib/rouge/lexers/nim.rb +152 -0
  133. data/lib/rouge/lexers/objective_c.rb +197 -0
  134. data/lib/rouge/lexers/ocaml.rb +111 -0
  135. data/lib/rouge/lexers/perl.rb +197 -0
  136. data/lib/rouge/lexers/php.rb +173 -0
  137. data/lib/rouge/lexers/php/builtins.rb +204 -0
  138. data/lib/rouge/lexers/plain_text.rb +25 -0
  139. data/lib/rouge/lexers/powershell.rb +96 -0
  140. data/lib/rouge/lexers/prolog.rb +64 -0
  141. data/lib/rouge/lexers/properties.rb +55 -0
  142. data/lib/rouge/lexers/puppet.rb +128 -0
  143. data/lib/rouge/lexers/python.rb +228 -0
  144. data/lib/rouge/lexers/qml.rb +72 -0
  145. data/lib/rouge/lexers/r.rb +56 -0
  146. data/lib/rouge/lexers/racket.rb +542 -0
  147. data/lib/rouge/lexers/ruby.rb +415 -0
  148. data/lib/rouge/lexers/rust.rb +191 -0
  149. data/lib/rouge/lexers/sass.rb +74 -0
  150. data/lib/rouge/lexers/sass/common.rb +180 -0
  151. data/lib/rouge/lexers/scala.rb +142 -0
  152. data/lib/rouge/lexers/scheme.rb +112 -0
  153. data/lib/rouge/lexers/scss.rb +34 -0
  154. data/lib/rouge/lexers/sed.rb +170 -0
  155. data/lib/rouge/lexers/shell.rb +152 -0
  156. data/lib/rouge/lexers/slim.rb +228 -0
  157. data/lib/rouge/lexers/smalltalk.rb +116 -0
  158. data/lib/rouge/lexers/sml.rb +347 -0
  159. data/lib/rouge/lexers/sql.rb +140 -0
  160. data/lib/rouge/lexers/swift.rb +144 -0
  161. data/lib/rouge/lexers/tcl.rb +192 -0
  162. data/lib/rouge/lexers/tex.rb +72 -0
  163. data/lib/rouge/lexers/toml.rb +71 -0
  164. data/lib/rouge/lexers/tulip.rb +75 -0
  165. data/lib/rouge/lexers/vb.rb +164 -0
  166. data/lib/rouge/lexers/viml.rb +101 -0
  167. data/lib/rouge/lexers/viml/keywords.rb +12 -0
  168. data/lib/rouge/lexers/xml.rb +59 -0
  169. data/lib/rouge/lexers/yaml.rb +364 -0
  170. data/lib/rouge/plugins/redcarpet.rb +30 -0
  171. data/lib/rouge/regex_lexer.rb +439 -0
  172. data/lib/rouge/template_lexer.rb +22 -0
  173. data/lib/rouge/text_analyzer.rb +48 -0
  174. data/lib/rouge/theme.rb +195 -0
  175. data/lib/rouge/themes/base16.rb +130 -0
  176. data/lib/rouge/themes/colorful.rb +67 -0
  177. data/lib/rouge/themes/github.rb +71 -0
  178. data/lib/rouge/themes/molokai.rb +82 -0
  179. data/lib/rouge/themes/monokai.rb +92 -0
  180. data/lib/rouge/themes/monokai_sublime.rb +90 -0
  181. data/lib/rouge/themes/thankful_eyes.rb +71 -0
  182. data/lib/rouge/token.rb +182 -0
  183. data/lib/rouge/util.rb +101 -0
  184. data/lib/rouge/version.rb +7 -0
  185. metadata +231 -0
@@ -0,0 +1,116 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class Smalltalk < RegexLexer
6
+ title "Smalltalk"
7
+ desc 'The Smalltalk programming language'
8
+
9
+ tag 'smalltalk'
10
+ aliases 'st', 'squeak'
11
+ filenames '*.st'
12
+ mimetypes 'text/x-smalltalk'
13
+
14
+ ops = %r([-+*/\\~<>=|&!?,@%])
15
+
16
+ state :root do
17
+ rule /(<)(\w+:)(.*?)(>)/ do
18
+ groups Punctuation, Keyword, Text, Punctuation
19
+ end
20
+
21
+ # mixin :squeak_fileout
22
+ mixin :whitespaces
23
+ mixin :method_definition
24
+ rule /([|])([\w\s]*)([|])/ do
25
+ groups Punctuation, Name::Variable, Punctuation
26
+ end
27
+ mixin :objects
28
+ rule /\^|:=|_/, Operator
29
+
30
+ rule /[)}\]]/, Punctuation, :after_object
31
+ rule /[({\[!]/, Punctuation
32
+ end
33
+
34
+ state :method_definition do
35
+ rule /([a-z]\w*:)(\s*)(\w+)/i do
36
+ groups Name::Function, Text, Name::Variable
37
+ end
38
+
39
+ rule /^(\s*)(\b[a-z]\w*\b)(\s*)$/i do
40
+ groups Text, Name::Function, Text
41
+ end
42
+
43
+ rule %r(^(\s*)(#{ops}+)(\s*)(\w+)(\s*)$) do
44
+ groups Text, Name::Function, Text, Name::Variable, Text
45
+ end
46
+ end
47
+
48
+ state :block_variables do
49
+ mixin :whitespaces
50
+ rule /(:)(\s*)(\w+)/ do
51
+ groups Operator, Text, Name::Variable
52
+ end
53
+
54
+ rule /[|]/, Punctuation, :pop!
55
+
56
+ rule(//) { pop! }
57
+ end
58
+
59
+ state :literals do
60
+ rule /'(''|.)*?'/m, Str, :after_object
61
+ rule /[$]./, Str::Char, :after_object
62
+ rule /#[(]/, Str::Symbol, :parenth
63
+ rule /(\d+r)?-?\d+(\.\d+)?(e-?\d+)?/,
64
+ Num, :after_object
65
+ rule /#("[^"]*"|#{ops}+|[\w:]+)/,
66
+ Str::Symbol, :after_object
67
+ end
68
+
69
+ state :parenth do
70
+ rule /[)]/ do
71
+ token Str::Symbol
72
+ goto :after_object
73
+ end
74
+
75
+ mixin :inner_parenth
76
+ end
77
+
78
+ state :inner_parenth do
79
+ rule /#[(]/, Str::Symbol, :inner_parenth
80
+ rule /[)]/, Str::Symbol, :pop!
81
+ mixin :whitespaces
82
+ mixin :literals
83
+ rule /(#{ops}|[\w:])+/, Str::Symbol
84
+ end
85
+
86
+ state :whitespaces do
87
+ rule /! !$/, Keyword # squeak chunk delimiter
88
+ rule /\s+/m, Text
89
+ rule /".*?"/m, Comment
90
+ end
91
+
92
+ state :objects do
93
+ rule /\[/, Punctuation, :block_variables
94
+ rule /(self|super|true|false|nil|thisContext)\b/,
95
+ Name::Builtin::Pseudo, :after_object
96
+ rule /[A-Z]\w*(?!:)\b/, Name::Class, :after_object
97
+ rule /[a-z]\w*(?!:)\b/, Name::Variable, :after_object
98
+ mixin :literals
99
+ end
100
+
101
+ state :after_object do
102
+ mixin :whitespaces
103
+ rule /(ifTrue|ifFalse|whileTrue|whileFalse|timesRepeat):/,
104
+ Name::Builtin, :pop!
105
+ rule /new(?!:)\b/, Name::Builtin
106
+ rule /:=|_/, Operator, :pop!
107
+ rule /[a-z]+\w*:/i, Name::Function, :pop!
108
+ rule /[a-z]+\w*/i, Name::Function
109
+ rule /#{ops}+/, Name::Function, :pop!
110
+ rule /[.]/, Punctuation, :pop!
111
+ rule /;/, Punctuation
112
+ rule(//) { pop! }
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,347 @@
1
+ # -*- coding: utf-8 -*- #
2
+
3
+ module Rouge
4
+ module Lexers
5
+ class SML < RegexLexer
6
+ title "SML"
7
+ desc 'Standard ML'
8
+ tag 'sml'
9
+ aliases 'ml'
10
+ filenames '*.sml', '*.sig', '*.fun'
11
+
12
+ mimetypes 'text/x-standardml', 'application/x-standardml'
13
+
14
+ def self.keywords
15
+ @keywords ||= Set.new %w(
16
+ abstype and andalso as case datatype do else end exception
17
+ fn fun handle if in infix infixr let local nonfix of op open
18
+ orelse raise rec then type val with withtype while
19
+ eqtype functor include sharing sig signature struct structure
20
+ where
21
+ )
22
+ end
23
+
24
+ def self.symbolic_reserved
25
+ @symbolic_reserved ||= Set.new %w(: | = => -> # :>)
26
+ end
27
+
28
+ id = /[\w']+/i
29
+ symbol = %r([!%&$#/:<=>?@\\~`^|*+-]+)
30
+
31
+ def self.analyze_text(text)
32
+ return 0
33
+ end
34
+
35
+ state :whitespace do
36
+ rule /\s+/m, Text
37
+ rule /[(][*]/, Comment, :comment
38
+ end
39
+
40
+ state :delimiters do
41
+ rule /[(\[{]/, Punctuation, :main
42
+ rule /[)\]}]/, Punctuation, :pop!
43
+
44
+ rule /\b(let|if|local)\b(?!')/, Keyword::Reserved do
45
+ push; push
46
+ end
47
+
48
+ rule /\b(struct|sig|while)\b(?!')/ do
49
+ token Keyword::Reserved
50
+ push
51
+ end
52
+
53
+ rule /\b(do|else|end|in|then)\b(?!')/, Keyword::Reserved, :pop!
54
+ end
55
+
56
+ def token_for_id_with_dot(id)
57
+ if self.class.keywords.include? id
58
+ Error
59
+ else
60
+ Name::Namespace
61
+ end
62
+ end
63
+
64
+ def token_for_final_id(id)
65
+ if self.class.keywords.include? id or self.class.symbolic_reserved.include? id
66
+ Error
67
+ else
68
+ Name
69
+ end
70
+ end
71
+
72
+ def token_for_id(id)
73
+ if self.class.keywords.include? id
74
+ Keyword::Reserved
75
+ elsif self.class.symbolic_reserved.include? id
76
+ Punctuation
77
+ else
78
+ Name
79
+ end
80
+ end
81
+
82
+ state :core do
83
+ rule /[()\[\]{},;_]|[.][.][.]/, Punctuation
84
+ rule /#"/, Str::Char, :char
85
+ rule /"/, Str::Double, :string
86
+ rule /~?0x[0-9a-fA-F]+/, Num::Hex
87
+ rule /0wx[0-9a-fA-F]+/, Num::Hex
88
+ rule /0w\d+/, Num::Integer
89
+ rule /~?\d+([.]\d+)?[eE]~?\d+/, Num::Float
90
+ rule /~?\d+[.]\d+/, Num::Float
91
+ rule /~?\d+/, Num::Integer
92
+
93
+ rule /#\s*[1-9][0-9]*/, Name::Label
94
+ rule /#\s*#{id}/, Name::Label
95
+ rule /#\s+#{symbol}/, Name::Label
96
+
97
+ rule /\b(datatype|abstype)\b(?!')/, Keyword::Reserved, :dname
98
+ rule(/(?=\bexception\b(?!'))/) { push :ename }
99
+ rule /\b(functor|include|open|signature|structure)\b(?!')/,
100
+ Keyword::Reserved, :sname
101
+ rule /\b(type|eqtype)\b(?!')/, Keyword::Reserved, :tname
102
+
103
+ rule /'#{id}/, Name::Decorator
104
+ rule /(#{id})([.])/ do |m|
105
+ groups(token_for_id_with_dot(m[1]), Punctuation)
106
+ push :dotted
107
+ end
108
+
109
+ rule id do |m|
110
+ token token_for_id(m[0])
111
+ end
112
+
113
+ rule symbol do |m|
114
+ token token_for_id(m[0])
115
+ end
116
+ end
117
+
118
+ state :dotted do
119
+ rule /(#{id})([.])/ do |m|
120
+ groups(token_for_id_with_dot(m[1]), Punctuation)
121
+ end
122
+
123
+ rule id do |m|
124
+ token token_for_id(m[0])
125
+ pop!
126
+ end
127
+
128
+ rule symbol do |m|
129
+ token token_for_id(m[0])
130
+ pop!
131
+ end
132
+ end
133
+
134
+ state :root do
135
+ rule /#!.*?\n/, Comment::Preproc
136
+ rule(//) { push :main }
137
+ end
138
+
139
+ state :main do
140
+ mixin :whitespace
141
+
142
+ rule /\b(val|and)\b(?!')/, Keyword::Reserved, :vname
143
+ rule /\b(fun)\b(?!')/ do
144
+ token Keyword::Reserved
145
+ goto :main_fun
146
+ push :fname
147
+ end
148
+
149
+ mixin :delimiters
150
+ mixin :core
151
+ end
152
+
153
+ state :main_fun do
154
+ mixin :whitespace
155
+ rule /\b(fun|and)\b(?!')/, Keyword::Reserved, :fname
156
+ rule /\bval\b(?!')/ do
157
+ token Keyword::Reserved
158
+ goto :main
159
+ push :vname
160
+ end
161
+
162
+ rule /[|]/, Punctuation, :fname
163
+ rule /\b(case|handle)\b(?!')/ do
164
+ token Keyword::Reserved
165
+ goto :main
166
+ end
167
+
168
+ mixin :delimiters
169
+ mixin :core
170
+ end
171
+
172
+ state :has_escapes do
173
+ rule /\\[\\"abtnvfr]/, Str::Escape
174
+ rule /\\\^[\x40-\x5e]/, Str::Escape
175
+ rule /\\[0-9]{3}/, Str::Escape
176
+ rule /\\u\h{4}/, Str::Escape
177
+ rule /\\\s+\\/, Str::Interpol
178
+ end
179
+
180
+ state :string do
181
+ rule /[^"\\]+/, Str::Double
182
+ rule /"/, Str::Double, :pop!
183
+ mixin :has_escapes
184
+ end
185
+
186
+ state :char do
187
+ rule /[^"\\]+/, Str::Char
188
+ rule /"/, Str::Char, :pop!
189
+ mixin :has_escapes
190
+ end
191
+
192
+ state :breakout do
193
+ rule /(?=\w+\b(#{SML.keywords.to_a.join('|')})\b(?!'))/ do
194
+ pop!
195
+ end
196
+ end
197
+
198
+ state :sname do
199
+ mixin :whitespace
200
+ mixin :breakout
201
+ rule id, Name::Namespace
202
+ rule(//) { pop! }
203
+ end
204
+
205
+ state :has_annotations do
206
+ rule /'[\w']*/, Name::Decorator
207
+ rule /[(]/, Punctuation, :tyvarseq
208
+ end
209
+
210
+ state :fname do
211
+ mixin :whitespace
212
+ mixin :has_annotations
213
+
214
+ rule id, Name::Function, :pop!
215
+ rule symbol, Name::Function, :pop!
216
+ end
217
+
218
+ state :vname do
219
+ mixin :whitespace
220
+ mixin :has_annotations
221
+
222
+ rule /(#{id})(\s*)(=(?!#{symbol}))/m do
223
+ groups Name::Variable, Text, Punctuation
224
+ pop!
225
+ end
226
+
227
+ rule /(#{symbol})(\s*)(=(?!#{symbol}))/m do
228
+ groups Name::Variable, Text, Punctuation
229
+ end
230
+
231
+ rule id, Name::Variable, :pop!
232
+ rule symbol, Name::Variable, :pop!
233
+
234
+ rule(//) { pop! }
235
+ end
236
+
237
+ state :tname do
238
+ mixin :whitespace
239
+ mixin :breakout
240
+ mixin :has_annotations
241
+
242
+ rule /'[\w']*/, Name::Decorator
243
+ rule /[(]/, Punctuation, :tyvarseq
244
+
245
+ rule %r(=(?!#{symbol})) do
246
+ token Punctuation
247
+ goto :typbind
248
+ end
249
+
250
+ rule id, Keyword::Type
251
+ rule symbol, Keyword::Type
252
+ end
253
+
254
+ state :typbind do
255
+ mixin :whitespace
256
+
257
+ rule /\b(and)\b(?!')/ do
258
+ token Keyword::Reserved
259
+ goto :tname
260
+ end
261
+
262
+ mixin :breakout
263
+ mixin :core
264
+ end
265
+
266
+ state :dname do
267
+ mixin :whitespace
268
+ mixin :breakout
269
+ mixin :has_annotations
270
+
271
+ rule /(=)(\s*)(datatype)\b/ do
272
+ groups Punctuation, Text, Keyword::Reserved
273
+ pop!
274
+ end
275
+
276
+ rule %r(=(?!#{symbol})) do
277
+ token Punctuation
278
+ goto :datbind
279
+ push :datcon
280
+ end
281
+
282
+ rule id, Keyword::Type
283
+ rule symbol, Keyword::Type
284
+ end
285
+
286
+ state :datbind do
287
+ mixin :whitespace
288
+ rule /\b(and)\b(?!')/ do
289
+ token Keyword::Reserved; goto :dname
290
+ end
291
+ rule /\b(withtype)\b(?!')/ do
292
+ token Keyword::Reserved; goto :tname
293
+ end
294
+ rule /\bof\b(?!')/, Keyword::Reserved
295
+ rule /([|])(\s*)(#{id})/ do
296
+ groups(Punctuation, Text, Name::Class)
297
+ end
298
+
299
+ rule /([|])(\s+)(#{symbol})/ do
300
+ groups(Punctuation, Text, Name::Class)
301
+ end
302
+
303
+ mixin :breakout
304
+ mixin :core
305
+ end
306
+
307
+ state :ename do
308
+ mixin :whitespace
309
+ rule /(exception|and)(\s+)(#{id})/ do
310
+ groups Keyword::Reserved, Text, Name::Class
311
+ end
312
+
313
+ rule /(exception|and)(\s*)(#{symbol})/ do
314
+ groups Keyword::Reserved, Text, Name::Class
315
+ end
316
+
317
+ rule /\b(of)\b(?!')/, Keyword::Reserved
318
+ mixin :breakout
319
+ mixin :core
320
+ end
321
+
322
+ state :datcon do
323
+ mixin :whitespace
324
+ rule id, Name::Class, :pop!
325
+ rule symbol, Name::Class, :pop!
326
+ end
327
+
328
+ state :tyvarseq do
329
+ mixin :whitespace
330
+ rule /'[\w']*/, Name::Decorator
331
+ rule id, Name
332
+ rule /,/, Punctuation
333
+ rule /[)]/, Punctuation, :pop!
334
+ rule symbol, Name
335
+ end
336
+
337
+ state :comment do
338
+ rule /[^(*)]+/, Comment::Multiline
339
+ rule /[(][*]/ do
340
+ token Comment::Multiline; push
341
+ end
342
+ rule /[*][)]/, Comment::Multiline, :pop!
343
+ rule /[(*)]/, Comment::Multiline
344
+ end
345
+ end
346
+ end
347
+ end