1""" 
    2    pygments.lexers.jmespath 
    3    ~~~~~~~~~~~~~~~~~~~~~~~~ 
    4 
    5    Lexers for the JMESPath language 
    6 
    7    :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. 
    8    :license: BSD, see LICENSE for details. 
    9""" 
    10 
    11from pygments.lexer import RegexLexer, bygroups, include 
    12from pygments.token import String, Punctuation, Whitespace, Name, Operator, \ 
    13    Number, Literal, Keyword 
    14 
    15__all__ = ['JMESPathLexer'] 
    16 
    17 
    18class JMESPathLexer(RegexLexer): 
    19    """ 
    20    For JMESPath queries. 
    21    """ 
    22    name = 'JMESPath' 
    23    url = 'https://jmespath.org' 
    24    filenames = ['*.jp'] 
    25    aliases = ['jmespath', 'jp'] 
    26    version_added = '' 
    27 
    28    tokens = { 
    29        'string': [ 
    30            (r"'(\\(.|\n)|[^'\\])*'", String), 
    31        ], 
    32        'punctuation': [ 
    33            (r'(\[\?|[\.\*\[\],:\(\)\{\}\|])', Punctuation), 
    34        ], 
    35        'ws': [ 
    36            (r" |\t|\n|\r", Whitespace) 
    37        ], 
    38        "dq-identifier": [ 
    39            (r'[^\\"]+', Name.Variable), 
    40            (r'\\"', Name.Variable), 
    41            (r'.', Punctuation, '#pop'), 
    42        ], 
    43        'identifier': [ 
    44            (r'(&)?(")', bygroups(Name.Variable, Punctuation), 'dq-identifier'), 
    45            (r'(")?(&?[A-Za-z][A-Za-z0-9_-]*)(")?', bygroups(Punctuation, Name.Variable, Punctuation)), 
    46        ], 
    47        'root': [ 
    48            include('ws'), 
    49            include('string'), 
    50            (r'(==|!=|<=|>=|<|>|&&|\|\||!)', Operator), 
    51            include('punctuation'), 
    52            (r'@', Name.Variable.Global), 
    53            (r'(&?[A-Za-z][A-Za-z0-9_]*)(\()', bygroups(Name.Function, Punctuation)), 
    54            (r'(&)(\()', bygroups(Name.Variable, Punctuation)), 
    55            include('identifier'), 
    56            (r'-?\d+', Number), 
    57            (r'`', Literal, 'literal'), 
    58        ], 
    59        'literal': [ 
    60            include('ws'), 
    61            include('string'), 
    62            include('punctuation'), 
    63            (r'(false|true|null)\b', Keyword.Constant), 
    64            include('identifier'), 
    65            (r'-?\d+\.?\d*([eE][-+]\d+)?', Number), 
    66            (r'\\`', Literal), 
    67            (r'`', Literal, '#pop'), 
    68        ] 
    69    }