package Ġcom . md ro bn ak . l al r pop . psi . ext Ċ Ċ import Ġcom . intellij . openapi . util . Text Range Ċ import Ġcom . intellij . psi . Literal Text Esc aper Ċ import Ġcom . md ro bn ak . l al r pop . psi . Lp Action Ċ import Ġcom . md ro bn ak . l al r pop . psi . Lp Selected Type Ċ Ċ /** Ċ Ġ* ĠA Ġsimple Ġstructure Ġto Ġhold Ġdata Ġabout Ġthe Ġranges Ġof Ġ`< >` Ġand Ġthe Ġranges Ġthey Ġexpanded Ġto Ġin Ġthe Ġdecoded Ġbuffer . Ċ Ġ*/ Ċ private Ġdata Ġclass ĠMapping ( val Ġsource Range : ĠText Range , Ġval Ġtarget Range : ĠText Range ) Ċ Ċ private Ġfun Ġaction Code Escape With Mappings ( action Code : ĠString , Ġeval Of Angle Br ackets Expression : ĠList < Lp Selected Type >): ĠPair < List < Mapping >, ĠString > Ġ{ ĊĠĠĠ Ġ// Ġget Ġall Ġthe Ġtext Ġranges Ġwith Ġ<> Ġfrom Ġrust ĊĠĠĠ Ġval Ġmappings Ġ= Ġaction Code . findAll Mappings ("< >", Ġeval Of Angle Br ackets Expression ) ĊĊĠĠĠ Ġ// Ġreplace Ġthem Ġall Ġwith Ġtheir Ġreplacement s , Ġin Ġreverse Ġorder ĊĠĠĠ Ġval Ġresult Ġ= Ġmappings . fold Right ( action Code ) Ġ{ Ġmapping , Ġacc Ġ-> ĊĠĠĠĠĠĠĠ Ġmapping . source Range . replace ( acc , Ġeval Of Angle Br ackets Expression . replacement ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġmappings Ġto Ġresult Ċ } Ċ Ċ /** Ċ Ġ* ĠGet Ġthe Ġaction Ġcode , Ġroughly Ġlike Ġwhat Ġthe Ġrust Ġplugin Ġwill Ġsee Ġafter Ġl al r pop Ġdoes Ġit 's Ġmagic ; Ċ Ġ* Ġmostly Ġresolves Ġ< code >< ></ code > Ġand Ġreplaces Ġthem Ġwith Ġsomething Ġbased Ġon Ġeval Of Angle Br ackets Expressions Ġand Ċ Ġ* Ġwhere Ġthey Ġare Ġin Ġthe Ġaction Ġcode Ġ( parent heses Ġ/ Ġbrackets Ġ/ Ġbr aces ). Ċ Ġ* Ċ Ġ* Ġ@ param Ġaction Code ĠThe Ġaction Ġcode Ġin Ġthe Ġsource Ġl al r pop Ġfile Ċ Ġ* Ġ@ param Ġeval Of Angle Br ackets Expression ĠThe Ġlist Ġof Ġnames Ġfor Ġselected Ġtypes Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġfinal Ġrust Ġform Ġthe Ġaction Ġcode Ġwill Ġhave . Ċ Ġ*/ Ċ fun Ġaction Code Escape ( action Code : ĠString , Ġeval Of Angle Br ackets Expression : ĠList < Lp Selected Type >): ĠString Ġ= ĊĠĠĠ Ġaction Code Escape With Mappings ( action Code , Ġeval Of Angle Br ackets Expression ). second Ċ Ċ class ĠL p Action Literal Text Esc aper ( action : ĠL p Action , Ġprivate Ġval Ġeval Of Angle Br ackets Expression : ĠList < Lp Selected Type >) Ġ: ĊĠĠĠ ĠLiteral Text Esc aper < Lp Action >( action ) Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmappings : ĠList < Mapping > ĊĊĠĠĠ Ġoverride Ġfun Ġdecode ( range Inside Host : ĠText Range , Ġout Chars : ĠStringBuilder ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġget Ġthe Ġtext Ġfrom Ġthe Ġhost ĊĠĠĠĠĠĠĠ Ġval Ġtxt Ġ= Ġthis . my Host . text . substring ( range Inside Host . start Offset , Ġrange Inside Host . end Offset ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmappings And Result Ġ= Ġaction Code Escape With Mappings ( txt , Ġeval Of Angle Br ackets Expression ) ĊĠĠĠĠĠĠĠ Ġmappings Ġ= Ġmappings And Result . first ĊĊĠĠĠĠĠĠĠ Ġ// Ġadd Ġthe Ġresult Ġstring Ġto Ġthe Ġbuilder ĊĠĠĠĠĠĠĠ Ġout Chars . append ( mappings And Result . second ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcan Ġnever Ġfail Ġso Ġjust Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Offset In Host ( offset In Decoded : ĠInt , Ġrange Inside Host : ĠText Range ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġlast Ġmapping Ġbefore Ġoffset In Decoded Ġin Ġthe Ġdecoded ( second Ġof Ġthe Ġpair ) ĊĠĠĠĠĠĠĠ Ġval Ġmapping Ġ= Ġmappings . find Last Ġ{ Ġit . target Range . start Offset Ġ< Ġoffset In Decoded Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġoffset In Decoded Ġ+ Ġrange Inside Host . start Offset ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( offset In Decoded Ġ< Ġmapping . target Range . end Offset ) ĊĠĠĠĠĠĠĠ Ġ// Ġinside Ġmapping , Ġreturn Ġindex Ġof Ġ`< ` Ġin Ġhost Ġrange ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmapping . source Range . start Offset Ġ+ Ġrange Inside Host . start Offset ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġ// Ġoutside Ġmapping ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffset In Decoded Ġ- Ġmapping . target Range . end Offset Ġ+ Ġmapping . source Range . end Offset Ġ+ Ġrange Inside Host . start Offset ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis One Line (): ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġget Re levant Text Range (): ĠText Range Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmy Host . code . text Range In Parent ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġlist Ġof Ġthe Ġmappings Ġwithin Ġ` this ` Ġfor Ġ` text ` Ġ(= Ġ"< >") Ġwhere Ġthe Ġ`< >` Ġshould Ġbe Ċ Ġ* Ġreplaced Ġby Ġ` replacement s `, Ġvia Ġthe Ġ" replacement " Ġfunction Ġdeclared Ġbelow Ġon Ġthe Ġ` replacement s ` Ġlist . Ċ Ġ* Ċ Ġ* Ġ@ param Ġtext Ġ"< >" Ċ Ġ* Ġ@ param Ġreplacement s ĠThe Ġlist Ġof Ġreplacement s ; Ġused Ġto Ġcompute Ġthe Ġfinal Ġlength Ġand Ġset Ġup Ġthe Ġranges Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġlist Ġof Ġmappings Ċ Ġ* Ċ Ġ* Ġ@ see ĠMapping Ċ Ġ* Ġ@ see Ġlength For Ċ Ġ*/ Ċ private Ġfun ĠString . findAll Mappings ( text : ĠString , Ġreplacement s : ĠList < Lp Selected Type >): ĠList < Mapping > Ġ{ ĊĠĠĠ Ġvar Ġprev Index Ġ= Ġ- text . length ĊĠĠĠ Ġvar Ġindex Ġ= ĠindexOf ( text ) ĊĠĠĠ Ġval Ġmappings Ġ= Ġmutable ListOf < Mapping >() ĊĠĠĠ Ġvar Ġdecoded Offset Ġ= Ġ 0 ĊĊĠĠĠ Ġwhile Ġ( index Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdecoded Start Ġ= Ġdecoded Offset Ġ+ Ġindex Ġ- Ġ( prev Index Ġ+ Ġtext . length ) ĊĠĠĠĠĠĠĠ Ġdecoded Offset Ġ= Ġdecoded Start Ġ+ Ġreplacement s . length For () ĊĠĠĠĠĠĠĠ Ġmappings . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMapping ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText Range ( index , Ġindex Ġ+ Ġtext . length ), ĠText Range ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecoded Start , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecoded Offset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġprev Index Ġ= Ġindex ĊĠĠĠĠĠĠĠ Ġindex Ġ= ĠindexOf ( text , Ġindex Ġ+ Ġtext . length ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġreturn Ġmappings Ċ } Ċ Ċ /** Ċ Ġ* ĠGiven Ġa Ġlist Ġof Ġselected Ġtypes , Ġfind Ġwhat Ġthe Ġ<> Ġshould Ġbe Ġreplaced Ġby . Ċ Ġ*/ Ċ private Ġfun ĠList < Lp Selected Type >. replacement (): ĠString Ġ= ĊĠĠĠ Ġmap Indexed Ġ{ Ġindex , Ġit Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠL p Selected Type . WithName Ġ-> Ġit . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠL p Selected Type . Without Name Ġ-> Ġindex . l al r pop No Name Parameter ByIndex ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. join ToString ( separator Ġ= Ġ", Ġ") Ċ Ċ /** Ċ Ġ* ĠFind Ġthe Ġlength Ġof Ġthe Ġreplacement Ġof Ġ< >, Ġin Ġa Ġgiven Ġlist Ġof Ġselected Ġsymbols . Ċ Ġ*/ Ċ private Ġfun ĠList < Lp Selected Type >. length For () Ġ= Ġreplacement (). length Ċ