package Ġcom . github . iz hang zhi hao . rain bow . br ackets Ċ Ċ import Ġcom . github . iz hang zhi hao . rain bow . br ackets . provider . Pa ired Brace Provider Ċ import Ġcom . github . iz hang zhi hao . rain bow . br ackets . util . memo ize Ċ import Ġcom . intellij . code Insight . highlight ing . Brace Matching Util Ċ import Ġcom . intellij . lang .* Ċ import Ġcom . intellij . psi . tree . I ElementType Ċ Ċ object ĠBr ace Pairs Ġ{ ĊĊĠĠĠ Ġ@ Suppress (" Member Visibility Can Be Private ") ĊĠĠĠ Ġval Ġproviders Ġ= ĠLanguage Extension < Pa ired Brace Provider >(" iz hang zhi hao . rain bow . br ackets . paired Brace Provider ") ĊĊĠĠĠ Ġprivate Ġval Ġbr ace Pairs Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLanguage . get Registered Languages () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġlanguage Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( language Ġis ĠComposite Language ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Ġlanguage Ġto Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpairs Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLanguage Brace Matching . INSTANCE . for Language ( language )?. pairs . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġnull Ġ|| Ġit . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlanguage . associated FileType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĠfileType Ġ-> ĠBr ace Matching Util . get Brace Matcher ( fileType , Ġlanguage ) Ġas ? ĠPa ired Brace Matcher Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . pairs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpairs List Ġ= Ġproviders . for Language ( language )?. pairs ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pairs Ġ!= Ġnull Ġ&& Ġpairs . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . to Mutable Set (). apply Ġ{ Ġadd All ( pairs ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġpairs ?. toList () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbr ace Map : ĠMutable Map < String , ĠMutable List < Brace Pair >> Ġ= Ġmutable Map Of () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpairs List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . filter Ġ{ Ġ! black Token Types . contains ( it . left Brace Type . toString ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map Ġ{ ĠlistOf ( Pair ( it . left Brace Type . toString (), Ġit ), ĠPair ( it . right Brace Type . toString (), Ġit )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . flatten () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . forEach Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbr ace Pairs Ġ= Ġbr ace Map [ it . first ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( brace Pairs Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbr ace Map [ it . first ] Ġ= Ġmutable ListOf ( it . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbr ace Pairs . add ( it . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlanguage Ġto Ġbr ace Map ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toMap () ĊĊĠĠĠ Ġfun Ġget Brace Pairs ( language : ĠLanguage ): ĠMutable Map < String , ĠMutable List < Brace Pair >> ? Ġ= Ġbr ace Pairs [ language ] ĊĊĠĠĠ Ġprivate Ġfun Ġget Brace Type Set Of ( language : ĠLanguage ): ĠSet < I ElementType > Ġ= Ġget Brace Pairs ( language )?. values ?. flatten ()?. map Ġ{ Ġit Ġ-> ĠlistOf ( it . left Brace Type , Ġit . right Brace Type ) Ġ} ?. flatten ()?. toSet () Ġ?: Ġempty Set () ĊĊĠĠĠ Ġval Ġbr ace Type Set : Ġ( Language ) Ġ-> ĠSet < I ElementType > Ġ= Ġ{ Ġlanguage : ĠLanguage Ġ-> Ġget Brace Type Set Of ( language ) Ġ}. memo ize () Ċ } Ċ Ċ inline Ġval ĠLanguage . brace Pairs : ĠMutable Map < String , ĠMutable List < Brace Pair >> ? ĊĠĠĠ Ġget () Ġ= ĠBr ace Pairs . get Brace Pairs ( this ) Ċ Ċ inline Ġval ĠLanguage . brace Type Set : ĠSet < I ElementType > ĊĠĠĠ Ġget () Ġ= ĠBr ace Pairs . brace Type Set ( this ) Ċ Ċ val Ġblack Token Types : ĠSet < String > Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// github . com / iz hang zhi hao / intellij - rain bow - br ackets / issues / 4 2 3 ĊĠĠĠĠĠĠĠ Ġ" php Ġopening Ġtag ", ĊĠĠĠĠĠĠĠ Ġ" php Ġclosing Ġtag ", ĊĠĠĠĠĠĠĠ Ġ" php Ġecho Ġopening Ġtag " Ċ )