Viewing file: elm.py (3.08 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
""" pygments.lexers.elm ~~~~~~~~~~~~~~~~~~~
Lexer for the Elm programming language.
:copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS. :license: BSD, see LICENSE for details. """
from pygments.lexer import RegexLexer, words, include, bygroups from pygments.token import Comment, Keyword, Name, Number, Punctuation, String, \ Text, Whitespace
__all__ = ['ElmLexer']
class ElmLexer(RegexLexer): """ For `Elm <http://elm-lang.org/>`_ source code.
.. versionadded:: 2.1 """
name = 'Elm' aliases = ['elm'] filenames = ['*.elm'] mimetypes = ['text/x-elm']
validName = r'[a-z_][a-zA-Z0-9_\']*'
specialName = r'^main '
builtinOps = ( '~', '||', '|>', '|', '`', '^', '\\', '\'', '>>', '>=', '>', '==', '=', '<~', '<|', '<=', '<<', '<-', '<', '::', ':', '/=', '//', '/', '..', '.', '->', '-', '++', '+', '*', '&&', '%', )
reservedWords = words(( 'alias', 'as', 'case', 'else', 'if', 'import', 'in', 'let', 'module', 'of', 'port', 'then', 'type', 'where', ), suffix=r'\b')
tokens = { 'root': [
# Comments (r'\{-', Comment.Multiline, 'comment'), (r'--.*', Comment.Single),
# Whitespace (r'\s+', Whitespace),
# Strings (r'"', String, 'doublequote'),
# Modules (r'^(\s*)(module)(\s*)', bygroups(Whitespace, Keyword.Namespace, Whitespace), 'imports'),
# Imports (r'^(\s*)(import)(\s*)', bygroups(Whitespace, Keyword.Namespace, Whitespace), 'imports'),
# Shaders (r'\[glsl\|.*', Name.Entity, 'shader'),
# Keywords (reservedWords, Keyword.Reserved),
# Types (r'[A-Z][a-zA-Z0-9_]*', Keyword.Type),
# Main (specialName, Keyword.Reserved),
# Prefix Operators (words((builtinOps), prefix=r'\(', suffix=r'\)'), Name.Function),
# Infix Operators (words(builtinOps), Name.Function),
# Numbers include('numbers'),
# Variable Names (validName, Name.Variable),
# Parens (r'[,()\[\]{}]', Punctuation),
],
'comment': [ (r'-(?!\})', Comment.Multiline), (r'\{-', Comment.Multiline, 'comment'), (r'[^-}]', Comment.Multiline), (r'-\}', Comment.Multiline, '#pop'), ],
'doublequote': [ (r'\\u[0-9a-fA-F]{4}', String.Escape), (r'\\[nrfvb\\"]', String.Escape), (r'[^"]', String), (r'"', String, '#pop'), ],
'imports': [ (r'\w+(\.\w+)*', Name.Class, '#pop'), ],
'numbers': [ (r'_?\d+\.(?=\d+)', Number.Float), (r'_?\d+', Number.Integer), ],
'shader': [ (r'\|(?!\])', Name.Entity), (r'\|\]', Name.Entity, '#pop'), (r'(.*)(\n)', bygroups(Name.Entity, Whitespace)), ], }
|