/* Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠMIT Ġlicense Ġthat Ġcan Ġbe Ċ Ġ* Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġcom . intellij . lang . psi Ċ Ċ import Ġcom . intellij . openapi . util . Text Range Ċ import Ġcom . intellij . psi . Literal Text Esc aper Ċ import Ġcom . intellij . psi . Psi Language Injection Host Ċ Ċ /** ĠSee Ġ` com . intellij . psi . impl . source . tree . inject ed . StringLiteral Esc aper ` Ġ*/ Ċ abstract Ġclass ĠLiteral Text Esc aper Base < T Ġ: ĠPsi Language Injection Host >( host : ĠT ) Ġ: ĠLiteral Text Esc aper < T >( host ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġout Source Offsets : ĠInt Array ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġdecode ( range Inside Host : ĠText Range , Ġout Chars : ĠStringBuilder ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsub Text Ġ= Ġrange Inside Host . substring ( my Host . text ) ĊĠĠĠĠĠĠĠ Ġval Ġ( offsets , Ġresult ) Ġ= Ġparse String Characters ( sub Text , Ġout Chars ) ĊĠĠĠĠĠĠĠ Ġout Source Offsets Ġ= Ġoffsets ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Offset In Host ( offset In Decoded : ĠInt , Ġrange Inside Host : ĠText Range ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġout Source Offsets Ġ= Ġout Source Offsets !! ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġif Ġ( offset In Decoded Ġ< Ġout Source Offsets . size ) Ġout Source Offsets [ offset In Decoded ] Ġelse Ġ- 1 ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( result Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( if Ġ( result Ġ<= Ġrange Inside Host . length ) Ġresult Ġelse Ġrange Inside Host . length ) Ġ+ Ġrange Inside Host . start Offset ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġparse String Characters ( chars : ĠString , Ġout Chars : ĠStringBuilder ): ĠPair < IntArray , ĠBoolean > Ċ } Ċ