diff options
| author | Beormund <75735592+Beormund@users.noreply.github.com> | 2022-03-07 15:59:23 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-03-07 16:59:23 +0100 |
| commit | 84549be902eb9df4af9e1e48cb1f06f9e7310357 (patch) | |
| tree | a2504161e16f09146f9c8dc7a1d17ac7aa4fecbf /pygments | |
| parent | 2aa1fa2a50a0a29805281a0d132ec02d1adae03d (diff) | |
| download | pygments-git-84549be902eb9df4af9e1e48cb1f06f9e7310357.tar.gz | |
Added Berry Lexer (#2070)
Diffstat (limited to 'pygments')
| -rw-r--r-- | pygments/lexers/_mapping.py | 1 | ||||
| -rw-r--r-- | pygments/lexers/berry.py | 97 |
2 files changed, 98 insertions, 0 deletions
diff --git a/pygments/lexers/_mapping.py b/pygments/lexers/_mapping.py index 42e5667f..1aa2d146 100644 --- a/pygments/lexers/_mapping.py +++ b/pygments/lexers/_mapping.py @@ -59,6 +59,7 @@ LEXERS = { 'BatchLexer': ('pygments.lexers.shell', 'Batchfile', ('batch', 'bat', 'dosbatch', 'winbatch'), ('*.bat', '*.cmd'), ('application/x-dos-batch',)), 'BddLexer': ('pygments.lexers.bdd', 'Bdd', ('bdd',), ('*.feature',), ('text/x-bdd',)), 'BefungeLexer': ('pygments.lexers.esoteric', 'Befunge', ('befunge',), ('*.befunge',), ('application/x-befunge',)), + 'BerryLexer': ('pygments.lexers.berry', 'Berry', ('berry', 'be'), ('*.be',), ('text/x-berry', 'application/x-berry')), 'BibTeXLexer': ('pygments.lexers.bibtex', 'BibTeX', ('bibtex', 'bib'), ('*.bib',), ('text/x-bibtex',)), 'BlitzBasicLexer': ('pygments.lexers.basic', 'BlitzBasic', ('blitzbasic', 'b3d', 'bplus'), ('*.bb', '*.decls'), ('text/x-bb',)), 'BlitzMaxLexer': ('pygments.lexers.basic', 'BlitzMax', ('blitzmax', 'bmax'), ('*.bmx',), ('text/x-bmx',)), diff --git a/pygments/lexers/berry.py b/pygments/lexers/berry.py new file mode 100644 index 00000000..d7525e98 --- /dev/null +++ b/pygments/lexers/berry.py @@ -0,0 +1,97 @@ +""" + pygments.lexers.berry + ~~~~~~~~~~~~~~~~~~~~~ + + Lexer for Berry. + + :copyright: Copyright 2006-2022 by the Pygments team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import re +from pygments.lexer import RegexLexer, words, default, include, bygroups +from pygments.token import Text, Comment, Whitespace, Operator, Keyword, Name, String, Number, Punctuation + +__all__ = ['BerryLexer'] + +line_re = re.compile('.*?\n') + +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') + ] + } |
