package Ġcom . program mers box . logging utils Ċ Ċ data Ġclass ĠFrame Ġinternal Ġconstructor ( ĊĠĠĠ Ġval Ġtop : ĠString Ġ= Ġ"", Ġval Ġbottom : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġleft : ĠString Ġ= Ġ"", Ġval Ġright : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġtop Left : ĠString Ġ= Ġ"", Ġval Ġtop Right : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġbottom Left : ĠString Ġ= Ġ"", Ġval Ġbottom Right : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġtop Fill In : ĠString Ġ= Ġ"", Ġval Ġbottom Fill In : ĠString Ġ= Ġ"" Ċ ) Ċ Ċ enum Ġclass ĠFrame Type ( frame : ĠFrame ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBO X ĠFrame ĊĠĠĠĠ Ġ* ĠWill Ġlook Ġlike Ġthis ĊĠĠĠĠ Ġ* ĊĠĠĠ Ġ``` ĊĠĠĠ Ġâķ Ķ ================ ========== âķĹ ĊĠĠĠ Ġâķĳ ĠHello ĠWorld ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġâķĳ ĊĠĠĠ Ġâķ ļ ================ ========== âķ Ŀ ĊĠĠĠ Ġor ĊĠĠĠ ĠIf Ġthe Ġtop Ġif Ġmodified ĊĠĠĠ Ġâķ Ķ ========== Hello =========== âķĹ ĊĠĠĠ Ġâķĳ ĠWorld ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġâķĳ ĊĠĠĠ Ġâķ ļ ================ ========== âķ Ŀ ĊĠĠĠ Ġor ĊĠĠĠ ĠIf Ġthe Ġbottom Ġis Ġmodified ĊĠĠĠ Ġâķ Ķ ================ ========== âķĹ ĊĠĠĠ Ġâķĳ ĠWorld ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġâķĳ ĊĠĠĠ Ġâķ ļ ========== Hello =========== âķ Ŀ ĊĠĠĠ Ġ``` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠBO X ( Frame (" =", Ġ"=", Ġ" âķĳ ", Ġ" âķĳ ", Ġ" âķ Ķ ", Ġ" âķĹ ", Ġ" âķ ļ ", Ġ" âķ Ŀ ", Ġ"=", Ġ"=" )), ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAST ER IS K ĠFrame ĊĠĠĠĠ Ġ* ĠWill Ġlook Ġlike Ġthis ĊĠĠĠĠ Ġ* ĊĠĠĠ Ġ``` ĊĠĠĠĠ 1 . ĠĠ Ġ************************* *** ĊĠĠĠĠ 2 . ĠĠ Ġ* ĠHello ĠWorld ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠ 3 . ĠĠ Ġ************************* *** ĊĠĠĠ Ġor ĊĠĠĠ ĠIf Ġthe Ġtop Ġif Ġmodified ĊĠĠĠĠ 1 . ĠĠ Ġ********* ** Hello ******** **** ĊĠĠĠĠ 2 . ĠĠ Ġ* ĠWorld ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠ 3 . ĠĠ Ġ************************* *** ĊĠĠĠ Ġor ĊĠĠĠ ĠIf Ġthe Ġbottom Ġis Ġmodified ĊĠĠĠĠ 1 . ĠĠ Ġ************************* *** ĊĠĠĠĠ 2 . ĠĠ Ġ* ĠWorld ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠ 3 . ĠĠ Ġ********* ** Hello ******** **** ĊĠĠĠ Ġ``` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠAST ER IS K ( Frame ("* ", Ġ"*", Ġ"*", Ġ"*", Ġ"*", Ġ"*", Ġ"*", Ġ"*", Ġ"*", Ġ"* ")), ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPlus ĠFrame ĊĠĠĠĠ Ġ* ĠWill Ġlook Ġlike Ġthis ĊĠĠĠĠ Ġ* ĊĠĠĠ Ġ``` ĊĠĠĠ Ġ+ ++++++++++++++++ ++++++++ +++ ĊĠĠĠ Ġ+ ĠHello ĠWorld ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ĊĠĠĠ Ġ+ ++++++++++++++++ ++++++++ +++ ĊĠĠĠ Ġor ĊĠĠĠ ĠIf Ġthe Ġtop Ġif Ġmodified ĊĠĠĠ Ġ+ ++++++++ ++ Hello ++++++++ ++++ ĊĠĠĠ Ġ+ ĠWorld ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ĊĠĠĠ Ġ+ ++++++++++++++++ ++++++++ +++ ĊĠĠĠ Ġor ĊĠĠĠ ĠIf Ġthe Ġbottom Ġis Ġmodified ĊĠĠĠ Ġ+ ++++++++++++++++ ++++++++ +++ ĊĠĠĠ Ġ+ ĠWorld ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ĊĠĠĠ Ġ+ ++++++++ ++ Hello ++++++++ ++++ ĊĠĠĠ Ġ``` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠPL US ( Frame ("+ ", Ġ"+", Ġ"+", Ġ"+", Ġ"+", Ġ"+", Ġ"+", Ġ"+", Ġ"+", Ġ"+ ")), ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDI AG ON AL ĠFrame ĊĠĠĠĠ Ġ* ĠWill Ġlook Ġlike Ġthis ĊĠĠĠĠ Ġ* ĊĠĠĠ Ġ``` ĊĠĠĠ Ġâķ ± ---------------- ---------- âķ ² ĊĠĠĠ Ġ| ĠHello ĠWorld ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠ Ġâķ ² ---------------- ---------- âķ ± ĊĠĠĠ Ġor ĊĠĠĠ ĠIf Ġthe Ġtop Ġif Ġmodified ĊĠĠĠ Ġâķ ± ---------- Hello ----------- âķ ² ĊĠĠĠ Ġ| ĠWorld ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠ Ġâķ ² ---------------- ---------- âķ ± ĊĠĠĠ Ġor ĊĠĠĠ ĠIf Ġthe Ġbottom Ġis Ġmodified ĊĠĠĠ Ġâķ ± ---------------- ---------- âķ ² ĊĠĠĠ Ġ| ĠWorld ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠ Ġâķ ² ---------- Hello ----------- âķ ± ĊĠĠĠ Ġ``` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠDI AG ON AL ( Frame ("- ", Ġ"-", Ġ" âĶĤ ", Ġ" âĶĤ ", Ġ" âķ ± ", Ġ" âķ ² ", Ġ" âķ ² ", Ġ" âķ ± ", Ġ"-", Ġ"- ")), ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠO VAL ĠFrame ĊĠĠĠĠ Ġ* ĠWill Ġlook Ġlike Ġthis ĊĠĠĠĠ Ġ* ĊĠĠĠ Ġ``` ĊĠĠĠ Ġâķ Ń ---------------- ---------- âķ ® ĊĠĠĠ Ġ| ĠHello ĠWorld ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠ Ġâķ ° ---------------- ---------- âķ ¯ ĊĠĠĠ Ġor ĊĠĠĠ ĠIf Ġthe Ġtop Ġif Ġmodified ĊĠĠĠ Ġâķ Ń ---------- Hello ----------- âķ ® ĊĠĠĠ Ġ| ĠWorld ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠ Ġâķ ° ---------------- ---------- âķ ¯ ĊĠĠĠ Ġor ĊĠĠĠ ĠIf Ġthe Ġbottom Ġis Ġmodified ĊĠĠĠ Ġâķ Ń ---------------- ---------- âķ ® ĊĠĠĠ Ġ| ĠWorld ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠ Ġâķ ° ---------- Hello ----------- âķ ¯ ĊĠĠĠ Ġ``` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠO VAL ( Frame ("- ", Ġ"-", Ġ" âĶĤ ", Ġ" âĶĤ ", Ġ" âķ Ń ", Ġ" âķ ® ", Ġ" âķ ° ", Ġ" âķ ¯ ", Ġ"-", Ġ"- ")), ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBO X ED ĠFrame ĊĠĠĠĠ Ġ* ĠWill Ġlook Ġlike Ġthis ĊĠĠĠĠ Ġ* ĊĠĠĠ Ġ``` ĊĠĠĠ Ġâĸ Ľ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸ ľ ĊĠĠĠ Ġâĸ Į ĠHello ĠWorld ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġâĸ Ĳ ĊĠĠĠ Ġâĸ Ļ âĸĦâĸĦâĸĦâĸĦ âĸĦâĸĦâĸĦâĸĦ âĸĦâĸĦâĸĦâĸĦ âĸĦâĸĦâĸĦâĸĦ âĸĦâĸĦâĸĦâĸĦ âĸĦâĸĦâĸĦâĸĦ âĸĦâĸĦ âĸ Ł ĊĠĠĠ Ġor ĊĠĠĠ ĠIf Ġthe Ġtop Ġif Ġmodified ĊĠĠĠ Ġâĸ Ľ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ Hello âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸ ľ ĊĠĠĠ Ġâĸ Į ĠWorld ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġâĸ Ĳ ĊĠĠĠ Ġâĸ Ļ âĸĦâĸĦâĸĦâĸĦ âĸĦâĸĦâĸĦâĸĦ âĸĦâĸĦâĸĦâĸĦ âĸĦâĸĦâĸĦâĸĦ âĸĦâĸĦâĸĦâĸĦ âĸĦâĸĦâĸĦâĸĦ âĸĦâĸĦ âĸ Ł ĊĠĠĠ Ġor ĊĠĠĠ ĠIf Ġthe Ġbottom Ġis Ġmodified ĊĠĠĠ Ġâĸ Ľ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸĢ âĸ ľ ĊĠĠĠ Ġâĸ Į ĠWorld ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġâĸ Ĳ ĊĠĠĠ Ġâĸ Ļ âĸĦâĸĦâĸĦâĸĦ âĸĦâĸĦâĸĦâĸĦ âĸĦâĸĦ Hello âĸĦâĸĦâĸĦâĸĦ âĸĦâĸĦâĸĦâĸĦ âĸĦâĸĦ âĸĦ âĸ Ł ĊĠĠĠ Ġ``` ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠBO X ED ( Frame (" âĸĢ ", Ġ" âĸĦ ", Ġ" âĸ Į ", Ġ" âĸ Ĳ ", Ġ" âĸ Ľ ", Ġ" âĸ ľ ", Ġ" âĸ Ļ ", Ġ" âĸ Ł ", Ġ" âĸĢ ", Ġ" âĸĦ ")), ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCUSTOM ĠFrame ĊĠĠĠĠ Ġ* ĠYou Ġdecide Ġhow Ġall Ġof Ġit Ġlooks ĊĠĠĠĠ Ġ*/ ĊĠĠĠ ĠCUSTOM ( Frame ()); ĊĊĠĠĠ Ġvar Ġframe : ĠFrame Ġ= Ġframe ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġfun Ġcopy ( ĊĠĠĠĠĠĠĠ Ġtop : ĠString Ġ= Ġframe . top , Ġbottom : ĠString Ġ= Ġframe . bottom , ĊĠĠĠĠĠĠĠ Ġleft : ĠString Ġ= Ġframe . left , Ġright : ĠString Ġ= Ġframe . right , ĊĠĠĠĠĠĠĠ Ġtop Left : ĠString Ġ= Ġframe . top Left , Ġtop Right : ĠString Ġ= Ġframe . top Right , ĊĠĠĠĠĠĠĠ Ġbottom Left : ĠString Ġ= Ġframe . bottom Left , Ġbottom Right : ĠString Ġ= Ġframe . bottom Right , ĊĠĠĠĠĠĠĠ Ġtop Fill In : ĠString Ġ= Ġframe . top Fill In , Ġbottom Fill In : ĠString Ġ= Ġframe . bottom Fill In ĊĠĠĠ Ġ) Ġ= ĠCUSTOM . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġframe Ġ= Ġframe . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġtop , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġbottom , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġleft , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġright , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Left Ġ= Ġtop Left , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Right Ġ= Ġtop Right , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Left Ġ= Ġbottom Left , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Right Ġ= Ġbottom Right , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Fill In Ġ= Ġtop Fill In , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Fill In Ġ= Ġbottom Fill In ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcopy ( frame : ĠFrame ) Ġ= Ġwith ( frame ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis @ Frame Type . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġtop , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġbottom , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġleft , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġright , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Left Ġ= Ġtop Left , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Right Ġ= Ġtop Right , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Left Ġ= Ġbottom Left , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Right Ġ= Ġbottom Right , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Fill In Ġ= Ġtop Fill In , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Fill In Ġ= Ġbottom Fill In ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠFrame Builder Ġinternal Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġvar Ġtop : ĠString Ġ= Ġ"", Ġvar Ġbottom : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠ Ġvar Ġleft : ĠString Ġ= Ġ"", Ġvar Ġright : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠ Ġvar Ġtop Left : ĠString Ġ= Ġ"", Ġvar Ġtop Right : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠ Ġvar Ġbottom Left : ĠString Ġ= Ġ"", Ġvar Ġbottom Right : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠ Ġvar Ġtop Fill In : ĠString Ġ= Ġ"", Ġvar Ġbottom Fill In : ĠString Ġ= Ġ"" ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġbuild () Ġ= ĠFrame ( top , Ġbottom , Ġleft , Ġright , Ġtop Left , Ġtop Right , Ġbottom Left , Ġbottom Right , Ġtop Fill In , Ġbottom Fill In ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcopy ( frame : ĠFrame Builder ) Ġ= Ġcopy ( frame . build ()) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠUse Ġthis Ġto Ġcreate Ġa Ġcustom Ġ[ Frame Type ] ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" FunctionName ") ĊĠĠĠĠĠĠĠ Ġfun ĠCUSTOM ( frame : ĠFrame Builder . () Ġ-> ĠUnit ) Ġ= ĠCUSTOM . copy ( Frame Builder (). apply ( frame )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠString . frame ( frame Type : ĠFrame Type , Ġrtl : ĠBoolean Ġ= Ġfalse ) Ġ= Ġsplit ("\ n "). frame ( ĊĠĠĠ Ġtop Ġ= Ġframe Type . frame . top , Ġbottom Ġ= Ġframe Type . frame . bottom , ĊĠĠĠ Ġleft Ġ= Ġframe Type . frame . left , Ġright Ġ= Ġframe Type . frame . right , ĊĠĠĠ Ġtop Left Ġ= Ġframe Type . frame . top Left , Ġtop Right Ġ= Ġframe Type . frame . top Right , ĊĠĠĠ Ġbottom Left Ġ= Ġframe Type . frame . bottom Left , Ġbottom Right Ġ= Ġframe Type . frame . bottom Right , ĊĠĠĠ Ġtop Fill In Ġ= Ġframe Type . frame . top Fill In , Ġbottom Fill In Ġ= Ġframe Type . frame . bottom Fill In , Ġrtl Ġ= Ġrtl Ċ ) Ċ Ċ fun Ġ< T > ĠIterable < T >. frame ( frame Type : ĠFrame Type , Ġrtl : ĠBoolean Ġ= Ġfalse , Ġtransform : Ġ( T ) Ġ-> ĠString Ġ= Ġ{ Ġit . toString () Ġ}) Ġ= Ġframe ( ĊĠĠĠ Ġtop Ġ= Ġframe Type . frame . top , Ġbottom Ġ= Ġframe Type . frame . bottom , ĊĠĠĠ Ġleft Ġ= Ġframe Type . frame . left , Ġright Ġ= Ġframe Type . frame . right , ĊĠĠĠ Ġtop Left Ġ= Ġframe Type . frame . top Left , Ġtop Right Ġ= Ġframe Type . frame . top Right , ĊĠĠĠ Ġbottom Left Ġ= Ġframe Type . frame . bottom Left , Ġbottom Right Ġ= Ġframe Type . frame . bottom Right , ĊĠĠĠ Ġtop Fill In Ġ= Ġframe Type . frame . top Fill In , Ġbottom Fill In Ġ= Ġframe Type . frame . bottom Fill In , ĊĠĠĠ Ġrtl Ġ= Ġrtl , Ġtransform Ġ= Ġtransform Ċ ) Ċ Ċ fun Ġ< T > ĠIterable < T >. frame ( ĊĠĠĠ Ġtop : ĠString , Ġbottom : ĠString , ĊĠĠĠ Ġleft : ĠString , Ġright : ĠString , ĊĠĠĠ Ġtop Left : ĠString , Ġtop Right : ĠString , ĊĠĠĠ Ġbottom Left : ĠString , Ġbottom Right : ĠString , ĊĠĠĠ Ġtop Fill In : ĠString Ġ= Ġ"", Ġbottom Fill In : ĠString Ġ= Ġ"", ĊĠĠĠ Ġrtl : ĠBoolean Ġ= Ġfalse , Ġtransform : Ġ( T ) Ġ-> ĠString Ġ= Ġ{ Ġit . toString () Ġ} Ċ ): ĠString Ġ{ ĊĠĠĠ Ġval Ġfull Length Ġ= Ġmutable ListOf ( top , Ġbottom ). apply Ġ{ Ġadd All ( this @ frame . map ( transform )) Ġ}. max By OrNull Ġ{ Ġit . length Ġ} !!. length Ġ+ Ġ 2 ĊĠĠĠ Ġval Ġspace : Ġ( String ) Ġ-> ĠString Ġ= Ġ{ Ġ" Ġ". repeat ( full Length Ġ- Ġit . length Ġ- Ġ 1 ) Ġ} ĊĠĠĠ Ġval Ġmid Ġ= Ġmap ( transform ). join ToString ( separator Ġ= Ġ"\ n ") Ġ{ Ġ"$ left ${ if Ġ( rtl ) Ġspace ( it ) Ġelse Ġ" Ġ" }$ it ${ if Ġ( rtl ) Ġ" Ġ" Ġelse Ġspace ( it )} $ right " Ġ} ĊĠĠĠ Ġval Ġspace 2 : Ġ( String , ĠBoolean ) Ġ-> ĠString Ġ= Ġ{ Ġspacing , Ġb Ġ-> Ġ( if Ġ( b ) Ġtop Fill In Ġelse Ġbottom Fill In ). repeat (( full Length Ġ- Ġspacing . length ) Ġ/ Ġ 2 ) Ġ} ĊĠĠĠ Ġval Ġtop Bottom Text : Ġ( String , ĠBoolean ) Ġ-> ĠString Ġ= Ġ{ Ġs , Ġb Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( s . length Ġ== Ġ 1 ) Ġs . repeat ( full Length ) ĊĠĠĠĠĠĠĠ Ġelse Ġspace 2 ( s , Ġb ). let Ġ{ Ġsp aced Ġ-> Ġ"$ spaced $ s ${ if Ġ(( full Length Ġ- Ġs . length ) Ġ% Ġ 2 Ġ== Ġ 0 ) Ġ"" Ġelse Ġ( if Ġ( b ) Ġtop Fill In Ġelse Ġbottom Fill In )} $ spaced " Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġ"$ top Left ${ top Bottom Text ( top , Ġtrue )} $ top Right \ n $ mid \ n $ bottom Left ${ top Bottom Text ( bottom , Ġfalse )} $ bottom Right " Ċ } Ċ Ċ private Ġvar Ġlo ged Frame Ġ= ĠFrame Type . BOX Ċ Ċ /** Ċ Ġ* ĠSet Ġa Ġdefault Ġ[ Frame Type ] Ġto Ġuse Ġfor Ġthe Ġframe Ġlogging Ċ Ġ* ĠDefault Ġis Ġ[ Frame Type . BOX ] Ċ Ġ*/ Ċ var ĠLo ged . default Frame Type : ĠFrame Type ĊĠĠĠ Ġget () Ġ= Ġlo ged Frame ĊĠĠĠ Ġset ( value ) Ġ= Ġrun Ġ{ Ġlo ged Frame Ġ= Ġvalue Ġ} Ċ Ċ // -------------- Ċ @ Jvm Over loads Ċ fun ĠLo ged . fv ( ĊĠĠĠ Ġmsg : ĠAny ? Ġ= Ġnull , ĊĠĠĠ Ġtag : ĠString Ġ= ĠTAG , Ġinfo Text : ĠString Ġ= ĠTAG , ĊĠĠĠ Ġshow Pretty : ĠBoolean Ġ= ĠSHOW _ PRE TTY , Ġthread Name : ĠBoolean Ġ= ĠWITH _ THREAD _ NAME , ĊĠĠĠ Ġframe Type : ĠFrame Type Ġ= Ġlo ged Frame . copy ( bottom Left Ġ= Ġ" âķ ł ") Ċ ) Ġ= ĠLo ged . f ( msg , Ġtag , Ġinfo Text , Ġshow Pretty , Ġthread Name , Ġframe Type , Ġ 2 ) Ċ Ċ @ Jvm Over loads Ċ fun ĠLo ged . fd ( ĊĠĠĠ Ġmsg : ĠAny ? Ġ= Ġnull , ĊĠĠĠ Ġtag : ĠString Ġ= ĠTAG , Ġinfo Text : ĠString Ġ= ĠTAG , ĊĠĠĠ Ġshow Pretty : ĠBoolean Ġ= ĠSHOW _ PRE TTY , Ġthread Name : ĠBoolean Ġ= ĠWITH _ THREAD _ NAME , ĊĠĠĠ Ġframe Type : ĠFrame Type Ġ= Ġlo ged Frame . copy ( bottom Left Ġ= Ġ" âķ ł ") Ċ ) Ġ= ĠLo ged . f ( msg , Ġtag , Ġinfo Text , Ġshow Pretty , Ġthread Name , Ġframe Type , Ġ 3 ) Ċ Ċ @ Jvm Over loads Ċ fun ĠLo ged . fi ( ĊĠĠĠ Ġmsg : ĠAny ? Ġ= Ġnull , ĊĠĠĠ Ġtag : ĠString Ġ= ĠTAG , Ġinfo Text : ĠString Ġ= ĠTAG , ĊĠĠĠ Ġshow Pretty : ĠBoolean Ġ= ĠSHOW _ PRE TTY , Ġthread Name : ĠBoolean Ġ= ĠWITH _ THREAD _ NAME , ĊĠĠĠ Ġframe Type : ĠFrame Type Ġ= Ġlo ged Frame . copy ( bottom Left Ġ= Ġ" âķ ł ") Ċ ) Ġ= ĠLo ged . f ( msg , Ġtag , Ġinfo Text , Ġshow Pretty , Ġthread Name , Ġframe Type , Ġ 4 ) Ċ Ċ @ Jvm Over loads Ċ fun ĠLo ged . fw ( ĊĠĠĠ Ġmsg : ĠAny ? Ġ= Ġnull , ĊĠĠĠ Ġtag : ĠString Ġ= ĠTAG , Ġinfo Text : ĠString Ġ= ĠTAG , ĊĠĠĠ Ġshow Pretty : ĠBoolean Ġ= ĠSHOW _ PRE TTY , Ġthread Name : ĠBoolean Ġ= ĠWITH _ THREAD _ NAME , ĊĠĠĠ Ġframe Type : ĠFrame Type Ġ= Ġlo ged Frame . copy ( bottom Left Ġ= Ġ" âķ ł ") Ċ ) Ġ= ĠLo ged . f ( msg , Ġtag , Ġinfo Text , Ġshow Pretty , Ġthread Name , Ġframe Type , Ġ 5 ) Ċ Ċ @ Jvm Over loads Ċ fun ĠLo ged . fe ( ĊĠĠĠ Ġmsg : ĠAny ? Ġ= Ġnull , ĊĠĠĠ Ġtag : ĠString Ġ= ĠTAG , Ġinfo Text : ĠString Ġ= ĠTAG , ĊĠĠĠ Ġshow Pretty : ĠBoolean Ġ= ĠSHOW _ PRE TTY , Ġthread Name : ĠBoolean Ġ= ĠWITH _ THREAD _ NAME , ĊĠĠĠ Ġframe Type : ĠFrame Type Ġ= Ġlo ged Frame . copy ( bottom Left Ġ= Ġ" âķ ł ") Ċ ) Ġ= ĠLo ged . f ( msg , Ġtag , Ġinfo Text , Ġshow Pretty , Ġthread Name , Ġframe Type , Ġ 6 ) Ċ Ċ @ Jvm Over loads Ċ fun ĠLo ged . fa ( ĊĠĠĠ Ġmsg : ĠAny ? Ġ= Ġnull , ĊĠĠĠ Ġtag : ĠString Ġ= ĠTAG , Ġinfo Text : ĠString Ġ= ĠTAG , ĊĠĠĠ Ġshow Pretty : ĠBoolean Ġ= ĠSHOW _ PRE TTY , Ġthread Name : ĠBoolean Ġ= ĠWITH _ THREAD _ NAME , ĊĠĠĠ Ġframe Type : ĠFrame Type Ġ= Ġlo ged Frame . copy ( bottom Left Ġ= Ġ" âķ ł ") Ċ ) Ġ= ĠLo ged . f ( msg , Ġtag , Ġinfo Text , Ġshow Pretty , Ġthread Name , Ġframe Type , Ġ 7 ) Ċ Ċ // ---------------- ------------ Ċ @ Jvm Over loads Ċ fun ĠLo ged . fv ( ĊĠĠĠ Ġmsg : ĠIterable <* >, ĊĠĠĠ Ġtag : ĠString Ġ= ĠTAG , Ġinfo Text : ĠString Ġ= ĠTAG , ĊĠĠĠ Ġshow Pretty : ĠBoolean Ġ= ĠSHOW _ PRE TTY , Ġthread Name : ĠBoolean Ġ= ĠWITH _ THREAD _ NAME , ĊĠĠĠ Ġframe Type : ĠFrame Type Ġ= Ġlo ged Frame . copy ( bottom Left Ġ= Ġ" âķ ł ") Ċ ) Ġ= ĠLo ged . f ( msg , Ġtag , Ġinfo Text , Ġshow Pretty , Ġthread Name , Ġframe Type , Ġ 2 ) Ċ Ċ @ Jvm Over loads Ċ fun ĠLo ged . fd ( ĊĠĠĠ Ġmsg : ĠIterable <* >, ĊĠĠĠ Ġtag : ĠString Ġ= ĠTAG , Ġinfo Text : ĠString Ġ= ĠTAG , ĊĠĠĠ Ġshow Pretty : ĠBoolean Ġ= ĠSHOW _ PRE TTY , Ġthread Name : ĠBoolean Ġ= ĠWITH _ THREAD _ NAME , ĊĠĠĠ Ġframe Type : ĠFrame Type Ġ= ĠFrame Type . BOX . copy ( bottom Left Ġ= Ġ" âķ ł ") Ċ ) Ġ= ĠLo ged . f ( msg , Ġtag , Ġinfo Text , Ġshow Pretty , Ġthread Name , Ġframe Type , Ġ 3 ) Ċ Ċ @ Jvm Over loads Ċ fun ĠLo ged . fi ( ĊĠĠĠ Ġmsg : ĠIterable <* >, ĊĠĠĠ Ġtag : ĠString Ġ= ĠTAG , Ġinfo Text : ĠString Ġ= ĠTAG , ĊĠĠĠ Ġshow Pretty : ĠBoolean Ġ= ĠSHOW _ PRE TTY , Ġthread Name : ĠBoolean Ġ= ĠWITH _ THREAD _ NAME , ĊĠĠĠ Ġframe Type : ĠFrame Type Ġ= Ġlo ged Frame . copy ( bottom Left Ġ= Ġ" âķ ł ") Ċ ) Ġ= ĠLo ged . f ( msg , Ġtag , Ġinfo Text , Ġshow Pretty , Ġthread Name , Ġframe Type , Ġ 4 ) Ċ Ċ @ Jvm Over loads Ċ fun ĠLo ged . fw ( ĊĠĠĠ Ġmsg : ĠIterable <* >, ĊĠĠĠ Ġtag : ĠString Ġ= ĠTAG , Ġinfo Text : ĠString Ġ= ĠTAG , ĊĠĠĠ Ġshow Pretty : ĠBoolean Ġ= ĠSHOW _ PRE TTY , Ġthread Name : ĠBoolean Ġ= ĠWITH _ THREAD _ NAME , ĊĠĠĠ Ġframe Type : ĠFrame Type Ġ= Ġlo ged Frame . copy ( bottom Left Ġ= Ġ" âķ ł ") Ċ ) Ġ= ĠLo ged . f ( msg , Ġtag , Ġinfo Text , Ġshow Pretty , Ġthread Name , Ġframe Type , Ġ 5 ) Ċ Ċ @ Jvm Over loads Ċ fun ĠLo ged . fe ( ĊĠĠĠ Ġmsg : ĠIterable <* >, ĊĠĠĠ Ġtag : ĠString Ġ= ĠTAG , Ġinfo Text : ĠString Ġ= ĠTAG , ĊĠĠĠ Ġshow Pretty : ĠBoolean Ġ= ĠSHOW _ PRE TTY , Ġthread Name : ĠBoolean Ġ= ĠWITH _ THREAD _ NAME , ĊĠĠĠ Ġframe Type : ĠFrame Type Ġ= Ġlo ged Frame . copy ( bottom Left Ġ= Ġ" âķ ł ") Ċ ) Ġ= ĠLo ged . f ( msg , Ġtag , Ġinfo Text , Ġshow Pretty , Ġthread Name , Ġframe Type , Ġ 6 ) Ċ Ċ @ Jvm Over loads Ċ fun ĠLo ged . fa ( ĊĠĠĠ Ġmsg : ĠIterable <* >, ĊĠĠĠ Ġtag : ĠString Ġ= ĠTAG , Ġinfo Text : ĠString Ġ= ĠTAG , ĊĠĠĠ Ġshow Pretty : ĠBoolean Ġ= ĠSHOW _ PRE TTY , Ġthread Name : ĠBoolean Ġ= ĠWITH _ THREAD _ NAME , ĊĠĠĠ Ġframe Type : ĠFrame Type Ġ= Ġlo ged Frame . copy ( bottom Left Ġ= Ġ" âķ ł ") Ċ ) Ġ= ĠLo ged . f ( msg , Ġtag , Ġinfo Text , Ġshow Pretty , Ġthread Name , Ġframe Type , Ġ 7 ) Ċ Ċ // ---------------- Ċ fun Ġ< T > ĠLo ged . fv ( ĊĠĠĠ Ġmsg : ĠIterable < T >, ĊĠĠĠ Ġtag : ĠString Ġ= ĠTAG , Ġinfo Text : ĠString Ġ= ĠTAG , ĊĠĠĠ Ġshow Pretty : ĠBoolean Ġ= ĠSHOW _ PRE TTY , Ġthread Name : ĠBoolean Ġ= ĠWITH _ THREAD _ NAME , ĊĠĠĠ Ġframe Type : ĠFrame Type Ġ= Ġlo ged Frame . copy ( bottom Left Ġ= Ġ" âķ ł "), Ġtransform : Ġ( T ) Ġ-> ĠString Ġ= Ġ{ Ġit . toString () Ġ} Ċ ) Ġ= ĠLo ged . f ( msg , Ġtag , Ġinfo Text , Ġshow Pretty , Ġthread Name , Ġframe Type , Ġ 2 , Ġtransform Ġ= Ġtransform ) Ċ Ċ fun Ġ< T > ĠLo ged . fd ( ĊĠĠĠ Ġmsg : ĠIterable < T >, ĊĠĠĠ Ġtag : ĠString Ġ= ĠTAG , Ġinfo Text : ĠString Ġ= ĠTAG , ĊĠĠĠ Ġshow Pretty : ĠBoolean Ġ= ĠSHOW _ PRE TTY , Ġthread Name : ĠBoolean Ġ= ĠWITH _ THREAD _ NAME , ĊĠĠĠ Ġframe Type : ĠFrame Type Ġ= Ġlo ged Frame . copy ( bottom Left Ġ= Ġ" âķ ł "), Ġtransform : Ġ( T ) Ġ-> ĠString Ġ= Ġ{ Ġit . toString () Ġ} Ċ ) Ġ= ĠLo ged . f ( msg , Ġtag , Ġinfo Text , Ġshow Pretty , Ġthread Name , Ġframe Type , Ġ 3 , Ġtransform Ġ= Ġtransform ) Ċ Ċ fun Ġ< T > ĠLo ged . fi ( ĊĠĠĠ Ġmsg : ĠIterable < T >, ĊĠĠĠ Ġtag : ĠString Ġ= ĠTAG , Ġinfo Text : ĠString Ġ= ĠTAG , ĊĠĠĠ Ġshow Pretty : ĠBoolean Ġ= ĠSHOW _ PRE TTY , Ġthread Name : ĠBoolean Ġ= ĠWITH _ THREAD _ NAME , ĊĠĠĠ Ġframe Type : ĠFrame Type Ġ= Ġlo ged Frame . copy ( bottom Left Ġ= Ġ" âķ ł "), Ġtransform : Ġ( T ) Ġ-> ĠString Ġ= Ġ{ Ġit . toString () Ġ} Ċ ) Ġ= ĠLo ged . f ( msg , Ġtag , Ġinfo Text , Ġshow Pretty , Ġthread Name , Ġframe Type , Ġ 4 , Ġtransform Ġ= Ġtransform ) Ċ Ċ fun Ġ< T > ĠLo ged . fw ( ĊĠĠĠ Ġmsg : ĠIterable < T >, ĊĠĠĠ Ġtag : ĠString Ġ= ĠTAG , Ġinfo Text : ĠString Ġ= ĠTAG , ĊĠĠĠ Ġshow Pretty : ĠBoolean Ġ= ĠSHOW _ PRE TTY , Ġthread Name : ĠBoolean Ġ= ĠWITH _ THREAD _ NAME , ĊĠĠĠ Ġframe Type : ĠFrame Type Ġ= Ġlo ged Frame . copy ( bottom Left Ġ= Ġ" âķ ł "), Ġtransform : Ġ( T ) Ġ-> ĠString Ġ= Ġ{ Ġit . toString () Ġ} Ċ ) Ġ= ĠLo ged . f ( msg , Ġtag , Ġinfo Text , Ġshow Pretty , Ġthread Name , Ġframe Type , Ġ 5 , Ġtransform Ġ= Ġtransform ) Ċ Ċ fun Ġ< T > ĠLo ged . fe ( ĊĠĠĠ Ġmsg : ĠIterable < T >, ĊĠĠĠ Ġtag : ĠString Ġ= ĠTAG , Ġinfo Text : ĠString Ġ= ĠTAG , ĊĠĠĠ Ġshow Pretty : ĠBoolean Ġ= ĠSHOW _ PRE TTY , Ġthread Name : ĠBoolean Ġ= ĠWITH _ THREAD _ NAME , ĊĠĠĠ Ġframe Type : ĠFrame Type Ġ= Ġlo ged Frame . copy ( bottom Left Ġ= Ġ" âķ ł "), Ġtransform : Ġ( T ) Ġ-> ĠString Ġ= Ġ{ Ġit . toString () Ġ} Ċ ) Ġ= ĠLo ged . f ( msg , Ġtag , Ġinfo Text , Ġshow Pretty , Ġthread Name , Ġframe Type , Ġ 6 , Ġtransform Ġ= Ġtransform ) Ċ Ċ fun Ġ< T > ĠLo ged . fa ( ĊĠĠĠ Ġmsg : ĠIterable < T >, ĊĠĠĠ Ġtag : ĠString Ġ= ĠTAG , Ġinfo Text : ĠString Ġ= ĠTAG , ĊĠĠĠ Ġshow Pretty : ĠBoolean Ġ= ĠSHOW _ PRE TTY , Ġthread Name : ĠBoolean Ġ= ĠWITH _ THREAD _ NAME , ĊĠĠĠ Ġframe Type : ĠFrame Type Ġ= Ġlo ged Frame . copy ( bottom Left Ġ= Ġ" âķ ł "), Ġtransform : Ġ( T ) Ġ-> ĠString Ġ= Ġ{ Ġit . toString () Ġ} Ċ ) Ġ= ĠLo ged . f ( msg , Ġtag , Ġinfo Text , Ġshow Pretty , Ġthread Name , Ġframe Type , Ġ 7 , Ġtransform Ġ= Ġtransform ) Ċ Ċ /** Ċ Ġ* Ġ[ Lo ged . r ] Ġbut Ġadds Ġa Ġframe Ġaround Ġthe Ġ[ msg ] Ġusing Ġthe Ġ[ String . frame ] Ġmethod Ċ Ġ*/ Ċ @ Jvm Over loads Ċ fun ĠLo ged . f ( ĊĠĠĠ Ġmsg : ĠAny ? Ġ= Ġnull , ĊĠĠĠ Ġtag : ĠString Ġ= ĠTAG , Ġinfo Text : ĠString Ġ= ĠTAG , ĊĠĠĠ Ġshow Pretty : ĠBoolean Ġ= ĠSHOW _ PRE TTY , Ġthread Name : ĠBoolean Ġ= ĠWITH _ THREAD _ NAME , ĊĠĠĠ Ġframe Type : ĠFrame Type Ġ= Ġlo ged Frame . copy ( bottom Left Ġ= Ġ" âķ ł "), ĊĠĠĠ Ġvar arg Ġchoices : ĠInt Ġ= Ġint ArrayOf ( 2 , Ġ 3 , Ġ 4 , Ġ 5 , Ġ 6 , Ġ 7 ) Ċ ) Ġ= Ġr ("${ if Ġ( UNIT _ TEST ING ) Ġ"" Ġelse Ġ"$ info Text \ n "} ${ msg . toString (). frame ( frame Type . copy ( top Ġ= Ġtag )) }", Ġtag , Ġshow Pretty , Ġthread Name , Ġ* choices ) Ċ Ċ /** Ċ Ġ* Ġ[ Lo ged . r ] Ġbut Ġadds Ġa Ġframe Ġaround Ġthe Ġ[ msg ] Ġusing Ġthe Ġ[ Iterable . frame ] Ġmethod Ċ Ġ*/ Ċ fun ĠLo ged . f ( ĊĠĠĠ Ġmsg : ĠIterable <* >, ĊĠĠĠ Ġtag : ĠString Ġ= ĠTAG , Ġinfo Text : ĠString Ġ= ĠTAG , ĊĠĠĠ Ġshow Pretty : ĠBoolean Ġ= ĠSHOW _ PRE TTY , Ġthread Name : ĠBoolean Ġ= ĠWITH _ THREAD _ NAME , ĊĠĠĠ Ġframe Type : ĠFrame Type Ġ= Ġlo ged Frame . copy ( bottom Left Ġ= Ġ" âķ ł "), ĊĠĠĠ Ġvar arg Ġchoices : ĠInt Ġ= Ġint ArrayOf ( 2 , Ġ 3 , Ġ 4 , Ġ 5 , Ġ 6 , Ġ 7 ) Ċ ) Ġ= Ġr ("${ if Ġ( UNIT _ TEST ING ) Ġ"" Ġelse Ġ"$ info Text \ n "} ${ msg . frame ( frame Type . copy ( top Ġ= Ġtag )) }", Ġtag , Ġshow Pretty , Ġthread Name , Ġ* choices ) Ċ Ċ /** Ċ Ġ* Ġ[ Lo ged . r ] Ġbut Ġadds Ġa Ġframe Ġaround Ġthe Ġ[ msg ] Ġusing Ġthe Ġ[ Iterable . frame ] Ġmethod . ĠAlso Ġallows Ġyou Ġto Ġ[ transform ] Ġthe Ġobjects Ġif Ġyou Ġwish , Ġotherwise Ċ Ġ* Ġ[ toString ] Ġwill Ġbe Ġcalled Ċ Ġ*/ Ċ fun Ġ< T > ĠLo ged . f ( ĊĠĠĠ Ġmsg : ĠIterable < T >, ĊĠĠĠ Ġtag : ĠString Ġ= ĠTAG , Ġinfo Text : ĠString Ġ= ĠTAG , ĊĠĠĠ Ġshow Pretty : ĠBoolean Ġ= ĠSHOW _ PRE TTY , Ġthread Name : ĠBoolean Ġ= ĠWITH _ THREAD _ NAME , ĊĠĠĠ Ġframe Type : ĠFrame Type Ġ= Ġlo ged Frame . copy ( bottom Left Ġ= Ġ" âķ ł "), ĊĠĠĠ Ġvar arg Ġchoices : ĠInt Ġ= Ġint ArrayOf ( 2 , Ġ 3 , Ġ 4 , Ġ 5 , Ġ 6 , Ġ 7 ), Ġtransform : Ġ( T ) Ġ-> ĠString Ġ= Ġ{ Ġit . toString () Ġ} Ċ ) Ġ= Ġr ( ĊĠĠĠ Ġ"${ if Ġ( UNIT _ TEST ING ) Ġ"" Ġelse Ġ"$ info Text \ n "} ${ msg . frame ( frame Type . copy ( top Ġ= Ġtag ), Ġtransform Ġ= Ġtransform )} ", ĊĠĠĠ Ġtag , Ġshow Pretty , Ġthread Name , Ġ* choices Ċ ) Ċ