/* Ċ Ġ* ĠCopyright Ġ 2 0 0 0 - 2 0 1 5 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* Ġ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 Ġviews . editor Ċ Ċ import Ġkotlinx . html . classes Ċ import Ġkotlinx . html . dom . append Ċ import Ġkotlinx . html . js . div Ċ import Ġorg . w 3 c . dom . HTMLElement Ċ import Ġproviders . Completion Proposal Ċ import Ġutils . code mirror . Code Mirror Ċ import Ġutils . code mirror . Completion View Ċ import Ġutils . code mirror . Position Ċ Ċ internal Ġclass ĠCustom ized Completion View ( private Ġval Ġproposal : ĠCompletion Proposal ): ĠCompletion View Ġ{ ĊĠĠĠ Ġoverride Ġval Ġtext Ġ= Ġproposal . text ĊĠĠĠ Ġoverride Ġval Ġdisplay Text Ġ= Ġproposal . display Text ĊĊĠĠĠ Ġoverride Ġfun Ġrender ( element : ĠHTMLElement , Ġself : Ġdynamic , Ġdata : Ġdynamic ) Ġ{ ĊĠĠĠĠĠĠĠ Ġelement . append Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiv Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclasses Ġ= Ġset Of (" icon ", Ġproposal . icon ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiv Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ display Text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclasses Ġ= Ġset Of (" name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiv Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ proposal . tail ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclasses Ġ= Ġset Of (" tail ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhint ( cm : ĠCode Mirror , Ġself : Ġdynamic , Ġdata : Ġdynamic ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcur Ġ= Ġcm . get Cursor () ĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġcm . getToken At ( cm . get Cursor ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġfrom Ġ= ĠPosition ( cur . line , Ġtoken . start ) ĊĠĠĠĠĠĠĠ Ġvar Ġto Ġ= ĠPosition ( cur . line , Ġtoken . end ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(( token . string Ġ== Ġ". ") Ġ|| Ġ( token . string Ġ== Ġ" Ġ") Ġ|| Ġ( token . string Ġ== Ġ"(" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Insert Ġstring ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcm . replace Range ( text , Ġto ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor In String Index Ġ= Ġcur . ch Ġ- Ġtoken . start ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsentence Index Ġ= Ġtoken . string . substring ( 0 , Ġcursor In String Index ). lastIndexOf ('$ ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Sentence Ġ= Ġtoken . string . substring ( 0 , Ġsentence Index Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompletion Text Ġ= Ġfirst Sentence Ġ+ Ġtext Ġ+ Ġtoken . string . substring ( cursor In String Index , Ġtoken . string . length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcm . replace Range ( completion Text , Ġfrom , Ġto ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcm . set Cursor ( cur . line , Ġtoken . start Ġ+ Ġsentence Index Ġ+ Ġtext . length Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( text . endsWith (' (' )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcm . replace Range (" )", ĠPosition ( cur . line , Ġtoken . start Ġ+ Ġtext . length )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcm . exec Command (" go Char Left ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ