package Ġme lon . transformers Ċ Ċ import Ġme lon . ab stractions . Transformer Ċ import Ġme lon . html . Html Node Ċ import Ġme lon . html . Multi Html Node Ċ import Ġme lon . html . Value Html Node Ċ import Ġme lon . markdown .* Ċ Ċ class ĠMarkdown 2 Html Transformer Ġ: ĠTransformer < Markdown Node , ĠHtml Node > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġtransform ( from : ĠMarkdown Node ): ĠHtml Node Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= Ġmutable ListOf < Html Node >() ĊĊĠĠĠĠĠĠĠ Ġif Ġ( from . children . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġskip Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( md Node Ġin Ġfrom . children ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( skip Ġ> Ġ 0 ) Ġskip -- ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( skip Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( md Node Ġis ĠMarkdown Branch Node ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Node Ġ= Ġtext Line To ( md Node ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p Node . children . isNotEmpty ()) Ġchildren . add ( p Node ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( md Node Ġis ĠMarkdown ListNode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġfrom . children . indexOf ( md Node ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Index Ġ= Ġfrom . children . size Ġ- Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlists Ġ= Ġmutable ListOf < Markdown Node >( md Node ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġindex .. max Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( from . children [ i ] Ġ! is ĠMarkdown ListNode ) Ġbreak ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskip ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlists . add ( from . children [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskip ++ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . add ( Multi Html Node (" p ", ĠlistOf ( list Line To ( lists ) !! ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . add ( Multi Html Node (" p ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠMulti Html Node ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" html ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMulti Html Node ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" body ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchildren ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtext Line To ( text Line Node : ĠMarkdown Node ): ĠMulti Html Node Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠMulti Html Node (" p ") ĊĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġtext Line Node . children ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġis ĠMarkdown Tag Node ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġwhen Ġ( i . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"** " Ġ-> Ġ" b " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ~~ " Ġ-> Ġ" s " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" i " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġtext Line To ( i ). children . toList (). to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( r Ġin Ġres ) Ġr . detach () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode 2 Ġ= ĠMulti Html Node ( tag , Ġres ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . attach ( node 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( i Ġis ĠMarkdown Text Node ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . attach ( Value Html Node ( i . value )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnode ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlist Line To ( lists : ĠList < Markdown Node >): ĠMulti Html Node ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( lists . isEmpty ()) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠMulti Html Node ( if Ġ(( lists . first () Ġas ĠMarkdown ListNode ). value Ġ== Ġ"* ") Ġ" ul " Ġelse Ġ" ol ") ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( list Ġin Ġlists ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġln Text Ġ= ĠValue Html Node ( text Line To ( list . children [ 0 ]). children . join ToString ("")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġli Ġ= ĠMulti Html Node (" li ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġli . attach ( ln Text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list . children [ 1 ]. children . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġli . attach ( list Line To ( list . children [ 1 ]. children ) !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode . attach ( li ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnode ĊĠĠĠ Ġ} Ċ Ċ }