aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/Pygments/py3/pygments/lexers/boa.py
blob: 7e000e5933ad6e3793a4bf993fba09c3ba86ba87 (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
""" 
    pygments.lexers.boa 
    ~~~~~~~~~~~~~~~~~~~ 
 
    Lexers for the Boa language. 
 
    :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details. 
""" 
 
import re 
 
from pygments.lexer import RegexLexer, words 
from pygments.token import String, Comment, Keyword, Name, Number, Text, \ 
    Operator, Punctuation, Whitespace
 
__all__ = ['BoaLexer'] 
 
line_re = re.compile('.*?\n') 
 
 
class BoaLexer(RegexLexer): 
    """ 
    Lexer for the `Boa <http://boa.cs.iastate.edu/docs/>`_ language. 
 
    .. versionadded:: 2.4 
    """ 
    name = 'Boa' 
    aliases = ['boa'] 
    filenames = ['*.boa'] 
 
    reserved = words( 
        ('input', 'output', 'of', 'weight', 'before', 'after', 'stop', 
         'ifall', 'foreach', 'exists', 'function', 'break', 'switch', 'case', 
         'visitor', 'default', 'return', 'visit', 'while', 'if', 'else'), 
        suffix=r'\b', prefix=r'\b') 
    keywords = words( 
        ('bottom', 'collection', 'maximum', 'mean', 'minimum', 'set', 'sum', 
         'top', 'string', 'int', 'bool', 'float', 'time', 'false', 'true', 
         'array', 'map', 'stack', 'enum', 'type'), suffix=r'\b', prefix=r'\b') 
    classes = words( 
        ('Project', 'ForgeKind', 'CodeRepository', 'Revision', 'RepositoryKind', 
         'ChangedFile', 'FileKind', 'ASTRoot', 'Namespace', 'Declaration', 'Type', 
         'Method', 'Variable', 'Statement', 'Expression', 'Modifier', 
         'StatementKind', 'ExpressionKind', 'ModifierKind', 'Visibility', 
         'TypeKind', 'Person', 'ChangeKind'), 
        suffix=r'\b', prefix=r'\b') 
    operators = ('->', ':=', ':', '=', '<<', '!', '++', '||', 
                 '&&', '+', '-', '*', ">", "<") 
    string_sep = ('`', '\"') 
    built_in_functions = words( 
        ( 
            # Array functions 
            'new', 'sort', 
            # Date & Time functions 
            'yearof', 'dayofyear', 'hourof', 'minuteof', 'secondof', 'now', 
            'addday', 'addmonth', 'addweek', 'addyear', 'dayofmonth', 'dayofweek', 
            'dayofyear', 'formattime', 'trunctoday', 'trunctohour', 'trunctominute', 
            'trunctomonth', 'trunctosecond', 'trunctoyear', 
            # Map functions 
            'clear', 'haskey', 'keys', 'lookup', 'remove', 'values', 
            # Math functions 
            'abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 
            'ceil', 'cos', 'cosh', 'exp', 'floor', 'highbit', 'isfinite', 'isinf', 
            'isnan', 'isnormal', 'log', 'log10', 'max', 'min', 'nrand', 'pow', 
            'rand', 'round', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 
            # Other functions 
            'def', 'hash', 'len', 
            # Set functions 
            'add', 'contains', 'remove', 
            # String functions 
            'format', 'lowercase', 'match', 'matchposns', 'matchstrs', 'regex', 
            'split', 'splitall', 'splitn', 'strfind', 'strreplace', 'strrfind', 
            'substring', 'trim', 'uppercase', 
            # Type Conversion functions 
            'bool', 'float', 'int', 'string', 'time', 
            # Domain-Specific functions 
            'getast', 'getsnapshot', 'hasfiletype', 'isfixingrevision', 'iskind', 
            'isliteral', 
        ), 
        prefix=r'\b', 
        suffix=r'\(') 
 
    tokens = { 
        'root': [ 
            (r'#.*?$', Comment.Single), 
            (r'/\*.*?\*/', Comment.Multiline), 
            (reserved, Keyword.Reserved), 
            (built_in_functions, Name.Function), 
            (keywords, Keyword.Type), 
            (classes, Name.Classes), 
            (words(operators), Operator), 
            (r'[][(),;{}\\.]', Punctuation), 
            (r'"(\\\\|\\[^\\]|[^"\\])*"', String.Double),
            (r"`(\\\\|\\[^\\]|[^`\\])*`", String.Backtick),
            (words(string_sep), String.Delimiter),
            (r'[a-zA-Z_]+', Name.Variable), 
            (r'[0-9]+', Number.Integer), 
            (r'\s+', Whitespace),  # Whitespace
        ] 
    }