diff options
Diffstat (limited to 'venv/lib/python3.9/site-packages/pygments/lexers/berry.py')
-rw-r--r-- | venv/lib/python3.9/site-packages/pygments/lexers/berry.py | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/venv/lib/python3.9/site-packages/pygments/lexers/berry.py b/venv/lib/python3.9/site-packages/pygments/lexers/berry.py new file mode 100644 index 00000000..e078fa16 --- /dev/null +++ b/venv/lib/python3.9/site-packages/pygments/lexers/berry.py @@ -0,0 +1,99 @@ +""" + pygments.lexers.berry + ~~~~~~~~~~~~~~~~~~~~~ + + Lexer for Berry. + + :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from pygments.lexer import RegexLexer, words, include, bygroups +from pygments.token import Comment, Whitespace, Operator, Keyword, Name, \ + String, Number, Punctuation + +__all__ = ['BerryLexer'] + + +class BerryLexer(RegexLexer): + """ + For `berry <http://github.com/berry-lang/berry>`_ source code. + + .. versionadded:: 2.12.0 + """ + name = 'Berry' + aliases = ['berry', 'be'] + filenames = ['*.be'] + mimetypes = ['text/x-berry', 'application/x-berry'] + + _name = r'\b[^\W\d]\w*' + + tokens = { + 'root': [ + include('whitespace'), + include('numbers'), + include('keywords'), + (rf'(def)(\s+)({_name})', + bygroups(Keyword.Declaration, Whitespace, Name.Function)), + (rf'\b(class)(\s+)({_name})', + bygroups(Keyword.Declaration, Whitespace, Name.Class)), + (rf'\b(import)(\s+)({_name})', + bygroups(Keyword.Namespace, Whitespace, Name.Namespace)), + include('expr') + ], + 'expr': [ + (r'[^\S\n]+', Whitespace), + (r'\.\.|[~!%^&*+=|?:<>/-]', Operator), + (r'[(){}\[\],.;]', Punctuation), + include('controls'), + include('builtins'), + include('funccall'), + include('member'), + include('name'), + include('strings') + ], + 'whitespace': [ + (r'\s+', Whitespace), + (r'#-(.|\n)*?-#', Comment.Multiline), + (r'#.*?$', Comment.Single) + ], + 'keywords': [ + (words(( + 'as', 'break', 'continue', 'import', 'static', 'self', 'super'), + suffix=r'\b'), Keyword.Reserved), + (r'(true|false|nil)\b', Keyword.Constant), + (r'(var|def)\b', Keyword.Declaration) + ], + 'controls': [ + (words(( + 'if', 'elif', 'else', 'for', 'while', 'do', 'end', 'break', + 'continue', 'return', 'try', 'except', 'raise'), + suffix=r'\b'), Keyword) + ], + 'builtins': [ + (words(( + 'assert', 'bool', 'input', 'classname', 'classof', 'number', 'real', + 'bytes', 'compile', 'map', 'list', 'int', 'isinstance', 'print', + 'range', 'str', 'super', 'module', 'size', 'issubclass', 'open', + 'file', 'type', 'call'), + suffix=r'\b'), Name.Builtin) + ], + 'numbers': [ + (r'0[xX][a-fA-F0-9]+', Number.Hex), + (r'-?\d+', Number.Integer), + (r'(-?\d+\.?|\.\d)\d*([eE][+-]?\d+)?', Number.Float) + ], + 'name': [ + (_name, Name) + ], + 'funccall': [ + (rf'{_name}(?=\s*\()', Name.Function, '#pop') + ], + 'member': [ + (rf'(?<=\.){_name}\b(?!\()', Name.Attribute, '#pop') + ], + 'strings': [ + (r'"([^\\]|\\.)*?"', String.Double, '#pop'), + (r'\'([^\\]|\\.)*?\'', String.Single, '#pop') + ] + } |