package gui;
import java.util.ArrayList;
import java.util.Arrays;
/**
*
* @author Oliver Chu
*/
public class StrTools {
public static final String MANA = "%$?mK!sUb@";
private static String[] interleaveQuotes(String[] tokens) {
ArrayList<String> lst = new ArrayList<String>();
boolean useQuotes = false;
for (String token : tokens) {
if (useQuotes)
lst.add("\"" + token + "\"");
else
lst.add(token);
useQuotes = !useQuotes;
}
String[] result = new String[lst.size()];
lst.toArray(result);
return result;
}
private static String[] combineEscapedQuotes(String[] tokens) {
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < tokens.length; i++) {
String token = tokens[i];
if (token.endsWith("\\") && i + 1 < tokens.length) {
list.add(token + "\\\"" + tokens[i + 1]);
i++;
} else {
list.add(token);
}
}
String[] result = new String[list.size()];
list.toArray(result);
// Check to make sure no more backslashes exist.
int i = 0;
for (String token : tokens) {
if (token.endsWith("\\") && i != tokens.length - 1) {
return combineEscapedQuotes(result);
}
i++;
}
return result;
}
public static String unescape(String str) {
if (str.contains("\\")) {
str = str.replace("\\\\", "\\");
str = str.replace("\\t", "\t");
str = str.replace("\\b", "\b");
str = str.replace("\\n", "\n");
str = str.replace("\\r", "\r");
str = str.replace("\\f", "\f");
str = str.replace("\\q", "\"");
str = str.replace("\\\"", "\"");
str = str.replace("\\'", "'");
str = str.replace("\\a", "" + (char)7);
str = str.replace("\\v", "" + (char)11);
str = str.replace("\\ ", "");
}
return str;
}
public static String[] splitOnNoQuotes(String line,
SmartList<String> operators) {
String[] tokens = combineEscapedQuotes(line.split("\""));
tokens = interleaveQuotes(tokens);
ArrayList<String> lst = new ArrayList<String>();
if (line.trim().startsWith("function")) {
String token = line;
int i = token.indexOf("function") + 9;
String functionBody = StrTools2.slice(token, i);
functionBody = functionBody.replace(" of ", "yields");
// functionBody = functionBody.replace("yields", "a8Z");
String fxn = functionBody.replace(" ", "");
String parts[] = fxn.split("yields");
if (parts.length != 3) {
return new String[]{};
} else {
String functionName = parts[0];
String argumentName = parts[1];
String funcBody = parts[2];
for (String op : operators) {
funcBody = funcBody.replace(op, " " + op + " ");
}
return new String[]{MANA, functionName,
argumentName, funcBody};
}
}
for (String token : tokens) {
if (token.contains("\"")) {
//Do not split quoted text.
lst.add(token);
} else {
token = token.replace("{", "[");
token = token.replace("}", "]");
for (String op : operators) {
token = token.replace(op, " " + op + " ");
}
lst.addAll(Arrays.asList(token.split(" ")));
}
}
String[] result = new String[lst.size()];
lst.toArray(result);
return result;
}
}