package Ġtop . nt ut n Ċ Ċ import Ġorg . apache . commons . io . FileUtils Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . io . File Ċ import Ġjava . lang . Exception Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġ çĽ´æİ¥ è¯» åĨĻ md æĸĩä»¶ å¼Ģ å¤´ çļĦ éħįç½® Ċ Ġ* Ġåı¯ å¯¹ å±ŀæĢ§ åĢ¼ çĽ´æİ¥ èµĭåĢ¼ ï¼Į ä½Ĩ åıªæľī save Back æĹ¶ å®ĥä»¬ æīį ä¼ļ è¢« åĨĻåħ¥ æĸĩä»¶ Ċ Ġ* Ġ åıªæľī refresh æĹ¶ å®ĥä»¬ æīį ä¼ļ åĩºçİ° åľ¨ hash map ä¸Ń Ċ Ġ*/ Ċ class ĠMd With ConfigParser ( val Ġmd File : ĠFile , Ġrender Summary : ĠBoolean Ġ= Ġtrue , Ġrender Content : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlogger Ġby Ġlazy Ġ{ ĠLoggerFactory . getLogger ( this :: class . java ) Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġconfig String : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsummary String : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontent Without Summary String : ĠString ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ md : ĠString ĊĠĠĠ Ġval Ġmd ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ md ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ html : ĠString ĊĠĠĠ Ġval Ġhtml ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ html ĊĊĠĠĠ Ġlateinit Ġvar Ġtitle : ĠString ĊĠĠĠ Ġlateinit Ġvar Ġauthor : ĠString ĊĠĠĠ Ġlateinit Ġvar Ġtags : ĠList < String > ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ summary : ĠString ĊĊĠĠĠ Ġ// Ġsummary æĹłæ³ķ ä»İ è¿ĻéĩĮ ç¼ĸè¾ĳ ï¼Į åıªèĥ½ ç¼ĸè¾ĳ markdown æºĲ æĸĩä»¶ ĊĠĠĠ Ġval Ġsummary ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ summary ĊĊĠĠĠ Ġlateinit Ġvar Ġpublish Date : ĠDate ĊĠĠĠ Ġlateinit Ġvar Ġedit Date : ĠDate ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ attributes : ĠMap < String , ĠString > ĊĠĠĠ Ġval Ġattributes ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ attributes ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġread Config ( render Summary , Ġrender Content ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsplit Article ( source : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig String Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġsummary String Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġcontent Without Summary String Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġis Config Ap pe ared Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġis Summary Ap pe ared Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġfor Ġ( line Ġin Ġsource . lines ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Summary Ap pe ared ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Without Summary String Ġ= Ġ"$ content Without Summary String \ n $ line " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Config Ap pe ared ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line . trim () Ġ== Ġsummary Spl iterator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Summary Ap pe ared Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsummary String Ġ= Ġ"$ summary String \ n $ line " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line . trim () Ġ== Ġconfig Spl iterator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Config Ap pe ared Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig String Ġ= Ġ"$ config String \ n $ line " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġæ ² ¡ æľī summary åĴĮ config åĪĨ çķĮ ï¼Į åĪĻ è®¤ä¸º åħ¨ æĸĩ éĥ½æĺ¯ summary ĊĠĠĠĠĠĠĠĠ Ġ* Ġ ä»ħ æ²¡æľī summary åĪĨ çķĮ ç¬¦ ï¼Į åĪĻ è®¤ä¸º åħ¨ æĸĩ éĥ½æĺ¯ config åĴĮ summary ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġif (! is Summary Ap pe ared && ! is Config Ap pe ared ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsummary String = config String ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig String ="" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Without Summary String ="" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread Config ( render Summary : ĠBoolean Ġ= Ġtrue , Ġrender Content : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ md Ġ= ĠFileUtils . readFile ToString ( md File , Ġmd Charset ) ĊĠĠĠĠĠĠĠ Ġsplit Article (_ md ) ĊĊĠĠĠĠĠĠĠ Ġ_ summary Ġ= Ġif Ġ( render Summary ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMd To HTML Util . render ( summary String ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsummary String ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ_ html Ġ= Ġif Ġ( render Content ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMd To HTML Util . render ("$ summary String \ n $ content Without Summary String ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmd ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconfig String . lines (). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarray Ġ= Ġit . split (': ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray . getOrElse ( 0 ) Ġ{ Ġ"" Ġ}. trim () Ġto Ġarray . getOrElse ( 1 ) Ġ{ Ġ"" Ġ}. trim () ĊĠĠĠĠĠĠĠ Ġ}. toMap (). let Ġ{ Ġmap Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ attributes Ġ= Ġmap . plus (" md " Ġto Ġ_ md ). plus (" summary " Ġto Ġ_ summary ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġmap [" title "] Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Ġ= Ġmap [" author "] Ġ?: ĠConfig Util . site Attributes [" default Author "] Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublish Date Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdateFormat . parse ( map [" publish Date "]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Date Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdateFormat . parse ( map [" edit Date "]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ= Ġmap [" tags "] ?. remove Prefix ("[ ") ?. remove Suffix (" ]") ?. split (',') ?. map Ġ{ Ġit . trim () Ġ} Ġ?: ĠlistOf () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ_ attributes Ġ= Ġ_ attributes . plus (" md " Ġto Ġ_ md ). plus (" html " Ġto Ġ_ html ). plus (" summary " Ġto Ġ_ summary ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrefresh ( render Summary : ĠBoolean Ġ= Ġtrue , Ġrender Content : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġread Config ( render Summary , Ġrender Content ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Back () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġstring Config Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" title " Ġto Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" author " Ġto Ġauthor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" publish Date " Ġto ĠdateFormat . format ( publish Date ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" edit Date " Ġto ĠdateFormat . format ( edit Date ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" tags " Ġto Ġtags ĊĠĠĠĠĠĠĠ Ġ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . component 1 () Ġ+ Ġ": Ġ" Ġ+ Ġit . component 2 () Ġ+ Ġ"\ n " ĊĠĠĠĠĠĠĠ Ġ}. forEach Ġ{ Ġstring Config Ġ+= Ġit Ġ} ĊĊĠĠĠĠĠĠĠ ĠFileUtils . writeString ToFile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmd File , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ string Config \ n $ config Spl iterator \ n $ summary String \ n $ summary Spl iterator \ n $ content Without Summary String ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmd Charset ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġéħįç½® åĮºåŁŁ ä¸İ summary åĮºåŁŁ çļĦ åĪĨ éļĶ ç¬¦ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġconfig Spl iterator Ġ= Ġ" <!-- config --> " ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġsummary åĮºåŁŁ ä¸İ åī © ä½Ļ æŃ£ æĸĩ çļĦ åĪĨ éļĶ ç¬¦ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġsummary Spl iterator Ġ= Ġ" <!-- summary --> " ĊĠĠĠĠĠĠĠ Ġval ĠdateFormat Ġ= ĠSimpleDateFormat (" yyyy - MM - dd ") ĊĠĠĠĠĠĠĠ Ġval Ġmd Charset Ġ= Ġcharset (" UTF - 8 ") ĊĠĠĠ Ġ} Ċ }