diff --git a/common/src/main/java/revxrsal/commands/stream/BaseStringStream.java b/common/src/main/java/revxrsal/commands/stream/BaseStringStream.java index b4e6b493..16d0d399 100644 --- a/common/src/main/java/revxrsal/commands/stream/BaseStringStream.java +++ b/common/src/main/java/revxrsal/commands/stream/BaseStringStream.java @@ -143,6 +143,10 @@ public char read() { } public @NotNull String readUntil(char delimiter) { + return readUntil(delimiter, false); + } + + public @NotNull String readUntil(char delimiter, boolean allowUnclosed) { StringBuilder result = new StringBuilder(); boolean escaped = false; while (hasRemaining()) { @@ -163,14 +167,24 @@ public char read() { result.append(c); } } - throw new InputParseException(InputParseException.Cause.UNCLOSED_QUOTE); + if (allowUnclosed) + return result.toString(); + else + throw new InputParseException(InputParseException.Cause.UNCLOSED_QUOTE); } @Override public @NotNull String peekString() { + if (!hasRemaining()) + return ""; int cursor = pos; - String value = readString(); - pos = cursor; - return value; + char next = peek(); + if (next == DOUBLE_QUOTE) { + pos += 1; + String result = readUntil(DOUBLE_QUOTE, true); + pos = cursor; + return result; + } + return peekUnquotedString(); } public @NotNull String peekUnquotedString() { diff --git a/common/src/main/java/revxrsal/commands/stream/StringStream.java b/common/src/main/java/revxrsal/commands/stream/StringStream.java index 94715690..412c4d0e 100644 --- a/common/src/main/java/revxrsal/commands/stream/StringStream.java +++ b/common/src/main/java/revxrsal/commands/stream/StringStream.java @@ -166,6 +166,9 @@ public interface StringStream { * peek the next string until a whitespace character is encountered. *

* This will not move the cursor forward. + *

+ * Note that, if the next string is an unclosed-quoted string, it will return + * the content inside the unclosed quote. * * @return The next string. */