1"""
2 pygments.lexers.rell
3 ~~~~~~~~~~~~~~~~~~~~
4
5 Lexers for the Rell language.
6
7 :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
8 :license: BSD, see LICENSE for details.
9"""
10
11from pygments.lexer import RegexLexer, bygroups, default, words
12from pygments.token import Comment, Keyword, Name, String, Number, \
13 Punctuation, Whitespace
14
15__all__ = ['RellLexer']
16
17
18class RellLexer(RegexLexer):
19 """
20 A Lexer for Rell.
21 """
22 name = 'Rell'
23 url = 'https://docs.chromia.com/rell/rell-intro'
24 aliases = ['rell']
25 filenames = ['*.rell']
26 mimetypes = ['text/x-rell']
27 version_added = '2.20'
28
29 ident = r'[a-zA-Z_][a-zA-Z0-9_]*'
30
31 tokens = {
32 'root': [
33 (words((
34 'big_integer', 'boolean', 'byte_array', 'decimal', 'gtv',
35 'integer', 'json', 'list', 'map', 'mutable', 'set', 'text',
36 'virtual'), suffix=r'\b'),
37 Keyword.Type),
38 (r'(false|true|null)\b', Keyword.Constant),
39 (r'(entity|enum|namespace|object|struct)\b', Keyword.Declaration),
40 (r'(function|operation|query)\b', Keyword.Declaration, 'function'),
41 (words((
42 'abstract', 'and', 'break', 'continue', 'create', 'delete',
43 'else', 'for', 'if', 'import', 'in', 'index', 'key', 'limit',
44 'module', 'not', 'offset', 'or', 'override', 'return', 'update',
45 'val', 'var', 'when', 'while'), suffix=r'\b'),
46 Keyword.Reserved),
47 (r'//.*?$', Comment.Single),
48 (r'/\*(.|\n|\r)*?\*/', Comment.Multiline),
49 (r'"(\\\\|\\"|[^"])*"', String.Double),
50 (r'\'(\\\\|\\\'|[^\\\'])*\'', String.Single),
51 (r'-?[0-9]*\.[0-9]+([eE][+-][0-9]+)?', Number.Float),
52 (r'-?[0-9]+([eE][+-][0-9]+|[lL])?', Number.Integer),
53 (r'x(\'[a-fA-F0-9]*\'|"[a-fA-F0-9]*")', String.Binary),
54 (r'(\.)([ \n\t\r]*)(' + ident + ')',
55 bygroups(Punctuation, Whitespace, Name.Attribute)),
56 (r'[{}():;,]+', Punctuation),
57 (r'[ \n\t\r]+', Whitespace),
58 (r'@[a-zA-Z_][a-zA-Z0-9_]*', Name.Decorator),
59 (r'[~^*!%&\[\]<>|+=/?\-@\$]', Punctuation.Marker),
60 (ident, Name),
61 (r'(\.)+', Punctuation),
62 ],
63 'function': [
64 (r'[ \n\t\r]+', Whitespace),
65 (ident, Name.Function, '#pop'),
66 default('#pop'),
67 ],
68 }