diff --git a/composeApp/src/commonMain/composeResources/files/ff-33.txt b/composeApp/src/commonMain/composeResources/files/ff-33.txt index c553892..3e293ee 100644 --- a/composeApp/src/commonMain/composeResources/files/ff-33.txt +++ b/composeApp/src/commonMain/composeResources/files/ff-33.txt @@ -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 N1:s,#l,ssfmdtdrtddfffslmmmrdr#rsttlsdsssslsssttlsdsmmmrdrs,sssfmd,d,fldlsmmfslsfmrffslts#t,sdrmfs-ldtdmrd -N2:#s,smmrdssstssTllldddddllttr4mddt4ddt4dmd5tsmmmrddTldffmdD4-D-drrmffmsstddTddlssdts -N3:#rsdtlsmrmfrmmfffmffF4frf4smmrrrfmmrfffmssF4ssddtlssmffltdsl4Tlsssr'r'dsmfsls-drrmsfm -N4:#f,sd4ls4ddffld#s,ffrrrrss6dds4dds#l,sssd'ddllrr#f,ssd7f4ddD4-D-rs5dfmrdlm,-frs4d -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. -Y2:Inty aho Jeso miantso ahy Hianao/Ny fahalemeko anie/Ry Tompo fantatrao/Hianao no nifidy/Sy maniraka ahy/Avy Aminao Jesoa/Ny herin’ny fanahy/Ho entiko manao/Ny asa atolotrao/Fa sarotra e ny dia/Ry Tompo manampia/Ho mendrika tokoa/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 +N2:#s,smmrdssstssTllldddddllttr4mddt4ddt4dmd5tsmmmrddTldffmdD4z-DdrrmffmsstddTddlssdts +N3:#rsdtlsmrmfrmmfffmffF4frf4smmrrrfmmrfffmssF4ssddtlssmffltdsl4z-Tlsssr'r'dsmfsls-drrmsfm +N4:#f,sd4ls4ddffld#s,ffrrrrss6dds4dds#l,sssd'ddllrr#f,ssd7f4ddD4z-Drs5df'mrdlm-f'r,s4d +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 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 herin’ny 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 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 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 34c28bb..f913bd1 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/PTemplate.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/PTemplate.kt @@ -12,6 +12,7 @@ class PTemplate (val template: String, val separatorAfter: String, private val m it.replace(Regex("^\\$\\{([a-z]:)?(.*)\\}"), "$2") .replace("\$Q", "\uD834\uDD10") .replace(Regex("^[<=>]$"), "") + .replace($$"$T", "") } } diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/ParseULine.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/ParseULine.kt index b7e08a8..2019301 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/ParseULine.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/ParseULine.kt @@ -12,7 +12,8 @@ class ParseULine (var line: String, var measure: Int) { '2' to listOf("." , ".-," , ":" , ":-,"), '3' 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() iterable.repeat(nTimes) }.replace("y", "2z11").toCharArray() + var actualComment = "" parsedChars.forEach { if (inComment) { @@ -85,7 +87,7 @@ class ParseULine (var line: String, var measure: Int) { 'G' -> repeat(4) { parseUStage2('4') } 'C' -> repeat(3) { 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')} '9' -> repeat(3) { parseUStage2('3')} 'A' -> run { @@ -103,7 +105,12 @@ class ParseULine (var line: String, var measure: Int) { if (charX == 'z') { sequence = sequence.replace('-', charX) } - cursorX += codeChar.toString().toInt() + if (codeChar == 't') { + cursorX += 4 + sequence = $$"$TDD:" + } else { + cursorX += codeChar.toString().toInt() + } if (sequence.contains(':')) { val bar: Int = (cursorX / 4) % measure var replacement = ':' 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 7d15f9f..2309c4a 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/TimeUnitObject.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/TimeUnitObject.kt @@ -34,7 +34,10 @@ import androidx.compose.ui.unit.TextUnit import androidx.compose.ui.unit.sp import mg.dot.feufaro.data.GridTUOData 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?) { var mutableNoteVersion: Int by mutableStateOf(0) private var lyrics: MutableList = mutableListOf() @@ -82,6 +85,9 @@ class TimeUnitObject (val pTemplate: PTemplate, val prevTUO: TimeUnitObject?) { } return null } + fun isTriolet(): Boolean { + return pTemplate.hasMarker($$"$T") + } fun addLyrics(lyricsIn: POneStanzaLyrics) { lyrics.add(lyricsIn) } @@ -206,6 +212,23 @@ fun TimeUnitComposable( fontWeight = FontWeight.Bold } 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)) { println("LastHairpin: ${TimeUnitObject.lastHairPinSymbol} ${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 xEnd = if (lastHairPinSymbol == '>') size.width/2 else -size.width * (tuo.numBlock - hairPinStart) - val yHeight = with(density) { lineHeightDp.toPx()} drawLine( Color.DarkGray, start = Offset(x=xStart, y=0f),