aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/Pygments/py3/pygments/lexers/webidl.py
blob: 6b5627695ce07af6ba9d0d8cc2ddf233e808f460 (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
""" 
    pygments.lexers.webidl 
    ~~~~~~~~~~~~~~~~~~~~~~ 
 
    Lexers for Web IDL, including some extensions. 
 
    :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS. 
    :license: BSD, see LICENSE for details. 
""" 
 
from pygments.lexer import RegexLexer, default, include, words 
from pygments.token import Comment, Keyword, Name, Number, Punctuation, \ 
    String, Text 
 
__all__ = ['WebIDLLexer'] 
 
_builtin_types = ( 
    # primitive types 
    'byte', 'octet', 'boolean', 
    r'(?:unsigned\s+)?(?:short|long(?:\s+long)?)', 
    r'(?:unrestricted\s+)?(?:float|double)', 
    # string types 
    'DOMString', 'ByteString', 'USVString', 
    # exception types 
    'Error', 'DOMException', 
    # typed array types 
    'Uint8Array', 'Uint16Array', 'Uint32Array', 'Uint8ClampedArray', 
    'Float32Array', 'Float64Array', 
    # buffer source types 
    'ArrayBuffer', 'DataView', 'Int8Array', 'Int16Array', 'Int32Array', 
    # other 
    'any', 'void', 'object', 'RegExp', 
) 
_identifier = r'_?[A-Za-z][a-zA-Z0-9_-]*' 
_keyword_suffix = r'(?![\w-])' 
_string = r'"[^"]*"' 
 
 
class WebIDLLexer(RegexLexer): 
    """ 
    For Web IDL. 
 
    .. versionadded:: 2.6 
    """ 
 
    name = 'Web IDL' 
    aliases = ['webidl'] 
    filenames = ['*.webidl'] 
 
    tokens = { 
        'common': [ 
            (r'\s+', Text), 
            (r'(?s)/\*.*?\*/', Comment.Multiline), 
            (r'//.*', Comment.Single), 
            (r'^#.*', Comment.Preproc), 
        ], 
        'root': [ 
            include('common'), 
            (r'\[', Punctuation, 'extended_attributes'), 
            (r'partial' + _keyword_suffix, Keyword), 
            (r'typedef' + _keyword_suffix, Keyword, ('typedef', 'type')), 
            (r'interface' + _keyword_suffix, Keyword, 'interface_rest'), 
            (r'enum' + _keyword_suffix, Keyword, 'enum_rest'), 
            (r'callback' + _keyword_suffix, Keyword, 'callback_rest'), 
            (r'dictionary' + _keyword_suffix, Keyword, 'dictionary_rest'), 
            (r'namespace' + _keyword_suffix, Keyword, 'namespace_rest'), 
            (_identifier, Name.Class, 'implements_rest'), 
        ], 
        'extended_attributes': [ 
            include('common'), 
            (r',', Punctuation), 
            (_identifier, Name.Decorator), 
            (r'=', Punctuation, 'extended_attribute_rest'), 
            (r'\(', Punctuation, 'argument_list'), 
            (r'\]', Punctuation, '#pop'), 
        ], 
        'extended_attribute_rest': [ 
            include('common'), 
            (_identifier, Name, 'extended_attribute_named_rest'), 
            (_string, String), 
            (r'\(', Punctuation, 'identifier_list'), 
            default('#pop'), 
        ], 
        'extended_attribute_named_rest': [ 
            include('common'), 
            (r'\(', Punctuation, 'argument_list'), 
            default('#pop'), 
        ], 
        'argument_list': [ 
            include('common'), 
            (r'\)', Punctuation, '#pop'), 
            default('argument'), 
        ], 
        'argument': [ 
            include('common'), 
            (r'optional' + _keyword_suffix, Keyword), 
            (r'\[', Punctuation, 'extended_attributes'), 
            (r',', Punctuation, '#pop'), 
            (r'\)', Punctuation, '#pop:2'), 
            default(('argument_rest', 'type')) 
        ], 
        'argument_rest': [ 
            include('common'), 
            (_identifier, Name.Variable), 
            (r'\.\.\.', Punctuation), 
            (r'=', Punctuation, 'default_value'), 
            default('#pop'), 
        ], 
        'identifier_list': [ 
            include('common'), 
            (_identifier, Name.Class), 
            (r',', Punctuation), 
            (r'\)', Punctuation, '#pop'), 
        ], 
        'type': [ 
            include('common'), 
            (r'(?:' + r'|'.join(_builtin_types) + r')' + _keyword_suffix, 
             Keyword.Type, 'type_null'), 
            (words(('sequence', 'Promise', 'FrozenArray'), 
                   suffix=_keyword_suffix), Keyword.Type, 'type_identifier'), 
            (_identifier, Name.Class, 'type_identifier'), 
            (r'\(', Punctuation, 'union_type'), 
        ], 
        'union_type': [ 
            include('common'), 
            (r'or' + _keyword_suffix, Keyword), 
            (r'\)', Punctuation, ('#pop', 'type_null')), 
            default('type'), 
        ], 
        'type_identifier': [ 
            (r'<', Punctuation, 'type_list'), 
            default(('#pop', 'type_null')) 
        ], 
        'type_null': [ 
            (r'\?', Punctuation), 
            default('#pop:2'), 
        ], 
        'default_value': [ 
            include('common'), 
            include('const_value'), 
            (_string, String, '#pop'), 
            (r'\[\s*\]', Punctuation, '#pop'), 
        ], 
        'const_value': [ 
            include('common'), 
            (words(('true', 'false', '-Infinity', 'Infinity', 'NaN', 'null'), 
                   suffix=_keyword_suffix), Keyword.Constant, '#pop'), 
            (r'-?(?:(?:[0-9]+\.[0-9]*|[0-9]*\.[0-9]+)(?:[Ee][+-]?[0-9]+)?' + 
             r'|[0-9]+[Ee][+-]?[0-9]+)', Number.Float, '#pop'), 
            (r'-?[1-9][0-9]*', Number.Integer, '#pop'), 
            (r'-?0[Xx][0-9A-Fa-f]+', Number.Hex, '#pop'), 
            (r'-?0[0-7]*', Number.Oct, '#pop'), 
        ], 
        'typedef': [ 
            include('common'), 
            (_identifier, Name.Class), 
            (r';', Punctuation, '#pop'), 
        ], 
        'namespace_rest': [ 
            include('common'), 
            (_identifier, Name.Namespace), 
            (r'\{', Punctuation, 'namespace_body'), 
            (r';', Punctuation, '#pop'), 
        ], 
        'namespace_body': [ 
            include('common'), 
            (r'\[', Punctuation, 'extended_attributes'), 
            (r'readonly' + _keyword_suffix, Keyword), 
            (r'attribute' + _keyword_suffix, 
             Keyword, ('attribute_rest', 'type')), 
            (r'const' + _keyword_suffix, Keyword, ('const_rest', 'type')), 
            (r'\}', Punctuation, '#pop'), 
            default(('operation_rest', 'type')), 
        ], 
        'interface_rest': [ 
            include('common'), 
            (_identifier, Name.Class), 
            (r':', Punctuation), 
            (r'\{', Punctuation, 'interface_body'), 
            (r';', Punctuation, '#pop'), 
        ], 
        'interface_body': [ 
            (words(('iterable', 'maplike', 'setlike'), suffix=_keyword_suffix), 
             Keyword, 'iterable_maplike_setlike_rest'), 
            (words(('setter', 'getter', 'creator', 'deleter', 'legacycaller', 
                    'inherit', 'static', 'stringifier', 'jsonifier'), 
                   suffix=_keyword_suffix), Keyword), 
            (r'serializer' + _keyword_suffix, Keyword, 'serializer_rest'), 
            (r';', Punctuation), 
            include('namespace_body'), 
        ], 
        'attribute_rest': [ 
            include('common'), 
            (_identifier, Name.Variable), 
            (r';', Punctuation, '#pop'), 
        ], 
        'const_rest': [ 
            include('common'), 
            (_identifier, Name.Constant), 
            (r'=', Punctuation, 'const_value'), 
            (r';', Punctuation, '#pop'), 
        ], 
        'operation_rest': [ 
            include('common'), 
            (r';', Punctuation, '#pop'), 
            default('operation'), 
        ], 
        'operation': [ 
            include('common'), 
            (_identifier, Name.Function), 
            (r'\(', Punctuation, 'argument_list'), 
            (r';', Punctuation, '#pop:2'), 
        ], 
        'iterable_maplike_setlike_rest': [ 
            include('common'), 
            (r'<', Punctuation, 'type_list'), 
            (r';', Punctuation, '#pop'), 
        ], 
        'type_list': [ 
            include('common'), 
            (r',', Punctuation), 
            (r'>', Punctuation, '#pop'), 
            default('type'), 
        ], 
        'serializer_rest': [ 
            include('common'), 
            (r'=', Punctuation, 'serialization_pattern'), 
            (r';', Punctuation, '#pop'), 
            default('operation'), 
        ], 
        'serialization_pattern': [ 
            include('common'), 
            (_identifier, Name.Variable, '#pop'), 
            (r'\{', Punctuation, 'serialization_pattern_map'), 
            (r'\[', Punctuation, 'serialization_pattern_list'), 
        ], 
        'serialization_pattern_map': [ 
            include('common'), 
            (words(('getter', 'inherit', 'attribute'), 
                   suffix=_keyword_suffix), Keyword), 
            (r',', Punctuation), 
            (_identifier, Name.Variable), 
            (r'\}', Punctuation, '#pop:2'), 
        ], 
        'serialization_pattern_list': [ 
            include('common'), 
            (words(('getter', 'attribute'), suffix=_keyword_suffix), Keyword), 
            (r',', Punctuation), 
            (_identifier, Name.Variable), 
            (r']', Punctuation, '#pop:2'), 
        ], 
        'enum_rest': [ 
            include('common'), 
            (_identifier, Name.Class), 
            (r'\{', Punctuation, 'enum_body'), 
            (r';', Punctuation, '#pop'), 
        ], 
        'enum_body': [ 
            include('common'), 
            (_string, String), 
            (r',', Punctuation), 
            (r'\}', Punctuation, '#pop'), 
        ], 
        'callback_rest': [ 
            include('common'), 
            (r'interface' + _keyword_suffix, 
             Keyword, ('#pop', 'interface_rest')), 
            (_identifier, Name.Class), 
            (r'=', Punctuation, ('operation', 'type')), 
            (r';', Punctuation, '#pop'), 
        ], 
        'dictionary_rest': [ 
            include('common'), 
            (_identifier, Name.Class), 
            (r':', Punctuation), 
            (r'\{', Punctuation, 'dictionary_body'), 
            (r';', Punctuation, '#pop'), 
        ], 
        'dictionary_body': [ 
            include('common'), 
            (r'\[', Punctuation, 'extended_attributes'), 
            (r'required' + _keyword_suffix, Keyword), 
            (r'\}', Punctuation, '#pop'), 
            default(('dictionary_item', 'type')), 
        ], 
        'dictionary_item': [ 
            include('common'), 
            (_identifier, Name.Variable), 
            (r'=', Punctuation, 'default_value'), 
            (r';', Punctuation, '#pop'), 
        ], 
        'implements_rest': [ 
            include('common'), 
            (r'implements' + _keyword_suffix, Keyword), 
            (_identifier, Name.Class), 
            (r';', Punctuation, '#pop'), 
        ], 
    }