package Ġio . github . lee 0 7 0 1 . converter . engine Ċ Ċ import Ġandroid . text . TextUtils Ċ import Ġio . github . lee 0 7 0 1 . converter . Character Set Ċ import Ġkotlin . math . abs Ċ Ċ data Ġclass ĠComp osing Text ( ĊĠĠĠ Ġval Ġtext : ĠCharSequence , ĊĠĠĠ Ġval Ġfrom : ĠInt , ĊĠĠĠ Ġval Ġto : ĠInt Ġ= Ġfrom , ĊĠĠĠ Ġval Ġun converted : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġconverted : ĠString Ġ= Ġ"" Ċ ) Ġ{ ĊĠĠĠ Ġval Ġcomp osing : ĠCharSequence Ġ= Ġtext . slice ( from Ġuntil Ġto ) ĊĠĠĠ Ġval Ġtext Before Cursor : ĠCharSequence Ġ= Ġtext . take ( to ) ĊĠĠĠ Ġval Ġtext After Cursor : ĠCharSequence Ġ= Ġtext . drop ( to ) ĊĠĠĠ Ġval Ġtext Before Comp osing : ĠCharSequence Ġ= Ġtext . take ( from ) ĊĊĠĠĠ Ġfun Ġtext Changed ( text : ĠCharSequence , Ġfrom Index : ĠInt , Ġadded Count : ĠInt , Ġremoved Count : ĠInt ): ĠComp osing Text Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadded Text Ġ= Ġtext . drop ( from Index ). take ( added Count ) ĊĠĠĠĠĠĠĠ Ġval Ġto Index Ġ= Ġfrom Index Ġ+ Ġadded Count ĊĊĠĠĠĠĠĠĠ Ġif ( added Text . isNotEmpty () Ġ&& Ġadded Text . all Ġ{ ĠCharacter Set . is Hang ul ( it ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( comp osing . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġcomp osing Ġtext Ġif Ġnot Ġexists ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComp osing Text ( text , Ġfrom Index , Ġto Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspace Index Ġ= Ġthis . comp osing . lastIndexOf Any ( char ArrayOf (' Ġ', Ġ'\ t ', Ġ'\ r ', Ġ'\ n ')) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfrom Ġ= Ġthis . from Ġ+ Ġif ( space Index Ġ> Ġ- 1 ) Ġspace Index Ġ+ Ġ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . copy ( text Ġ= Ġtext , Ġfrom Ġ= Ġfrom , Ġto Ġ= Ġto Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReset Ġcomp osing Ġif Ġnon - hang ul ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComp osing Text ( text , Ġto Index ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtext Selection Changed ( start : ĠInt , Ġend : ĠInt ): ĠComp osing Text Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( start Ġ== Ġ- 1 Ġ|| Ġend Ġ== Ġ- 1 ) Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġif ( start Ġ== Ġend Ġ&& Ġabs ( start Ġ- Ġthis . to ) Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComp osing Text ( this . text , Ġstart ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreplaced ( with : ĠString , Ġformat : ĠOutput Format ?): ĠComp osing Text Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreplace Ġ= Ġcomp osing . take ( with . length ) ĊĠĠĠĠĠĠĠ Ġval Ġformatted Ġ= Ġformat ?. getOutput ( with , Ġreplace ) Ġ?: Ġwith ĊĠĠĠĠĠĠĠ Ġval Ġlength Diff Ġ= Ġformatted . length Ġ- Ġwith . length ĊĠĠĠĠĠĠĠ Ġval Ġfull Text Ġ= ĠText Utils . concat ( text . take ( from ), Ġformatted , Ġcomp osing . drop ( with . length ), Ġtext . drop ( to )) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . copy ( text Ġ= Ġfull Text , Ġfrom Ġ= Ġfrom Ġ+ Ġformatted . length , Ġto Ġ= Ġto Ġ+ Ġlength Diff , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun converted Ġ= Ġun converted Ġ+ Ġreplace , Ġconverted Ġ= Ġconverted Ġ+ Ġwith ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinserted ( with : ĠCharSequence ): ĠComp osing Text Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfull Text Ġ= ĠText Utils . concat ( text Before Cursor , Ġwith , Ġtext After Cursor ) ĊĠĠĠĠĠĠĠ Ġreturn ĠComp osing Text ( full Text , Ġto Ġ+ Ġwith . length ) ĊĠĠĠ Ġ} Ċ Ċ }