package Ġio . github . voy tech . tab ulate . template Ċ Ċ import Ġio . github . voy tech . tab ulate . api . builder . Table Builder State Ċ import Ġio . github . voy tech . tab ulate . api . builder . dsl . Table Builder Api Ċ import Ġio . github . voy tech . tab ulate . api . builder . dsl . createTable Ċ import Ġio . github . voy tech . tab ulate . model . Column Def Ċ import Ġio . github . voy tech . tab ulate . model . Table Ċ import Ġio . github . voy tech . tab ulate . template . context .* Ċ import Ġio . github . voy tech . tab ulate . template . exception . Export Operations Factory Res olving Exception Ċ import Ġio . github . voy tech . tab ulate . template . exception . Result Provider Res olving Exception Ċ import Ġio . github . voy tech . tab ulate . template . exception . Unknown Tab ulation FormatException Ċ import Ġio . github . voy tech . tab ulate . template . operations .* Ċ import Ġio . github . voy tech . tab ulate . template . resolvers . Row Completion Listener Ċ import Ġio . github . voy tech . tab ulate . template . result . Output Binding Ċ import Ġio . github . voy tech . tab ulate . template . spi . Export Operations Provider Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġ[ Tab ulation Api ] ĠAn ĠAPI Ġenabling Ġinteractive Ġtable Ġexport . Ċ Ġ* ĠAllows Ġto : Ċ Ġ* Ġ- Ġexport Ġeach Ġcollection Ġelement Ġwith Ġ' next Row ' Ġmethod , Ċ Ġ* Ġ- Ġexport Ġall Ġtrailing Ġ( custom Ġtrailing Ġrows Ġlike Ġtable Ġfooter ) Ġand Ġbuffered Ġrecords Ġwith Ġ' finish ' Ġmethod , Ċ Ġ* Ġ- Ġflush Ġrendered Ġdata Ġinto Ġoutput . Ċ Ġ* Ġ@ author ĠWo jc ie ch ĠM Äħ ka Ċ Ġ*/ Ċ interface ĠTab ulation Api < T , ĠO > Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTo Ġbe Ġcalled Ġexplicitly Ġin Ġorder Ġto Ġtrigger Ġnext Ġrow Ġrendering . ĊĠĠĠĠ Ġ* ĠNotice Ġthat Ġrecord Ġused Ġin Ġparameter Ġlist Ġis Ġnot Ġalways Ġthe Ġrecord Ġbeing Ġcurrently Ġrendered . ĠIt Ġis ĊĠĠĠĠ Ġ* Ġfirst Ġbuffered Ġand Ġrendered Ġeventually Ġ- Ġaccording Ġto Ġrow Ġqual ification Ġrules Ġdefined Ġt rough Ġtable ĠDSL Ġapi . ĊĠĠĠĠ Ġ* Ġ@ param Ġrecord Ġ- Ġa Ġrecord Ġfrom Ġsource Ġcollection Ġto Ġbe Ġbuffered , Ġand Ġtransformed Ġinto Ġ[ Row Context With Cells ] Ġat Ġsome Ġpoint Ġof Ġtime . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnext Row ( record : ĠT ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTo Ġbe Ġcalled Ġexplicitly Ġin Ġorder Ġto Ġfinalize Ġrendering . ĊĠĠĠĠ Ġ* ĠIntern ally Ġfinal ization Ġconsists Ġof Ġfollowing Ġsteps : ĊĠĠĠĠ Ġ* Ġ- Ġrendering Ġof Ġall Ġremaining Ġuser Ġdefined Ġand Ġbuffered Ġrows . ĊĠĠĠĠ Ġ* Ġ- Ġrendering Ġof Ġall Ġremaining Ġuser Ġdefined Ġrows Ġto Ġbe Ġrendered Ġafter Ġlast Ġcollection Ġrecord . ĊĠĠĠĠ Ġ* ĠUsed Ġfor Ġrendering Ġof Ġall Ġtrailing Ġrows , Ġafter Ġthere Ġare Ġno Ġrecords Ġin Ġsource Ġcollection . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfinish () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTo Ġbe Ġcalled Ġexplicitly Ġin Ġorder Ġto Ġflush Ġrendered Ġtable Ġinto Ġoutput . ĊĠĠĠĠ Ġ* ĠIntern ally Ġit Ġuses Ġcompatible Ġresult Ġprovider Ġto Ġcopy Ġstate Ġfrom Ġrendering Ġcontext Ġinto Ġoutput . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġflush () Ċ } Ċ Ċ /** Ċ Ġ* ĠAn Ġentry Ġpoint Ġof Ġtable Ġexport . Ċ Ġ* ĠContains Ġentry Ġpoint Ġmethods : Ċ Ġ* Ġ- Ġ[ Tab ulation Template . export ] Ġ- Ġexport Ġcollection Ġof Ġobjects . Ċ Ġ* Ġ- Ġ[ Tab ulation Template . create ] Ġ- Ġcreate Ġ[ Tab ulation Api ] Ġto Ġenable Ġ' interactive ' Ġexport . ĠRemoves Ġrestriction Ġof Ġexporting Ċ Ġ* Ġonly Ġiter ables . ĠG ives Ġfull Ġcontrol Ġon Ġwhen Ġto Ġschedule Ġnext Ġitem Ġfor Ġrendering . Ċ Ġ* ĠAnd Ġconvenience Ġextension Ġmethods : Ċ Ġ* Ġ- Ġ[ Table Builder State . export ] Ġfor Ġexporting Ġuser Ġdefined Ġtable . Ċ Ġ* Ġ- Ġ[ Iterable . tab ulate ] Ġfor Ġtab ulating Ġcollection Ġof Ġelements . ĠMethod Ġis Ġcalled Ġ' tab ulate ' Ġto Ġemp has ize Ċ Ġ* Ġits Ġsole Ġrole Ġ- Ġconstructing Ġtables Ġfrom Ġfrom Ġvarious Ġobjects . Ċ Ġ* Ġ@ author ĠWo jc ie ch ĠM Äħ ka Ċ Ġ*/ Ċ class ĠTab ulation Template < T >( private Ġval Ġformat : ĠTab ulation Format ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġprovider : ĠExport Operations Provider < Rendering Context > Ġby Ġlazy Ġ{ Ġresolve Export Operations Factory ( format ) Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġops : ĠAt tribut ed Context Export Operations < Rendering Context > Ġby Ġlazy Ġ{ Ġprovider . create Export Operations () Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġoutput Bindings : ĠList < Output Binding < Rendering Context , Ġ* >> Ġby Ġlazy Ġ{ Ġprovider . create Output Bindings () Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠTab ulation Api Impl < O >( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġstate : ĠTab ulation State < T >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġoutput : ĠO ĊĠĠĠ Ġ) Ġ: ĠTab ulation Api < T , ĠO > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġoutput Binding : ĠOutput Binding < Rendering Context , ĠO > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Output Binding ( output ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Binding . setOutput ( state . rendering Context , Ġoutput ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġops . createTable ( state . rendering Context , Ġstate . table Model . create Context ( state . get Custom Attributes ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Columns ( state , ĠColumn Render Phase . BEFORE _ FIRST _ ROW ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnext Row ( record : ĠT ) Ġ= Ġcapture Record And Render Row ( state , Ġrecord ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfinish () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Remaining Buffered Rows ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Columns ( state , ĠColumn Render Phase . AFTER _ LAST _ ROW ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġflush () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Binding . flush () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠRow Completion Listener Impl ( private Ġval Ġrendering Context : ĠRendering Context ) Ġ: ĊĠĠĠĠĠĠĠ ĠRow Completion Listener < T > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Attribut ed Row Resolved ( row : ĠAt tribut ed Row ) Ġ= Ġops . begin Row ( rendering Context , Ġrow ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Attribut ed Cell Resolved ( cell : ĠAt tribut ed Cell ) Ġ= Ġops . render Row Cell ( rendering Context , Ġcell ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Attribut ed Row Resolved ( row : ĠAt tribut ed Row With Cells < T >) Ġ= Ġops . end Row ( rendering Context , Ġrow ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmaterial ize ( table : ĠTable < T >): ĠTab ulation State < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprovider . create Rendering Context (). let Ġ{ Ġrendering Context Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTab ulation State ( rendering Context , Ġtable , ĠRow Completion Listener Impl ( rendering Context )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġprivate Ġfun Ġresolve Export Operations Factory ( format : ĠTab ulation Format ): ĠExport Operations Provider < Rendering Context > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠService Loader . load ( Export Operations Provider :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance < Export Operations Provider < Rendering Context >> (). find Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( format . provider . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat . id Ġ== Ġit . supports Format (). id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat Ġ== Ġit . supports Format () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠExport Operations Factory Res olving Exception () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġprivate Ġfun Ġ< O > Ġresolve Output Binding ( output : ĠO ): ĠOutput Binding < Rendering Context , ĠO > Ġ= ĊĠĠĠĠĠĠĠ Ġoutput Bindings . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . output Class (). isAssignableFrom ( output !! :: class . java ) ĊĠĠĠĠĠĠĠ Ġ}. map Ġ{ Ġit Ġas ĠOutput Binding < Rendering Context , ĠO > Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () Ġ?: Ġthrow ĠResult Provider Res olving Exception () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPerforms Ġactual Ġexport . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsource Ġiterable Ġcollection Ġof Ġobjects ĊĠĠĠĠ Ġ* Ġ@ param Ġoutput Ġan Ġoutput Ġbinding . ĊĠĠĠĠ Ġ* Ġ@ param Ġtable Ġ[ Table ] Ġa Ġtop Ġlevel Ġtable Ġmodel Ġwhich Ġdefines Ġtable Ġappearance . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< O > Ġexport ( ĊĠĠĠĠĠĠĠ Ġsource : ĠIterable < T >, ĊĠĠĠĠĠĠĠ Ġoutput : ĠO , ĊĠĠĠĠĠĠĠ Ġtable : ĠTable < T >, ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate ( output , Ġtable ). let Ġ{ Ġapi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource . forEach Ġ{ Ġapi . next Row ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġapi . finish () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġapi . flush () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġ[ Tab ulation Api ] Ġwhich Ġenables Ġ' interactive ' Ġexport . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġoutput Ġoutput Ġbinding . ĊĠĠĠĠ Ġ* Ġ@ param Ġtable Ġa Ġtop Ġlevel Ġtable Ġmodel Ġwhich Ġdefines Ġtable Ġappearance . ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Tab ulation Api ] Ġwhich Ġenables Ġ' interactive ' Ġexport . ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġfun Ġ< O > Ġcreate ( output : ĠO , Ġtable : ĠTable < T >): ĠTab ulation Api < T , ĠO > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTab ulation Api Impl ( material ize ( table ), Ġoutput ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġcapture Record And Render Row ( state : ĠTab ulation State < T >, Ġrecord : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstate . capture ( record ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrender Remaining Buffered Rows ( state : ĠTab ulation State < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" Control Flow With Empty Body ") ĊĠĠĠĠĠĠĠ Ġwhile Ġ( state . next () Ġ!= Ġnull ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrender Columns ( state : ĠTab ulation State < T >, Ġrender Phase : ĠColumn Render Phase ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtable Model . columns . forEach Ġ{ Ġcolumn : ĠColumn Def < T > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġops . render Column ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrendering Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtable Model . create Attribut ed Column ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Phase , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . get Custom Attributes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ fun Ġ< T , ĠO > ĠTab ulation Template < T >. export ( source : ĠIterable < T >, Ġoutput : ĠO , Ġblock : ĠTable Builder Api < T >. () Ġ-> ĠUnit ) Ġ= ĊĠĠĠ Ġexport ( source , Ġoutput , Ġcreate Table ( block )) Ċ Ċ fun Ġ< T , O > ĠTable < T >. export ( format : ĠTab ulation Format , Ġoutput : ĠO ) Ġ{ ĊĠĠĠ ĠTab ulation Template < T >( format ). export ( emptyList (), Ġoutput , Ġthis ) Ċ } Ċ Ċ /** Ċ Ġ* ĠExtension Ġfunction Ġinvoked Ġon Ġa Ġ[ Table Builder State ], Ġwhich Ġtakes Ġ[ Tab ulation Format ] Ġand Ġoutput Ġhandler Ċ Ġ* Ċ Ġ* Ġ@ param Ġformat Ġidentifier Ġof Ġ[ Export Operations Provider ] Ġto Ġexport Ġtable Ġto Ġspecific Ġfile Ġformat Ġ( xlsx , Ġpdf ). Ċ Ġ* Ġ@ param Ġoutput Ġoutput Ġbinding Ġ- Ġmay Ġbe Ġe . g . ĠOutputStream . Ċ Ġ* Ġ@ receiver Ġtop Ġlevel ĠDSL Ġtable Ġbuilder . Ċ Ġ*/ Ċ fun Ġ< T , ĠO > Ġ( Table Builder Api < T >. () Ġ-> ĠUnit ). export ( format : ĠTab ulation Format , Ġoutput : ĠO ) Ġ{ ĊĠĠĠ Ġcreate Table ( this ). export ( format , Ġoutput ) Ċ } Ċ Ċ fun ĠFile . tab ulation Format ( provider : ĠString ? Ġ= Ġnull ) Ġ= ĊĠĠĠ Ġif Ġ( extension . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠ ĠTab ulation Format ( extension , Ġprovider ) ĊĠĠĠ Ġ} Ġelse Ġthrow ĠUnknown Tab ulation FormatException () Ċ Ċ /** Ċ Ġ* ĠExtension Ġfunction Ġinvoked Ġon Ġa Ġ[ Table Builder State ], Ġwhich Ġtakes Ġoutput Ġ[ file ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġfile ĠA Ġ[ File ]. Ċ Ġ* Ġ@ receiver Ġtop Ġlevel ĠDSL Ġtable Ġbuilder . Ċ Ġ*/ Ċ fun Ġ< T > Ġ( Table Builder Api < T >. () Ġ-> ĠUnit ). export ( file : ĠFile ) Ġ{ ĊĠĠĠ Ġfile . tab ulation Format (). let Ġ{ Ġformat Ġ-> ĊĠĠĠĠĠĠĠ ĠFileOutputStream ( file ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTab ulation Template < T >( format ). export ( emptyList (), Ġit , Ġcreate Table ( this )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠExtension Ġfunction Ġinvoked Ġon Ġa Ġ[ Table Builder State ], Ġwhich Ġtakes Ġ[ fileName ]. Ċ Ġ* Ċ Ġ* Ġ@ param ĠfileName ĠA Ġpath Ġof Ġan Ġoutput Ġfile . Ċ Ġ* Ġ@ receiver Ġtop Ġlevel ĠDSL Ġtable Ġbuilder . Ċ Ġ*/ Ċ fun Ġ< T > Ġ( Table Builder Api < T >. () Ġ-> ĠUnit ). export ( fileName : ĠString ) Ġ= Ġexport ( File ( fileName )) Ċ Ċ /** Ċ Ġ* ĠExtension Ġfunction Ġinvoked Ġon Ġa Ġcollection , Ġwhich Ġtakes Ġ[ Tab ulation Format ], Ġoutput Ġhandler Ġand ĠDSL Ġtable Ġbuilder Ġto Ġdefine Ġtable Ġappearance . Ċ Ġ* Ċ Ġ* Ġ@ param Ġformat Ġexplicit Ġidentifier Ġof Ġ[ Export Operations Provider ] Ġto Ġbe Ġused Ġin Ġorder Ġto Ġexport Ġtable Ġto Ġspecific Ġfile Ġformat Ġ( xlsx , Ġpdf ). Ċ Ġ* Ġ@ param Ġoutput Ġreference Ġto Ġany Ġkind Ġof Ġoutput Ġor Ġsink Ġ- Ġmay Ġbe Ġe . g . ĠOutputStream . Ċ Ġ* Ġ@ param Ġblock Ġ[ Table Builder Api ] Ġa Ġtop Ġlevel Ġtable ĠDSL Ġbuilder Ġwhich Ġdefines Ġtable Ġappearance . Ċ Ġ* Ġ@ receiver Ġcollection Ġof Ġrecords Ġto Ġbe Ġrendered Ġinto Ġfile . Ċ Ġ*/ Ċ fun Ġ< T , ĠO > ĠIterable < T >. tab ulate ( format : ĠTab ulation Format , Ġoutput : ĠO , Ġblock : ĠTable Builder Api < T >. () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠTab ulation Template < T >( format ). export ( this , Ġoutput , Ġcreate Table ( block )) Ċ } Ċ Ċ /** Ċ Ġ* ĠExtension Ġfunction Ġinvoked Ġon Ġa Ġcollection Ġof Ġrecords , Ġwhich Ġtakes Ġ[ File ] Ġas Ġargument Ġand ĠDSL Ġtable Ġbuilder Ġto Ġdefine Ġtable Ġappearance . Ċ Ġ* Ċ Ġ* Ġ@ param Ġfile Ġa Ġfile Ġname Ġto Ġcreate . Ċ Ġ* Ġ@ param Ġblock Ġ[ Table Builder Api ] Ġa Ġtop Ġlevel Ġtable ĠDSL Ġbuilder Ġwhich Ġdefines Ġtable Ġappearance . Ċ Ġ* Ġ@ receiver Ġcollection Ġof Ġrecords Ġto Ġbe Ġrendered Ġinto Ġfile . Ċ Ġ*/ Ċ fun Ġ< T > ĠIterable < T >. tab ulate ( file : ĠFile , Ġblock : ĠTable Builder Api < T >. () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġfile . tab ulation Format (). let Ġ{ Ġformat Ġ-> ĊĠĠĠĠĠĠĠ ĠFileOutputStream ( file ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTab ulation Template < T >( format ). export ( this , Ġit , Ġcreate Table ( block )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠExtension Ġfunction Ġinvoked Ġon Ġa Ġcollection Ġof Ġrecords , Ġwhich Ġtakes Ġ[ fileName ] Ġas Ġargument Ġand ĠDSL Ġtable Ġbuilder Ġto Ġdefine Ġtable Ġappearance . Ċ Ġ* Ċ Ġ* Ġ@ param ĠfileName Ġa Ġfile Ġname Ġto Ġcreate . Ċ Ġ* Ġ@ param Ġblock Ġ[ Table Builder Api ] Ġa Ġtop Ġlevel Ġtable ĠDSL Ġbuilder Ġwhich Ġdefines Ġtable Ġappearance . Ċ Ġ* Ġ@ receiver Ġcollection Ġof Ġrecords Ġto Ġbe Ġrendered Ġinto Ġfile . Ċ Ġ*/ Ċ fun Ġ< T > ĠIterable < T >. tab ulate ( fileName : ĠString , Ġblock : ĠTable Builder Api < T >. () Ġ-> ĠUnit ) Ġ= Ġtab ulate ( File ( fileName ), Ġblock )