alternativeLyrics
This commit is contained in:
parent
8ebd255cc8
commit
5e53450937
4 changed files with 67 additions and 27 deletions
|
|
@ -4,6 +4,6 @@ N1:#s,sF,sdms'fl/sltdrfmm/sF,sdmsfl'-/#dsmsfrmdd/dflfdl(s-)--(m-)--/srslsf(m-)--
|
|||
N2:#r,mRmmsTlf/rrssslss/mRmmsTllt/dstlsfmm/ll(d-)-f#f,mrdsdrmd/rr(t-)-rdtdlsFsT/ll(d-)-f'mrdsdrmd/rrttdtstls
|
||||
N3:#s,dddrmddd/tdrdtrdd/dddrmddrR/mdrtdtss/#ddd(f-)-lsfmrmfsm/ff(r-)-fsFsfmRms/dd(f-)-lsfmrmfsm/ffrrsfmsfm
|
||||
N4:#d,d5mff/s6dd/d5mffF/s6dd/ff(f-)-l#r,d3d, msdl/ss(s-)-sd4d,3m/ff(f-)-ld3d,msdl/s6d,--d,
|
||||
Y1:Masoko manganohano,/Nitomany feno rano/No\ho ny helok’efa vita,/Dia mitony ra\ha nahita/Masona_o be fi_an_4tra_3/Ry Mpamonjy ny maha_4ntra_4/O Vo_avotrao ‘lay ve_4ry_4/Ry fitiavana mahery.
|
||||
Y2.Tanako mangadihady/Nisarangotra nitady/Fanavotana sy Vonjy/F’efa resy ka nilonjy./Dia noraisinao ry To_4mpo_4/Na dia tànana malo_4to_4/O vo_avotrao ‘lay ve_4ry_4/Ry Fitiavana mahery.
|
||||
Y3:Foko tena fahavalo/Nefa resy ka mimalo/Ra\ha nifona fa naditra/Hitanao nipitrapitra./Babo tsy\ afaka ho ai_4za_4/’Zao noraisinao\ ho sakai_4za_4/O vo_avotrao ‘lay ve_4ry_4/Ry Fitiavana mahery.
|
||||
Y1:Masoko manganohano,/Nitomany feno rano/No\ho ny helok’efa vita,/Dia mitony ra\ha nahita/Masona_o be fi_a_4ntra_3/Ry Mpamonjy ny maha_4ntra_3/O Vo_avotrao ‘lay ve_4ry_3/Ry fitiavana mahery.
|
||||
Y2.Tanako mangadihady/Nisarangotra nitady/Fanavotana sy Vonjy/F’efa resy ka nilonjy./Dia noraisinao ry To_4mpo_3/Na dia tànana malo_4to_3/O vo_avotrao ‘lay ve_4ry_3/Ry Fitiavana mahery.
|
||||
Y3:Foko tena fahavalo/Nefa resy ka mimalo/Ra\ha nifona fa naditra/Hitanao nipitrapitra./Babo tsy\ afaka ho ai_4za_3/’Zao noraisinao\ ho sakai_4za_3/O vo_avotrao ‘lay ve_4ry_3/Ry Fitiavana mahery.
|
||||
|
|
|
|||
|
|
@ -6,4 +6,4 @@ N3:d'smd#sd10/mmrddtt/rrddrfmrd/z3d7sz4s8z/zzzs4z3s4/z9/d4lls3
|
|||
N4:d'smd#t,f5lfd3/ddfmmss/ssllfrs#s,sd/z7d5z7s5/z3ddttz3d4/z9/ddf4s'sd
|
||||
O1:v3:I\lay nirahinao, ry Tompo,_4I\lay nirahinao, ry Tompo,_4No derainay,_3No derainay;_9
|
||||
O1:v4:I\lay nirahinao,_7I\lay nirahinao,_3No derainay,_3No derainay_9
|
||||
Y1:He, hosana! Isaoran’ani_e ny Mesi_a,/I\zay nalefan’ny Tompo,/Ka hosana no asandratray./I\lay nira${O:1}hi_2nao _ry _Tompo_2/I\lay nirahi_2nao _ry _Tompo_2/No derainay,_4/No derainay,_4/Ka hosana no asandratray!/Ka hosana no asandratray!/
|
||||
Y1:He, hosana! Isaoran’ani_e ny Mesi_a,/I\zay nalefan’ny Tompo,/Ka hosana no asandratray./I\lay nira${O:1}hi_2nao _ry _Tompo_/I\lay nirahi_2nao _ry _Tompo_/No derainay,_3/No derainay,_3/Ka hosana no asandratray!/Ka hosana no asandratray!/
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package mg.dot.feufaro.solfa
|
|||
|
||||
class POneStanzaLyrics {
|
||||
private val lyrics: MutableList<String> = mutableListOf("")
|
||||
private val alternativeLyrics: MutableMap<Int, MutableMap<Int, String>> = mutableMapOf()
|
||||
fun getLyrics(stanzaNumber: Int) : String {
|
||||
return this.lyrics[stanzaNumber]
|
||||
}
|
||||
|
|
@ -11,8 +12,12 @@ class POneStanzaLyrics {
|
|||
}
|
||||
this.lyrics[stanzaNumber] = lyrics
|
||||
}
|
||||
fun setAlternativeLyrics(stanzaNumber: Int, voiceNumber: Int, text: String) {
|
||||
alternativeLyrics
|
||||
.getOrPut(voiceNumber) { mutableMapOf() } [stanzaNumber] = text
|
||||
}
|
||||
override fun toString(): String {
|
||||
return lyrics[1]?: ""
|
||||
return lyrics[1]
|
||||
}
|
||||
fun appendDSLyrics(stanzaNumber: Int, lyrics: String) {
|
||||
if (this.lyrics.size > stanzaNumber) {
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository
|
|||
private val O: MutableMap<Int, MutableList<String>> = mutableMapOf()
|
||||
private val unparsedNote = mutableListOf<String>()
|
||||
private var refrainBeginsAt = -1
|
||||
private var smartLyricsType = "L"
|
||||
companion object {
|
||||
val REGEX_SHIFT_PAREN_UPWARD = Regex("([^a-yA-Y\\(\\[]+)([\\)\\]])")
|
||||
val REGEX_SHIFT_PAREN_DOWNWARD = Regex("([\\(\\[])([^a-yA-y\\)\\]]+)")
|
||||
|
|
@ -420,37 +421,70 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository
|
|||
|
||||
private fun String.addHyphens(): String {
|
||||
return this
|
||||
.replace("_/", "/")
|
||||
//.also { println ("1 $it")}
|
||||
//.replace("_/", "/")
|
||||
.replace(Regex("(?<![\\?:,\\.;])_"), "-_")
|
||||
//.also { println ("2 $it")}
|
||||
.replace(Regex("_-(?=_)"), "_")
|
||||
//.also { println ("3 $it")}
|
||||
.replace(" -_", "_")
|
||||
//.also { println ("4 $it")}
|
||||
.replace(" _", "_")
|
||||
//.also { println ("5 $it")}
|
||||
.replace("--_", "-_")
|
||||
//.also { println ("6 $it")}
|
||||
.replace(Regex("_$"), "")
|
||||
}
|
||||
private fun unpackLyrics(lyrics: String) :String {
|
||||
val comments = REGEX_COMMENT.findAll(lyrics)
|
||||
val commentsIterator = comments.iterator()
|
||||
val loadedLyrics = lyrics//.replace(REGEX_LYRICS_COMMENT, "")
|
||||
.replace(REGEX_LYRICS_REPETITION) { matchResult ->
|
||||
val repeating = matchResult.destructured.match.groupValues[1]
|
||||
"_".repeat(repeating.toString().toInt())
|
||||
}
|
||||
.addHyphens()
|
||||
val lyricsFinal = REGEX_COMMENT.replace(loadedLyrics) { matchResult ->
|
||||
commentsIterator.next().value
|
||||
}
|
||||
return lyricsFinal
|
||||
}
|
||||
private fun loadL(stanzaNumber: Int, lyrics: String) {
|
||||
val unpackedLyrics = unpackLyrics(lyrics)
|
||||
loadLyrics(stanzaNumber, unpackedLyrics)
|
||||
}
|
||||
fun setOverrideLyrics(stanzaNumber: Int, i: Int, voice: Int, text: String) {
|
||||
while (L.size <= i) {
|
||||
L.add(POneStanzaLyrics())
|
||||
}
|
||||
L[i].setAlternativeLyrics(stanzaNumber, voice, text)
|
||||
}
|
||||
private fun loadLyrics(stanzaNumber: Int, lyrics: String) {
|
||||
val overrideIterator: MutableMap<Int, Iterator<String>> = mutableMapOf()
|
||||
try {
|
||||
getLyricsComments(lyrics)
|
||||
val comments = REGEX_COMMENT.findAll(lyrics)
|
||||
val commentsIterator = comments.iterator()
|
||||
val loadedLyrics = lyrics//.replace(REGEX_LYRICS_COMMENT, "")
|
||||
.replace(REGEX_LYRICS_REPETITION) { matchResult ->
|
||||
val repeating = matchResult.destructured.match.groupValues[1]
|
||||
"_".repeat(repeating.toString().toInt())
|
||||
}
|
||||
.addHyphens()
|
||||
val lyricsFinal = REGEX_COMMENT.replace(loadedLyrics) { matchResult ->
|
||||
commentsIterator.next().value
|
||||
}
|
||||
val arrayLyrics = lyricsFinal.split(Regex("[/_]"))
|
||||
val arrayLyrics = lyrics.split(Regex("[/_]"))
|
||||
arrayLyrics.forEachIndexed { i, lyricsItem ->
|
||||
val originalLyrics = REGEX_COMMENT.replace(lyricsItem, "")
|
||||
if (lyricsItem.length > 4 && lyricsItem.substring(0, 4) == $$"${O:") {
|
||||
val overrideNumber = lyricsItem.replace(Regex("\\D"), "").toIntOrNull() ?: -1
|
||||
val override = O.getOrElse(overrideNumber) { null }
|
||||
override?.forEachIndexed { index, value ->
|
||||
val matchResult = Regex("v(\\d+):(.*)").find(value)
|
||||
val overrideString = when (smartLyricsType) {
|
||||
"E" -> smartELyrics(matchResult?.groupValues[2] ?: value)
|
||||
"Y" -> smartYLyrics(matchResult?.groupValues[2] ?: value)
|
||||
else -> value
|
||||
}
|
||||
for ( iN in (1..9) ) {
|
||||
if (matchResult?.groupValues[1]?.contains(iN.digitToChar()) ?: false) {
|
||||
val overrideSyllabus = overrideString.split(Regex("[_/]")).iterator()
|
||||
overrideIterator[iN] = overrideSyllabus
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (overrideIterator.isNotEmpty()) {
|
||||
overrideIterator.map { (voice, textIterator) ->
|
||||
if (textIterator.hasNext()) {
|
||||
setOverrideLyrics(stanzaNumber, i, voice, textIterator.next())
|
||||
}
|
||||
}
|
||||
}
|
||||
addLyricsItem(stanzaNumber, i, originalLyrics)
|
||||
}
|
||||
if (refrainBeginsAt > 0 && stanzaNumber > 1 && !lyrics.contains($$"${R!}")) {
|
||||
|
|
@ -493,7 +527,6 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository
|
|||
.replace(" ", " _")
|
||||
.replace("_\\ _", " ")
|
||||
.replace("_\\", "")
|
||||
.replace("_/", "/")
|
||||
.replace("_0", "")
|
||||
.replace(REGEX_MALAGASY_MN, "$1$2_$3")
|
||||
.replace(REGEX_MALAGASY_MN_STAGE2, "$1-_")
|
||||
|
|
@ -502,10 +535,11 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository
|
|||
val lyricsFinal = REGEX_COMMENT.replace(loadedLyrics) { matchResult ->
|
||||
commentsIterator.next().value
|
||||
}
|
||||
return lyricsFinal
|
||||
return unpackLyrics(lyricsFinal)
|
||||
}
|
||||
// loadY is a smart lyrics parser for Malagasy language
|
||||
private fun loadY(intKey: Int, lyrics: String) {
|
||||
smartLyricsType = "Y"
|
||||
val smartLyrics = smartYLyrics(lyrics)
|
||||
loadL(intKey, smartLyrics)
|
||||
}
|
||||
|
|
@ -517,10 +551,11 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository
|
|||
.replace("_/", "/")
|
||||
.replace("_0", "")
|
||||
getLyricsComments(loadedLyrics)
|
||||
return loadedLyrics
|
||||
return unpackLyrics(loadedLyrics)
|
||||
}
|
||||
// loadE is a smart Lyrics parser for English language
|
||||
private fun loadE(intKey: Int, lyrics: String) {
|
||||
smartLyricsType = "E"
|
||||
val smartLyrics = smartELyrics(lyrics)
|
||||
loadL(intKey, smartLyrics)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue