summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/utils
diff options
context:
space:
mode:
authorCalMWolfs <94038482+CalMWolfs@users.noreply.github.com>2024-02-16 21:21:43 +1100
committerGitHub <noreply@github.com>2024-02-16 11:21:43 +0100
commitf91973d60948d449cc45a4add901e6fe43aebd62 (patch)
tree4c8c77ec4a9585a821651a034ebe5bed3308a6af /src/main/java/at/hannibal2/skyhanni/utils
parent26fe548fa9a5cfe29b130a0a5585278df3429ee9 (diff)
downloadskyhanni-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')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt16
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt44
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/TimeUtils.kt5
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/UtilsPatterns.kt26
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",