package Ġorg . jetbrains . kotlin . jupyter Ċ Ċ import Ġcom . be ust . kl ax on . JsonObject Ċ import Ġjupyter . kotlin . Kotlin Kernel Version . Companion . to Maybe Unspecified String Ċ import Ġjupyter . kotlin . Mime Typed Result Ċ import Ġjupyter . kotlin . text Result Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . jetbrains . annotations . Test Only Ċ import Ġorg . jetbrains . kotlin . config . Kotlin Compiler Version Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . OutputStream Ċ import Ġjava . io . Print Stream Ċ import Ġjava . lang . reflect . Invocation TargetException Ċ import Ġjava . util . concurrent . atomic . Atomic Long Ċ import Ġkotlin . concurrent . timer Ċ import Ġkotlin . system . exit Process Ċ Ċ enum Ġclass ĠResponse State Ġ{ ĊĠĠĠ ĠOk , ĠError , ĠAbort Ċ } Ċ Ċ enum Ġclass ĠJupyter Out Type Ġ{ ĊĠĠĠ ĠST DOUT , ĠSTDERR ; ĊĠĠĠ Ġfun Ġoption Name () Ġ= Ġname . toLowerCase () Ċ } Ċ Ċ abstract Ġclass ĠResponse ( ĊĠĠĠ Ġprivate Ġval Ġstd Out : ĠString ?, ĊĠĠĠ Ġprivate Ġval Ġstd Err : ĠString ? Ċ ) Ġ{ ĊĠĠĠ Ġabstract Ġval Ġstate : ĠResponse State ĊĊĠĠĠ Ġfun Ġsend ( socket : ĠJupyter Connection . Socket , Ġrequest Count : ĠLong , Ġrequest Msg : ĠMessage , Ġstarted Time : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( std Out Ġ!= Ġnull Ġ&& Ġstd Out . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsocket . connection . iop ub . send Out ( request Msg , ĠJupyter Out Type . STDOUT , Ġstd Out ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( std Err Ġ!= Ġnull Ġ&& Ġstd Err . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsocket . connection . iop ub . send Out ( request Msg , ĠJupyter Out Type . STD ERR , Ġstd Err ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsend Body ( socket , Ġrequest Count , Ġrequest Msg , Ġstarted Time ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġsend Body ( socket : ĠJupyter Connection . Socket , Ġrequest Count : ĠLong , Ġrequest Msg : ĠMessage , Ġstarted Time : ĠString ) Ċ } Ċ Ċ class ĠOk Response With Message ( ĊĠĠĠ Ġprivate Ġval Ġresult : ĠMime Typed Result ?, ĊĠĠĠ Ġprivate Ġval Ġnew Classpath : ĠClass path Ġ= Ġempty List (), ĊĠĠĠ Ġstd Out : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġstd Err : ĠString ? Ġ= Ġnull , Ċ ) Ġ: ĠResponse ( std Out , Ġstd Err ) Ġ{ ĊĠĠĠ Ġoverride Ġval Ġstate : ĠResponse State Ġ= ĠResponse State . Ok ĊĊĠĠĠ Ġoverride Ġfun Ġsend Body ( socket : ĠJupyter Connection . Socket , Ġrequest Count : ĠLong , Ġrequest Msg : ĠMessage , Ġstarted Time : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= ĠjsonObject () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . is olated Html ) Ġmetadata [" text / html "] Ġ= ĠjsonObject (" is olated " Ġto Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata [" new _ classpath "] Ġ= Ġnew Classpath ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsocket . connection . iop ub . send ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Reply Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Msg , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" execute _ result ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= ĠjsonObject ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" execution _ count " Ġto Ġrequest Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" data " Ġto Ġresult , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" metadata " Ġto Ġmetadata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsocket . send ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Reply Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Msg , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" execute _ reply ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata Ġ= ĠjsonObject ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" dependencies _ met " Ġto Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" engine " Ġto Ġrequest Msg . header [" session "], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" status " Ġto Ġ" ok ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" started " Ġto Ġstarted Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= ĠjsonObject ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" status " Ġto Ġ" ok ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" execution _ count " Ġto Ġrequest Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" user _ variables " Ġto ĠJsonObject (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" payload " Ġto ĠlistOf < String >(), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" user _ expressions " Ġto ĠJsonObject () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠAbort Response With Message ( ĊĠĠĠ Ġval Ġresult : ĠMime Typed Result ?, ĊĠĠĠ Ġstd Err : ĠString ? Ġ= Ġnull , Ċ ) Ġ: ĠResponse ( null , Ġstd Err ) Ġ{ ĊĠĠĠ Ġoverride Ġval Ġstate : ĠResponse State Ġ= ĠResponse State . Abort ĊĊĠĠĠ Ġoverride Ġfun Ġsend Body ( socket : ĠJupyter Connection . Socket , Ġrequest Count : ĠLong , Ġrequest Msg : ĠMessage , Ġstarted Time : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġerror Reply Ġ= Ġmake Reply Message ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Msg , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" execute _ reply ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= ĠjsonObject ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" status " Ġto Ġ" abort ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" execution _ count " Ġto Ġrequest Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠSystem . err . println (" Sending Ġabort : Ġ$ error Reply ") ĊĠĠĠĠĠĠĠ Ġsocket . send ( error Reply ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠError Response With Message ( ĊĠĠĠ Ġval Ġresult : ĠMime Typed Result ?, ĊĠĠĠ Ġstd Err : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġprivate Ġval Ġerror Name : ĠString Ġ= Ġ" Unknown Ġerror ", ĊĠĠĠ Ġprivate Ġvar Ġerror Value : ĠString Ġ= Ġ"", ĊĠĠĠ Ġprivate Ġval Ġtraceback : ĠList < String > Ġ= Ġempty List (), ĊĠĠĠ Ġprivate Ġval Ġadditional Info : ĠJsonObject Ġ= ĠjsonObject (), Ċ ) Ġ: ĠResponse ( null , Ġstd Err ) Ġ{ ĊĠĠĠ Ġoverride Ġval Ġstate : ĠResponse State Ġ= ĠResponse State . Error ĊĊĠĠĠ Ġoverride Ġfun Ġsend Body ( socket : ĠJupyter Connection . Socket , Ġrequest Count : ĠLong , Ġrequest Msg : ĠMessage , Ġstarted Time : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġerror Reply Ġ= Ġmake Reply Message ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Msg , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" execute _ reply ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= ĠjsonObject ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" status " Ġto Ġ" error ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" execution _ count " Ġto Ġrequest Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ename " Ġto Ġerror Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" e value " Ġto Ġerror Value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" traceback " Ġto Ġtraceback , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" additional Info " Ġto Ġadditional Info ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠSystem . err . println (" Sending Ġerror : Ġ$ error Reply ") ĊĠĠĠĠĠĠĠ Ġsocket . send ( error Reply ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠJupyter Connection . Socket . control Messages Handler ( msg : ĠMessage , Ġrepl : ĠRe pl For J upyter ?) Ġ{ ĊĠĠĠ Ġwhen Ġ( msg . header !! [" msg _ type "]) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" interrupt _ request " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . warn (" Inter ruption Ġis Ġnot Ġyet Ġsupported !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( make Reply Message ( msg , Ġ" interrupt _ reply ", Ġcontent Ġ= Ġmsg . content )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ" shutdown _ request " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepl ?. eval On Shutdown () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( make Reply Message ( msg , Ġ" shutdown _ reply ", Ġcontent Ġ= Ġmsg . content )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexit Process ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠJupyter Connection . Socket . shell Messages Handler ( msg : ĠMessage , Ġrepl : ĠRe pl For J upyter , Ġexecution Count : ĠAtomic Long ) Ġ{ ĊĠĠĠ Ġwhen Ġ( msg . header !! [" msg _ type "]) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" kernel _ info _ request " Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Wrapped ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Reply Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" kernel _ info _ reply ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= ĠjsonObject ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" protocol _ version " Ġto Ġprotocol Version , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" language " Ġto Ġ" Kotlin ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" language _ version " Ġto ĠKotlin Compiler Version . VERSION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" language _ info " Ġto ĠjsonObject ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġto Ġ" kotlin ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" code mirror _ mode " Ġto Ġ" text / x - kotlin ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" file _ extension " Ġto Ġ". kt ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mime type " Ġto Ġ" text / x - kotlin ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" py gments _ lexer " Ġto Ġ" kotlin ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" version " Ġto ĠKotlin Compiler Version . VERSION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠJupyter Ġlab ĠConsole Ġsupport ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" banner " Ġto Ġ" Kotlin Ġkernel Ġv . Ġ${ repl . runtime Properties . version . to Maybe Unspecified String ()}, ĠKotlin Ġv . Ġ${ Kotlin Compiler Version . VERSION }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" implementation " Ġto Ġ" Kotlin ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" implementation _ version " Ġto Ġrepl . runtime Properties . version . to Maybe Unspecified String (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" status " Ġto Ġ" ok " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ" history _ request " Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Wrapped ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Reply Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" history _ reply ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= ĠjsonObject ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" history " Ġto ĠlistOf < String >() Ġ// Ġnot Ġimplemented ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠThis Ġrequest Ġis Ġdeprecated Ġsince Ġmessaging Ġprotocol Ġv . 5 . 1 , ĊĠĠĠĠĠĠĠ Ġ// Ġremove Ġit Ġin Ġfuture Ġversions Ġof Ġkernel ĊĠĠĠĠĠĠĠ Ġ" connect _ request " Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Wrapped ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Reply Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" connect _ reply ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= ĠjsonObject ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJupyter Sockets . values () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠPair ("${ it . name }_ port ", Ġconnection . config . ports [ it . ordinal ]) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ" execute _ request " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . context Message Ġ= Ġmsg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġexecution Count . get And Increment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstarted Time Ġ= ĠISO 8 6 0 1 Date Now ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġdisplay Handler ( value : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġvalue . to Mime Typed Result () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . iop ub . send ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Reply Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" display _ data ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= ĠjsonObject ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" data " Ġto Ġres , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" metadata " Ġto ĠjsonObject () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . iop ub . send Status (" busy ", Ġmsg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġmsg . content [" code "] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . iop ub . send ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Reply Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" execute _ input ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= ĠjsonObject ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" execution _ count " Ġto Ġcount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" code " Ġto Ġcode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres : ĠResponse Ġ= Ġif Ġ( is Command ( code . toString ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Command ( code . toString (), Ġrepl ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . eval With IO ( repl . output Config , Ġmsg ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepl . eval ( code . toString (), Ġ:: display Handler , Ġcount . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġres . send ( this , Ġcount , Ġmsg , Ġstarted Time ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . iop ub . send Status (" idle ", Ġmsg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . context Message Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ" comm _ info _ request " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Wrapped ( msg , Ġmake Reply Message ( msg , Ġ" comm _ info _ reply ", Ġcontent Ġ= ĠjsonObject (" com ms " Ġto ĠjsonObject ()))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ" complete _ request " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġmsg . content [" code "]. toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġmsg . content [" cursor _ pos "] Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepl . complete ( code , Ġcursor ) Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Wrapped ( msg , Ġmake Reply Message ( msg , Ġ" complete _ reply ", Ġcontent Ġ= Ġresult . toJson ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ" list _ errors _ request " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġmsg . content [" code "]. toString () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepl . list Errors ( code ) Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Wrapped ( msg , Ġmake Reply Message ( msg , Ġ" list _ errors _ reply ", Ġcontent Ġ= Ġresult . toJson ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ" is _ complete _ request " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġmsg . content [" code "]. toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Str Ġ= Ġif Ġ( is Command ( code )) Ġ" complete " Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcheck Ġ= Ġrepl . check Complete ( code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck . is Complete Ġ-> Ġ" complete " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" in complete " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠRe pl Compiler Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" invalid " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Wrapped ( msg , Ġmake Reply Message ( msg , Ġ" is _ complete _ reply ", Ġcontent Ġ= ĠjsonObject (" status " Ġto Ġres Str ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsend ( make Reply Message ( msg , Ġ" unsupported _ message _ reply ")) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠCapt uring OutputStream ( ĊĠĠĠ Ġprivate Ġval Ġstdout : ĠPrint Stream , ĊĠĠĠ Ġprivate Ġval Ġconf : ĠOutput Config , ĊĠĠĠ Ġprivate Ġval Ġcapture Output : ĠBoolean , ĊĠĠĠ Ġval Ġon Capt ured : Ġ( String ) Ġ-> ĠUnit , Ċ ) Ġ: ĠOutputStream () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcaptured Lines Ġ= ĠByteArrayOutputStream () ĊĠĠĠ Ġprivate Ġval Ġcaptured NewLine Ġ= ĠByteArrayOutputStream () ĊĠĠĠ Ġprivate Ġvar Ġoverall Output Size Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġnewline Found Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġtimer Ġ= Ġtimer ( ĊĠĠĠĠĠĠĠ Ġinitial Delay Ġ= Ġconf . capture Buffer Time Limit Ms , ĊĠĠĠĠĠĠĠ Ġperiod Ġ= Ġconf . capture Buffer Time Limit Ms , ĊĠĠĠĠĠĠĠ Ġaction Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflush () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġcontents : ĠByteArray ĊĠĠĠĠĠĠĠ Ġ@ Test Only ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcaptured Lines . toByteArray () Ġ+ Ġcaptured NewLine . toByteArray () ĊĊĠĠĠ Ġprivate Ġfun Ġflush IfNeeded ( b : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġb . to Char () ĊĠĠĠĠĠĠĠ Ġif Ġ( c Ġ== Ġ'\ n ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnewline Found Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcaptured NewLine . writeTo ( captured Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcaptured NewLine . reset () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġcaptured Lines . size () Ġ+ Ġcaptured NewLine . size () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( newline Found Ġ&& Ġsize Ġ>= Ġconf . capture New line BufferSize ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġflush Buffers ( captured Lines ) ĊĠĠĠĠĠĠĠ Ġif Ġ( size Ġ>= Ġconf . capture Buffer MaxSize ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġflush () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġoverride Ġfun Ġwrite ( b : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ++ overall Output Size ĊĠĠĠĠĠĠĠ Ġstdout . write ( b ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( capture Output Ġ&& Ġoverall Output Size Ġ<= Ġconf . cell Output MaxSize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcaptured NewLine . write ( b ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflush IfNeeded ( b ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġprivate Ġfun Ġflush Buffers ( var arg Ġbuffers : ĠByteArrayOutputStream ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnewline Found Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġbuffers . map Ġ{ Ġstream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġstream . toString (" UTF - 8 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream . reset () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstr ĊĠĠĠĠĠĠĠ Ġ}. reduce Ġ{ Ġacc , Ġs Ġ-> Ġacc Ġ+ Ġs Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( str . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Capt ured ( str ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġflush () Ġ{ ĊĠĠĠĠĠĠĠ Ġflush Buffers ( captured Lines , Ġcaptured NewLine ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . close () ĊĠĠĠĠĠĠĠ Ġtimer . cancel () ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠAny . to Mime Typed Result (): ĠMime Typed Result ? Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠ Ġis ĠMime Typed Result Ġ-> Ġthis ĊĠĠĠ Ġis ĠUnit Ġ-> Ġnull ĊĠĠĠ Ġelse Ġ-> Ġtext Result ( this . toString ()) Ċ } Ċ Ċ fun ĠJupyter Connection . eval With IO ( config : ĠOutput Config , Ġsrc Message : ĠMessage , Ġbody : Ġ() Ġ-> ĠEval Result ?): ĠResponse Ġ{ ĊĠĠĠ Ġval Ġout Ġ= ĠSystem . out ĊĠĠĠ Ġval Ġerr Ġ= ĠSystem . err ĊĊĠĠĠ Ġfun Ġget Capt uring Stream ( stream : ĠPrint Stream , Ġout Type : ĠJupyter Out Type , Ġcapture Output : ĠBoolean ): ĠCapt uring OutputStream Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠCapt uring OutputStream ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcapture Output ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġtext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . iop ub . send Out ( src Message , Ġout Type , Ġtext ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġforked Out Ġ= Ġget Capt uring Stream ( out , ĠJupyter Out Type . STDOUT , Ġconfig . capture Output ) ĊĠĠĠ Ġval Ġforked Error Ġ= Ġget Capt uring Stream ( err , ĠJupyter Out Type . STD ERR , Ġfalse ) ĊĊĠĠĠ ĠSystem . set Out ( Print Stream ( fork ed Out , Ġfalse , Ġ" UTF - 8 ")) ĊĠĠĠ ĠSystem . set Err ( Print Stream ( fork ed Error , Ġfalse , Ġ" UTF - 8 ")) ĊĊĠĠĠ Ġval Ġ` in ` Ġ= ĠSystem .` in ` ĊĠĠĠ ĠSystem . set In ( stdin In ) ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexec Ġ= Ġbody () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( exec Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAbort Response With Message ( text Result (" Error ! "), Ġ" NO ĠREPL !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforked Out . flush () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforked Error . flush () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġexec . result Value ?. to Mime Typed Result () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOk Response With Message ( result , Ġexec . new Classpath ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAbort Response With Message ( text Result (" Error ! "), Ġ" error : Ġ ĠUnable Ġto Ġconvert Ġresult Ġto Ġa Ġstring : Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠRe pl Compiler Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġforked Out . flush () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġforked Error . flush () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Diagnostic Ġ= Ġex . first Diagnostics ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadditional Info Ġ= Ġfirst Diagnostic ?. location ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠerrorMessage Ġ= Ġfirst Diagnostic . message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠjsonObject ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" line Start " Ġto Ġit . start . line , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" col Start " Ġto Ġit . start . col , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" line End " Ġto Ġ( it . end ?. line Ġ?: Ġ- 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" col End " Ġto Ġ( it . end ?. col Ġ?: Ġ- 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" message " Ġto ĠerrorMessage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" path " Ġto Ġfirst Diagnostic . source Path . or Empty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: ĠjsonObject () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠError Response With Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Result (" Error ! "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex . message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex . java Class . canonical Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex . message Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex . stack Trace . map Ġ{ Ġit . toString () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Info ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠRe pl Eval RuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġforked Out . flush () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstd Err Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( std Err ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcause Ġ= Ġex . cause ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cause Ġ== Ġnull ) Ġappend Line ( ex . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( cause ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInvocation TargetException Ġ-> Ġappend Line ( cause . target Exception . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġappend Line ( cause . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcause . stack Trace ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s Ġin Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Line ( s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠError Response With Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Result (" Error ! "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstd Err . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex . java Class . canonical Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex . message Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex . stack Trace . map Ġ{ Ġit . toString () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġforked Out . close () ĊĠĠĠĠĠĠĠ Ġforked Error . close () ĊĠĠĠĠĠĠĠ ĠSystem . set In (` in `) ĊĠĠĠĠĠĠĠ ĠSystem . set Err ( err ) ĊĠĠĠĠĠĠĠ ĠSystem . set Out ( out ) ĊĠĠĠ Ġ} Ċ } Ċ