Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/pygments/lexers/thingsdb.py: 100%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

11 statements  

1""" 

2 pygments.lexers.thingsdb 

3 ~~~~~~~~~~~~~~~~~~~~~~~~ 

4 

5 Lexers for the ThingsDB 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, include, bygroups 

12from pygments.token import Comment, Keyword, Name, Number, String, Text, \ 

13 Operator, Punctuation, Whitespace 

14 

15__all__ = ['ThingsDBLexer'] 

16 

17 

18class ThingsDBLexer(RegexLexer): 

19 """ 

20 Lexer for the ThingsDB programming language. 

21 """ 

22 name = 'ThingsDB' 

23 aliases = ['ti', 'thingsdb'] 

24 filenames = ['*.ti'] 

25 url = 'https://www.thingsdb.net' 

26 version_added = '2.9' 

27 

28 tokens = { 

29 'root': [ 

30 include('expression'), 

31 ], 

32 'expression': [ 

33 include('comments'), 

34 include('whitespace'), 

35 

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), 

43 

44 # strings 

45 (r'(?:"(?:[^"]*)")+', String.Double), 

46 (r"(?:'(?:[^']*)')+", String.Single), 

47 (r"(?:`(?:[^`]*)`)+", String.Backtick), 

48 

49 # literals 

50 (r'(true|false|nil)\b', Keyword.Constant), 

51 

52 # name constants 

53 (r'(FULL|USER|GRANT|CHANGE|JOIN|RUN|QUERY|' 

54 r'DEBUG|INFO|WARNING|ERROR|CRITICAL|' 

55 r'NO_IDS|INT_MIN|INT_MAX)\b', Name.Constant), 

56 

57 # regular expressions 

58 (r'(/[^/\\]*(?:\\.[^/\\]*)*/i?)', String.Regex), 

59 

60 # name, assignments and functions 

61 include('names'), 

62 

63 (r'[(){}\[\],;]', Punctuation), 

64 (r'[+\-*/%&|<>^!~@=:?]', Operator), 

65 ], 

66 'names': [ 

67 (r'(\.)' 

68 r'(first|last|then|else|load|at|again_in|again_at|err|cancel|' 

69 r'closure|set_closure|args|set_args|owner|set_owner|equals|copy|' 

70 r'dup|assign|week|weekday|yday|zone|len|call|doc|emit|extract|' 

71 r'choice|code|format|msg|each|every|extend|extend_unique|filter|' 

72 r'find|flat|find_index|has|index_of|count|sum|is_unique|unique|' 

73 r'join|map|map_id|map_wrap|map_type|vmap|move|pop|push|fill|' 

74 r'remove|replace|restrict|restriction|shift|sort|splice|to|add|' 

75 r'one|clear|contains|ends_with|name|lower|replace|reverse|' 

76 r'starts_with|split|test|trim|trim_left|trim_right|upper|del|ren|' 

77 r'to_type|to_thing|get|id|keys|reduce|set|some|value|values|wrap|' 

78 r'unshift|unwrap|search)' 

79 r'(\()', 

80 bygroups(Name.Function, Name.Function, Punctuation), 'arguments'), 

81 (r'(alt_raise|assert|base64_encode|base64_decode|bool|bytes|' 

82 r'closure|datetime|deep|future|is_future|del_enum|del_type|room|' 

83 r'is_room|task|tasks|is_task|is_email|is_url|is_tel|is_time_zone|' 

84 r'timeit|enum|enum_info|enum_map|enums_info|err|regex|is_regex|' 

85 r'change_id|float|has_enum|has_type|int|is_array|is_ascii|' 

86 r'is_float|is_bool|is_bytes|is_closure|is_datetime|is_enum|' 

87 r'is_err|is_mpdata|is_inf|is_int|is_list|is_nan|is_nil|is_raw|' 

88 r'is_set|is_str|is_thing|is_timeval|is_tuple|is_utf8|json_dump|' 

89 r'json_load|list|log|import|export|root|mod_enum|mod_type|new|' 

90 r'new_type|now|raise|rand|range|randint|randstr|refs|rename_enum|' 

91 r'set|set_enum|set_type|str|thing|timeval|try|type|type_assert|' 

92 r'type_count|type_info|types_info|nse|wse|backup_info|' 

93 r'backups_info|backups_ok|counters|del_backup|has_backup|' 

94 r'new_backup|node_info|nodes_info|reset_counters|restart_module|' 

95 r'set_log_level|shutdown|has_module|del_module|module_info|' 

96 r'modules_info|new_module|deploy_module|rename_module|' 

97 r'refresh_module|set_module_conf|set_module_scope|' 

98 r'collections_info|del_collection|del_expired|del_node|del_token|' 

99 r'del_user|grant|has_collection|has_node|has_token|has_user|' 

100 r'new_collection|new_node|new_token|new_user|rename_collection|' 

101 r'rename_user|restore|revoke|set_password|set_time_zone|' 

102 r'set_default_deep|time_zones_info|user_info|users_info|' 

103 r'del_procedure|has_procedure|new_procedure|mod_procedure|' 

104 r'procedure_doc|procedure_info|procedures_info|rename_procedure|' 

105 r'run|assert_err|auth_err|bad_data_err|cancelled_err|' 

106 r'rename_type|forbidden_err|lookup_err|max_quota_err|node_err|' 

107 r'num_arguments_err|operation_err|overflow_err|syntax_err|' 

108 r'collection_info|type_err|value_err|zero_div_err)' 

109 r'(\()', 

110 bygroups(Name.Function, Punctuation), 

111 'arguments'), 

112 (r'(\.[A-Za-z_][0-9A-Za-z_]*)' 

113 r'(\s*)(=)', 

114 bygroups(Name.Attribute, Text, Operator)), 

115 (r'\.[A-Za-z_][0-9A-Za-z_]*', Name.Attribute), 

116 (r'([A-Za-z_][0-9A-Za-z_]*)(\s*)(=)', 

117 bygroups(Name.Variable, Text, Operator)), 

118 (r'[A-Za-z_][0-9A-Za-z_]*', Name.Variable), 

119 ], 

120 'whitespace': [ 

121 (r'\n', Whitespace), 

122 (r'\s+', Whitespace), 

123 ], 

124 'comments': [ 

125 (r'//(.*?)\n', Comment.Single), 

126 (r'/\*', Comment.Multiline, 'comment'), 

127 ], 

128 'comment': [ 

129 (r'[^*/]+', Comment.Multiline), 

130 (r'/\*', Comment.Multiline, '#push'), 

131 (r'\*/', Comment.Multiline, '#pop'), 

132 (r'[*/]', Comment.Multiline), 

133 ], 

134 'arguments': [ 

135 include('expression'), 

136 (',', Punctuation), 

137 (r'\(', Punctuation, '#push'), 

138 (r'\)', Punctuation, '#pop'), 

139 ], 

140 }