17c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetpackage com.google.polo.json; 27c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 37c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet/* 47c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetCopyright (c) 2002 JSON.org 57c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 67c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetPermission is hereby granted, free of charge, to any person obtaining a copy 77c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetof this software and associated documentation files (the "Software"), to deal 87c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetin the Software without restriction, including without limitation the rights 97c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetto use, copy, modify, merge, publish, distribute, sublicense, and/or sell 107c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetcopies of the Software, and to permit persons to whom the Software is 117c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetfurnished to do so, subject to the following conditions: 127c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 137c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetThe above copyright notice and this permission notice shall be included in all 147c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetcopies or substantial portions of the Software. 157c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 167c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetThe Software shall be used for Good, not Evil. 177c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 187c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 197c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 207c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 217c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 227c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 237c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 247c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetSOFTWARE. 257c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet*/ 267c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 277c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet/** 287c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * The HTTPTokener extends the JSONTokener to provide additional methods 297c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * for the parsing of HTTP headers. 307c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @author JSON.org 317c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @version 2008-09-18 327c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 337c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetpublic class HTTPTokener extends JSONTokener { 347c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 357c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 367c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Construct an HTTPTokener from a string. 377c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param s A source string. 387c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 397c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public HTTPTokener(String s) { 407c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet super(s); 417c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 427c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 437c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 447c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 457c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Get the next token or string. This is used in parsing HTTP headers. 467c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException 477c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return A String. 487c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 497c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public String nextToken() throws JSONException { 507c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet char c; 517c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet char q; 527c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet StringBuffer sb = new StringBuffer(); 537c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet do { 547c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet c = next(); 557c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } while (Character.isWhitespace(c)); 567c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (c == '"' || c == '\'') { 577c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet q = c; 587c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet for (;;) { 597c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet c = next(); 607c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (c < ' ') { 617c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet throw syntaxError("Unterminated string."); 627c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 637c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (c == q) { 647c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return sb.toString(); 657c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 667c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet sb.append(c); 677c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 687c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 697c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet for (;;) { 707c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (c == 0 || Character.isWhitespace(c)) { 717c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return sb.toString(); 727c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 737c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet sb.append(c); 747c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet c = next(); 757c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 767c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 777c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} 78