You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
4.1 KiB
116 lines
4.1 KiB
""" |
|
pygments.lexers.thingsdb |
|
~~~~~~~~~~~~~~~~~~~~~~~~ |
|
|
|
Lexers for the ThingsDB language. |
|
|
|
:copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS. |
|
:license: BSD, see LICENSE for details. |
|
""" |
|
|
|
from pygments.lexer import RegexLexer, include, bygroups |
|
from pygments.token import Comment, Keyword, Name, Number, String, Text, \ |
|
Operator, Punctuation, Whitespace |
|
|
|
__all__ = ['ThingsDBLexer'] |
|
|
|
|
|
class ThingsDBLexer(RegexLexer): |
|
""" |
|
Lexer for the ThingsDB programming language. |
|
|
|
.. versionadded:: 2.9 |
|
""" |
|
name = 'ThingsDB' |
|
aliases = ['ti', 'thingsdb'] |
|
filenames = ['*.ti'] |
|
|
|
tokens = { |
|
'root': [ |
|
include('expression'), |
|
], |
|
'expression': [ |
|
include('comments'), |
|
include('whitespace'), |
|
|
|
# numbers |
|
(r'[-+]?0b[01]+', Number.Bin), |
|
(r'[-+]?0o[0-8]+', Number.Oct), |
|
(r'([-+]?0x[0-9a-fA-F]+)', Number.Hex), |
|
(r'[-+]?[0-9]+', Number.Integer), |
|
(r'[-+]?((inf|nan)([^0-9A-Za-z_]|$)|[0-9]*\.[0-9]+(e[+-][0-9]+)?)', |
|
Number.Float), |
|
|
|
# strings |
|
(r'(?:"(?:[^"]*)")+', String.Double), |
|
(r"(?:'(?:[^']*)')+", String.Single), |
|
|
|
# literals |
|
(r'(true|false|nil)\b', Keyword.Constant), |
|
|
|
# regular expressions |
|
(r'(/[^/\\]*(?:\\.[^/\\]*)*/i?)', String.Regex), |
|
|
|
# thing id's |
|
(r'#[0-9]+', Comment.Preproc), |
|
|
|
# name, assignments and functions |
|
include('names'), |
|
|
|
(r'[(){}\[\],;]', Punctuation), |
|
(r'[+\-*/%&|<>^!~@=:?]', Operator), |
|
], |
|
'names': [ |
|
(r'(\.)' |
|
r'(add|call|contains|del|endswith|extend|filter|find|findindex|' |
|
r'get|has|id|indexof|keys|len|lower|map|pop|push|remove|set|sort|' |
|
r'splice|startswith|test|unwrap|upper|values|wrap)' |
|
r'(\()', |
|
bygroups(Name.Function, Name.Function, Punctuation), 'arguments'), |
|
(r'(array|assert|assert_err|auth_err|backup_info|backups_info|' |
|
r'bad_data_err|bool|closure|collection_info|collections_info|' |
|
r'counters|deep|del_backup|del_collection|del_expired|del_node|' |
|
r'del_procedure|del_token|del_type|del_user|err|float|' |
|
r'forbidden_err|grant|int|isarray|isascii|isbool|isbytes|iserr|' |
|
r'isfloat|isinf|isint|islist|isnan|isnil|israw|isset|isstr|' |
|
r'isthing|istuple|isutf8|lookup_err|max_quota_err|mod_type|new|' |
|
r'new_backup|new_collection|new_node|new_procedure|new_token|' |
|
r'new_type|new_user|node_err|node_info|nodes_info|now|' |
|
r'num_arguments_err|operation_err|overflow_err|procedure_doc|' |
|
r'procedure_info|procedures_info|raise|refs|rename_collection|' |
|
r'rename_user|reset_counters|return|revoke|run|set_log_level|set|' |
|
r'set_quota|set_type|shutdown|str|syntax_err|thing|try|type|' |
|
r'type_err|type_count|type_info|types_info|user_info|users_info|' |
|
r'value_err|wse|zero_div_err)' |
|
r'(\()', |
|
bygroups(Name.Function, Punctuation), |
|
'arguments'), |
|
(r'(\.[A-Za-z_][0-9A-Za-z_]*)' |
|
r'(\s*)(=)', |
|
bygroups(Name.Attribute, Text, Operator)), |
|
(r'\.[A-Za-z_][0-9A-Za-z_]*', Name.Attribute), |
|
(r'([A-Za-z_][0-9A-Za-z_]*)(\s*)(=)', |
|
bygroups(Name.Variable, Text, Operator)), |
|
(r'[A-Za-z_][0-9A-Za-z_]*', Name.Variable), |
|
], |
|
'whitespace': [ |
|
(r'\n', Whitespace), |
|
(r'\s+', Whitespace), |
|
], |
|
'comments': [ |
|
(r'//(.*?)\n', Comment.Single), |
|
(r'/\*', Comment.Multiline, 'comment'), |
|
], |
|
'comment': [ |
|
(r'[^*/]+', Comment.Multiline), |
|
(r'/\*', Comment.Multiline, '#push'), |
|
(r'\*/', Comment.Multiline, '#pop'), |
|
(r'[*/]', Comment.Multiline), |
|
], |
|
'arguments': [ |
|
include('expression'), |
|
(',', Punctuation), |
|
(r'\(', Punctuation, '#push'), |
|
(r'\)', Punctuation, '#pop'), |
|
], |
|
}
|
|
|