aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main/java/me/shedaniel/rei/impl
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-01-05 12:47:39 +0800
committershedaniel <daniel@shedaniel.me>2021-01-05 12:47:39 +0800
commitf5b59076cece9e95e76158b17b64fec27616b68b (patch)
treeb0714ad0affed45ff2aa6250e48d6d8db8a1e294 /runtime/src/main/java/me/shedaniel/rei/impl
parent5385aa5bda42b586f6da45f17f1b3309e0bc900a (diff)
downloadRoughlyEnoughItems-f5b59076cece9e95e76158b17b64fec27616b68b.tar.gz
RoughlyEnoughItems-f5b59076cece9e95e76158b17b64fec27616b68b.tar.bz2
RoughlyEnoughItems-f5b59076cece9e95e76158b17b64fec27616b68b.zip
Configs for syntax highlighting
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'runtime/src/main/java/me/shedaniel/rei/impl')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java9
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java10
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/OverlaySearchFieldSyntaxHighlighter.java27
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/SearchArgument.java12
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/search/Argument.java6
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/search/MatchStatus.java15
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/search/RegexArgument.java4
7 files changed, 61 insertions, 22 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java
index 90a99b45f..20761c828 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java
@@ -57,10 +57,8 @@ import me.shedaniel.rei.gui.ContainerScreenOverlay;
import me.shedaniel.rei.gui.TransformingScreen;
import me.shedaniel.rei.gui.WarningAndErrorScreen;
import me.shedaniel.rei.gui.config.RecipeScreenType;
-import me.shedaniel.rei.gui.config.entry.FilteringEntry;
-import me.shedaniel.rei.gui.config.entry.NoFilteringEntry;
-import me.shedaniel.rei.gui.config.entry.RecipeScreenTypeEntry;
-import me.shedaniel.rei.gui.config.entry.ReloadPluginsEntry;
+import me.shedaniel.rei.gui.config.SyntaxHighlightingMode;
+import me.shedaniel.rei.gui.config.entry.*;
import me.shedaniel.rei.gui.credits.CreditsScreen;
import me.shedaniel.rei.impl.filtering.FilteringRule;
import me.shedaniel.rei.impl.filtering.rules.ManualFilteringRule;
@@ -172,6 +170,9 @@ public class ConfigManagerImpl implements ConfigManager {
Collections.singletonList(new RecipeScreenTypeEntry(220, new TranslatableComponent(i13n), getUnsafely(field, config, RecipeScreenType.UNSET), getUnsafely(field, defaults), type -> setUnsafely(field, config, type)))
, (field) -> field.getType() == RecipeScreenType.class, ConfigObjectImpl.UseSpecialRecipeTypeScreen.class);
guiRegistry.registerAnnotationProvider((i13n, field, config, defaults, guiProvider) ->
+ Collections.singletonList(new SearchFilterSyntaxHighlightingEntry( new TranslatableComponent(i13n), getUnsafely(field, config, SyntaxHighlightingMode.COLORFUL), getUnsafely(field, defaults), type -> setUnsafely(field, config, type)))
+ , (field) -> field.getType() == SyntaxHighlightingMode.class, ConfigObjectImpl.UseSpecialSearchFilterSyntaxHighlightingScreen.class);
+ guiRegistry.registerAnnotationProvider((i13n, field, config, defaults, guiProvider) ->
REIHelper.getInstance().getPreviousContainerScreen() == null || Minecraft.getInstance().getConnection() == null || Minecraft.getInstance().getConnection().getRecipeManager() == null ?
Collections.singletonList(new NoFilteringEntry(220, getUnsafely(field, config, new ArrayList<>()), getUnsafely(field, defaults), list -> setUnsafely(field, config, list)))
:
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java
index fa69e8a66..aee2abfe4 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java
@@ -346,6 +346,11 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData {
return Mth.clamp(appearance.verticalEntriesBoundaries, 0.1,1);
}
+ @Override
+ public SyntaxHighlightingMode getSyntaxHighlightingMode() {
+ return appearance.syntaxHighlightingMode;
+ }
+
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
@interface DontApplyFieldName {}
@@ -356,6 +361,10 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData {
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
+ @interface UseSpecialSearchFilterSyntaxHighlightingScreen {}
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target({ElementType.FIELD})
@interface UseFilteringScreen {}
@Retention(RetentionPolicy.RUNTIME)
@@ -413,6 +422,7 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData {
@UsePercentage(min = 0.1, max = 1.0, prefix = "Limit: ") private double horizontalEntriesBoundaries = 1.0;
@UsePercentage(min = 0.1, max = 1.0, prefix = "Limit: ") private double verticalEntriesBoundaries = 1.0;
+ @UseSpecialSearchFilterSyntaxHighlightingScreen private SyntaxHighlightingMode syntaxHighlightingMode = SyntaxHighlightingMode.COLORFUL;
}
public static class Functionality {
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/OverlaySearchFieldSyntaxHighlighter.java b/runtime/src/main/java/me/shedaniel/rei/impl/OverlaySearchFieldSyntaxHighlighter.java
index c63895f2c..3d8a8ba97 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/OverlaySearchFieldSyntaxHighlighter.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/OverlaySearchFieldSyntaxHighlighter.java
@@ -2,9 +2,10 @@ package me.shedaniel.rei.impl;
import me.shedaniel.rei.gui.OverlaySearchField;
import me.shedaniel.rei.impl.search.ArgumentsRegistry;
+import net.minecraft.util.IntRange;
import org.jetbrains.annotations.ApiStatus;
-import java.util.List;
+import java.util.Collection;
import java.util.function.Consumer;
@ApiStatus.Internal
@@ -20,27 +21,29 @@ public class OverlaySearchFieldSyntaxHighlighter implements Consumer<String> {
@Override
public void accept(String text) {
this.highlighted = new byte[text.length()];
- SearchArgument.ProcessedSink sink = new SearchArgument.ProcessedSink() {
+ SearchArgument.processSearchTerm(text, 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;
+
+ @Override
+ public void addPart(SearchArgument<?, ?> argument, Collection<IntRange> grammarRanges, int index) {
+ int argIndex = ArgumentsRegistry.ARGUMENT_LIST.indexOf(argument.getArgument()) * 2 + 1;
+ for (int i = argument.start(); i < argument.end(); i++) {
+ highlighted[i] = (byte) argIndex;
+ }
+ for (IntRange grammarRange : grammarRanges) {
+ for (int i = grammarRange.getMinInclusive(); i <= grammarRange.getMaxInclusive(); i++) {
+ highlighted[i + index] = (byte) (argIndex + 1);
}
}
}
- }
+ });
}
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/SearchArgument.java b/runtime/src/main/java/me/shedaniel/rei/impl/SearchArgument.java
index 78798ac87..8746bcb91 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/SearchArgument.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/SearchArgument.java
@@ -37,6 +37,7 @@ import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.Minecraft;
import net.minecraft.network.chat.Component;
+import net.minecraft.util.IntRange;
import net.minecraft.util.Unit;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.mutable.Mutable;
@@ -44,6 +45,7 @@ import org.apache.commons.lang3.mutable.MutableObject;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;
+import java.util.Collection;
import java.util.List;
import java.util.Locale;
import java.util.regex.Matcher;
@@ -87,6 +89,8 @@ public class SearchArgument<T, R> {
void addQuote(int index);
void addSplitter(int index);
+
+ void addPart(SearchArgument<?, ?> argument, Collection<IntRange> grammarRanges, int index);
}
@ApiStatus.Internal
@@ -107,8 +111,9 @@ public class SearchArgument<T, R> {
for (Argument<?, ?> argument : ArgumentsRegistry.ARGUMENT_LIST) {
MatchStatus status = argument.matchesArgumentPrefix(term);
if (status.isMatched()) {
+ SearchArgument<?, ?> searchArgument;
if (terms.group(1) != null) {
- arguments.add(new SearchArgument<>(argument, status.getText(), !status.isInverted(), terms.start(1) + tokenStartIndex, terms.end(1) + tokenStartIndex, !status.shouldPreserveCasing()));
+ arguments.add(searchArgument = new SearchArgument<>(argument, status.getText(), !status.isInverted(), terms.start(1) + tokenStartIndex, terms.end(1) + tokenStartIndex, !status.shouldPreserveCasing()));
if (sink != null) {
sink.addQuote(terms.start() + tokenStartIndex);
if (terms.end() - 1 + tokenStartIndex < searchTerm.length()) {
@@ -116,7 +121,10 @@ public class SearchArgument<T, R> {
}
}
} else {
- arguments.add(new SearchArgument<>(argument, status.getText(), !status.isInverted(), terms.start(2) + tokenStartIndex, terms.end(2) + tokenStartIndex, !status.shouldPreserveCasing()));
+ arguments.add(searchArgument = new SearchArgument<>(argument, status.getText(), !status.isInverted(), terms.start(2) + tokenStartIndex, terms.end(2) + tokenStartIndex, !status.shouldPreserveCasing()));
+ }
+ if (sink != null) {
+ sink.addPart(searchArgument, status.grammarRanges(), terms.start() + tokenStartIndex);
}
break;
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/search/Argument.java b/runtime/src/main/java/me/shedaniel/rei/impl/search/Argument.java
index 2806f2d52..e1769abfe 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/search/Argument.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/search/Argument.java
@@ -53,9 +53,9 @@ public abstract class Argument<T, R> {
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()));
- if (text.startsWith(prefix)) return MatchStatus.matched(text.substring(prefix.length()));
+ if (text.startsWith("-" + prefix)) return MatchStatus.invertMatched(text.substring(1 + prefix.length())).grammar(0, prefix.length() + 1);
+ if (text.startsWith(prefix + "-")) return MatchStatus.invertMatched(text.substring(1 + prefix.length())).grammar(0, prefix.length() + 1);
+ if (text.startsWith(prefix)) return MatchStatus.matched(text.substring(prefix.length())).grammar(0, prefix.length());
return MatchStatus.unmatched();
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/search/MatchStatus.java b/runtime/src/main/java/me/shedaniel/rei/impl/search/MatchStatus.java
index 8f56715d1..5642502bb 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/search/MatchStatus.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/search/MatchStatus.java
@@ -23,10 +23,13 @@
package me.shedaniel.rei.impl.search;
+import net.minecraft.util.IntRange;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Objects;
@ApiStatus.Internal
@@ -36,6 +39,7 @@ public final class MatchStatus {
@Nullable
private final String text;
private final boolean preserveCasing;
+ private final List<IntRange> grammarRanges = new ArrayList<>();
private MatchStatus(MatchType type, @Nullable String text, boolean preserveCasing) {
this.type = type;
@@ -67,6 +71,17 @@ public final class MatchStatus {
return new MatchStatus(!inverted ? MatchType.MATCHED : MatchType.INVERT_MATCHED, Objects.requireNonNull(text), preserveCasing);
}
+ public List<IntRange> grammarRanges() {
+ return grammarRanges;
+ }
+
+ public MatchStatus grammar(int start, int end) {
+ if (end - 1 >= start) {
+ this.grammarRanges.add(IntRange.of(start, end - 1));
+ }
+ return this;
+ }
+
public MatchStatus invert() {
if (isMatched()) {
this.type = isInverted() ? MatchType.MATCHED : MatchType.INVERT_MATCHED;
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/search/RegexArgument.java b/runtime/src/main/java/me/shedaniel/rei/impl/search/RegexArgument.java
index aeba0bc50..43f591cc7 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/search/RegexArgument.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/search/RegexArgument.java
@@ -57,7 +57,9 @@ public final class RegexArgument extends Argument<@Nullable Pattern, String> {
matchText = matchText.substring(1);
}
if (matchText.length() >= 3 && matchText.startsWith("r/") && matchText.endsWith("/"))
- return MatchStatus.result(matchText.substring(2, matchText.length() - 1), true, inverted);
+ return MatchStatus.result(matchText.substring(2, matchText.length() - 1), true, inverted)
+ .grammar(0, inverted ? 3 : 2)
+ .grammar(text.length() - 1, text.length());
return MatchStatus.unmatched();
}