package Ġdev . al pas . view . extensions Ċ Ċ import Ġcom . mit che ll bose ck e . pe bble . error . Parser Exception Ċ import Ġcom . mit che ll bose ck e . pe bble . extension . Node Visitor Ċ import Ġcom . mit che ll bose ck e . pe bble . lexer . Token Ċ import Ġcom . mit che ll bose ck e . pe bble . node . Abstract Render able Node Ċ import Ġcom . mit che ll bose ck e . pe bble . node . Body Node Ċ import Ġcom . mit che ll bose ck e . pe bble . node . Render able Node Ċ import Ġcom . mit che ll bose ck e . pe bble . parser . Parser Ċ import Ġcom . mit che ll bose ck e . pe bble . template . Evaluation Context Impl Ċ import Ġcom . mit che ll bose ck e . pe bble . template . P eb ble Template Impl Ċ import Ġcom . mit che ll bose ck e . pe bble . token Parser . Token Parser Ċ import Ġdev . al pas . view . Tag Context Ċ import Ġdev . al pas . view . http Call Ċ import Ġjava . io . Writer Ċ Ċ internal Ġclass ĠConditional Token Parser ( ĊĠĠĠ Ġprivate Ġval Ġtag : ĠString , ĊĠĠĠ Ġprivate Ġval Ġcondition : Ġ( context : ĠTag Context ) Ġ-> ĠBoolean Ċ ) Ġ: ĊĠĠĠ ĠToken Parser Ġ{ ĊĠĠĠ Ġprivate Ġval Ġend Tag Ġ= Ġ" end $ tag " ĊĊĠĠĠ Ġoverride Ġfun Ġparse ( token : ĠToken , Ġparser : ĠParser ): ĠRender able Node Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġparser . stream ĊĠĠĠĠĠĠĠ Ġval ĠlineNumber Ġ= Ġtoken . line Number ĊĊĠĠĠĠĠĠĠ Ġ// Ġskip Ġthe Ġtoken ĊĠĠĠĠĠĠĠ Ġstream . next () ĊĊĠĠĠĠĠĠĠ Ġstream . expect ( Token . Type . EXECUTE _ END ) ĊĊĠĠĠĠĠĠĠ Ġval Ġif Body Ġ= Ġparser . sub parse ( dec ide If Fork ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġelse Body : ĠBody Node ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġend Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! end ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stream . current (). value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠParser Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unexpected Ġend Ġof Ġtemplate . ĠWas Ġlooking Ġfor Ġthe Ġ\"$ end Tag \" Ġtag ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream . current (). line Number , Ġstream . filename ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( stream . current (). value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" else " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream . expect ( Token . Type . EXECUTE _ END ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Body Ġ= Ġparser . sub parse Ġ{ Ġt kn Ġ-> Ġt kn . test ( Token . Type . NAME , Ġend Tag ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Tag Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠParser Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unexpected Ġend Ġof Ġtemplate . ĠWas Ġlooking Ġfor Ġthe Ġfollowing Ġtags Ġ\" else \", Ġor Ġ\"$ end Tag \"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream . current (). line Number , Ġstream . filename ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstream . expect ( Token . Type . EXECUTE _ END ) ĊĠĠĠĠĠĠĠ Ġreturn ĠConditional Node ( line Number , Ġif Body , Ġelse Body , Ġcondition ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Tag () Ġ= Ġtag ĊĊĠĠĠ Ġprivate Ġval Ġdecide If Fork Ġ= Ġ{ Ġtoken : ĠToken Ġ-> Ġtoken . test ( Token . Type . NAME , Ġ" else ", Ġend Tag ) Ġ} Ċ } Ċ Ċ internal Ġclass ĠConditional Node ( ĊĠĠĠ ĠlineNumber : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġtrue Body : ĠBody Node , ĊĠĠĠ Ġprivate Ġval Ġfalse Body : ĠBody Node ? Ġ= Ġnull , ĊĠĠĠ Ġprivate Ġval Ġcondition : Ġ( context : ĠTag Context ) Ġ-> ĠBoolean Ċ ) Ġ: ĊĠĠĠ ĠAbstract Render able Node ( line Number ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġrender ( self : ĠP eb ble Template Impl , Ġwriter : ĠWriter , Ġcontext : ĠEvaluation Context Impl ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtag Context Ġ= ĠTag Context ( context . http Call , ĠlineNumber , Ġself . name , Ġcontext ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( condition ( tag Context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Body . render ( self , Ġwriter , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Body ?. render ( self , Ġwriter , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġaccept ( visitor : ĠNode Visitor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvisitor . visit ( this ) ĊĠĠĠ Ġ} Ċ } Ċ