annotate eDecoder.py @ 74:7827e686be75 default tip

refactoring again...
author Henry S. Thompson <ht@markup.co.uk>
date Wed, 05 Jul 2017 18:26:27 +0100
parents 0654e37583b5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
71
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
1 '''Extend JSON to support atoms as properties and class names'''
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
2 from json import decoder
72
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
3 from json.decoder import JSONDecoder, JSONObject, JSONArray,\
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
4 _CONSTANTS, WHITESPACE, WHITESPACE_STR, FLAGS, errmsg
71
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
5
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
6 import json, re
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
7
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
8 JSONObject_orig=JSONObject
72
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
9 JSONArray_orig=JSONArray
71
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
10
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
11 class eDecoder(JSONDecoder):
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
12 def __init__(self, encoding=None, object_hook=None, parse_float=None,
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
13 parse_int=None, parse_constant=None, strict=True,
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
14 object_pairs_hook=None):
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
15
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
16 self.parse_object = eJSONObject
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
17 super(eDecoder,self).__init__(encoding, object_hook, parse_float,
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
18 parse_int, e_parse_constant, strict,
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
19 object_pairs_hook)
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
20
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
21 def e_parse_constant(istr):
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
22 print('constant: %s'%istr)
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
23 return _CONSTANTS[istr]
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
24
72
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
25 IDENT=re.compile(r'[$]?[A-Z]+[$]?[0-9]+([:][$]?[A-Z]+[$]?[0-9]+)|[a-zA-Z0-9_.-]+', FLAGS)
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
26
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
27 def eJSONArray(s_and_end, scan_once, _w=WHITESPACE.match, _ws=WHITESPACE_STR):
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
28 s, end = s_and_end
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
29 values = []
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
30 nextchar = s[end:end + 1]
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
31 if nextchar in _ws:
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
32 end = _w(s, end + 1).end()
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
33 nextchar = s[end:end + 1]
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
34 # Look-ahead for trivial empty array
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
35 if nextchar == ']':
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
36 return values, end + 1
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
37 _append = values.append
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
38 while True:
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
39 try:
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
40 value, end = scan_once(s, end)
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
41 except StopIteration:
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
42 # Two possible causes: string empty, or no ident here
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
43 # Either way, the match will fail and the (original) value error is correct
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
44 isId = IDENT.match(s,end)
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
45 if isId:
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
46 value=isId.group()
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
47 end=isId.end()
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
48 else:
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
49 raise ValueError(errmsg("Expecting object", s, end))
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
50 _append(value)
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
51 nextchar = s[end:end + 1]
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
52 if nextchar in _ws:
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
53 end = _w(s, end + 1).end()
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
54 nextchar = s[end:end + 1]
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
55 end += 1
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
56 if nextchar == ']':
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
57 break
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
58 elif nextchar != ',':
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
59 raise ValueError(errmsg("Expecting ',' delimiter", s, end))
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
60 try:
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
61 if s[end] in _ws:
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
62 end += 1
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
63 if s[end] in _ws:
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
64 end = _w(s, end + 1).end()
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
65 except IndexError:
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
66 pass
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
67
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
68 return values, end
71
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
69
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
70 def eJSONObject(s_and_end, encoding, strict, scan_once, object_hook,
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
71 object_pairs_hook, _w=WHITESPACE.match, _ws=WHITESPACE_STR):
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
72 s, end = s_and_end
72
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
73 pairs = []
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
74 pairs_append = pairs.append
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
75 # Use a slice to prevent IndexError from being raised, the following
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
76 # check will raise a more specific ValueError if the string is empty
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
77 nextchar = s[end:end + 1]
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
78 # Normally we expect nextchar == '"'
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
79 if nextchar != '"':
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
80 if nextchar in _ws:
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
81 end = _w(s, end).end()
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
82 nextchar = s[end:end + 1]
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
83 # Trivial empty object
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
84 if nextchar == '}':
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
85 if object_pairs_hook is not None:
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
86 result = object_pairs_hook(pairs)
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
87 return result, end + 1
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
88 pairs = {}
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
89 if object_hook is not None:
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
90 pairs = object_hook(pairs)
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
91 return pairs, end + 1
71
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
92 while True:
72
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
93 if nextchar=='"':
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
94 key, end = scanstring(s, end, encoding, strict)
71
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
95 else:
72
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
96 isId = IDENT.match(s,end)
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
97 if isId:
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
98 key=isId.group()
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
99 end=isId.end()
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
100 else:
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
101 raise ValueError(errmsg(
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
102 "Expecting property name with or w/o double quotes", s, end))
71
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
103 # To skip some function call overhead we optimize the fast paths where
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
104 # the JSON key separator is ": " or just ":".
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
105 if s[end:end + 1] != ':':
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
106 end = _w(s, end).end()
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
107 if s[end:end + 1] != ':':
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
108 raise ValueError(errmsg("Expecting ':' delimiter", s, end))
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
109 end += 1
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
110
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
111 try:
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
112 if s[end] in _ws:
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
113 end += 1
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
114 if s[end] in _ws:
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
115 end = _w(s, end + 1).end()
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
116 except IndexError:
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
117 pass
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
118
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
119 try:
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
120 value, end = scan_once(s, end)
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
121 except StopIteration:
72
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
122 # Two possible causes: string empty, or no ident here
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
123 # Either way, the match will fail and the (original) value error is correct
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
124 isId = IDENT.match(s,end)
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
125 if isId:
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
126 value=isId.group()
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
127 end=isId.end()
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
128 else:
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
129 raise ValueError(errmsg("Expecting object", s, end))
71
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
130 pairs_append((key, value))
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
131
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
132 try:
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
133 nextchar = s[end]
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
134 if nextchar in _ws:
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
135 end = _w(s, end + 1).end()
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
136 nextchar = s[end]
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
137 except IndexError:
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
138 nextchar = ''
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
139 end += 1
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
140
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
141 if nextchar == '}':
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
142 break
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
143 elif nextchar != ',':
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
144 raise ValueError(errmsg("Expecting ',' delimiter", s, end - 1))
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
145
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
146 try:
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
147 nextchar = s[end]
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
148 if nextchar in _ws:
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
149 end += 1
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
150 nextchar = s[end]
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
151 if nextchar in _ws:
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
152 end = _w(s, end + 1).end()
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
153 nextchar = s[end]
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
154 except IndexError:
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
155 nextchar = ''
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
156
72
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
157 if nextchar=='"':
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
158 end += 1
71
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
159 if object_pairs_hook is not None:
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
160 result = object_pairs_hook(pairs)
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
161 return result, end
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
162 pairs = dict(pairs)
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
163 if object_hook is not None:
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
164 pairs = object_hook(pairs)
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
165 return pairs, end
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
166
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
167
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
168 json.scanner.make_scanner=json.scanner.py_make_scanner
54bb53434887 begin work on decoder that allows identifiers as keys and values
Henry S. Thompson <ht@markup.co.uk>
parents:
diff changeset
169 json.decoder.JSONObject=eJSONObject
72
0654e37583b5 appears to read kdir.js correctly
Henry S. Thompson <ht@markup.co.uk>
parents: 71
diff changeset
170 json.decoder.JSONArray=eJSONArray