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