#!/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) = map(int, 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)
