From 9f2cdcf418c4a25639a3fce4af14d7e3e8956e7f Mon Sep 17 00:00:00 2001 From: NEMESIS13cz Date: Tue, 9 May 2017 18:48:27 +0200 Subject: Changed quote escaping to space escaping --- .../java/com/nemez/cmdmgr/util/Executable.java | 49 ++++++++-------------- 1 file changed, 18 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/nemez/cmdmgr/util/Executable.java b/src/main/java/com/nemez/cmdmgr/util/Executable.java index cda4b1c..e1f9aed 100644 --- a/src/main/java/com/nemez/cmdmgr/util/Executable.java +++ b/src/main/java/com/nemez/cmdmgr/util/Executable.java @@ -295,41 +295,28 @@ public class Executable extends org.bukkit.command.Command { if (args_.length == 0) { args = new String[0]; }else{ - char[] rawArgs = (String.join(" ", args_) + ' ').toCharArray(); - int argSize = 0; - char last = '\0'; - boolean inString = false; - - for (char c : rawArgs) { - if (c == '"') { - if (last != '\\') { - inString = !inString; - } - }else if (c == ' ' && !inString) { - argSize++; - } - last = c; - } - last = '\0'; - args = new String[argSize]; - String buffer = ""; - int index = 0; - - for (char c : rawArgs) { - if (c == '"') { - if (last != '\\') { - inString = !inString; + ArrayList tempArgs = new ArrayList(); + String temp = ""; + int counter = 0; + for (String s : args_) { + if (s.endsWith("\\")) { + if ((s.length() > 1 && s.charAt(s.length() - 2) == '\\') || counter + 1 == args_.length) { + // escaped \ + tempArgs.add(temp + s.replace("\\\\", "\\")); + temp = ""; }else{ - buffer = buffer.substring(0, buffer.length() - 1) + '"'; + // unescaped \ + temp += s.substring(0, s.length() - 1).replace("\\\\", "\\") + " "; } - }else if (c == ' ' && !inString) { - args[index] = buffer; - buffer = ""; - index++; }else{ - buffer += c; + tempArgs.add(temp + s); + temp = ""; } - last = c; + counter++; + } + args = new String[tempArgs.size()]; + for (int i = 0; i < args.length; i++) { + args[i] = tempArgs.get(i); } } ArrayList defs = new ArrayList(); -- cgit v1.2.3