package Ġcom . so y wiz . k orte Ċ Ċ import Ġcom . so y wiz . k orte . internal .* Ċ Ċ var ĠTemplate Config . debug Println Ġby Ġextra Property ({ Ġextra Ġ}) Ġ{ Ġ{ Ġv : ĠAny ? Ġ-> Ġprintln ( v ) Ġ} Ġ} Ċ Ċ object ĠDefault Blocks Ġ{ ĊĠĠĠ Ġdata Ġclass ĠBlock Block ( val Ġname : ĠString ) Ġ: ĠBlock Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġeval ( context : ĠTemplate . Eval Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġold Block Ġ= Ġcontext . current Block ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// try Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĉ val Ġblock Ġ= Ġcontext . leaf Template . getBlock ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĉ context . current Block Ġ= Ġblock ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĉ block . block . eval ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ//} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĉ context . current Block Ġ= Ġold Block ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ//} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . leaf Template . getBlock ( name ). eval ( context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠBlock Capture ( val Ġvar name : ĠString , Ġval Ġcontent : ĠBlock ) Ġ: ĠBlock Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġeval ( context : ĠTemplate . Eval Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcontext . capture Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . eval ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . scope . set ( varname , ĠRaw String ( result )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠBlock Debug ( val Ġexpr : ĠExpr Node ) Ġ: ĠBlock Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġeval ( context : ĠTemplate . Eval Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . config . debug Println ( expr . eval ( context )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠBlock Expr ( val Ġexpr : ĠExpr Node ) Ġ: ĠBlock Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġeval ( context : ĠTemplate . Eval Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . write ( expr . eval ( context ). to Esc aped String ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠBlock Ext ends ( val Ġexpr : ĠExpr Node ) Ġ: ĠBlock Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġeval ( context : ĠTemplate . Eval Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġexpr . eval ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Template Ġ= ĠTemplate . Template Eval Context ( context . templates . get Layout ( result . to Dynamic String ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . current Template . parent Ġ= Ġparent Template ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Template . eval ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠTemplate . Stop Evalu ating Exception () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// context . template . parent ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠBlock For ( val Ġvar names : ĠList < String >, Ġval Ġexpr : ĠExpr Node , Ġval Ġloop : ĠBlock , Ġval Ġelse Node : ĠBlock ?) Ġ: ĠBlock Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġeval ( context : ĠTemplate . Eval Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . create Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġexpr . eval ( context ). to Dynamic List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġloop Value Ġ= Ġhash Map Of < String , ĠAny ?> () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . scope . set (" loop ", Ġloop Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloop Value [" length "] Ġ= Ġitems . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( v Ġin Ġitems ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v Ġis ĠPair < *, Ġ*> Ġ&& Ġvar names . size Ġ>= Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . scope . set ( var names [ 0 ], Ġv . first ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . scope . set ( var names [ 1 ], Ġv . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . scope . set ( var names [ 0 ], Ġv ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloop Value [" index "] Ġ= Ġindex Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloop Value [" index 0 "] Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloop Value [" rev index "] Ġ= Ġitems . size Ġ- Ġindex Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloop Value [" rev index 0 "] Ġ= Ġitems . size Ġ- Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloop Value [" first "] Ġ= Ġ( index Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloop Value [" last "] Ġ= Ġ( index Ġ== Ġitems . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloop . eval ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Node ?. eval ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠBlock Group ( val Ġchildren : ĠList < Block >) Ġ: ĠBlock Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġeval ( context : ĠTemplate . Eval Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( n Ġin Ġchildren ) Ġn . eval ( context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠBlock If ( val Ġcond : ĠExpr Node , Ġval Ġtrue Content : ĠBlock , Ġval Ġfalse Content : ĠBlock ?) Ġ: ĠBlock Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġeval ( context : ĠTemplate . Eval Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cond . eval ( context ). to Dynamic Bool ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Content . eval ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Content ?. eval ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠBlock Import ( val Ġfile Expr : ĠExpr Node , Ġval Ġexport Name : ĠString ) Ġ: ĠBlock Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġeval ( context : ĠTemplate . Eval Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġctx Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTemplate . Template Eval Context ( context . templates . get Include ( file Expr . eval ( context ). toString ())). exec () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . scope . set ( export Name , Ġctx . macros ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠBlock Include ( val ĠfileName Expr : ĠExpr Node ) Ġ: ĠBlock Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġeval ( context : ĠTemplate . Eval Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= ĠfileName Expr . eval ( context ). to Dynamic String () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTemplate . Template Eval Context ( context . templates . get Include ( fileName )). eval ( context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠBlock Macro ( val Ġfunc name : ĠString , Ġval Ġargs : ĠList < String >, Ġval Ġbody : ĠBlock ) Ġ: ĠBlock Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġeval ( context : ĠTemplate . Eval Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . macros [ func name ] Ġ= ĠTemplate . Macro ( func name , Ġargs , Ġbody ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠBlock Set ( val Ġvar name : ĠString , Ġval Ġexpr : ĠExpr Node ) Ġ: ĠBlock Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġeval ( context : ĠTemplate . Eval Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . scope . set ( varname , Ġexpr . eval ( context )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠBlock Text ( val Ġcontent : ĠString ) Ġ: ĠBlock Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġeval ( context : ĠTemplate . Eval Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . write ( content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ