/** Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠRichard ĠH aus wal d Ġ- Ġhttps :// quantum maid . de /. Ċ Ġ* Ċ Ġ* ĠLicensed Ġto Ġthe ĠApache ĠSoftware ĠFoundation Ġ( ASF ) Ġunder Ġone Ċ Ġ* Ġor Ġmore Ġcontributor Ġlicense Ġagreements . Ġ ĠSee Ġthe ĠNOTICE Ġfile Ċ Ġ* Ġdistributed Ġwith Ġthis Ġwork Ġfor Ġadditional Ġinformation Ċ Ġ* Ġregarding Ġcopyright Ġownership . Ġ ĠThe ĠASF Ġlicenses Ġthis Ġfile Ċ Ġ* Ġto Ġyou Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ċ Ġ* Ġ" License "); Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ċ Ġ* Ġwith Ġthe ĠLicense . Ġ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ċ Ġ* Ġsoftware Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ċ Ġ* Ġ" AS ĠIS " ĠBASIS , ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY Ċ Ġ* ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ġ ĠSee Ġthe ĠLicense Ġfor Ġthe Ċ Ġ* Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ġlimitations Ċ Ġ* Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġde . quantum maid . doc um aid . pre paring . table Of Contents Ċ Ċ import Ġde . quantum maid . doc um aid . collect ing . structure . Directory Ċ import Ġde . quantum maid . doc um aid . collect ing . structure . Project Ċ import Ġde . quantum maid . doc um aid . collect ing . structure . Project File Ċ import Ġde . quantum maid . doc um aid . domain . markdown . Markdown File Ċ import Ġde . quantum maid . doc um aid . domain . markdown . tag Based . Raw Markdown Directive Ċ import Ġde . quantum maid . doc um aid . domain . markdown . tag Based . table Of Contents . Github Table Of Contents Markdown Tag Handler Ċ import Ġde . quantum maid . doc um aid . domain . markdown . tag Based . table Of Contents . Table Of Contents Directive Ċ import Ġde . quantum maid . doc um aid . domain . markdown . tag Based . table Of Contents . Table Of Contents Directive . Companion . TOC _ TAG Ċ import Ġde . quantum maid . doc um aid . domain . table Of Contents . Table Of Contents Ċ import Ġde . quantum maid . doc um aid . domain . table Of Contents . Table Of Contents Creator Ċ import Ġde . quantum maid . doc um aid . domain . table Of Contents . T oc Traversal Decision Ċ import Ġde . quantum maid . doc um aid . errors . Verification Error Ċ import Ġde . quantum maid . doc um aid . pre paring . Pre paring Visitor Ċ import Ġde . quantum maid . doc um aid . pre paring . table Of Contents . Table Of Contents Lookup Data . Companion . TOC _ LOOK UP _ KEY Ċ Ċ class ĠTable Of Contents Pre par er Ġ: ĠPre paring Visitor Ġ{ ĊĠĠĠ Ġprivate Ġval Ġtable Of Contents Lookup Data Ġ= ĠTable Of Contents Lookup Data () ĊĊĠĠĠ Ġoverride Ġfun Ġstart Pre paration ( project : ĠProject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . set Information ( TOC _ LOOK UP _ KEY , Ġtable Of Contents Lookup Data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprepare File ( file : ĠProject File , Ġproject : ĠProject ): ĠList < Verification Error > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( file Ġis ĠMarkdown File ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoc Directives Ġ= Ġfile . markdown Directives With Identifier ( TOC _ TAG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoc Directives . isEmpty () Ġ-> Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoc Directives . size Ġ== Ġ 1 Ġ-> Ġprepare T oc ( toc Directives [ 0 ], Ġfile , Ġproject ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ" [$ TOC _ TAG ] ĠFound Ġmultiple ĠTable Ġof Ġcontents Ġin Ġa Ġsingle Ġfile Ġ${ file . absolute Path () }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Verification Error . create ( message , Ġfile )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare T oc ( ĊĠĠĠĠĠĠĠ Ġdirective : ĠRaw Markdown Directive , ĊĠĠĠĠĠĠĠ Ġfile : ĠMarkdown File , ĊĠĠĠĠĠĠĠ Ġproject : ĠProject ĊĠĠĠ Ġ): ĠList < Verification Error > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( table Of Contents Lookup Data . table Of Contents Available ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ" [$ TOC _ TAG ] Ġcannot Ġgenerate ĠTable Ġof ĠContents Ġfor Ġfile Ġ'${ file . absolute Path ()}, Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" because Ġone Ġhas Ġalready Ġbeen Ġcreated " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġverification Error Ġ= ĠVerification Error . create ( message , Ġfile ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( verification Error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġ( table Of Contents , Ġerrors ) Ġ= Ġgenerate T oc ( directive , Ġfile , Ġproject ) ĊĠĠĠĠĠĠĠ Ġif Ġ( errors . isNotEmpty () Ġ|| Ġtable Of Contents Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġerrors ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtable Of Contents Lookup Data . register Table Of Contents ( table Of Contents ) ĊĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate T oc ( ĊĠĠĠĠĠĠĠ Ġdirective : ĠRaw Markdown Directive , ĊĠĠĠĠĠĠĠ Ġfile : ĠMarkdown File , ĊĠĠĠĠĠĠĠ Ġproject : ĠProject ĊĠĠĠ Ġ): ĠPair < Table Of Contents ?, ĠList < Verification Error >> Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable Of Contents Directive Ġ= ĠTable Of Contents Directive . create ( directive , Ġfile , Ġproject ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtraversal Decision Ġ= Ġobject Ġ: ĠT oc Traversal Decision Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdirectory ShouldBe Tra versed ( directory : ĠDirectory ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġdirectory . absolute Path (). fileName . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGithub Table Of Contents Markdown Tag Handler . INDEX _ MARK DOWN _ FILE _ NAME _ PATTERN . matches ( fileName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtable Of Contents Collector Ġ= ĠTable Of Contents Creator ( traversal Decision ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtable Of Contents Collector . createFrom ( table Of Contents Directive , Ġfile ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPair ( null , ĠlistOf ( Verification Error . createFrom Exception ( e , Ġfile ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ