156 lines
4.8 KiB
Java
156 lines
4.8 KiB
Java
package me.skymc.taboolib.json;
|
|
|
|
public class CDL {
|
|
|
|
private static String getValue(JSONTokener x) throws JSONException {
|
|
char c;
|
|
char q;
|
|
StringBuffer sb;
|
|
do {
|
|
c = x.next();
|
|
} while (c == ' ' || c == '\t');
|
|
switch (c) {
|
|
case 0:
|
|
return null;
|
|
case '"':
|
|
case '\'':
|
|
q = c;
|
|
sb = new StringBuffer();
|
|
for (; ; ) {
|
|
c = x.next();
|
|
if (c == q) {
|
|
break;
|
|
}
|
|
if (c == 0 || c == '\n' || c == '\r') {
|
|
throw x.syntaxError("Missing close quote '" + q + "'.");
|
|
}
|
|
sb.append(c);
|
|
}
|
|
return sb.toString();
|
|
case ',':
|
|
x.back();
|
|
return "";
|
|
default:
|
|
x.back();
|
|
return x.nextTo(',');
|
|
}
|
|
}
|
|
|
|
public static JSONArray rowToJSONArray(JSONTokener x) throws JSONException {
|
|
JSONArray ja = new JSONArray();
|
|
for (; ; ) {
|
|
String value = getValue(x);
|
|
char c = x.next();
|
|
if (value == null ||
|
|
(ja.length() == 0 && value.length() == 0 && c != ',')) {
|
|
return null;
|
|
}
|
|
ja.put(value);
|
|
while (c != ',') {
|
|
if (c != ' ') {
|
|
if (c == '\n' || c == '\r' || c == 0) {
|
|
return ja;
|
|
}
|
|
throw x.syntaxError("Bad character '" + c + "' (" +
|
|
(int) c + ").");
|
|
}
|
|
c = x.next();
|
|
}
|
|
}
|
|
}
|
|
|
|
public static JSONObject rowToJSONObject(JSONArray names, JSONTokener x)
|
|
throws JSONException {
|
|
JSONArray ja = rowToJSONArray(x);
|
|
return ja != null ? ja.toJSONObject(names) : null;
|
|
}
|
|
|
|
public static String rowToString(JSONArray ja) {
|
|
StringBuilder sb = new StringBuilder();
|
|
for (int i = 0; i < ja.length(); i += 1) {
|
|
if (i > 0) {
|
|
sb.append(',');
|
|
}
|
|
Object object = ja.opt(i);
|
|
if (object != null) {
|
|
String string = object.toString();
|
|
if (string.length() > 0 && (string.indexOf(',') >= 0 ||
|
|
string.indexOf('\n') >= 0 || string.indexOf('\r') >= 0 ||
|
|
string.indexOf(0) >= 0 || string.charAt(0) == '"')) {
|
|
sb.append('"');
|
|
int length = string.length();
|
|
for (int j = 0; j < length; j += 1) {
|
|
char c = string.charAt(j);
|
|
if (c >= ' ' && c != '"') {
|
|
sb.append(c);
|
|
}
|
|
}
|
|
sb.append('"');
|
|
} else {
|
|
sb.append(string);
|
|
}
|
|
}
|
|
}
|
|
sb.append('\n');
|
|
return sb.toString();
|
|
}
|
|
|
|
public static JSONArray toJSONArray(String string) throws JSONException {
|
|
return toJSONArray(new JSONTokener(string));
|
|
}
|
|
|
|
public static JSONArray toJSONArray(JSONTokener x) throws JSONException {
|
|
return toJSONArray(rowToJSONArray(x), x);
|
|
}
|
|
|
|
public static JSONArray toJSONArray(JSONArray names, String string)
|
|
throws JSONException {
|
|
return toJSONArray(names, new JSONTokener(string));
|
|
}
|
|
|
|
public static JSONArray toJSONArray(JSONArray names, JSONTokener x)
|
|
throws JSONException {
|
|
if (names == null || names.length() == 0) {
|
|
return null;
|
|
}
|
|
JSONArray ja = new JSONArray();
|
|
for (; ; ) {
|
|
JSONObject jo = rowToJSONObject(names, x);
|
|
if (jo == null) {
|
|
break;
|
|
}
|
|
ja.put(jo);
|
|
}
|
|
if (ja.length() == 0) {
|
|
return null;
|
|
}
|
|
return ja;
|
|
}
|
|
|
|
public static String toString(JSONArray ja) throws JSONException {
|
|
JSONObject jo = ja.optJSONObject(0);
|
|
if (jo != null) {
|
|
JSONArray names = jo.names();
|
|
if (names != null) {
|
|
return rowToString(names) + toString(names, ja);
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public static String toString(JSONArray names, JSONArray ja)
|
|
throws JSONException {
|
|
if (names == null || names.length() == 0) {
|
|
return null;
|
|
}
|
|
StringBuilder sb = new StringBuilder();
|
|
for (int i = 0; i < ja.length(); i += 1) {
|
|
JSONObject jo = ja.optJSONObject(i);
|
|
if (jo != null) {
|
|
sb.append(rowToString(jo.toJSONArray(names)));
|
|
}
|
|
}
|
|
return sb.toString();
|
|
}
|
|
}
|