summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/pygments/lexers/jsonnet.py
diff options
context:
space:
mode:
authorcyfraeviolae <cyfraeviolae>2024-04-03 03:10:44 -0400
committercyfraeviolae <cyfraeviolae>2024-04-03 03:10:44 -0400
commit6d7ba58f880be618ade07f8ea080fe8c4bf8a896 (patch)
treeb1c931051ffcebd2bd9d61d98d6233ffa289bbce /venv/lib/python3.11/site-packages/pygments/lexers/jsonnet.py
parent4f884c9abc32990b4061a1bb6997b4b37e58ea0b (diff)
venv
Diffstat (limited to 'venv/lib/python3.11/site-packages/pygments/lexers/jsonnet.py')
-rw-r--r--venv/lib/python3.11/site-packages/pygments/lexers/jsonnet.py168
1 files changed, 168 insertions, 0 deletions
diff --git a/venv/lib/python3.11/site-packages/pygments/lexers/jsonnet.py b/venv/lib/python3.11/site-packages/pygments/lexers/jsonnet.py
new file mode 100644
index 0000000..3905f88
--- /dev/null
+++ b/venv/lib/python3.11/site-packages/pygments/lexers/jsonnet.py
@@ -0,0 +1,168 @@
+"""
+ pygments.lexers.jsonnet
+ ~~~~~~~~~~~~~~~~~~~~~~~
+
+ Lexer for Jsonnet data templating language.
+
+ :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+from pygments.lexer import include, RegexLexer, words
+from pygments.token import Comment, Keyword, Name, Number, Operator, \
+ Punctuation, String, Text, Whitespace
+
+__all__ = ['JsonnetLexer']
+
+jsonnet_token = r'[^\W\d]\w*'
+jsonnet_function_token = jsonnet_token + r'(?=\()'
+
+
+def string_rules(quote_mark):
+ return [
+ (r"[^{}\\]".format(quote_mark), String),
+ (r"\\.", String.Escape),
+ (quote_mark, String, '#pop'),
+ ]
+
+
+def quoted_field_name(quote_mark):
+ return [
+ (r'([^{quote}\\]|\\.)*{quote}'.format(quote=quote_mark),
+ Name.Variable, 'field_separator')
+ ]
+
+
+class JsonnetLexer(RegexLexer):
+ """Lexer for Jsonnet source code."""
+
+ name = 'Jsonnet'
+ aliases = ['jsonnet']
+ filenames = ['*.jsonnet', '*.libsonnet']
+ url = "https://jsonnet.org"
+ tokens = {
+ # Not used by itself
+ '_comments': [
+ (r'(//|#).*\n', Comment.Single),
+ (r'/\*\*([^/]|/(?!\*))*\*/', String.Doc),
+ (r'/\*([^/]|/(?!\*))*\*/', Comment),
+ ],
+ 'root': [
+ include('_comments'),
+ (r"@'.*'", String),
+ (r'@".*"', String),
+ (r"'", String, 'singlestring'),
+ (r'"', String, 'doublestring'),
+ (r'\|\|\|(.|\n)*\|\|\|', String),
+ # Jsonnet has no integers, only an IEEE754 64-bit float
+ (r'[+-]?[0-9]+(.[0-9])?', Number.Float),
+ # Omit : despite spec because it appears to be used as a field
+ # separator
+ (r'[!$~+\-&|^=<>*/%]', Operator),
+ (r'\{', Punctuation, 'object'),
+ (r'\[', Punctuation, 'array'),
+ (r'local\b', Keyword, ('local_name')),
+ (r'assert\b', Keyword, 'assert'),
+ (words([
+ 'assert', 'else', 'error', 'false', 'for', 'if', 'import',
+ 'importstr', 'in', 'null', 'tailstrict', 'then', 'self',
+ 'super', 'true',
+ ], suffix=r'\b'), Keyword),
+ (r'\s+', Whitespace),
+ (r'function(?=\()', Keyword, 'function_params'),
+ (r'std\.' + jsonnet_function_token, Name.Builtin, 'function_args'),
+ (jsonnet_function_token, Name.Function, 'function_args'),
+ (jsonnet_token, Name.Variable),
+ (r'[\.()]', Punctuation),
+ ],
+ 'singlestring': string_rules("'"),
+ 'doublestring': string_rules('"'),
+ 'array': [
+ (r',', Punctuation),
+ (r'\]', Punctuation, '#pop'),
+ include('root'),
+ ],
+ 'local_name': [
+ (jsonnet_function_token, Name.Function, 'function_params'),
+ (jsonnet_token, Name.Variable),
+ (r'\s+', Whitespace),
+ ('(?==)', Whitespace, ('#pop', 'local_value')),
+ ],
+ 'local_value': [
+ (r'=', Operator),
+ (r';', Punctuation, '#pop'),
+ include('root'),
+ ],
+ 'assert': [
+ (r':', Punctuation),
+ (r';', Punctuation, '#pop'),
+ include('root'),
+ ],
+ 'function_params': [
+ (jsonnet_token, Name.Variable),
+ (r'\(', Punctuation),
+ (r'\)', Punctuation, '#pop'),
+ (r',', Punctuation),
+ (r'\s+', Whitespace),
+ (r'=', Operator, 'function_param_default'),
+ ],
+ 'function_args': [
+ (r'\(', Punctuation),
+ (r'\)', Punctuation, '#pop'),
+ (r',', Punctuation),
+ (r'\s+', Whitespace),
+ include('root'),
+ ],
+ 'object': [
+ (r'\s+', Whitespace),
+ (r'local\b', Keyword, 'object_local_name'),
+ (r'assert\b', Keyword, 'object_assert'),
+ (r'\[', Operator, 'field_name_expr'),
+ (fr'(?={jsonnet_token})', Text, 'field_name'),
+ (r'\}', Punctuation, '#pop'),
+ (r'"', Name.Variable, 'double_field_name'),
+ (r"'", Name.Variable, 'single_field_name'),
+ include('_comments'),
+ ],
+ 'field_name': [
+ (jsonnet_function_token, Name.Function,
+ ('field_separator', 'function_params')
+ ),
+ (jsonnet_token, Name.Variable, 'field_separator'),
+ ],
+ 'double_field_name': quoted_field_name('"'),
+ 'single_field_name': quoted_field_name("'"),
+ 'field_name_expr': [
+ (r'\]', Operator, 'field_separator'),
+ include('root'),
+ ],
+ 'function_param_default': [
+ (r'(?=[,\)])', Whitespace, '#pop'),
+ include('root'),
+ ],
+ 'field_separator': [
+ (r'\s+', Whitespace),
+ (r'\+?::?:?', Punctuation, ('#pop', '#pop', 'field_value')),
+ include('_comments'),
+ ],
+ 'field_value': [
+ (r',', Punctuation, '#pop'),
+ (r'\}', Punctuation, '#pop:2'),
+ include('root'),
+ ],
+ 'object_assert': [
+ (r':', Punctuation),
+ (r',', Punctuation, '#pop'),
+ include('root'),
+ ],
+ 'object_local_name': [
+ (jsonnet_token, Name.Variable, ('#pop', 'object_local_value')),
+ (r'\s+', Whitespace),
+ ],
+ 'object_local_value': [
+ (r'=', Operator),
+ (r',', Punctuation, '#pop'),
+ (r'\}', Punctuation, '#pop:2'),
+ include('root'),
+ ],
+ }