diff --git a/src/main/java/net/moecraft/nechar/NecharDisplayFilter.java b/src/main/java/net/moecraft/nechar/NecharDisplayFilter.java index fbfa0a6..45bf5b6 100644 --- a/src/main/java/net/moecraft/nechar/NecharDisplayFilter.java +++ b/src/main/java/net/moecraft/nechar/NecharDisplayFilter.java @@ -1,6 +1,7 @@ package net.moecraft.nechar; -import static net.moecraft.nechar.NotEnoughCharacters.CONTEXT; +import static net.moecraft.nechar.NecharUtils.contain; +import static net.vfyjxf.nechar.NechConfig.enableVoltageSpecialSearchName; import java.util.regex.Pattern; @@ -22,7 +23,7 @@ public NecharDisplayFilter(String searchText, Pattern pattern) { public boolean matches(ItemStack itemStack) { String displayName = EnumChatFormatting.getTextWithoutFormattingCodes(itemStack.getDisplayName()); - if (!displayName.isEmpty() && CONTEXT.contains(displayName, this.searchText)) { + if (!displayName.isEmpty() && contain(displayName, this.searchText, enableVoltageSpecialSearchName)) { return true; } @@ -31,12 +32,11 @@ public boolean matches(ItemStack itemStack) { itemStack.getItem() .getItemStackDisplayName(itemStack)); - if (displayName.isEmpty() && CONTEXT.contains(displayName, this.searchText)) { + if (!displayName.isEmpty() && contain(displayName, this.searchText, enableVoltageSpecialSearchName)) { return true; } } return super.matches(itemStack); } - } diff --git a/src/main/java/net/moecraft/nechar/NecharTooltipFilter.java b/src/main/java/net/moecraft/nechar/NecharTooltipFilter.java index 2cb8150..457b60f 100644 --- a/src/main/java/net/moecraft/nechar/NecharTooltipFilter.java +++ b/src/main/java/net/moecraft/nechar/NecharTooltipFilter.java @@ -1,6 +1,7 @@ package net.moecraft.nechar; -import static net.moecraft.nechar.NotEnoughCharacters.CONTEXT; +import static net.moecraft.nechar.NecharUtils.contain; +import static net.vfyjxf.nechar.NechConfig.enableVoltageSpecialSearchTooltips; import java.util.regex.Pattern; @@ -19,7 +20,8 @@ public NecharTooltipFilter(String searchText, Pattern pattern) { @Override public boolean matches(ItemStack itemStack) { - return CONTEXT.contains(getSearchTooltip(itemStack), this.searchText) || super.matches(itemStack); + return contain(getSearchTooltip(itemStack), this.searchText, enableVoltageSpecialSearchTooltips) + || super.matches(itemStack); } } diff --git a/src/main/java/net/moecraft/nechar/NecharUtils.java b/src/main/java/net/moecraft/nechar/NecharUtils.java new file mode 100644 index 0000000..faa0207 --- /dev/null +++ b/src/main/java/net/moecraft/nechar/NecharUtils.java @@ -0,0 +1,86 @@ +package net.moecraft.nechar; + +import static net.moecraft.nechar.NotEnoughCharacters.CONTEXT; +import static net.vfyjxf.nechar.NechConfig.enableIgnoreComma; + +public class NecharUtils { + + private static String deleteComma(String str) { + return str.replaceAll("(?<=[0-9]),(?=[0-9])", ""); + } + + private static String replaceExtraChars(String str) { + + if (str.contains("\ud872")) { + str = str.replaceAll("\ud872\udf3b", "\ue900") // 钅卢 + .replaceAll("\ud872\udf4a", "\ue901") // 钅杜 + .replaceAll("\ud872\udf73", "\ue902") // 钅喜 + .replaceAll("\ud872\udf5b", "\ue903") // 钅波 + .replaceAll("\ud872\udf76", "\ue904") // 钅黑 + .replaceAll("\ud872\udf2d", "\ue907"); // 钅仑 + } + + if (str.contains("\ud86d")) { + str = str.replaceAll("\ud86d\udffc", "\ue906") // 钅达 + .replaceAll("\ud86d\udce7", "\ue90a") // 钅夫 + .replaceAll("\ud86d\udff7", "\ue90c"); // 钅仑 + } + + return str; + } + + private static boolean containWithVoltage(String voltage, String sourseText, String searchText) { + if (!searchText.contains(voltage)) { + return false; + } + if (!sourseText.contains(voltage)) { + return false; + } // check if [voltage] can be found + String[] sList = searchText.split(voltage, 2); // check if texts between "max" can be found + if (sList.length == 2 && !CONTEXT.contains(sourseText, sList[1])) { + return false; + } + return CONTEXT.contains(sourseText, sList[0]); + } + + private static String[] voltageListWithLetterV = { "ulv", "lv", "mv", "hv", "ev", "iv", "luv", "uv", "uhv", "uev", + "uiv", "umv", "uxv" }; + + public static boolean contain(String sourseText, String searchText, Boolean enableSpecialSearch) { + + sourseText = replaceExtraChars(sourseText); + searchText = replaceExtraChars(searchText); + + if (enableIgnoreComma && !searchText.contains(",")) { + sourseText = deleteComma(sourseText); + searchText = deleteComma(searchText); + } + + if (CONTEXT.contains(sourseText, searchText)) { + return true; + } + + // may be very slow, only try to find 1 voltage level + if (!enableSpecialSearch) { + return false; + } + + sourseText = sourseText.toLowerCase(); + searchText = searchText.toLowerCase(); + + if (containWithVoltage("zpm", sourseText, searchText) || containWithVoltage("max", sourseText, searchText)) { + return true; + } + if (!(sourseText.contains("v") || searchText.contains("v"))) { + return false; + } + for (String name : voltageListWithLetterV) { + if (containWithVoltage(name, sourseText, searchText)) { + return true; + } + } + return false; + } + // return CONTEXT.contains(sourseText, searchText); + +} diff --git a/src/main/java/net/moecraft/nechar/NotEnoughCharacters.java b/src/main/java/net/moecraft/nechar/NotEnoughCharacters.java index 2a1381d..544101f 100644 --- a/src/main/java/net/moecraft/nechar/NotEnoughCharacters.java +++ b/src/main/java/net/moecraft/nechar/NotEnoughCharacters.java @@ -34,20 +34,34 @@ private static class CustomDictLoader extends DictLoader.Default { @Override public void load(BiConsumer feed) { super.load(feed); - feed.accept('\ue900', new String[] { "lu2", "jinlu" }); // 钅卢 - feed.accept('\ue901', new String[] { "du4", "jindu" }); // 钅杜 - feed.accept('\ue902', new String[] { "xi3", "jinxi" }); // 钅喜 - feed.accept('\ue903', new String[] { "bo1", "jinbo" }); // 钅波 - feed.accept('\ue904', new String[] { "hei1", "jinhei" }); // 钅黑 - feed.accept('\u9fcf', new String[] { "mai4", "jinmai" });// 钅麦 - feed.accept('\ue906', new String[] { "da2", "jinda" });// 钅达 - feed.accept('\ue907', new String[] { "lun2", "jinlun" });// 钅仑 - feed.accept('\u9fd4', new String[] { "ge1", "jinge" });// 钅哥 - feed.accept('\u9fed', new String[] { "ni3", "jiner" });// 钅尔 - feed.accept('\ue90a', new String[] { "fu1", "jinfu" });// 钅夫 - feed.accept('\ue90c', new String[] { "li4", "jinli" });// 钅立 - feed.accept('\u9fec', new String[] { "tian2", "shitian" });// 石田 - feed.accept('\u9feb', new String[] { "ao4", "qiao", "aoqi" });// 气奥 + // 钅卢 + feed.accept('\ue900', new String[] { "lu2", "jinlu" }); + // 钅杜 + feed.accept('\ue901', new String[] { "du4", "jindu" }); + // 钅喜 + feed.accept('\ue902', new String[] { "xi3", "jinxi" }); + // 钅波 + feed.accept('\ue903', new String[] { "bo1", "jinbo" }); + // 钅黑 + feed.accept('\ue904', new String[] { "hei1", "jinhei" }); + // 钅麦 + feed.accept('\u9fcf', new String[] { "mai4", "jinmai" }); + // 钅达 + feed.accept('\ue906', new String[] { "da2", "jinda" }); + // 钅仑 + feed.accept('\ue907', new String[] { "lun2", "jinlun" }); + // 钅哥 + feed.accept('\u9fd4', new String[] { "ge1", "jinge" }); + // 钅尔 + feed.accept('\u9fed', new String[] { "ni3", "jiner" }); + // 钅夫 + feed.accept('\ue90a', new String[] { "fu1", "jinfu" }); + // 钅立 + feed.accept('\ue90c', new String[] { "li4", "jinli" }); + // 石田 + feed.accept('\u9fec', new String[] { "tian2", "shitian" }); + // 气奥 + feed.accept('\u9feb', new String[] { "ao4", "qiao", "aoqi" }); } } diff --git a/src/main/java/net/vfyjxf/nechar/NechConfig.java b/src/main/java/net/vfyjxf/nechar/NechConfig.java index ad6e991..a163a04 100644 --- a/src/main/java/net/vfyjxf/nechar/NechConfig.java +++ b/src/main/java/net/vfyjxf/nechar/NechConfig.java @@ -17,6 +17,9 @@ public class NechConfig { public static boolean EnableFIng2In = false; public static boolean EnableFEng2En = false; public static boolean EnableFU2V = false; + public static boolean enableIgnoreComma = false; + public static boolean enableVoltageSpecialSearchName = false; + public static boolean enableVoltageSpecialSearchTooltips = false; public static Spell KeyboardType = Spell.QUANPIN; public static String[] neiAllowedLanguages = new String[0]; public static String[] transformerRegExpAdditionalList = new String[0]; @@ -147,6 +150,23 @@ public static void loadConfig(File configFile) { neiAllowedLanguages = config .get("nei", "allowedLanguages", new String[] { "zh_CN", "zh_TW" }, "List of languages PinIn is used for") .getStringList(); + enableIgnoreComma = config + .get("search", "enableIgnoreComma", false, "Set to true to enable ignore comma between numbers") + .getBoolean(); + enableVoltageSpecialSearchName = config + .get( + "search", + "enableVoltageSpecialSearchName", + false, + "!Slow! Set to true to search Voltage names separately for item names") + .getBoolean(); + enableVoltageSpecialSearchTooltips = config + .get( + "search", + "enableVoltageSpecialSearchTooltips", + false, + "!Slow! Set to true to search Voltage names separately for tooltips") + .getBoolean(); if (config.hasChanged()) config.save(); }