1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- """
- 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),
- ],
- }
|