Mercurial > hg > ooxml
annotate eDecoder.py @ 72:0654e37583b5
appears to read kdir.js correctly
author | Henry S. Thompson <ht@markup.co.uk> |
---|---|
date | Thu, 29 Jun 2017 17:58:06 +0100 |
parents | 54bb53434887 |
children |
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 |