diff --git a/composeApp/src/commonMain/composeResources/files/META-INF/container.xml b/composeApp/src/commonMain/composeResources/files/META-INF/container.xml
deleted file mode 100644
index 8ee2bfe..0000000
--- a/composeApp/src/commonMain/composeResources/files/META-INF/container.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/composeApp/src/commonMain/composeResources/files/config.json b/composeApp/src/commonMain/composeResources/files/config.json
index 6416eab..a7331fa 100644
--- a/composeApp/src/commonMain/composeResources/files/config.json
+++ b/composeApp/src/commonMain/composeResources/files/config.json
@@ -2,7 +2,17 @@
"themeMode": "DARK",
"fontSize": 18.5,
"playlist": [
- "assets://ffpm-101.txt",
+ "assets://ffpm-131.txt",
+ "assets://ffpm-54.txt",
+ "assets://ews-17.txt",
+ "assets://ffpm-127.txt",
+ "assets://ews-15.txt",
+ "assets://ews-14.txt",
+ "assets://ffpm-310.txt",
+ "assets://ffpm-392.txt",
+ "assets://ffpm-358.txt",
+ "assets://ffpm-307.txt",
+ "assets://ffpm-97-1.txt",
"assets://ews-13.txt",
"assets://ffpm-38.txt",
"assets://ffpm-57.txt",
diff --git a/composeApp/src/commonMain/composeResources/files/ews-16.txt b/composeApp/src/commonMain/composeResources/files/ews-16.txt
new file mode 100644
index 0000000..551591a
--- /dev/null
+++ b/composeApp/src/commonMain/composeResources/files/ews-16.txt
@@ -0,0 +1,11 @@
+M0:|h:Genevan Psalter, 1551 Edition, attr. Louis Bourgeois (1510-1561)|c:G|m:4/4|a:Paraphrased, William Kethe -c. 1954; Thomas Ken (1637-1711)|r:LM
+U0:z8:84444888/84444888/84444888/84(22)4(22)(44)(44)8
+N1:ddt,l,s,drmmmmrdfmrdrmrdl,t,dsmd-rf-m-r-d-
+N2:s,s,s,m,m,m,s,s,s,s,dt,dddt,ds,s,s,s,l,f,m,s,s,d-t,l,t,d-t,-s,
+N3:mmrdt,dt,ddmssmlssmrdt,ddrdrdmFsl-s-sfm-
+N4:dds,l,m,l,s,d,ddds,l,f,d,s,l,t,ds,m,f,r,l,t,dl,-s,r,-m,f,s,-d,
+E1:All peo_ple that on earth do dwell,/sing to the Lord with cheer_ful voice./Serve him with joy, his prai_ses tell,/come now be_fore him and re_joice!
+E2:Know that the Lord is God in_deed;/he formed us all wi_thout our aid./We are the flock he comes to feed,/the sheep who by his hand were made.
+E3:O en_ter then his gates with joy,/wi_thin his courts his praise pro_claim./Let thank_ful songs your tongues em_ploy./O bless and mag_ni_fy his name.
+E4:Trust that the Lord our God is good,/his mer_cy is for_e_ver sure./His faith_ful_ness at all times stood/and shall from age to age en_dure.
+E5:To Fa_ther, Son and Ho_ly Ghost,/The God whom Heaven and earth a_dore,/From men and from the an_gel host/Be praise and glo_ry e_ver_more./
diff --git a/composeApp/src/commonMain/composeResources/files/ews-17.txt b/composeApp/src/commonMain/composeResources/files/ews-17.txt
new file mode 100644
index 0000000..ed696a4
--- /dev/null
+++ b/composeApp/src/commonMain/composeResources/files/ews-17.txt
@@ -0,0 +1,13 @@
+M0:|h:Siraslund Gesangbuch, 1665|c:G|m:3/4
+U0:z0:444624444444(444)C/444624444444(444)C/444C/4444(22)(22)C/444444(42222)C
+N1:ddsmrdt,l,s,l,t,dr--dddsmrdt,l,s,l,t,dr--dssslmfssf-m-rs,l,t,drmr----d
+N2:s,l,s,dt,l,s,f,m,f,f,m,l,s,f,m,s,l,s,dt,l,s,f,m,f,f,m,l,s,f,m,drddddrdl,t,d-t,s,f,f,m,l,S,l,--s,f,m,
+N3:mmrssmmdddrddt,-dmmrssmmdddrddt,-dmrmfsfrms-s-sddrdl,t,l,rdt,-d
+N4:dl,t,ds,l,m,f,d,f,r,l,f,s,-d,dl,t,ds,l,m,f,d,f,r,l,f,s,-d,dt,df,dl,t,dr-mds,m,f,r,l,f,m,f,--s,-d,
+E1:Praise to the Lord, the Al_migh_ty, the King of cre_a_tion;/O my soul, praise Him, for he is thy health and sal_va_tion:/Join the great throng,/Psal_te_ry, or_gan, and song,/Sound_ing in glad a_do_ra_tion.
+E2:Praise to the Lord; over all things he glo_ri_ous_ly reign_eth:/Borne as on ea_gle-_wings, safe_ly his saints he sus_tai_neth./Hast thou not seen/How all thou nee_dest hath been/Grant_ed in what he or_dai_neth?
+E3:Praise to the Lord, who hath fear_ful_ly, wond_rous_ly, made thee!/Health hath vouch_safed and, when heed_less_ly fal_ling, hath stayed thee./What need or grief/E_ver hath failed of re_lief?/Wings of His mer_cy did shade thee.
+E4:Praise to the Lord, who doth pros_per thy way and de_fend thee;/Sure_ly his good_ness and mer_cy shall e_ver at_tend thee;/Pon_der a_new/What the Al_migh_ty can do,/Who with his love doth be_friend thee.
+E5:Praise to the Lord, Who, when tem_pests their war_fare are wa_ging,/Who, when the e_le_ments Mad_ly a_round thee are ra_ging,/Bid_deth them cease,/Tur_neth their fu_ry to peace,/Whirl_winds and wa_ters as_suag_ing.
+E6:Praise to the Lord, Who, when dark_ness of sin is a_boun_ding,/Who, when the god_less Do tri_umph, all vir_tue con_found_ing,/Shed_deth His light,/Cha_seth the hor_rors of night,/Saints with His mer_cy sur_round_ing.
+E7:Praise to the Lord, O let all that is in me a_dore Him!/All that hath life and breath, Come now with prai_ses be_fore Him./Let the A_men sound from His peo_ple a_gain,/Glad_ly for aye we a_dore Him.
diff --git a/composeApp/src/commonMain/composeResources/files/ffpm-100.txt b/composeApp/src/commonMain/composeResources/files/ffpm-100.txt
new file mode 100644
index 0000000..96614ff
--- /dev/null
+++ b/composeApp/src/commonMain/composeResources/files/ffpm-100.txt
@@ -0,0 +1,10 @@
+M0:|c:G|m:4/4|t:FFPM 100 Moa mba efa nisy va|r:77.77.77|a:A. Rakotovao, 1880-1956
+U0:z0:${x4} 62446280/ ${x0} 62444(22)80/ 62446280
+N1:mrddfmr/ slsmrdd/ t,drfmrd/ rmflsfm/ mrddf-mr/ slsmrdd
+N2:#m, sfmssdt/ dddsfmm/ s7/ ssttd3/ sSl3tdt/ d4tss
+N3:#t, d4tdr/ mfmdtdd/ rmftdrm/ tdrfmls/ d4r-ss/ mfmsfmm
+N4:#d, d3ms3/ d3msdd/ s4d'3/ s4d'3/ dmffr-ds/ dddmsd'2
+Y1:Moa mba efa nisy va,/Fahoriana toy izao?/Jeso ‘Lay Mpanisy soa,/Tompo sy Mpanjaka koa,/Entina tsy meloka,/Entina\ any Kalvary.
+Y2:He, ny lanivo_any/Vo_atsindron-defona!/Tongotra\ aman-tanany/Vo_afantsika\ avokoa./Eny, fa ny ainy koa,/Foiny tany Kalvary.
+Y3:Mafy ‘zay ,ry Jeso ô!/Mafy nefa zakanao;/Ny fitiavanao anay!/No niaretanao izay!/Menatra\ aho, Jeso ô,/Ra\ha hadino Kalvary.
+Y4:Taomy aho, Jeso ô!/Mba ho any Kalvary;/Ka ny foko tsy madio/Mba di_ovinao anio,/Ento aho Jeso ô!/Ento any Kalvary.//
diff --git a/composeApp/src/commonMain/composeResources/files/ffpm-127.txt b/composeApp/src/commonMain/composeResources/files/ffpm-127.txt
new file mode 100644
index 0000000..504e210
--- /dev/null
+++ b/composeApp/src/commonMain/composeResources/files/ffpm-127.txt
@@ -0,0 +1,10 @@
+M0:|c:G|m:4/4 Faingampaingana|t:FFPM 127 Tahaka ny masoandro miseho|a:T. Kingo 1634-1703, Nad. C. Borchgrevink 1841-1919|h:O. Ahnfelt 1813-1882|r:11.10.11.10.D
+U0:z0:${x4} 4y4y4y42z2/ 4y4y4y8/ ${x0}
+N1:#s, dssmrrlrddt/ ltdsffmrrd/ dssmrrlrddt/ ltdsffmrrd/ #d smmlssfsffm/ smmlssfsfm/ #s, mrrdttlrddt/ ltdsffmrrd
+N2:#f, s4llfllss/ fslsllsttd/ s6Fslls/ Fssslddttd/ d6ttrrd/ d6ttrd/ dttlsslllss/ fslsllstts
+N3:#t, mmmdr7/ d4rrdffm/ mmmdttrtdmr/ rrmmflssfm/ mssfmmrrsss/ mssfmmrrss/ ssfmmrdffmr/ d4rrdffm
+N4:#r, d4ffrffsslffmffsssd/ d4ssrrFss/ lssdffsssd/ d6s3dd/ d6s3d/ dsslmmfrrss/ lffmffsssd
+Y1:Tahaka ny maso_andro miseho,/Sady mamiratra tsara izao;/To_y ny heriny\ izay mahale_o,/Na di_a takon'ny rahona tao./Tahaka\ izany Jesosy Mpamonjy/Izy nitsangana velona\ indray/Ry olombelona i\zay vo_avonjy,/Mba miderà Azy mandrakizay.
+Y2:Saotra\ aman-dera sy laza sy hery/Aoka ho Azy hatramin'izao,/Izy nanafaka ny olom-bery,/Indro ny fasana vaky sy lao,/Izy nanafaka ny vavahady,/Aiza, ry fahafatesana ô!/Aiza ny herinao sahy mi_ady/Amin'ny mino sy amin'ny to ?
+Y3:Jesosy Mpamonjy ô! Mba hasoavy/Ka mba arovy ny mino Anao,/Ka ny fanahinao aoka ho avy/Mba hanazava ny fonay izao;/Ary tantano i\zahay tsy hani_a,/Fa Hi_anao no mpi_aro anay!/0! ry Mpamonjy anay, mba avi_a,/Ka mba vonjeo, fa mi_andry\ izahay.
+Y4:Jeso, i\zahay te-hisaotra toko_a/Noho ny so_a nomenao anay:/Teraka teto nitondra ny so_a,/Dia ny fi_ainana mandrakizay./Saotra omenay anao I\zay nijaly,/Nefa natsangan'ny Rainao indray,/Rahatrizay izahay dia hifaly/Any an-danitra mandrakizay!//
diff --git a/composeApp/src/commonMain/composeResources/files/ffpm-131.txt b/composeApp/src/commonMain/composeResources/files/ffpm-131.txt
new file mode 100644
index 0000000..d207222
--- /dev/null
+++ b/composeApp/src/commonMain/composeResources/files/ffpm-131.txt
@@ -0,0 +1,7 @@
+I0:ffpm-54.txt:^[MY].*:
+M0:|h:J Neander, 1650-1680|c:G|m:3/4|a:L. Stueland 1843-1930|r:14.14.4.7.8|t:FFPM 151 Tonga ny andro malaza
+Y1:Tonga ny andro malaza izay mahafaly/Indro, nandresy Jesosy, ilay vao nijaly!/Velona\ indray Izy, natsangan’ny Ray,/Aoka isika hifaly!
+Y2:Efa nahery Jesosy ka resy Satana,/Menatra mafy ireo fahavalo nitana/Ka mba zahao: rava ny fasana\ izao,/Rava fa tsy nahatàna!
+Y3:Helo sy fahafatesana resy toko_a/Ary ny tambin’ny ota dia efa nalo_a!/Jeso Izay maty ka velona\ indray,/Tompon’ny aina tokoa!
+Y4:Mba mihobi_a, ry olona mino rehetra/An’i Jesosy ny hery izay tsy voafetra!/Izy nanao làlana tsara vaovao/Resy ny ratsy rehetra!
+Y5:Faly isika fa manana fanantenana,/Mbola hi_antso Jesosy ho_e: «Mitsangàna!»/Amin’izay, velona mandrakizay/Ny nodimandry tra-bonjy!
diff --git a/composeApp/src/commonMain/composeResources/files/ffpm-307.txt b/composeApp/src/commonMain/composeResources/files/ffpm-307.txt
new file mode 100644
index 0000000..f392d85
--- /dev/null
+++ b/composeApp/src/commonMain/composeResources/files/ffpm-307.txt
@@ -0,0 +1,11 @@
+M0:|t:FFPM 307 Iza no hanompo an'i Jesoa soa|a:R. Baron 1847-1907|h:J.R. Sweeney 1837-1899|c:A|m:4/4|r:11.11.11.11.11.11
+U0:zO:${x4}:222244 22228/${x0} 22222222 22228/2222(22)(22)22228/ 6244 88/(22)(22)44G
+N1:#s, smmmmfmrrDr/sffffs'fmmRm/smRmdslfmfl/ssdrmdrrdtd/m-4rdls-3d/t--drDrRm-4/mmdmrl/sdtdmrd
+N2:#r, ms4lsf4/fs8Fs/ msFsmmflllf/mms4llsss/s-4fmfm---m/r--mfmfFs-4/sssdlf/mss-sfm
+N3:#s, d7ttTt/tttrrmrd4/d4sd6/dddtddffmrm/d5-d-d5/s4t-t-d5/#t, ddmsfd/dmrmdtd
+N4:#d, d6s5/ s6d'5/d6f5/ddmsd'mffssd/d5-d-d5/s5-s-ddmsd'/d'4ff/s-s-ssd
+Y1:Iza no hanompo an’i Jeso soa?/Iza no hanaiky mba ho Azy moa?/He, ny hatsarany; he, ny antra be!/Izy ta hamonjy ka meteza re!/${R=}/Je_4so Tomponay_5ô, i\ndre_3to izahay/Avy mba hanaiky, ka mandraisa anay!
+Y2:Iza re no mety, iza re lazao,/Hanome ny fony mba ho Azy\ izao?/He, mi_antso mafy Jeso Tompo tia:/«Zay rehetra mety, ô avia, avia!»
+Y3:Iza no mba sahy, sahy ao am-po/Ho mi_aramila fehin’i Jeso?/Iza no hiady ady tsara re,/Fa ny fahavalo dia marobe?
+Y4:Iza re no homba Azy\ ankehitrio/Mba hamonjy\ ireny azon’ny manjo?/Iza no hihafy sady hanome/Andro, hery, saina? Mamali_a e!
+Y5:Iza no hazoto mba hi_asa moa?/Iza no handroso mba ho hendry koa?/Iza no hanaiky, iza re lazao,/Mba ho an’i Jeso i\zao anio izao?
diff --git a/composeApp/src/commonMain/composeResources/files/ffpm-310.txt b/composeApp/src/commonMain/composeResources/files/ffpm-310.txt
new file mode 100644
index 0000000..4a58a89
--- /dev/null
+++ b/composeApp/src/commonMain/composeResources/files/ffpm-310.txt
@@ -0,0 +1,9 @@
+M0:|c:Eb|m:4/4|t:FFPM 310 Misy maro ao an-tsaha|a:F.J. Crosby 1820-1915 Nad. Ramboatiana 1850-1945 (dikany malalaka)|h:W.B. Bradbury 1816-1868
+U0:z8:yyyyy8624y44444/yyyyy8624y44C/ yyy4/yyy4/y4444C/ yyy4/ yyy4/ y4444${DC}4
+N1:drm5rdmsl lsmrdmrss/ drm5rdmsl lsdrmrd/ ssl5/ d'ls5/ lsfrmdr/ ssl5/ dls5/ lssrmFs
+N2:#t, drd8mff mdtddttt/drd8mf fmdddtd /d7/ d7/ ddtrddt/ d7/ d7/ ddtrddt
+N3:#r mfs4fmsd4sfmssrs/ mfs4fmsd4mfsfm/ mmf5/ lfm5/ fmrs4/ mmf5/ lfm5/ fmrtlls
+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!}
+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!}
+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!}
diff --git a/composeApp/src/commonMain/composeResources/files/ffpm-357.txt b/composeApp/src/commonMain/composeResources/files/ffpm-357.txt
new file mode 100644
index 0000000..eb8ded2
--- /dev/null
+++ b/composeApp/src/commonMain/composeResources/files/ffpm-357.txt
@@ -0,0 +1,9 @@
+M0:|c:G|m:6/4|t:FFPM 357 Efa tonga atỳ izao|a:Philip Paul Bliss 1838-1876 Nad. J.A. Houlder 1844-1932|h:Philip Paul Bliss 1838-1876|r:8.6.8.6.6.6.4.4.6
+U0:z0:84444 84C/ 44484 (CC) /84444 84C/ 44484 O/ 84(44)4 88/ 84(44)4 88/ 444C 444C/ 44484 (84C)/ O
+N1:#s, mmmfmmrr/ srrmrds/ mmmfmmrr/ srrmrd/ #t, mmmfsls/ mmmfsls/ sfff/ fmmm/ mrdrtdms/ d
+N2:#m, ssslssff/ fffsfm/ ssslssff/ fffsfm/ #s, dddrmfm/ dddrmfm/ mrrr/ rddd/ s6wd/ s
+N3:#t, d6tt/ t5dw/ d6tt/ t5d/ d3wd3/ d3wd3/ s8/ sfmfrlwwm
+N4:#s, d5s3/ s5dw/ d5s3/ s5d/ d3wd3/ d3wd3/ s4/ d4/ s5dwwd
+Y1:Efa tonga atỳ izao/Teny fi_ainana:/Raiso mba ho fi_ainanao,/Teny fi_ainana./He! ny teny tsara,/Teny manan-kery:/${R=}Tenin'ny Ray,/Tsara tokoa,/Teny fi_ainana.
+Y2:Io no Filazantsara soa,/Teny fi_ainana:/Teny mamy indrindra koa,/Teny fi_ainana./Raisonao ny teny,/Teny soa nomeny:
+Y3:Ry mpanota! Henoy izao,/Teny fi_ainana;/Fa fi_ainana ho anao,/Teny fi_ainana./Kristy no nomena/Mba ho famonjena:
diff --git a/composeApp/src/commonMain/composeResources/files/ffpm-358.txt b/composeApp/src/commonMain/composeResources/files/ffpm-358.txt
new file mode 100644
index 0000000..8972259
--- /dev/null
+++ b/composeApp/src/commonMain/composeResources/files/ffpm-358.txt
@@ -0,0 +1,10 @@
+M0:|t:FFPM 358 He, ry namako mahantra|c:A|m:3/4|r:8.7.8.7.D|a:H. Randzavola 1873-1953|h:R. Lowry 1826-1899
+U0:z8:y 6222 44/22 6222 8/y 6222 44/22 6222 8/22 6222 44/22 6222 8/22 6222 44/22 2244 8/22 6222 44/22 2244 8
+N1:#s, mmmmrdsd/dmrtdrm/mmfmrdmr/rrrltdt/lsdrdlsd/drmdfmr/mfs'mrdrd/tlsdmrm/mfs'mrdrd/tlsdmrd
+N2:#m, ssssfmmm/mssssss/sslsfmss/ssFFsls/fsmfmfmm/sssmlss/ssssssfl/sfmmsss/sssdtlll/sfmssss
+N3:#t, d7s/sdtrdtd/d4tddt/ttlr4/rtd6/dtd4t/drmdtdld/d5td/drmsfmff/dddmsfm
+N4:#d, d8/ddsfmrd/d'4slss/ssrrrrs/ssd6/msd'4s/d'3drmff/ffs4d'/d'4slff/ffs4d
+Y1:He, ry namako mahantra,/Indro Jeso Tompo tia,/I\lay Mpamonjy feno antra,/No mitady ny mania!/Olom-bery tsy mba foiny/Ka na diso aza re/Mbola tiany sy antsoiny/Hanam-pifali_am-be/Mbola tiany sy antsoiny/Hanam-pifali_am-be
+Y2:He, fa tsy mba misy fetra/Ny homena lova soa/Fa ny olona rehetra/Samy tiany avokoa!/Nefa\ izay be hataka\ andro/Dia hanenina tokoa/Misy fetra ny fotoana/Azo amindrana fo/Misy fetra ny fotoana/Azo amindrana fo
+Y3:Manatòna\ ankehitriny,/Ry mpanota ory fo/Mba hesoriny ny tsiny/Ka hadio indray ny fo!/Fa ny ota hosasany/Dia ho afaka\ avokoa,/I\zany re no fikasany/ka tsy maintsy to tokoa/I\zany re no fikasany/ka tsy maintsy to tokoa
+Y4:Fa izay mandà ny Teny/Sy maditra, mafy fo/Hampangain’ny Teny reny/Fa tsy nety nankatò;/Jeso Tompo no hitsara/Sy hamaly ny natao,/Nefa kosa ny anjara/Dia miankina aminao/Nefa kosa ny anjara/Dia miankina aminao
diff --git a/composeApp/src/commonMain/composeResources/files/ffpm-392.txt b/composeApp/src/commonMain/composeResources/files/ffpm-392.txt
new file mode 100644
index 0000000..f118709
--- /dev/null
+++ b/composeApp/src/commonMain/composeResources/files/ffpm-392.txt
@@ -0,0 +1,9 @@
+C:Bb|m:4/4 Miadanadana|t:FFPM 392 O mba raiso izao|a:F. Nibelius 1850-1897 Nad M.J. Meeg 1851-1924|r:6.6.9.6.6.9.6.6.9.6.6.9|h:(Feon-kira suédois)
+U0:zC:y4y4/ y4y4 /y4y4y8${DC}z4/ y(y)y4 / yyy4/ y4y4yC/ y4y4/ y4y4/ y4y4yC
+N1:#f, ssdddm/ dtlfld/ tls4ltd/ rdts4/ ltrd4/ tdrrmf'ttd/ ssdddm/ dtlfld/ tls4ltd
+N2:#r, mms4/ f5l/ ffmmmrffm/ sssrrrf/ fffm4/ rmffssffm/ mms4/ f5l/ ffmmmrffm
+N3:#l, ddmmmd/ lldldd/ d5ttrd/ tmrtttr/ rrtd4/ rdttdtrrd/ ddmmmd/ lldldd/ d5ttrd
+N4:#d, d6/f6/ ffs6d/ s3-s3/ s3d4/ s8d/ d6/ f6/ ffs6d
+Y1:O, mba raiso izao,/Misy lovanao ao,/Indro! Jeso mi_andry anao!/${D:Fa ny helokao be/Dia navelany e,/Ka fi_ainana\ omeny anao;/}Novidiny\ hi_anao,/Ka eke_o hatrizao/I\zay omen’i Jesosy anao./O, mba raiso izao,/Misy lovanao ao,/Indro! Jeso mi_andry anao!
+Y2:Moa hadinonao va/Fa ny olo-mandà/Ho tra-nenina rahatrizay?/${D:I\zay ataonao atỳ/Hotsaraina arỳ/Ka tsy azo ovana indray./}Ny Mpamonjy anao/No hatò_ny izao,/Ary Izy hihaino anao./Moa hadinonao va/Fa ny olo-mandà/Ho tra-nenina rahatrizay?
+Y3:I\zao tontolo izao/Dia mamitaka\ anao,/Ka afoizo fandrao manindao./${D:He, Jesosy nandao/I\zao tontolo izao/Ary Izy mi_antso anao./}Izy tonga indray/Ao an-da_pan’ny Ray,/Ka ho velona mandrakizay./I\zao tontolo izao/Dia mamitaka\ anao,/Ka afoizo fandrao manindao.
diff --git a/composeApp/src/commonMain/composeResources/files/ffpm-54.txt b/composeApp/src/commonMain/composeResources/files/ffpm-54.txt
new file mode 100644
index 0000000..7696b13
--- /dev/null
+++ b/composeApp/src/commonMain/composeResources/files/ffpm-54.txt
@@ -0,0 +1,10 @@
+M0:|h:J Neander, 1650-1680|c:G|m:3/4|a:L. Stueland 1843-1930|r:14.14.4.7.8|t:FFPM 54 Jeso Mpamonjy, Ilay Tompon'ny aina
+U0:z0:4444(22)4444444(444)C/444444444444(444)C/444C/4444(22)4C/444444(444)C
+N1:ddsm-rdt,l,s,l,t,dr--dddsmrdt,l,s,l,t,dr--dssslmfss-fmrs,l,t,drmr----d
+N2:s,l,s,dt,-l,s,f,m,f,f,s,l,s,f,m,#m, mfssfmFFsssslsfm/dtdd/ddsddtdt/sssstddt-s
+N3:mmrss-mmdddrddt,-d/#t, dddttdrdtdrddt-d/mfsf/sfrmf-ss/tdrmfslsfm
+N4:dl,t,ds,-l,m,f,d,f,r,m,f,s,-d,/ #d, lfmsSlrrssfmfs-d/#s,drmf/dltdr-ds/#d, ssfmrdfs-d
+Y1:Jeso Mpamonjy, I\lay Tompon’ny aina, no hita/Nidina teto an-tany hamonjy antsika:/O, mba derao/Izy Mpanavotra\ anao/Ka mifali_a ry mino!
+Y2:Indro ny tenin’anjely milaza ny so_a:/Teraka Jeso Mpamonjy antsika toko_a!/O, mba derao/Tonga ny andro vaovao,/Andron’ny Filazantsara!
+Y3:Dia iventesonao hira vaovao re izany;/Tonga Jesosy hamonjy izay mitomany!/O, mba derao/Afaka\ isika izao;/Izy Mpisolo antsika!
+Y4:Tonga ny Tompon’ny tompo hisolo ny ory,/Ka mifohaza ry olona mbola matory!/O, mba derao/Amin’ny fe_o vaovao/Jeso, I\lay Tompo mahery!
diff --git a/composeApp/src/commonMain/composeResources/files/ffpm-9.txt b/composeApp/src/commonMain/composeResources/files/ffpm-9.txt
new file mode 100644
index 0000000..61acaee
--- /dev/null
+++ b/composeApp/src/commonMain/composeResources/files/ffpm-9.txt
@@ -0,0 +1,10 @@
+M0:|h:Genevan Psalter, 1551 Edition, attr. Louis Bourgeois (1510-1561)|c:G|m:4/4|a:Th. Ken 1637-1711|r:LM
+U0:z8:84444888/84444888/84444888/84(22)4(22)(44)(44)8
+N1:ddt,l,s,drmmmmrdfmrdrmrdl,t,dsmd-rf-m-r-d-
+N2:#m, sssmmmss/ssssmlss/ssssmffm/ss-Fsf-s-sfm
+N3:#s, mmrdtdtd/dddtdddt/mrdtddrs/rdd-tltd-t-d
+N4:#d, d'2slmlsd/dmdslfds/d'td'slfsd/tdl-sr-mfs-d
+Y1:Ry Tompo Zanaharinay!/Manati-tsaotra izahay,/Fa efa novelominao,/Ka tratr’izao maraina\ izao.
+Y2:Ny aizina\ efa lasa\ izao,/Mazava no naposakao;/Levony koa ny otanay,/Ka hazavao ny hevitray.
+Y3:Ny asanay hatao anio/Atrehonao ka mba tahio,/Hatao ho voninahitrao,/Handraisanay ny antranao
+Y4:Derainay Hi_anao, ry Ray!/Derainay Jeso Tomponay,/Derainay ny Fanahy koa,/Derainay fa Mpanisy soa.
diff --git a/composeApp/src/commonMain/composeResources/files/ffpm-97-1.txt b/composeApp/src/commonMain/composeResources/files/ffpm-97-1.txt
new file mode 100644
index 0000000..0b268c1
--- /dev/null
+++ b/composeApp/src/commonMain/composeResources/files/ffpm-97-1.txt
@@ -0,0 +1,11 @@
+M0:|c:G|m:9/4 Miadanadana|t:FFPM 97 'Lay fonao tia tao Gologota|a:Dr Andrianandraina|h:P.P. Bliss, 1838-1876|r:10.9.10.9.10.9.
+U0:z0:${x4} 444CC444CC/ 444CC444O/ ${x0}
+N1:#s, sltdddrmll/ ltdrrrdrm/ #dmrmfffslls/ sfmrrrmFs/ sfmmrrmffm/ mrmsmmrdr/ s, l, t, dddrmfl/ lsfmsfmrd
+N2:#m, sFfmmmfsll lsFs6/ dtTlllTd3/ m'rdtttdlt/ m'rddttdrrd/ drd4sdt/#m, sFfmmmfsld/ dtlsdssfm
+N3:#s, sdrd7/ d3t3ltd/ d7ffm/ #t, s5r4/ s10/ s6fms/ tdrd6f/ d4mrdtd
+N4:#f, s3d5ff/ fsls5d/ d3f5dd/ d3r5s/ s8dd/ dtdmddtds/ sssdddddff/ fffs5d
+Y1:‘Lay fonao ti_a tao Gologota/No velona\ ao an-tsaiko izao,/Ny fonao ‘zay mitady mpanota/No vo_aratra indrindra tao./Ry fo malala, nihafy loatra,/Lavitra ny mpangoraka\ Anao/Ry fo malala, nihafy loatra,/Lavitra ny mpangoraka\ Anao
+Y2:Indro! Ny lefona koa mamely,/Ka notrobarana Hi_anao!/He! malahelo ireo anjely,/Fa naharary re ny fonao!/Io no fitia tsy misy toa azy./Zaran’izao rehetra izao/Io no fitia tsy misy toa azy./Zaran’izao rehetra izao
+Y3:Efa hisoka ny anto_andro,/Menatra\ izao tontolo izao;/Tsy ela\ intsony dia maizina\ andro/Kalvary ‘zay nihantonanao!/Fa\ izaho tsy mba hangataka\ andro/Hampi_antrano ny tenanao/Fa\ izaho tsy mba hangataka\ andro/Hampi_antrano ny tenanao
+Y4:Tsy sasatra na valaka ko_a,/Ny fonao ti_a, ry Tompo ô,/Menatra\ izao i\ty foko tsy so_a/Tsy hahavaly tokoa Anao;/Nefa ampi_o aho hanaiky,/Hanatontosa ‘zay sitrakao/Nefa ampi_o aho hanaiky,/Hanatontosa ‘zay sitrakao/
+Q0:${N:new}N4:#f, s3d5ff/ fsls5d/ d3f5dd/ d3r5s/ s8dd/ dtdmddtds/ sssdddtdff/ fmfs5d
diff --git a/composeApp/src/commonMain/composeResources/files/ffpm-97-2.txt b/composeApp/src/commonMain/composeResources/files/ffpm-97-2.txt
new file mode 100644
index 0000000..2653d10
--- /dev/null
+++ b/composeApp/src/commonMain/composeResources/files/ffpm-97-2.txt
@@ -0,0 +1,10 @@
+M0:|t:EWS 999 Precious Promise (FFPM 97)|a:Franck Nathaniel Niles USA 1835-1917|h:Philip Paul Bliss (1838-1876)|c:G|m:9/4|r:8.7.8.7.8.7.8.7
+U0:zO:(44)4CC(44)4CC/(44)4CC(44)4O/(44)4CC(44)4CC/(44)4CC(44)4O/(44)4CC(44)4CC/(44)4CC(44)4O/(44)4CC(44)4CC/(44)4CC(44)4O
+N1:s,l,t,dddrml,l,l,t,drrrdrmmrmfffsllssfmrrrmFssfmmrrmffmmrmsmmrdrs,l,t,dddrmfllsfmsfmrd
+N2:s,F,f,m,m,m,f,s,l,l,l,s,F,s,s,s,-s,s,dt,T,l,l,l,T,dddmrdt,t,t,dl,t,mrddt,t,drrddrdddd-dt,s,F,f,m,m,m,f,s,l,ddt,l,s,s,s,-f,m,f,f,m,
+N3:s,drddd-dddd-dt,t,t,l,t,dd-dddd-ffms-sssr-rrs-ssss-ssss-ssssfmst,drddd-ddfd-f,dmrdt,dl,l,m
+N4:s,-s,ddd-df,f,f,s,l,s,s,s,-s,dd-df,f,f,-f,ddd-drrr-rs,s,-s,s,s,s,-s,dddt,dmdd-ds,s,-s,ddd-df,f,f,-zs,s,s,-s,d,f,f,l,
+E1:Pre_cious pro_mise God hath gi_ven/To the wea_ry pas_ser-_by,/All the way from earth to Hea_ven;/I will guide thee with mine eye./${R=}I will guide thee, I will guide thee,/I will guide thee with mine eye;/All the way from earth to Hea_ven,/I will guide thee with mine eye.
+E2:When temp_ta_tions al_most win thee,/And thy trus_ted watch_ers fly,/Let this pro_mise ring with_in thee:/I will guide thee with mine eye.
+E3:When thy sec_ret hopes have pe_rished/In the grave of years gone by,/Let this pro_mise still be che_rished:/I will guide thee with mine eye.
+E4:When the shades of life are fal_ling,/And the hour has come to die,/Hear thy trus_ted lea_der cal_ling:/I will guide thee with mine eye.
diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/musicXML/MusicXML.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/musicXML/MusicXML.kt
index 09cf65f..ada7383 100644
--- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/musicXML/MusicXML.kt
+++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/musicXML/MusicXML.kt
@@ -82,7 +82,7 @@ class MusicXML(private val fileRepository: FileRepository) {
}
}
suspend fun load() {
- val xmlContent = fileRepository.readFileContent("assets://13.xml")
+ val xmlContent = fileRepository.readFileContent("assets://17.xml")
val xslContent = fileRepository.readFileContent("assets://timepart.xsl")
xmlString = performXsltTransformation(xmlContent, xslContent)
val solfaXML = SolfaXML()
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 6b21029..30ef44f 100644
--- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/ParseULine.kt
+++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/ParseULine.kt
@@ -18,12 +18,13 @@ class ParseULine (var line: String, var measure: Int) {
}
fun parsed() : String {
- val matchResult = Regex("^z([048CK]):(.+)$").find(line)
+ val matchResult = Regex("^z([048CKO]):(.+)$").find(line)
if (matchResult != null) {
val capturedChar = matchResult.groups[1]!!.value
cursorX = when (capturedChar) {
"C" -> 12
"K" -> 20
+ "O" -> 24
else -> capturedChar.toInt()
}
line = matchResult.groups[2]!!.value
diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Solfa.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Solfa.kt
index e95bfd8..2451794 100644
--- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Solfa.kt
+++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/Solfa.kt
@@ -16,6 +16,7 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository
private var refrainBeginsAt = -1
private var smartLyricsType = "L"
companion object {
+ var currentFile = ""
val REGEX_SHIFT_PAREN_UPWARD = Regex("([^a-yA-Y\\(\\[]+)([\\)\\]])")
val REGEX_SHIFT_PAREN_DOWNWARD = Regex("([\\(\\[])([^a-yA-y\\)\\]]+)")
val REGEX_COLLAPSE_PARENS_OPEN = Regex("([\\(\\[])[\\(\\[]+")
@@ -27,13 +28,14 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository
val REGEX_PARSE_META = Regex("\\|(?=[a-z]:)")
val REGEX_LYRICS_COMMENT = Regex("\\$\\{([^\\}]:([^\\}]*))\\}|\\$\\{R!\\}")
val REGEX_LYRICS_REPETITION = Regex("_(\\d)")
- val REGEX_VOWELS_STAGE1 = Regex("[aeiouyòàéỳ](?![,;\\.\\-:!\\?\\}»_]*([ aeiouyòàéỳ/]|_[1-9]))", RegexOption.IGNORE_CASE)
- val REGEX_VOWELS_STAGE2 = Regex("(?<=[aeiouyòàéỳ])_([,;\\.\\-:!\\?\\}»_]+)", RegexOption.IGNORE_CASE)
+ val REGEX_VOWELS_STAGE1 = Regex("[aeiouyòàéỳ](?![,;\\.\\-:!\\?\\}»_\"]*([ aeiouyòàéỳ/]|_[1-9]))", RegexOption.IGNORE_CASE)
+ val REGEX_VOWELS_STAGE2 = Regex("(?<=[aeiouyòàéỳ])_([,;\\.\\-:!\\?\\}»_\"]+)", RegexOption.IGNORE_CASE)
val REGEX_VOWELS_STAGE3 = Regex("_([\\?\\!:,;\\.»\\)]+)")
val REGEX_MALAGASY_MN = Regex("([aeio])_([nm])([tdjkbp])")
val REGEX_MALAGASY_MN_STAGE2 = Regex("_([mn])-")
val REGEX_PAREN_RECURSIVE = Regex("(\\([^\\(\\)]*)\\(([^\\)]*)\\)")
val REGEX_COMMENT = Regex("\\$\\{[^\\}]*\\}")
+ val REGEX_STRIP_DC = Regex("\\$\\{D:[^\\}]*\\}")
}
var nextTIndex: Int = -1
var nextNIndex: Int = -1
@@ -115,6 +117,7 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository
}
}
fun parse(sourceFile: String) {
+ currentFile = sourceFile
val parseScope = CoroutineScope(Dispatchers.Default)
parseScope.launch {
val lines = try {
@@ -257,7 +260,7 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository
result = rearrangeNote(result)
loadN(voiceNumber, result)
}
- private fun parseOneLine(line: String) {
+ private suspend fun parseOneLine(line: String) {
val index: Int
val value: String
val lineLength = line.trim().length
@@ -301,10 +304,38 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository
loadU(value)
"O" ->
loadO(index, value)
-
+ "I" ->
+ loadI(value)
}
}
+ suspend fun loadI(line: String) {
+ val lineSplit = line.split(":")
+ val lastSlashInFilename = currentFile.lastIndexOf('/')
+ val fileNamePrefix = if (lastSlashInFilename != -1) {
+ currentFile.substring(0, lastSlashInFilename + 1)
+ } else {
+ ""
+ }
+ val filePath = fileNamePrefix + lineSplit[0]
+ val lines = try {
+ fileRepository.readFileLines(filePath)
+ } catch (e: Exception) {
+ println("Opening $filePath raised exception {${e.message}")
+ emptyList()
+ }
+ try {
+ val ignoredLines = Regex(lineSplit[1])
+ lines.forEach {
+ val match = ignoredLines.find(it)
+ if (match == null) {
+ parseOneLine(it)
+ }
+ }
+ } catch(e: Exception) {
+
+ }
+ }
private fun loadN(voiceNumber: Int, line: String) {
val newN = POneVoiceNote()
val lineRepeated = REGEX_REPETITION.replace(line) { matchResult ->
@@ -457,10 +488,10 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository
private fun loadLyrics(stanzaNumber: Int, lyrics: String) {
val overrideIterator: MutableMap> = mutableMapOf()
try {
- getLyricsComments(lyrics)
+ val lyrics = getLyricsComments(lyrics)
val arrayLyrics = lyrics.split(Regex("[/_]"))
arrayLyrics.forEachIndexed { i, lyricsItem ->
- val originalLyrics = REGEX_COMMENT.replace(lyricsItem, "")
+ val originalLyrics = REGEX_STRIP_DC.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 }
@@ -495,11 +526,17 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository
if (lyricsComment.isNotEmpty()) {
val lyricsIterator = lyricsComment.iterator()
while (lyricsIterator.hasNext()) {
- val item = lyricsIterator.next()
+ var item = lyricsIterator.next()
// @todo: if item == ${O:...}
// ${D:xxx} lyrics of DC and DSs
if (item.substring(0, 4) == $$"${D:") {
- item.replace(REGEX_LYRICS_COMMENT, "$2")
+ item = item.replace(REGEX_LYRICS_COMMENT, "$2")
+ val item = when (smartLyricsType) {
+ "E" -> smartELyrics(item)
+ "Y" -> smartYLyrics(item)
+ else -> item
+ }
+ item
.addHyphens()
.split(Regex("[_/]"))
.forEachIndexed { i, xval ->
@@ -551,7 +588,7 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository
.replace("_\\", "")
.replace("_/", "/")
.replace("_0", "")
- getLyricsComments(loadedLyrics)
+ //getLyricsComments(loadedLyrics)
return unpackLyrics(loadedLyrics)
}
// loadE is a smart Lyrics parser for English language
@@ -560,12 +597,13 @@ class Solfa(val sharedScreenModel: SharedScreenModel, private val fileRepository
val smartLyrics = smartELyrics(lyrics)
loadL(intKey, smartLyrics)
}
- private fun getLyricsComments(lyrics: String) {
+ private fun getLyricsComments(lyrics: String): String {
val matchResult = REGEX_LYRICS_COMMENT.findAll(lyrics)
.map { it.value }.toList()
if (matchResult.isNotEmpty()) {
lyricsComment.addAll(matchResult)
}
+ return REGEX_STRIP_DC.replace(lyrics, "")
}
private fun defineRefrainFrom(tuoNumber: Int) {
refrainBeginsAt = tuoNumber