From 5385aa5bda42b586f6da45f17f1b3309e0bc900a Mon Sep 17 00:00:00 2001 From: shedaniel Date: Mon, 4 Jan 2021 20:14:07 +0800 Subject: Search Syntax Highlighting Signed-off-by: shedaniel --- .../impl/OverlaySearchFieldSyntaxHighlighter.java | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 runtime/src/main/java/me/shedaniel/rei/impl/OverlaySearchFieldSyntaxHighlighter.java (limited to 'runtime/src/main/java/me/shedaniel/rei/impl/OverlaySearchFieldSyntaxHighlighter.java') 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 { + 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 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; + } + } + } + } + } +} -- cgit