2024-06-27 18:03:50 +03:00
|
|
|
package codechicken.nei;
|
|
|
|
|
|
2024-12-23 12:21:28 +02:00
|
|
|
import java.util.List;
|
2024-06-27 18:03:50 +03:00
|
|
|
import java.util.StringJoiner;
|
|
|
|
|
|
|
|
|
|
import net.minecraft.util.EnumChatFormatting;
|
|
|
|
|
|
|
|
|
|
import codechicken.nei.FormattedTextField.TextFormatter;
|
2024-12-23 12:21:28 +02:00
|
|
|
import codechicken.nei.SearchTokenParser.SearchToken;
|
2024-06-27 18:03:50 +03:00
|
|
|
|
|
|
|
|
public class SearchTextFormatter implements TextFormatter {
|
|
|
|
|
|
|
|
|
|
protected final SearchTokenParser searchParser;
|
|
|
|
|
|
|
|
|
|
public SearchTextFormatter(SearchTokenParser searchParser) {
|
|
|
|
|
this.searchParser = searchParser;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public String format(String text) {
|
2024-12-23 12:21:28 +02:00
|
|
|
final String[] parts = (text + "| ").split("\\|");
|
2024-06-27 18:03:50 +03:00
|
|
|
StringJoiner formattedText = new StringJoiner(EnumChatFormatting.GRAY + "|");
|
|
|
|
|
|
2024-12-23 12:21:28 +02:00
|
|
|
for (int i = 0; i < parts.length - 1; i++) {
|
|
|
|
|
final String filterText = parts[i];
|
|
|
|
|
final List<SearchToken> tokens = searchParser.splitSearchText(filterText);
|
2024-06-27 18:03:50 +03:00
|
|
|
StringBuilder formattedPart = new StringBuilder();
|
|
|
|
|
int startIndex = 0;
|
|
|
|
|
|
2024-12-23 12:21:28 +02:00
|
|
|
for (SearchToken token : tokens) {
|
|
|
|
|
formattedPart.append(filterText.substring(startIndex, token.start));
|
2024-06-27 18:03:50 +03:00
|
|
|
EnumChatFormatting tokenColor = EnumChatFormatting.RESET;
|
|
|
|
|
|
2024-12-23 12:21:28 +02:00
|
|
|
if (token.firstChar != null) {
|
|
|
|
|
tokenColor = searchParser.getProvider(token.firstChar).getHighlightedColor();
|
2024-06-27 18:03:50 +03:00
|
|
|
}
|
|
|
|
|
|
2024-12-23 12:21:28 +02:00
|
|
|
if (token.ignore) {
|
2024-06-27 18:03:50 +03:00
|
|
|
formattedPart.append(EnumChatFormatting.BLUE + "-");
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-23 12:21:28 +02:00
|
|
|
if (token.firstChar != null) {
|
|
|
|
|
formattedPart.append(tokenColor + String.valueOf(token.firstChar));
|
2024-06-27 18:03:50 +03:00
|
|
|
}
|
|
|
|
|
|
2024-12-23 12:21:28 +02:00
|
|
|
if (token.quotes) {
|
2024-06-27 18:03:50 +03:00
|
|
|
formattedPart.append(EnumChatFormatting.GOLD + "\"");
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-23 12:21:28 +02:00
|
|
|
if (!token.rawText.isEmpty()) {
|
|
|
|
|
formattedPart.append(tokenColor + token.rawText);
|
2024-06-27 18:03:50 +03:00
|
|
|
}
|
|
|
|
|
|
2024-12-23 12:21:28 +02:00
|
|
|
if (token.quotes) {
|
2024-06-27 18:03:50 +03:00
|
|
|
formattedPart.append(EnumChatFormatting.GOLD + "\"");
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-23 12:21:28 +02:00
|
|
|
startIndex = token.end;
|
2024-06-27 18:03:50 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
formattedPart.append(filterText.substring(startIndex, filterText.length()));
|
|
|
|
|
formattedText.add(formattedPart);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return formattedText.toString();
|
|
|
|
|
}
|
|
|
|
|
}
|