|
""" |
|
pygments.lexers.webidl |
|
~~~~~~~~~~~~~~~~~~~~~~ |
|
|
|
Lexers for Web IDL, including some extensions. |
|
|
|
:copyright: Copyright 2006-2025 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 = ( |
|
|
|
'byte', 'octet', 'boolean', |
|
r'(?:unsigned\s+)?(?:short|long(?:\s+long)?)', |
|
r'(?:unrestricted\s+)?(?:float|double)', |
|
|
|
'DOMString', 'ByteString', 'USVString', |
|
|
|
'Error', 'DOMException', |
|
|
|
'Uint8Array', 'Uint16Array', 'Uint32Array', 'Uint8ClampedArray', |
|
'Float32Array', 'Float64Array', |
|
|
|
'ArrayBuffer', 'DataView', 'Int8Array', 'Int16Array', 'Int32Array', |
|
|
|
'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. |
|
""" |
|
|
|
name = 'Web IDL' |
|
url = 'https://www.w3.org/wiki/Web_IDL' |
|
aliases = ['webidl'] |
|
filenames = ['*.webidl'] |
|
version_added = '2.6' |
|
|
|
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'), |
|
], |
|
} |
|
|