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