package Ġio . ktor . start . intellij . locations Ċ Ċ import Ġcom . intellij . lexer .* Ċ import Ġcom . intellij . psi . tree .* Ċ Ċ internal Ġclass ĠPattern Lexer Ġ: ĠLex er Base () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġmy Token Start Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġmy Token End Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġmy TokenType : ĠI ElementType ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġmy Buffer : ĠCharSequence Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġmy Start Offset Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġmy End Offset Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġmy State Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġstart ( buffer : ĠCharSequence , Ġstart Offset : ĠInt , Ġend Offset : ĠInt , ĠinitialState : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmy Buffer Ġ= Ġbuffer ĊĠĠĠĠĠĠĠ Ġmy Start Offset Ġ= Ġstart Offset ĊĠĠĠĠĠĠĠ Ġmy End Offset Ġ= Ġend Offset ĊĠĠĠĠĠĠĠ Ġmy State Ġ= ĠinitialState ĊĊĠĠĠĠĠĠĠ Ġmy Token Start Ġ= Ġstart Offset ĊĠĠĠĠĠĠĠ Ġmy Token End Ġ= Ġstart Offset ĊĊĠĠĠĠĠĠĠ Ġadvance () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetState (): ĠInt Ġ= Ġmy State ĊĊĠĠĠ Ġoverride Ġfun ĠgetToken Start (): ĠInt Ġ= Ġmy Token Start ĊĊĠĠĠ Ġoverride Ġfun Ġget Buffer End (): ĠInt Ġ= Ġmy End Offset ĊĊĠĠĠ Ġoverride Ġfun Ġget Buffer Sequence (): ĠCharSequence Ġ= Ġmy Buffer ĊĊĠĠĠ Ġoverride Ġfun ĠgetToken End (): ĠInt Ġ= Ġmy Token End ĊĊĠĠĠ Ġoverride Ġfun Ġget TokenType (): ĠI ElementType ? Ġ= Ġmy TokenType ĊĊĠĠĠ Ġoverride Ġfun Ġadvance () Ġ{ ĊĠĠĠĠĠĠĠ Ġmy Token Start Ġ= Ġmy Token End ĊĠĠĠĠĠĠĠ Ġif Ġ( my Token Start Ġ== Ġmy End Offset ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy TokenType Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġfound Type : ĠI ElementType ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġmy Buffer Ġ= Ġmy Buffer ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġtoken Start ĊĠĠĠĠĠĠĠ Ġval Ġmy End Offset Ġ= Ġmy End Offset ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( index Ġ< Ġmy End Offset ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġch Ġ= Ġmy Buffer [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ch Ġ== Ġ'\\ ' Ġ|| Ġch Ġ< Ġ' Ġ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Type Ġ= ĠTOKEN _ IL LEG AL _ CHAR ACT ERS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ch Ġ== Ġ'/') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Type Ġ= ĠTOKEN _ SL ASH ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ch Ġ== Ġ'{ ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Type Ġ= ĠTOKEN _ SUB _ OPEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ch Ġ== Ġ' }') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Type Ġ= ĠTOKEN _ SUB _ CLOSE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ch Ġ== Ġ'.') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Type Ġ= ĠTOKEN _ EL LI PS IS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ch Ġ== Ġ'? ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Type Ġ= ĠTOKEN _ OPTIONAL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ!= Ġmy Token Start Ġ|| Ġfound Type Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy TokenType Ġ= ĠTOKEN _ COMPONENT ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( found Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTOKEN _ SL ASH Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġeat While ( my Buffer , Ġindex Ġ+ Ġ 1 , Ġmy End Offset , Ġ'/') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTOKEN _ COMPONENT Ġ-> Ġerror (" !! !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTOKEN _ SUB _ OPEN , ĠTOKEN _ SUB _ CLOSE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTOKEN _ IL LEG AL _ CHAR ACT ERS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġeat While ( my Buffer , Ġindex Ġ+ Ġ 1 , Ġmy End Offset ) Ġ{ Ġit Ġ== Ġ'\\ ' Ġ|| Ġit Ġ< Ġ' Ġ' Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTOKEN _ OPTIONAL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTOKEN _ EL LI PS IS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġeat While ( my Buffer , Ġindex Ġ+ Ġ 1 , Ġmy End Offset , Ġ'.') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ- Ġmy Token Start Ġ!= Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfound Type Ġ= ĠTOKEN _ COMPONENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" !! !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy TokenType Ġ= Ġfound Type ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmy Token End Ġ= Ġindex ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġeat While ( buffer : ĠCharSequence , Ġstart : ĠInt , Ġend : ĠInt , Ġch : ĠChar ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġeat While ( buffer , Ġstart , Ġend ) Ġ{ Ġit Ġ== Ġch Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġeat While ( buffer : ĠCharSequence , Ġstart : ĠInt , Ġend : ĠInt , Ġpredicate : Ġ( Char ) Ġ-> ĠBoolean ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġstart ĊĠĠĠĠĠĠĠ Ġwhile Ġ( index Ġ< Ġend ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! predicate ( buffer [ index ])) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġindex ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠROOT : ĠI ElementType Ġ= ĠI ElementType ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" TOKEN _ ROOT ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoc ations Pattern Language ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval ĠSUB STIT UTION : ĠI ElementType Ġ= ĠI ElementType ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" TOKEN _ SUB STIT UTION ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoc ations Pattern Language ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval ĠTOKEN _ SL ASH : ĠI ElementType Ġ= ĠI ElementType ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" TOKEN _ SL ASH ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoc ations Pattern Language ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval ĠTOKEN _ COMPONENT : ĠI ElementType Ġ= ĠI ElementType ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" TOKEN _ COMPONENT ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoc ations Pattern Language ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval ĠTOKEN _ SUB _ OPEN : ĠI ElementType Ġ= ĠI ElementType ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" TOKEN _ SUB _ OPEN ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoc ations Pattern Language ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval ĠTOKEN _ SUB _ CLOSE : ĠI ElementType Ġ= ĠI ElementType ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" TOKEN _ SUB _ CLOSE ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoc ations Pattern Language ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval ĠTOKEN _ IL LEG AL _ CHAR ACT ERS : ĠI ElementType Ġ= ĠI ElementType ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" TOKEN _ IL LEG AL _ SL ASH ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoc ations Pattern Language ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval ĠTOKEN _ EL LI PS IS : ĠI ElementType Ġ= ĠI ElementType ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" TOKEN _ EL LI PS IS ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoc ations Pattern Language ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval ĠTOKEN _ OPTIONAL : ĠI ElementType Ġ= ĠI ElementType ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" TOKEN _ OPTIONAL ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoc ations Pattern Language ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ} Ċ }