33 lines
901 B
Python
33 lines
901 B
Python
#!/usr/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
# vi:si:et:sw=4:sts=4:ts=4
|
|
from __future__ import with_statement, print_function
|
|
|
|
import re
|
|
|
|
from .js import minify
|
|
from .utils import json
|
|
|
|
|
|
def load(f):
|
|
return loads(f.read())
|
|
|
|
def loads(source):
|
|
try:
|
|
minified = minify(source)
|
|
return json.loads(minified)
|
|
except ValueError as e:
|
|
msg = e.message if hasattr(e, 'message') else str(e)
|
|
lineno = None
|
|
colno = None
|
|
try:
|
|
m = re.search(r'line (\d+) column (\d+)', msg)
|
|
if m:
|
|
(lineno, colno) = [int(n) for n in m.groups()]
|
|
except:
|
|
pass
|
|
if lineno and colno:
|
|
s = minified.split('\n')
|
|
context = s[lineno-1][max(0, colno-30):colno+30]
|
|
msg += ' at:\n\n %s\n %s\033[1m^\033[0m' % (context, ' ' * (colno - max(0, colno-30) - 2))
|
|
raise ValueError(msg)
|