summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/pygments/lexers/wren.py
diff options
context:
space:
mode:
Diffstat (limited to 'venv/lib/python3.11/site-packages/pygments/lexers/wren.py')
-rw-r--r--venv/lib/python3.11/site-packages/pygments/lexers/wren.py99
1 files changed, 99 insertions, 0 deletions
diff --git a/venv/lib/python3.11/site-packages/pygments/lexers/wren.py b/venv/lib/python3.11/site-packages/pygments/lexers/wren.py
new file mode 100644
index 0000000..ed4ddc7
--- /dev/null
+++ b/venv/lib/python3.11/site-packages/pygments/lexers/wren.py
@@ -0,0 +1,99 @@
+"""
+ pygments.lexers.wren
+ ~~~~~~~~~~~~~~~~~~~~
+
+ Lexer for Wren.
+
+ :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+import re
+
+from pygments.lexer import include, RegexLexer, words
+from pygments.token import Whitespace, Punctuation, Keyword, Name, Comment, \
+ Operator, Number, String, Error
+
+__all__ = ['WrenLexer']
+
+class WrenLexer(RegexLexer):
+ """
+ For Wren source code, version 0.4.0.
+
+ .. versionadded:: 2.14.0
+ """
+ name = 'Wren'
+ url = 'https://wren.io'
+ aliases = ['wren']
+ filenames = ['*.wren']
+
+ flags = re.MULTILINE | re.DOTALL
+
+ tokens = {
+ 'root': [
+ # Whitespace.
+ (r'\s+', Whitespace),
+ (r'[,\\\[\]{}]', Punctuation),
+
+ # Really 'root', not '#push': in 'interpolation',
+ # parentheses inside the interpolation expression are
+ # Punctuation, not String.Interpol.
+ (r'\(', Punctuation, 'root'),
+ (r'\)', Punctuation, '#pop'),
+
+ # Keywords.
+ (words((
+ 'as', 'break', 'class', 'construct', 'continue', 'else',
+ 'for', 'foreign', 'if', 'import', 'return', 'static', 'super',
+ 'this', 'var', 'while'), prefix = r'(?<!\.)',
+ suffix = r'\b'), Keyword),
+
+ (words((
+ 'true', 'false', 'null'), prefix = r'(?<!\.)',
+ suffix = r'\b'), Keyword.Constant),
+
+ (words((
+ 'in', 'is'), prefix = r'(?<!\.)',
+ suffix = r'\b'), Operator.Word),
+
+ # Comments.
+ (r'/\*', Comment.Multiline, 'comment'), # Multiline, can nest.
+ (r'//.*?$', Comment.Single), # Single line.
+ (r'#.*?(\(.*?\))?$', Comment.Special), # Attribute or shebang.
+
+ # Names and operators.
+ (r'[!%&*+\-./:<=>?\\^|~]+', Operator),
+ (r'[a-z][a-zA-Z_0-9]*', Name),
+ (r'[A-Z][a-zA-Z_0-9]*', Name.Class),
+ (r'__[a-zA-Z_0-9]*', Name.Variable.Class),
+ (r'_[a-zA-Z_0-9]*', Name.Variable.Instance),
+
+ # Numbers.
+ (r'0x[0-9a-fA-F]+', Number.Hex),
+ (r'\d+(\.\d+)?([eE][-+]?\d+)?', Number.Float),
+
+ # Strings.
+ (r'""".*?"""', String), # Raw string
+ (r'"', String, 'string'), # Other string
+ ],
+ 'comment': [
+ (r'/\*', Comment.Multiline, '#push'),
+ (r'\*/', Comment.Multiline, '#pop'),
+ (r'([^*/]|\*(?!/)|/(?!\*))+', Comment.Multiline),
+ ],
+ 'string': [
+ (r'"', String, '#pop'),
+ (r'\\[\\%"0abefnrtv]', String.Escape), # Escape.
+ (r'\\x[a-fA-F0-9]{2}', String.Escape), # Byte escape.
+ (r'\\u[a-fA-F0-9]{4}', String.Escape), # Unicode escape.
+ (r'\\U[a-fA-F0-9]{8}', String.Escape), # Long Unicode escape.
+
+ (r'%\(', String.Interpol, 'interpolation'),
+ (r'[^\\"%]+', String), # All remaining characters.
+ ],
+ 'interpolation': [
+ # redefine closing paren to be String.Interpol
+ (r'\)', String.Interpol, '#pop'),
+ include('root'),
+ ],
+ }