From 640be8edb520ec570e192a1bc0b146cefff7ecc1 Mon Sep 17 00:00:00 2001 From: Hasinjato Date: Thu, 13 Aug 2026 12:16:27 +0300 Subject: [PATCH] Validate first song key, with support minor key --- .../kotlin/mg/dot/feufaro/solfa/Solfa.kt | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Solfa.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Solfa.kt index 75037b1..0913b90 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Solfa.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Solfa.kt @@ -2361,14 +2361,20 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository } if ("c" == subKey) { val validKeys = Transpose.keyToNumber.sortedByDescending { it.length } - val keyRegex = Regex("\\b(${validKeys.joinToString("|")})\\b", RegexOption.IGNORE_CASE) + val keyRegex = Regex("\\b(${validKeys.joinToString("|")})(m)?\\b", RegexOption.IGNORE_CASE) val rawText = line.substringAfter("c:") - val matchedKey = keyRegex.find(rawText)?.value - val tonality = Transpose.keyToNumber.firstOrNull { it.equals(matchedKey, ignoreCase = true) } - if(tonality != null) { - meta["C"] = tonality - sharedScreenModel.setSongKey(tonality) - sharedScreenModel.setTransposeAsIf(tonality) + val matchResult = keyRegex.find(rawText) + + if (matchResult != null) { + val rawBaseKey = matchResult.groupValues[1] + val hasMinor = matchResult.groupValues[2].isNotEmpty() + val baseTonality = Transpose.keyToNumber.firstOrNull { it.equals(rawBaseKey, ignoreCase = true) } + if (baseTonality != null) { + val tonality = if (hasMinor) "${baseTonality}m" else baseTonality + meta["C"] = tonality + sharedScreenModel.setSongKey(tonality) + sharedScreenModel.setTransposeAsIf(tonality) + } } } }