package Ġcom . type boot . data format . renderer Ċ Ċ import Ġcom . type boot . data format . types . File Script Ċ import Ġcom . type boot . data format . types . Instructions Ċ import Ġcom . type boot . data format . types . Serial isation Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ Ċ interface ĠRenderer Ġ{ ĊĠĠĠ Ġfun Ġrender ( file Script : ĠFile Script , Ġinstructions : ĠList < Instructions >, Ġserial isation : ĠSerial isation ) ĊĊĠĠĠ Ġcompanion Ġobject ĠFactory Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( output : ĠString ): ĠRenderer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠText Renderer ( output ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠText Renderer ( private Ġval Ġoutput : ĠString ) Ġ: ĠRenderer Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( output . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠFile ( output ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! out . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrender ( file Script : ĠFile Script , Ġinstructions : ĠList < Instructions >, Ġserial isation : ĠSerial isation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġf so Ġ= Ġif Ġ( this . output . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub Path Dir Ġ= ĠFile ( this . output Ġ+ Ġ"/" Ġ+ Ġserial isation . sub Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub Path Dir . mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileOutputStream ( this . output Ġ+ Ġ"/" Ġ+ Ġserial isation . sub Path Ġ+ Ġ"/" Ġ+ Ġfile Script . name Ġ+ Ġserial isation . extension ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinstructions . forEach Ġ{ Ġins Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf so . write ("${ ins . text ()}; \ n ". toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf so . flush () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ