home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.5)
-
- import re
- import sys
- import struct
- from simplejson.scanner import make_scanner
-
- try:
- from simplejson._speedups import scanstring as c_scanstring
- except ImportError:
- c_scanstring = None
-
- __all__ = [
- 'JSONDecoder']
- FLAGS = re.VERBOSE | re.MULTILINE | re.DOTALL
-
- def _floatconstants():
- _BYTES = '7FF80000000000007FF0000000000000'.decode('hex')
- if sys.byteorder != 'big':
- _BYTES = _BYTES[:8][::-1] + _BYTES[8:][::-1]
-
- (nan, inf) = struct.unpack('dd', _BYTES)
- return (nan, inf, -inf)
-
- (NaN, PosInf, NegInf) = _floatconstants()
-
- def linecol(doc, pos):
- lineno = doc.count('\n', 0, pos) + 1
- if lineno == 1:
- colno = pos
- else:
- colno = pos - doc.rindex('\n', 0, pos)
- return (lineno, colno)
-
-
- def errmsg(msg, doc, pos, end = None):
- (lineno, colno) = linecol(doc, pos)
- if end is None:
- return '%s: line %d column %d (char %d)' % (msg, lineno, colno, pos)
-
- (endlineno, endcolno) = linecol(doc, end)
- return '%s: line %d column %d - line %d column %d (char %d - %d)' % (msg, lineno, colno, endlineno, endcolno, pos, end)
-
- _CONSTANTS = {
- '-Infinity': NegInf,
- 'Infinity': PosInf,
- 'NaN': NaN }
- STRINGCHUNK = re.compile('(.*?)(["\\\\\\x00-\\x1f])', FLAGS)
- BACKSLASH = {
- '"': u'"',
- '\\': u'\\',
- '/': u'/',
- 'b': u'\x08',
- 'f': u'\x0c',
- 'n': u'\n',
- 'r': u'\r',
- 't': u'\t' }
- DEFAULT_ENCODING = 'utf-8'
-
- def py_scanstring(s, end, encoding = None, strict = True, _b = BACKSLASH, _m = STRINGCHUNK.match):
- if encoding is None:
- encoding = DEFAULT_ENCODING
-
- chunks = []
- _append = chunks.append
- begin = end - 1
- while None:
- chunk = _m(s, end)
- if chunk is None:
- raise ValueError(errmsg('Unterminated string starting at', s, begin))
-
- end = chunk.end()
- (content, terminator) = chunk.groups()
- if content:
- if not isinstance(content, unicode):
- content = unicode(content, encoding)
-
- _append(content)
-
- if terminator == '"':
- break
- elif terminator != '\\':
- if strict:
- raise ValueError(errmsg('Invalid control character %r at', s, end))
- else:
- _append(terminator)
-
-
- try:
- esc = s[end]
- except IndexError:
- raise ValueError(errmsg('Unterminated string starting at', s, begin))
-
- if esc != 'u':
-
- try:
- m = _b[esc]
- except KeyError:
- raise ValueError(errmsg('Invalid \\escape: %r' % (esc,), s, end))
-
- end += 1
- else:
- esc = s[end + 1:end + 5]
- next_end = end + 5
- msg = 'Invalid \\uXXXX escape'
-
- try:
- if len(esc) != 4:
- raise ValueError
-
- uni = int(esc, 16)
- if uni <= uni:
- pass
- elif uni <= 56319 and sys.maxunicode > 65535:
- msg = 'Invalid \\uXXXX\\uXXXX surrogate pair'
- if not s[end + 5:end + 7] == '\\u':
- raise ValueError
-
- esc2 = s[end + 7:end + 11]
- if len(esc2) != 4:
- raise ValueError
-
- uni2 = int(esc2, 16)
- uni = 65536 + (uni - 55296 << 10 | uni2 - 56320)
- next_end += 6
-
- m = unichr(uni)
- except ValueError:
- raise ValueError(errmsg(msg, s, end))
-
- end = next_end
- continue
- return (u''.join(chunks), end)
-
- if not c_scanstring:
- pass
- scanstring = py_scanstring
- WHITESPACE = re.compile('[ \\t\\n\\r]*', FLAGS)
- WHITESPACE_STR = ' \t\n\r'
-
- def JSONObject(.0, encoding, strict, scan_once, object_hook, _w = WHITESPACE.match, _ws = WHITESPACE_STR):
- (s, end) = .0
- pairs = { }
- nextchar = s[end:end + 1]
- if nextchar != '"':
- if nextchar in _ws:
- end = _w(s, end).end()
- nextchar = s[end:end + 1]
-
- if nextchar == '}':
- return (pairs, end + 1)
- elif nextchar != '"':
- raise ValueError(errmsg('Expecting property name', s, end))
-
-
- end += 1
- while True:
- (key, end) = scanstring(s, end, encoding, strict)
- if s[end:end + 1] != ':':
- end = _w(s, end).end()
- if s[end:end + 1] != ':':
- raise ValueError(errmsg('Expecting : delimiter', s, end))
-
-
- end += 1
-
- try:
- if s[end] in _ws:
- end += 1
- if s[end] in _ws:
- end = _w(s, end + 1).end()
-
- except IndexError:
- pass
-
-
- try:
- (value, end) = scan_once(s, end)
- except StopIteration:
- raise ValueError(errmsg('Expecting object', s, end))
-
- pairs[key] = value
-
- try:
- nextchar = s[end]
- if nextchar in _ws:
- end = _w(s, end + 1).end()
- nextchar = s[end]
- except IndexError:
- nextchar = ''
-
- end += 1
- if nextchar == '}':
- break
- elif nextchar != ',':
- raise ValueError(errmsg('Expecting , delimiter', s, end - 1))
-
-
- try:
- nextchar = s[end]
- if nextchar in _ws:
- end += 1
- nextchar = s[end]
- if nextchar in _ws:
- end = _w(s, end + 1).end()
- nextchar = s[end]
-
- except IndexError:
- nextchar = ''
-
- end += 1
- if nextchar != '"':
- raise ValueError(errmsg('Expecting property name', s, end - 1))
- continue
- if object_hook is not None:
- pairs = object_hook(pairs)
-
- return (pairs, end)
-
-
- def JSONArray(.0, scan_once, _w = WHITESPACE.match, _ws = WHITESPACE_STR):
- (s, end) = .0
- values = []
- nextchar = s[end:end + 1]
- if nextchar in _ws:
- end = _w(s, end + 1).end()
- nextchar = s[end:end + 1]
-
- if nextchar == ']':
- return (values, end + 1)
-
- _append = values.append
- while True:
-
- try:
- (value, end) = scan_once(s, end)
- except StopIteration:
- raise ValueError(errmsg('Expecting object', s, end))
-
- _append(value)
- nextchar = s[end:end + 1]
- if nextchar in _ws:
- end = _w(s, end + 1).end()
- nextchar = s[end:end + 1]
-
- end += 1
- if nextchar == ']':
- break
- elif nextchar != ',':
- raise ValueError(errmsg('Expecting , delimiter', s, end))
-
-
- try:
- if s[end] in _ws:
- end += 1
- if s[end] in _ws:
- end = _w(s, end + 1).end()
-
- continue
- except IndexError:
- continue
-
-
- None<EXCEPTION MATCH>IndexError
- return (values, end)
-
-
- class JSONDecoder(object):
-
- def __init__(self, encoding = None, object_hook = None, parse_float = None, parse_int = None, parse_constant = None, strict = True):
- self.encoding = encoding
- self.object_hook = object_hook
- if not parse_float:
- pass
- self.parse_float = float
- if not parse_int:
- pass
- self.parse_int = int
- if not parse_constant:
- pass
- self.parse_constant = _CONSTANTS.__getitem__
- self.strict = strict
- self.parse_object = JSONObject
- self.parse_array = JSONArray
- self.parse_string = scanstring
- self.scan_once = make_scanner(self)
-
-
- def decode(self, s, _w = WHITESPACE.match):
- (obj, end) = self.raw_decode(s, idx = _w(s, 0).end())
- end = _w(s, end).end()
- if end != len(s):
- raise ValueError(errmsg('Extra data', s, end, len(s)))
-
- return obj
-
-
- def raw_decode(self, s, idx = 0):
-
- try:
- (obj, end) = self.scan_once(s, idx)
- except StopIteration:
- raise ValueError('No JSON object could be decoded')
-
- return (obj, end)
-
-
-