/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . idea . intent ions Ċ Ċ import Ġcom . intellij . code Insight . int ention . Low Priority Action Ċ import Ġcom . intellij . openapi . editor . Editor Ċ import Ġcom . intellij . openapi . util . text . StringUtil Ċ import Ġorg . jetbrains . kotlin . idea . Kotlin Bundle Ċ import Ġorg . jetbrains . kotlin . idea . core . re placed Ċ import Ġorg . jetbrains . kotlin . idea . ins pe ctions . collections . is Calling Ċ import Ġorg . jetbrains . kotlin . name . Fq Name Ċ import Ġorg . jetbrains . kotlin . psi .* Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . end Offset Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . get Qualified Expression For Receiver Ċ import Ġorg . jetbrains . kotlin . psi . psi Util . start Offset Ċ Ċ class ĠTo Ord inary StringLiteral Int ention Ġ: ĠSelf Target ing Offset In dependent Int ention < Kt String Template Expression >( ĊĠĠĠ ĠK t String Template Expression :: class . java , ĊĠĠĠ ĠKotlin Bundle . lazy Message (" to . ord inary . string . literal ") Ċ ), ĠLow Priority Action Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTR IM _ IND ENT _ FUNCTION S Ġ= ĠlistOf ( Fq Name (" kotlin . text . trim Indent "), ĠF q Name (" kotlin . text . trim Margin ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Applicable To ( element : ĠK t String Template Expression ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġelement . text . startsWith ("\" \" \" ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġapply To ( element : ĠK t String Template Expression , Ġeditor : ĠEditor ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Offset Ġ= Ġelement . start Offset ĊĠĠĠĠĠĠĠ Ġval Ġend Offset Ġ= Ġelement . end Offset ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Offset Ġ= Ġeditor ?. caret Model ?. current Caret ?. offset Ġ?: Ġstart Offset ĊĊĠĠĠĠĠĠĠ Ġval Ġentries Ġ= Ġelement . entries ĊĠĠĠĠĠĠĠ Ġval Ġtrim Indent Call Ġ= Ġget Trim Indent Call ( element , Ġentries ) ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("\" ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( trim Indent Call Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( trim Indent Call . string Template Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries . join To ( buffer Ġ= Ġthis , Ġseparator Ġ= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠK t Literal String Template Entry ) Ġit . text . escape () Ġelse Ġit . text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("\" ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġreplaced Ġ= Ġ( trim Indent Call ?. qualified Expression Ġ?: Ġelement ). re placed ( Kt Psi Factory ( element ). create Expression ( text )) ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Offset Ġ- Ġstart Offset Ġ< Ġ 2 Ġ-> Ġstart Offset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ- Ġcurrent Offset Ġ< Ġ 2 Ġ-> Ġreplaced . end Offset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġmax Of ( current Offset Ġ- Ġ 2 , Ġreplaced . start Offset ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġeditor ?. caret Model ?. moveTo Offset ( offset ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠString . escape (): ĠString Ġ= ĠString Util . convert Line Separ ators ( ĊĠĠĠĠĠĠĠ Ġreplace ("\\ ", Ġ"\\ \ \" ). replace (" \"", Ġ"\\ \"" ), ĊĠĠĠĠĠĠĠ Ġ"\\ n " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġget Trim Indent Call ( ĊĠĠĠĠĠĠĠ Ġelement : ĠK t String Template Expression , ĊĠĠĠĠĠĠĠ Ġentries : ĠArray < Kt String Template Entry > ĊĠĠĠ Ġ): ĠTrim Indent Call ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġqualified Expression Ġ= Ġelement . get Qualified Expression For Receiver ()?. take If Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . call Expression ?. is Calling ( TRIM _ IND ENT _ FUNCTION S ) Ġ== Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġmargin Prefix Ġ= Ġif Ġ( qualified Expression . callee Name Ġ== Ġ" trim Margin ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġarg Ġ= Ġqualified Expression . call Expression ?. value Arguments ?. single OrNull ()?. get Argument Expression ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġ" |" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠK t String Template Expression Ġ-> Ġarg . entries . single OrNull ()?. take If Ġ{ Ġit Ġis ĠK t Literal String Template Entry Ġ} ?. text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġstring Template Text Ġ= Ġentries ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ( separator Ġ= Ġ"") Ġ{ Ġit . text Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġif Ġ( margin Prefix Ġ!= Ġnull ) Ġit . trim Margin ( margin Prefix ) Ġelse Ġit . trim Indent () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. escape () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠTrim Indent Call ( qualified Expression , Ġstring Template Text ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠTrim Indent Call ( ĊĠĠĠĠĠĠĠ Ġval Ġqualified Expression : ĠK t Qualified Expression , ĊĠĠĠĠĠĠĠ Ġval Ġstring Template Text : ĠString ĊĠĠĠ Ġ) Ċ }