package Ġcom . github . fw il he . in z ell Ċ Ċ type alias Ġcolumn Function Ġ= Ġ( Int ) Ġ-> ĠAny Ċ Ċ class ĠColumn ( val Ġtitle : ĠString , Ġprivate Ġval Ġfunction : Ġcolumn Function ) Ġ{ ĊĠĠĠ Ġfun Ġeval ( i : ĠInt ): ĠAny Ġ= Ġfunction . invoke ( i ) ĊĠĠĠ Ġfun Ġeval Int ( i : ĠInt ): ĠInt Ġ= Ġfunction . invoke ( i ) Ġas ĠInt ĊĠĠĠ Ġfun Ġeval Double ( i : ĠInt ): ĠDouble Ġ= Ġfunction . invoke ( i ) Ġas ĠDouble ĊĠĠĠ Ġfun Ġeval String ( i : ĠInt ): ĠString Ġ= Ġfunction . invoke ( i ) Ġas ĠString Ċ } Ċ Ċ class ĠSheet ( val Ġcolumns : ĠList < Column >, Ġval Ġcaption : ĠString Ġ= Ġ"( No Ġcaption Ġprovided )") Ġ{ ĊĠĠĠ Ġfun Ġrow ( index : ĠInt ): ĠList < Any > Ġ= Ġcolumns . map Ġ{ Ġit . eval ( index ) Ġ} ĊĠĠĠ Ġfun Ġtitle ( index : ĠInt ): ĠString Ġ= Ġcolumns [ index ]. title ĊĠĠĠ Ġfun ĠforEach Function ( function : Ġ( Column ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcolumns . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ abstract Ġclass ĠSp readsheet Printer ( val Ġsheet : ĠSheet , Ġval ĠnumberOf Rows : ĠInt Ġ= Ġ 1 0 ) Ġ{ ĊĠĠĠ Ġabstract Ġoverride Ġfun ĠtoString (): ĠString ĊĠĠĠ Ġfun Ġprint To Standard Out () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ( toString ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠCsv Printer ( sheet : ĠSheet ) Ġ: ĠSp readsheet Printer ( sheet ) Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠstringBuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( sheet . columns . join ToString ( separator Ġ= Ġ"; ") Ġ{ Ġcolumn Ġ-> Ġcolumn . title Ġ}). append ("\ n ") ĊĠĠĠĠĠĠĠ Ġfor Ġ( row Ġin Ġ 1 .. numberOf Rows ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ( sheet . columns . map Ġ{ Ġcolumn Ġ-> Ġcolumn . eval ( row ) Ġ}. join ToString ( separator Ġ= Ġ"; ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ("\ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠstringBuilder . toString () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠMarkdown Printer ( sheet : ĠSheet ) Ġ: ĠSp readsheet Printer ( sheet ) Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠstringBuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( sheet . columns . join ToString ( separator Ġ= Ġ" Ġ| Ġ") Ġ{ Ġcolumn Ġ-> Ġcolumn . title Ġ}). append ("\ n ") ĊĠĠĠĠĠĠĠ ĠstringBuilder . append ( sheet . columns . join ToString ( separator Ġ= Ġ" Ġ| Ġ") Ġ{ Ġcolumn Ġ-> Ġ"- ". repeat ( column . title . length ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ("\ n ") ĊĠĠĠĠĠĠĠ Ġfor Ġ( row Ġin Ġ 1 .. numberOf Rows ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append ( sheet . columns . map Ġ{ Ġcolumn Ġ-> Ġcolumn . eval ( row ). toString (). pad End ( column . title . length ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ( separator Ġ= Ġ" Ġ| Ġ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ("\ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠstringBuilder . toString () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠHtml Printer ( sheet : ĠSheet ) Ġ: ĠSp readsheet Printer ( sheet ) Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠstringBuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ ĠstringBuilder . append Line ("< table >") ĊĠĠĠĠĠĠĠ ĠstringBuilder . append Line (" Ġ Ġ< caption >${ sheet . caption }</ caption >") ĊĠĠĠĠĠĠĠ ĠstringBuilder . append Line (" Ġ Ġ< tr >") ĊĠĠĠĠĠĠĠ Ġrepeat ( sheet . columns . size ) Ġ{ Ġcol Index Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append Line (" ĠĠĠ Ġ< th >${ sheet . columns [ col Index ]. title }</ th >") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠstringBuilder . append Line (" Ġ Ġ</ tr >") ĊĠĠĠĠĠĠĠ Ġfor Ġ( row Ġin Ġ 1 .. numberOf Rows ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append Line (" Ġ Ġ< tr >") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsheet . columns . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append Line (" ĠĠĠ Ġ< td >${ it . eval ( row )}</ td >") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstringBuilder . append Line (" Ġ Ġ</ tr >") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠstringBuilder . append Line ("</ table >") ĊĠĠĠĠĠĠĠ Ġreturn ĠstringBuilder . toString () ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġspreadsheet ( builder : ĠSp readsheet . () Ġ-> ĠUnit ): ĠSheet Ġ{ ĊĠĠĠ Ġval Ġcolumns Ġ= Ġmutable ListOf < Column >() ĊĠĠĠ Ġvar Ġthe Caption : ĠString Ġ= Ġ"( No Ġcaption Ġprovided )" ĊĠĠĠ Ġobject Ġ: ĠSp readsheet Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcaption ( caption : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthe Caption Ġ= Ġcaption ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcolumn ( title : ĠString , Ġfunction : Ġcolumn Function ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolumns . add ( Column ( title , Ġfunction )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġadd ( column : ĠColumn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolumns . add ( column ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ}. builder () ĊĊĠĠĠ Ġreturn ĠSheet ( columns , Ġthe Caption ) Ċ } Ċ Ċ interface ĠSp readsheet Ġ{ ĊĠĠĠ Ġfun Ġcaption ( caption : ĠString ) ĊĠĠĠ Ġfun Ġcolumn ( title : ĠString , Ġfunction : Ġcolumn Function ) ĊĠĠĠ Ġfun Ġadd ( column : ĠColumn ) Ċ } Ċ Ċ // todo Ġhandle Ġcase Ġwhen Ġi Ġ>= Ġvalues . size () Ċ fun Ġbuild Function Of ( values : ĠArray < Any >): Ġcolumn Function Ġ= Ġ{ Ġi : ĠInt Ġ-> ĊĠĠĠ Ġvalues [ i ] Ċ } Ċ Ċ fun Ġbuild Function Of ( values : ĠCollection < Any >): Ġcolumn Function Ġ= Ġ{ Ġi : ĠInt Ġ-> ĊĠĠĠ Ġvalues . elementAt ( i ) Ċ }