From ecd57832b5ead828958d4966ff2e0e230595a0ff Mon Sep 17 00:00:00 2001 From: Ali Date: Wed, 11 Dec 2024 00:33:58 +0300 Subject: [PATCH] change behavior of #peekString() to allow unclosed quotes --- .../commands/stream/BaseStringStream.java | 22 +++++++++++++++---- .../commands/stream/StringStream.java | 3 +++ 2 files changed, 21 insertions(+), 4 deletions(-) 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. */