package Ġcad enza Ċ Ċ import Ġorg . fuse source . j ansi . Ansi Ċ import Ġorg . fuse source . j ansi . Ansi . Attribute Ċ import Ġorg . fuse source . j ansi . Ansi . ansi Ċ import Ġorg . fuse source . j ansi . Ansi Console Ċ import Ġorg . gra al vm . launcher . Abstract Language Launcher Ċ import Ġorg . gra al vm . options . Option Category Ċ import Ġorg . gra al vm . poly g lot . Context Ċ import Ġorg . gra al vm . poly g lot . Poly g lot Exception Ċ import Ġorg . gra al vm . poly g lot . Source Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . util .* Ċ import Ġkotlin . system . exit Process Ċ Ċ fun Ġ< A > Ġwith Ansi ( f : Ġ() Ġ-> ĠA ): ĠA Ġ{ ĊĠ ĠAn si Console . system Install () ĊĠ Ġreturn Ġtry Ġ{ ĊĠĠĠ Ġf () ĊĠ Ġ} Ġfinally Ġ{ ĊĠĠĠ ĠAn si Console . system Un install () ĊĠ Ġ} Ċ } Ċ Ċ internal Ġfun ĠPoly g lot Exception . pretty StackTrace ( trim : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠ Ġval Ġstack Trace Ġ= Ġpoly g lot StackTrace . to Mutable List () ĊĠ Ġif Ġ( trim ) Ġ{ ĊĠĠĠ Ġval Ġiterator Ġ= Ġstack Trace . list Iterator ( stack Trace . size ) ĊĠĠĠ Ġwhile Ġ( iterator . has Previous ()) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( iterator . previous (). is Host Frame ) Ġiterator . remove () ĊĠĠĠĠĠ Ġelse Ġbreak ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĠ Ġval Ġout Ġ= Ġansi () ĊĠ Ġ// if Ġ( is Host Exception ) Ġout . fg Red (). a ( as Host Exception (). toString ()) ĊĠ Ġ// else Ġout . fg B right Yellow (). a ( message ) ĊĠ Ġout . a ( if Ġ( is Host Exception ) Ġas Host Exception (). toString () Ġelse Ġmessage ) ĊĠ Ġout . reset (). a ('\ n '). fg B right Black () ĊĠ Ġstack Trace . forEach Ġ{ ĊĠĠĠ Ġout . a ( Attribute . ITAL IC ). a (" Ġ Ġat Ġ"). a ( Attribute . ITAL IC _ OFF ). a ( it ). a ('\ n ') ĊĠ Ġ} ĊĠ Ġout . reset () ĊĠ Ġprintln ( out . toString ()) Ċ } Ċ Ċ class ĠLaunch er Ġ: ĠAbstract Language Launcher () Ġ{ ĊĠ Ġprivate Ġvar Ġprogram Args : ĠArray < String > Ġ= Ġempty Array () ĊĠ Ġprivate Ġvar Ġversion Action : ĠVersion Action Ġ= ĠVersion Action . None ĊĠ Ġprivate Ġvar Ġfile : ĠFile ? Ġ= Ġnull ĊĊĠ Ġoverride Ġfun Ġget Language Id () Ġ= ĠLANGUAGE _ ID ĊĊĠ Ġoverride Ġfun Ġlaunch ( context Builder : ĠContext . Builder ) Ġ= Ġexit Process ( execute ( context Builder )) ĊĊĠ Ġprivate Ġfun Ġexecute ( context Builder : ĠContext . Builder ): ĠInt Ġ= Ġwith Ansi Ġ{ Ġexecute With Ansi ( context Builder ) Ġ} ĊĊĠ Ġprivate Ġfun Ġexecute With Ansi ( context Builder : ĠContext . Builder ): ĠInt Ġ{ ĊĠĠĠ Ġcontext Builder . arguments ( language Id , Ġprogram Args ) ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġcontext Builder . build (). use Ġ{ Ġctx Ġ-> ĊĠĠĠĠĠĠĠ Ġrun Version Action ( version Action , Ġctx . engine ) ĊĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġctx . eval ( Source . newBuilder ( language Id , Ġfile ). build ()) ĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġif Ġ( v . can Execute ()) Ġv . execute (). as Int () Ġelse Ġv . as Int () ĊĠĠĠĠĠĠĠ Ġprintln (" Result : Ġ$ r ") ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠPoly g lot Exception ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( e . is Exit ) Ġreturn Ġe . exit Status ĊĠĠĠĠĠ Ġe . pretty StackTrace (! e . is Internal Error ) ĊĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠ Ġprintln ( ĊĠĠĠĠĠĠĠ Ġansi (). a (" Error Ġloading Ġfile Ġ") ĊĠĠĠĠĠĠĠ Ġ. bold (). fg B right Black (). a ("' "). reset (). bold (). a ( file ). bold Off (). fg B right Black (). a ("' ") ĊĠĠĠĠĠĠĠ Ġ. fg B right Black (). a (" Ġ( "). fg Red (). a ( e . message ). fg B right Black (). a (" ) "). toString () ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġpreprocess Arguments ( arguments : ĠMutable List < String >, Ġpoly g lot Options : ĠMutable Map < String , ĠString >): ĠList < String > Ġ{ ĊĠĠĠ Ġval Ġun recognized Options Ġ= ĠArrayList < String >() ĊĠĠĠ Ġval Ġiterator Ġ= Ġarguments . list Iterator () ĊĠĠĠ Ġwhile Ġ( iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠ Ġval Ġoption Ġ= Ġiterator . next () ĊĠĠĠĠĠ Ġif Ġ( option . length Ġ< Ġ 2 Ġ|| Ġ! option . startsWith ("- ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġiterator . previous () ĊĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ// ĠIgnore Ġfall Ġthrough ĊĠĠĠĠĠ Ġwhen Ġ( option ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ"-- " Ġ-> Ġ{ Ġ} ĊĠĠĠĠĠĠĠ Ġ"-- show - version " Ġ-> Ġversion Action Ġ= ĠVersion Action . Print And Continue ĊĠĠĠĠĠĠĠ Ġ"-- version " Ġ-> Ġversion Action Ġ= ĠVersion Action . Print And Exit ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġequals Index Ġ= Ġoption . indexOf (' =') ĊĠĠĠĠĠĠĠĠĠ Ġval Ġargument Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġequals Index Ġ> Ġ 0 Ġ-> Ġoption . substring ( equals Index Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . hasNext () Ġ-> Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġun recognized Options . add ( option ) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( equals Index Ġ< Ġ 0 Ġ&& Ġargument Ġ!= Ġnull ) Ġiterator . previous () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( file Ġ== Ġnull Ġ&& Ġiterator . hasNext ()) Ġfile Ġ= ĠPaths . get ( iterator . next ()). to File () ĊĠĠĠ Ġval Ġprogram Arguments List Ġ= Ġarguments . sub List ( iterator . next Index (), Ġarguments . size ) ĊĠĠĠ Ġprogram Args Ġ= Ġprogram Arguments List . to Typed Array () ĊĠĠĠ Ġreturn Ġun recognized Options ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġvalidate Arguments (_ poly g lot Options : ĠMap < String , ĠString > ?) Ġ{ ĊĠĠĠ Ġif Ġ( file Ġ== Ġnull Ġ&& Ġversion Action Ġ!= ĠVersion Action . Print And Exit ) ĊĠĠĠĠĠ Ġthrow Ġabort (" no Ġfile Ġprovided ", Ġ 6 ) ĊĠ Ġ} ĊĊĠ Ġinternal Ġfun ĠAn si . ansi Option ( option : ĠString , Ġdescription : ĠString ) Ġ{ ĊĠĠĠ Ġvar Ġo Ġ= Ġoption ĊĠĠĠ Ġif Ġ( option . length Ġ>= Ġ 2 2 ) Ġ{ ĊĠĠĠĠĠ Ġformat ("% s % s \ n ", Ġ" Ġ Ġ", Ġo ) ĊĠĠĠĠĠ Ġo Ġ= Ġ"" ĊĠĠĠ Ġ} ĊĠĠĠ Ġformat (" Ġ Ġ%- 2 2 s % s \ n ", Ġo , Ġdescription ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġprint Help (_ max Category : ĠOption Category ) Ġ{ ĊĠĠĠ Ġansi (). run Ġ{ ĊĠĠĠĠĠ Ġnewline () ĊĠĠĠĠĠ Ġrender (" Usage : Ġ@ | italic , blue Ġcad enza |@ Ġ@ | bold Ġ[ OPTION ]| @ ... Ġ@ | bold Ġ[ FILE ]| @ Ġ@ | bold Ġ[ PROGRAM ĠARGS ]| @\ n \ n ") ĊĠĠĠĠĠ Ġa (" Run Ġcad enza Ġprograms Ġon ĠGra al VM \ n \ n ") ĊĠĠĠĠĠ Ġa (" Mandatory Ġarguments Ġto Ġlong Ġoptions Ġare Ġmandatory Ġfor Ġshort Ġoptions Ġtoo .\ n \ n ") ĊĠĠĠĠĠ Ġa (" Options :\ n ") ĊĠĠĠĠĠ Ġansi Option ("- L Ġ< path >", Ġ" set Ġthe Ġpath Ġto Ġsearch Ġfor Ġcad enza Ġlibraries ") ĊĠĠĠĠĠ Ġansi Option ("-- lib Ġ< library >", Ġ" add Ġa Ġlibrary ") ĊĠĠĠĠĠ Ġansi Option ("-- version ", Ġ" print Ġthe Ġversion Ġand Ġexit ") ĊĠĠĠĠĠ Ġansi Option ("-- show - version ", Ġ" print Ġthe Ġversion Ġand Ġcontinue ") ĊĠĠĠĠĠ Ġprintln ( toString ()) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcollect Arguments ( args : ĠMutable Set < String >) Ġ{ ĊĠĠĠ Ġargs . addAll ( listOf ("- L ", Ġ"-- lib ", Ġ"-- version ", Ġ"-- show - version ")) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠgetDefault Languages (): ĠArray < String > Ġ= ĠarrayOf ( LANGUAGE _ ID ) Ġ// Ġ" js "," llvm ", get Language Id ()}; ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠĠĠ ĠLaunch er (). launch ( if Ġ( args . isEmpty ()) ĠarrayOf (" examples / add . za ") Ġelse Ġargs ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }