/** Ċ Ġ* Ġ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 . domain . markdown . tag Based . ar che type Ċ Ċ import Ġde . quantum maid . doc um aid . collect ing . structure . Project Ċ import Ġde . quantum maid . doc um aid . domain . markdown . Markdown File Ċ import Ġde . quantum maid . doc um aid . domain . markdown . tag Based . Markdown Replacement Ċ import Ġde . quantum maid . doc um aid . domain . markdown . tag Based . Markdown Tag Handler Ċ 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 . ar che type . Arc he type Directive . Companion . ARCH ET YPE _ TAG Ċ import Ġde . quantum maid . doc um aid . domain . markdown . tag Based . matching . Trailing Markdown Match Result Ċ import Ġde . quantum maid . doc um aid . errors . Verification Error Ċ Ċ class ĠArc he type Markdown Handler Ġ: ĠMarkdown Tag Handler Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġtag (): ĠString Ġ= ĠARCH ET YPE _ TAG . value ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate ( ĊĠĠĠĠĠĠĠ Ġdirective : ĠRaw Markdown Directive , ĊĠĠĠĠĠĠĠ Ġfile : ĠMarkdown File , ĊĠĠĠĠĠĠĠ Ġproject : ĠProject ĊĠĠĠ Ġ): ĠPair < Markdown Replacement ?, ĠList < Verification Error >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġar che type Directive Ġ= ĠArc he type Directive . create ( directive , Ġfile , Ġproject ) ĊĠĠĠĠĠĠĠ Ġval Ġtext To Replace Ġ= Ġar che type Directive . generate Complete Markdown () ĊĠĠĠĠĠĠĠ Ġval Ġ( text ToBe Re placed ) Ġ= Ġtext ToBe Re placed ( directive ) ĊĠĠĠĠĠĠĠ Ġval Ġrange Start Ġ= Ġdirective . range . first ĊĠĠĠĠĠĠĠ Ġval Ġrange End Ġ= Ġrange Start Ġ+ ĠMath . max ( text ToBe Re placed . length , Ġtext To Replace . length ) ĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( Markdown Replacement ( Int Range ( range Start , Ġrange End ), Ġtext ToBe Re placed , Ġtext To Replace ), Ġempty List ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvalidate ( ĊĠĠĠĠĠĠĠ Ġdirective : ĠRaw Markdown Directive , ĊĠĠĠĠĠĠĠ Ġfile : ĠMarkdown File , ĊĠĠĠĠĠĠĠ Ġproject : ĠProject ĊĠĠĠ Ġ): ĠList < Verification Error > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġar che type Directive Ġ= ĠArc he type Directive . create ( directive , Ġfile , Ġproject ) ĊĠĠĠĠĠĠĠ Ġval Ġtext To Replace Ġ= Ġar che type Directive . generate Complete Markdown () ĊĠĠĠĠĠĠĠ Ġval Ġ( text ToBe Re placed , Ġtrailing Markdown Match Result ) Ġ= Ġtext ToBe Re placed ( directive ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( text ToBe Re placed Ġ!= Ġtext To Replace ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrailing Code Found Ġ= Ġtrailing Markdown Match Result . matches ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( trailing Code Found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ" Found Ġ[ ${ tag ()} ] Ġtag Ġwith Ġincorrect Ġar che type Ġcode Ġfor Ġ'${ directive . complete String } '" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Verification Error . create ( message , Ġfile )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ" Found Ġ[ ${ tag ()} ] Ġtag Ġwith Ġmissing Ġar che type Ġcode Ġfor Ġ'${ directive . complete String } '" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Verification Error . create ( message , Ġfile )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtext ToBe Re placed ( directive : ĠRaw Markdown Directive ): ĠPair < String , ĠTr ailing Markdown Match Result > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġremaining Content Ġ= Ġdirective . remaining Markup FileContent ĊĠĠĠĠĠĠĠ Ġval Ġtrailing Markdown Match Result Ġ= ĠArc he type Markdown . startsWith Arc he type Markdown ( remaining Content ) ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġif Ġ( trailing Markdown Match Result . matches ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ directive . complete String }${ trailing Markdown Match Result . content }" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdirective . complete String ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( text , Ġtrailing Markdown Match Result ) ĊĠĠĠ Ġ} Ċ } Ċ