package Ġdev . sch la ubi . for p . core . internal Ċ Ċ import Ġcom . strument a . kotlin multi platform . Math Ċ import Ġcom . strument a . kotlin multi platform . assert Ċ import Ġorg . antlr . v 4 . kotlin runtime . CharStream Ċ import Ġorg . antlr . v 4 . kotlin runtime . Int Stream Ċ import Ġorg . antlr . v 4 . kotlin runtime . misc . Interval Ċ Ċ internal Ġfun Ġchar Stream From CharSequence ( ĊĠĠĠ Ġchar Sequence : ĠCharSequence , ĊĠĠĠ Ġsource Name : ĠString Ġ= ĠInt Stream . UNKNOWN _ SOURCE _ NAME Ċ ): ĠChar Stream Ġ= ĠCharSequence CharStream ( char Sequence , Ġsource Name ) Ċ Ċ private Ġclass ĠCharSequence CharStream ( ĊĠĠĠ Ġprivate Ġval Ġsource : ĠCharSequence , ĊĠĠĠ Ġoverride Ġval Ġsource Name : ĠString Ċ ) Ġ: ĠChar Stream Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcode Point Indices Ġ= Ġsource . code Point Indices () ĊĠĠĠ Ġprivate Ġval Ġsize Ġ= Ġcode Point Indices . size ĊĠĠĠ Ġprivate Ġvar Ġposition : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġfun Ġcode Point ( index : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( index Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchar Ġ= Ġsource [ code Point Indices [ index ]] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( char . is High Sur rogate ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ+ Ġ 1 Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlow Ġ= Ġsource [ code Point Indices [ index ] Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Code Point ( char , Ġlow ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt Stream . EOF ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchar . code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt Stream . EOF ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconsume () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( size Ġ- Ġposition Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( LA ( 1 ) Ġ== ĠInt Stream . EOF ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" cannot Ġconsume ĠEOF ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġposition Ġ+= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġindex (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġposition ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsize (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsize ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġmark / release Ġdo Ġnothing ; Ġwe Ġhave Ġentire Ġbuffer Ġ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġmark (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrelease ( marker : ĠInt ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġseek ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġposition Ġ= Ġindex ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetText ( Interval . of ( 0 , Ġsize Ġ- Ġ 1 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetText ( interval : ĠInterval ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠstartIndex Ġ= ĠMath . min ( interval . a , Ġsize ) ĊĠĠĠĠĠĠĠ Ġval Ġend Index Ġ= ĠMath . min ( interval . b , Ġsize ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsource . substring ( code Point Indices [ startIndex ], Ġcode Point Indices [ end Index ] Ġ+ Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠLA ( i : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ< Ġ 0 Ġ-> Ġcode Point ( position Ġ+ Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ> Ġ 0 Ġ-> Ġcode Point ( position Ġ+ Ġi Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUndefined ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun ĠCharSequence . code Point Indices (): ĠInt Array Ġ{ ĊĠĠĠ Ġreturn Ġ( 0 Ġuntil Ġlength ). map NotNull Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( has Sur rogate Pair At ( index Ġ- Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. to IntArray () Ċ } Ċ Ċ private Ġfun Ġto Code Point ( high : ĠChar , Ġlow : ĠChar ): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġhigh . code . sh l ( 1 0 ) Ġ+ Ġlow . code Ġ+ Ġ- 5 6 6 1 3 8 8 8 Ċ } Ċ