summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/pygments/lexers/wgsl.py
diff options
context:
space:
mode:
authorcyfraeviolae <cyfraeviolae>2024-04-03 03:10:44 -0400
committercyfraeviolae <cyfraeviolae>2024-04-03 03:10:44 -0400
commit6d7ba58f880be618ade07f8ea080fe8c4bf8a896 (patch)
treeb1c931051ffcebd2bd9d61d98d6233ffa289bbce /venv/lib/python3.11/site-packages/pygments/lexers/wgsl.py
parent4f884c9abc32990b4061a1bb6997b4b37e58ea0b (diff)
venv
Diffstat (limited to 'venv/lib/python3.11/site-packages/pygments/lexers/wgsl.py')
-rw-r--r--venv/lib/python3.11/site-packages/pygments/lexers/wgsl.py407
1 files changed, 407 insertions, 0 deletions
diff --git a/venv/lib/python3.11/site-packages/pygments/lexers/wgsl.py b/venv/lib/python3.11/site-packages/pygments/lexers/wgsl.py
new file mode 100644
index 0000000..f233421
--- /dev/null
+++ b/venv/lib/python3.11/site-packages/pygments/lexers/wgsl.py
@@ -0,0 +1,407 @@
+"""
+ pygments.lexers.wgsl
+ ~~~~~~~~~~~~~~~~~~~~
+
+ Lexer for the WebGPU Shading Language.
+
+ :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+from pygments.lexer import RegexLexer, include, bygroups, words, default
+from pygments.token import Comment, Operator, Keyword, Name, \
+ Number, Punctuation, Whitespace
+from pygments import unistring as uni
+
+__all__ = ['WgslLexer']
+
+LF = '\\u000a'
+VT = '\\u000b'
+FF = '\\u000c'
+CR = '\\u000d'
+NextLine = '\\u0085'
+LineSep = '\\u2028'
+ParaSep = '\\u2029'
+LineEndCodePoints = [LF,VT,FF,CR,NextLine,LineSep,ParaSep]
+NotLineEndRE = '[^' + "".join(LineEndCodePoints) + ']'
+LineEndRE = '[' + "".join(LineEndCodePoints) + ']'
+
+# https://www.w3.org/TR/WGSL/#syntax-ident_pattern_token
+ident_pattern_token = '([{}][{}]+)|[{}]'.format(uni.xid_start,uni.xid_continue,uni.xid_start)
+
+
+class WgslLexer(RegexLexer):
+ """
+ Lexer for the WebGPU Shading Language.
+
+ .. versionadded:: 2.15
+ """
+ name = 'WebGPU Shading Language'
+ url = 'https://www.w3.org/TR/WGSL/'
+ aliases = ['wgsl']
+ filenames = ['*.wgsl']
+ mimetypes = ['text/wgsl']
+
+ # https://www.w3.org/TR/WGSL/#var-and-value
+ keyword_decl = (words('var let const override'.split(),suffix=r'\b'), Keyword.Declaration)
+ # https://www.w3.org/TR/WGSL/#keyword-summary
+ keywords = (words("""
+ alias
+ break
+ case
+ const_assert
+ continue
+ continuing
+ default
+ diagnostic
+ discard
+ else
+ enable
+ false
+ fn
+ for
+ if
+ loop
+ requires
+ return
+ struct
+ switch
+ true
+ while
+ """.split(), suffix=r'\b'), Keyword)
+
+ # https://www.w3.org/TR/WGSL/#reserved-words
+ keyword_reserved = (words("""
+ NULL
+ Self
+ abstract
+ active
+ alignas
+ alignof
+ as
+ asm
+ asm_fragment
+ async
+ attribute
+ auto
+ await
+ become
+ binding_array
+ cast
+ catch
+ class
+ co_await
+ co_return
+ co_yield
+ coherent
+ column_major
+ common
+ compile
+ compile_fragment
+ concept
+ const_cast
+ consteval
+ constexpr
+ constinit
+ crate
+ debugger
+ decltype
+ delete
+ demote
+ demote_to_helper
+ do
+ dynamic_cast
+ enum
+ explicit
+ export
+ extends
+ extern
+ external
+ fallthrough
+ filter
+ final
+ finally
+ friend
+ from
+ fxgroup
+ get
+ goto
+ groupshared
+ highp
+ impl
+ implements
+ import
+ inline
+ instanceof
+ interface
+ layout
+ lowp
+ macro
+ macro_rules
+ match
+ mediump
+ meta
+ mod
+ module
+ move
+ mut
+ mutable
+ namespace
+ new
+ nil
+ noexcept
+ noinline
+ nointerpolation
+ noperspective
+ null
+ nullptr
+ of
+ operator
+ package
+ packoffset
+ partition
+ pass
+ patch
+ pixelfragment
+ precise
+ precision
+ premerge
+ priv
+ protected
+ pub
+ public
+ readonly
+ ref
+ regardless
+ register
+ reinterpret_cast
+ require
+ resource
+ restrict
+ self
+ set
+ shared
+ sizeof
+ smooth
+ snorm
+ static
+ static_assert
+ static_cast
+ std
+ subroutine
+ super
+ target
+ template
+ this
+ thread_local
+ throw
+ trait
+ try
+ type
+ typedef
+ typeid
+ typename
+ typeof
+ union
+ unless
+ unorm
+ unsafe
+ unsized
+ use
+ using
+ varying
+ virtual
+ volatile
+ wgsl
+ where
+ with
+ writeonly
+ yield
+ """.split(), suffix=r'\b'), Keyword.Reserved)
+
+ # https://www.w3.org/TR/WGSL/#predeclared-enumerants
+ predeclared_enums = (words("""
+ read write read_write
+ function private workgroup uniform storage
+ perspective linear flat
+ center centroid sample
+ vertex_index instance_index position front_facing frag_depth
+ local_invocation_id local_invocation_index
+ global_invocation_id workgroup_id num_workgroups
+ sample_index sample_mask
+ rgba8unorm
+ rgba8snorm
+ rgba8uint
+ rgba8sint
+ rgba16uint
+ rgba16sint
+ rgba16float
+ r32uint
+ r32sint
+ r32float
+ rg32uint
+ rg32sint
+ rg32float
+ rgba32uint
+ rgba32sint
+ rgba32float
+ bgra8unorm
+ """.split(), suffix=r'\b'), Name.Builtin)
+
+ # https://www.w3.org/TR/WGSL/#predeclared-types
+ predeclared_types = (words("""
+ bool
+ f16
+ f32
+ i32
+ sampler sampler_comparison
+ texture_depth_2d
+ texture_depth_2d_array
+ texture_depth_cube
+ texture_depth_cube_array
+ texture_depth_multisampled_2d
+ texture_external
+ texture_external
+ u32
+ """.split(), suffix=r'\b'), Name.Builtin)
+
+ # https://www.w3.org/TR/WGSL/#predeclared-types
+ predeclared_type_generators = (words("""
+ array
+ atomic
+ mat2x2
+ mat2x3
+ mat2x4
+ mat3x2
+ mat3x3
+ mat3x4
+ mat4x2
+ mat4x3
+ mat4x4
+ ptr
+ texture_1d
+ texture_2d
+ texture_2d_array
+ texture_3d
+ texture_cube
+ texture_cube_array
+ texture_multisampled_2d
+ texture_storage_1d
+ texture_storage_2d
+ texture_storage_2d_array
+ texture_storage_3d
+ vec2
+ vec3
+ vec4
+ """.split(), suffix=r'\b'), Name.Builtin)
+
+ # Predeclared type aliases for vectors
+ # https://www.w3.org/TR/WGSL/#vector-types
+ predeclared_type_alias_vectors = (words("""
+ vec2i vec3i vec4i
+ vec2u vec3u vec4u
+ vec2f vec3f vec4f
+ vec2h vec3h vec4h
+ """.split(), suffix=r'\b'), Name.Builtin)
+
+ # Predeclared type aliases for matrices
+ # https://www.w3.org/TR/WGSL/#matrix-types
+ predeclared_type_alias_matrices = (words("""
+ mat2x2f mat2x3f mat2x4f
+ mat3x2f mat3x3f mat3x4f
+ mat4x2f mat4x3f mat4x4f
+ mat2x2h mat2x3h mat2x4h
+ mat3x2h mat3x3h mat3x4h
+ mat4x2h mat4x3h mat4x4h
+ """.split(), suffix=r'\b'), Name.Builtin)
+
+ tokens = {
+ 'blankspace': [
+ # https://www.w3.org/TR/WGSL/#blankspace
+ (r'[\u0020\u0009\u000a\u000b\u000c\u000d\u0085\u200e\u200f\u2028\u2029]+', Whitespace),
+ ],
+ 'comments': [
+ # Line ending comments
+ # Match up CR/LF pair first.
+ (r'//{}*{}{}'.format(NotLineEndRE,CR,LF), Comment.Single),
+ (r'//{}*{}'.format(NotLineEndRE,LineEndRE), Comment.Single),
+ (r'/\*', Comment.Multiline, 'block_comment'),
+ ],
+ 'attribute': [
+ include('blankspace'),
+ include('comments'),
+ (ident_pattern_token, Name.Decorator,'#pop'),
+ default('#pop'),
+ ],
+ 'root': [
+ include('blankspace'),
+ include('comments'),
+
+ # Attributes.
+ # https://www.w3.org/TR/WGSL/#attributes
+ # Mark the '@' and the attribute name as a decorator.
+ (r'@', Name.Decorator, 'attribute'),
+
+ # Keywords
+ (r'(true|false)\b', Keyword.Constant),
+ keyword_decl,
+ keywords,
+ keyword_reserved,
+
+ # Predeclared
+ predeclared_enums,
+ predeclared_types,
+ predeclared_type_generators,
+ predeclared_type_alias_vectors,
+ predeclared_type_alias_matrices,
+
+ # Decimal float literals
+ # https://www.w3.org/TR/WGSL/#syntax-decimal_float_literal
+ # 0, with type-specifying suffix.
+ (r'0[fh]', Number.Float),
+ # Other decimal integer, with type-specifying suffix.
+ (r'[1-9][0-9]*[fh]', Number.Float),
+ # Has decimal point, at least one digit after decimal.
+ (r'[0-9]*\.[0-9]+([eE][+-]?[0-9]+)?[fh]?', Number.Float),
+ # Has decimal point, at least one digit before decimal.
+ (r'[0-9]+\.[0-9]*([eE][+-]?[0-9]+)?[fh]?', Number.Float),
+ # Has at least one digit, and has an exponent.
+ (r'[0-9]+[eE][+-]?[0-9]+[fh]?', Number.Float),
+
+ # Hex float literals
+ # https://www.w3.org/TR/WGSL/#syntax-hex_float_literal
+ (r'0[xX][0-9a-fA-F]*\.[0-9a-fA-F]+([pP][+-]?[0-9]+[fh]?)?', Number.Float),
+ (r'0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*([pP][+-]?[0-9]+[fh]?)?', Number.Float),
+ (r'0[xX][0-9a-fA-F]+[pP][+-]?[0-9]+[fh]?', Number.Float),
+
+ # Hexadecimal integer literals
+ # https://www.w3.org/TR/WGSL/#syntax-hex_int_literal
+ (r'0[xX][0-9a-fA-F]+[iu]?', Number.Hex),
+ # Decimal integer literals
+ # https://www.w3.org/TR/WGSL/#syntax-decimal_int_literal
+ # We need two rules here because 01 is not valid.
+ (r'[1-9][0-9]*[iu]?', Number.Integer),
+ (r'0[iu]?', Number.Integer), # Must match last.
+
+ # Operators and Punctuation
+ (r'[{}()\[\],\.;:]', Punctuation),
+ (r'->', Punctuation), # Return-type arrow
+ (r'[+\-*/%&|<>^!~=]', Operator),
+
+ # TODO: Treat context-depedendent names specially
+ # https://www.w3.org/TR/WGSL/#context-dependent-name
+
+ # Identifiers
+ (ident_pattern_token, Name),
+
+ # TODO: templates start and end tokens.
+ # https://www.w3.org/TR/WGSL/#template-lists-sec
+ ],
+ 'block_comment': [
+ # https://www.w3.org/TR/WGSL/#block-comment
+ (r'[^*/]+', Comment.Multiline),
+ (r'/\*', Comment.Multiline, '#push'),
+ (r'\*/', Comment.Multiline, '#pop'),
+ (r'[*/]', Comment.Multiline),
+ ],
+ }