forked from extern/httpie-cli
32 lines
852 B
Python
32 lines
852 B
Python
|
import re
|
||
|
|
||
|
from pygments.lexer import bygroups, using, RegexLexer
|
||
|
from pygments.lexers.data import JsonLexer
|
||
|
from pygments.token import Token
|
||
|
|
||
|
PREFIX_TOKEN = Token.Error
|
||
|
PREFIX_REGEX = r'[^{\["]+'
|
||
|
|
||
|
|
||
|
class EnhancedJsonLexer(RegexLexer):
|
||
|
"""
|
||
|
Enhanced JSON lexer for Pygments.
|
||
|
|
||
|
It adds support for eventual data prefixing the actual JSON body.
|
||
|
|
||
|
"""
|
||
|
name = 'JSON'
|
||
|
flags = re.IGNORECASE | re.DOTALL
|
||
|
tokens = {
|
||
|
'root': [
|
||
|
# Eventual non-JSON data prefix followed by actual JSON body.
|
||
|
# FIX: data prefix + number (integer or float) are not correctly handled.
|
||
|
(
|
||
|
fr'({PREFIX_REGEX})' + r'((?:[{\["]|true|false|null).+)',
|
||
|
bygroups(PREFIX_TOKEN, using(JsonLexer))
|
||
|
),
|
||
|
# JSON body.
|
||
|
(r'.+', using(JsonLexer)),
|
||
|
],
|
||
|
}
|