package Ġno . div v un Ċ Ċ import Ġandroid . content . Context Ċ import Ġno . div v un . domain . Keyboard Ċ import Ġno . div v un . domain . Spell er Ċ import Ġno . div v un . domain . load Keyboard Descriptor Ċ import Ġno . div v un . p ah kat . client . Package Key Ċ import Ġno . div v un . p ah kat . client . Package Key Params Ċ import Ġno . div v un . p ah kat . client . Repo Record Ċ import Ġtim ber . log . Tim ber Ċ Ċ data Ġclass ĠSp eller Configuration ( val Ġvalue : ĠMap < String , ĠSp eller Package >) Ġ{ ĊĠĠĠ Ġfun Ġpackage Keys (): ĠList < Package Key > Ġ= Ġvalue . values . map Ġ{ Ġit . package Key Ġ}. toList () ĊĠĠĠ Ġfun Ġrepos (): ĠRepo Configuration Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġpackage Keys () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . repository Url Ġ}. toSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġto ĠRepo Record ( null ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toMap () ĊĠĠĠĠĠĠĠ Ġreturn ĠRepo Configuration ( map ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠRepo Configuration ( val Ġvalue : ĠMap < String , ĠRepo Record >) ĊĊ Ċ object ĠSpell ers Ġ{ ĊĠĠĠ Ġvar Ġconfig : ĠSp eller Configuration Ġ= ĠSp eller Configuration ( map Of ()) ĊĊĠĠĠ Ġoperator Ġfun Ġget ( language Tag : ĠString ): ĠSp eller Package ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġconfig . value [ language Tag ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinit ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Spell er Conf ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Spell er Conf ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Files Ġ= Ġcontext . assets . list (" layouts "). or Empty () ĊĊĠĠĠĠĠĠĠ Ġconfig Ġ= ĠSp eller Configuration ( json Files . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Processing ĠLayout : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlanguage Tag Ġ= Ġit . remove Suffix (". json ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Loading Ġkeyboard Ġdescriptor Ġ$ language Tag ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkeyboard Ġ= Ġload Keyboard Descriptor ( context , Ġlanguage Tag ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Layout Ġloaded : Ġ$ language Tag Ġwith Ġspell er : Ġ${ keyboard . spell er }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlanguage Tag Ġto Ġkeyboard . spell er Package () ĊĠĠĠĠĠĠĠ Ġ}. map NotNull Ġ{ Ġ( language Tag , Ġspell er Package ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspell er Package ?. let Ġ{ Ġlanguage Tag Ġto Ġspell er Package Ġ} ĊĠĠĠĠĠĠĠ Ġ}. toMap ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠKeyboard . spell er Package (): ĠSp eller Package ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġspell er ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp eller Package ( it . package Url . package Key (), Ġspell er . path ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠString . package Key (): ĠPackage Key Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPackage Key . from ( this ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠSp eller Package ( ĊĠĠĠĠĠĠĠ Ġval Ġpackage Key : ĠPackage Key , ĊĠĠĠĠĠĠĠ Ġval Ġspell er File : ĠString Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġspell er Path ( context : ĠContext ): ĠString Ġ= Ġ"${ prefix Path ( context ) }/ pkg /${ package Key . id }/ $ spell er File " Ċ } ĊĊ