This commit is contained in:
dotmg 2025-07-11 13:59:05 +02:00
parent b9021a7e00
commit c4cb836bd5
4 changed files with 41 additions and 11 deletions

View file

@ -1,9 +1,9 @@
M0:|c:Eb|m:2/4|t:FFPM 546 Haleloia, Haleloia, Jeso No Mpamonjiko|a:H. Rabeony 1860 eo ho eo - 1956|h:H. Rabeony 1860 eo ho eo - 1956|r:8.7.8.7.D. M0:|c:Eb|m:2/4|t:FF 33 Inty Aho Jesoa!|a:RATSIMBA Manahasaha|h:ANDRIAMAMPIANINA Landy
U0:z4:z224y62yy62yy62yy624t4yyy624t4yyy624t4yyy44t(111)18ty62yy(22)yyy6z2zG U0:z4:z224y62yy62yy62yy624t4yyy624t4yyy624t4yyy44t(111)18ty62yy(22)yyy6z2zG
N1:s,#l,ssfmdtdrtddfffslmmmrdr#rsttlsdsssslsssttlsdsmmmrdrs,sssfmd,d,fldlsmmfslsfmrffslts#t,sdrmfs-ldtdmrd N1:s,#l,ssfmdtdrtddfffslmmmrdr#rsttlsdsssslsssttlsdsmmmrdrs,sssfmd,d,fldlsmmfslsfmrffslts#t,sdrmfs-ldtdmrd
N2:#s,smmrdssstssTllldddddllttr4mddt4ddt4dmd5tsmmmrddTldffmdD4-D-drrmffmsstddTddlssdts N2:#s,smmrdssstssTllldddddllttr4mddt4ddt4dmd5tsmmmrddTldffmdD4z-DdrrmffmsstddTddlssdts
N3:#rsdtlsmrmfrmmfffmffF4frf4smmrrrfmmrfffmssF4ssddtlssmffltdsl4Tlsssr'r'dsmfsls-drrmsfm N3:#rsdtlsmrmfrmmfffmffF4frf4smmrrrfmmrfffmssF4ssddtlssmffltdsl4z-Tlsssr'r'dsmfsls-drrmsfm
N4:#f,sd4ls4ddffld#s,ffrrrrss6dds4dds#l,sssd'ddllrr#f,ssd7f4ddD4-D-rs5dfmrdlm,-frs4d N4:#f,sd4ls4ddffld#s,ffrrrrss6dds4dds#l,sssd'ddllrr#f,ssd7f4ddD4z-Drs5df'mrdlm-f'r,s4d
Y1:Inty aho Jesoa !/Miantso ahy Hianao/Na dia tsy mendrika e/Manolo-tena izao/Hianao no nifidy/Tsy haiko ny handà/Ty antso sarobidy/Ry Tompo, mamelà/Ny heloko rehetra/Diovy aho, havaozy/Ho olom-baovao/Hanao ny sitrakao/Ho mendrika tokoa/Ny antsonao Jesoa. Y1:Inty a\ho Jesoa!/Mi_antso a\hy Hianao/Na dia tsy mendrika\ e/Manolo-tena\ izao/Hiana_o no nifidy/Tsy haiko ny handà/Ty antso sarobidy/Ry Tompo, mamelà/Ny heloko rehetra/Di_ovy a\ho, havaozy/Ho olom-ba_ovao/Hanao ny sitrakao/Ho mendrika toko_a/Ny antsonao Jesoa.
Y2:Inty aho Jeso miantso ahy Hianao/Ny fahalemeko anie/Ry Tompo fantatrao/Hianao no nifidy/Sy maniraka ahy/Avy Aminao Jesoa/Ny herinny fanahy/Ho entiko manao/Ny asa atolotrao/Fa sarotra e ny dia/Ry Tompo manampia/Ho mendrika tokoa/Ny antsonao Jesoa Y2:Inty a\ho Jeso mi_antso a\hy Hianao/Ny fa\halemeko\ anie/Ry Tompo fantatrao/Hiana_o no nifidy/Sy he maniraka\ a\hy/Avy\ Ami_2nao Jesoa/Ny herinny fana\hy/Ho entiko mana_o/Ny asa atolotrao/Fa sarotra\ e ny dia/Ry Tompo manampia/Ho mendrika toko_a/Ny antsonao Jesoa
Y3:Inty aho Jesoa/Miantso ahy Hianao/Mba ho fahazavan/Izao tontolo izao/Hianao no nifidy ahy/Ho fanasina/Hanefa ny adidy/Lehibe sy masina/Koa hamasino, Tompo/Fa vonona aho hanompo/Hombay ny herinao/Hitondra aim-baovao/Ho mendrika tokoa/Ny antsonao Jesoa Y3:Inty a\ho Jesoa/Mi_antso a\hy Hianao/Mba ho fahazava\n/Izao tontolo\ izao/Hiana_o no nifidy ahy\Ho fanasina/Hanefa ny adidy/Le\hibe sy masina/Koa hamasino, Tompo/Fa vonona\ a\ho hanompo/Hombay ny herinao/Hitondra aim-baovao/Ho mendrika toko_a/Ny antsonao Jesoa

View file

@ -12,6 +12,7 @@ class PTemplate (val template: String, val separatorAfter: String, private val m
it.replace(Regex("^\\$\\{([a-z]:)?(.*)\\}"), "$2") it.replace(Regex("^\\$\\{([a-z]:)?(.*)\\}"), "$2")
.replace("\$Q", "\uD834\uDD10") .replace("\$Q", "\uD834\uDD10")
.replace(Regex("^[<=>]$"), "") .replace(Regex("^[<=>]$"), "")
.replace($$"$T", "")
} }
} }

View file

@ -12,7 +12,8 @@ class ParseULine (var line: String, var measure: Int) {
'2' to listOf("." , ".-," , ":" , ":-,"), '2' to listOf("." , ".-," , ":" , ":-,"),
'3' to listOf(".-," , ".-:" , ":-," , ":-."), '3' to listOf(".-," , ".-:" , ":-," , ":-."),
'4' to listOf(":" , ".-;-," , ":-." , ":-.-,"), '4' to listOf(":" , ".-;-," , ":-." , ":-.-,"),
'y' to listOf(".,D:", ".-,:D,", ":,D.", ":-,.D,") 'y' to listOf(".,D:", ".-,:D,", ":,D.", ":-,.D,"),
't' to listOf("DD", "DD", "DD", "DD")
) )
} }
@ -46,6 +47,7 @@ class ParseULine (var line: String, var measure: Int) {
val nTimes = nbIteration.toInt() val nTimes = nbIteration.toInt()
iterable.repeat(nTimes) iterable.repeat(nTimes)
}.replace("y", "2z11").toCharArray() }.replace("y", "2z11").toCharArray()
var actualComment = "" var actualComment = ""
parsedChars.forEach { parsedChars.forEach {
if (inComment) { if (inComment) {
@ -85,7 +87,7 @@ class ParseULine (var line: String, var measure: Int) {
'G' -> repeat(4) { parseUStage2('4') } 'G' -> repeat(4) { parseUStage2('4') }
'C' -> repeat(3) { parseUStage2('4') } 'C' -> repeat(3) { parseUStage2('4') }
'8' -> repeat(2) { parseUStage2('4') } '8' -> repeat(2) { parseUStage2('4') }
'4', '3', '2', '1' -> parseUStage2(it) '4', '3', '2', '1', 't' -> parseUStage2(it)
'6' -> repeat(2) { parseUStage2('3')} '6' -> repeat(2) { parseUStage2('3')}
'9' -> repeat(3) { parseUStage2('3')} '9' -> repeat(3) { parseUStage2('3')}
'A' -> run { 'A' -> run {
@ -103,7 +105,12 @@ class ParseULine (var line: String, var measure: Int) {
if (charX == 'z') { if (charX == 'z') {
sequence = sequence.replace('-', charX) sequence = sequence.replace('-', charX)
} }
if (codeChar == 't') {
cursorX += 4
sequence = $$"$TDD:"
} else {
cursorX += codeChar.toString().toInt() cursorX += codeChar.toString().toInt()
}
if (sequence.contains(':')) { if (sequence.contains(':')) {
val bar: Int = (cursorX / 4) % measure val bar: Int = (cursorX / 4) % measure
var replacement = ':' var replacement = ':'

View file

@ -34,7 +34,10 @@ import androidx.compose.ui.unit.TextUnit
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import mg.dot.feufaro.data.GridTUOData import mg.dot.feufaro.data.GridTUOData
import kotlin.math.min import kotlin.math.min
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.drawscope.Stroke
val FEUFAROO_TRIOLET_COLOR = Color.DarkGray
class TimeUnitObject (val pTemplate: PTemplate, val prevTUO: TimeUnitObject?) { class TimeUnitObject (val pTemplate: PTemplate, val prevTUO: TimeUnitObject?) {
var mutableNoteVersion: Int by mutableStateOf(0) var mutableNoteVersion: Int by mutableStateOf(0)
private var lyrics: MutableList<POneStanzaLyrics> = mutableListOf() private var lyrics: MutableList<POneStanzaLyrics> = mutableListOf()
@ -82,6 +85,9 @@ class TimeUnitObject (val pTemplate: PTemplate, val prevTUO: TimeUnitObject?) {
} }
return null return null
} }
fun isTriolet(): Boolean {
return pTemplate.hasMarker($$"$T")
}
fun addLyrics(lyricsIn: POneStanzaLyrics) { fun addLyrics(lyricsIn: POneStanzaLyrics) {
lyrics.add(lyricsIn) lyrics.add(lyricsIn)
} }
@ -206,6 +212,23 @@ fun TimeUnitComposable(
fontWeight = FontWeight.Bold fontWeight = FontWeight.Bold
} }
val hairPinSymbol = tuo.hasHairPin() val hairPinSymbol = tuo.hasHairPin()
val yHeight = with(density) { lineHeightDp.toPx()}
if (tuo.isTriolet()) {
Canvas(modifier = Modifier.fillMaxSize()) {
val arcWidth = with(density) { size.width * 0.75f}
drawArc(
color = FEUFAROO_TRIOLET_COLOR,
startAngle = 200f,
sweepAngle = 140f,
useCenter = false,
topLeft = Offset(0f, yHeight / 2),
size = Size(arcWidth, yHeight),
style = Stroke(width = 2f)
)
}
}
if ((hairPinSymbol == '=') && (TimeUnitObject.lastHairPinSymbol != null)) { if ((hairPinSymbol == '=') && (TimeUnitObject.lastHairPinSymbol != null)) {
println("LastHairpin: ${TimeUnitObject.lastHairPinSymbol} ${TimeUnitObject.lastHairPinStart}") println("LastHairpin: ${TimeUnitObject.lastHairPinSymbol} ${TimeUnitObject.lastHairPinStart}")
val hairPinStart = TimeUnitObject.lastHairPinStart val hairPinStart = TimeUnitObject.lastHairPinStart
@ -218,7 +241,6 @@ fun TimeUnitComposable(
) { ) {
val xStart = if (lastHairPinSymbol == '>') -size.width * (tuo.numBlock - hairPinStart) else size.width/2 val xStart = if (lastHairPinSymbol == '>') -size.width * (tuo.numBlock - hairPinStart) else size.width/2
val xEnd = if (lastHairPinSymbol == '>') size.width/2 else -size.width * (tuo.numBlock - hairPinStart) val xEnd = if (lastHairPinSymbol == '>') size.width/2 else -size.width * (tuo.numBlock - hairPinStart)
val yHeight = with(density) { lineHeightDp.toPx()}
drawLine( drawLine(
Color.DarkGray, Color.DarkGray,
start = Offset(x=xStart, y=0f), start = Offset(x=xStart, y=0f),