aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/Pygments/py3/pygments/lexers/arrow.py
blob: ef7a1a5bebb9508a63c335375fe8c8dd9a3c0fc6 (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
""" 
    pygments.lexers.arrow 
    ~~~~~~~~~~~~~~~~~~~~~ 
 
    Lexer for Arrow. 
 
    :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS. 
    :license: BSD, see LICENSE for details. 
""" 
 
from pygments.lexer import RegexLexer, bygroups, default, include 
from pygments.token import Text, Operator, Keyword, Punctuation, Name, \ 
    String, Number, Whitespace
 
__all__ = ['ArrowLexer'] 
 
TYPES = r'\b(int|bool|char)((?:\[\])*)(?=\s+)' 
IDENT = r'([a-zA-Z_][a-zA-Z0-9_]*)' 
DECL = TYPES + r'(\s+)' + IDENT 
 
 
class ArrowLexer(RegexLexer): 
    """ 
    Lexer for Arrow: https://pypi.org/project/py-arrow-lang/ 
 
    .. versionadded:: 2.7 
    """ 
 
    name = 'Arrow' 
    aliases = ['arrow'] 
    filenames = ['*.arw'] 
 
    tokens = { 
        'root': [ 
            (r'\s+', Whitespace),
            (r'^[|\s]+', Punctuation), 
            include('blocks'), 
            include('statements'), 
            include('expressions'), 
        ], 
        'blocks': [ 
            (r'(function)(\n+)(/-->)(\s*)' + 
             DECL +  # 4 groups 
             r'(\()', bygroups( 
                 Keyword.Reserved, Whitespace, Punctuation,
                 Whitespace, Keyword.Type, Punctuation, Whitespace,
                 Name.Function, Punctuation 
             ), 'fparams'), 
            (r'/-->$|\\-->$|/--<|\\--<|\^', Punctuation), 
        ], 
        'statements': [ 
            (DECL, bygroups(Keyword.Type, Punctuation, Text, Name.Variable)), 
            (r'\[', Punctuation, 'index'), 
            (r'=', Operator), 
            (r'require|main', Keyword.Reserved), 
            (r'print', Keyword.Reserved, 'print'), 
        ], 
        'expressions': [ 
            (r'\s+', Whitespace),
            (r'[0-9]+', Number.Integer), 
            (r'true|false', Keyword.Constant), 
            (r"'", String.Char, 'char'), 
            (r'"', String.Double, 'string'), 
            (r'\{', Punctuation, 'array'), 
            (r'==|!=|<|>|\+|-|\*|/|%', Operator), 
            (r'and|or|not|length', Operator.Word), 
            (r'(input)(\s+)(int|char\[\])', bygroups( 
                Keyword.Reserved, Whitespace, Keyword.Type
            )), 
            (IDENT + r'(\()', bygroups( 
                Name.Function, Punctuation 
            ), 'fargs'), 
            (IDENT, Name.Variable), 
            (r'\[', Punctuation, 'index'), 
            (r'\(', Punctuation, 'expressions'), 
            (r'\)', Punctuation, '#pop'), 
        ], 
        'print': [ 
            include('expressions'), 
            (r',', Punctuation), 
            default('#pop'), 
        ], 
        'fparams': [ 
            (DECL, bygroups(Keyword.Type, Punctuation, Whitespace, Name.Variable)),
            (r',', Punctuation), 
            (r'\)', Punctuation, '#pop'), 
        ], 
        'escape': [ 
            (r'\\(["\\/abfnrtv]|[0-9]{1,3}|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})', 
             String.Escape), 
        ], 
        'char': [ 
            (r"'", String.Char, '#pop'), 
            include('escape'), 
            (r"[^'\\]", String.Char), 
        ], 
        'string': [ 
            (r'"', String.Double, '#pop'), 
            include('escape'), 
            (r'[^"\\]+', String.Double), 
        ], 
        'array': [ 
            include('expressions'), 
            (r'\}', Punctuation, '#pop'), 
            (r',', Punctuation), 
        ], 
        'fargs': [ 
            include('expressions'), 
            (r'\)', Punctuation, '#pop'), 
            (r',', Punctuation), 
        ], 
        'index': [ 
            include('expressions'), 
            (r'\]', Punctuation, '#pop'), 
        ], 
    }