package Ġorg . jetbrains . kotlin x . ki . shell . plugins Ċ Ċ import Ġorg . antlr . v 4 . runtime . Char Streams Ċ import Ġorg . antlr . v 4 . runtime . Common Token Stream Ċ import Ġorg . jetbrains . kotlin x . ki . shell . parser . Kotlin Lexer Ċ import Ġorg . jetbrains . kotlin x . ki . shell . parser . Kotlin Parser Ċ import Ġorg . jetbrains . kotlin x . ki . shell . parser . Kotlin Parser Listener For Highlighting Ċ import Ġorg . j line . utils . Attribut edString Ċ import Ġorg . j line . utils . Attribut ed StringBuilder Ċ import Ġorg . j line . utils . Attribut ed Style Ċ import Ġjava . util . regex . Pattern Ċ Ċ class ĠKotlin Highlight er ( private Ġval Ġstyles : ĠSyntax Plugin . Highlight Styles ): ĠBase Highlight er Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġlast Code Ca using Error : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġhighlight ( buffer : ĠString , Ġoffset : ĠInt ): ĠAt tribut edString Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( offset Ġ>= Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġreturn ĠAt tribut ed StringBuilder (). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Highlighting ( buffer , Ġoffset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Attribut edString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠAt tribut ed StringBuilder . build Highlighting ( buffer : ĠString , Ġoffset : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( offset Ġ!= Ġ 0 ) Ġappend ( buffer . substring ( 0 , Ġoffset )) ĊĠĠĠĠĠĠĠ Ġif Ġ( offset Ġ>= Ġbuffer . length ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġbuffer . substring ( offset ) ĊĠĠĠĠĠĠĠ Ġif Ġ( code . isBlank ()) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= ĠKotlin Parser Listener For Highlighting () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( last Code Ca using Error Ġ!= Ġcode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Code Ca using Error Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( Kotlin Parser For Highlighting ( code )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Parse Listener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Error Listeners () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscript () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Code Ca using Error Ġ= Ġcode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġcode . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġlistener . result . first OrNull Ġ{ Ġi Ġ>= Ġit . start Ġ&& Ġi Ġ<= Ġit . end Ġ} ?. element ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġst Ġ= Ġwhen Ġ( element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Parser Listener For Highlighting . Re cog ized Elements . Keyword Ġ-> Ġstyles . keyword ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Parser Listener For Highlighting . Re cog ized Elements . Function Identifier Ġ-> Ġstyles . function ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Parser Listener For Highlighting . Re cog ized Elements . Number Ġ-> Ġstyles . number ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Parser Listener For Highlighting . Re cog ized Elements . String Ġ-> Ġstyles . string ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Parser Listener For Highlighting . Re cog ized Elements . String Template Ġ-> Ġstyles . string Template ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Parser Listener For Highlighting . Re cog ized Elements . Type Identifier Ġ-> Ġstyles . type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Parser Listener For Highlighting . Re cog ized Elements . Parent hesis Ġ-> Ġstyles . parent hesis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Parser Listener For Highlighting . Re cog ized Elements . Type Parameter Ġ-> Ġstyles . type Parameter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: ĠAt tribut ed Style . DEFAULT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle ( st ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( code [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetError Pattern ( p 0 : ĠPattern ?) Ġ{} ĊĊĠĠĠ Ġoverride Ġfun ĠsetError Index ( p 0 : ĠInt ) Ġ{} ĊĊĠĠĠ Ġprivate Ġclass ĠKotlin Parser For Highlighting ( code : ĠString ) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Parser ( Common Token Stream ( Kotlin Lexer ( Char Streams . fromString ( code )))) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ build Parse Trees Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ