From 81515a40f1ee5d03d23594db98a54d732c18d21d Mon Sep 17 00:00:00 2001 From: Hasinjato Date: Wed, 14 Oct 2026 09:14:39 +0300 Subject: [PATCH] Fix index & keep split block when editing on TuoDetailDialog --- .../kotlin/mg/dot/feufaro/solfa/Solfa.kt | 16 ++++++++++------ .../mg/dot/feufaro/solfa/TimeUnitObject.kt | 2 +- 2 files changed, 11 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 20174ac..39d5d5a 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Solfa.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Solfa.kt @@ -729,7 +729,7 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository val cleanNewNote = revertMusicalInput(newNote) - val regex = Regex("#\\S[',]*|\\s#\\S[',]*|/|\\(|\\)|[drmfsltDRFSTzw][0-9'¹²³⁴⁵₁₂₃₄₅,]*|[-.―•]") + val regex = Regex("#\\S[',]*|\\s#\\S[',]*|/|\\(|\\)|\\$\\{[^\\}]+\\}|[drmfsltDRFSTzw][0-9'¹²³⁴⁵₁₂₃₄₅,]*|[-.―•]") val allTokens = regex.findAll(noteExpanded) .map { it.value } .filter { it != "." } @@ -756,14 +756,16 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository while (i < allTokens.size) { if (consumedTokenIndices.contains(i)) { val token = allTokens[i] - if (token.matches(Regex("[drmfsltDRFSTzw].*|[-―]"))) { + val isSplitBlock = token.startsWith("\${") && token.endsWith("}") + if (token.matches(Regex("[drmfsltDRFSTzw].*|[-―]")) && !isSplitBlock) { currentLogicalIdx++ } i++ continue } val token = allTokens[i] - val isStructural = token.contains("#") || token == "/" || token == "(" || token == ")" + val isSplitBlock = token.startsWith("\${") && token.endsWith("}") + val isStructural = token.contains("#") || token == "/" || token == "(" || token == ")" || isSplitBlock if (isStructural) { // println(String.format("%-5d | %-10s | %-8s | %-12s | %-10s", i, token, "STRUCT", "-", "Keep")) @@ -814,7 +816,8 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository while (lookAheadIdx < allTokens.size) { val lat = allTokens[lookAheadIdx] - if ((lat.matches(Regex("[-―]")) || lat.startsWith("z")) && !consumedTokenIndices.contains(lookAheadIdx)) { + val latIsSplit = lat.startsWith("\${") && lat.endsWith("}") + if ((lat.matches(Regex("[-―]")) || lat.startsWith("z")) && !consumedTokenIndices.contains(lookAheadIdx) && !latIsSplit) { foundDashIdx = lookAheadIdx break } @@ -861,9 +864,10 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository continue } val nextT = allTokens[i] - if (!nextT.contains("#") && nextT != "/" && nextT != "(" && nextT != ")") { + val nextIsSplit = nextT.startsWith("\${") && nextT.endsWith("}") + if (!nextT.contains("#") && nextT != "/" && nextT != "(" && nextT != ")" && !nextIsSplit) { skipped++ - } else if (hasAnchor) { + } else if (hasAnchor || nextIsSplit) { resultTokens.add(nextT) } i++ diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/TimeUnitObject.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/TimeUnitObject.kt index b4a3fa0..5c0925e 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/TimeUnitObject.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/TimeUnitObject.kt @@ -1124,7 +1124,7 @@ fun LazyVerticalGridTUO( selectedIndex = newIndex selectedGridIndex = newIndex val globalList = sharedScreenModel.tuoList.value - val nextTUO = globalList.getOrNull(newIndex) + val nextTUO = globalList.getOrNull(newIndex+1) if (nextTUO != null) { selectedTUO = nextTUO