aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/Pygments/py3/pygments/lexers/kuin.py
blob: 588deee49c30603fb248868eb96e13bb1e6ce61f (plain) (blame)
1
2
3
4
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
""" 
    pygments.lexers.kuin 
    ~~~~~~~~~~~~~~~~~~~~ 
 
    Lexers for the Kuin language. 

    :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
""" 
 
from pygments.lexer import RegexLexer, include, using, this, bygroups, words
from pygments.token import Text, Comment, Operator, Keyword, Name, String, Number, Punctuation 
 
__all__ = ['KuinLexer'] 
 
class KuinLexer(RegexLexer): 
    """ 
    For `Kuin <https://github.com/kuina/Kuin>`_ source code 
 
    .. versionadded:: 2.9 
    """ 
    name = 'Kuin' 
    aliases = ['kuin'] 
    filenames = ['*.kn'] 
 
    tokens = { 
        'root': [ 
            include('statement'), 
        ], 
        'statement': [ 
            # Whitespace / Comment 
            include('whitespace'), 
 
            # Block-statement 
            (r'(\+?[ \t]*\*?[ \t]*\bfunc)([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*)', bygroups(Keyword, using(this), Name.Function), 'func_'), 
            (r'\b(class)([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*)', bygroups(Keyword, using(this), Name.Class), 'class_'), 
            (r'\b(enum)([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*)', bygroups(Keyword, using(this), Name.Constant), 'enum_'), 
            (r'\b(block)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?', bygroups(Keyword, using(this), Name.Other), 'block_'), 
            (r'\b(ifdef)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?', bygroups(Keyword, using(this), Name.Other), 'ifdef_'), 
            (r'\b(if)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?', bygroups(Keyword, using(this), Name.Other), 'if_'), 
            (r'\b(switch)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?', bygroups(Keyword, using(this), Name.Other), 'switch_'), 
            (r'\b(while)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?', bygroups(Keyword, using(this), Name.Other), 'while_'), 
            (r'\b(for)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?', bygroups(Keyword, using(this), Name.Other), 'for_'), 
            (r'\b(foreach)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?', bygroups(Keyword, using(this), Name.Other), 'foreach_'), 
            (r'\b(try)\b(?:([ \t]+(?:\n\s*\|)*[ \t]*)([a-zA-Z_][0-9a-zA-Z_]*))?', bygroups(Keyword, using(this), Name.Other), 'try_'), 
 
            # Line-statement 
            (r'\b(do)\b', Keyword, 'do'), 
            (r'(\+?[ \t]*\bvar)\b', Keyword, 'var'), 
            (r'\b(const)\b', Keyword, 'const'), 
            (r'\b(ret)\b', Keyword, 'ret'), 
            (r'\b(throw)\b', Keyword, 'throw'), 
            (r'\b(alias)\b', Keyword, 'alias'), 
            (r'\b(assert)\b', Keyword, 'assert'), 
            (r'\|', Text, 'continued_line'), 
            (r'[ \t]*\n', Text), 
        ], 
 
        # Whitespace / Comment 
        'whitespace': [ 
            (r'^[ \t]*;.*', Comment.Single), 
            (r'[ \t]+(?![; \t])', Text), 
            (r'\{', Comment.Multiline, 'multiline_comment'), 
        ], 
        'multiline_comment': [ 
            (r'\{', Comment.Multiline, 'multiline_comment'), 
            (r'(?:\s*;.*|[^{}\n]+)', Comment.Multiline), 
            (r'\n', Comment.Multiline), 
            (r'\}', Comment.Multiline, '#pop'), 
        ], 
 
        # Block-statement 
        'func_': [ 
            include('expr'), 
            (r'\n', Text, 'func'), 
        ], 
        'func': [ 
            (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(func)\b', bygroups(Keyword, using(this), Keyword), '#pop:2'), 
            include('statement'), 
        ], 
        'class_': [ 
            include('expr'), 
            (r'\n', Text, 'class'), 
        ], 
        'class': [ 
            (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(class)\b', bygroups(Keyword, using(this), Keyword), '#pop:2'), 
            include('statement'), 
        ], 
        'enum_': [ 
            include('expr'), 
            (r'\n', Text, 'enum'), 
        ], 
        'enum': [ 
            (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(enum)\b', bygroups(Keyword, using(this), Keyword), '#pop:2'), 
            include('expr'), 
            (r'\n', Text), 
        ], 
        'block_': [ 
            include('expr'), 
            (r'\n', Text, 'block'), 
        ], 
        'block': [ 
            (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(block)\b', bygroups(Keyword, using(this), Keyword), '#pop:2'), 
            include('statement'), 
            include('break'), 
            include('skip'), 
        ], 
        'ifdef_': [ 
            include('expr'), 
            (r'\n', Text, 'ifdef'), 
        ], 
        'ifdef': [ 
            (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(ifdef)\b', bygroups(Keyword, using(this), Keyword), '#pop:2'), 
            (words(('rls', 'dbg'), prefix=r'\b', suffix=r'\b'), Keyword.Constant, 'ifdef_sp'), 
            include('statement'), 
            include('break'), 
            include('skip'), 
        ], 
        'ifdef_sp': [ 
            include('expr'), 
            (r'\n', Text, '#pop'), 
        ], 
        'if_': [ 
            include('expr'), 
            (r'\n', Text, 'if'), 
        ], 
        'if': [ 
            (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(if)\b', bygroups(Keyword, using(this), Keyword), '#pop:2'), 
            (words(('elif', 'else'), prefix=r'\b', suffix=r'\b'), Keyword, 'if_sp'), 
            include('statement'), 
            include('break'), 
            include('skip'), 
        ], 
        'if_sp': [ 
            include('expr'), 
            (r'\n', Text, '#pop'), 
        ], 
        'switch_': [ 
            include('expr'), 
            (r'\n', Text, 'switch'), 
        ], 
        'switch': [ 
            (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(switch)\b', bygroups(Keyword, using(this), Keyword), '#pop:2'), 
            (words(('case', 'default', 'to'), prefix=r'\b', suffix=r'\b'), Keyword, 'switch_sp'), 
            include('statement'), 
            include('break'), 
            include('skip'), 
        ], 
        'switch_sp': [ 
            include('expr'), 
            (r'\n', Text, '#pop'), 
        ], 
        'while_': [ 
            include('expr'), 
            (r'\n', Text, 'while'), 
        ], 
        'while': [ 
            (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(while)\b', bygroups(Keyword, using(this), Keyword), '#pop:2'), 
            include('statement'), 
            include('break'), 
            include('skip'), 
        ], 
        'for_': [ 
            include('expr'), 
            (r'\n', Text, 'for'), 
        ], 
        'for': [ 
            (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(for)\b', bygroups(Keyword, using(this), Keyword), '#pop:2'), 
            include('statement'), 
            include('break'), 
            include('skip'), 
        ], 
        'foreach_': [ 
            include('expr'), 
            (r'\n', Text, 'foreach'), 
        ], 
        'foreach': [ 
            (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(foreach)\b', bygroups(Keyword, using(this), Keyword), '#pop:2'), 
            include('statement'), 
            include('break'), 
            include('skip'), 
        ], 
        'try_': [ 
            include('expr'), 
            (r'\n', Text, 'try'), 
        ], 
        'try': [ 
            (r'\b(end)([ \t]+(?:\n\s*\|)*[ \t]*)(try)\b', bygroups(Keyword, using(this), Keyword), '#pop:2'), 
            (words(('catch', 'finally', 'to'), prefix=r'\b', suffix=r'\b'), Keyword, 'try_sp'), 
            include('statement'), 
            include('break'), 
            include('skip'), 
        ], 
        'try_sp': [ 
            include('expr'), 
            (r'\n', Text, '#pop'), 
        ], 
 
        # Line-statement 
        'break': [ 
            (r'\b(break)\b([ \t]+)([a-zA-Z_][0-9a-zA-Z_]*)', bygroups(Keyword, using(this), Name.Other)), 
        ], 
        'skip': [ 
            (r'\b(skip)\b([ \t]+)([a-zA-Z_][0-9a-zA-Z_]*)', bygroups(Keyword, using(this), Name.Other)), 
        ], 
        'alias': [ 
            include('expr'), 
            (r'\n', Text, '#pop'), 
        ], 
        'assert': [ 
            include('expr'), 
            (r'\n', Text, '#pop'), 
        ], 
        'const': [ 
            include('expr'), 
            (r'\n', Text, '#pop'), 
        ], 
        'do': [ 
            include('expr'), 
            (r'\n', Text, '#pop'), 
        ], 
        'ret': [ 
            include('expr'), 
            (r'\n', Text, '#pop'), 
        ], 
        'throw': [ 
            include('expr'), 
            (r'\n', Text, '#pop'), 
        ], 
        'var': [ 
            include('expr'), 
            (r'\n', Text, '#pop'), 
        ], 
        'continued_line': [ 
            include('expr'), 
            (r'\n', Text, '#pop'), 
        ], 
 
        'expr': [ 
            # Whitespace / Comment 
            include('whitespace'), 
 
            # Punctuation 
            (r'\(', Punctuation,), 
            (r'\)', Punctuation,), 
            (r'\[', Punctuation,), 
            (r'\]', Punctuation,), 
            (r',', Punctuation), 
 
            # Keyword 
            (words(( 
                'true', 'false', 'null', 'inf' 
                ), prefix=r'\b', suffix=r'\b'), Keyword.Constant), 
            (words(( 
                'me' 
                ), prefix=r'\b', suffix=r'\b'), Keyword), 
            (words(( 
                'bit16', 'bit32', 'bit64', 'bit8', 'bool', 
                'char', 'class', 'dict', 'enum', 'float', 'func', 
                'int', 'list', 'queue', 'stack' 
                ), prefix=r'\b', suffix=r'\b'), Keyword.Type), 
 
            # Number 
            (r'\b[0-9]\.[0-9]+(?!\.)(:?e[\+-][0-9]+)?\b', Number.Float), 
            (r'\b2#[01]+(?:b(?:8|16|32|64))?\b', Number.Bin), 
            (r'\b8#[0-7]+(?:b(?:8|16|32|64))?\b', Number.Oct), 
            (r'\b16#[0-9A-F]+(?:b(?:8|16|32|64))?\b', Number.Hex), 
            (r'\b[0-9]+(?:b(?:8|16|32|64))?\b', Number.Decimal), 
 
            # String / Char 
            (r'"', String.Double, 'string'), 
            (r"'(?:\\.|.)+?'", String.Char), 
 
            # Operator 
            (r'(?:\.|\$(?:>|<)?)', Operator), 
            (r'(?:\^)', Operator), 
            (r'(?:\+|-|!|##?)', Operator), 
            (r'(?:\*|/|%)', Operator), 
            (r'(?:~)', Operator), 
            (r'(?:(?:=|<>)(?:&|\$)?|<=?|>=?)', Operator), 
            (r'(?:&)', Operator), 
            (r'(?:\|)', Operator), 
            (r'(?:\?)', Operator), 
            (r'(?::(?::|\+|-|\*|/|%|\^|~)?)', Operator), 
 
            # Identifier 
            (r"\b([a-zA-Z_][0-9a-zA-Z_]*)(?=@)\b", Name), 
            (r"(@)?\b([a-zA-Z_][0-9a-zA-Z_]*)\b", bygroups(Name.Other, Name.Variable)), 
        ], 
 
        # String 
        'string': [ 
            (r'(?:\\[^{\n]|[^"\\])+', String.Double), 
            (r'\\\{', String.Double, 'toStrInString'), 
            (r'"', String.Double, '#pop'), 
        ], 
        'toStrInString': [ 
            include('expr'), 
            (r'\}', String.Double, '#pop'), 
        ], 
    }