diff options
| author | shedaniel <daniel@shedaniel.me> | 2021-01-04 20:14:07 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2021-01-04 20:14:07 +0800 |
| commit | 5385aa5bda42b586f6da45f17f1b3309e0bc900a (patch) | |
| tree | f6f24a8eb18b09d9ada42e9b045fea441a8007b2 /runtime/src/main/java/me/shedaniel/rei/impl/OverlaySearchFieldSyntaxHighlighter.java | |
| parent | 67171a5ff24ed77e6c4cc889543e8dfb543e8fe5 (diff) | |
| download | RoughlyEnoughItems-5385aa5bda42b586f6da45f17f1b3309e0bc900a.tar.gz RoughlyEnoughItems-5385aa5bda42b586f6da45f17f1b3309e0bc900a.tar.bz2 RoughlyEnoughItems-5385aa5bda42b586f6da45f17f1b3309e0bc900a.zip | |
Search Syntax Highlighting
Signed-off-by: shedaniel <daniel@shedaniel.me>
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.java | 46 |
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; + } + } + } + } + } +} |
