Add basic Script visualization and colorization
This commit is contained in:
@ -0,0 +1,78 @@
|
||||
package de.zonlykroks.advancedscripts.lexer;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class ScriptSyntaxPacketParser {
|
||||
|
||||
private ScriptSyntaxPacketParser() {
|
||||
throw new IllegalStateException("Utility class");
|
||||
}
|
||||
|
||||
private static final TokenType[] TOKEN_TYPES = TokenType.values();
|
||||
|
||||
private static void reset() {
|
||||
Operators.OPERATORS.clear();
|
||||
Headers.HEADERS.clear();
|
||||
VariablePrefixes.RPEFIXES.clear();
|
||||
VariableSuffixes.SUFFIXES.clear();
|
||||
Commands.COMMANDS.clear();
|
||||
}
|
||||
|
||||
public static synchronized void parse(String scriptSyntax) {
|
||||
reset();
|
||||
|
||||
JsonObject jsonObject = JsonParser.parseString(scriptSyntax).getAsJsonObject();
|
||||
for (String key : jsonObject.keySet()) {
|
||||
JsonArray jsonElements = jsonObject.get(key).getAsJsonArray();
|
||||
if (key.startsWith("@")) {
|
||||
parseSpecial(key, jsonElements);
|
||||
} else {
|
||||
parseCommand(key, jsonElements);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void parseCommand(String key, JsonArray value) {
|
||||
boolean repeating = value.get(0).getAsBoolean();
|
||||
List<List<TokenType>> validArgumentTypes = new ArrayList<>();
|
||||
for (int i = 1; i < value.size(); i++) {
|
||||
JsonArray parameters = value.get(i).getAsJsonArray();
|
||||
List<TokenType> parameterTypes = new ArrayList<>();
|
||||
for (JsonElement parameter : parameters) {
|
||||
parameterTypes.add(TOKEN_TYPES[parameter.getAsInt()]);
|
||||
}
|
||||
validArgumentTypes.add(parameterTypes);
|
||||
}
|
||||
Commands.COMMANDS.put(key, new Command(repeating, validArgumentTypes));
|
||||
}
|
||||
|
||||
private static void parseSpecial(String key, JsonArray value) {
|
||||
Set<String> set;
|
||||
switch (key) {
|
||||
case "@operators":
|
||||
set = Operators.OPERATORS;
|
||||
break;
|
||||
case "@headers":
|
||||
set = Headers.HEADERS;
|
||||
break;
|
||||
case "@prefixes":
|
||||
set = VariablePrefixes.RPEFIXES;
|
||||
break;
|
||||
case "@suffixes":
|
||||
set = VariableSuffixes.SUFFIXES;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
for (JsonElement element : value) {
|
||||
set.add(element.getAsString());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user