package Ġlt . mark mer kk . j trainer . services Ċ Ċ import Ġcom . vl ad sch . flex mark . ast .* Ċ import Ġcom . vl ad sch . flex mark . html . Html Renderer Ċ import Ġcom . vl ad sch . flex mark . parser . Parser Ċ import Ġlt . mark mer kk . j trainer . entities . Menu Header Ċ import Ġlt . mark mer kk . j trainer . services . utils . Html Relative Link Parser Ċ import Ġorg . apache . commons . io . IO Utils Ċ import Ġorg . springframework . core . io . Class Path Resource Ċ import Ġjava . io . String Writer ĊĊ Ċ /** Ċ Ġ* Ġ@ author Ġm arius mer ke vic ius Ċ Ġ* Ġ@ since Ġ 2 0 1 7 - 0 9 - 2 9 Ċ Ġ*/ Ċ class ĠMD Interactor Impl ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġparser : ĠParser , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġrenderer : ĠHtml Renderer , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġhtml Relative Link Parser : ĠHtml Relative Link Parser Ċ ) Ġ: ĠMD Interactor Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġmd File Exist ( filePath : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresource Ġ= ĠClass Path Resource ("/ $ PATH _ PREFIX /$ filePath . md ") ĊĠĠĠĠĠĠĠ Ġreturn Ġresource . exists () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmd File AsString ( filePath : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresource Ġ= ĠClass Path Resource ("/ $ PATH _ PREFIX /$ filePath . md ") ĊĠĠĠĠĠĠĠ Ġif Ġ(! resource . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresource InputStream Ġ= Ġresource . inputStream ĊĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠString Writer () ĊĠĠĠĠĠĠĠ ĠIO Utils . copy ( resource InputStream , Ġwriter , Ġ" UTF - 8 ") ĊĠĠĠĠĠĠĠ Ġreturn Ġwriter . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmd To Document ( md AsString : ĠString ): ĠDocument Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġparser . parse ( md AsString ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdocument ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdocument To Html ( document : ĠDocument ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdocument AsString Ġ= Ġrenderer . render ( document ) ĊĠĠĠĠĠĠĠ Ġdocument AsString Ġ= Ġhtml Relative Link Parser . sanitize Image Source Paths ( document AsString ) ĊĠĠĠĠĠĠĠ Ġdocument AsString Ġ= Ġhtml Relative Link Parser . sanitize Href Source Paths ( document AsString ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdocument AsString ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġparse Headers With Level ( document : ĠDocument , Ġheader Level : ĠInt ): ĠList < Menu Header > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= Ġmutable ListOf < Menu Header >() ĊĠĠĠĠĠĠĠ Ġval Ġvisitor Ġ= ĠNode Visitor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVisit Handler ( Heading :: class . java , ĠVisitor < Heading > Ġ{ Ġnode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node . level Ġ== Ġheader Level ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMenu Header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . anchor Ref Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . anchor Ref Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġvisitor . visit Children ( document ) ĊĠĠĠĠĠĠĠ Ġreturn Ġheaders ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPATH _ PREFIX Ġ= Ġ" assets " ĊĊĠĠĠ Ġ} Ċ Ċ }