aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main/java/me/shedaniel/rei/impl/OverlaySearchFieldSyntaxHighlighter.java
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/src/main/java/me/shedaniel/rei/impl/OverlaySearchFieldSyntaxHighlighter.java')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/OverlaySearchFieldSyntaxHighlighter.java46
1 files changed, 46 insertions, 0 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/OverlaySearchFieldSyntaxHighlighter.java b/runtime/src/main/java/me/shedaniel/rei/impl/OverlaySearchFieldSyntaxHighlighter.java
new file mode 100644
index 000000000..c63895f2c
--- /dev/null
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/OverlaySearchFieldSyntaxHighlighter.java
@@ -0,0 +1,46 @@
+package me.shedaniel.rei.impl;
+
+import me.shedaniel.rei.gui.OverlaySearchField;
+import me.shedaniel.rei.impl.search.ArgumentsRegistry;
+import org.jetbrains.annotations.ApiStatus;
+
+import java.util.List;
+import java.util.function.Consumer;
+
+@ApiStatus.Internal
+public class OverlaySearchFieldSyntaxHighlighter implements Consumer<String> {
+ private final OverlaySearchField field;
+ public byte[] highlighted;
+
+ public OverlaySearchFieldSyntaxHighlighter(OverlaySearchField field) {
+ this.field = field;
+ this.accept(field.getText());
+ }
+
+ @Override
+ public void accept(String text) {
+ this.highlighted = new byte[text.length()];
+ SearchArgument.ProcessedSink sink = new SearchArgument.ProcessedSink() {
+ @Override
+ public void addQuote(int index) {
+ highlighted[index] = -2;
+ }
+
+ @Override
+ public void addSplitter(int index) {
+ highlighted[index] = -1;
+ }
+ };
+ List<SearchArgument.SearchArguments> arguments = SearchArgument.processSearchTerm(text, sink);
+ for (SearchArgument.SearchArguments argument : arguments) {
+ if (!argument.isAlways()) {
+ for (SearchArgument<?, ?> searchArgument : argument.getArguments()) {
+ int argIndex = ArgumentsRegistry.ARGUMENT_LIST.indexOf(searchArgument.getArgument()) + 1;
+ for (int i = searchArgument.start(); i < searchArgument.end(); i++) {
+ highlighted[i] = (byte) argIndex;
+ }
+ }
+ }
+ }
+ }
+}