亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? jsontokenizer.as

?? coldfusion服務器 air程序的更新源代碼
?? AS
字號:
/*
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 {

	public class JSONTokenizer {
	
		/** The object that will get parsed from the JSON string */
		private var obj:Object;
		
		/** The JSON string to be parsed */
		private var jsonString:String;
		
		/** The current parsing location in the JSON string */
		private var loc:int;
		
		/** The current character in the JSON string during parsing */
		private var ch:String;
		
		/**
		 * Constructs a new JSONDecoder to parse a JSON string 
		 * into a native object.
		 *
		 * @param s The JSON string to be converted
		 *		into a native object
		 */
		public function JSONTokenizer( s:String ) {
			jsonString = s;
			loc = 0;
			
			// prime the pump by getting the first character
			nextChar();
		}
		
		/**
		 * Gets the next token in the input sting and advances
		* the character to the next character after the token
		 */
		public function getNextToken():JSONToken {
			var token:JSONToken = new JSONToken();
			
			// skip any whitespace / comments since the last 
			// token was read
			skipIgnored();
						
			// examine the new character and see what we have...
			switch ( ch ) {
				
				case '{':
					token.type = JSONTokenType.LEFT_BRACE;
					token.value = '{';
					nextChar();
					break
					
				case '}':
					token.type = JSONTokenType.RIGHT_BRACE;
					token.value = '}';
					nextChar();
					break
					
				case '[':
					token.type = JSONTokenType.LEFT_BRACKET;
					token.value = '[';
					nextChar();
					break
					
				case ']':
					token.type = JSONTokenType.RIGHT_BRACKET;
					token.value = ']';
					nextChar();
					break
				
				case ',':
					token.type = JSONTokenType.COMMA;
					token.value = ',';
					nextChar();
					break
					
				case ':':
					token.type = JSONTokenType.COLON;
					token.value = ':';
					nextChar();
					break;
					
				case 't': // attempt to read true
					var possibleTrue:String = "t" + nextChar() + nextChar() + nextChar();
					
					if ( possibleTrue == "true" ) {
						token.type = JSONTokenType.TRUE;
						token.value = true;
						nextChar();
					} else {
						parseError( "Expecting 'true' but found " + possibleTrue );
					}
					
					break;
					
				case 'f': // attempt to read false
					var possibleFalse:String = "f" + nextChar() + nextChar() + nextChar() + nextChar();
					
					if ( possibleFalse == "false" ) {
						token.type = JSONTokenType.FALSE;
						token.value = false;
						nextChar();
					} else {
						parseError( "Expecting 'false' but found " + possibleFalse );
					}
					
					break;
					
				case 'n': // attempt to read null
				
					var possibleNull:String = "n" + nextChar() + nextChar() + nextChar();
					
					if ( possibleNull == "null" ) {
						token.type = JSONTokenType.NULL;
						token.value = null;
						nextChar();
					} else {
						parseError( "Expecting 'null' but found " + possibleNull );
					}
					
					break;
					
				case '"': // the start of a string
					token = readString();
					break;
					
				default: 
					// see if we can read a number
					if ( isDigit( ch ) || ch == '-' ) {
						token = readNumber();
					} else if ( ch == '' ) {
						// check for reading past the end of the string
						return null;
					} else {						
						// not sure what was in the input string - it's not
						// anything we expected
						parseError( "Unexpected " + ch + " encountered" );
					}
			}
			
			return token;
		}
		
		/**
		 * Attempts to read a string from the input string.  Places
		 * the character location at the first character after the
		 * string.  It is assumed that ch is " before this method is called.
		 *
		 * @return the JSONToken with the string value if a string could
		 *		be read.  Throws an error otherwise.
		 */
		private function readString():JSONToken {
			// the token for the string we'll try to read
			var token:JSONToken = new JSONToken();
			token.type = JSONTokenType.STRING;
			
			// the string to store the string we'll try to read
			var string:String = "";
			
			// advance past the first "
			nextChar();
			
			while ( ch != '"' && ch != '' ) {
								
				// unescape the escape sequences in the string
				if ( ch == '\\' ) {
					
					// get the next character so we know what
					// to unescape
					nextChar();
					
					switch ( ch ) {
						
						case '"': // quotation mark
							string += '"';
							break;
						
						case '/':	// solidus
							string += "/";
							break;
							
						case '\\':	// reverse solidus
							string += '\\';
							break;
							
						case 'b':	// bell
							string += '\b';
							break;
							
						case 'f':	// form feed
							string += '\f';
							break;
							
						case 'n':	// newline
							string += '\n';
							break;
							
						case 'r':	// carriage return
							string += '\r';
							break;
							
						case 't':	// horizontal tab
							string += '\t'
							break;
						
						case 'u':
							// convert a unicode escape sequence
							// to it's character value - expecting
							// 4 hex digits
							
							// save the characters as a string we'll convert to an int
							var hexValue:String = "";
							
							// try to find 4 hex characters
							for ( var i:int = 0; i < 4; i++ ) {
								// get the next character and determine
								// if it's a valid hex digit or not
								if ( !isHexDigit( nextChar() ) ) {
									parseError( " Excepted a hex digit, but found: " + ch );
								}
								// valid, add it to the value
								hexValue += ch;
							}
							
							// convert hexValue to an integer, and use that
							// integrer value to create a character to add
							// to our string.
							string += String.fromCharCode( parseInt( hexValue, 16 ) );
							
							break;
					
						default:
							// couldn't unescape the sequence, so just
							// pass it through
							string += '\\' + ch;
						
					}
					
				} else {
					// didn't have to unescape, so add the character to the string
					string += ch;
					
				}
				
				// move to the next character
				nextChar();
				
			}
			
			// we read past the end of the string without closing it, which
			// is a parse error
			if ( ch == '' ) {
				parseError( "Unterminated string literal" );
			}
			
			// move past the closing " in the input string
			nextChar();
			
			// attach to the string to the token so we can return it
			token.value = string;
			
			return token;
		}
		
		/**
		 * Attempts to read a number from the input string.  Places
		 * the character location at the first character after the
		 * number.
		 * 
		 * @return The JSONToken with the number value if a number could
		 * 		be read.  Throws an error otherwise.
		 */
		private function readNumber():JSONToken {
			// the token for the number we'll try to read
			var token:JSONToken = new JSONToken();
			token.type = JSONTokenType.NUMBER;
			
			// the string to accumulate the number characters
			// into that we'll convert to a number at the end
			var input:String = "";
			
			// check for a negative number
			if ( ch == '-' ) {
				input += '-';
				nextChar();
			}
			
			// the number must start with a digit
			if ( !isDigit( ch ) )
			{
				parseError( "Expecting a digit" );
			}
			
			// 0 can only be the first digit if it
			// is followed by a decimal point
			if ( ch == '0' )
			{
				input += ch;
				nextChar();
				
				// make sure no other digits come after 0
				if ( isDigit( ch ) )
				{
					parseError( "A digit cannot immediately follow 0" );
				}
			}
			else
			{
				// read numbers while we can
				while ( isDigit( ch ) ) {
					input += ch;
					nextChar();
				}
			}
			
			// check for a decimal value
			if ( ch == '.' ) {
				input += '.';
				nextChar();
				
				// after the decimal there has to be a digit
				if ( !isDigit( ch ) )
				{
					parseError( "Expecting a digit" );
				}
				
				// read more numbers to get the decimal value
				while ( isDigit( ch ) ) {
					input += ch;
					nextChar();
				}
			}
			
			// check for scientific notation
			if ( ch == 'e' || ch == 'E' )
			{
				input += "e"
				nextChar();
				// check for sign
				if ( ch == '+' || ch == '-' )
				{
					input += ch;
					nextChar();
				}
				
				// require at least one number for the exponent
				// in this case
				if ( !isDigit( ch ) )
				{
					parseError( "Scientific notation number needs exponent value" );
				}
							
				// read in the exponent
				while ( isDigit( ch ) )
				{
					input += ch;
					nextChar();
				}
			}
			
			// convert the string to a number value
			var num:Number = Number( input );
			
			if ( isFinite( num ) && !isNaN( num ) ) {
				token.value = num;
				return token;
			} else {
				parseError( "Number " + num + " is not valid!" );
			}
            return null;
		}

		/**
		 * Reads the next character in the input
		 * string and advances the character location.
		 *
		 * @return The next character in the input string, or
		 *		null if we've read past the end.
		 */
		private function nextChar():String {
			return ch = jsonString.charAt( loc++ );
		}
		
		/**
		 * Advances the character location past any
		 * sort of white space and comments
		 */
		private function skipIgnored():void {
			skipWhite();
			skipComments();
			skipWhite();
		}
		
		/**
		 * Skips comments in the input string, either
		 * single-line or multi-line.  Advances the character
		 * to the first position after the end of the comment.
		 */
		private function skipComments():void {
			if ( ch == '/' ) {
				// Advance past the first / to find out what type of comment
				nextChar();
				switch ( ch ) {
					case '/': // single-line comment, read through end of line
						
						// Loop over the characters until we find
						// a newline or until there's no more characters left
						do {
							nextChar();
						} while ( ch != '\n' && ch != '' )
						
						// move past the \n
						nextChar();
						
						break;
					
					case '*': // multi-line comment, read until closing */

						// move past the opening *
						nextChar();
						
						// try to find a trailing */
						while ( true ) {
							if ( ch == '*' ) {
								// check to see if we have a closing /
								nextChar();
								if ( ch == '/') {
									// move past the end of the closing */
									nextChar();
									break;
								}
							} else {
								// move along, looking if the next character is a *
								nextChar();
							}
							
							// when we're here we've read past the end of 
							// the string without finding a closing */, so error
							if ( ch == '' ) {
								parseError( "Multi-line comment not closed" );
							}
						}

						break;
					
					// Can't match a comment after a /, so it's a parsing error
					default:
						parseError( "Unexpected " + ch + " encountered (expecting '/' or '*' )" );
				}
			}
			
		}
		
		
		/**
		 * Skip any whitespace in the input string and advances
		 * the character to the first character after any possible
		 * whitespace.
		 */
		private function skipWhite():void {
			
			// As long as there are spaces in the input 
			// stream, advance the current location pointer
			// past them
			while ( isWhiteSpace( ch ) ) {
				nextChar();
			}
			
		}
		
		/**
		 * Determines if a character is whitespace or not.
		 *
		 * @return True if the character passed in is a whitespace
		 *	character
		 */
		private function isWhiteSpace( ch:String ):Boolean {
			return ( ch == ' ' || ch == '\t' || ch == '\n' );
		}
		
		/**
		 * Determines if a character is a digit [0-9].
		 *
		 * @return True if the character passed in is a digit
		 */
		private function isDigit( ch:String ):Boolean {
			return ( ch >= '0' && ch <= '9' );
		}
		
		/**
		 * Determines if a character is a digit [0-9].
		 *
		 * @return True if the character passed in is a digit
		 */
		private function isHexDigit( ch:String ):Boolean {
			// get the uppercase value of ch so we only have
			// to compare the value between 'A' and 'F'
			var uc:String = ch.toUpperCase();
			
			// a hex digit is a digit of A-F, inclusive ( using
			// our uppercase constraint )
			return ( isDigit( ch ) || ( uc >= 'A' && uc <= 'F' ) );
		}
	
		/**
		 * Raises a parsing error with a specified message, tacking
		 * on the error location and the original string.
		 *
		 * @param message The message indicating why the error occurred
		 */
		public function parseError( message:String ):void {
			throw new JSONParseError( message, loc, jsonString );
		}
	}
	
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级日韩免费不卡| 欧美这里有精品| 欧美日韩国产乱码电影| 中文字幕+乱码+中文字幕一区| 亚洲va欧美va国产va天堂影院| 成人午夜电影网站| 欧美电视剧免费观看| 亚洲成人在线观看视频| www.欧美精品一二区| 久久亚洲捆绑美女| 免费人成网站在线观看欧美高清| 99re热这里只有精品免费视频| 久久综合色之久久综合| 青青国产91久久久久久| 在线观看免费成人| 亚洲人成网站色在线观看| 国产传媒日韩欧美成人| 日韩精品综合一本久道在线视频| 一区二区三区在线看| 99久久综合精品| 国产日韩精品一区二区三区在线| 激情综合网激情| 日韩一级高清毛片| 亚洲国产cao| 色婷婷精品久久二区二区蜜臂av | 91免费小视频| 国产人妖乱国产精品人妖| 精品一区二区av| 日韩免费性生活视频播放| 亚洲电影一级黄| 欧美日精品一区视频| 亚洲黄色片在线观看| 91免费国产在线| 最新国产の精品合集bt伙计| 成人深夜福利app| 中文字幕精品一区二区精品绿巨人 | 欧美不卡激情三级在线观看| 午夜精品爽啪视频| 欧美三级资源在线| 亚洲gay无套男同| 欧美日韩一区二区三区视频| 亚洲成人福利片| 欧美日韩视频第一区| 亚洲高清视频在线| 欧美少妇bbb| 亚洲国产成人porn| 7777精品伊人久久久大香线蕉经典版下载 | 亚洲精品videosex极品| 91麻豆精品在线观看| 亚洲女女做受ⅹxx高潮| 色美美综合视频| 亚洲精品成人a在线观看| 欧美撒尿777hd撒尿| 日韩电影在线看| 日韩欧美国产一区在线观看| 久久99精品久久久久久动态图| 精品福利av导航| 高清shemale亚洲人妖| 综合色天天鬼久久鬼色| 91成人在线精品| 日韩国产一二三区| 精品久久久久久综合日本欧美| 国产激情视频一区二区在线观看| 国产精品美女久久久久aⅴ| 91丨porny丨国产| 亚洲一区二区三区四区的| 7777女厕盗摄久久久| 国产一区二区三区免费看| 国产精品日产欧美久久久久| 色综合天天在线| 婷婷中文字幕综合| 欧美一区二区精美| 久久精品国产亚洲aⅴ| 国产日本一区二区| 色综合天天综合给合国产| 丝瓜av网站精品一区二区| 精品久久免费看| 99久久久无码国产精品| 天天操天天色综合| 久久久久国色av免费看影院| 91视频国产资源| 蜜臀va亚洲va欧美va天堂 | 欧美日韩国产大片| 韩国v欧美v日本v亚洲v| 亚洲欧洲三级电影| 欧美日韩精品电影| 国产老肥熟一区二区三区| 亚洲久草在线视频| 日韩精品一区二区三区在线| 99热99精品| 免费在线成人网| 日韩码欧中文字| 欧美一区二区三区白人| 成人丝袜18视频在线观看| 亚洲6080在线| 欧美极品美女视频| 欧美高清激情brazzers| 成人精品视频.| 日韩和的一区二区| 国产精品视频麻豆| 欧美一区二区三区色| 成人美女在线观看| 日本网站在线观看一区二区三区| 国产精品久久99| 日韩欧美综合一区| 在线一区二区观看| 国产精品一线二线三线| 亚洲成av人片一区二区三区| 国产视频一区二区在线| 欧美片网站yy| 一本色道久久综合亚洲91| 国产一区二区免费看| 爽好久久久欧美精品| 中文字幕制服丝袜一区二区三区| 欧美一区二区三区成人| 在线观看免费成人| 成人h动漫精品一区二| 激情深爱一区二区| 亚洲成人免费视| 亚洲免费电影在线| 亚洲国产成人在线| 日韩精品一区二区三区四区| 欧美三级午夜理伦三级中视频| 成人免费三级在线| 韩国午夜理伦三级不卡影院| 天堂va蜜桃一区二区三区漫画版| 亚洲同性gay激情无套| 久久久久国产成人精品亚洲午夜| 5月丁香婷婷综合| 在线观看不卡视频| 99免费精品在线| 久久国产生活片100| 亚洲电影中文字幕在线观看| **欧美大码日韩| 国产精品久久久久一区二区三区| 日韩免费成人网| 日韩一区二区在线免费观看| 欧美三级视频在线播放| 日本韩国视频一区二区| av成人免费在线| 成人av资源下载| 成人久久视频在线观看| 国产成人精品免费视频网站| 狠狠色综合日日| 久久国产精品99精品国产 | 综合久久久久久久| 国产午夜亚洲精品午夜鲁丝片| 91精品国产综合久久福利| 欧美日韩中文精品| 欧美性感一类影片在线播放| 在线视频亚洲一区| 欧美性猛片xxxx免费看久爱| 色婷婷综合五月| 色欲综合视频天天天| 99精品偷自拍| 99久久国产综合精品麻豆| av中文字幕不卡| 91在线丨porny丨国产| 91在线观看视频| 色狠狠一区二区| 在线观看三级视频欧美| 欧美图区在线视频| 欧美日韩国产综合草草| 欧美日韩精品久久久| 在线观看91精品国产麻豆| 日韩亚洲欧美高清| 日韩欧美国产三级电影视频| 日韩欧美一卡二卡| 精品成人一区二区三区| 久久日韩粉嫩一区二区三区| 久久九九全国免费| 中文字幕在线一区二区三区| 亚洲欧美日韩国产成人精品影院| 亚洲免费观看高清完整版在线| 亚洲夂夂婷婷色拍ww47| 亚洲va欧美va人人爽| 蜜桃av噜噜一区| 国产精品一区专区| 99久久99久久精品国产片果冻| 在线亚洲人成电影网站色www| 欧美精品一级二级三级| 日韩久久精品一区| 中文av一区特黄| 一区二区三区av电影| 日韩高清在线一区| 激情深爱一区二区| 91在线视频免费91| 欧美丰满嫩嫩电影| 亚洲精品在线观| 中文字幕在线观看一区| 亚洲午夜一区二区| 蜜桃av噜噜一区| 成人动漫一区二区在线| 欧美日免费三级在线| 久久综合色播五月| 亚洲视频一区二区在线观看| 五月天亚洲精品| 国产一区二区剧情av在线| 色综合久久99| 91精品国产91久久久久久最新毛片 |