dango_generator 0.0.38

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. data/LICENSE +16 -0
  2. data/README.txt +41 -0
  3. data/dango_generator.rb +99 -0
  4. data/templates/as3/as3corelib-license.txt +33 -0
  5. data/templates/as3/as3corelib-readme.txt +5 -0
  6. data/templates/as3/com/adobe/crypto/MD5.as +256 -0
  7. data/templates/as3/com/adobe/crypto/SHA1.as +268 -0
  8. data/templates/as3/com/adobe/crypto/SHA224.as +255 -0
  9. data/templates/as3/com/adobe/crypto/SHA256.as +260 -0
  10. data/templates/as3/com/adobe/crypto/WSSEUsernameToken.as +117 -0
  11. data/templates/as3/com/adobe/errors/IllegalStateError.as +66 -0
  12. data/templates/as3/com/adobe/images/BitString.as +42 -0
  13. data/templates/as3/com/adobe/images/JPGEncoder.as +651 -0
  14. data/templates/as3/com/adobe/images/PNGEncoder.as +144 -0
  15. data/templates/as3/com/adobe/net/DynamicURLLoader.as +58 -0
  16. data/templates/as3/com/adobe/net/IURIResolver.as +79 -0
  17. data/templates/as3/com/adobe/net/URI.as +2469 -0
  18. data/templates/as3/com/adobe/net/URIEncodingBitmap.as +142 -0
  19. data/templates/as3/com/adobe/net/proxies/RFC2817Socket.as +204 -0
  20. data/templates/as3/com/adobe/serialization/json/JSON.as +88 -0
  21. data/templates/as3/com/adobe/serialization/json/JSONDecoder.as +218 -0
  22. data/templates/as3/com/adobe/serialization/json/JSONEncoder.as +302 -0
  23. data/templates/as3/com/adobe/serialization/json/JSONParseError.as +90 -0
  24. data/templates/as3/com/adobe/serialization/json/JSONToken.as +107 -0
  25. data/templates/as3/com/adobe/serialization/json/JSONTokenType.as +70 -0
  26. data/templates/as3/com/adobe/serialization/json/JSONTokenizer.as +550 -0
  27. data/templates/as3/com/adobe/utils/ArrayUtil.as +190 -0
  28. data/templates/as3/com/adobe/utils/DateUtil.as +666 -0
  29. data/templates/as3/com/adobe/utils/DictionaryUtil.as +90 -0
  30. data/templates/as3/com/adobe/utils/IntUtil.as +69 -0
  31. data/templates/as3/com/adobe/utils/NumberFormatter.as +77 -0
  32. data/templates/as3/com/adobe/utils/StringUtil.as +257 -0
  33. data/templates/as3/com/adobe/utils/XMLUtil.as +171 -0
  34. data/templates/as3/com/adobe/webapis/ServiceBase.as +51 -0
  35. data/templates/as3/com/adobe/webapis/URLLoaderBase.as +111 -0
  36. data/templates/as3/com/adobe/webapis/events/ServiceEvent.as +78 -0
  37. data/templates/as3/org/rubyforge/dango/DangoClientFramework.as +426 -0
  38. data/templates/as3/org/rubyforge/dango/DangoError.as +11 -0
  39. data/templates/as3/org/rubyforge/dango/DangoErrorCode.as +7 -0
  40. data/templates/as3/org/rubyforge/dango/DangoErrorEvent.as +23 -0
  41. data/templates/as3/org/rubyforge/dango/DangoReceiveEvent.as +21 -0
  42. data/templates/as3/org/rubyforge/dango/DangoURLLoader.as +127 -0
  43. data/templates/as3/org/rubyforge/dango/DangoURLLoaderEvent.as +29 -0
  44. data/templates/as3/org/rubyforge/dango/DangoUtil.as +84 -0
  45. data/templates/dango/config/development.yml +28 -0
  46. data/templates/dango/config/production.yml +3 -0
  47. data/templates/dango/config/system_message.yml +5 -0
  48. data/templates/dango/config/test.yml +3 -0
  49. data/templates/dango/server/99_dango_server.rb +22 -0
  50. data/templates/lib/dango_monitor_client.rb +1 -0
  51. data/templates/lib/dango_tester_client.rb +1 -0
  52. data/templates/script/dango_server +36 -0
  53. data/templates/tasks/dango.rake +2 -0
  54. metadata +108 -0
@@ -0,0 +1,550 @@
1
+ /*
2
+ Adobe Systems Incorporated(r) Source Code License Agreement
3
+ Copyright(c) 2005 Adobe Systems Incorporated. All rights reserved.
4
+
5
+ Please read this Source Code License Agreement carefully before using
6
+ the source code.
7
+
8
+ Adobe Systems Incorporated grants to you a perpetual, worldwide, non-exclusive,
9
+ no-charge, royalty-free, irrevocable copyright license, to reproduce,
10
+ prepare derivative works of, publicly display, publicly perform, and
11
+ distribute this source code and such derivative works in source or
12
+ object code form without any attribution requirements.
13
+
14
+ The name "Adobe Systems Incorporated" must not be used to endorse or promote products
15
+ derived from the source code without prior written permission.
16
+
17
+ You agree to indemnify, hold harmless and defend Adobe Systems Incorporated from and
18
+ against any loss, damage, claims or lawsuits, including attorney's
19
+ fees that arise or result from your use or distribution of the source
20
+ code.
21
+
22
+ THIS SOURCE CODE IS PROVIDED "AS IS" AND "WITH ALL FAULTS", WITHOUT
23
+ ANY TECHNICAL SUPPORT OR ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING,
24
+ BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ALSO, THERE IS NO WARRANTY OF
26
+ NON-INFRINGEMENT, TITLE OR QUIET ENJOYMENT. IN NO EVENT SHALL MACROMEDIA
27
+ OR ITS SUPPLIERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
28
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
30
+ OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
31
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
32
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOURCE CODE, EVEN IF
33
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
+ */
35
+
36
+ package com.adobe.serialization.json {
37
+
38
+ public class JSONTokenizer {
39
+
40
+ /** The object that will get parsed from the JSON string */
41
+ private var obj:Object;
42
+
43
+ /** The JSON string to be parsed */
44
+ private var jsonString:String;
45
+
46
+ /** The current parsing location in the JSON string */
47
+ private var loc:int;
48
+
49
+ /** The current character in the JSON string during parsing */
50
+ private var ch:String;
51
+
52
+ /**
53
+ * Constructs a new JSONDecoder to parse a JSON string
54
+ * into a native object.
55
+ *
56
+ * @param s The JSON string to be converted
57
+ * into a native object
58
+ */
59
+ public function JSONTokenizer( s:String ) {
60
+ jsonString = s;
61
+ loc = 0;
62
+
63
+ // prime the pump by getting the first character
64
+ nextChar();
65
+ }
66
+
67
+ /**
68
+ * Gets the next token in the input sting and advances
69
+ * the character to the next character after the token
70
+ */
71
+ public function getNextToken():JSONToken {
72
+ var token:JSONToken = new JSONToken();
73
+
74
+ // skip any whitespace / comments since the last
75
+ // token was read
76
+ skipIgnored();
77
+
78
+ // examine the new character and see what we have...
79
+ switch ( ch ) {
80
+
81
+ case '{':
82
+ token.type = JSONTokenType.LEFT_BRACE;
83
+ token.value = '{';
84
+ nextChar();
85
+ break
86
+
87
+ case '}':
88
+ token.type = JSONTokenType.RIGHT_BRACE;
89
+ token.value = '}';
90
+ nextChar();
91
+ break
92
+
93
+ case '[':
94
+ token.type = JSONTokenType.LEFT_BRACKET;
95
+ token.value = '[';
96
+ nextChar();
97
+ break
98
+
99
+ case ']':
100
+ token.type = JSONTokenType.RIGHT_BRACKET;
101
+ token.value = ']';
102
+ nextChar();
103
+ break
104
+
105
+ case ',':
106
+ token.type = JSONTokenType.COMMA;
107
+ token.value = ',';
108
+ nextChar();
109
+ break
110
+
111
+ case ':':
112
+ token.type = JSONTokenType.COLON;
113
+ token.value = ':';
114
+ nextChar();
115
+ break;
116
+
117
+ case 't': // attempt to read true
118
+ var possibleTrue:String = "t" + nextChar() + nextChar() + nextChar();
119
+
120
+ if ( possibleTrue == "true" ) {
121
+ token.type = JSONTokenType.TRUE;
122
+ token.value = true;
123
+ nextChar();
124
+ } else {
125
+ parseError( "Expecting 'true' but found " + possibleTrue );
126
+ }
127
+
128
+ break;
129
+
130
+ case 'f': // attempt to read false
131
+ var possibleFalse:String = "f" + nextChar() + nextChar() + nextChar() + nextChar();
132
+
133
+ if ( possibleFalse == "false" ) {
134
+ token.type = JSONTokenType.FALSE;
135
+ token.value = false;
136
+ nextChar();
137
+ } else {
138
+ parseError( "Expecting 'false' but found " + possibleFalse );
139
+ }
140
+
141
+ break;
142
+
143
+ case 'n': // attempt to read null
144
+
145
+ var possibleNull:String = "n" + nextChar() + nextChar() + nextChar();
146
+
147
+ if ( possibleNull == "null" ) {
148
+ token.type = JSONTokenType.NULL;
149
+ token.value = null;
150
+ nextChar();
151
+ } else {
152
+ parseError( "Expecting 'null' but found " + possibleNull );
153
+ }
154
+
155
+ break;
156
+
157
+ case '"': // the start of a string
158
+ token = readString();
159
+ break;
160
+
161
+ default:
162
+ // see if we can read a number
163
+ if ( isDigit( ch ) || ch == '-' ) {
164
+ token = readNumber();
165
+ } else if ( ch == '' ) {
166
+ // check for reading past the end of the string
167
+ return null;
168
+ } else {
169
+ // not sure what was in the input string - it's not
170
+ // anything we expected
171
+ parseError( "Unexpected " + ch + " encountered" );
172
+ }
173
+ }
174
+
175
+ return token;
176
+ }
177
+
178
+ /**
179
+ * Attempts to read a string from the input string. Places
180
+ * the character location at the first character after the
181
+ * string. It is assumed that ch is " before this method is called.
182
+ *
183
+ * @return the JSONToken with the string value if a string could
184
+ * be read. Throws an error otherwise.
185
+ */
186
+ private function readString():JSONToken {
187
+ // the token for the string we'll try to read
188
+ var token:JSONToken = new JSONToken();
189
+ token.type = JSONTokenType.STRING;
190
+
191
+ // the string to store the string we'll try to read
192
+ var string:String = "";
193
+
194
+ // advance past the first "
195
+ nextChar();
196
+
197
+ while ( ch != '"' && ch != '' ) {
198
+
199
+ // unescape the escape sequences in the string
200
+ if ( ch == '\\' ) {
201
+
202
+ // get the next character so we know what
203
+ // to unescape
204
+ nextChar();
205
+
206
+ switch ( ch ) {
207
+
208
+ case '"': // quotation mark
209
+ string += '"';
210
+ break;
211
+
212
+ case '/': // solidus
213
+ string += "/";
214
+ break;
215
+
216
+ case '\\': // reverse solidus
217
+ string += '\\';
218
+ break;
219
+
220
+ case 'b': // bell
221
+ string += '\b';
222
+ break;
223
+
224
+ case 'f': // form feed
225
+ string += '\f';
226
+ break;
227
+
228
+ case 'n': // newline
229
+ string += '\n';
230
+ break;
231
+
232
+ case 'r': // carriage return
233
+ string += '\r';
234
+ break;
235
+
236
+ case 't': // horizontal tab
237
+ string += '\t'
238
+ break;
239
+
240
+ case 'u':
241
+ // convert a unicode escape sequence
242
+ // to it's character value - expecting
243
+ // 4 hex digits
244
+
245
+ // save the characters as a string we'll convert to an int
246
+ var hexValue:String = "";
247
+
248
+ // try to find 4 hex characters
249
+ for ( var i:int = 0; i < 4; i++ ) {
250
+ // get the next character and determine
251
+ // if it's a valid hex digit or not
252
+ if ( !isHexDigit( nextChar() ) ) {
253
+ parseError( " Excepted a hex digit, but found: " + ch );
254
+ }
255
+ // valid, add it to the value
256
+ hexValue += ch;
257
+ }
258
+
259
+ // convert hexValue to an integer, and use that
260
+ // integrer value to create a character to add
261
+ // to our string.
262
+ string += String.fromCharCode( parseInt( hexValue, 16 ) );
263
+
264
+ break;
265
+
266
+ default:
267
+ // couldn't unescape the sequence, so just
268
+ // pass it through
269
+ string += '\\' + ch;
270
+
271
+ }
272
+
273
+ } else {
274
+ // didn't have to unescape, so add the character to the string
275
+ string += ch;
276
+
277
+ }
278
+
279
+ // move to the next character
280
+ nextChar();
281
+
282
+ }
283
+
284
+ // we read past the end of the string without closing it, which
285
+ // is a parse error
286
+ if ( ch == '' ) {
287
+ parseError( "Unterminated string literal" );
288
+ }
289
+
290
+ // move past the closing " in the input string
291
+ nextChar();
292
+
293
+ // attach to the string to the token so we can return it
294
+ token.value = string;
295
+
296
+ return token;
297
+ }
298
+
299
+ /**
300
+ * Attempts to read a number from the input string. Places
301
+ * the character location at the first character after the
302
+ * number.
303
+ *
304
+ * @return The JSONToken with the number value if a number could
305
+ * be read. Throws an error otherwise.
306
+ */
307
+ private function readNumber():JSONToken {
308
+ // the token for the number we'll try to read
309
+ var token:JSONToken = new JSONToken();
310
+ token.type = JSONTokenType.NUMBER;
311
+
312
+ // the string to accumulate the number characters
313
+ // into that we'll convert to a number at the end
314
+ var input:String = "";
315
+
316
+ // check for a negative number
317
+ if ( ch == '-' ) {
318
+ input += '-';
319
+ nextChar();
320
+ }
321
+
322
+ // the number must start with a digit
323
+ if ( !isDigit( ch ) )
324
+ {
325
+ parseError( "Expecting a digit" );
326
+ }
327
+
328
+ // 0 can only be the first digit if it
329
+ // is followed by a decimal point
330
+ if ( ch == '0' )
331
+ {
332
+ input += ch;
333
+ nextChar();
334
+
335
+ // make sure no other digits come after 0
336
+ if ( isDigit( ch ) )
337
+ {
338
+ parseError( "A digit cannot immediately follow 0" );
339
+ }
340
+ }
341
+ else
342
+ {
343
+ // read numbers while we can
344
+ while ( isDigit( ch ) ) {
345
+ input += ch;
346
+ nextChar();
347
+ }
348
+ }
349
+
350
+ // check for a decimal value
351
+ if ( ch == '.' ) {
352
+ input += '.';
353
+ nextChar();
354
+
355
+ // after the decimal there has to be a digit
356
+ if ( !isDigit( ch ) )
357
+ {
358
+ parseError( "Expecting a digit" );
359
+ }
360
+
361
+ // read more numbers to get the decimal value
362
+ while ( isDigit( ch ) ) {
363
+ input += ch;
364
+ nextChar();
365
+ }
366
+ }
367
+
368
+ // check for scientific notation
369
+ if ( ch == 'e' || ch == 'E' )
370
+ {
371
+ input += "e"
372
+ nextChar();
373
+ // check for sign
374
+ if ( ch == '+' || ch == '-' )
375
+ {
376
+ input += ch;
377
+ nextChar();
378
+ }
379
+
380
+ // require at least one number for the exponent
381
+ // in this case
382
+ if ( !isDigit( ch ) )
383
+ {
384
+ parseError( "Scientific notation number needs exponent value" );
385
+ }
386
+
387
+ // read in the exponent
388
+ while ( isDigit( ch ) )
389
+ {
390
+ input += ch;
391
+ nextChar();
392
+ }
393
+ }
394
+
395
+ // convert the string to a number value
396
+ var num:Number = Number( input );
397
+
398
+ if ( isFinite( num ) && !isNaN( num ) ) {
399
+ token.value = num;
400
+ return token;
401
+ } else {
402
+ parseError( "Number " + num + " is not valid!" );
403
+ }
404
+ return null;
405
+ }
406
+
407
+ /**
408
+ * Reads the next character in the input
409
+ * string and advances the character location.
410
+ *
411
+ * @return The next character in the input string, or
412
+ * null if we've read past the end.
413
+ */
414
+ private function nextChar():String {
415
+ return ch = jsonString.charAt( loc++ );
416
+ }
417
+
418
+ /**
419
+ * Advances the character location past any
420
+ * sort of white space and comments
421
+ */
422
+ private function skipIgnored():void {
423
+ skipWhite();
424
+ skipComments();
425
+ skipWhite();
426
+ }
427
+
428
+ /**
429
+ * Skips comments in the input string, either
430
+ * single-line or multi-line. Advances the character
431
+ * to the first position after the end of the comment.
432
+ */
433
+ private function skipComments():void {
434
+ if ( ch == '/' ) {
435
+ // Advance past the first / to find out what type of comment
436
+ nextChar();
437
+ switch ( ch ) {
438
+ case '/': // single-line comment, read through end of line
439
+
440
+ // Loop over the characters until we find
441
+ // a newline or until there's no more characters left
442
+ do {
443
+ nextChar();
444
+ } while ( ch != '\n' && ch != '' )
445
+
446
+ // move past the \n
447
+ nextChar();
448
+
449
+ break;
450
+
451
+ case '*': // multi-line comment, read until closing */
452
+
453
+ // move past the opening *
454
+ nextChar();
455
+
456
+ // try to find a trailing */
457
+ while ( true ) {
458
+ if ( ch == '*' ) {
459
+ // check to see if we have a closing /
460
+ nextChar();
461
+ if ( ch == '/') {
462
+ // move past the end of the closing */
463
+ nextChar();
464
+ break;
465
+ }
466
+ } else {
467
+ // move along, looking if the next character is a *
468
+ nextChar();
469
+ }
470
+
471
+ // when we're here we've read past the end of
472
+ // the string without finding a closing */, so error
473
+ if ( ch == '' ) {
474
+ parseError( "Multi-line comment not closed" );
475
+ }
476
+ }
477
+
478
+ break;
479
+
480
+ // Can't match a comment after a /, so it's a parsing error
481
+ default:
482
+ parseError( "Unexpected " + ch + " encountered (expecting '/' or '*' )" );
483
+ }
484
+ }
485
+
486
+ }
487
+
488
+
489
+ /**
490
+ * Skip any whitespace in the input string and advances
491
+ * the character to the first character after any possible
492
+ * whitespace.
493
+ */
494
+ private function skipWhite():void {
495
+
496
+ // As long as there are spaces in the input
497
+ // stream, advance the current location pointer
498
+ // past them
499
+ while ( isWhiteSpace( ch ) ) {
500
+ nextChar();
501
+ }
502
+
503
+ }
504
+
505
+ /**
506
+ * Determines if a character is whitespace or not.
507
+ *
508
+ * @return True if the character passed in is a whitespace
509
+ * character
510
+ */
511
+ private function isWhiteSpace( ch:String ):Boolean {
512
+ return ( ch == ' ' || ch == '\t' || ch == '\n' );
513
+ }
514
+
515
+ /**
516
+ * Determines if a character is a digit [0-9].
517
+ *
518
+ * @return True if the character passed in is a digit
519
+ */
520
+ private function isDigit( ch:String ):Boolean {
521
+ return ( ch >= '0' && ch <= '9' );
522
+ }
523
+
524
+ /**
525
+ * Determines if a character is a digit [0-9].
526
+ *
527
+ * @return True if the character passed in is a digit
528
+ */
529
+ private function isHexDigit( ch:String ):Boolean {
530
+ // get the uppercase value of ch so we only have
531
+ // to compare the value between 'A' and 'F'
532
+ var uc:String = ch.toUpperCase();
533
+
534
+ // a hex digit is a digit of A-F, inclusive ( using
535
+ // our uppercase constraint )
536
+ return ( isDigit( ch ) || ( uc >= 'A' && uc <= 'F' ) );
537
+ }
538
+
539
+ /**
540
+ * Raises a parsing error with a specified message, tacking
541
+ * on the error location and the original string.
542
+ *
543
+ * @param message The message indicating why the error occurred
544
+ */
545
+ public function parseError( message:String ):void {
546
+ throw new JSONParseError( message, loc, jsonString );
547
+ }
548
+ }
549
+
550
+ }