diff options
| author | CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> | 2024-02-16 21:21:43 +1100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-16 11:21:43 +0100 |
| commit | f91973d60948d449cc45a4add901e6fe43aebd62 (patch) | |
| tree | 4c8c77ec4a9585a821651a034ebe5bed3308a6af /src/main/java/at/hannibal2/skyhanni/utils | |
| parent | 26fe548fa9a5cfe29b130a0a5585278df3429ee9 (diff) | |
| download | skyhanni-f91973d60948d449cc45a4add901e6fe43aebd62.tar.gz skyhanni-f91973d60948d449cc45a4add901e6fe43aebd62.tar.bz2 skyhanni-f91973d60948d449cc45a4add901e6fe43aebd62.zip | |
Moved many regex patterns in the repo and code cleanup. #871
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils')
4 files changed, 41 insertions, 50 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt index e44cccd9a..6b52d1eb2 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt @@ -26,11 +26,6 @@ import kotlin.time.Duration.Companion.seconds object ItemUtils { - // TODO USE SH-REPO - private val patternInFront = "(?: *§8(\\+§\\w)?(?<amount>[\\d.km,]+)(x )?)?(?<name>.*)".toPattern() - private val patternBehind = "(?<name>(?:['\\w-]+ ?)+)(?:§8x(?<amount>[\\d,]+))?".toPattern() - private val petLevelPattern = "\\[Lvl (.*)] (.*)".toPattern() - private val ignoredPetStrings = listOf( "Archer", "Berserk", @@ -66,7 +61,7 @@ object ItemUtils { fun isRecombobulated(stack: ItemStack) = stack.isRecombobulated() - fun isPet(name: String): Boolean = petLevelPattern.matches(name) && !ignoredPetStrings.any { name.contains(it) } + fun isPet(name: String): Boolean = UtilsPatterns.petLevelPattern.matches(name) && !ignoredPetStrings.any { name.contains(it) } fun maxPetLevel(name: String) = if (name.contains("Golden Dragon")) 200 else 100 @@ -323,18 +318,17 @@ object ItemUtils { return itemAmountCache[input]!! } - var matcher = patternInFront.matcher(input) - if (matcher.matches()) { - val itemName = matcher.group("name") + UtilsPatterns.readAmountBeforePattern.matchMatcher(input) { + val itemName = group("name") if (!itemName.contains("§8x")) { - return makePair(input, itemName.trim(), matcher) + return makePair(input, itemName.trim(), this) } } var string = input.trim() val color = string.substring(0, 2) string = string.substring(2) - matcher = patternBehind.matcher(string) + val matcher = UtilsPatterns.readAmountAfterPattern.matcher(string) if (!matcher.matches()) { println("") println("input: '$input'") diff --git a/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt index 926efc877..001315baf 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt @@ -4,31 +4,21 @@ import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.mixins.transformers.AccessorChatComponentText import at.hannibal2.skyhanni.utils.GuiRenderUtils.darkenColor import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators -import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern import net.minecraft.client.Minecraft import net.minecraft.client.gui.GuiUtilRenderComponents import net.minecraft.util.ChatComponentText import net.minecraft.util.IChatComponent import java.util.Base64 -import java.util.NavigableMap import java.util.UUID import java.util.function.Predicate import java.util.regex.Matcher import java.util.regex.Pattern object StringUtils { - - // TODO USE SH-REPO - private val playerChatPattern = "(?<important>.*?)(?:§[f7r])*: .*".toPattern() - private val chatUsernamePattern = - "^(?:§\\w\\[§\\w\\d+§\\w] )?(?:(?:§\\w)+\\S )?(?<rankedName>(?:§\\w\\[\\w.+] )?(?:§\\w)?(?<username>\\w+))(?: (?:§\\w)?\\[.+?])?".toPattern() private val whiteSpaceResetPattern = "^(?:\\s|§r)*|(?:\\s|§r)*$".toPattern() private val whiteSpacePattern = "^\\s*|\\s*$".toPattern() private val resetPattern = "(?i)§R".toPattern() - private val isRomanPattern by RepoPattern.pattern( - "utils.string.isroman", - "^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})" - ) + private val stringColourPattern = "§[0123456789abcdef].*".toPattern() fun String.trimWhiteSpaceAndResets(): String = whiteSpaceResetPattern.matcher(this).replaceAll("") fun String.trimWhiteSpace(): String = whiteSpacePattern.matcher(this).replaceAll("") @@ -68,31 +58,17 @@ object StringUtils { return builder.toString() } - /** - * From https://stackoverflow.com/questions/10711494/get-values-in-treemap-whose-string-keys-start-with-a-pattern - */ - fun <T> subMapWithKeysThatAreSuffixes(prefix: String, map: NavigableMap<String?, T>): Map<String?, T>? { - if ("" == prefix) return map - val lastKey = nextLexicographicallyStringWithSameLength(prefix) - return map.subMap(prefix, true, lastKey, false) - } - - fun nextLexicographicallyStringWithSameLength(input: String): String { - val lastCharPosition = input.length - 1 - val inputWithoutLastChar = input.substring(0, lastCharPosition) - val lastChar = input[lastCharPosition] - val incrementedLastChar = (lastChar.code + 1).toChar() - return inputWithoutLastChar + incrementedLastChar - } - fun UUID.toDashlessUUID(): String { return toString().replace("-", "") } - // TODO find better name for this method + inline fun <T> Pattern.matchMatcher(text: String, consumer: Matcher.() -> T) = matcher(text).let { if (it.matches()) consumer(it) else null } + inline fun <T> Pattern.findMatcher(text: String, consumer: Matcher.() -> T) = + matcher(text).let { if (it.find()) consumer(it) else null } + private fun String.internalCleanPlayerName(): String { val split = trim().split(" ") return if (split.size > 1) { @@ -122,9 +98,7 @@ object StringUtils { } fun getColor(string: String, default: Int, darker: Boolean = true): Int { - val stringPattern = "§[0123456789abcdef].*".toPattern() - - val matcher = stringPattern.matcher(string) + val matcher = stringColourPattern.matcher(string) if (matcher.matches()) { val colorInt = Minecraft.getMinecraft().fontRendererObj.getColorCode(string[1]) return if (darker) { @@ -265,7 +239,7 @@ object StringUtils { private fun matchPlayerChatMessage(string: String): Matcher? { var username = "" - var matcher = playerChatPattern.matcher(string) + var matcher = UtilsPatterns.playerChatPattern.matcher(string) if (matcher.matches()) { username = matcher.group("important").removeResets() } @@ -282,7 +256,7 @@ object StringUtils { username = username.removePrefix("§dFrom ") username = username.removePrefix("§dTo ") - matcher = chatUsernamePattern.matcher(username) + matcher = UtilsPatterns.chatUsernamePattern.matcher(username) return if (matcher.matches()) matcher else null } @@ -298,6 +272,6 @@ object StringUtils { fun String?.equalsIgnoreColor(string: String?) = this?.let { it.removeColor() == string?.removeColor() } ?: false fun String.isRoman(): Boolean { - return isRomanPattern.matches(this) + return UtilsPatterns.isRomanPattern.matches(this) } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/TimeUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/TimeUtils.kt index 43af202a8..4ca07e423 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/TimeUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/TimeUtils.kt @@ -14,9 +14,6 @@ import kotlin.time.toDuration object TimeUtils { - private val pattern = - "(?:(?<y>\\d+) ?y(?:\\w* ?)?)?(?:(?<d>\\d+) ?d(?:\\w* ?)?)?(?:(?<h>\\d+) ?h(?:\\w* ?)?)?(?:(?<m>\\d+) ?m(?:\\w* ?)?)?(?:(?<s>\\d+) ?s(?:\\w* ?)?)?".toPattern() - fun Duration.format( biggestUnit: TimeUnit = TimeUnit.YEAR, showMilliSeconds: Boolean = false, @@ -86,7 +83,7 @@ object TimeUtils { fun getDuration(string: String) = getMillis_(string.replace("m", "m ").replace(" ", " ").trim()) - private fun getMillis_(string: String) = pattern.matchMatcher(string.lowercase().trim()) { + private fun getMillis_(string: String) = UtilsPatterns.timeAmountPattern.matchMatcher(string.lowercase().trim()) { val years = group("y")?.toLong() ?: 0L val days = group("d")?.toLong() ?: 0L val hours = group("h")?.toLong() ?: 0L diff --git a/src/main/java/at/hannibal2/skyhanni/utils/UtilsPatterns.kt b/src/main/java/at/hannibal2/skyhanni/utils/UtilsPatterns.kt index 8f4d78239..5f466f33f 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/UtilsPatterns.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/UtilsPatterns.kt @@ -45,6 +45,32 @@ object UtilsPatterns { "item.petlevel", "(?:§f§f)?§7\\[Lvl (?<level>\\d+)] .*" ) + val readAmountBeforePattern by patternGroup.pattern( + "item.amount.front", + "(?: *§8(\\+§\\w)?(?<amount>[\\d.km,]+)(x )?)?(?<name>.*)" + ) + val readAmountAfterPattern by patternGroup.pattern( + "item.amount.behind", + "(?<name>(?:['\\w-]+ ?)+)(?:§8x(?<amount>[\\d,]+))?" + ) + + val timeAmountPattern by patternGroup.pattern( + "time.amount", + "(?:(?<y>\\d+) ?y(?:\\w* ?)?)?(?:(?<d>\\d+) ?d(?:\\w* ?)?)?(?:(?<h>\\d+) ?h(?:\\w* ?)?)?(?:(?<m>\\d+) ?m(?:\\w* ?)?)?(?:(?<s>\\d+) ?s(?:\\w* ?)?)?" + ) + + val playerChatPattern by patternGroup.pattern( + "string.playerchat", + "(?<important>.*?)(?:§[f7r])*: .*" + ) + val chatUsernamePattern by patternGroup.pattern( + "string.chatusername", + "^(?:§\\w\\[§\\w\\d+§\\w] )?(?:(?:§\\w)+\\S )?(?<rankedName>(?:§\\w\\[\\w.+] )?(?:§\\w)?(?<username>\\w+))(?: (?:§\\w)?\\[.+?])?" + ) + val isRomanPattern by RepoPattern.pattern( + "string.isroman", + "^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})" + ) val sackPattern by patternGroup.pattern( "item.sack", |
