Resolve lyrics DC refrain ${R=}${D:..}
This commit is contained in:
parent
2f45098c28
commit
0eb3da71a0
2 changed files with 17 additions and 7 deletions
|
|
@ -5,5 +5,5 @@ N2:#t, drd8mff mdtddttt/drd8mf fmdddtd /d7/ d7/ ddtrddt/ d7/ d7/ ddtrddt
|
||||||
N3:#r mfs4fmsd4sfmssrs/ mfs4fmsd4mfsfm/ mmf5/ lfm5/ fmrs4/ mmf5/ lfm5/ fmrtlls
|
N3:#r mfs4fmsd4sfmssrs/ mfs4fmsd4mfsfm/ mmf5/ lfm5/ fmrs4/ mmf5/ lfm5/ fmrtlls
|
||||||
N4:#s, d11ffd5s3/ d11ffdllssd/ ddf5/ ffd5/ ddrtdms/ ddf5/ ffd5/ ddr4s
|
N4:#s, d11ffd5s3/ d11ffdllssd/ ddf5/ ffd5/ ddrtdms/ ddf5/ ffd5/ ddr4s
|
||||||
Y1:Misy maro ao an-tsaha mitaraina,/Ka ento ny Jiro mba hankao!/Tsy mba misy anto_andro na maraina/Fa maizina re ny ao;/Indro olo-maro be/No maniry mafy hoe:/Mba midina mankaty,/Itondray Baiboly re/Izy\ ireo fa ta handre/An'i Kristy Tompo soa !/${R=}${D:"Mandehana", hoy ny Tompo, "mandehana/Ho amin'izao tontolo i\zao!"/Mitsangàna ary, eny, mitsangàna/Fa Izy no homba\ anao!}
|
Y1:Misy maro ao an-tsaha mitaraina,/Ka ento ny Jiro mba hankao!/Tsy mba misy anto_andro na maraina/Fa maizina re ny ao;/Indro olo-maro be/No maniry mafy hoe:/Mba midina mankaty,/Itondray Baiboly re/Izy\ ireo fa ta handre/An'i Kristy Tompo soa !/${R=}${D:"Mandehana", hoy ny Tompo, "mandehana/Ho amin'izao tontolo i\zao!"/Mitsangàna ary, eny, mitsangàna/Fa Izy no homba\ anao!}
|
||||||
Y2:Mandehana mba hitarika ny jamba,/Mba ampifalio ny ory fo;/Ny mahantra ilazao fa misy lamba/Tsy miova, tsy mety lo;/Jeso Mofon'aina soa/Sady Ranon'aina koa,/Asehoy ho hitany!/Tena Andriamanitra,/Tompo tao an-danitra,/Ambarao ho fantany!${D:"Mandehana", hoy ny Tompo, "mandehana/Ho amin'izao tontolo i\zao!"/Mitsangàna ary, eny, mitsangàna/Fa Izy no homba\ anao!}
|
Y2:Mandehana mba hitarika ny jamba,/Mba ampifalio ny ory fo;/Ny mahantra ilazao fa misy lamba/Tsy miova, tsy mety lo;/Jeso Mofon'aina soa/Sady Ranon'aina koa,/Asehoy ho hitany!/Tena Andriamanitra,/Tompo tao an-danitra,/Ambarao ho fantany!
|
||||||
Y3:Mandehana hanatanjaka ny osa,/Omeo toky re ny ketraka;/Ny anjaranao, ataovy ho tontosa/Ka aza dia reraka!/Mandehana i_anao/Ka vitao ny asanao/Fa ny tambinao arỳ;/Mbola any\ ihany re/ny handraisan-tamby be,/Dia rehefa tsy etỳ!${D:"Mandehana", hoy ny Tompo, "mandehana/Ho amin'izao tontolo i\zao!"/Mitsangàna ary, eny, mitsangàna/Fa Izy no homba\ anao!}
|
Y3:Mandehana hanatanjaka ny osa,/Omeo toky re ny ketraka;/Ny anjaranao, ataovy ho tontosa/Ka aza dia reraka!/Mandehana i_anao/Ka vitao ny asanao/Fa ny tambinao arỳ;/Mbola any\ ihany re/ny handraisan-tamby be,/Dia rehefa tsy etỳ!
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,6 @@ import kotlin.math.min
|
||||||
//@todo: ffpm-99-2.txt triolet.mid + triolet (m--)--
|
//@todo: ffpm-99-2.txt triolet.mid + triolet (m--)--
|
||||||
//@todo: ffpm-657-1.txt ${m:4/4 Miadana kely}
|
//@todo: ffpm-657-1.txt ${m:4/4 Miadana kely}
|
||||||
//@todo: ews-80.txt ${m:12/4}
|
//@todo: ews-80.txt ${m:12/4}
|
||||||
//@todo: ews-81.txt ${R=}${D:....}
|
|
||||||
//@todo: bug ffpm-629.txt sssszd au lieu de ssss-d(-rrrrtdr)
|
//@todo: bug ffpm-629.txt sssszd au lieu de ssss-d(-rrrrtdr)
|
||||||
//@todo: bug ews-103.txt Triolet adds one blank
|
//@todo: bug ews-103.txt Triolet adds one blank
|
||||||
//@todo: bug ffpm-167-1.txt shoud start with : and not |
|
//@todo: bug ffpm-167-1.txt shoud start with : and not |
|
||||||
|
|
@ -36,6 +35,7 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository
|
||||||
private var refrainMaxStanza = -1
|
private var refrainMaxStanza = -1
|
||||||
private var smartLyricsType = "L"
|
private var smartLyricsType = "L"
|
||||||
private val pitches = mutableListOf<MidiPitch>()
|
private val pitches = mutableListOf<MidiPitch>()
|
||||||
|
private val globalDComments = mutableListOf<String>()
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
var currentFile = ""
|
var currentFile = ""
|
||||||
|
|
@ -62,6 +62,7 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository
|
||||||
val REGEX_NOTE_TOADD = Regex("([drmfsltz][ia]?|[―])([₄₃₂₁¹²³⁴',]*)>([drmfsltz][ia]?|[―])([₄₃₂₁¹²³⁴',]*)")
|
val REGEX_NOTE_TOADD = Regex("([drmfsltz][ia]?|[―])([₄₃₂₁¹²³⁴',]*)>([drmfsltz][ia]?|[―])([₄₃₂₁¹²³⁴',]*)")
|
||||||
val REGEX_NOTE_TODROP = Regex("([drmfsltz][ia]?|[―])([₄₃₂₁¹²³⁴',]*)<")
|
val REGEX_NOTE_TODROP = Regex("([drmfsltz][ia]?|[―])([₄₃₂₁¹²³⁴',]*)<")
|
||||||
val REGEX_NOTE_SPLIT = Regex("\\$\\{[Ss]:([^\\}]+)\\}([drmfsltDRFSTz][,']*)")
|
val REGEX_NOTE_SPLIT = Regex("\\$\\{[Ss]:([^\\}]+)\\}([drmfsltDRFSTz][,']*)")
|
||||||
|
val REGEX_DC_REFRAIN = Regex("""\$\{R=\}\$\{D:(.*?)\}""")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun parseNoteSplit(input: String): String {
|
fun parseNoteSplit(input: String): String {
|
||||||
|
|
@ -218,6 +219,7 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository
|
||||||
T.clear()
|
T.clear()
|
||||||
N.clear()
|
N.clear()
|
||||||
L.clear()
|
L.clear()
|
||||||
|
globalDComments.clear()
|
||||||
if (pitches.isNotEmpty()) {
|
if (pitches.isNotEmpty()) {
|
||||||
pitches[0].reset()
|
pitches[0].reset()
|
||||||
}
|
}
|
||||||
|
|
@ -301,6 +303,7 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository
|
||||||
T.clear()
|
T.clear()
|
||||||
N.clear()
|
N.clear()
|
||||||
L.clear()
|
L.clear()
|
||||||
|
globalDComments.clear()
|
||||||
if (pitches.isNotEmpty()) {
|
if (pitches.isNotEmpty()) {
|
||||||
pitches[0].reset()
|
pitches[0].reset()
|
||||||
}
|
}
|
||||||
|
|
@ -2465,8 +2468,9 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository
|
||||||
copyRefrainToStanza(stanzaNumber)
|
copyRefrainToStanza(stanzaNumber)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lyricsComment.isNotEmpty()) {
|
val commentsToProcess = if (lyricsComment.isNotEmpty()) lyricsComment else globalDComments
|
||||||
val lyricsIterator = lyricsComment.iterator()
|
if (commentsToProcess.isNotEmpty()) {
|
||||||
|
val lyricsIterator = commentsToProcess.toList().iterator()
|
||||||
while (lyricsIterator.hasNext()) {
|
while (lyricsIterator.hasNext()) {
|
||||||
var item = lyricsIterator.next()
|
var item = lyricsIterator.next()
|
||||||
// @todo: if item == ${O:...}
|
// @todo: if item == ${O:...}
|
||||||
|
|
@ -2490,7 +2494,6 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository
|
||||||
.forEachIndexed { i, xval ->
|
.forEachIndexed { i, xval ->
|
||||||
appendLyricsItem(stanzaNumber, i + pDS, xval)
|
appendLyricsItem(stanzaNumber, i + pDS, xval)
|
||||||
}
|
}
|
||||||
lyricsIterator.remove()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2549,12 +2552,19 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository
|
||||||
val smartLyrics = smartELyrics(lyrics)
|
val smartLyrics = smartELyrics(lyrics)
|
||||||
loadL(intKey, smartLyrics)
|
loadL(intKey, smartLyrics)
|
||||||
}
|
}
|
||||||
|
private fun isDCRefrain(text: String): Boolean {
|
||||||
|
return text.startsWith("\${R=}\${D:") && text.endsWith("}")
|
||||||
|
}
|
||||||
private fun getLyricsComments(lyrics: String): String {
|
private fun getLyricsComments(lyrics: String): String {
|
||||||
val matchResult = REGEX_LYRICS_COMMENT.findAll(lyrics)
|
val matchResult = REGEX_LYRICS_COMMENT.findAll(lyrics)
|
||||||
.map { it.value }.toList()
|
.map { it.value }.toList()
|
||||||
if (matchResult.isNotEmpty()) {
|
if (matchResult.isNotEmpty()) {
|
||||||
lyricsComment.addAll(matchResult)
|
lyricsComment.addAll(matchResult)
|
||||||
|
matchResult.filter { isDCRefrain(it) || REGEX_DC_REFRAIN.containsMatchIn(it) }.forEach { refrain ->
|
||||||
|
if (!globalDComments.contains(refrain)) {
|
||||||
|
globalDComments.add(refrain)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return REGEX_STRIP_DC.replace(lyrics, $$"\\${x:}")
|
return REGEX_STRIP_DC.replace(lyrics, $$"\\${x:}")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue