package Ġde . rob ol ab . common . utils Ċ Ċ object ĠIn i Converter Ġ{ ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠKey ( ĊĠĠĠĠĠĠĠ Ġval Ġsection : ĠString ?, ĊĠĠĠĠĠĠĠ Ġval Ġkey : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġparse ( key : ĠString ): ĠKey Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsplit Ġ= Ġkey . split ('.', Ġlimit Ġ= Ġ 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( split . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠKey ( null , Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠKey ( split [ 0 ], Ġsplit [ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠtoString ( data : ĠMap < String , ĠString >): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsection Map Ġ= Ġdata . map Keys Ġ{ Ġ( k , Ġ_) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKey . parse ( k ) ĊĠĠĠĠĠĠĠ Ġ}. toList (). groupBy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . first . section ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠStringBuilder () ĊĊĠĠĠĠĠĠĠ Ġval Ġglobal Section Ġ= Ġsection Map [ null ] ĊĠĠĠĠĠĠĠ Ġif Ġ( global Section Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġglobal Section ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( key . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (' =') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ('\ n ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ('\ n ') ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġfor Ġ(( section , Ġsection Content ) Ġin Ġsection Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( section Ġ== Ġnull ) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ('[ ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( section ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (" ]\ n ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġsection Content ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( key . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (' =') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ('\ n ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ('\ n ') ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfrom String ( content : ĠString ): ĠMap < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Section : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġmutable Map Of < String , ĠString >() ĊĊĠĠĠĠĠĠĠ Ġval Ġlines Ġ= Ġcontent . split To Sequence ('\ n ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . trim () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ Ġit . startsWith ('# ') Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ Ġit . startsWith (' ; ') Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( line Ġin Ġlines ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line . startsWith ('[ ') Ġ&& Ġline . endsWith (' ] ')) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Section Ġ= Ġline . substring ( 1 , Ġline . last Index ). trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsplit Ġ= Ġline . split (' =', Ġlimit Ġ= Ġ 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġsplit . first (). trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġsplit . get OrNull ( 1 )?. trim () Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsection Key Ġ= Ġcurrent Section ?. let Ġ{ Ġ"$ it .$ key " Ġ} Ġ?: Ġkey ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ section Key ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdata ĊĠĠĠ Ġ} Ċ } Ċ