/* Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 2 1 ĠPaul ĠAmb rose Ġ( p amb rose @ mac . com ) Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . github . reading bat . dsl . parse Ċ Ċ import Ġcom . github . p amb rose . common . util . last Line NumberOf Ċ import Ġcom . github . p amb rose . common . util . lines Between Ċ import Ġcom . github . p amb rose . common . util . substring Between Ċ import Ġcom . github . reading bat . server . Invocation Ċ Ċ internal Ġobject ĠKotlin Parse Ġ{ ĊĊĠ Ġinternal Ġval Ġfun Main Regex Ġ= ĠRegex (""" ^\ s * fun \ s + main .* \) """) ĊĠ Ġinternal Ġval Ġkotlin End Regex Ġ= ĠRegex (""" \ s * }\ s * """) ĊĠ Ġprivate Ġconst Ġval Ġprintln Prefix Ġ= Ġ" println (" ĊĠ Ġinternal Ġconst Ġval Ġvar Name Ġ= Ġ" answers " ĊĊĠ Ġfun Ġextract Kotlin Function ( code : ĠList < String >) Ġ= ĊĠĠĠ Ġcode . sub List ( 0 , Ġcode . last Line NumberOf ( fun Main Regex )). join ToString ("\ n "). trim Indent () ĊĊĠ Ġfun Ġextract Kotlin Inv ocations ( code : ĠString , Ġstart : ĠRegex , Ġend : ĠRegex ) Ġ= ĊĠĠĠ Ġextract Kotlin Inv ocations ( code . lines (), Ġstart , Ġend ) ĊĊĠ Ġfun Ġextract Kotlin Inv ocations ( code : ĠList < String >, Ġstart : ĠRegex , Ġend : ĠRegex ) Ġ= ĊĠĠĠ Ġcode . lines Between ( start , Ġend ) ĊĠĠĠĠĠ Ġ. filter Ġ{ Ġit . trim Start (). startsWith ( println Prefix ) Ġ} ĊĠĠĠĠĠ Ġ. map Ġ{ Ġit . substring Between ( println Prefix , Ġ") ") Ġ} ĊĠĠĠĠĠ Ġ. map Ġ{ ĠInvocation ( it ) Ġ} ĊĊĠ Ġfun ĠconvertTo Kotlin Script ( code : ĠList < String >) Ġ= ĊĠĠĠ Ġbuild String Ġ{ ĊĠĠĠĠĠ Ġvar Ġinside Main Ġ= Ġfalse ĊĊĠĠĠĠĠ Ġcode . forEach Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġline . contains ( fun Main Regex ) Ġ-> Ġinside Main Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠ Ġinside Main Ġ&& Ġline . trim Start (). startsWith ( println Prefix ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpr Ġ= Ġline . substring Between ( println Prefix , Ġ") ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Line ("$ varName . add ($ expr )") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġinside Main Ġ&& Ġline . trim Start (). startsWith (" }") Ġ-> Ġinside Main Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġappend Line ( line ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġappend Line ("") ĊĠĠĠ Ġ} Ċ }