package Ġcom . new ard associ ates . ppt builder . sl idy Ċ Ċ import Ġcom . new ard associ ates . ppt builder . Presentation Ċ import Ġcom . new ard associ ates . ppt builder . Processor Ċ import Ġcom . new ard associ ates . ppt builder . Section Ċ import Ġcom . new ard associ ates . ppt builder . Slide Ċ import Ġcom . vl ad sch . flex mark . ast .* Ċ import Ġcom . vl ad sch . flex mark . util . ast . Node Visitor Ċ import Ġcom . vl ad sch . flex mark . util . ast . Visit Handler Ċ import Ġjava . io . FileWriter Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . time . Instant Ċ import Ġjava . util .* Ċ import Ġjava . util . logging . Logger Ċ Ċ /** Ċ Ġ* ĠDocument ed Ġat Ġhttps :// www . w 3 . org / 2 0 0 5 / 0 3 / slide show . html #( 3 ) Ġ( sort Ġof ; Ġwish Ġthere Ġwas Ġbetter Ġreference Ġdocs ) Ċ Ġ* Ċ Ġ* ĠTODO : ĠCreate Ġa Ġthem atic Ġbackground / color scheme / images Ċ Ġ* ĠTODO : Ġ" templates " Ġ( themes ) Ġwith ĠSl idy Ċ Ġ* ĠTODO : ĠSet Ġup Ġan Ġ" offline " Ġoption Ġfor ĠSl idy ; Ġthis Ġwill Ġwrite Ġall Ġthe Ġfiles Ġneeded Ġinto Ġa Ġlocalized Ġ. zip Ġfile Ġoutput Ċ Ġ*/ Ċ class ĠSl idy Processor ( options : ĠOptions ) Ġ: ĠProcessor ( options ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLogger . getLogger ( Sl idy Processor :: class . java . canonical Name ) ĊĊĠĠĠ Ġvar Ġoutput String Ġ= Ġ"" ĊĊĠĠĠ Ġoverride Ġval Ġprocessor Extension Ġ: ĠString Ġ= Ġ" html " ĊĠĠĠ Ġoverride Ġfun Ġwrite ( output Filename : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠClose Ġit Ġall Ġup ĊĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ"\ n </ body >\ n </ html >" ĊĊĠĠĠĠĠĠĠ Ġlogger . info (" Writing Ġcontents Ġto Ġ${ output Filename } ...") ĊĠĠĠĠĠĠĠ ĠFile Writer ( output Filename ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . write ( output String ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprocess Presentation Node ( presentation : ĠPresentation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" process Presentation Node ") ĊĊĠĠĠĠĠĠĠ Ġfun Ġcontact Info String () Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontact Info Lines Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresentation . contact Info . entries . forEach Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Processing Ġcontact info Ġ$ entry ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry . value . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindent Ġ= Ġ" ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( entry . key ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" web " Ġ-> Ġcontact Info Lines . add ("${ indent } < a Ġtarget =\" _ blank \" Ġhref =\" ${ entry . value }\ ">${ entry . value }</ a >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" blog " Ġ-> Ġcontact Info Lines . add ("${ indent } < a Ġtarget =\" _ blank \" Ġhref =\" ${ entry . value }\ "> Blog : Ġ${ entry . value }</ a >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" email " Ġ-> Ġcontact Info Lines . add ("${ indent } < a Ġhref =\" mailto :${ entry . value }\ ">${ entry . value }</ a >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" twitter " Ġ-> Ġcontact Info Lines . add ("${ indent } < a Ġtarget =\" _ blank \" Ġhref =\" https :// twitter . com /${ entry . value }\ "> Twitter : Ġ${ entry . value }</ a >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" linkedin " Ġ-> Ġcontact Info Lines . add ("${ indent } < a Ġtarget =\" _ blank \" Ġhref =\" https :// www . linkedin . com / in /${ entry . value }/ \"> Linked In : Ġ${ entry . value }</ a >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" github " Ġ-> Ġcontact Info Lines . add ("${ indent } < a Ġtarget =\" _ blank \" Ġhref =\" https :// github . com /${ entry . value }\ "> Github : Ġ${ entry . value }</ a >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontact Info Lines . join ToString ("\ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ""" Ċ < html Ġxmlns =" http :// www . w 3 . org / 1 9 9 9 / xhtml " Ġlang =" en " Ġxml : lang =" en "> ĠĊĠĠĠ Ġ< head > ĊĠĠĠĠĠĠĠ Ġ< title >${ presentation . title . replace ("| ", Ġ" Ġ" )}</ title > ĊĠĠĠĠĠĠĠ Ġ< meta Ġname =" author " Ġcontent ="${ presentation . author }" Ġ/> ĊĠĠĠĠĠĠĠ Ġ< meta Ġname =" copyright " Ġcontent =" Copyright Ġ&# 1 6 9 ; Ġ${ SimpleDateFormat (" yyyy "). format ( Date . from ( Instant . now ())) } Ġ${ if Ġ( presentation . aff iliation . isEmpty ()) Ġpresentation . author Ġelse Ġpresentation . aff iliation }" Ġ/> ĠĊĠĠĠĠĠĠĠ Ġ< meta Ġname =" description " Ġcontent ="${ presentation . abstract }" Ġ/> ĊĠĠĠĠĠĠĠ Ġ< meta Ġname =" keywords " Ġcontent ="${ presentation . keywords . join ToString (",") }" Ġ/> ĊĊĠĠĠĠĠĠĠ Ġ< link Ġrel =" stylesheet " Ġtype =" text / css " Ġmedia =" screen , Ġprojection " Ġhref =" http :// www . w 3 . org / Talk s / Tools / Sl idy / show . css " Ġ/> ĊĠĠĠĠĠĠĠ Ġ< link Ġrel =" stylesheet " Ġtype =" text / css " Ġmedia =" print " Ġhref =" http :// www . w 3 . org / Talk s / Tools / Sl idy / print . css " Ġ/> ĊĊĠĠĠĠĠĠĠ Ġ<!-- ĠTODO : ĠUse Ġcustom Ġstyle sheets Ġ--> ĊĠĠĠĠĠĠĠ Ġ< link Ġrel =" stylesheet " Ġtype =" text / css " Ġmedia =" screen , Ġprojection " Ġhref =" http :// www . w 3 . org / Talk s / Tools / Sl idy / w 3 c - blue . css " Ġ/> ĊĠĠĠĠĠĠĠ Ġ< script Ġsrc =" http :// www . w 3 . org / Talk s / Tools / Sl idy / sl idy . js " Ġtype =" text / javascript "></ script > ĊĠĠĠĠĠĠĠ Ġ< style Ġtype =" text / css "> Ċ pre Ġ{ Ġcolor : Ġrgb ( 2 2 0 , 2 2 0 , 2 2 0 ); Ġfont - family : Ġ" Luc ida ĠConsole ", ĠCour ier , Ġmonospace ; Ġfont - size : Ġ 8 0 %; Ġfont - weight : Ġbold ; Ġline - height : Ġ 1 2 0 %; Ġ} ĊĠĠĠĠĠĠĠ Ġ</ style > ĊĠĠĠ Ġ</ head > ĊĠĠĠĠĊĠĠĠ Ġ< body > ĊĠĠĠĠĠĠĠ Ġ<!-- ĠTODO : ĠReplace Ġthe Ġbackground Ġwith Ġmy Ġown Ġdesign Ġ--> ĊĠĠĠĠĠĠĠ Ġ< div Ġclass =" background "> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ< img Ġid =" head - icon " Ġalt =" graphic Ġwith Ġfour Ġcolored Ġsquares " Ġsrc =" http :// www . w 3 . org / Talk s / Tools / Sl idy / icon - blue . png " Ġalign =" left " Ġ/> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ< object Ġid =" head - logo " Ġtitle =" W 3 C Ġlogo " Ġtype =" image / svg + xml " Ġdata =" http :// www . w 3 . org / Talk s / Tools / Sl idy / w 3 c - logo . svg "> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< img Ġalt =" W 3 C Ġlogo " Ġid =" head - logo - fallback " Ġsrc =" http :// www . w 3 . org / Talk s / Tools / Sl idy / w 3 c - logo - blue . gif " Ġalign =" right "/> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ</ object > ĊĠĠĠĠĠĠĠ Ġ</ div > ĊĠĠĠĠĠĠĠ Ġ< div Ġclass =" slide Ġcover "> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ< img Ġsrc =" http :// www . new ard associ ates . com / assets / img / jav ap olic . jpg " Ġalt =" Cover Ġpage Ġimages " Ġclass =" cover " Ġ/> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ< br Ġclear =" all " Ġ/> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ< h 1 >${ presentation . title . replace ("| ", Ġ"\ n ") }</ h 1 > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ< p > Ċ ${ contact Info String ()} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ</ p > ĊĠĠĠĠĠĠĠ Ġ</ div > ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprocess Section ( section : ĠSection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ""" ĊĠĠĠĠĠĠĠ Ġ< div Ġclass =" slide Ġcover "> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ< img Ġsrc =" http :// www . w 3 . org / Talk s / Tools / Sl idy / keys . jpg " Ġalt =" Cover Ġpage Ġimages Ġ( keys )" Ġclass =" cover " Ġ/> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ< br Ġclear =" all " Ġ/> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ< h 1 >${ section . title }</ h 1 > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ<!-- Ġ< h 2 >${ section . subtitle Ġ?: Ġsection . quote Ġ+ Ġ" Ġ-- " Ġ+ Ġsection . at tribution }</ h 2 > Ġ--> ĊĠĠĠĠĠĠĠ Ġ</ div > ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprocess Content Slide ( slide : ĠSlide ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" Creating Ġcontent Ġslide Ġfor Ġ$ slide ") ĊĊĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ"\ n ĠĠĠĠĠĠĠ Ġ< div Ġclass =\" slide \">\ n ĠĠĠĠĠĠĠĠĠĠĠ Ġ< h 1 >${ slide . title }</ h 1 >\ n " ĊĊĠĠĠĠĠĠĠ Ġval Ġvisitor Ġ= ĠNode Visitor () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġcurrent Ġimplementation Ġmeans Ġthat Ġhead ings Ġcan 't Ġhave Ġanything Ġother ĊĠĠĠĠĠĠĠ Ġ// Ġthan Ġraw Ġtext Ġas Ġchildren -- all Ġformatting Ġwill Ġbe Ġignored ĊĠĠĠĠĠĠĠ Ġvisitor . add Handler ( Visit Handler < Heading >( Heading :: class . java , Ġfun Ġ( head Ġ: ĠHeading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġ< h 2 >${ head . text }</ h 2 >\ n " ĊĠĠĠĠĠĠĠ Ġ})) ĊĊĠĠĠĠĠĠĠ Ġvisitor . add Handler ( Visit Handler < Bullet List >( Bullet List :: class . java , Ġfun Ġ( bl Ġ: ĠBullet List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ"< ul >\ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisitor . visit Children ( bl ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ"</ ul >\ n " ĊĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠĠĠ Ġvisitor . add Handler ( Visit Handler < Order edList >( Order edList :: class . java , Ġfun Ġ( ol Ġ: ĠOrder edList ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ"< ol >\ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisitor . visit Children ( ol ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ"</ ol >\ n " ĊĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠĠĠ Ġvisitor . add Handler ( Visit Handler < ListItem >( ListItem :: class . java , Ġfun Ġ( li Ġ: ĠListItem ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ"< li >" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisitor . visit Children ( li ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ"</ li >\ n " ĊĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠĠĠ Ġvisitor . add Handler ( Visit Handler < Paragraph >( Paragraph :: class . java , Ġfun ( p Ġ: ĠParagraph ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ"< p >\ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisitor . visit Children ( p ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ"</ p >\ n " ĊĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠĠĠ Ġvisitor . add Handler ( Visit Handler < Emp hasis >( Emp hasis :: class . java , Ġfun Ġ( em Ġ: ĠEmp hasis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ"< em >" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisitor . visit Children ( em ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ"</ em >" ĊĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠĠĠ Ġvisitor . add Handler ( Visit Handler < Code >( Code :: class . java , Ġfun Ġ( em Ġ: ĠCode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ"< code >" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisitor . visit Children ( em ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ"</ code >" ĊĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠĠĠ Ġvisitor . add Handler ( Visit Handler < Strong Emp hasis >( Strong Emp hasis :: class . java , Ġfun Ġ( em Ġ: ĠStr ong Emp hasis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ"< strong >" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisitor . visit Children ( em ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ"</ strong >" ĊĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠĠĠ Ġvisitor . add Handler ( Visit Handler < Text >( Text :: class . java , Ġfun Ġ( t Ġ: ĠText ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġt . chars . un escape () ĊĠĠĠĠĠĠĠ Ġ})) ĊĊĠĠĠĠĠĠĠ Ġvisitor . visit ( slide . markdown Body ) ĊĊĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ" ĠĠĠĠĠĠĠ Ġ</ div >\ n " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprocess Legacy Code Slide ( slide : ĠSlide ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" Creating Ġlegacy Ġcode Ġslide Ġfor Ġ$ slide ") ĊĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ"\ n ĠĠĠĠĠĠĠ Ġ< div Ġclass =\" slide \">\ n ĠĠĠĠĠĠĠĠĠĠĠ Ġ< h 1 >${ slide . title }</ h 1 >\ n " ĊĊĠĠĠĠĠĠĠ Ġval Ġchild Nodes Ġ= Ġslide . node . childNodes ĊĠĠĠĠĠĠĠ Ġfor Ġ( n idx Ġin Ġ 0 Ġuntil Ġchild Nodes . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġchild Nodes . item ( n idx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( node . nodeName ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" text " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Handling Ġtext Ġsection : Ġ" Ġ+ Ġnode . textContent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġ< p >${ node . textContent }</ p >" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" code " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Handling Ġcode Ġsection : Ġ" Ġ+ Ġnode . textContent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġ< pre Ġstyle =\" background - color : black \">\ n ${ import Code ( node )}\ n </ pre >" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoutput String Ġ+= Ġ"\ n ĠĠĠĠĠĠĠ Ġ</ div >\ n " ĊĠĠĠ Ġ} Ċ } Ċ