"" "
pygments.lexers.jsonnet
~~~~~~~~~~~~~~~~~~~~~~~
Lexer
for Jsonnet data templating language.
:copyright: Copyright 2006-2024 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 [
(rf
"[^{quote_mark}\\]" , String),
(r
"\\." , String.Escape),
(quote_mark, String,
'#pop'),
]
def quoted_field_name(quote_mark):
return [
(rf
'([^{quote_mark}\\]|\\.)*{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 "
version_added =
''
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' ),
],
}
Messung V0.5 C=88 H=96 G=91
¤ Dauer der Verarbeitung: 0.3 Sekunden
¤
*© Formatika GbR, Deutschland