From 02d43ba682e747851536707080fb29a082ee057a Mon Sep 17 00:00:00 2001 From: Devendra Date: Thu, 4 Jul 2013 23:53:14 +0530 Subject: [PATCH] removed json source, added cn1lib instead --- codenameone/PubnubClientSDK/build.xml | 3 +- .../lib/bccn1/{main.zip => bouncycastle.zip} | Bin codenameone/PubnubClientSDK/lib/json/json.zip | Bin 0 -> 43465 bytes .../nbproject/project.properties | 6 +- codenameone/json.cn1lib | Bin 0 -> 27784 bytes codenameone/pubnub-codenameone-3.5.2.cn1lib | Bin 71009 -> 44153 bytes codenameone/srcJson/org/json/JSONArray.java | 892 ----------- .../srcJson/org/json/JSONException.java | 27 - codenameone/srcJson/org/json/JSONObject.java | 1317 ----------------- codenameone/srcJson/org/json/JSONString.java | 18 - .../srcJson/org/json/JSONStringer.java | 76 - codenameone/srcJson/org/json/JSONTokener.java | 472 ------ codenameone/srcJson/org/json/JSONWriter.java | 320 ---- .../srcJson/org/json/StringWriter.java | 64 - codenameone/srcJson/org/json/util/XML.java | 404 ----- .../srcJson/org/json/util/XMLTokener.java | 393 ----- 16 files changed, 5 insertions(+), 3987 deletions(-) rename codenameone/PubnubClientSDK/lib/bccn1/{main.zip => bouncycastle.zip} (100%) create mode 100644 codenameone/PubnubClientSDK/lib/json/json.zip create mode 100644 codenameone/json.cn1lib delete mode 100644 codenameone/srcJson/org/json/JSONArray.java delete mode 100644 codenameone/srcJson/org/json/JSONException.java delete mode 100644 codenameone/srcJson/org/json/JSONObject.java delete mode 100644 codenameone/srcJson/org/json/JSONString.java delete mode 100644 codenameone/srcJson/org/json/JSONStringer.java delete mode 100644 codenameone/srcJson/org/json/JSONTokener.java delete mode 100644 codenameone/srcJson/org/json/JSONWriter.java delete mode 100644 codenameone/srcJson/org/json/StringWriter.java delete mode 100644 codenameone/srcJson/org/json/util/XML.java delete mode 100644 codenameone/srcJson/org/json/util/XMLTokener.java diff --git a/codenameone/PubnubClientSDK/build.xml b/codenameone/PubnubClientSDK/build.xml index 78f2a6ff2..f3fc4a5f0 100644 --- a/codenameone/PubnubClientSDK/build.xml +++ b/codenameone/PubnubClientSDK/build.xml @@ -11,7 +11,6 @@ - @@ -72,7 +71,7 @@ diff --git a/codenameone/PubnubClientSDK/lib/bccn1/main.zip b/codenameone/PubnubClientSDK/lib/bccn1/bouncycastle.zip similarity index 100% rename from codenameone/PubnubClientSDK/lib/bccn1/main.zip rename to codenameone/PubnubClientSDK/lib/bccn1/bouncycastle.zip diff --git a/codenameone/PubnubClientSDK/lib/json/json.zip b/codenameone/PubnubClientSDK/lib/json/json.zip new file mode 100644 index 0000000000000000000000000000000000000000..9293a9ea9f1c4d32ce92f4c9ffba2ab8563a748d GIT binary patch literal 43465 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 z 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 Pg8Ucj{^i3q|0(?sKZ?pE literal 0 HcmV?d00001 diff --git a/codenameone/pubnub-codenameone-3.5.2.cn1lib b/codenameone/pubnub-codenameone-3.5.2.cn1lib index 4f99279afcc9ec887319273d791eee17b9a44999..895a1f95b6d49fbf8405c590628c46aa9a9ad7e5 100644 GIT binary patch literal 44153 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 I*800;m80BvDuZZ3LhaO`~td=$sk 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 diff --git a/codenameone/srcJson/org/json/JSONArray.java b/codenameone/srcJson/org/json/JSONArray.java deleted file mode 100644 index 5b859fbba..000000000 --- a/codenameone/srcJson/org/json/JSONArray.java +++ /dev/null @@ -1,892 +0,0 @@ -package org.json; - -/* -Copyright (c) 2002 JSON.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -The Software shall be used for Good, not Evil. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -import java.io.IOException; -import java.io.Writer; -import java.util.Hashtable; -import java.util.Vector; - -/** - * A JSONArray is an ordered sequence of values. Its external text form is a - * string wrapped in square brackets with commas separating the values. The - * internal form is an object having get and opt - * methods for accessing the values by index, and put methods for - * adding or replacing values. The values can be any of these types: - * Boolean, JSONArray, JSONObject, - * Number, String, or the - * JSONObject.NULL object. - *

- * The constructor can convert a JSON text into a Java object. The - * toString method converts to JSON text. - *

- * A get method returns a value if one can be found, and throws an - * exception if one cannot be found. An opt method returns a - * default value instead of throwing an exception, and so is useful for - * obtaining optional values. - *

- * The generic get() and opt() methods return an - * object which you can cast or query for type. There are also typed - * get and opt methods that do type checking and type - * coersion for you. - *

- * The texts produced by the toString methods strictly conform to - * JSON syntax rules. The constructors are more forgiving in the texts they will - * accept: - *

    - *
  • An extra , (comma) may appear just - * before the closing bracket.
  • - *
  • The null value will be inserted when there - * is , (comma) elision.
  • - *
  • Strings may be quoted with ' (single - * quote).
  • - *
  • Strings do not need to be quoted at all if they do not begin with a quote - * or single quote, and if they do not contain leading or trailing spaces, - * and if they do not contain any of these characters: - * { } [ ] / \ : , = ; # and if they do not look like numbers - * and if they are not the reserved words true, - * false, or null.
  • - *
  • Values can be separated by ; (semicolon) as - * well as by , (comma).
  • - *
  • Numbers may have the 0- (octal) or - * 0x- (hex) prefix.
  • - *
  • Comments written in the slashshlash, slashstar, and hash conventions - * will be ignored.
  • - *
- - * @author JSON.org - * @version 2 - */ -public class JSONArray { - - - /** - * The Vector where the JSONArray's properties are kept. - */ - private Vector myArrayList; - - - /** - * Construct an empty JSONArray. - */ - public JSONArray() { - this.myArrayList = new Vector(); - } - - /** - * Construct a JSONArray from a JSONTokener. - * @param x A JSONTokener - * @throws JSONException If there is a syntax error. - */ - public JSONArray(JSONTokener x) throws JSONException { - this(); - if (x.nextClean() != '[') { - throw x.syntaxError("A JSONArray text must start with '['"); - } - if (x.nextClean() == ']') { - return; - } - x.back(); - for (;;) { - if (x.nextClean() == ',') { - x.back(); - this.myArrayList.addElement(null); - } else { - x.back(); - this.myArrayList.addElement(x.nextValue()); - } - switch (x.nextClean()) { - case ';': - case ',': - if (x.nextClean() == ']') { - return; - } - x.back(); - break; - case ']': - return; - default: - throw x.syntaxError("Expected a ',' or ']'"); - } - } - } - - - /** - * Construct a JSONArray from a source sJSON text. - * @param string A string that begins with - * [ (left bracket) - * and ends with ] (right bracket). - * @throws JSONException If there is a syntax error. - */ - public JSONArray(String string) throws JSONException { - this(new JSONTokener(string)); - } - - - /** - * Construct a JSONArray from a Collection. - * @param collection A Collection. - */ - public JSONArray(Vector collection) { - if (collection == null) { - this.myArrayList = new Vector(); - } else { - int size = collection.size(); - this.myArrayList = new Vector(size); - for (int i=0; i < size; i++) { - this.myArrayList.addElement(collection.elementAt(i)); - } - } - } - - /** - * Get the object value associated with an index. - * @param index - * The index must be between 0 and length() - 1. - * @return An object value. - * @throws JSONException If there is no value for the index. - */ - public Object get(int index) throws JSONException { - Object o = opt(index); - if (o == null) { - throw new JSONException("JSONArray[" + index + "] not found."); - } - return o; - } - - /** - * Get the boolean value associated with an index. - * The string values "true" and "false" are converted to boolean. - * - * @param index The index must be between 0 and length() - 1. - * @return The truth. - * @throws JSONException If there is no value for the index or if the - * value is not convertable to boolean. - */ - public boolean getBoolean(int index) throws JSONException { - Object o = get(index); -//#if CLDC!="1.0" -//# if (o.equals(Boolean.FALSE) || -//#else - if (o.equals(JSONObject.FALSE) || -//#endif - (o instanceof String && - ((String)o).toLowerCase().equals("false"))) { - return false; -//#if CLDC!="1.0" -//# } else if (o.equals(Boolean.TRUE) || -//#else - } else if (o.equals(JSONObject.TRUE) || -//#endif - (o instanceof String && - ((String)o).toLowerCase().equals("true"))) { - return true; - } - throw new JSONException("JSONArray[" + index + "] is not a Boolean."); - } - -//#if CLDC!="1.0" -//# /** -//# * Get the double value associated with an index. -//# * -//# * @param index The index must be between 0 and length() - 1. -//# * @return The value. -//# * @throws JSONException If the key is not found or if the value cannot -//# * be converted to a number. -//# */ -//# public double getDouble(int index) throws JSONException { -//# Object o = get(index); -//# try { -//# return Double.valueOf((String)o).doubleValue(); -//# } catch (Exception e) { -//# throw new JSONException("JSONArray[" + index + -//# "] is not a number."); -//# } -//# } -//#endif - -//#if CLDC!="1.0" -//# /** -//# * Get the int value associated with an index. -//# * -//# * @param index The index must be between 0 and length() - 1. -//# * @return The value. -//# * @throws JSONException If the key is not found or if the value cannot -//# * be converted to a number. -//# * if the value cannot be converted to a number. -//# */ -//# public int getInt(int index) throws JSONException { -//# Object o = get(index); -//# return (int)getDouble(index); -//# } -//#endif - - /** - * Get the JSONArray associated with an index. - * @param index The index must be between 0 and length() - 1. - * @return A JSONArray value. - * @throws JSONException If there is no value for the index. or if the - * value is not a JSONArray - */ - public JSONArray getJSONArray(int index) throws JSONException { - Object o = get(index); - if (o instanceof JSONArray) { - return (JSONArray)o; - } - throw new JSONException("JSONArray[" + index + - "] is not a JSONArray."); - } - - - /** - * Get the JSONObject associated with an index. - * @param index subscript - * @return A JSONObject value. - * @throws JSONException If there is no value for the index or if the - * value is not a JSONObject - */ - public JSONObject getJSONObject(int index) throws JSONException { - Object o = get(index); - if (o instanceof JSONObject) { - return (JSONObject)o; - } - throw new JSONException("JSONArray[" + index + - "] is not a JSONObject."); - } - - -//#if CLDC!="1.0" -//# /** -//# * Get the long value associated with an index. -//# * -//# * @param index The index must be between 0 and length() - 1. -//# * @return The value. -//# * @throws JSONException If the key is not found or if the value cannot -//# * be converted to a number. -//# */ -//# public long getLong(int index) throws JSONException { -//# Object o = get(index); -//# return (long)getDouble(index); -//# } -//#endif - - /** - * Get the string associated with an index. - * @param index The index must be between 0 and length() - 1. - * @return A string value. - * @throws JSONException If there is no value for the index. - */ - public String getString(int index) throws JSONException { - return get(index).toString(); - } - - - /** - * Determine if the value is null. - * @param index The index must be between 0 and length() - 1. - * @return true if the value at the index is null, or if there is no value. - */ - public boolean isNull(int index) { - return JSONObject.NULL.equals(opt(index)); - } - - - /** - * Make a string from the contents of this JSONArray. The - * separator string is inserted between each element. - * Warning: This method assumes that the data structure is acyclical. - * @param separator A string that will be inserted between the elements. - * @return a string. - * @throws JSONException If the array contains an invalid number. - */ - public String join(String separator) throws JSONException { - int len = length(); - StringBuffer sb = new StringBuffer(); - - for (int i = 0; i < len; i += 1) { - if (i > 0) { - sb.append(separator); - } - sb.append(JSONObject.valueToString(this.myArrayList.elementAt(i))); - } - return sb.toString(); - } - - - /** - * Get the number of elements in the JSONArray, included nulls. - * - * @return The length (or size). - */ - public int length() { - return this.myArrayList.size(); - } - - - /** - * Get the optional object value associated with an index. - * @param index The index must be between 0 and length() - 1. - * @return An object value, or null if there is no - * object at that index. - */ - public Object opt(int index) { - return (index < 0 || index >= length()) ? - null : this.myArrayList.elementAt(index); - } - - /** - * Get the optional boolean value associated with an index. - * It returns false if there is no value at that index, - * or if the value is not Boolean.TRUE or the String "true". - * - * @param index The index must be between 0 and length() - 1. - * @return The truth. - */ - public boolean optBoolean(int index) { - return optBoolean(index, false); - } - - /** - * Get the optional boolean value associated with an index. - * It returns the defaultValue if there is no value at that index or if - * it is not a Boolean or the String "true" or "false" (case insensitive). - * - * @param index The index must be between 0 and length() - 1. - * @param defaultValue A boolean default. - * @return The truth. - */ - public boolean optBoolean(int index, boolean defaultValue) { - try { - return getBoolean(index); - } catch (Exception e) { - return defaultValue; - } - } - -//#if CLDC!="1.0" -//# /** -//# * Get the optional double value associated with an index. -//# * NaN is returned if there is no value for the index, -//# * or if the value is not a number and cannot be converted to a number. -//# * -//# * @param index The index must be between 0 and length() - 1. -//# * @return The value. -//# */ -//# public double optDouble(int index) { -//# return optDouble(index, Double.NaN); -//# } -//#endif - -//#if CLDC!="1.0" -//# /** -//# * Get the optional double value associated with an index. -//# * The defaultValue is returned if there is no value for the index, -//# * or if the value is not a number and cannot be converted to a number. -//# * -//# * @param index subscript -//# * @param defaultValue The default value. -//# * @return The value. -//# */ -//# public double optDouble(int index, double defaultValue) { -//# try { -//# return getDouble(index); -//# } catch (Exception e) { -//# return defaultValue; -//# } -//# } -//#endif - -//#if CLDC!="1.0" -//# /** -//# * Get the optional int value associated with an index. -//# * Zero is returned if there is no value for the index, -//# * or if the value is not a number and cannot be converted to a number. -//# * -//# * @param index The index must be between 0 and length() - 1. -//# * @return The value. -//# */ -//# public int optInt(int index) { -//# return optInt(index, 0); -//# } -//#endif - -//#if CLDC!="1.0" -//# /** -//# * Get the optional int value associated with an index. -//# * The defaultValue is returned if there is no value for the index, -//# * or if the value is not a number and cannot be converted to a number. -//# * @param index The index must be between 0 and length() - 1. -//# * @param defaultValue The default value. -//# * @return The value. -//# */ -//# public int optInt(int index, int defaultValue) { -//# try { -//# return getInt(index); -//# } catch (Exception e) { -//# return defaultValue; -//# } -//# } -//#endif - - /** - * Get the optional JSONArray associated with an index. - * @param index subscript - * @return A JSONArray value, or null if the index has no value, - * or if the value is not a JSONArray. - */ - public JSONArray optJSONArray(int index) { - Object o = opt(index); - return o instanceof JSONArray ? (JSONArray)o : null; - } - - - /** - * Get the optional JSONObject associated with an index. - * Null is returned if the key is not found, or null if the index has - * no value, or if the value is not a JSONObject. - * - * @param index The index must be between 0 and length() - 1. - * @return A JSONObject value. - */ - public JSONObject optJSONObject(int index) { - Object o = opt(index); - return o instanceof JSONObject ? (JSONObject)o : null; - } - -//#if CLDC!="1.0" -//# /** -//# * Get the optional long value associated with an index. -//# * Zero is returned if there is no value for the index, -//# * or if the value is not a number and cannot be converted to a number. -//# * -//# * @param index The index must be between 0 and length() - 1. -//# * @return The value. -//# */ -//# public long optLong(int index) { -//# return optLong(index, 0); -//# } -//#endif - -//#if CLDC!="1.0" -//# /** -//# * Get the optional long value associated with an index. -//# * The defaultValue is returned if there is no value for the index, -//# * or if the value is not a number and cannot be converted to a number. -//# * @param index The index must be between 0 and length() - 1. -//# * @param defaultValue The default value. -//# * @return The value. -//# */ -//# public long optLong(int index, long defaultValue) { -//# try { -//# return getLong(index); -//# } catch (Exception e) { -//# return defaultValue; -//# } -//# } -//#endif - - /** - * Get the optional string value associated with an index. It returns an - * empty string if there is no value at that index. If the value - * is not a string and is not null, then it is coverted to a string. - * - * @param index The index must be between 0 and length() - 1. - * @return A String value. - */ - public String optString(int index) { - return optString(index, ""); - } - - - /** - * Get the optional string associated with an index. - * The defaultValue is returned if the key is not found. - * - * @param index The index must be between 0 and length() - 1. - * @param defaultValue The default value. - * @return A String value. - */ - public String optString(int index, String defaultValue) { - Object o = opt(index); - return o != null ? o.toString() : defaultValue; - } - - - /** - * Append a boolean value. This increases the array's length by one. - * - * @param value A boolean value. - * @return this. - */ - public JSONArray put(boolean value) { -//#if CLDC!="1.0" -//# put(value ? Boolean.TRUE : Boolean.FALSE); -//#else - put(value ? JSONObject.TRUE : JSONObject.FALSE); -//#endif - return this; - } - - /** - * Put a value in the JSONArray, where the value will be a - * JSONArray which is produced from a Collection. - * @param value A Collection value. - * @return this. - */ - public JSONArray put(Vector value) { - put(new JSONArray(value)); - return this; - } - - -//#if CLDC!="1.0" -//# /** -//# * Append a double value. This increases the array's length by one. -//# * -//# * @param value A double value. -//# * @throws JSONException if the value is not finite. -//# * @return this. -//# */ -//# public JSONArray put(double value) throws JSONException { -//# Double d = new Double(value); -//# JSONObject.testValidity(d); -//# put(d); -//# return this; -//# } -//#endif - - /** - * Append an int value. This increases the array's length by one. - * - * @param value An int value. - * @return this. - */ - public JSONArray put(int value) { - put(new Integer(value)); - return this; - } - - - /** - * Append an long value. This increases the array's length by one. - * - * @param value A long value. - * @return this. - */ - public JSONArray put(long value) { - put(new Long(value)); - return this; - } - - -//#ifdef PRODUCER -//# /** -//# * Put a value in the JSONArray, where the value will be a -//# * JSONObject which is produced from a Map. -//# * @param value A Map value. -//# * @return this. -//# */ -//# public JSONArray put(Hashtable value) { -//# put(new JSONObject(value)); -//# return this; -//# } -//#endif - - /** - * Append an object value. This increases the array's length by one. - * @param value An object value. The value should be a - * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the - * JSONObject.NULL object. - * @return this. - */ - public JSONArray put(Object value) { - this.myArrayList.addElement(value); - return this; - } - - - /** - * Put or replace a boolean value in the JSONArray. If the index is greater - * than the length of the JSONArray, then null elements will be added as - * necessary to pad it out. - * @param index The subscript. - * @param value A boolean value. - * @return this. - * @throws JSONException If the index is negative. - */ - public JSONArray put(int index, boolean value) throws JSONException { -//#if CLDC!="1.0" -//# put(index, value ? Boolean.TRUE : Boolean.FALSE); -//#else - put(index, value ? JSONObject.TRUE : JSONObject.FALSE); -//#endif - return this; - } - - /** - * Put a value in the JSONArray, where the value will be a - * JSONArray which is produced from a Collection. - * @param index The subscript. - * @param value A Collection value. - * @return this. - * @throws JSONException If the index is negative or if the value is - * not finite. - */ - public JSONArray put(int index, Vector value) throws JSONException { - put(index, new JSONArray(value)); - return this; - } - - -//#if CLDC!="1.0" -//# /** -//# * Put or replace a double value. If the index is greater than the length of -//# * the JSONArray, then null elements will be added as necessary to pad -//# * it out. -//# * @param index The subscript. -//# * @param value A double value. -//# * @return this. -//# * @throws JSONException If the index is negative or if the value is -//# * not finite. -//# */ -//# public JSONArray put(int index, double value) throws JSONException { -//# put(index, new Double(value)); -//# return this; -//# } -//#endif - - /** - * Put or replace an int value. If the index is greater than the length of - * the JSONArray, then null elements will be added as necessary to pad - * it out. - * @param index The subscript. - * @param value An int value. - * @return this. - * @throws JSONException If the index is negative. - */ - public JSONArray put(int index, int value) throws JSONException { - put(index, new Integer(value)); - return this; - } - - - /** - * Put or replace a long value. If the index is greater than the length of - * the JSONArray, then null elements will be added as necessary to pad - * it out. - * @param index The subscript. - * @param value A long value. - * @return this. - * @throws JSONException If the index is negative. - */ - public JSONArray put(int index, long value) throws JSONException { - put(index, new Long(value)); - return this; - } - - -//#ifdef PRODUCER -//# /** -//# * Put a value in the JSONArray, where the value will be a -//# * JSONObject which is produced from a Map. -//# * @param index The subscript. -//# * @param value The Map value. -//# * @return this. -//# * @throws JSONException If the index is negative or if the the value is -//# * an invalid number. -//# */ -//# public JSONArray put(int index, Hashtable value) throws JSONException { -//# put(index, new JSONObject(value)); -//# return this; -//# } -//#endif - - /** - * Put or replace an object value in the JSONArray. If the index is greater - * than the length of the JSONArray, then null elements will be added as - * necessary to pad it out. - * @param index The subscript. - * @param value The value to put into the array. The value should be a - * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the - * JSONObject.NULL object. - * @return this. - * @throws JSONException If the index is negative or if the the value is - * an invalid number. - */ - public JSONArray put(int index, Object value) throws JSONException { - JSONObject.testValidity(value); - if (index < 0) { - throw new JSONException("JSONArray[" + index + "] not found."); - } - if (index < length()) { - this.myArrayList.setElementAt(value, index); - } else { - while (index != length()) { - put(JSONObject.NULL); - } - put(value); - } - return this; - } - - - /** - * Produce a JSONObject by combining a JSONArray of names with the values - * of this JSONArray. - * @param names A JSONArray containing a list of key strings. These will be - * paired with the values. - * @return A JSONObject, or null if there are no names or if this JSONArray - * has no values. - * @throws JSONException If any of the names are null. - */ - public JSONObject toJSONObject(JSONArray names) throws JSONException { - if (names == null || names.length() == 0 || length() == 0) { - return null; - } - JSONObject jo = new JSONObject(); - for (int i = 0; i < names.length(); i += 1) { - jo.put(names.getString(i), this.opt(i)); - } - return jo; - } - - - /** - * Make a JSON text of this JSONArray. For compactness, no - * unnecessary whitespace is added. If it is not possible to produce a - * syntactically correct JSON text then null will be returned instead. This - * could occur if the array contains an invalid number. - *

- * Warning: This method assumes that the data structure is acyclical. - * - * @return a printable, displayable, transmittable - * representation of the array. - */ - public String toString() { - try { - return '[' + join(",") + ']'; - } catch (Exception e) { - return null; - } - } - - - /** - * Make a prettyprinted JSON text of this JSONArray. - * Warning: This method assumes that the data structure is acyclical. - * @param indentFactor The number of spaces to add to each level of - * indentation. - * @return a printable, displayable, transmittable - * representation of the object, beginning - * with [ (left bracket) and ending - * with ] (right bracket). - * @throws JSONException - */ - public String toString(int indentFactor) throws JSONException { - return toString(indentFactor, 0); - } - - - /** - * Make a prettyprinted JSON text of this JSONArray. - * Warning: This method assumes that the data structure is acyclical. - * @param indentFactor The number of spaces to add to each level of - * indentation. - * @param indent The indention of the top level. - * @return a printable, displayable, transmittable - * representation of the array. - * @throws JSONException - */ - String toString(int indentFactor, int indent) throws JSONException { - int len = length(); - if (len == 0) { - return "[]"; - } - int i; - StringBuffer sb = new StringBuffer("["); - if (len == 1) { - sb.append(JSONObject.valueToString(this.myArrayList.elementAt(0), - indentFactor, indent)); - } else { - int newindent = indent + indentFactor; - sb.append('\n'); - for (i = 0; i < len; i += 1) { - if (i > 0) { - sb.append(",\n"); - } - for (int j = 0; j < newindent; j += 1) { - sb.append(' '); - } - sb.append(JSONObject.valueToString(this.myArrayList.elementAt(i), - indentFactor, newindent)); - } - sb.append('\n'); - for (i = 0; i < indent; i += 1) { - sb.append(' '); - } - } - sb.append(']'); - return sb.toString(); - } - - - /** - * Write the contents of the JSONArray as JSON text to a writer. - * For compactness, no whitespace is added. - *

- * Warning: This method assumes that the data structure is acyclical. - * - * @return The writer. - * @throws JSONException - */ - public Writer write(Writer writer) throws JSONException { - try { - boolean b = false; - int len = length(); - - writer.write('['); - - for (int i = 0; i < len; i += 1) { - if (b) { - writer.write(','); - } - Object v = this.myArrayList.elementAt(i); - if (v instanceof JSONObject) { - ((JSONObject)v).write(writer); - } else if (v instanceof JSONArray) { - ((JSONArray)v).write(writer); - } else { - writer.write(JSONObject.valueToString(v)); - } - b = true; - } - writer.write(']'); - return writer; - } catch (IOException e) { - throw new JSONException(e); - } - } -} \ No newline at end of file diff --git a/codenameone/srcJson/org/json/JSONException.java b/codenameone/srcJson/org/json/JSONException.java deleted file mode 100644 index 535168f66..000000000 --- a/codenameone/srcJson/org/json/JSONException.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.json; - -/** - * The JSONException is thrown by the JSON.org classes then things are amiss. - * @author JSON.org - * @version 2 - */ -public class JSONException extends Exception { - private Throwable cause; - - /** - * Constructs a JSONException with an explanatory message. - * @param message Detail about the reason for the exception. - */ - public JSONException(String message) { - super(message); - } - - public JSONException(Throwable t) { - super(t.getMessage()); - this.cause = t; - } - - public Throwable getCause() { - return this.cause; - } -} diff --git a/codenameone/srcJson/org/json/JSONObject.java b/codenameone/srcJson/org/json/JSONObject.java deleted file mode 100644 index 7c6b53b5d..000000000 --- a/codenameone/srcJson/org/json/JSONObject.java +++ /dev/null @@ -1,1317 +0,0 @@ -package org.json; - -/* -Copyright (c) 2002 JSON.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -The Software shall be used for Good, not Evil. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -import java.io.IOException; -import java.io.Writer; -import java.util.Enumeration; -import java.util.Hashtable; -import java.util.Vector; - -/** - * A JSONObject is an unordered collection of name/value pairs. Its - * external form is a string wrapped in curly braces with colons between the - * names and values, and commas between the values and names. The internal form - * is an object having get and opt methods for - * accessing the values by name, and put methods for adding or - * replacing values by name. The values can be any of these types: - * Boolean, JSONArray, JSONObject, - * Number, String, or the JSONObject.NULL - * object. A JSONObject constructor can be used to convert an external form - * JSON text into an internal form whose values can be retrieved with the - * get and opt methods, or to convert values into a - * JSON text using the put and toString methods. - * A get method returns a value if one can be found, and throws an - * exception if one cannot be found. An opt method returns a - * default value instead of throwing an exception, and so is useful for - * obtaining optional values. - *

- * The generic get() and opt() methods return an - * object, which you can cast or query for type. There are also typed - * get and opt methods that do type checking and type - * coersion for you. - *

- * The put methods adds values to an object. For example,

- *     myString = new JSONObject().put("JSON", "Hello, World!").toString();
- * produces the string {"JSON": "Hello, World"}. - *

- * The texts produced by the toString methods strictly conform to - * the JSON sysntax rules. - * The constructors are more forgiving in the texts they will accept: - *

    - *
  • An extra , (comma) may appear just - * before the closing brace.
  • - *
  • Strings may be quoted with ' (single - * quote).
  • - *
  • Strings do not need to be quoted at all if they do not begin with a quote - * or single quote, and if they do not contain leading or trailing spaces, - * and if they do not contain any of these characters: - * { } [ ] / \ : , = ; # and if they do not look like numbers - * and if they are not the reserved words true, - * false, or null.
  • - *
  • Keys can be followed by = or => as well as - * by :.
  • - *
  • Values can be followed by ; (semicolon) as - * well as by , (comma).
  • - *
  • Numbers may have the 0- (octal) or - * 0x- (hex) prefix.
  • - *
  • Comments written in the slashshlash, slashstar, and hash conventions - * will be ignored.
  • - *
- * @author JSON.org - * @version 2 - */ -public class JSONObject { - -//#if CLDC=="1.0" - public static final Boolean TRUE = new Boolean(true); - public static final Boolean FALSE = new Boolean(false); -//#endif - - /** - * JSONObject.NULL is equivalent to the value that JavaScript calls null, - * whilst Java's null is equivalent to the value that JavaScript calls - * undefined. - */ - private static final class Null { - - /** - * There is only intended to be a single instance of the NULL object, - * so the clone method returns itself. - * @return NULL. - */ - protected final Object clone() { - return this; - } - - - /** - * A Null object is equal to the null value and to itself. - * @param object An object to test for nullness. - * @return true if the object parameter is the JSONObject.NULL object - * or null. - */ - public boolean equals(Object object) { - return object == null || object == this; - } - - - /** - * Get the "null" string value. - * @return The string "null". - */ - public String toString() { - return "null"; - } - } - - - /** - * The hash map where the JSONObject's properties are kept. - */ - private Hashtable myHashMap; - - - /** - * It is sometimes more convenient and less ambiguous to have a - * NULL object than to use Java's null value. - * JSONObject.NULL.equals(null) returns true. - * JSONObject.NULL.toString() returns "null". - */ - public static final Object NULL = new Null(); - - /** - * Construct an empty JSONObject. - */ - public JSONObject() { - this.myHashMap = new Hashtable(); - } - - -//#ifdef PRODUCER -//# /** -//# * Construct a JSONObject from a subset of another JSONObject. -//# * An array of strings is used to identify the keys that should be copied. -//# * Missing keys are ignored. -//# * @param jo A JSONObject. -//# * @param sa An array of strings. -//# * @exception JSONException If a value is a non-finite number. -//# */ -//# public JSONObject(JSONObject jo, String[] sa) throws JSONException { -//# this(); -//# for (int i = 0; i < sa.length; i += 1) { -//# putOpt(sa[i], jo.opt(sa[i])); -//# } -//# } -//#endif - - /** - * Construct a JSONObject from a JSONTokener. - * @param x A JSONTokener object containing the source string. - * @throws JSONException If there is a syntax error in the source string. - */ - public JSONObject(JSONTokener x) throws JSONException { - this(); - char c; - String key; - - if (x.nextClean() != '{') { - throw x.syntaxError("A JSONObject text must begin with '{'"); - } - for (;;) { - c = x.nextClean(); - switch (c) { - case 0: - throw x.syntaxError("A JSONObject text must end with '}'"); - case '}': - return; - default: - x.back(); - key = x.nextValue().toString(); - } - - /* - * The key is followed by ':'. We will also tolerate '=' or '=>'. - */ - - c = x.nextClean(); - if (c == '=') { - if (x.next() != '>') { - x.back(); - } - } else if (c != ':') { - throw x.syntaxError("Expected a ':' after a key"); - } - put(key, x.nextValue()); - - /* - * Pairs are separated by ','. We will also tolerate ';'. - */ - - switch (x.nextClean()) { - case ';': - case ',': - if (x.nextClean() == '}') { - return; - } - x.back(); - break; - case '}': - return; - default: - throw x.syntaxError("Expected a ',' or '}'"); - } - } - } - - -//#ifdef PRODUCER -//# /** -//# * Construct a JSONObject from a Map. -//# * @param map A map object that can be used to initialize the contents of -//# * the JSONObject. -//# */ -//# public JSONObject(Hashtable map) { -//# if (map == null) { -//# this.myHashMap = new Hashtable(); -//# } else { -//# this.myHashMap = new Hashtable(map.size()); -//# Enumeration keys = map.keys(); -//# while (keys.hasMoreElements()) { -//# Object key = keys.nextElement(); -//# this.myHashMap.put(key, map.get(key)); -//# } -//# } -//# } -//#endif - - /** - * Construct a JSONObject from a string. - * This is the most commonly used JSONObject constructor. - * @param string A string beginning - * with { (left brace) and ending - * with } (right brace). - * @exception JSONException If there is a syntax error in the source string. - */ - public JSONObject(String string) throws JSONException { - this(new JSONTokener(string)); - } - - - /** - * Accumulate values under a key. It is similar to the put method except - * that if there is already an object stored under the key then a - * JSONArray is stored under the key to hold all of the accumulated values. - * If there is already a JSONArray, then the new value is appended to it. - * In contrast, the put method replaces the previous value. - * @param key A key string. - * @param value An object to be accumulated under the key. - * @return this. - * @throws JSONException If the value is an invalid number - * or if the key is null. - */ - public JSONObject accumulate(String key, Object value) - throws JSONException { - testValidity(value); - Object o = opt(key); - if (o == null) { - put(key, value); - } else if (o instanceof JSONArray) { - ((JSONArray)o).put(value); - } else { - put(key, new JSONArray().put(o).put(value)); - } - return this; - } - -//#ifdef PRODUCER -//# /** -//# * Append values to the array under a key. If the key does not exist in the -//# * JSONObject, then the key is put in the JSONObject with its value being a -//# * JSONArray containing the value parameter. If the key was already -//# * associated with a JSONArray, then the value parameter is appended to it. -//# * @param key A key string. -//# * @param value An object to be accumulated under the key. -//# * @return this. -//# * @throws JSONException If the key is null or if the current value -//# * associated with the key is not a JSONArray. -//# */ -//# public JSONObject append(String key, Object value) -//# throws JSONException { -//# testValidity(value); -//# Object o = opt(key); -//# if (o == null) { -//# put(key, new JSONArray().put(value)); -//# } else if (o instanceof JSONArray) { -//# throw new JSONException("JSONObject[" + key + -//# "] is not a JSONArray."); -//# } else { -//# put(key, new JSONArray().put(o).put(value)); -//# } -//# return this; -//# } -//#endif - -//#if CLDC!="1.0" -//# /** -//# * Produce a string from a double. The string "null" will be returned if -//# * the number is not finite. -//# * @param d A double. -//# * @return A String. -//# */ -//# static public String doubleToString(double d) { -//# if (Double.isInfinite(d) || Double.isNaN(d)) { -//# return "null"; -//# } -//# -//# // Shave off trailing zeros and decimal point, if possible. -//# -//# String s = Double.toString(d); -//# if (s.indexOf('.') > 0 && s.indexOf('e') < 0 && s.indexOf('E') < 0) { -//# while (s.endsWith("0")) { -//# s = s.substring(0, s.length() - 1); -//# } -//# if (s.endsWith(".")) { -//# s = s.substring(0, s.length() - 1); -//# } -//# } -//# return s; -//# } -//#endif - - /** - * Get the value object associated with a key. - * - * @param key A key string. - * @return The object associated with the key. - * @throws JSONException if the key is not found. - */ - public Object get(String key) throws JSONException { - Object o = opt(key); - if (o == null) { - throw new JSONException("JSONObject[" + quote(key) + - "] not found."); - } - return o; - } - - - /** - * Get the boolean value associated with a key. - * - * @param key A key string. - * @return The truth. - * @throws JSONException - * if the value is not a Boolean or the String "true" or "false". - */ - public boolean getBoolean(String key) throws JSONException { - Object o = get(key); -//#if CLDC!="1.0" -//# if (o.equals(Boolean.FALSE) || -//#else - if (o.equals(FALSE) || -//#endif - (o instanceof String && - ((String)o).toLowerCase().equals("false"))) { - return false; -//#if CLDC!="1.0" -//# } else if (o.equals(Boolean.TRUE) || -//#else - } else if (o.equals(TRUE) || -//#endif - (o instanceof String && - ((String)o).toLowerCase().equals("true"))) { - return true; - } - throw new JSONException("JSONObject[" + quote(key) + - "] is not a Boolean."); - } - -//#if CLDC!="1.0" -//# /** -//# * Get the double value associated with a key. -//# * @param key A key string. -//# * @return The numeric value. -//# * @throws JSONException if the key is not found or -//# * if the value is not a Number object and cannot be converted to a number. -//# */ -//# public double getDouble(String key) throws JSONException { -//# Object o = get(key); -//# if (o instanceof Byte) { -//# return (double) ((Byte)o).byteValue(); -//# } else if (o instanceof Short) { -//# return (double) ((Short)o).shortValue(); -//# } else if (o instanceof Integer) { -//# return (double) ((Integer)o).intValue(); -//# } else if (o instanceof Long) { -//# return (double) ((Long)o).longValue(); -//# } else if (o instanceof Float) { -//# return (double) ((Float)o).floatValue(); -//# } else if (o instanceof Double) { -//# return ((Double)o).doubleValue(); -//# } else if (o instanceof String) { -//# try { -//# return Double.valueOf((String)o).doubleValue(); -//# } catch (Exception e) { -//# throw new JSONException("JSONObject[" + quote(key) + -//# "] is not a number."); -//# } -//# } -//# throw new JSONException("JSONObject[" + quote(key) + -//# "] is not a number."); -//# } -//#endif - - - /** - * Get the int value associated with a key. If the number value is too - * large for an int, it will be clipped. - * - * @param key A key string. - * @return The integer value. - * @throws JSONException if the key is not found or if the value cannot - * be converted to an integer. - */ - public int getInt(String key) throws JSONException { - Object o = get(key); - if (o instanceof Byte) { - return ((Byte)o).byteValue(); - } else if (o instanceof Short) { - return ((Short)o).shortValue(); - } else if (o instanceof Integer) { - return ((Integer)o).intValue(); - } else if (o instanceof Long) { - return (int) ((Long)o).longValue(); -//#if CLDC!="1.0" -//# } else if (o instanceof Float) { -//# return (int) ((Float)o).floatValue(); -//# } else if (o instanceof Double) { -//# return (int) ((Double)o).doubleValue(); -//# } else if (o instanceof String) { -//# return (int) getDouble(key); -//#endif - } - throw new JSONException("JSONObject[" + quote(key) + - "] is not a number."); - } - - - /** - * Get the JSONArray value associated with a key. - * - * @param key A key string. - * @return A JSONArray which is the value. - * @throws JSONException if the key is not found or - * if the value is not a JSONArray. - */ - public JSONArray getJSONArray(String key) throws JSONException { - Object o = get(key); - if (o instanceof JSONArray) { - return (JSONArray)o; - } - throw new JSONException("JSONObject[" + quote(key) + - "] is not a JSONArray."); - } - - /** - * Get the JSONObject value associated with a key. - * - * @param key A key string. - * @return A JSONObject which is the value. - * @throws JSONException if the key is not found or - * if the value is not a JSONObject. - */ - public JSONObject getJSONObject(String key) throws JSONException { - Object o = get(key); - if (o instanceof JSONObject) { - return (JSONObject)o; - } - throw new JSONException("JSONObject[" + quote(key) + - "] is not a JSONObject."); - } - - /** - * Get the long value associated with a key. If the number value is too - * long for a long, it will be clipped. - * - * @param key A key string. - * @return The long value. - * @throws JSONException if the key is not found or if the value cannot - * be converted to a long. - */ - public long getLong(String key) throws JSONException { - Object o = get(key); - if (o instanceof Byte) { - return ((Byte)o).byteValue(); - } else if (o instanceof Short) { - return ((Short)o).shortValue(); - } else if (o instanceof Integer) { - return ((Integer)o).intValue(); - } else if (o instanceof Long) { - return ((Long)o).longValue(); -//#if CLDC!="1.0" -//# } else if (o instanceof Float) { -//# return (long) ((Float)o).floatValue(); -//# } else if (o instanceof Double) { -//# return (long) ((Double)o).doubleValue(); -//# } else if (o instanceof String) { -//# return (long) getDouble(key); -//#endif - } - throw new JSONException("JSONObject[" + quote(key) + - "] is not a number."); - } - - /** - * Get the string associated with a key. - * - * @param key A key string. - * @return A string which is the value. - * @throws JSONException if the key is not found. - */ - public String getString(String key) throws JSONException { - return get(key).toString(); - } - - /** - * Determine if the JSONObject contains a specific key. - * @param key A key string. - * @return true if the key exists in the JSONObject. - */ - public boolean has(String key) { - return this.myHashMap.containsKey(key); - } - - - /** - * Determine if the value associated with the key is null or if there is - * no value. - * @param key A key string. - * @return true if there is no value associated with the key or if - * the value is the JSONObject.NULL object. - */ - public boolean isNull(String key) { - return JSONObject.NULL.equals(opt(key)); - } - - - /** - * Get an enumeration of the keys of the JSONObject. - * - * @return An iterator of the keys. - */ - public Enumeration keys() { - return this.myHashMap.keys(); - } - - - /** - * Get the number of keys stored in the JSONObject. - * - * @return The number of keys in the JSONObject. - */ - public int length() { - return this.myHashMap.size(); - } - - - /** - * Produce a JSONArray containing the names of the elements of this - * JSONObject. - * @return A JSONArray containing the key strings, or null if the JSONObject - * is empty. - */ - public JSONArray names() { - JSONArray ja = new JSONArray(); - Enumeration keys = keys(); - while (keys.hasMoreElements()) { - ja.put(keys.nextElement()); - } - return ja.length() == 0 ? null : ja; - } - - - /** - * Shave off trailing zeros and decimal point, if possible. - */ - static public String trimNumber(String s) { - if (s.indexOf('.') > 0 && s.indexOf('e') < 0 && s.indexOf('E') < 0) { - while (s.endsWith("0")) { - s = s.substring(0, s.length() - 1); - } - if (s.endsWith(".")) { - s = s.substring(0, s.length() - 1); - } - } - return s; - } - - /** - * Produce a string from a Number. - * @param n A Number - * @return A String. - * @throws JSONException If n is a non-finite number. - */ - static public String numberToString(Object n) - throws JSONException { - if (n == null) { - throw new JSONException("Null pointer"); - } - testValidity(n); - return trimNumber(n.toString()); - } - - /** - * Get an optional value associated with a key. - * @param key A key string. - * @return An object which is the value, or null if there is no value. - */ - public Object opt(String key) { - return key == null ? null : this.myHashMap.get(key); - } - - - /** - * Get an optional boolean associated with a key. - * It returns false if there is no such key, or if the value is not - * Boolean.TRUE or the String "true". - * - * @param key A key string. - * @return The truth. - */ - public boolean optBoolean(String key) { - return optBoolean(key, false); - } - - - /** - * Get an optional boolean associated with a key. - * It returns the defaultValue if there is no such key, or if it is not - * a Boolean or the String "true" or "false" (case insensitive). - * - * @param key A key string. - * @param defaultValue The default. - * @return The truth. - */ - public boolean optBoolean(String key, boolean defaultValue) { - try { - return getBoolean(key); - } catch (Exception e) { - return defaultValue; - } - } - - - /** - * Put a key/value pair in the JSONObject, where the value will be a - * JSONArray which is produced from a Collection. - * @param key A key string. - * @param value A Collection value. - * @return this. - * @throws JSONException - */ - public JSONObject put(String key, Vector value) throws JSONException { - put(key, new JSONArray(value)); - return this; - } - - -//#if CLDC!="1.0" -//# /** -//# * Get an optional double associated with a key, -//# * or NaN if there is no such key or if its value is not a number. -//# * If the value is a string, an attempt will be made to evaluate it as -//# * a number. -//# * -//# * @param key A string which is the key. -//# * @return An object which is the value. -//# */ -//# public double optDouble(String key) { -//# return optDouble(key, Double.NaN); -//# } -//#endif - -//#if CLDC!="1.0" -//# /** -//# * Get an optional double associated with a key, or the -//# * defaultValue if there is no such key or if its value is not a number. -//# * If the value is a string, an attempt will be made to evaluate it as -//# * a number. -//# * -//# * @param key A key string. -//# * @param defaultValue The default. -//# * @return An object which is the value. -//# */ -//# public double optDouble(String key, double defaultValue) { -//# try { -//# Object o = opt(key); -//# return Double.parseDouble((String)o); -//# } catch (Exception e) { -//# return defaultValue; -//# } -//# } -//#endif - - /** - * Get an optional int value associated with a key, - * or zero if there is no such key or if the value is not a number. - * If the value is a string, an attempt will be made to evaluate it as - * a number. - * - * @param key A key string. - * @return An object which is the value. - */ - public int optInt(String key) { - return optInt(key, 0); - } - - - /** - * Get an optional int value associated with a key, - * or the default if there is no such key or if the value is not a number. - * If the value is a string, an attempt will be made to evaluate it as - * a number. - * - * @param key A key string. - * @param defaultValue The default. - * @return An object which is the value. - */ - public int optInt(String key, int defaultValue) { - try { - return getInt(key); - } catch (Exception e) { - return defaultValue; - } - } - - - /** - * Get an optional JSONArray associated with a key. - * It returns null if there is no such key, or if its value is not a - * JSONArray. - * - * @param key A key string. - * @return A JSONArray which is the value. - */ - public JSONArray optJSONArray(String key) { - Object o = opt(key); - return o instanceof JSONArray ? (JSONArray)o : null; - } - - - /** - * Get an optional JSONObject associated with a key. - * It returns null if there is no such key, or if its value is not a - * JSONObject. - * - * @param key A key string. - * @return A JSONObject which is the value. - */ - public JSONObject optJSONObject(String key) { - Object o = opt(key); - return o instanceof JSONObject ? (JSONObject)o : null; - } - - - /** - * Get an optional long value associated with a key, - * or zero if there is no such key or if the value is not a number. - * If the value is a string, an attempt will be made to evaluate it as - * a number. - * - * @param key A key string. - * @return An object which is the value. - */ - public long optLong(String key) { - return optLong(key, 0); - } - - - /** - * Get an optional long value associated with a key, - * or the default if there is no such key or if the value is not a number. - * If the value is a string, an attempt will be made to evaluate it as - * a number. - * - * @param key A key string. - * @param defaultValue The default. - * @return An object which is the value. - */ - public long optLong(String key, long defaultValue) { - try { - return getLong(key); - } catch (Exception e) { - return defaultValue; - } - } - - - /** - * Get an optional string associated with a key. - * It returns an empty string if there is no such key. If the value is not - * a string and is not null, then it is coverted to a string. - * - * @param key A key string. - * @return A string which is the value. - */ - public String optString(String key) { - return optString(key, ""); - } - - - /** - * Get an optional string associated with a key. - * It returns the defaultValue if there is no such key. - * - * @param key A key string. - * @param defaultValue The default. - * @return A string which is the value. - */ - public String optString(String key, String defaultValue) { - Object o = opt(key); - return o != null ? o.toString() : defaultValue; - } - - - /** - * Put a key/boolean pair in the JSONObject. - * - * @param key A key string. - * @param value A boolean which is the value. - * @return this. - * @throws JSONException If the key is null. - */ - public JSONObject put(String key, boolean value) throws JSONException { -//#if CLDC!="1.0" -//# put(key, value ? Boolean.TRUE : Boolean.FALSE); -//#else - put(key, value ? TRUE : FALSE); -//#endif - return this; - } - - -//#if CLDC!="1.0" -//# /** -//# * Put a key/double pair in the JSONObject. -//# * -//# * @param key A key string. -//# * @param value A double which is the value. -//# * @return this. -//# * @throws JSONException If the key is null or if the number is invalid. -//# */ -//# public JSONObject put(String key, double value) throws JSONException { -//# put(key, new Double(value)); -//# return this; -//# } -//#endif - - /** - * Put a key/int pair in the JSONObject. - * - * @param key A key string. - * @param value An int which is the value. - * @return this. - * @throws JSONException If the key is null. - */ - public JSONObject put(String key, int value) throws JSONException { - put(key, new Integer(value)); - return this; - } - - - /** - * Put a key/long pair in the JSONObject. - * - * @param key A key string. - * @param value A long which is the value. - * @return this. - * @throws JSONException If the key is null. - */ - public JSONObject put(String key, long value) throws JSONException { - put(key, new Long(value)); - return this; - } - - -//#ifdef PRODUCER -//# /** -//# * Put a key/value pair in the JSONObject, where the value will be a -//# * JSONObject which is produced from a Map. -//# * @param key A key string. -//# * @param value A Map value. -//# * @return this. -//# * @throws JSONException -//# */ -//# public JSONObject put(String key, Hashtable value) throws JSONException { -//# put(key, new JSONObject(value)); -//# return this; -//# } -//#endif - - /** - * Put a key/value pair in the JSONObject. If the value is null, - * then the key will be removed from the JSONObject if it is present. - * @param key A key string. - * @param value An object which is the value. It should be of one of these - * types: Boolean, Double, Integer, JSONArray, JSONObject, Long, String, - * or the JSONObject.NULL object. - * @return this. - * @throws JSONException If the value is non-finite number - * or if the key is null. - */ - public JSONObject put(String key, Object value) throws JSONException { - if (key == null) { - throw new JSONException("Null key."); - } - if (value != null) { - testValidity(value); - this.myHashMap.put(key, value); - } else { - remove(key); - } - return this; - } - - /** - * Put a key/value pair in the JSONObject, but only if the - * key and the value are both non-null. - * @param key A key string. - * @param value An object which is the value. It should be of one of these - * types: Boolean, Double, Integer, JSONArray, JSONObject, Long, String, - * or the JSONObject.NULL object. - * @return this. - * @throws JSONException If the value is a non-finite number. - */ - public JSONObject putOpt(String key, Object value) throws JSONException { - if (key != null && value != null) { - put(key, value); - } - return this; - } - - /** - * Produce a string in double quotes with backslash sequences in all the - * right places. A backslash will be inserted within - * Warning: This method assumes that the data structure is acyclical. - * - * @return a printable, displayable, portable, transmittable - * representation of the object, beginning - * with { (left brace) and ending - * with } (right brace). - */ - public String toString() { - try { - Enumeration keys = keys(); - StringBuffer sb = new StringBuffer("{"); - - while (keys.hasMoreElements()) { - if (sb.length() > 1) { - sb.append(','); - } - Object o = keys.nextElement(); - sb.append(quote(o.toString())); - sb.append(':'); - sb.append(valueToString(this.myHashMap.get(o))); - } - sb.append('}'); - return sb.toString(); - } catch (Exception e) { - return null; - } - } - - - /** - * Make a prettyprinted JSON text of this JSONObject. - *

- * Warning: This method assumes that the data structure is acyclical. - * @param indentFactor The number of spaces to add to each level of - * indentation. - * @return a printable, displayable, portable, transmittable - * representation of the object, beginning - * with { (left brace) and ending - * with } (right brace). - * @throws JSONException If the object contains an invalid number. - */ - public String toString(int indentFactor) throws JSONException { - return toString(indentFactor, 0); - } - - - /** - * Make a prettyprinted JSON text of this JSONObject. - *

- * Warning: This method assumes that the data structure is acyclical. - * @param indentFactor The number of spaces to add to each level of - * indentation. - * @param indent The indentation of the top level. - * @return a printable, displayable, transmittable - * representation of the object, beginning - * with { (left brace) and ending - * with } (right brace). - * @throws JSONException If the object contains an invalid number. - */ - String toString(int indentFactor, int indent) throws JSONException { - int i; - int n = length(); - if (n == 0) { - return "{}"; - } - Enumeration keys = keys(); - StringBuffer sb = new StringBuffer("{"); - int newindent = indent + indentFactor; - Object o; - if (n == 1) { - o = keys.nextElement(); - sb.append(quote(o.toString())); - sb.append(": "); - sb.append(valueToString(this.myHashMap.get(o), indentFactor, - indent)); - } else { - while (keys.hasMoreElements()) { - o = keys.nextElement(); - if (sb.length() > 1) { - sb.append(",\n"); - } else { - sb.append('\n'); - } - for (i = 0; i < newindent; i += 1) { - sb.append(' '); - } - sb.append(quote(o.toString())); - sb.append(": "); - sb.append(valueToString(this.myHashMap.get(o), indentFactor, - newindent)); - } - if (sb.length() > 1) { - sb.append('\n'); - for (i = 0; i < indent; i += 1) { - sb.append(' '); - } - } - } - sb.append('}'); - return sb.toString(); - } - - - /** - * Make a JSON text of an Object value. If the object has an - * value.toJSONString() method, then that method will be used to produce - * the JSON text. The method is required to produce a strictly - * conforming text. If the object does not contain a toJSONString - * method (which is the most common case), then a text will be - * produced by the rules. - *

- * Warning: This method assumes that the data structure is acyclical. - * @param value The value to be serialized. - * @return a printable, displayable, transmittable - * representation of the object, beginning - * with { (left brace) and ending - * with } (right brace). - * @throws JSONException If the value is or contains an invalid number. - */ - static String valueToString(Object value) throws JSONException { - if (value == null || value.equals(null)) { - return "null"; - } - if (value instanceof JSONString) { - Object o; - try { - o = ((JSONString)value).toJSONString(); - } catch (Exception e) { - throw new JSONException(e); - } - if (o instanceof String) { - return (String)o; - } - throw new JSONException("Bad value from toJSONString: " + o); - } -//#if CLDC!="1.0" -//# if (value instanceof Float || value instanceof Double || -//#else - if ( -//#endif - value instanceof Byte || value instanceof Short || - value instanceof Integer || value instanceof Long) { - return numberToString(value); - } - if (value instanceof Boolean || value instanceof JSONObject || - value instanceof JSONArray) { - return value.toString(); - } - return quote(value.toString()); - } - - - /** - * Make a prettyprinted JSON text of an object value. - *

- * Warning: This method assumes that the data structure is acyclical. - * @param value The value to be serialized. - * @param indentFactor The number of spaces to add to each level of - * indentation. - * @param indent The indentation of the top level. - * @return a printable, displayable, transmittable - * representation of the object, beginning - * with { (left brace) and ending - * with } (right brace). - * @throws JSONException If the object contains an invalid number. - */ - static String valueToString(Object value, int indentFactor, int indent) - throws JSONException { - if (value == null || value.equals(null)) { - return "null"; - } - try { - if (value instanceof JSONString) { - Object o = ((JSONString)value).toJSONString(); - if (o instanceof String) { - return (String)o; - } - } - } catch (Exception e) { - /* forget about it */ - } -//#if CLDC!="1.0" -//# if (value instanceof Float || value instanceof Double || -//#else - if ( -//#endif - value instanceof Byte || value instanceof Short || - value instanceof Integer || value instanceof Long) { - return numberToString(value); - } - if (value instanceof Boolean) { - return value.toString(); - } - if (value instanceof JSONObject) { - return ((JSONObject)value).toString(indentFactor, indent); - } - if (value instanceof JSONArray) { - return ((JSONArray)value).toString(indentFactor, indent); - } - return quote(value.toString()); - } - - - /** - * Write the contents of the JSONObject as JSON text to a writer. - * For compactness, no whitespace is added. - *

- * Warning: This method assumes that the data structure is acyclical. - * - * @return The writer. - * @throws JSONException - */ - public Writer write(Writer writer) throws JSONException { - try { - boolean b = false; - Enumeration keys = keys(); - writer.write('{'); - - while (keys.hasMoreElements()) { - if (b) { - writer.write(','); - } - Object k = keys.nextElement(); - writer.write(quote(k.toString())); - writer.write(':'); - Object v = this.myHashMap.get(k); - if (v instanceof JSONObject) { - ((JSONObject)v).write(writer); - } else if (v instanceof JSONArray) { - ((JSONArray)v).write(writer); - } else { - writer.write(valueToString(v)); - } - b = true; - } - writer.write('}'); - return writer; - } catch (IOException e) { - throw new JSONException(e); - } - } -} \ No newline at end of file diff --git a/codenameone/srcJson/org/json/JSONString.java b/codenameone/srcJson/org/json/JSONString.java deleted file mode 100644 index 1f2d77dd1..000000000 --- a/codenameone/srcJson/org/json/JSONString.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.json; -/** - * The JSONString interface allows a toJSONString() - * method so that a class can change the behavior of - * JSONObject.toString(), JSONArray.toString(), - * and JSONWriter.value(Object). The - * toJSONString method will be used instead of the default behavior - * of using the Object's toString() method and quoting the result. - */ -public interface JSONString { - /** - * The toJSONString method allows a class to produce its own JSON - * serialization. - * - * @return A strictly syntactically correct JSON text. - */ - public String toJSONString(); -} diff --git a/codenameone/srcJson/org/json/JSONStringer.java b/codenameone/srcJson/org/json/JSONStringer.java deleted file mode 100644 index 2f29ecd9b..000000000 --- a/codenameone/srcJson/org/json/JSONStringer.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.json; - -/* -Copyright (c) 2006 JSON.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -The Software shall be used for Good, not Evil. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -/** - * JSONStringer provides a quick and convenient way of producing JSON text. - * The texts produced strictly conform to JSON syntax rules. No whitespace is - * added, so the results are ready for transmission or storage. Each instance of - * JSONStringer can produce one JSON text. - *

- * A JSONStringer instance provides a value method for appending - * values to the - * text, and a key - * method for adding keys before values in objects. There are array - * and endArray methods that make and bound array values, and - * object and endObject methods which make and bound - * object values. All of these methods return the JSONWriter instance, - * permitting cascade style. For example,

- * myString = new JSONStringer()
- *     .object()
- *         .key("JSON")
- *         .value("Hello, World!")
- *     .endObject()
- *     .toString();
which produces the string
- * {"JSON":"Hello, World!"}
- *

- * The first method called must be array or object. - * There are no methods for adding commas or colons. JSONStringer adds them for - * you. Objects and arrays can be nested up to 20 levels deep. - *

- * This can sometimes be easier than using a JSONObject to build a string. - * @author JSON.org - * @version 2 - */ -public class JSONStringer extends JSONWriter { - /** - * Make a fresh JSONStringer. It can be used to build one JSON text. - */ - public JSONStringer() { - super(new StringWriter()); - } - - /** - * Return the JSON text. This method is used to obtain the product of the - * JSONStringer instance. It will return null if there was a - * problem in the construction of the JSON text (such as the calls to - * array were not properly balanced with calls to - * endArray). - * @return The JSON text. - */ - public String toString() { - return this.mode == 'd' ? this.writer.toString() : null; - } -} diff --git a/codenameone/srcJson/org/json/JSONTokener.java b/codenameone/srcJson/org/json/JSONTokener.java deleted file mode 100644 index bb30b6ba6..000000000 --- a/codenameone/srcJson/org/json/JSONTokener.java +++ /dev/null @@ -1,472 +0,0 @@ -package org.json; - -/* -Copyright (c) 2002 JSON.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -The Software shall be used for Good, not Evil. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - */ - -/** - * A JSONTokener takes a source string and extracts characters and tokens from - * it. It is used by the JSONObject and JSONArray constructors to parse - * JSON source strings. - * @author JSON.org - * @version 2 - */ -public class JSONTokener { - - /** - * The index of the next character. - */ - private int myIndex; - - - /** - * The source string being tokenized. - */ - private String mySource; - - - /** - * Construct a JSONTokener from a string. - * - * @param s A source string. - */ - public JSONTokener(String s) { - this.myIndex = 0; - this.mySource = s; - } - - - /** - * Back up one character. This provides a sort of lookahead capability, - * so that you can test for a digit or letter before attempting to parse - * the next number or identifier. - */ - public void back() { - if (this.myIndex > 0) { - this.myIndex -= 1; - } - } - - - - /** - * Get the hex value of a character (base16). - * @param c A character between '0' and '9' or between 'A' and 'F' or - * between 'a' and 'f'. - * @return An int between 0 and 15, or -1 if c was not a hex digit. - */ - public static int dehexchar(char c) { - if (c >= '0' && c <= '9') { - return c - '0'; - } - if (c >= 'A' && c <= 'F') { - return c - ('A' - 10); - } - if (c >= 'a' && c <= 'f') { - return c - ('a' - 10); - } - return -1; - } - - - /** - * Determine if the source string still contains characters that next() - * can consume. - * @return true if not yet at the end of the source. - */ - public boolean more() { - return this.myIndex < this.mySource.length(); - } - - - /** - * Get the next character in the source string. - * - * @return The next character, or 0 if past the end of the source string. - */ - public char next() { - if (more()) { - char c = this.mySource.charAt(this.myIndex); - this.myIndex += 1; - return c; - } - return 0; - } - - - /** - * Consume the next character, and check that it matches a specified - * character. - * @param c The character to match. - * @return The character. - * @throws JSONException if the character does not match. - */ - public char next(char c) throws JSONException { - char n = next(); - if (n != c) { - throw syntaxError("Expected '" + c + "' and instead saw '" + - n + "'."); - } - return n; - } - - - /** - * Get the next n characters. - * - * @param n The number of characters to take. - * @return A string of n characters. - * @throws JSONException - * Substring bounds error if there are not - * n characters remaining in the source string. - */ - public String next(int n) throws JSONException { - int i = this.myIndex; - int j = i + n; - if (j >= this.mySource.length()) { - throw syntaxError("Substring bounds error"); - } - this.myIndex += n; - return this.mySource.substring(i, j); - } - - - /** - * Get the next char in the string, skipping whitespace - * and comments (slashslash, slashstar, and hash). - * @throws JSONException - * @return A character, or 0 if there are no more characters. - */ - public char nextClean() throws JSONException { - for (;;) { - char c = next(); - if (c == '/') { - switch (next()) { - case '/': - do { - c = next(); - } while (c != '\n' && c != '\r' && c != 0); - break; - case '*': - for (;;) { - c = next(); - if (c == 0) { - throw syntaxError("Unclosed comment."); - } - if (c == '*') { - if (next() == '/') { - break; - } - back(); - } - } - break; - default: - back(); - return '/'; - } - } else if (c == '#') { - do { - c = next(); - } while (c != '\n' && c != '\r' && c != 0); - } else if (c == 0 || c > ' ') { - return c; - } - } - } - - - /** - * Return the characters up to the next close quote character. - * Backslash processing is done. The formal JSON format does not - * allow strings in single quotes, but an implementation is allowed to - * accept them. - * @param quote The quoting character, either - * " (double quote) or - * ' (single quote). - * @return A String. - * @throws JSONException Unterminated string. - */ - public String nextString(char quote) throws JSONException { - char c; - StringBuffer sb = new StringBuffer(); - for (;;) { - c = next(); - switch (c) { - case 0: - case '\n': - case '\r': - throw syntaxError("Unterminated string"); - case '\\': - c = next(); - switch (c) { - case 'b': - sb.append('\b'); - break; - case 't': - sb.append('\t'); - break; - case 'n': - sb.append('\n'); - break; - case 'f': - sb.append('\f'); - break; - case 'r': - sb.append('\r'); - break; - case 'u': - sb.append((char)Integer.parseInt(next(4), 16)); - break; - case 'x' : - sb.append((char) Integer.parseInt(next(2), 16)); - break; - default: - sb.append(c); - } - break; - default: - if (c == quote) { - return sb.toString(); - } - sb.append(c); - } - } - } - - - /** - * Get the text up but not including the specified character or the - * end of line, whichever comes first. - * @param d A delimiter character. - * @return A string. - */ - public String nextTo(char d) { - StringBuffer sb = new StringBuffer(); - for (;;) { - char c = next(); - if (c == d || c == 0 || c == '\n' || c == '\r') { - if (c != 0) { - back(); - } - return sb.toString().trim(); - } - sb.append(c); - } - } - - - /** - * Get the text up but not including one of the specified delimeter - * characters or the end of line, whichever comes first. - * @param delimiters A set of delimiter characters. - * @return A string, trimmed. - */ - public String nextTo(String delimiters) { - char c; - StringBuffer sb = new StringBuffer(); - for (;;) { - c = next(); - if (delimiters.indexOf(c) >= 0 || c == 0 || - c == '\n' || c == '\r') { - if (c != 0) { - back(); - } - return sb.toString().trim(); - } - sb.append(c); - } - } - - - /** - * Get the next value. The value can be a Boolean, Double, Integer, - * JSONArray, JSONObject, Long, or String, or the JSONObject.NULL object. - * @throws JSONException If syntax error. - * - * @return An object. - */ - public Object nextValue() throws JSONException { - char c = nextClean(); - String s; - - switch (c) { - case '"': - case '\'': - return nextString(c); - case '{': - back(); - return new JSONObject(this); - case '[': - back(); - return new JSONArray(this); - } - - /* - * Handle unquoted text. This could be the values true, false, or - * null, or it can be a number. An implementation (such as this one) - * is allowed to also accept non-standard forms. - * - * Accumulate characters until we reach the end of the text or a - * formatting character. - */ - - StringBuffer sb = new StringBuffer(); - char b = c; - while (c >= ' ' && ",:]}/\\\"[{;=#".indexOf(c) < 0) { - sb.append(c); - c = next(); - } - back(); - - /* - * If it is true, false, or null, return the proper value. - */ - - s = sb.toString().trim(); - if (s.equals("")) { - throw syntaxError("Missing value."); - } - if (s.toLowerCase().equals("true")) { -//#if CLDC!="1.0" -//# return Boolean.TRUE; - //#else - return JSONObject.TRUE; - //#endif - } - if (s.toLowerCase().equals("false")) { -//#if CLDC!="1.0" -//# return Boolean.FALSE; - //#else - return JSONObject.FALSE; - //#endif - } - if (s.toLowerCase().equals("null")) { - return JSONObject.NULL; - } - - /* - * If it might be a number, try converting it. We support the 0- and 0x- - * conventions. If a number cannot be produced, then the value will just - * be a string. Note that the 0-, 0x-, plus, and implied string - * conventions are non-standard. A JSON parser is free to accept - * non-JSON forms as long as it accepts all correct JSON forms. - */ - - if ((b >= '0' && b <= '9') || b == '.' || b == '-' || b == '+') { - if (b == '0') { - if (s.length() > 2 && - (s.charAt(1) == 'x' || s.charAt(1) == 'X')) { - try { - return new Integer(Integer.parseInt(s.substring(2), - 16)); - } catch (Exception e) { - /* Ignore the error */ - } - } else { - try { - return new Integer(Integer.parseInt(s, 8)); - } catch (Exception e) { - /* Ignore the error */ - } - } - } - try { - return Integer.valueOf(s); - } catch (Exception e) { - try { - return new Long(Long.parseLong(s)); - } catch (Exception f) { -//#if CLDC!="1.0" -//# try { -//# return Double.valueOf(s); -//# } catch (Exception g) { -//# return s; -//# } -//#else - return s; -//#endif - } - } - } - return s; - } - - - /** - * Skip characters until the next character is the requested character. - * If the requested character is not found, no characters are skipped. - * @param to A character to skip to. - * @return The requested character, or zero if the requested character - * is not found. - */ - public char skipTo(char to) { - char c; - int index = this.myIndex; - do { - c = next(); - if (c == 0) { - this.myIndex = index; - return c; - } - } while (c != to); - back(); - return c; - } - - - /** - * Skip characters until past the requested string. - * If it is not found, we are left at the end of the source. - * @param to A string to skip past. - */ - public void skipPast(String to) { - this.myIndex = this.mySource.indexOf(to, this.myIndex); - if (this.myIndex < 0) { - this.myIndex = this.mySource.length(); - } else { - this.myIndex += to.length(); - } - } - - - /** - * Make a JSONException to signal a syntax error. - * - * @param message The error message. - * @return A JSONException object, suitable for throwing - */ - public JSONException syntaxError(String message) { - return new JSONException(message + toString()); - } - - - /** - * Make a printable string of this JSONTokener. - * - * @return " at character [this.myIndex] of [this.mySource]" - */ - public String toString() { - return " at character " + this.myIndex + " of " + this.mySource; - } -} \ No newline at end of file diff --git a/codenameone/srcJson/org/json/JSONWriter.java b/codenameone/srcJson/org/json/JSONWriter.java deleted file mode 100644 index 189db462d..000000000 --- a/codenameone/srcJson/org/json/JSONWriter.java +++ /dev/null @@ -1,320 +0,0 @@ -package org.json; - -import java.io.IOException; -import java.io.Writer; - -/* -Copyright (c) 2006 JSON.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -The Software shall be used for Good, not Evil. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -/** - * JSONWriter provides a quick and convenient way of producing JSON text. - * The texts produced strictly conform to JSON syntax rules. No whitespace is - * added, so the results are ready for transmission or storage. Each instance of - * JSONWriter can produce one JSON text. - *

- * A JSONWriter instance provides a value method for appending - * values to the - * text, and a key - * method for adding keys before values in objects. There are array - * and endArray methods that make and bound array values, and - * object and endObject methods which make and bound - * object values. All of these methods return the JSONWriter instance, - * permitting a cascade style. For example,

- * new JSONWriter(myWriter)
- *     .object()
- *         .key("JSON")
- *         .value("Hello, World!")
- *     .endObject();
which writes
- * {"JSON":"Hello, World!"}
- *

- * The first method called must be array or object. - * There are no methods for adding commas or colons. JSONWriter adds them for - * you. Objects and arrays can be nested up to 20 levels deep. - *

- * This can sometimes be easier than using a JSONObject to build a string. - * @author JSON.org - * @version 2 - */ -public class JSONWriter { - private static final int maxdepth = 20; - - /** - * The comma flag determines if a comma should be output before the next - * value. - */ - private boolean comma; - - /** - * The current mode. Values: - * 'a' (array), - * 'd' (done), - * 'i' (initial), - * 'k' (key), - * 'o' (object). - */ - protected char mode; - - /** - * The object/array stack. - */ - private char stack[]; - - /** - * The stack top index. A value of 0 indicates that the stack is empty. - */ - private int top; - - /** - * The writer that will receive the output. - */ - protected Writer writer; - - /** - * Make a fresh JSONWriter. It can be used to build one JSON text. - */ - public JSONWriter(Writer w) { - this.comma = false; - this.mode = 'i'; - this.stack = new char[maxdepth]; - this.top = 0; - this.writer = w; - } - - /** - * Append a value. - * @param s A string value. - * @return this - * @throws JSONException If the value is out of sequence. - */ - private JSONWriter append(String s) throws JSONException { - if (s == null) { - throw new JSONException("Null pointer"); - } - if (this.mode == 'o' || this.mode == 'a') { - try { - if (this.comma && this.mode == 'a') { - this.writer.write(','); - } - this.writer.write(s); - } catch (IOException e) { - throw new JSONException(e); - } - if (this.mode == 'o') { - this.mode = 'k'; - } - this.comma = true; - return this; - } - throw new JSONException("Value out of sequence."); - } - - /** - * Begin appending a new array. All values until the balancing - * endArray will be appended to this array. The - * endArray method must be called to mark the array's end. - * @return this - * @throws JSONException If the nesting is too deep, or if the object is - * started in the wrong place (for example as a key or after the end of the - * outermost array or object). - */ - public JSONWriter array() throws JSONException { - if (this.mode == 'i' || this.mode == 'o' || this.mode == 'a') { - this.push('a'); - this.append("["); - this.comma = false; - return this; - } - throw new JSONException("Misplaced array."); - } - - /** - * End something. - * @param m Mode - * @param c Closing character - * @return this - * @throws JSONException If unbalanced. - */ - private JSONWriter end(char m, char c) throws JSONException { - if (this.mode != m) { - throw new JSONException(m == 'o' ? "Misplaced endObject." : - "Misplaced endArray."); - } - this.pop(m); - try { - this.writer.write(c); - } catch (IOException e) { - throw new JSONException(e); - } - this.comma = true; - return this; - } - - /** - * End an array. This method most be called to balance calls to - * array. - * @return this - * @throws JSONException If incorrectly nested. - */ - public JSONWriter endArray() throws JSONException { - return this.end('a', ']'); - } - - /** - * End an object. This method most be called to balance calls to - * object. - * @return this - * @throws JSONException If incorrectly nested. - */ - public JSONWriter endObject() throws JSONException { - return this.end('k', '}'); - } - - /** - * Append a key. The key will be associated with the next value. In an - * object, every value must be preceded by a key. - * @param s A key string. - * @return this - * @throws JSONException If the key is out of place. For example, keys - * do not belong in arrays or if the key is null. - */ - public JSONWriter key(String s) throws JSONException { - if (s == null) { - throw new JSONException("Null key."); - } - if (this.mode == 'k') { - try { - if (this.comma) { - this.writer.write(','); - } - this.writer.write(JSONObject.quote(s)); - this.writer.write(':'); - this.comma = false; - this.mode = 'o'; - return this; - } catch (IOException e) { - throw new JSONException(e); - } - } - throw new JSONException("Misplaced key."); - } - - - /** - * Begin appending a new object. All keys and values until the balancing - * endObject will be appended to this object. The - * endObject method must be called to mark the object's end. - * @return this - * @throws JSONException If the nesting is too deep, or if the object is - * started in the wrong place (for example as a key or after the end of the - * outermost array or object). - */ - public JSONWriter object() throws JSONException { - if (this.mode == 'i') { - this.mode = 'o'; - } - if (this.mode == 'o' || this.mode == 'a') { - this.append("{"); - this.push('k'); - this.comma = false; - return this; - } - throw new JSONException("Misplaced object."); - - } - - - /** - * Pop an array or object scope. - * @param c The scope to close. - * @throws JSONException If nesting is wrong. - */ - private void pop(char c) throws JSONException { - if (this.top <= 0 || this.stack[this.top - 1] != c) { - throw new JSONException("Nesting error."); - } - this.top -= 1; - this.mode = this.top == 0 ? 'd' : this.stack[this.top - 1]; - } - - /** - * Push an array or object scope. - * @param c The scope to open. - * @throws JSONException If nesting is too deep. - */ - private void push(char c) throws JSONException { - if (this.top >= maxdepth) { - throw new JSONException("Nesting too deep."); - } - this.stack[this.top] = c; - this.mode = c; - this.top += 1; - } - - - /** - * Append either the value true or the value - * false. - * @param b A boolean. - * @return this - * @throws JSONException - */ - public JSONWriter value(boolean b) throws JSONException { - return this.append(b ? "true" : "false"); - } - -//#if CLDC!="1.0" -//# /** -//# * Append a double value. -//# * @param d A double. -//# * @return this -//# * @throws JSONException If the number is not finite. -//# */ -//# public JSONWriter value(double d) throws JSONException { -//# return this.value(new Double(d)); -//# } -//#endif - - /** - * Append a long value. - * @param l A long. - * @return this - * @throws JSONException - */ - public JSONWriter value(long l) throws JSONException { - return this.append(Long.toString(l)); - } - - - /** - * Append an object value. - * @param o The object to append. It can be null, or a Boolean, Number, - * String, JSONObject, or JSONArray, or an object with a toJSONString() - * method. - * @return this - * @throws JSONException If the value is out of sequence. - */ - public JSONWriter value(Object o) throws JSONException { - return this.append(JSONObject.valueToString(o)); - } -} diff --git a/codenameone/srcJson/org/json/StringWriter.java b/codenameone/srcJson/org/json/StringWriter.java deleted file mode 100644 index d0126c5a0..000000000 --- a/codenameone/srcJson/org/json/StringWriter.java +++ /dev/null @@ -1,64 +0,0 @@ -/* -Copyright (c) 2002 JSON.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -The Software shall be used for Good, not Evil. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -package org.json; - -import java.io.IOException; -import java.io.Writer; - -/** - * A simple StringBuffer-based implementation of StringWriter - */ -public class StringWriter extends Writer { - - final private StringBuffer buf; - - public StringWriter() { - super(); - buf = new StringBuffer(); - } - - public StringWriter(int initialSize) { - super(); - buf = new StringBuffer(initialSize); - } - - public void write(char[] cbuf, int off, int len) throws IOException { - buf.append(cbuf, off, len); - } - - public void write(String str) throws IOException { - buf.append(str); - } - - public void write(String str, int off, int len) throws IOException { - buf.append(str.substring(off, len)); - } - - public void flush() throws IOException { - } - - public void close() throws IOException { - } -} diff --git a/codenameone/srcJson/org/json/util/XML.java b/codenameone/srcJson/org/json/util/XML.java deleted file mode 100644 index 3490ce256..000000000 --- a/codenameone/srcJson/org/json/util/XML.java +++ /dev/null @@ -1,404 +0,0 @@ -package org.json.util; - -import java.util.Enumeration; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -/* -Copyright (c) 2002 JSON.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -The Software shall be used for Good, not Evil. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -/** - * This provides static methods to convert an XML text into a JSONObject, - * and to covert a JSONObject into an XML text. - * @author JSON.org - * @version 2 - */ -public class XML { - - /** The Character '&'. */ - public static final Character AMP = new Character('&'); - - /** The Character '''. */ - public static final Character APOS = new Character('\''); - - /** The Character '!'. */ - public static final Character BANG = new Character('!'); - - /** The Character '='. */ - public static final Character EQ = new Character('='); - - /** The Character '>'. */ - public static final Character GT = new Character('>'); - - /** The Character '<'. */ - public static final Character LT = new Character('<'); - - /** The Character '?'. */ - public static final Character QUEST = new Character('?'); - - /** The Character '"'. */ - public static final Character QUOT = new Character('"'); - - /** The Character '/'. */ - public static final Character SLASH = new Character('/'); - - /** - * Replace special characters with XML escapes: - *

-     * & (ampersand) is replaced by &amp;
-     * < (less than) is replaced by &lt;
-     * > (greater than) is replaced by &gt;
-     * " (double quote) is replaced by &quot;
-     * 
- * @param string The string to be escaped. - * @return The escaped string. - */ - public static String escape(String string) { - StringBuffer sb = new StringBuffer(); - for (int i = 0, len = string.length(); i < len; i++) { - char c = string.charAt(i); - switch (c) { - case '&': - sb.append("&"); - break; - case '<': - sb.append("<"); - break; - case '>': - sb.append(">"); - break; - case '"': - sb.append("""); - break; - default: - sb.append(c); - } - } - return sb.toString(); - } - - /** - * Scan the content following the named tag, attaching it to the context. - * @param x The XMLTokener containing the source string. - * @param context The JSONObject that will include the new material. - * @param name The tag name. - * @return true if the close tag is processed. - * @throws JSONException - */ - private static boolean parse(XMLTokener x, JSONObject context, - String name) throws JSONException { - char c; - int i; - String n; - JSONObject o = null; - String s; - Object t; - -// Test for and skip past these forms: -// -// -// -// -// Report errors for these forms: -// <> -// <= -// << - - t = x.nextToken(); - -// "); - return false; - } - x.back(); - } else if (c == '[') { - t = x.nextToken(); - if (t.equals("CDATA")) { - if (x.next() == '[') { - s = x.nextCDATA(); - if (s.length() > 0) { - context.accumulate("content", s); - } - return false; - } - } - throw x.syntaxError("Expected 'CDATA['"); - } - i = 1; - do { - t = x.nextMeta(); - if (t == null) { - throw x.syntaxError("Missing '>' after ' 0); - return false; - } else if (t == QUEST) { - -// "); - return false; - } else if (t == SLASH) { - -// Close tag - - } else if (t == SLASH) { - if (x.nextToken() != GT) { - throw x.syntaxError("Misshaped tag"); - } - context.accumulate(n, o); - return false; - -// Content, between <...> and - - } else if (t == GT) { - for (;;) { - t = x.nextContent(); - if (t == null) { - if (name != null) { - throw x.syntaxError("Unclosed tag " + name); - } - return false; - } else if (t instanceof String) { - s = (String)t; - if (s.length() > 0) { - o.accumulate("content", s); - } - -// Nested element - - } else if (t == LT) { - if (parse(x, o, n)) { - if (o.length() == 0) { - context.accumulate(n, ""); - } else if (o.length() == 1 && - o.opt("content") != null) { - context.accumulate(n, o.opt("content")); - } else { - context.accumulate(n, o); - } - return false; - } - } - } - } else { - throw x.syntaxError("Misshaped tag"); - } - } - } - } - - - /** - * Convert a well-formed (but not necessarily valid) XML string into a - * JSONObject. Some information may be lost in this transformation - * because JSON is a data format and XML is a document format. XML uses - * elements, attributes, and content text, while JSON uses unordered - * collections of name/value pairs and arrays of values. JSON does not - * does not like to distinguish between elements and attributes. - * Sequences of similar elements are represented as JSONArrays. Content - * text may be placed in a "content" member. Comments, prologs, DTDs, and - * <[ [ ]]> are ignored. - * @param string The source string. - * @return A JSONObject containing the structured data from the XML string. - * @throws JSONException - */ - public static JSONObject toJSONObject(String string) throws JSONException { - JSONObject o = new JSONObject(); - XMLTokener x = new XMLTokener(string); - while (x.more()) { - x.skipPast("<"); - parse(x, o, null); - } - return o; - } - - - /** - * Convert a JSONObject into a well-formed, element-normal XML string. - * @param o A JSONObject. - * @return A string. - * @throws JSONException - */ - public static String toString(Object o) throws JSONException { - return toString(o, null); - } - - - /** - * Convert a JSONObject into a well-formed, element-normal XML string. - * @param o A JSONObject. - * @param tagName The optional name of the enclosing tag. - * @return A string. - * @throws JSONException - */ - public static String toString(Object o, String tagName) - throws JSONException { - StringBuffer b = new StringBuffer(); - int i; - JSONArray ja; - JSONObject jo; - String k; - Enumeration keys; - int len; - String s; - Object v; - if (o instanceof JSONObject) { - -// Emit - - if (tagName != null) { - b.append('<'); - b.append(tagName); - b.append('>'); - } - -// Loop thru the keys. - - jo = (JSONObject)o; - keys = jo.keys(); - while (keys.hasMoreElements()) { - k = keys.nextElement().toString(); - v = jo.get(k); - if (v instanceof String) { - s = (String)v; - } else { - s = null; - } - -// Emit content in body - - if (k.equals("content")) { - if (v instanceof JSONArray) { - ja = (JSONArray)v; - len = ja.length(); - for (i = 0; i < len; i += 1) { - if (i > 0) { - b.append('\n'); - } - b.append(escape(ja.get(i).toString())); - } - } else { - b.append(escape(v.toString())); - } - -// Emit an array of similar keys - - } else if (v instanceof JSONArray) { - ja = (JSONArray)v; - len = ja.length(); - for (i = 0; i < len; i += 1) { - b.append(toString(ja.get(i), k)); - } - } else if (v.equals("")) { - b.append('<'); - b.append(k); - b.append("/>"); - -// Emit a new tag - - } else { - b.append(toString(v, k)); - } - } - if (tagName != null) { - -// Emit the close tag - - b.append("'); - } - return b.toString(); - -// XML does not have good support for arrays. If an array appears in a place -// where XML is lacking, synthesize an element. - - } else if (o instanceof JSONArray) { - ja = (JSONArray)o; - len = ja.length(); - for (i = 0; i < len; ++i) { - b.append(toString( - ja.opt(i), (tagName == null) ? "array" : tagName)); - } - return b.toString(); - } else { - s = (o == null) ? "null" : escape(o.toString()); - return (tagName == null) ? "\"" + s + "\"" : - (s.length() == 0) ? "<" + tagName + "/>" : - "<" + tagName + ">" + s + ""; - } - } -} \ No newline at end of file diff --git a/codenameone/srcJson/org/json/util/XMLTokener.java b/codenameone/srcJson/org/json/util/XMLTokener.java deleted file mode 100644 index d550efd14..000000000 --- a/codenameone/srcJson/org/json/util/XMLTokener.java +++ /dev/null @@ -1,393 +0,0 @@ -package org.json.util; - -import org.json.JSONException; -import org.json.JSONObject; -import org.json.JSONTokener; - -/* -Copyright (c) 2002 JSON.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -The Software shall be used for Good, not Evil. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -/** - * The XMLTokener extends the JSONTokener to provide additional methods - * for the parsing of XML texts. - * @author JSON.org - * @version 2 - */ -public class XMLTokener extends JSONTokener { - - - /** The table of entity values. It initially contains Character values for - * amp, apos, gt, lt, quot. - */ - public static final java.util.Hashtable entity; - - static { - entity = new java.util.Hashtable(8); - entity.put("amp", XML.AMP); - entity.put("apos", XML.APOS); - entity.put("gt", XML.GT); - entity.put("lt", XML.LT); - entity.put("quot", XML.QUOT); - } - - /** - * Construct an XMLTokener from a string. - * @param s A source string. - */ - public XMLTokener(String s) { - super(s); - } - - /** - * Get the text in the CDATA block. - * @return The string up to the ]]>. - * @throws JSONException If the ]]> is not found. - */ - public String nextCDATA() throws JSONException { - char c; - int i; - StringBuffer sb = new StringBuffer(); - for (;;) { - c = next(); - if (c == 0) { - throw syntaxError("Unclosed CDATA."); - } - sb.append(c); - i = sb.length() - 3; - if (i >= 0 && sb.charAt(i) == ']' && - sb.charAt(i + 1) == ']' && sb.charAt(i + 2) == '>') { - sb.setLength(i); - return sb.toString(); - } - } - } - - - /** - * Get the next XML outer token, trimming whitespace. There are two kinds - * of tokens: the '<' character which begins a markup tag, and the content - * text between markup tags. - * - * @return A string, or a '<' Character, or null if there is no more - * source text. - * @throws JSONException - */ - public Object nextContent() throws JSONException { - char c; - StringBuffer sb; - do { - c = next(); - } while (isWhitespace(c)); - if (c == 0) { - return null; - } - if (c == '<') { - return XML.LT; - } - sb = new StringBuffer(); - for (;;) { - if (c == '<' || c == 0) { - back(); - return sb.toString().trim(); - } - if (c == '&') { - sb.append(nextEntity(c)); - } else { - sb.append(c); - } - c = next(); - } - } - - - /** - * Return the next entity. These entities are translated to Characters: - * & ' > < ". - * @param a An ampersand character. - * @return A Character or an entity String if the entity is not recognized. - * @throws JSONException If missing ';' in XML entity. - */ - public Object nextEntity(char a) throws JSONException { - StringBuffer sb = new StringBuffer(); - for (;;) { - char c = next(); - if (isLetterOrDigit(c) || c == '#') { - sb.append(Character.toLowerCase(c)); - } else if (c == ';') { - break; - } else { - throw syntaxError("Missing ';' in XML entity: &" + sb); - } - } - String s = sb.toString(); - Object e = entity.get(s); - return e != null ? e : a + s + ";"; - } - - - /** - * Returns the next XML meta token. This is used for skipping over - * and structures. - * @return Syntax characters (< > / = ! ?) are returned as - * Character, and strings and names are returned as Boolean. We don't care - * what the values actually are. - * @throws JSONException If a string is not properly closed or if the XML - * is badly structured. - */ - public Object nextMeta() throws JSONException { - char c; - char q; - do { - c = next(); - } while (isWhitespace(c)); - switch (c) { - case 0: - throw syntaxError("Misshaped meta tag."); - case '<': - return XML.LT; - case '>': - return XML.GT; - case '/': - return XML.SLASH; - case '=': - return XML.EQ; - case '!': - return XML.BANG; - case '?': - return XML.QUEST; - case '"': - case '\'': - q = c; - for (;;) { - c = next(); - if (c == 0) { - throw syntaxError("Unterminated string."); - } - if (c == q) { -//#if CLDC!="1.0" -//# return Boolean.TRUE; -//#else - return JSONObject.TRUE; -//#endif - } - } - default: - for (;;) { - c = next(); - if (isWhitespace(c)) { -//#if CLDC!="1.0" -//# return Boolean.TRUE; -//#else - return JSONObject.TRUE; -//#endif - } - switch (c) { - case 0: - case '<': - case '>': - case '/': - case '=': - case '!': - case '?': - case '"': - case '\'': - back(); -//#if CLDC!="1.0" -//# return Boolean.TRUE; -//#else - return JSONObject.TRUE; -//#endif - } - } - } - } - - - /** - * Get the next XML Token. These tokens are found inside of angle - * brackets. It may be one of these characters: / > = ! ? or it - * may be a string wrapped in single quotes or double quotes, or it may be a - * name. - * @return a String or a Character. - * @throws JSONException If the XML is not well formed. - */ - public Object nextToken() throws JSONException { - char c; - char q; - StringBuffer sb; - do { - c = next(); - } while (isWhitespace(c)); - switch (c) { - case 0: - throw syntaxError("Misshaped element."); - case '<': - throw syntaxError("Misplaced '<'."); - case '>': - return XML.GT; - case '/': - return XML.SLASH; - case '=': - return XML.EQ; - case '!': - return XML.BANG; - case '?': - return XML.QUEST; - -// Quoted string - - case '"': - case '\'': - q = c; - sb = new StringBuffer(); - for (;;) { - c = next(); - if (c == 0) { - throw syntaxError("Unterminated string."); - } - if (c == q) { - return sb.toString(); - } - if (c == '&') { - sb.append(nextEntity(c)); - } else { - sb.append(c); - } - } - default: - -// Name - - sb = new StringBuffer(); - for (;;) { - sb.append(c); - c = next(); - if (isWhitespace(c)) { - return sb.toString(); - } - switch (c) { - case 0: - case '>': - case '/': - case '=': - case '!': - case '?': - case '[': - case ']': - back(); - return sb.toString(); - case '<': - case '"': - case '\'': - throw syntaxError("Bad character in a name."); - } - } - } - } - - // TODO - private static boolean isWhitespace(char c) { - switch (c) { - case ' ': - case '\r': - case '\n': - case '\t': - return true; - } - return false; - } - - // TODO - private static boolean isLetterOrDigit(char c) { - switch (c) { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - - case 'a': - case 'b': - case 'c': - case 'd': - case 'e': - case 'f': - case 'g': - case 'h': - case 'i': - case 'j': - case 'k': - case 'l': - case 'm': - case 'n': - case 'o': - case 'p': - case 'q': - case 'r': - case 's': - case 't': - case 'u': - case 'v': - case 'w': - case 'x': - case 'y': - case 'z': - - case 'A': - case 'B': - case 'C': - case 'D': - case 'E': - case 'F': - case 'G': - case 'H': - case 'I': - case 'J': - case 'K': - case 'L': - case 'M': - case 'N': - case 'O': - case 'P': - case 'Q': - case 'R': - case 'S': - case 'T': - case 'U': - case 'V': - case 'W': - case 'X': - case 'Y': - case 'Z': - return true; - } - return false; - } - -}