From b963f83deecdfd4f5fcb94478446df72f99302b6 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Fri, 8 Aug 2025 12:07:18 +0200 Subject: [PATCH] Supports spaces in author filtering --- .../bookswithoutborders/gui/BookIndex.java | 21 +++++++++++++++++++ .../utility/InputCleaningHelper.java | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/knarcraft/bookswithoutborders/gui/BookIndex.java b/src/main/java/net/knarcraft/bookswithoutborders/gui/BookIndex.java index 1bd1808..1ba9661 100644 --- a/src/main/java/net/knarcraft/bookswithoutborders/gui/BookIndex.java +++ b/src/main/java/net/knarcraft/bookswithoutborders/gui/BookIndex.java @@ -48,6 +48,27 @@ public abstract class BookIndex { return true; } } + + // Parse book author from input + for (int i = 0; i < arguments.length; i++) { + String author = InputCleaningHelper.parseAuthorSpecifier(arguments[i]); + if (author == null) { + continue; + } + for (int j = i + 1; j < arguments.length; j++) { + int pageNumber = InputCleaningHelper.parsePageNumber(arguments[j]); + if (pageNumber > 0) { + int authorEnd = j - 1; + StringBuilder builder = new StringBuilder(author); + for (int k = i + 1; k <= authorEnd; k++) { + builder.append(" ").append(arguments[k]); + } + AuthorBookIndex.printBooks(sender, selectPublic, command, pageNumber, builder.toString()); + return true; + } + } + } + return false; } diff --git a/src/main/java/net/knarcraft/bookswithoutborders/utility/InputCleaningHelper.java b/src/main/java/net/knarcraft/bookswithoutborders/utility/InputCleaningHelper.java index 320fa4b..266ad63 100644 --- a/src/main/java/net/knarcraft/bookswithoutborders/utility/InputCleaningHelper.java +++ b/src/main/java/net/knarcraft/bookswithoutborders/utility/InputCleaningHelper.java @@ -78,7 +78,7 @@ public final class InputCleaningHelper { */ @Nullable public static String parseAuthorSpecifier(@NotNull String input) { - Pattern pattern = Pattern.compile("author([0-9a-zA-Z_]+)"); + Pattern pattern = Pattern.compile("author([\\p{L}0-9_.,!#%&'`^@$+]+)"); Matcher matcher = pattern.matcher(input); if (matcher.matches()) { return matcher.group(1);