Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/pygments/lexers/thingsdb.py: 100%
8 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-07 06:07 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-07 06:07 +0000
1"""
2 pygments.lexers.thingsdb
3 ~~~~~~~~~~~~~~~~~~~~~~~~
5 Lexers for the ThingsDB language.
7 :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
8 :license: BSD, see LICENSE for details.
9"""
11from pygments.lexer import RegexLexer, include, bygroups
12from pygments.token import Comment, Keyword, Name, Number, String, Text, \
13 Operator, Punctuation, Whitespace
15__all__ = ['ThingsDBLexer']
18class ThingsDBLexer(RegexLexer):
19 """
20 Lexer for the ThingsDB programming language.
22 .. versionadded:: 2.9
23 """
24 name = 'ThingsDB'
25 aliases = ['ti', 'thingsdb']
26 filenames = ['*.ti']
28 tokens = {
29 'root': [
30 include('expression'),
31 ],
32 'expression': [
33 include('comments'),
34 include('whitespace'),
36 # numbers
37 (r'[-+]?0b[01]+', Number.Bin),
38 (r'[-+]?0o[0-8]+', Number.Oct),
39 (r'([-+]?0x[0-9a-fA-F]+)', Number.Hex),
40 (r'[-+]?[0-9]+', Number.Integer),
41 (r'[-+]?((inf|nan)([^0-9A-Za-z_]|$)|[0-9]*\.[0-9]+(e[+-][0-9]+)?)',
42 Number.Float),
44 # strings
45 (r'(?:"(?:[^"]*)")+', String.Double),
46 (r"(?:'(?:[^']*)')+", String.Single),
48 # literals
49 (r'(true|false|nil)\b', Keyword.Constant),
51 # regular expressions
52 (r'(/[^/\\]*(?:\\.[^/\\]*)*/i?)', String.Regex),
54 # thing id's
55 (r'#[0-9]+', Comment.Preproc),
57 # name, assignments and functions
58 include('names'),
60 (r'[(){}\[\],;]', Punctuation),
61 (r'[+\-*/%&|<>^!~@=:?]', Operator),
62 ],
63 'names': [
64 (r'(\.)'
65 r'(add|call|contains|del|endswith|extend|filter|find|findindex|'
66 r'get|has|id|indexof|keys|len|lower|map|pop|push|remove|set|sort|'
67 r'splice|startswith|test|unwrap|upper|values|wrap)'
68 r'(\()',
69 bygroups(Name.Function, Name.Function, Punctuation), 'arguments'),
70 (r'(array|assert|assert_err|auth_err|backup_info|backups_info|'
71 r'bad_data_err|bool|closure|collection_info|collections_info|'
72 r'counters|deep|del_backup|del_collection|del_expired|del_node|'
73 r'del_procedure|del_token|del_type|del_user|err|float|'
74 r'forbidden_err|grant|int|isarray|isascii|isbool|isbytes|iserr|'
75 r'isfloat|isinf|isint|islist|isnan|isnil|israw|isset|isstr|'
76 r'isthing|istuple|isutf8|lookup_err|max_quota_err|mod_type|new|'
77 r'new_backup|new_collection|new_node|new_procedure|new_token|'
78 r'new_type|new_user|node_err|node_info|nodes_info|now|'
79 r'num_arguments_err|operation_err|overflow_err|procedure_doc|'
80 r'procedure_info|procedures_info|raise|refs|rename_collection|'
81 r'rename_user|reset_counters|return|revoke|run|set_log_level|set|'
82 r'set_quota|set_type|shutdown|str|syntax_err|thing|try|type|'
83 r'type_err|type_count|type_info|types_info|user_info|users_info|'
84 r'value_err|wse|zero_div_err)'
85 r'(\()',
86 bygroups(Name.Function, Punctuation),
87 'arguments'),
88 (r'(\.[A-Za-z_][0-9A-Za-z_]*)'
89 r'(\s*)(=)',
90 bygroups(Name.Attribute, Text, Operator)),
91 (r'\.[A-Za-z_][0-9A-Za-z_]*', Name.Attribute),
92 (r'([A-Za-z_][0-9A-Za-z_]*)(\s*)(=)',
93 bygroups(Name.Variable, Text, Operator)),
94 (r'[A-Za-z_][0-9A-Za-z_]*', Name.Variable),
95 ],
96 'whitespace': [
97 (r'\n', Whitespace),
98 (r'\s+', Whitespace),
99 ],
100 'comments': [
101 (r'//(.*?)\n', Comment.Single),
102 (r'/\*', Comment.Multiline, 'comment'),
103 ],
104 'comment': [
105 (r'[^*/]+', Comment.Multiline),
106 (r'/\*', Comment.Multiline, '#push'),
107 (r'\*/', Comment.Multiline, '#pop'),
108 (r'[*/]', Comment.Multiline),
109 ],
110 'arguments': [
111 include('expression'),
112 (',', Punctuation),
113 (r'\(', Punctuation, '#push'),
114 (r'\)', Punctuation, '#pop'),
115 ],
116 }