package Ġdev . bl ach ut . svelte . lang . parsing . html Ċ Ċ import Ġcom . intellij . lang . Psi Builder . Marker Ċ import Ġcom . intellij . psi . tree . I ElementType Ċ import Ġdev . bl ach ut . svelte . lang . psi .* Ċ Ċ object ĠS velte Block Parsing Ġ{ ĊĠĠĠ Ġfun Ġstart Block ( tag Level : ĠInt , Ġtag Token : ĠI ElementType , Ġtag Marker : ĠMarker , Ġfragment Marker : ĠMarker ): ĠOpen ed Block Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparsing Definition Ġ= Ġwhen Ġ( tag Token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS velte Tag Element Types . IF _ START Ġ-> ĠIF _ BLOCK _ DEFINITION ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS velte Tag Element Types . EACH _ START Ġ-> ĠE ACH _ BLOCK _ DEFINITION ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS velte Tag Element Types . AW A IT _ START Ġ-> ĠA WAIT _ BLOCK _ DEFINITION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Expected Ġstart Ġtag Ġtoken ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġouter Marker Ġ= Ġtag Marker . pre ce de () ĊĠĠĠĠĠĠĠ Ġval Ġinner Marker Ġ= Ġtag Marker . pre ce de () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠOpen ed Block ( parsing Definition , Ġtag Level , Ġouter Marker , Ġinner Marker , Ġfragment Marker ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠIF _ BLOCK _ DEFINITION Ġ= ĠBlock Parsing Definition ( ĊĠĠĠĠĠĠĠ Ġblock Token Ġ= ĠS velte Element Types . IF _ BLOCK , ĊĠĠĠĠĠĠĠ Ġprimary Branch Token Ġ= ĠS velte Element Types . IF _ TRUE _ BRANCH , ĊĠĠĠĠĠĠĠ Ġinner Tag To Branch Tokens Ġ= Ġmap Of ( S velte Tag Element Types . ELSE _ CLA USE Ġto ĠS velte Element Types . IF _ ELSE _ BRANCH ), ĊĠĠĠĠĠĠĠ Ġend Tag Ġ= ĠS velte Tag Element Types . IF _ END , ĊĠĠĠĠĠĠĠ Ġmissing End Tag Message Ġ= Ġ"{ if } Ġis Ġnot Ġclosed " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval ĠE ACH _ BLOCK _ DEFINITION Ġ= ĠBlock Parsing Definition ( ĊĠĠĠĠĠĠĠ Ġblock Token Ġ= ĠS velte Element Types . EACH _ BLOCK , ĊĠĠĠĠĠĠĠ Ġprimary Branch Token Ġ= ĠS velte Element Types . EACH _ LOOP _ BRANCH , ĊĠĠĠĠĠĠĠ Ġinner Tag To Branch Tokens Ġ= Ġmap Of ( S velte Tag Element Types . ELSE _ CLA USE Ġto ĠS velte Element Types . EACH _ ELSE _ BRANCH ), ĊĠĠĠĠĠĠĠ Ġend Tag Ġ= ĠS velte Tag Element Types . EACH _ END , ĊĠĠĠĠĠĠĠ Ġmissing End Tag Message Ġ= Ġ"{ each } Ġis Ġnot Ġclosed " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval ĠA WAIT _ BLOCK _ DEFINITION Ġ= ĠBlock Parsing Definition ( ĊĠĠĠĠĠĠĠ Ġblock Token Ġ= ĠS velte Element Types . AW A IT _ BLOCK , ĊĠĠĠĠĠĠĠ Ġprimary Branch Token Ġ= ĠS velte Element Types . AW A IT _ MAIN _ BRANCH , ĊĠĠĠĠĠĠĠ Ġinner Tag To Branch Tokens Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS velte Tag Element Types . THEN _ CLA USE Ġto ĠS velte Element Types . AW A IT _ THEN _ BRANCH , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS velte Tag Element Types . CATCH _ CLA USE Ġto ĠS velte Element Types . AW A IT _ CATCH _ BRANCH ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġend Tag Ġ= ĠS velte Tag Element Types . AW A IT _ END , ĊĠĠĠĠĠĠĠ Ġmissing End Tag Message Ġ= Ġ"{ await } Ġis Ġnot Ġclosed " ĊĠĠĠ Ġ) Ċ } Ċ Ċ data Ġclass ĠOpen ed Block ( ĊĠĠĠ Ġprivate Ġval Ġparsing Definition : ĠBlock Parsing Definition , ĊĠĠĠ Ġval Ġtag Level : ĠInt , ĊĠĠĠ Ġval Ġouter Marker : ĠMarker , ĊĠĠĠ Ġprivate Ġvar Ġinner Marker : ĠMarker , ĊĠĠĠ Ġprivate Ġvar Ġfragment Marker : ĠMarker Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġlast Inner Element Ġ= Ġparsing Definition . primary Branch Token ĊĊĠĠĠ Ġfun Ġis Matching Inner Tag ( token : ĠI ElementType ) Ġ= Ġparsing Definition . inner Tag To Branch Tokens . containsKey ( token ) ĊĊĠĠĠ Ġfun Ġis Matching End Tag ( token : ĠI ElementType ) Ġ= Ġtoken Ġ=== Ġparsing Definition . end Tag ĊĊĠĠĠ Ġfun Ġhandle Inner Tag ( token : ĠI ElementType , Ġresult Marker : ĠMarker , Ġnext Fragment Marker : ĠMarker ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfragment Marker . done Before ( S velte Element Types . FRAGMENT , Ġresult Marker ) ĊĠĠĠĠĠĠĠ Ġinner Marker . done Before ( last Inner Element , Ġresult Marker ) ĊĠĠĠĠĠĠĠ Ġlast Inner Element Ġ= Ġparsing Definition . inner Tag To Branch Tokens [ token ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Expected Ġmatching Ġinner Ġclause ") ĊĠĠĠĠĠĠĠ Ġinner Marker Ġ= Ġresult Marker . pre ce de () ĊĠĠĠĠĠĠĠ Ġfragment Marker Ġ= Ġnext Fragment Marker ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle End Tag ( result Marker : ĠMarker ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfragment Marker . done Before ( S velte Element Types . FRAGMENT , Ġresult Marker ) ĊĠĠĠĠĠĠĠ Ġinner Marker . done Before ( last Inner Element , Ġresult Marker ) ĊĠĠĠĠĠĠĠ Ġouter Marker . done ( parsing Definition . block Token ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Missing End Tag ( error Marker : ĠMarker ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfragment Marker . done Before ( S velte Element Types . FRAGMENT , Ġerror Marker ) ĊĠĠĠĠĠĠĠ Ġinner Marker . done Before ( last Inner Element , Ġerror Marker ) ĊĠĠĠĠĠĠĠ Ġerror Marker . error ( parsing Definition . missing End Tag Message ) ĊĠĠĠĠĠĠĠ Ġouter Marker . done ( parsing Definition . block Token ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠBlock Parsing Definition ( ĊĠĠĠ Ġval Ġblock Token : ĠS velte ElementType , ĊĠĠĠ Ġval Ġprimary Branch Token : ĠS velte ElementType , ĊĠĠĠ Ġval Ġinner Tag To Branch Tokens : ĠMap < S velte JS Block Lazy ElementType , ĠS velte ElementType >, ĊĠĠĠ Ġval Ġend Tag : ĠS velte J SE lement Type , ĊĠĠĠ Ġval Ġmissing End Tag Message : ĠString Ċ ) Ċ