summaryrefslogtreecommitdiff
path: root/pygments
diff options
context:
space:
mode:
authorBeormund <75735592+Beormund@users.noreply.github.com>2022-03-07 15:59:23 +0000
committerGitHub <noreply@github.com>2022-03-07 16:59:23 +0100
commit84549be902eb9df4af9e1e48cb1f06f9e7310357 (patch)
treea2504161e16f09146f9c8dc7a1d17ac7aa4fecbf /pygments
parent2aa1fa2a50a0a29805281a0d132ec02d1adae03d (diff)
downloadpygments-git-84549be902eb9df4af9e1e48cb1f06f9e7310357.tar.gz
Added Berry Lexer (#2070)
Diffstat (limited to 'pygments')
-rw-r--r--pygments/lexers/_mapping.py1
-rw-r--r--pygments/lexers/berry.py97
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')
+ ]
+ }