| author | Raphael Velt <raph.velt@gmail.com> |
| Thu, 02 Feb 2012 14:45:30 +0100 | |
| changeset 491 | ae626ab315b9 |
| parent 266 | bb7a2f8202b9 |
| permissions | -rwxr-xr-x |
|
266
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
1 |
/* |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
2 |
http://www.JSON.org/json_parse_state.js |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
3 |
2011-02-23 |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
4 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
5 |
Public Domain. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
6 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
7 |
NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
8 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
9 |
This file creates a json_parse function. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
10 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
11 |
json_parse(text, reviver) |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
12 |
This method parses a JSON text to produce an object or array. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
13 |
It can throw a SyntaxError exception. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
14 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
15 |
The optional reviver parameter is a function that can filter and |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
16 |
transform the results. It receives each of the keys and values, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
17 |
and its return value is used instead of the original value. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
18 |
If it returns what it received, then the structure is not modified. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
19 |
If it returns undefined then the member is deleted. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
20 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
21 |
Example: |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
22 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
23 |
// Parse the text. Values that look like ISO date strings will |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
24 |
// be converted to Date objects. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
25 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
26 |
myData = json_parse(text, function (key, value) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
27 |
var a; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
28 |
if (typeof value === 'string') { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
29 |
a = |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
30 |
/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
31 |
if (a) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
32 |
return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
33 |
+a[5], +a[6])); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
34 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
35 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
36 |
return value; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
37 |
}); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
38 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
39 |
This is a reference implementation. You are free to copy, modify, or |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
40 |
redistribute. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
41 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
42 |
This code should be minified before deployment. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
43 |
See http://javascript.crockford.com/jsmin.html |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
44 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
45 |
USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
46 |
NOT CONTROL. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
47 |
*/ |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
48 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
49 |
/*jslint regexp: false*/ |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
50 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
51 |
/*members "", "\"", ",", "\/", ":", "[", "\\", "]", acomma, avalue, b, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
52 |
call, colon, container, exec, f, false, firstavalue, firstokey, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
53 |
fromCharCode, go, hasOwnProperty, key, length, n, null, ocomma, okey, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
54 |
ovalue, pop, prototype, push, r, replace, slice, state, t, test, true, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
55 |
value, "{", "}" |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
56 |
*/ |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
57 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
58 |
var json_parse = (function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
59 |
"use strict"; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
60 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
61 |
// This function creates a JSON parse function that uses a state machine rather |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
62 |
// than the dangerous eval function to parse a JSON text. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
63 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
64 |
var state, // The state of the parser, one of |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
65 |
// 'go' The starting state |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
66 |
// 'ok' The final, accepting state |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
67 |
// 'firstokey' Ready for the first key of the object or |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
68 |
// the closing of an empty object |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
69 |
// 'okey' Ready for the next key of the object |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
70 |
// 'colon' Ready for the colon |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
71 |
// 'ovalue' Ready for the value half of a key/value pair |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
72 |
// 'ocomma' Ready for a comma or closing } |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
73 |
// 'firstavalue' Ready for the first value of an array or |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
74 |
// an empty array |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
75 |
// 'avalue' Ready for the next value of an array |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
76 |
// 'acomma' Ready for a comma or closing ] |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
77 |
stack, // The stack, for controlling nesting. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
78 |
container, // The current container object or array |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
79 |
key, // The current key |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
80 |
value, // The current value |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
81 |
escapes = { // Escapement translation table |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
82 |
'\\': '\\', |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
83 |
'"': '"', |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
84 |
'/': '/', |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
85 |
't': '\t', |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
86 |
'n': '\n', |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
87 |
'r': '\r', |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
88 |
'f': '\f', |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
89 |
'b': '\b' |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
90 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
91 |
string = { // The actions for string tokens |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
92 |
go: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
93 |
state = 'ok'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
94 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
95 |
firstokey: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
96 |
key = value; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
97 |
state = 'colon'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
98 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
99 |
okey: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
100 |
key = value; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
101 |
state = 'colon'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
102 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
103 |
ovalue: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
104 |
state = 'ocomma'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
105 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
106 |
firstavalue: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
107 |
state = 'acomma'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
108 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
109 |
avalue: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
110 |
state = 'acomma'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
111 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
112 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
113 |
number = { // The actions for number tokens |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
114 |
go: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
115 |
state = 'ok'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
116 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
117 |
ovalue: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
118 |
state = 'ocomma'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
119 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
120 |
firstavalue: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
121 |
state = 'acomma'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
122 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
123 |
avalue: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
124 |
state = 'acomma'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
125 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
126 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
127 |
action = { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
128 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
129 |
// The action table describes the behavior of the machine. It contains an |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
130 |
// object for each token. Each object contains a method that is called when |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
131 |
// a token is matched in a state. An object will lack a method for illegal |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
132 |
// states. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
133 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
134 |
'{': { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
135 |
go: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
136 |
stack.push({state: 'ok'}); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
137 |
container = {}; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
138 |
state = 'firstokey'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
139 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
140 |
ovalue: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
141 |
stack.push({container: container, state: 'ocomma', key: key}); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
142 |
container = {}; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
143 |
state = 'firstokey'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
144 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
145 |
firstavalue: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
146 |
stack.push({container: container, state: 'acomma'}); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
147 |
container = {}; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
148 |
state = 'firstokey'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
149 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
150 |
avalue: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
151 |
stack.push({container: container, state: 'acomma'}); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
152 |
container = {}; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
153 |
state = 'firstokey'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
154 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
155 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
156 |
'}': { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
157 |
firstokey: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
158 |
var pop = stack.pop(); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
159 |
value = container; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
160 |
container = pop.container; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
161 |
key = pop.key; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
162 |
state = pop.state; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
163 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
164 |
ocomma: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
165 |
var pop = stack.pop(); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
166 |
container[key] = value; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
167 |
value = container; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
168 |
container = pop.container; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
169 |
key = pop.key; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
170 |
state = pop.state; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
171 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
172 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
173 |
'[': { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
174 |
go: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
175 |
stack.push({state: 'ok'}); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
176 |
container = []; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
177 |
state = 'firstavalue'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
178 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
179 |
ovalue: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
180 |
stack.push({container: container, state: 'ocomma', key: key}); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
181 |
container = []; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
182 |
state = 'firstavalue'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
183 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
184 |
firstavalue: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
185 |
stack.push({container: container, state: 'acomma'}); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
186 |
container = []; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
187 |
state = 'firstavalue'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
188 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
189 |
avalue: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
190 |
stack.push({container: container, state: 'acomma'}); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
191 |
container = []; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
192 |
state = 'firstavalue'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
193 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
194 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
195 |
']': { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
196 |
firstavalue: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
197 |
var pop = stack.pop(); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
198 |
value = container; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
199 |
container = pop.container; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
200 |
key = pop.key; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
201 |
state = pop.state; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
202 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
203 |
acomma: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
204 |
var pop = stack.pop(); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
205 |
container.push(value); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
206 |
value = container; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
207 |
container = pop.container; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
208 |
key = pop.key; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
209 |
state = pop.state; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
210 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
211 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
212 |
':': { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
213 |
colon: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
214 |
if (Object.hasOwnProperty.call(container, key)) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
215 |
throw new SyntaxError('Duplicate key "' + key + '"'); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
216 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
217 |
state = 'ovalue'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
218 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
219 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
220 |
',': { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
221 |
ocomma: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
222 |
container[key] = value; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
223 |
state = 'okey'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
224 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
225 |
acomma: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
226 |
container.push(value); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
227 |
state = 'avalue'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
228 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
229 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
230 |
'true': { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
231 |
go: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
232 |
value = true; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
233 |
state = 'ok'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
234 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
235 |
ovalue: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
236 |
value = true; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
237 |
state = 'ocomma'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
238 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
239 |
firstavalue: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
240 |
value = true; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
241 |
state = 'acomma'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
242 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
243 |
avalue: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
244 |
value = true; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
245 |
state = 'acomma'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
246 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
247 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
248 |
'false': { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
249 |
go: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
250 |
value = false; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
251 |
state = 'ok'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
252 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
253 |
ovalue: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
254 |
value = false; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
255 |
state = 'ocomma'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
256 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
257 |
firstavalue: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
258 |
value = false; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
259 |
state = 'acomma'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
260 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
261 |
avalue: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
262 |
value = false; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
263 |
state = 'acomma'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
264 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
265 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
266 |
'null': { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
267 |
go: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
268 |
value = null; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
269 |
state = 'ok'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
270 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
271 |
ovalue: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
272 |
value = null; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
273 |
state = 'ocomma'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
274 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
275 |
firstavalue: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
276 |
value = null; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
277 |
state = 'acomma'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
278 |
}, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
279 |
avalue: function () { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
280 |
value = null; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
281 |
state = 'acomma'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
282 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
283 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
284 |
}; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
285 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
286 |
function debackslashify(text) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
287 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
288 |
// Remove and replace any backslash escapement. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
289 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
290 |
return text.replace(/\\(?:u(.{4})|([^u]))/g, function (a, b, c) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
291 |
return b ? String.fromCharCode(parseInt(b, 16)) : escapes[c]; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
292 |
}); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
293 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
294 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
295 |
return function (source, reviver) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
296 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
297 |
// A regular expression is used to extract tokens from the JSON text. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
298 |
// The extraction process is cautious. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
299 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
300 |
var r, // The result of the exec method. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
301 |
tx = /^[\x20\t\n\r]*(?:([,:\[\]{}]|true|false|null)|(-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)|"((?:[^\r\n\t\\\"]|\\(?:["\\\/trnfb]|u[0-9a-fA-F]{4}))*)")/; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
302 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
303 |
// Set the starting state. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
304 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
305 |
state = 'go'; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
306 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
307 |
// The stack records the container, key, and state for each object or array |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
308 |
// that contains another object or array while processing nested structures. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
309 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
310 |
stack = []; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
311 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
312 |
// If any error occurs, we will catch it and ultimately throw a syntax error. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
313 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
314 |
try { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
315 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
316 |
// For each token... |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
317 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
318 |
for (;;) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
319 |
r = tx.exec(source); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
320 |
if (!r) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
321 |
break; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
322 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
323 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
324 |
// r is the result array from matching the tokenizing regular expression. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
325 |
// r[0] contains everything that matched, including any initial whitespace. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
326 |
// r[1] contains any punctuation that was matched, or true, false, or null. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
327 |
// r[2] contains a matched number, still in string form. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
328 |
// r[3] contains a matched string, without quotes but with ecapement. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
329 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
330 |
if (r[1]) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
331 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
332 |
// Token: Execute the action for this state and token. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
333 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
334 |
action[r[1]][state](); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
335 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
336 |
} else if (r[2]) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
337 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
338 |
// Number token: Convert the number string into a number value and execute |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
339 |
// the action for this state and number. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
340 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
341 |
value = +r[2]; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
342 |
number[state](); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
343 |
} else { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
344 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
345 |
// String token: Replace the escapement sequences and execute the action for |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
346 |
// this state and string. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
347 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
348 |
value = debackslashify(r[3]); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
349 |
string[state](); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
350 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
351 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
352 |
// Remove the token from the string. The loop will continue as long as there |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
353 |
// are tokens. This is a slow process, but it allows the use of ^ matching, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
354 |
// which assures that no illegal tokens slip through. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
355 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
356 |
source = source.slice(r[0].length); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
357 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
358 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
359 |
// If we find a state/token combination that is illegal, then the action will |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
360 |
// cause an error. We handle the error by simply changing the state. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
361 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
362 |
} catch (e) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
363 |
state = e; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
364 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
365 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
366 |
// The parsing is finished. If we are not in the final 'ok' state, or if the |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
367 |
// remaining source contains anything except whitespace, then we did not have |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
368 |
//a well-formed JSON text. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
369 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
370 |
if (state !== 'ok' || /[^\x20\t\n\r]/.test(source)) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
371 |
throw state instanceof SyntaxError ? state : new SyntaxError('JSON'); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
372 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
373 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
374 |
// If there is a reviver function, we recursively walk the new structure, |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
375 |
// passing each name/value pair to the reviver function for possible |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
376 |
// transformation, starting with a temporary root object that holds the current |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
377 |
// value in an empty key. If there is not a reviver function, we simply return |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
378 |
// that value. |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
379 |
|
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
380 |
return typeof reviver === 'function' ? (function walk(holder, key) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
381 |
var k, v, value = holder[key]; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
382 |
if (value && typeof value === 'object') { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
383 |
for (k in value) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
384 |
if (Object.prototype.hasOwnProperty.call(value, k)) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
385 |
v = walk(value, k); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
386 |
if (v !== undefined) { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
387 |
value[k] = v; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
388 |
} else { |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
389 |
delete value[k]; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
390 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
391 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
392 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
393 |
} |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
394 |
return reviver.call(holder, key, value); |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
395 |
}({'': value}, '')) : value; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
396 |
}; |
|
bb7a2f8202b9
Jane McGonigal : jeux video
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff
changeset
|
397 |
}()); |