Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/pygments/lexers/elm.py: 100%
14 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-07 06:16 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-07 06:16 +0000
1"""
2 pygments.lexers.elm
3 ~~~~~~~~~~~~~~~~~~~
5 Lexer for the Elm programming language.
7 :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
8 :license: BSD, see LICENSE for details.
9"""
11from pygments.lexer import RegexLexer, words, include, bygroups
12from pygments.token import Comment, Keyword, Name, Number, Punctuation, \
13 String, Whitespace
15__all__ = ['ElmLexer']
18class ElmLexer(RegexLexer):
19 """
20 For Elm source code.
22 .. versionadded:: 2.1
23 """
25 name = 'Elm'
26 url = 'http://elm-lang.org/'
27 aliases = ['elm']
28 filenames = ['*.elm']
29 mimetypes = ['text/x-elm']
31 validName = r'[a-z_][a-zA-Z0-9_\']*'
33 specialName = r'^main '
35 builtinOps = (
36 '~', '||', '|>', '|', '`', '^', '\\', '\'', '>>', '>=', '>', '==',
37 '=', '<~', '<|', '<=', '<<', '<-', '<', '::', ':', '/=', '//', '/',
38 '..', '.', '->', '-', '++', '+', '*', '&&', '%',
39 )
41 reservedWords = words((
42 'alias', 'as', 'case', 'else', 'if', 'import', 'in',
43 'let', 'module', 'of', 'port', 'then', 'type', 'where',
44 ), suffix=r'\b')
46 tokens = {
47 'root': [
49 # Comments
50 (r'\{-', Comment.Multiline, 'comment'),
51 (r'--.*', Comment.Single),
53 # Whitespace
54 (r'\s+', Whitespace),
56 # Strings
57 (r'"', String, 'doublequote'),
59 # Modules
60 (r'^(\s*)(module)(\s*)', bygroups(Whitespace, Keyword.Namespace,
61 Whitespace), 'imports'),
63 # Imports
64 (r'^(\s*)(import)(\s*)', bygroups(Whitespace, Keyword.Namespace,
65 Whitespace), 'imports'),
67 # Shaders
68 (r'\[glsl\|.*', Name.Entity, 'shader'),
70 # Keywords
71 (reservedWords, Keyword.Reserved),
73 # Types
74 (r'[A-Z][a-zA-Z0-9_]*', Keyword.Type),
76 # Main
77 (specialName, Keyword.Reserved),
79 # Prefix Operators
80 (words((builtinOps), prefix=r'\(', suffix=r'\)'), Name.Function),
82 # Infix Operators
83 (words(builtinOps), Name.Function),
85 # Numbers
86 include('numbers'),
88 # Variable Names
89 (validName, Name.Variable),
91 # Parens
92 (r'[,()\[\]{}]', Punctuation),
94 ],
96 'comment': [
97 (r'-(?!\})', Comment.Multiline),
98 (r'\{-', Comment.Multiline, 'comment'),
99 (r'[^-}]', Comment.Multiline),
100 (r'-\}', Comment.Multiline, '#pop'),
101 ],
103 'doublequote': [
104 (r'\\u[0-9a-fA-F]{4}', String.Escape),
105 (r'\\[nrfvb\\"]', String.Escape),
106 (r'[^"]', String),
107 (r'"', String, '#pop'),
108 ],
110 'imports': [
111 (r'\w+(\.\w+)*', Name.Class, '#pop'),
112 ],
114 'numbers': [
115 (r'_?\d+\.(?=\d+)', Number.Float),
116 (r'_?\d+', Number.Integer),
117 ],
119 'shader': [
120 (r'\|(?!\])', Name.Entity),
121 (r'\|\]', Name.Entity, '#pop'),
122 (r'(.*)(\n)', bygroups(Name.Entity, Whitespace)),
123 ],
124 }