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