""" pygments.lexers.gleam ~~~~~~~~~~~~~~~~~~~~~ Lexer for the Gleam programming language. :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. :license: BSD, see LICENSE for details. """ from pygments.lexer import RegexLexer, words, bygroups from pygments.token import Comment, Operator, Keyword, Name, String, \ Number, Punctuation, Whitespace __all__ = ['GleamLexer'] class GleamLexer(RegexLexer): """ Lexer for the Gleam programming language (version 1.0.0). """ name = 'Gleam' url = 'https://gleam.run/' filenames = ['*.gleam'] aliases = ['gleam'] mimetypes = ['text/x-gleam'] version_added = '2.19' keywords = words(( 'as', 'assert', 'auto', 'case', 'const', 'delegate', 'derive', 'echo', 'else', 'fn', 'if', 'implement', 'import', 'let', 'macro', 'opaque', 'panic', 'pub', 'test', 'todo', 'type', 'use', ), suffix=r'\b') tokens = { 'root': [ # Comments (r'(///.*?)(\n)', bygroups(String.Doc, Whitespace)), (r'(//.*?)(\n)', bygroups(Comment.Single, Whitespace)), # Keywords (keywords, Keyword), (r'([a-zA-Z_]+)(\.)', bygroups(Keyword, Punctuation)), # Punctuation (r'[()\[\]{}:;,@]+', Punctuation), (r'(#|!=|!|==|\|>|\|\||\||\->|<\-|&&|<<|>>|\.\.|\.|=)', Punctuation), # Operators (r'(<>|\+\.?|\-\.?|\*\.?|/\.?|%\.?|<=\.?|>=\.?|<\.?|>\.?|=)', Operator), # Strings (r'"(\\"|[^"])*"', String), # Identifiers (r'\b(let)(\s+)(\w+)', bygroups(Keyword, Whitespace, Name.Variable)), (r'\b(fn)(\s+)(\w+)', bygroups(Keyword, Whitespace, Name.Function)), (r'[a-zA-Z_/]\w*', Name), # numbers (r'(\d+(_\d+)*\.(?!\.)(\d+(_\d+)*)?|\.\d+(_\d+)*)([eEf][+-]?[0-9]+)?', Number.Float), (r'\d+(_\d+)*[eEf][+-]?[0-9]+', Number.Float), (r'0[xX][a-fA-F0-9]+(_[a-fA-F0-9]+)*(\.([a-fA-F0-9]+(_[a-fA-F0-9]+)*)?)?p[+-]?\d+', Number.Float), (r'0[bB][01]+(_[01]+)*', Number.Bin), (r'0[oO][0-7]+(_[0-7]+)*', Number.Oct), (r'0[xX][a-fA-F0-9]+(_[a-fA-F0-9]+)*', Number.Hex), (r'\d+(_\d+)*', Number.Integer), # Whitespace (r'\s+', Whitespace), ], }