aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/shedaniel/rei/impl/search/Argument.java
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2020-06-06 16:29:32 +0800
committershedaniel <daniel@shedaniel.me>2020-06-06 16:29:32 +0800
commit3802055673e7877d66614791eba6ea0599488c7a (patch)
tree8a26efa9c9cea0c0ee1d00234c04eace52771dae /src/main/java/me/shedaniel/rei/impl/search/Argument.java
parentf7be9668e3b9508497e21ff74cc0f2f2e1b5d931 (diff)
downloadRoughlyEnoughItems-3802055673e7877d66614791eba6ea0599488c7a.tar.gz
RoughlyEnoughItems-3802055673e7877d66614791eba6ea0599488c7a.tar.bz2
RoughlyEnoughItems-3802055673e7877d66614791eba6ea0599488c7a.zip
Improved Search
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'src/main/java/me/shedaniel/rei/impl/search/Argument.java')
-rw-r--r--src/main/java/me/shedaniel/rei/impl/search/Argument.java41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/main/java/me/shedaniel/rei/impl/search/Argument.java b/src/main/java/me/shedaniel/rei/impl/search/Argument.java
new file mode 100644
index 000000000..a2b94b624
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/impl/search/Argument.java
@@ -0,0 +1,41 @@
+package me.shedaniel.rei.impl.search;
+
+import me.shedaniel.rei.api.EntryStack;
+import org.jetbrains.annotations.ApiStatus;
+import org.jetbrains.annotations.Nullable;
+
+@ApiStatus.Internal
+public abstract class Argument {
+ public Argument() {
+ }
+
+ private int dataOrdinal = -1;
+
+ public abstract String getName();
+
+ @Nullable
+ public String getPrefix() {
+ return null;
+ }
+
+ public MatchStatus matchesArgumentPrefix(String text) {
+ String prefix = getPrefix();
+ if (prefix == null) return MatchStatus.unmatched();
+ if (text.startsWith("-" + prefix)) return MatchStatus.invertMatched(text.substring(1 + prefix.length()));
+ if (text.startsWith(prefix + "-")) return MatchStatus.invertMatched(text.substring(1 + prefix.length()));
+ return text.startsWith(prefix) ? MatchStatus.matched(text.substring(prefix.length())) : MatchStatus.unmatched();
+ }
+
+ public final int getDataOrdinal() {
+ if (dataOrdinal == -1) {
+ dataOrdinal = ArgumentsRegistry.ARGUMENTS.indexOf(this);
+ }
+ return dataOrdinal;
+ }
+
+ public abstract boolean matches(Object[] data, EntryStack stack, String searchText, Object searchData);
+
+ public Object prepareSearchData(String searchText) {
+ return null;
+ }
+}