/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 6 - 2 0 1 8 ĠRe ece ĠH . ĠD un n Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġuk . co . re ec ed un n . intellij . plugin . core . lexer Ċ Ċ import Ġcom . intellij . lexer . Lexer Ċ import Ġcom . intellij . lexer . Lexer Base Ċ import Ġcom . intellij . psi . tree . I ElementType Ċ Ċ class ĠCom bined Lexer ( private Ġval Ġm Language : ĠLex er ) Ġ: ĠLex er Base () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġm States Ġ= ĠHashMap < Int , ĠState >() ĊĠĠĠ Ġprivate Ġval Ġm Transitions Ġ= ĠHashMap < I ElementType , ĠState >() ĊĠĠĠ Ġprivate Ġvar Ġm State Mask : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġm Active Lexer : ĠLex er ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm State : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġinternal Ġclass ĠState ( ĊĠĠĠĠĠĠĠ Ġval Ġlexer : ĠLex er , ĊĠĠĠĠĠĠĠ Ġval Ġstate : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġparent State : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġchild State : ĠInt ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġadd State ( lexer : ĠLex er , Ġstate Id : ĠInt , Ġparent State Id : ĠInt , Ġtransition : ĠI ElementType ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd State ( lexer , Ġstate Id , Ġparent State Id , Ġ 0 , Ġtransition ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd State ( lexer : ĠLex er , Ġstate Id : ĠInt , Ġparent State Id : ĠInt , Ġchild State Id : ĠInt , Ġtransition : ĠI ElementType ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= ĠState ( lexer , Ġstate Id , Ġparent State Id , Ġchild State Id ) ĊĠĠĠĠĠĠĠ Ġm States [ state Id ] Ġ= Ġstate ĊĠĠĠĠĠĠĠ Ġm Transitions [ transition ] Ġ= Ġstate ĊĠĠĠĠĠĠĠ Ġm State Mask Ġ= Ġm State Mask Ġor Ġstate Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġregion ĠLex er ĊĊĠĠĠ Ġoverride Ġfun Ġstart ( buffer : ĠCharSequence , Ġstart Offset : ĠInt , Ġend Offset : ĠInt , ĠinitialState : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm State Ġ= ĠinitialState Ġand Ġm State Mask ĊĠĠĠĠĠĠĠ Ġvar Ġstate : ĠState ? Ġ= Ġm States [ m State ] ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Active Lexer Ġ= Ġstate . lexer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Language . start ( buffer , Ġstart Offset , Ġend Offset , Ġstate . parent State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Active Lexer !!. start ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Language . buffer Sequence , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Language . token Start , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Language . token End , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinitialState Ġand Ġm State Mask . inv () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Language . start ( buffer , Ġstart Offset , Ġend Offset , ĠinitialState Ġand Ġm State Mask . inv ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġm Transitions [ m Language . token Type ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Active Lexer Ġ= Ġstate . lexer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Active Lexer !!. start ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Language . buffer Sequence , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Language . token Start , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Language . token End , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . child State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm State Ġ= Ġstate . state ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Active Lexer Ġ= Ġm Language ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadvance () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Active Lexer Ġ!== Ġm Language ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Active Lexer !!. advance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Active Lexer !!. token Type Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Language . advance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġm Transitions [ m Language . token Type ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Active Lexer Ġ= Ġstate . lexer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Active Lexer !!. start ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Language . buffer Sequence , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Language . token Start , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Language . token End , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . child State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm State Ġ= Ġstate . state ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Active Lexer Ġ= Ġm Language ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm State Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Language . advance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġm Transitions [ m Language . token Type ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Active Lexer Ġ= Ġstate . lexer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Active Lexer !!. start ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Language . buffer Sequence , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Language . token Start , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Language . token End , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . child State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm State Ġ= Ġstate . state ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetState (): ĠInt Ġ= Ġm Active Lexer !!. state Ġor Ġm State ĊĊĠĠĠ Ġoverride Ġfun Ġget TokenType (): ĠI ElementType ? Ġ= Ġm Active Lexer !!. token Type ĊĊĠĠĠ Ġoverride Ġfun ĠgetToken Start (): ĠInt Ġ= Ġm Active Lexer !!. token Start ĊĊĠĠĠ Ġoverride Ġfun ĠgetToken End (): ĠInt Ġ= Ġm Active Lexer !!. token End ĊĊĠĠĠ Ġoverride Ġfun Ġget Buffer Sequence (): ĠCharSequence Ġ= Ġm Language . buffer Sequence ĊĊĠĠĠ Ġoverride Ġfun Ġget Buffer End (): ĠInt Ġ= Ġm Language . buffer End ĊĊĠĠĠ Ġ// Ġend region Ċ } Ċ