gitlab-rouge 1.9.2

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.
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