From 81c8c9a4119d5aaf74464832e9a6298de9f862f7 Mon Sep 17 00:00:00 2001 From: dotmg Date: Fri, 15 Aug 2025 08:58:15 +0200 Subject: [PATCH] First attempt to better place (offseted) markers --- .../composeResources/files/config.json | 4 +-- .../composeResources/files/ews-24.txt | 2 +- .../kotlin/mg/dot/feufaro/solfa/PTemplate.kt | 28 ++++++++++++++++--- .../kotlin/mg/dot/feufaro/solfa/Solfa.kt | 8 ++++-- .../kotlin/mg/dot/feufaro/solfa/TUNote.kt | 1 + .../mg/dot/feufaro/solfa/TimeUnitObject.kt | 17 ++++++----- 6 files changed, 44 insertions(+), 16 deletions(-) diff --git a/composeApp/src/commonMain/composeResources/files/config.json b/composeApp/src/commonMain/composeResources/files/config.json index ba37ee5..d079209 100644 --- a/composeApp/src/commonMain/composeResources/files/config.json +++ b/composeApp/src/commonMain/composeResources/files/config.json @@ -2,9 +2,9 @@ "themeMode": "DARK", "fontSize": 18.5, "playlist": [ - "assets://ffpm-72.txt", + "assets://ews-24.txt", + "assets://ffpm-79-2.txt", "assets://ffpm-111.txt", - "assets://ews-23.txt", "assets://ffpm-190.txt", "assets://ews-13.txt", "assets://ffpm-137.txt", diff --git a/composeApp/src/commonMain/composeResources/files/ews-24.txt b/composeApp/src/commonMain/composeResources/files/ews-24.txt index bf040ba..3adce9d 100644 --- a/composeApp/src/commonMain/composeResources/files/ews-24.txt +++ b/composeApp/src/commonMain/composeResources/files/ews-24.txt @@ -2,7 +2,7 @@ M0:|c:Db|m:4/4|t:EWS 24 When the mists have rolled in splendor|a:Annie Elvira Hu U0:z0:313131313131314/313131313131314/313131313131314/31313113313131$Q4/31431313122314/31431313131314/31313131313131$Q4/31313113313${rit.}1$Q3$Q1$Q4/ N1:mfsssssd'tlssssssSlllllllllltd'tlsd'd'd'd'd'mfsllllr'r'd'tttttsltd'd'd'd'd'mfs---d'tls----sSl---ltd't----ltd'd'd'd'd'mfsllllr'r'd'tttttsltd'd'd'd'd' N2:drmmmmmmsfmmffmmmffffffffFFsFsffmmmmmdrmffffFffffffffffmmfrmdrm---msfmmffmmmf--FFsls----ffmmmmmdrmffffFffffffffffmmfrm -N3:ssssssssssd'd'ttd'/sd'd'd'd'd'd'd'd'd'd'd'tr'r'/ttd'sssssd'd'd'd'd'll/td'r'r'r'r'r'td'r'd'Tlss/---sss-zzzd'ttd'z--d'd'd'd'tr'r'r'r'r'ttr'd'd'd'd'd'ssd'd'd'd'lltd'r'r'r'r'r'td'r'd'Tlss +N3:ssssssssssd'd'ttd'/sd'd'd'd'd'd'd'd'd'd'd'tr'r'/ttd'sssssd'd'd'd'd'll/td'r'r'r'r'r'td'r'd'Tlss/zzzsss-zzzd'ttd'zzzd'd'd'd'tr'r'r'r'r'ttr'd'd'd'd'd'ssd'd'd'd'lltd'r'r'r'r'r'td'r'd'Tlss N4:ddddddddddddrs,d/ddffffffffrrrrs/ssddddddddffffr/ssssssssssddddd/zzzddd-zzzdrs,d/zzzffrrrrsssssssmmmmddddffffrssssssssssddddd O1:v34:_3We shall know _3as we are known,_4/Ne_ver more _3to walk a_lone, E1:When the mists have rolled in splen_dor/From the beau_ty of the hills,/And the sun_light falls in glad_ness/On the ri_ver and the rills,/We re_call our Fa_ther's pro_mise/In the rain_bow of the spray:/We shall know each o_ther bet_ter/When the mists have cleared a_way./${R=}${O:1}We shall know _3as we are known,_4/Ne_ver more _3to walk a_lone,_4/In the dawn_ing of the morn_ing/Of that bright and hap_py day./We shall know each o_ther bet_ter,/When the mists have rolled a_way. diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/PTemplate.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/PTemplate.kt index fbc8157..fbec31b 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/PTemplate.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/PTemplate.kt @@ -1,15 +1,35 @@ package mg.dot.feufaro.solfa -class PTemplate (val template: String, val separatorAfter: String, private val markers: MutableList = mutableListOf("")){ +class PMarkers(val code: String, val offset: Int = 0, var boundaries: Int = 0) { + fun changeBoundaries(newBoundaries: Int) { + boundaries = newBoundaries + } +} +class PTemplate (val template: String, val separatorAfter: String, private val markers: MutableList = mutableListOf()){ + var lastCalledMarker = 0 + fun resetCalledMarker() { + lastCalledMarker = 0 + } fun hasMarker(marker: String): Boolean { - return markers.contains(marker) + return markers.any { it.code == marker } + } + fun callNextMarker(): PMarkers? { + if (markers.size <= lastCalledMarker) return null + val boundaries = if (markers.size > lastCalledMarker+1) { + markers[lastCalledMarker+1].offset + } else 0 + val pMarkers = markers[lastCalledMarker] + lastCalledMarker++ + pMarkers.changeBoundaries(boundaries) + return pMarkers } fun markerToString(): String { if (markers.isEmpty()) { return "" } return markers.joinToString(separator = "") { - it.replace(Regex("^\\$\\{([abd-z]:)?(.*)\\}"), "$2") + val prefix = if (it.offset <= 0) "" else " ".repeat(it.offset) //@todo better position the marker + prefix + it.code.replace(Regex("^\\$\\{([abd-z]:)?(.*)\\}"), "$2") .replace("\$Q", "\uD834\uDD10") .replace(Regex("^[<=>]$"), "") .replace($$"$T", "") @@ -19,7 +39,7 @@ class PTemplate (val template: String, val separatorAfter: String, private val m fun hasKeyChange(): String { var returnFun = "" markers.map { - val regexFound = Regex("^\\$\\{c:(..?)\\}").find(it) + val regexFound = Regex("^\\$\\{c:(..?)\\}").find(it.code) if (regexFound != null) { returnFun = regexFound.groupValues[1] } 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 923e7e1..bb4c0c7 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Solfa.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Solfa.kt @@ -376,16 +376,18 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository private fun loadT(line: String) { templateString = line var nextTemplate = "" - val nextMarker: MutableList = mutableListOf() + val nextMarker: MutableList = mutableListOf() var tMarker = "" val lineChar = line.toCharArray() + var offset: Int = 0 + var templateOffset = 0 lineChar.forEach { if (tMarker != "") { tMarker += it if ((it == '}') || (tMarker.length == 2 && it != '{')) { TimeUnitObject.hasMarker(true) - nextMarker.add(tMarker) + nextMarker.add(PMarkers(tMarker, offset - templateOffset)) tMarker = "" } return@forEach @@ -394,12 +396,14 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository tMarker = "$" return@forEach } + offset ++ if (it == ':' || it == '|' || it == '/' || it == '!') { val newTemplateItem = PTemplate(nextTemplate, it.toString(), nextMarker.toMutableList()) T.add(newTemplateItem) nextMarker.clear() nextTemplate = "" + templateOffset = offset } else { nextTemplate += it } diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/TUNote.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/TUNote.kt index 9e6aba3..dce4683 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/TUNote.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/TUNote.kt @@ -43,6 +43,7 @@ class TUNote (private val detailNote: MutableList = mutableListOf()){ } fun toString(fromKey: String = "", toKey: String = "") : String { var result = detailNote.joinToString (separator = ""){ it.toString() } + .replace(Regex("^z\\.- ,[zw-]$"), "") .replace(Regex("\\. *,-$"), "") .replace(Regex(",-$"), "") .replace(Regex("(- *,z|- *,-|0$)"), "-") 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 3fc2b32..cd8f13d 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/TimeUnitObject.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/TimeUnitObject.kt @@ -243,13 +243,6 @@ fun TimeUnitComposable( } var fontStyle = FontStyle.Normal var fontWeight = FontWeight.Normal - val text = tuo.pTemplate.markerToString() - if (text.contains(Regex("^([mfp]+|[rR]it.*)$"))) { - fontStyle = FontStyle.Italic - } - if (text.contains("p")) { - fontWeight = FontWeight.Bold - } val hairPinSymbol = tuo.hasHairPin() val yHeight = with(density) { lineHeightDp.toPx()} @@ -298,6 +291,16 @@ fun TimeUnitComposable( if (hairPinSymbol != null && hairPinSymbol != '=') { TimeUnitObject.startHairPin(hairPinSymbol, tuo.numBlock) } + // @todo pTemplate.markerToString retourne les marqueurs comme une seule chaîne + // problème si template = $QD:,-$QD + tuo.pTemplate.resetCalledMarker() + val text = tuo.pTemplate.markerToString() + if (text.contains(Regex("^([mfp]+|[rR]it.*)$"))) { + fontStyle = FontStyle.Italic + } + if (text.contains("p")) { + fontWeight = FontWeight.Bold + } AutoResizingText( text = text, minFontSize = 8.sp,