aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/Pygments/py2/pygments/lexers/elm.py
blob: a6df964d27ee467c39f84851f060d560c00426fb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# -*- coding: utf-8 -*- 
""" 
    pygments.lexers.elm 
    ~~~~~~~~~~~~~~~~~~~ 
 
    Lexer for the Elm programming language. 
 
    :copyright: Copyright 2006-2019 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details. 
""" 
 
from pygments.lexer import RegexLexer, words, include 
from pygments.token import Comment, Keyword, Name, Number, Punctuation, String, Text 
 
__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+', Text), 
 
            # Strings 
            (r'"', String, 'doublequote'), 
 
            # Modules 
            (r'^\s*module\s*', Keyword.Namespace, 'imports'), 
 
            # Imports 
            (r'^\s*import\s*', Keyword.Namespace, 'imports'), 
 
            # Shaders 
            (r'\[glsl\|.*', Name.Entity, 'shader'), 
 
            # Keywords 
            (reservedWords, Keyword.Reserved), 
 
            # Types 
            (r'[A-Z]\w*', 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', Name.Entity), 
        ], 
    }