summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/pygments/lexers/berry.py
diff options
context:
space:
mode:
Diffstat (limited to 'venv/lib/python3.11/site-packages/pygments/lexers/berry.py')
-rw-r--r--venv/lib/python3.11/site-packages/pygments/lexers/berry.py99
1 files changed, 99 insertions, 0 deletions
diff --git a/venv/lib/python3.11/site-packages/pygments/lexers/berry.py b/venv/lib/python3.11/site-packages/pygments/lexers/berry.py
new file mode 100644
index 0000000..e078fa1
--- /dev/null
+++ b/venv/lib/python3.11/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')
+ ]
+ }