package Ġorg . jon ny zz z . cef . generator . c ĊĊ Ċ fun Ġparse Blocks ( lines : ĠPush Back Iterator < Line >) Ġ: ĠList < Br ackets TreeNode > Ġ{ ĊĠ Ġval Ġresult Ġ= Ġmutable ListOf < Br ackets TreeNode >() ĊĊĠ Ġloop @ Ġwhile ( true ) Ġ{ ĊĠĠĠ Ġval Ġline Ġ= Ġlines . next OrNull () Ġ?: Ġbreak ĊĠĠĠ Ġval Ġtext Ġ= Ġline . text ĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠ Ġtext . isBlank () Ġ-> Ġcontinue @ loop ĊĊĠĠĠĠĠ Ġtext . contains ("{ ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsub Lines Ġ= Ġparse Blocks ( lines ) ĊĠĠĠĠĠĠĠ Ġval Ġlast Line Ġ= Ġsub Lines . last () Ġas ĠLeaf Node ĊĠĠĠĠĠĠĠ Ġresult Ġ+= ĠBlock Node ( line , Ġlast Line . line , Ġsub Lines . drop Last ( 1 )) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġtext . contains (" }") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġresult Ġ+= ĠLeaf Node ( line ) ĊĠĠĠĠĠĠĠ Ġbreak @ loop ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġtext . trim (). startsWith ("// ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġresult Ġ+= Ġread Comment Nodes ( line , Ġlines ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġtext . trim (). contains (" (" ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġresult Ġ+= Ġread Br aces Nodes ( line , Ġlines ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġelse Ġ-> Ġresult Ġ+= ĠLeaf Node ( line ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġreturn Ġresult Ċ } Ċ Ċ private Ġfun Ġread Br aces Nodes ( first Line : ĠLine , Ġlines : ĠIterator < Line >) Ġ: ĠBr aces Node Ġ{ ĊĠ Ġfun ĠLine . open Count () Ġ= Ġtext . count Ġ{ Ġit Ġ== Ġ'(' Ġ} ĊĠ Ġfun ĠLine . close Count () Ġ= Ġtext . count Ġ{ Ġit Ġ== Ġ')' Ġ} ĊĊĠ Ġval Ġresult Ġ= Ġmutable ListOf ( first Line ) ĊĠ Ġvar Ġopen Count Ġ= Ġfirst Line . open Count () ĊĠ Ġvar Ġclose Count Ġ= Ġfirst Line . close Count () ĊĊĠ Ġwhile ( open Count Ġ!= Ġclose Count ) Ġ{ ĊĠĠĠ Ġval Ġnext Ġ= Ġlines . next OrNull () Ġ?: Ġerror (" Failed Ġto Ġfind Ġ) Ġin Ġthe : Ġ$ result ") ĊĠĠĠ Ġresult Ġ+= Ġnext ĊĊĠĠĠ Ġopen Count Ġ+= Ġnext . open Count () ĊĠĠĠ Ġclose Count Ġ+= Ġnext . close Count () ĊĠ Ġ} ĊĊĠ Ġreturn ĠBr aces Node ( result ) Ċ } Ċ Ċ private Ġfun Ġread Comment Nodes ( first Line : ĠLine , Ġlines : ĠPush Back Iterator < Line >): ĠDoc Comment Node Ġ{ ĊĠ Ġval Ġcomments Ġ= Ġmutable ListOf ( first Line ) ĊĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠ Ġval Ġline Ġ= Ġlines . next OrNull () Ġ?: Ġbreak ĊĊĠĠĠ Ġval Ġtext Ġ= Ġline . text ĊĊĠĠĠ Ġif Ġ(! text . trim (). startsWith ("// ")) Ġ{ ĊĠĠĠĠĠ Ġlines . push Back ( line ) ĊĠĠĠĠĠ Ġbreak ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcomments Ġ+= Ġline ĊĠ Ġ} ĊĊĠ Ġreturn ĠDoc Comment Node ( comments ) Ċ } ĊĊ