package Ġde . fl ap do od le . stat ik . documents Ċ Ċ import Ġde . fl ap do od le . stat ik . files . ContentType Ċ import Ġde . fl ap do od le . stat ik . files . Reference Ċ import Ġde . fl ap do od le . stat ik . file types . Attributes Ċ import Ġde . fl ap do od le . stat ik . file types . Tom l Ċ import Ġde . fl ap do od le . stat ik . file types . Yaml Ċ import Ġjava . nio . file . Files Ċ import Ġjava . util . regex . Pattern Ċ Ċ object ĠMeta In Head Document From Reference Parser Ġ: ĠDocument From Reference Ġ{ ĊĠĠĠ Ġprivate Ġval ĠTO ML _ START Ġ= ĠPattern . compile (" (? m )( ? d )^ \\ + { 3 }") ĊĠĠĠ Ġprivate Ġval ĠTO ML _ END Ġ= ĠTO ML _ START ĊĠĠĠ Ġprivate Ġval ĠYAML _ START Ġ= ĠPattern . compile (" (? m )( ? d )^ -{ 3 }") ĊĠĠĠ Ġprivate Ġval ĠYAML _ END Ġ= ĠYAML _ START ĊĊĠĠĠ Ġoverride Ġfun Ġread From ( reference : ĠReference ): ĠDocument ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfull Content Ġ= Ġcontent Of ( reference ) ĊĠĠĠĠĠĠĠ Ġval ĠcontentType Ġ= Ġcontent TypeOf ( reference ) ĊĠĠĠĠĠĠĠ Ġif Ġ( contentType Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġattributes And Content Ġ= Ġparse Meta ( full Content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( attributes And Content Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDocument ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference Ġ= Ġreference , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes Ġ= Ġattributes And Content . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType Ġ= ĠcontentType , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġattributes And Content . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Meta ( content : ĠString ): ĠPair < Attributes . Node , ĠString >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Tom l Meta ( content ) Ġ?: Ġparse Yaml Meta ( content ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Tom l Meta ( content : ĠString ): ĠPair < Attributes . Node , ĠString >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmeta And Content Ġ= Ġpartition ( content , ĠTO ML _ START , ĠTO ML _ END ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmeta And Content ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTom l . as Tree ( it . first ) Ġto Ġit . second ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Yaml Meta ( content : ĠString ): ĠPair < Attributes . Node , ĠString >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmeta And Content Ġ= Ġpartition ( content , ĠYAML _ START , ĠYAML _ END ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmeta And Content ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠYaml . as Tree ( it . first ) Ġto Ġit . second ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpartition ( content : ĠString , Ġmeta Start : ĠPattern , Ġmeta End : ĠPattern ): ĠPair < String , ĠString >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġmeta Start . matcher ( content ) ĊĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġmeta End . matcher ( content ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( start . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Of Meta Ġ= Ġstart . end () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( end . find ( start Of Meta )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Of Meta Ġ= Ġend . start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Of Content Ġ= Ġend . end () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontent . substring ( start Of Meta , Ġend Of Meta ) Ġto Ġcontent . substring ( start Of Content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcontent TypeOf ( reference : ĠReference ): ĠContentType ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġreference . path . fileName . toString () ĊĠĠĠĠĠĠĠ Ġval Ġidx Ġ= ĠfileName . lastIndexOf ('.') ĊĠĠĠĠĠĠĠ Ġrequire ( idx Ġ!= Ġ- 1 ) Ġ{ Ġ" file Ġextension Ġmissing : Ġ${ reference . path }" Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= ĠfileName . substring ( idx Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġreturn ĠContentType . of Extension ( extension ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcontent Of ( reference : ĠReference ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( reference ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠReference . File Ġ-> ĠFiles . readString ( reference . path , ĠChar sets . UTF _ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠReference . Sym Link Ġ-> ĠFiles . readString ( reference . destination , ĠChar sets . UTF _ 8 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }