First attempt to better place (offseted) markers

This commit is contained in:
dotmg 2025-08-15 08:58:15 +02:00
parent 5782425643
commit 81c8c9a411
6 changed files with 44 additions and 16 deletions

View file

@ -2,9 +2,9 @@
"themeMode": "DARK", "themeMode": "DARK",
"fontSize": 18.5, "fontSize": 18.5,
"playlist": [ "playlist": [
"assets://ffpm-72.txt", "assets://ews-24.txt",
"assets://ffpm-79-2.txt",
"assets://ffpm-111.txt", "assets://ffpm-111.txt",
"assets://ews-23.txt",
"assets://ffpm-190.txt", "assets://ffpm-190.txt",
"assets://ews-13.txt", "assets://ews-13.txt",
"assets://ffpm-137.txt", "assets://ffpm-137.txt",

View file

@ -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/ 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' 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 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 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, 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. 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.

View file

@ -1,15 +1,35 @@
package mg.dot.feufaro.solfa package mg.dot.feufaro.solfa
class PTemplate (val template: String, val separatorAfter: String, private val markers: MutableList<String> = 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<PMarkers> = mutableListOf()){
var lastCalledMarker = 0
fun resetCalledMarker() {
lastCalledMarker = 0
}
fun hasMarker(marker: String): Boolean { 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 { fun markerToString(): String {
if (markers.isEmpty()) { if (markers.isEmpty()) {
return "" return ""
} }
return markers.joinToString(separator = "") { 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("\$Q", "\uD834\uDD10")
.replace(Regex("^[<=>]$"), "") .replace(Regex("^[<=>]$"), "")
.replace($$"$T", "") .replace($$"$T", "")
@ -19,7 +39,7 @@ class PTemplate (val template: String, val separatorAfter: String, private val m
fun hasKeyChange(): String { fun hasKeyChange(): String {
var returnFun = "" var returnFun = ""
markers.map { markers.map {
val regexFound = Regex("^\\$\\{c:(..?)\\}").find(it) val regexFound = Regex("^\\$\\{c:(..?)\\}").find(it.code)
if (regexFound != null) { if (regexFound != null) {
returnFun = regexFound.groupValues[1] returnFun = regexFound.groupValues[1]
} }

View file

@ -376,16 +376,18 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository
private fun loadT(line: String) { private fun loadT(line: String) {
templateString = line templateString = line
var nextTemplate = "" var nextTemplate = ""
val nextMarker: MutableList<String> = mutableListOf() val nextMarker: MutableList<PMarkers> = mutableListOf()
var tMarker = "" var tMarker = ""
val lineChar = line.toCharArray() val lineChar = line.toCharArray()
var offset: Int = 0
var templateOffset = 0
lineChar.forEach { lineChar.forEach {
if (tMarker != "") { if (tMarker != "") {
tMarker += it tMarker += it
if ((it == '}') if ((it == '}')
|| (tMarker.length == 2 && it != '{')) { || (tMarker.length == 2 && it != '{')) {
TimeUnitObject.hasMarker(true) TimeUnitObject.hasMarker(true)
nextMarker.add(tMarker) nextMarker.add(PMarkers(tMarker, offset - templateOffset))
tMarker = "" tMarker = ""
} }
return@forEach return@forEach
@ -394,12 +396,14 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository
tMarker = "$" tMarker = "$"
return@forEach return@forEach
} }
offset ++
if (it == ':' || it == '|' || it == '/' || it == '!') { if (it == ':' || it == '|' || it == '/' || it == '!') {
val newTemplateItem = val newTemplateItem =
PTemplate(nextTemplate, it.toString(), nextMarker.toMutableList()) PTemplate(nextTemplate, it.toString(), nextMarker.toMutableList())
T.add(newTemplateItem) T.add(newTemplateItem)
nextMarker.clear() nextMarker.clear()
nextTemplate = "" nextTemplate = ""
templateOffset = offset
} else { } else {
nextTemplate += it nextTemplate += it
} }

View file

@ -43,6 +43,7 @@ class TUNote (private val detailNote: MutableList<Note> = mutableListOf()){
} }
fun toString(fromKey: String = "", toKey: String = "") : String { fun toString(fromKey: String = "", toKey: String = "") : String {
var result = detailNote.joinToString (separator = ""){ it.toString() } var result = detailNote.joinToString (separator = ""){ it.toString() }
.replace(Regex("^z\\.- ,[zw-]$"), "")
.replace(Regex("\\. *,-$"), "") .replace(Regex("\\. *,-$"), "")
.replace(Regex(",-$"), "") .replace(Regex(",-$"), "")
.replace(Regex("(- *,z|- *,-|0$)"), "-") .replace(Regex("(- *,z|- *,-|0$)"), "-")

View file

@ -243,13 +243,6 @@ fun TimeUnitComposable(
} }
var fontStyle = FontStyle.Normal var fontStyle = FontStyle.Normal
var fontWeight = FontWeight.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 hairPinSymbol = tuo.hasHairPin()
val yHeight = with(density) { lineHeightDp.toPx()} val yHeight = with(density) { lineHeightDp.toPx()}
@ -298,6 +291,16 @@ fun TimeUnitComposable(
if (hairPinSymbol != null && hairPinSymbol != '=') { if (hairPinSymbol != null && hairPinSymbol != '=') {
TimeUnitObject.startHairPin(hairPinSymbol, tuo.numBlock) 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( AutoResizingText(
text = text, text = text,
minFontSize = 8.sp, minFontSize = 8.sp,