package Ġhelper Ċ Ċ import Ġcom . fasterxml . jackson . annotation . JsonInclude Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . data format . yaml . YAML Factory Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġcom . fasterxml . jackson . module . kotlin . register Kotlin Module Ċ import Ġcom . mit che ll bose ck e . pe bble . P eb ble Engine Ċ import Ġcom . mit che ll bose ck e . pe bble . loader . Classpath Loader Ċ import Ġcom . mit che ll bose ck e . pe bble . loader . Delegating Loader Ċ import Ġcom . mit che ll bose ck e . pe bble . loader . File Loader Ċ import Ġcom . mit che ll bose ck e . pe bble . loader . String Loader Ċ import Ġorg . apache . commons . lang 3 . Boolean Utils Ċ import Ġorg . yaml . s na key aml . Yaml Ċ import Ġjava . io . Reader Ċ import Ġjava . io . String Reader Ċ import Ġjava . io . String Writer Ċ Ċ /** Ċ Ġ* ĠUtility Ġfunctions Ġto Ġmanipulate ĠYAML Ġobjects Ġand Ġarrays Ċ Ġ* Ġ@ author ĠM ic hel ĠK ra em er Ċ Ġ*/ Ċ object ĠYaml Utils Ġ{ ĊĠ Ġval Ġmapper : ĠObjectMapper Ġ= ĠObjectMapper ( YAML Factory ()) ĊĠĠĠĠĠ Ġ. register Kotlin Module () ĊĠĠĠĠĠ Ġ. set Serialization In clusion ( JsonInclude . Include . NON _ NULL ) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠConvenience Ġmethod Ġcalling Ġ[ ObjectMapper . readValue ] ĊĠĠ Ġ*/ ĊĠ Ġinline Ġfun Ġ< re ified ĠT > Ġread Value ( content : ĠString ) Ġ= Ġmapper . readValue < T >( content ) Ċ } Ċ Ċ /** Ċ Ġ* ĠParse Ġa Ġ[ yaml ] Ġstring Ġto Ġan Ġobject Ġbut Ġfirst Ġapply Ġa Ġtemplate Ġengine Ġwith Ċ Ġ* Ġthe Ġgiven Ġ[ context ] Ġif Ġnecessary . ĠThe Ġtemplate Ġengine Ġwill Ġonly Ġbe Ġapplied Ċ Ġ* Ġif Ġthe Ġgiven ĠYAML Ġstring Ġcontains Ġfront Ġmatter Ġwhere Ġthe Ġattribute Ċ Ġ* Ġ` template ` Ġis Ġset Ġto Ġone Ġof Ġ` true `, Ġ` yes `, Ġ` on `, Ġ` y `, Ġor Ġ` t `. ĠOtherwise , Ġthe Ċ Ġ* Ġstring Ġwill Ġbe Ġparsed Ġas Ġis . Ċ Ġ* Ċ Ġ* ĠExample Ġwith Ġtemplate Ġengine Ġenabled : Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġ--- Ċ Ġ* ĠĠĠĠ Ġtemplate : Ġtrue Ċ Ġ* ĠĠĠĠ Ġ--- Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġperson : Ċ Ġ* ĠĠĠĠĠĠ Ġname : Ġ{{ Ġname Ġ}} Ċ Ġ*/ Ċ fun Ġ< T > ĠYaml . load Template ( yaml : ĠString , Ġcontext : ĠMap < String , ĠAny >): ĠT Ġ{ ĊĠ Ġ// Ġtry Ġto Ġextract Ġfront Ġmatter ĊĠ Ġval Ġfront Mat ter Regex Ġ= Ġ""" \ s *^ [- ]{ 3 , }\ R (.* )\ R ^ [- ]{ 3 , }( .* )$ """. to Regex ( ĊĠĠĠ Ġset Of ( Regex Option . MULT IL INE , ĠRegex Option . DOT _ MATCH ES _ ALL )) ĊĊĠ Ġval Ġmr Ġ= Ġfront Mat ter Regex . match Ent ire ( yaml ) ĊĠ Ġval Ġstr To Parse Ġ= Ġif Ġ( mr Ġ!= Ġnull ) Ġ{ ĊĠĠĠ Ġ// Ġparse Ġfront Ġmatter ĊĠĠĠ Ġval Ġfront Mat ter Ġ= Ġload < Map < String , ĠAny >>( mr . groups [ 1 ] !!. value ) ĊĠĠĠ Ġval Ġremainder Ġ= Ġmr . groups [ 2 ] !!. value ĊĊĠĠĠ Ġif Ġ( Boolean Utils . to Boolean ( front Mat ter [" template "] ?. toString ())) Ġ{ ĊĠĠĠĠĠ Ġ// Ġapply Ġtemplate Ġengine Ġto Ġyaml Ġstring ĊĠĠĠĠĠ Ġval Ġroot Template Name Ġ= Ġ"__ root __ " ĊĠĠĠĠĠ Ġval Ġloader Ġ= ĠDeleg ating Loader ( listOf ( object Ġ: ĠString Loader () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Reader ( template Name : ĠString ): ĠReader ? Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( template Name Ġ=== Ġroot Template Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠString Reader ( remainder ) ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}, ĠClass path Loader (), ĠFile Loader ())) ĊĊĠĠĠĠĠ Ġval Ġengine Ġ= ĠP eb ble Engine . Builder () ĊĠĠĠĠĠĠĠ Ġ. strict Variables ( true ) ĊĠĠĠĠĠĠĠ Ġ. new Line Tri mm ing ( false ) ĊĠĠĠĠĠĠĠ Ġ. loader ( loader ) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠ Ġval Ġcompiled Template Ġ= Ġengine . get Template ( root Template Name ) ĊĠĠĠĠĠ Ġval Ġwriter Ġ= ĠString Writer () ĊĠĠĠĠĠ Ġcompiled Template . evaluate ( writer , Ġcontext ) ĊĊĠĠĠĠĠ Ġwriter . toString () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġremainder ĊĠĠĠ Ġ} ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġyaml ĊĠ Ġ} ĊĊĠ Ġreturn Ġload ( str To Parse ) Ċ } Ċ