| """ | |
| 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') | |
| ] | |
| } | |