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) + } } } }