as3corelib 0.1.0 → 0.85.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. data/Gemfile +1 -4
  2. data/Gemfile.lock +7 -4
  3. data/README.textile +20 -10
  4. data/Rakefile +32 -2
  5. data/as3corelib.gemspec +13 -11
  6. data/lib/as3corelib.rb +10 -4
  7. data/lib/as3corelib/version.rb +4 -0
  8. metadata +31 -121
  9. data/build/build.properties +0 -48
  10. data/build/build.xml +0 -104
  11. data/examples/JSONExample/JSONExample.mxml +0 -73
  12. data/src/com/adobe/air/crypto/EncryptionKeyGenerator.as +0 -313
  13. data/src/com/adobe/air/filesystem/FileMonitor.as +0 -245
  14. data/src/com/adobe/air/filesystem/FileUtil.as +0 -63
  15. data/src/com/adobe/air/filesystem/VolumeMonitor.as +0 -184
  16. data/src/com/adobe/air/filesystem/events/FileMonitorEvent.as +0 -61
  17. data/src/com/adobe/air/logging/FileTarget.as +0 -95
  18. data/src/com/adobe/air/net/ResourceCache.as +0 -165
  19. data/src/com/adobe/air/net/events/ResourceCacheEvent.as +0 -70
  20. data/src/com/adobe/crypto/HMAC.as +0 -127
  21. data/src/com/adobe/crypto/MD5.as +0 -281
  22. data/src/com/adobe/crypto/MD5Stream.as +0 -402
  23. data/src/com/adobe/crypto/SHA1.as +0 -289
  24. data/src/com/adobe/crypto/SHA224.as +0 -257
  25. data/src/com/adobe/crypto/SHA256.as +0 -261
  26. data/src/com/adobe/crypto/WSSEUsernameToken.as +0 -114
  27. data/src/com/adobe/errors/IllegalStateError.as +0 -63
  28. data/src/com/adobe/fileformats/vcard/Address.as +0 -47
  29. data/src/com/adobe/fileformats/vcard/Email.as +0 -39
  30. data/src/com/adobe/fileformats/vcard/Phone.as +0 -39
  31. data/src/com/adobe/fileformats/vcard/VCard.as +0 -54
  32. data/src/com/adobe/fileformats/vcard/VCardParser.as +0 -246
  33. data/src/com/adobe/images/BitString.as +0 -39
  34. data/src/com/adobe/images/JPGEncoder.as +0 -648
  35. data/src/com/adobe/images/PNGEncoder.as +0 -141
  36. data/src/com/adobe/net/DynamicURLLoader.as +0 -55
  37. data/src/com/adobe/net/IURIResolver.as +0 -76
  38. data/src/com/adobe/net/MimeTypeMap.as +0 -200
  39. data/src/com/adobe/net/URI.as +0 -2466
  40. data/src/com/adobe/net/URIEncodingBitmap.as +0 -139
  41. data/src/com/adobe/net/proxies/RFC2817Socket.as +0 -198
  42. data/src/com/adobe/protocols/dict/Database.as +0 -66
  43. data/src/com/adobe/protocols/dict/Definition.as +0 -71
  44. data/src/com/adobe/protocols/dict/Dict.as +0 -360
  45. data/src/com/adobe/protocols/dict/DictionaryServer.as +0 -60
  46. data/src/com/adobe/protocols/dict/MatchStrategy.as +0 -66
  47. data/src/com/adobe/protocols/dict/Response.as +0 -71
  48. data/src/com/adobe/protocols/dict/events/ConnectedEvent.as +0 -53
  49. data/src/com/adobe/protocols/dict/events/DatabaseEvent.as +0 -67
  50. data/src/com/adobe/protocols/dict/events/DefinitionEvent.as +0 -70
  51. data/src/com/adobe/protocols/dict/events/DefinitionHeaderEvent.as +0 -69
  52. data/src/com/adobe/protocols/dict/events/DictionaryServerEvent.as +0 -69
  53. data/src/com/adobe/protocols/dict/events/DisconnectedEvent.as +0 -55
  54. data/src/com/adobe/protocols/dict/events/ErrorEvent.as +0 -80
  55. data/src/com/adobe/protocols/dict/events/MatchEvent.as +0 -67
  56. data/src/com/adobe/protocols/dict/events/MatchStrategiesEvent.as +0 -70
  57. data/src/com/adobe/protocols/dict/events/NoMatchEvent.as +0 -54
  58. data/src/com/adobe/protocols/dict/util/CompleteResponseEvent.as +0 -68
  59. data/src/com/adobe/protocols/dict/util/SocketHelper.as +0 -81
  60. data/src/com/adobe/serialization/json/JSON.as +0 -86
  61. data/src/com/adobe/serialization/json/JSONDecoder.as +0 -327
  62. data/src/com/adobe/serialization/json/JSONEncoder.as +0 -312
  63. data/src/com/adobe/serialization/json/JSONParseError.as +0 -87
  64. data/src/com/adobe/serialization/json/JSONToken.as +0 -104
  65. data/src/com/adobe/serialization/json/JSONTokenType.as +0 -69
  66. data/src/com/adobe/serialization/json/JSONTokenizer.as +0 -702
  67. data/src/com/adobe/utils/ArrayUtil.as +0 -187
  68. data/src/com/adobe/utils/DateUtil.as +0 -701
  69. data/src/com/adobe/utils/DictionaryUtil.as +0 -87
  70. data/src/com/adobe/utils/IntUtil.as +0 -99
  71. data/src/com/adobe/utils/NumberFormatter.as +0 -74
  72. data/src/com/adobe/utils/StringUtil.as +0 -239
  73. data/src/com/adobe/utils/XMLUtil.as +0 -168
  74. data/src/com/adobe/webapis/ServiceBase.as +0 -48
  75. data/src/com/adobe/webapis/URLLoaderBase.as +0 -108
  76. data/src/com/adobe/webapis/events/ServiceEvent.as +0 -82
  77. data/tests/src/CoreLibTestRunner-app.xml +0 -135
  78. data/tests/src/CoreLibTestRunner.as +0 -138
  79. data/tests/src/CoreLibTestRunner.mxml +0 -46
  80. data/tests/src/com/adobe/air/crypto/EncryptionKeyGeneratorTest.as +0 -176
  81. data/tests/src/com/adobe/air/filesystem/FileMonitorTest.as +0 -63
  82. data/tests/src/com/adobe/air/filesystem/VolumeMonitorTest.as +0 -57
  83. data/tests/src/com/adobe/air/filesystem/events/FileMonitorEventTest.as +0 -59
  84. data/tests/src/com/adobe/air/net/events/ResourceCacheEventTest.as +0 -72
  85. data/tests/src/com/adobe/crypto/HMACMD5Test.as +0 -134
  86. data/tests/src/com/adobe/crypto/HMACSHA1Test.as +0 -138
  87. data/tests/src/com/adobe/crypto/MD5Test.as +0 -82
  88. data/tests/src/com/adobe/crypto/SHA1Test.as +0 -151
  89. data/tests/src/com/adobe/crypto/SHA224Test.as +0 -104
  90. data/tests/src/com/adobe/crypto/SHA256Test.as +0 -116
  91. data/tests/src/com/adobe/crypto/WSSEUsernameTokenTest.as +0 -87
  92. data/tests/src/com/adobe/images/JPGEncoderTest.as +0 -54
  93. data/tests/src/com/adobe/images/PNGEncoderTest.as +0 -54
  94. data/tests/src/com/adobe/net/URITest.as +0 -589
  95. data/tests/src/com/adobe/protocols/events/ConnectedEventTest.as +0 -59
  96. data/tests/src/com/adobe/protocols/events/DatabaseEventTest.as +0 -62
  97. data/tests/src/com/adobe/protocols/events/DefinitionEventTest.as +0 -61
  98. data/tests/src/com/adobe/protocols/events/DefinitionHeaderEventTest.as +0 -61
  99. data/tests/src/com/adobe/protocols/events/DictionaryServerEventTest.as +0 -61
  100. data/tests/src/com/adobe/protocols/events/DisconnectedEventTest.as +0 -59
  101. data/tests/src/com/adobe/protocols/events/ErrorEventTest.as +0 -63
  102. data/tests/src/com/adobe/protocols/events/MatchEventTest.as +0 -61
  103. data/tests/src/com/adobe/protocols/events/MatchStrategiesEventTest.as +0 -61
  104. data/tests/src/com/adobe/protocols/events/NoMatchEventTest.as +0 -58
  105. data/tests/src/com/adobe/protocols/util/CompletedResponseEventTest.as +0 -60
  106. data/tests/src/com/adobe/serialization/json/JSONTest.as +0 -522
  107. data/tests/src/com/adobe/serialization/json/SimpleClass.as +0 -85
  108. data/tests/src/com/adobe/utils/ArrayUtilTest.as +0 -173
  109. data/tests/src/com/adobe/utils/DateUtilTest.as +0 -436
  110. data/tests/src/com/adobe/utils/DictionaryUtilTest.as +0 -93
  111. data/tests/src/com/adobe/utils/IntUtilTest.as +0 -73
  112. data/tests/src/com/adobe/utils/NumberFormatterTest.as +0 -70
  113. data/tests/src/com/adobe/utils/StringUtilTest.as +0 -304
  114. data/tests/src/com/adobe/utils/XMLUtilTest.as +0 -101
  115. data/tests/src/com/adobe/webapis/events/ServiceEventTest.as +0 -66
@@ -1,327 +0,0 @@
1
- /*
2
- Copyright (c) 2008, Adobe Systems Incorporated
3
- All rights reserved.
4
-
5
- Redistribution and use in source and binary forms, with or without
6
- modification, are permitted provided that the following conditions are
7
- met:
8
-
9
- * Redistributions of source code must retain the above copyright notice,
10
- this list of conditions and the following disclaimer.
11
-
12
- * Redistributions in binary form must reproduce the above copyright
13
- notice, this list of conditions and the following disclaimer in the
14
- documentation and/or other materials provided with the distribution.
15
-
16
- * Neither the name of Adobe Systems Incorporated nor the names of its
17
- contributors may be used to endorse or promote products derived from
18
- this software without specific prior written permission.
19
-
20
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
21
- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24
- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
- */
32
-
33
- package com.adobe.serialization.json
34
- {
35
-
36
- public class JSONDecoder
37
- {
38
-
39
- /**
40
- * Flag indicating if the parser should be strict about the format
41
- * of the JSON string it is attempting to decode.
42
- */
43
- private var strict:Boolean;
44
-
45
- /** The value that will get parsed from the JSON string */
46
- private var value:*;
47
-
48
- /** The tokenizer designated to read the JSON string */
49
- private var tokenizer:JSONTokenizer;
50
-
51
- /** The current token from the tokenizer */
52
- private var token:JSONToken;
53
-
54
- /**
55
- * Constructs a new JSONDecoder to parse a JSON string
56
- * into a native object.
57
- *
58
- * @param s The JSON string to be converted
59
- * into a native object
60
- * @param strict Flag indicating if the JSON string needs to
61
- * strictly match the JSON standard or not.
62
- * @langversion ActionScript 3.0
63
- * @playerversion Flash 9.0
64
- * @tiptext
65
- */
66
- public function JSONDecoder( s:String, strict:Boolean )
67
- {
68
- this.strict = strict;
69
- tokenizer = new JSONTokenizer( s, strict );
70
-
71
- nextToken();
72
- value = parseValue();
73
-
74
- // Make sure the input stream is empty
75
- if ( strict && nextToken() != null )
76
- {
77
- tokenizer.parseError( "Unexpected characters left in input stream" );
78
- }
79
- }
80
-
81
- /**
82
- * Gets the internal object that was created by parsing
83
- * the JSON string passed to the constructor.
84
- *
85
- * @return The internal object representation of the JSON
86
- * string that was passed to the constructor
87
- * @langversion ActionScript 3.0
88
- * @playerversion Flash 9.0
89
- * @tiptext
90
- */
91
- public function getValue():*
92
- {
93
- return value;
94
- }
95
-
96
- /**
97
- * Returns the next token from the tokenzier reading
98
- * the JSON string
99
- */
100
- private function nextToken():JSONToken
101
- {
102
- return token = tokenizer.getNextToken();
103
- }
104
-
105
- /**
106
- * Attempt to parse an array.
107
- */
108
- private function parseArray():Array
109
- {
110
- // create an array internally that we're going to attempt
111
- // to parse from the tokenizer
112
- var a:Array = new Array();
113
-
114
- // grab the next token from the tokenizer to move
115
- // past the opening [
116
- nextToken();
117
-
118
- // check to see if we have an empty array
119
- if ( token.type == JSONTokenType.RIGHT_BRACKET )
120
- {
121
- // we're done reading the array, so return it
122
- return a;
123
- }
124
- // in non-strict mode an empty array is also a comma
125
- // followed by a right bracket
126
- else if ( !strict && token.type == JSONTokenType.COMMA )
127
- {
128
- // move past the comma
129
- nextToken();
130
-
131
- // check to see if we're reached the end of the array
132
- if ( token.type == JSONTokenType.RIGHT_BRACKET )
133
- {
134
- return a;
135
- }
136
- else
137
- {
138
- tokenizer.parseError( "Leading commas are not supported. Expecting ']' but found " + token.value );
139
- }
140
- }
141
-
142
- // deal with elements of the array, and use an "infinite"
143
- // loop because we could have any amount of elements
144
- while ( true )
145
- {
146
- // read in the value and add it to the array
147
- a.push( parseValue() );
148
-
149
- // after the value there should be a ] or a ,
150
- nextToken();
151
-
152
- if ( token.type == JSONTokenType.RIGHT_BRACKET )
153
- {
154
- // we're done reading the array, so return it
155
- return a;
156
- }
157
- else if ( token.type == JSONTokenType.COMMA )
158
- {
159
- // move past the comma and read another value
160
- nextToken();
161
-
162
- // Allow arrays to have a comma after the last element
163
- // if the decoder is not in strict mode
164
- if ( !strict )
165
- {
166
- // Reached ",]" as the end of the array, so return it
167
- if ( token.type == JSONTokenType.RIGHT_BRACKET )
168
- {
169
- return a;
170
- }
171
- }
172
- }
173
- else
174
- {
175
- tokenizer.parseError( "Expecting ] or , but found " + token.value );
176
- }
177
- }
178
- return null;
179
- }
180
-
181
- /**
182
- * Attempt to parse an object.
183
- */
184
- private function parseObject():Object
185
- {
186
- // create the object internally that we're going to
187
- // attempt to parse from the tokenizer
188
- var o:Object = new Object();
189
-
190
- // store the string part of an object member so
191
- // that we can assign it a value in the object
192
- var key:String
193
-
194
- // grab the next token from the tokenizer
195
- nextToken();
196
-
197
- // check to see if we have an empty object
198
- if ( token.type == JSONTokenType.RIGHT_BRACE )
199
- {
200
- // we're done reading the object, so return it
201
- return o;
202
- }
203
- // in non-strict mode an empty object is also a comma
204
- // followed by a right bracket
205
- else if ( !strict && token.type == JSONTokenType.COMMA )
206
- {
207
- // move past the comma
208
- nextToken();
209
-
210
- // check to see if we're reached the end of the object
211
- if ( token.type == JSONTokenType.RIGHT_BRACE )
212
- {
213
- return o;
214
- }
215
- else
216
- {
217
- tokenizer.parseError( "Leading commas are not supported. Expecting '}' but found " + token.value );
218
- }
219
- }
220
-
221
- // deal with members of the object, and use an "infinite"
222
- // loop because we could have any amount of members
223
- while ( true )
224
- {
225
- if ( token.type == JSONTokenType.STRING )
226
- {
227
- // the string value we read is the key for the object
228
- key = String( token.value );
229
-
230
- // move past the string to see what's next
231
- nextToken();
232
-
233
- // after the string there should be a :
234
- if ( token.type == JSONTokenType.COLON )
235
- {
236
- // move past the : and read/assign a value for the key
237
- nextToken();
238
- o[key] = parseValue();
239
-
240
- // move past the value to see what's next
241
- nextToken();
242
-
243
- // after the value there's either a } or a ,
244
- if ( token.type == JSONTokenType.RIGHT_BRACE )
245
- {
246
- // we're done reading the object, so return it
247
- return o;
248
- }
249
- else if ( token.type == JSONTokenType.COMMA )
250
- {
251
- // skip past the comma and read another member
252
- nextToken();
253
-
254
- // Allow objects to have a comma after the last member
255
- // if the decoder is not in strict mode
256
- if ( !strict )
257
- {
258
- // Reached ",}" as the end of the object, so return it
259
- if ( token.type == JSONTokenType.RIGHT_BRACE )
260
- {
261
- return o;
262
- }
263
- }
264
- }
265
- else
266
- {
267
- tokenizer.parseError( "Expecting } or , but found " + token.value );
268
- }
269
- }
270
- else
271
- {
272
- tokenizer.parseError( "Expecting : but found " + token.value );
273
- }
274
- }
275
- else
276
- {
277
- tokenizer.parseError( "Expecting string but found " + token.value );
278
- }
279
- }
280
- return null;
281
- }
282
-
283
- /**
284
- * Attempt to parse a value
285
- */
286
- private function parseValue():Object
287
- {
288
- // Catch errors when the input stream ends abruptly
289
- if ( token == null )
290
- {
291
- tokenizer.parseError( "Unexpected end of input" );
292
- }
293
-
294
- switch ( token.type )
295
- {
296
- case JSONTokenType.LEFT_BRACE:
297
- return parseObject();
298
-
299
- case JSONTokenType.LEFT_BRACKET:
300
- return parseArray();
301
-
302
- case JSONTokenType.STRING:
303
- case JSONTokenType.NUMBER:
304
- case JSONTokenType.TRUE:
305
- case JSONTokenType.FALSE:
306
- case JSONTokenType.NULL:
307
- return token.value;
308
-
309
- case JSONTokenType.NAN:
310
- if ( !strict )
311
- {
312
- return token.value;
313
- }
314
- else
315
- {
316
- tokenizer.parseError( "Unexpected " + token.value );
317
- }
318
-
319
- default:
320
- tokenizer.parseError( "Unexpected " + token.value );
321
-
322
- }
323
-
324
- return null;
325
- }
326
- }
327
- }
@@ -1,312 +0,0 @@
1
- /*
2
- Copyright (c) 2008, Adobe Systems Incorporated
3
- All rights reserved.
4
-
5
- Redistribution and use in source and binary forms, with or without
6
- modification, are permitted provided that the following conditions are
7
- met:
8
-
9
- * Redistributions of source code must retain the above copyright notice,
10
- this list of conditions and the following disclaimer.
11
-
12
- * Redistributions in binary form must reproduce the above copyright
13
- notice, this list of conditions and the following disclaimer in the
14
- documentation and/or other materials provided with the distribution.
15
-
16
- * Neither the name of Adobe Systems Incorporated nor the names of its
17
- contributors may be used to endorse or promote products derived from
18
- this software without specific prior written permission.
19
-
20
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
21
- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23
- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24
- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
- */
32
-
33
- package com.adobe.serialization.json
34
- {
35
-
36
- import flash.utils.describeType;
37
-
38
- public class JSONEncoder {
39
-
40
- /** The string that is going to represent the object we're encoding */
41
- private var jsonString:String;
42
-
43
- /**
44
- * Creates a new JSONEncoder.
45
- *
46
- * @param o The object to encode as a JSON string
47
- * @langversion ActionScript 3.0
48
- * @playerversion Flash 9.0
49
- * @tiptext
50
- */
51
- public function JSONEncoder( value:* ) {
52
- jsonString = convertToString( value );
53
-
54
- }
55
-
56
- /**
57
- * Gets the JSON string from the encoder.
58
- *
59
- * @return The JSON string representation of the object
60
- * that was passed to the constructor
61
- * @langversion ActionScript 3.0
62
- * @playerversion Flash 9.0
63
- * @tiptext
64
- */
65
- public function getString():String {
66
- return jsonString;
67
- }
68
-
69
- /**
70
- * Converts a value to it's JSON string equivalent.
71
- *
72
- * @param value The value to convert. Could be any
73
- * type (object, number, array, etc)
74
- */
75
- private function convertToString( value:* ):String {
76
-
77
- // determine what value is and convert it based on it's type
78
- if ( value is String ) {
79
-
80
- // escape the string so it's formatted correctly
81
- return escapeString( value as String );
82
-
83
- } else if ( value is Number ) {
84
-
85
- // only encode numbers that finate
86
- return isFinite( value as Number) ? value.toString() : "null";
87
-
88
- } else if ( value is Boolean ) {
89
-
90
- // convert boolean to string easily
91
- return value ? "true" : "false";
92
-
93
- } else if ( value is Array ) {
94
-
95
- // call the helper method to convert an array
96
- return arrayToString( value as Array );
97
-
98
- } else if ( value is Object && value != null ) {
99
-
100
- // call the helper method to convert an object
101
- return objectToString( value );
102
- }
103
- return "null";
104
- }
105
-
106
- /**
107
- * Escapes a string accoding to the JSON specification.
108
- *
109
- * @param str The string to be escaped
110
- * @return The string with escaped special characters
111
- * according to the JSON specification
112
- */
113
- private function escapeString( str:String ):String {
114
- // create a string to store the string's jsonstring value
115
- var s:String = "";
116
- // current character in the string we're processing
117
- var ch:String;
118
- // store the length in a local variable to reduce lookups
119
- var len:Number = str.length;
120
-
121
- // loop over all of the characters in the string
122
- for ( var i:int = 0; i < len; i++ ) {
123
-
124
- // examine the character to determine if we have to escape it
125
- ch = str.charAt( i );
126
- switch ( ch ) {
127
-
128
- case '"': // quotation mark
129
- s += "\\\"";
130
- break;
131
-
132
- //case '/': // solidus
133
- // s += "\\/";
134
- // break;
135
-
136
- case '\\': // reverse solidus
137
- s += "\\\\";
138
- break;
139
-
140
- case '\b': // bell
141
- s += "\\b";
142
- break;
143
-
144
- case '\f': // form feed
145
- s += "\\f";
146
- break;
147
-
148
- case '\n': // newline
149
- s += "\\n";
150
- break;
151
-
152
- case '\r': // carriage return
153
- s += "\\r";
154
- break;
155
-
156
- case '\t': // horizontal tab
157
- s += "\\t";
158
- break;
159
-
160
- default: // everything else
161
-
162
- // check for a control character and escape as unicode
163
- if ( ch < ' ' ) {
164
- // get the hex digit(s) of the character (either 1 or 2 digits)
165
- var hexCode:String = ch.charCodeAt( 0 ).toString( 16 );
166
-
167
- // ensure that there are 4 digits by adjusting
168
- // the # of zeros accordingly.
169
- var zeroPad:String = hexCode.length == 2 ? "00" : "000";
170
-
171
- // create the unicode escape sequence with 4 hex digits
172
- s += "\\u" + zeroPad + hexCode;
173
- } else {
174
-
175
- // no need to do any special encoding, just pass-through
176
- s += ch;
177
-
178
- }
179
- } // end switch
180
-
181
- } // end for loop
182
-
183
- return "\"" + s + "\"";
184
- }
185
-
186
- /**
187
- * Converts an array to it's JSON string equivalent
188
- *
189
- * @param a The array to convert
190
- * @return The JSON string representation of <code>a</code>
191
- */
192
- private function arrayToString( a:Array ):String {
193
- // create a string to store the array's jsonstring value
194
- var s:String = "";
195
-
196
- // loop over the elements in the array and add their converted
197
- // values to the string
198
- for ( var i:int = 0; i < a.length; i++ ) {
199
- // when the length is 0 we're adding the first element so
200
- // no comma is necessary
201
- if ( s.length > 0 ) {
202
- // we've already added an element, so add the comma separator
203
- s += ","
204
- }
205
-
206
- // convert the value to a string
207
- s += convertToString( a[i] );
208
- }
209
-
210
- // KNOWN ISSUE: In ActionScript, Arrays can also be associative
211
- // objects and you can put anything in them, ie:
212
- // myArray["foo"] = "bar";
213
- //
214
- // These properties aren't picked up in the for loop above because
215
- // the properties don't correspond to indexes. However, we're
216
- // sort of out luck because the JSON specification doesn't allow
217
- // these types of array properties.
218
- //
219
- // So, if the array was also used as an associative object, there
220
- // may be some values in the array that don't get properly encoded.
221
- //
222
- // A possible solution is to instead encode the Array as an Object
223
- // but then it won't get decoded correctly (and won't be an
224
- // Array instance)
225
-
226
- // close the array and return it's string value
227
- return "[" + s + "]";
228
- }
229
-
230
- /**
231
- * Converts an object to it's JSON string equivalent
232
- *
233
- * @param o The object to convert
234
- * @return The JSON string representation of <code>o</code>
235
- */
236
- private function objectToString( o:Object ):String
237
- {
238
- // create a string to store the object's jsonstring value
239
- var s:String = "";
240
-
241
- // determine if o is a class instance or a plain object
242
- var classInfo:XML = describeType( o );
243
- if ( classInfo.@name.toString() == "Object" )
244
- {
245
- // the value of o[key] in the loop below - store this
246
- // as a variable so we don't have to keep looking up o[key]
247
- // when testing for valid values to convert
248
- var value:Object;
249
-
250
- // loop over the keys in the object and add their converted
251
- // values to the string
252
- for ( var key:String in o )
253
- {
254
- // assign value to a variable for quick lookup
255
- value = o[key];
256
-
257
- // don't add function's to the JSON string
258
- if ( value is Function )
259
- {
260
- // skip this key and try another
261
- continue;
262
- }
263
-
264
- // when the length is 0 we're adding the first item so
265
- // no comma is necessary
266
- if ( s.length > 0 ) {
267
- // we've already added an item, so add the comma separator
268
- s += ","
269
- }
270
-
271
- s += escapeString( key ) + ":" + convertToString( value );
272
- }
273
- }
274
- else // o is a class instance
275
- {
276
- // Loop over all of the variables and accessors in the class and
277
- // serialize them along with their values.
278
- for each ( var v:XML in classInfo..*.(
279
- name() == "variable"
280
- ||
281
- (
282
- name() == "accessor"
283
- // Issue #116 - Make sure accessors are readable
284
- && attribute( "access" ).charAt( 0 ) == "r" )
285
- ) )
286
- {
287
- // Issue #110 - If [Transient] metadata exists, then we should skip
288
- if ( v.metadata && v.metadata.( @name == "Transient" ).length() > 0 )
289
- {
290
- continue;
291
- }
292
-
293
- // When the length is 0 we're adding the first item so
294
- // no comma is necessary
295
- if ( s.length > 0 ) {
296
- // We've already added an item, so add the comma separator
297
- s += ","
298
- }
299
-
300
- s += escapeString( v.@name.toString() ) + ":"
301
- + convertToString( o[ v.@name ] );
302
- }
303
-
304
- }
305
-
306
- return "{" + s + "}";
307
- }
308
-
309
-
310
- }
311
-
312
- }