"" "
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'),
],
}
Messung V0.5 C=89 H=80 G=84
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet)
¤
*© Formatika GbR, Deutschland