From 8e0b068b1d6929af82ef348a47b235dd89196c11 Mon Sep 17 00:00:00 2001 From: sostler Date: Sat, 27 Feb 2010 23:22:29 -0500 Subject: Fixed CLRF --- webcam/com/adobe/serialization/json/JSONEncoder.as | 604 ++++++++++----------- 1 file changed, 302 insertions(+), 302 deletions(-) (limited to 'webcam/com/adobe/serialization/json/JSONEncoder.as') diff --git a/webcam/com/adobe/serialization/json/JSONEncoder.as b/webcam/com/adobe/serialization/json/JSONEncoder.as index f8b195c..f371a17 100644 --- a/webcam/com/adobe/serialization/json/JSONEncoder.as +++ b/webcam/com/adobe/serialization/json/JSONEncoder.as @@ -1,302 +1,302 @@ -/* -Adobe Systems Incorporated(r) Source Code License Agreement -Copyright(c) 2005 Adobe Systems Incorporated. All rights reserved. - -Please read this Source Code License Agreement carefully before using -the source code. - -Adobe Systems Incorporated grants to you a perpetual, worldwide, non-exclusive, -no-charge, royalty-free, irrevocable copyright license, to reproduce, -prepare derivative works of, publicly display, publicly perform, and -distribute this source code and such derivative works in source or -object code form without any attribution requirements. - -The name "Adobe Systems Incorporated" must not be used to endorse or promote products -derived from the source code without prior written permission. - -You agree to indemnify, hold harmless and defend Adobe Systems Incorporated from and -against any loss, damage, claims or lawsuits, including attorney's -fees that arise or result from your use or distribution of the source -code. - -THIS SOURCE CODE IS PROVIDED "AS IS" AND "WITH ALL FAULTS", WITHOUT -ANY TECHNICAL SUPPORT OR ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ALSO, THERE IS NO WARRANTY OF -NON-INFRINGEMENT, TITLE OR QUIET ENJOYMENT. IN NO EVENT SHALL MACROMEDIA -OR ITS SUPPLIERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOURCE CODE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -package com.adobe.serialization.json -{ - - import flash.utils.describeType; - - public class JSONEncoder { - - /** The string that is going to represent the object we're encoding */ - private var jsonString:String; - - /** - * Creates a new JSONEncoder. - * - * @param o The object to encode as a JSON string - * @langversion ActionScript 3.0 - * @playerversion Flash 9.0 - * @tiptext - */ - public function JSONEncoder( value:* ) { - jsonString = convertToString( value ); - - } - - /** - * Gets the JSON string from the encoder. - * - * @return The JSON string representation of the object - * that was passed to the constructor - * @langversion ActionScript 3.0 - * @playerversion Flash 9.0 - * @tiptext - */ - public function getString():String { - return jsonString; - } - - /** - * Converts a value to it's JSON string equivalent. - * - * @param value The value to convert. Could be any - * type (object, number, array, etc) - */ - private function convertToString( value:* ):String { - - // determine what value is and convert it based on it's type - if ( value is String ) { - - // escape the string so it's formatted correctly - return escapeString( value as String ); - - } else if ( value is Number ) { - - // only encode numbers that finate - return isFinite( value as Number) ? value.toString() : "null"; - - } else if ( value is Boolean ) { - - // convert boolean to string easily - return value ? "true" : "false"; - - } else if ( value is Array ) { - - // call the helper method to convert an array - return arrayToString( value as Array ); - - } else if ( value is Object && value != null ) { - - // call the helper method to convert an object - return objectToString( value ); - } - return "null"; - } - - /** - * Escapes a string accoding to the JSON specification. - * - * @param str The string to be escaped - * @return The string with escaped special characters - * according to the JSON specification - */ - private function escapeString( str:String ):String { - // create a string to store the string's jsonstring value - var s:String = ""; - // current character in the string we're processing - var ch:String; - // store the length in a local variable to reduce lookups - var len:Number = str.length; - - // loop over all of the characters in the string - for ( var i:int = 0; i < len; i++ ) { - - // examine the character to determine if we have to escape it - ch = str.charAt( i ); - switch ( ch ) { - - case '"': // quotation mark - s += "\\\""; - break; - - //case '/': // solidus - // s += "\\/"; - // break; - - case '\\': // reverse solidus - s += "\\\\"; - break; - - case '\b': // bell - s += "\\b"; - break; - - case '\f': // form feed - s += "\\f"; - break; - - case '\n': // newline - s += "\\n"; - break; - - case '\r': // carriage return - s += "\\r"; - break; - - case '\t': // horizontal tab - s += "\\t"; - break; - - default: // everything else - - // check for a control character and escape as unicode - if ( ch < ' ' ) { - // get the hex digit(s) of the character (either 1 or 2 digits) - var hexCode:String = ch.charCodeAt( 0 ).toString( 16 ); - - // ensure that there are 4 digits by adjusting - // the # of zeros accordingly. - var zeroPad:String = hexCode.length == 2 ? "00" : "000"; - - // create the unicode escape sequence with 4 hex digits - s += "\\u" + zeroPad + hexCode; - } else { - - // no need to do any special encoding, just pass-through - s += ch; - - } - } // end switch - - } // end for loop - - return "\"" + s + "\""; - } - - /** - * Converts an array to it's JSON string equivalent - * - * @param a The array to convert - * @return The JSON string representation of a - */ - private function arrayToString( a:Array ):String { - // create a string to store the array's jsonstring value - var s:String = ""; - - // loop over the elements in the array and add their converted - // values to the string - for ( var i:int = 0; i < a.length; i++ ) { - // when the length is 0 we're adding the first element so - // no comma is necessary - if ( s.length > 0 ) { - // we've already added an element, so add the comma separator - s += "," - } - - // convert the value to a string - s += convertToString( a[i] ); - } - - // KNOWN ISSUE: In ActionScript, Arrays can also be associative - // objects and you can put anything in them, ie: - // myArray["foo"] = "bar"; - // - // These properties aren't picked up in the for loop above because - // the properties don't correspond to indexes. However, we're - // sort of out luck because the JSON specification doesn't allow - // these types of array properties. - // - // So, if the array was also used as an associative object, there - // may be some values in the array that don't get properly encoded. - // - // A possible solution is to instead encode the Array as an Object - // but then it won't get decoded correctly (and won't be an - // Array instance) - - // close the array and return it's string value - return "[" + s + "]"; - } - - /** - * Converts an object to it's JSON string equivalent - * - * @param o The object to convert - * @return The JSON string representation of o - */ - private function objectToString( o:Object ):String - { - // create a string to store the object's jsonstring value - var s:String = ""; - - // determine if o is a class instance or a plain object - var classInfo:XML = describeType( o ); - if ( classInfo.@name.toString() == "Object" ) - { - // the value of o[key] in the loop below - store this - // as a variable so we don't have to keep looking up o[key] - // when testing for valid values to convert - var value:Object; - - // loop over the keys in the object and add their converted - // values to the string - for ( var key:String in o ) - { - // assign value to a variable for quick lookup - value = o[key]; - - // don't add function's to the JSON string - if ( value is Function ) - { - // skip this key and try another - continue; - } - - // when the length is 0 we're adding the first item so - // no comma is necessary - if ( s.length > 0 ) { - // we've already added an item, so add the comma separator - s += "," - } - - s += escapeString( key ) + ":" + convertToString( value ); - } - } - else // o is a class instance - { - // Loop over all of the variables and accessors in the class and - // serialize them along with their values. - for each ( var v:XML in classInfo..*.( name() == "variable" || name() == "accessor" ) ) - { - // When the length is 0 we're adding the first item so - // no comma is necessary - if ( s.length > 0 ) { - // We've already added an item, so add the comma separator - s += "," - } - - s += escapeString( v.@name.toString() ) + ":" - + convertToString( o[ v.@name ] ); - } - - } - - return "{" + s + "}"; - } - - - } - -} +/* +Adobe Systems Incorporated(r) Source Code License Agreement +Copyright(c) 2005 Adobe Systems Incorporated. All rights reserved. + +Please read this Source Code License Agreement carefully before using +the source code. + +Adobe Systems Incorporated grants to you a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable copyright license, to reproduce, +prepare derivative works of, publicly display, publicly perform, and +distribute this source code and such derivative works in source or +object code form without any attribution requirements. + +The name "Adobe Systems Incorporated" must not be used to endorse or promote products +derived from the source code without prior written permission. + +You agree to indemnify, hold harmless and defend Adobe Systems Incorporated from and +against any loss, damage, claims or lawsuits, including attorney's +fees that arise or result from your use or distribution of the source +code. + +THIS SOURCE CODE IS PROVIDED "AS IS" AND "WITH ALL FAULTS", WITHOUT +ANY TECHNICAL SUPPORT OR ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ALSO, THERE IS NO WARRANTY OF +NON-INFRINGEMENT, TITLE OR QUIET ENJOYMENT. IN NO EVENT SHALL MACROMEDIA +OR ITS SUPPLIERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOURCE CODE, EVEN IF +ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +package com.adobe.serialization.json +{ + + import flash.utils.describeType; + + public class JSONEncoder { + + /** The string that is going to represent the object we're encoding */ + private var jsonString:String; + + /** + * Creates a new JSONEncoder. + * + * @param o The object to encode as a JSON string + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function JSONEncoder( value:* ) { + jsonString = convertToString( value ); + + } + + /** + * Gets the JSON string from the encoder. + * + * @return The JSON string representation of the object + * that was passed to the constructor + * @langversion ActionScript 3.0 + * @playerversion Flash 9.0 + * @tiptext + */ + public function getString():String { + return jsonString; + } + + /** + * Converts a value to it's JSON string equivalent. + * + * @param value The value to convert. Could be any + * type (object, number, array, etc) + */ + private function convertToString( value:* ):String { + + // determine what value is and convert it based on it's type + if ( value is String ) { + + // escape the string so it's formatted correctly + return escapeString( value as String ); + + } else if ( value is Number ) { + + // only encode numbers that finate + return isFinite( value as Number) ? value.toString() : "null"; + + } else if ( value is Boolean ) { + + // convert boolean to string easily + return value ? "true" : "false"; + + } else if ( value is Array ) { + + // call the helper method to convert an array + return arrayToString( value as Array ); + + } else if ( value is Object && value != null ) { + + // call the helper method to convert an object + return objectToString( value ); + } + return "null"; + } + + /** + * Escapes a string accoding to the JSON specification. + * + * @param str The string to be escaped + * @return The string with escaped special characters + * according to the JSON specification + */ + private function escapeString( str:String ):String { + // create a string to store the string's jsonstring value + var s:String = ""; + // current character in the string we're processing + var ch:String; + // store the length in a local variable to reduce lookups + var len:Number = str.length; + + // loop over all of the characters in the string + for ( var i:int = 0; i < len; i++ ) { + + // examine the character to determine if we have to escape it + ch = str.charAt( i ); + switch ( ch ) { + + case '"': // quotation mark + s += "\\\""; + break; + + //case '/': // solidus + // s += "\\/"; + // break; + + case '\\': // reverse solidus + s += "\\\\"; + break; + + case '\b': // bell + s += "\\b"; + break; + + case '\f': // form feed + s += "\\f"; + break; + + case '\n': // newline + s += "\\n"; + break; + + case '\r': // carriage return + s += "\\r"; + break; + + case '\t': // horizontal tab + s += "\\t"; + break; + + default: // everything else + + // check for a control character and escape as unicode + if ( ch < ' ' ) { + // get the hex digit(s) of the character (either 1 or 2 digits) + var hexCode:String = ch.charCodeAt( 0 ).toString( 16 ); + + // ensure that there are 4 digits by adjusting + // the # of zeros accordingly. + var zeroPad:String = hexCode.length == 2 ? "00" : "000"; + + // create the unicode escape sequence with 4 hex digits + s += "\\u" + zeroPad + hexCode; + } else { + + // no need to do any special encoding, just pass-through + s += ch; + + } + } // end switch + + } // end for loop + + return "\"" + s + "\""; + } + + /** + * Converts an array to it's JSON string equivalent + * + * @param a The array to convert + * @return The JSON string representation of a + */ + private function arrayToString( a:Array ):String { + // create a string to store the array's jsonstring value + var s:String = ""; + + // loop over the elements in the array and add their converted + // values to the string + for ( var i:int = 0; i < a.length; i++ ) { + // when the length is 0 we're adding the first element so + // no comma is necessary + if ( s.length > 0 ) { + // we've already added an element, so add the comma separator + s += "," + } + + // convert the value to a string + s += convertToString( a[i] ); + } + + // KNOWN ISSUE: In ActionScript, Arrays can also be associative + // objects and you can put anything in them, ie: + // myArray["foo"] = "bar"; + // + // These properties aren't picked up in the for loop above because + // the properties don't correspond to indexes. However, we're + // sort of out luck because the JSON specification doesn't allow + // these types of array properties. + // + // So, if the array was also used as an associative object, there + // may be some values in the array that don't get properly encoded. + // + // A possible solution is to instead encode the Array as an Object + // but then it won't get decoded correctly (and won't be an + // Array instance) + + // close the array and return it's string value + return "[" + s + "]"; + } + + /** + * Converts an object to it's JSON string equivalent + * + * @param o The object to convert + * @return The JSON string representation of o + */ + private function objectToString( o:Object ):String + { + // create a string to store the object's jsonstring value + var s:String = ""; + + // determine if o is a class instance or a plain object + var classInfo:XML = describeType( o ); + if ( classInfo.@name.toString() == "Object" ) + { + // the value of o[key] in the loop below - store this + // as a variable so we don't have to keep looking up o[key] + // when testing for valid values to convert + var value:Object; + + // loop over the keys in the object and add their converted + // values to the string + for ( var key:String in o ) + { + // assign value to a variable for quick lookup + value = o[key]; + + // don't add function's to the JSON string + if ( value is Function ) + { + // skip this key and try another + continue; + } + + // when the length is 0 we're adding the first item so + // no comma is necessary + if ( s.length > 0 ) { + // we've already added an item, so add the comma separator + s += "," + } + + s += escapeString( key ) + ":" + convertToString( value ); + } + } + else // o is a class instance + { + // Loop over all of the variables and accessors in the class and + // serialize them along with their values. + for each ( var v:XML in classInfo..*.( name() == "variable" || name() == "accessor" ) ) + { + // When the length is 0 we're adding the first item so + // no comma is necessary + if ( s.length > 0 ) { + // We've already added an item, so add the comma separator + s += "," + } + + s += escapeString( v.@name.toString() ) + ":" + + convertToString( o[ v.@name ] ); + } + + } + + return "{" + s + "}"; + } + + + } + +} -- cgit v1.2.3-70-g09d2