"" "
pygments.lexers.webidl
~~~~~~~~~~~~~~~~~~~~~~
Lexers for Web IDL, including some extensions.
:copyright: Copyright 2006-2024 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.
"" "
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'),
],
}
quality 61%
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet)
¤
*© Formatika GbR, Deutschland