/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠBr ack ey s ĠIDE Ġcontributors . Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . br ack ey s . ui . edit ork it . internal Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroidx . core . text . Pre computed Text Compat Ċ import Ġcom . br ack ey s . ui . edit ork it . R Ċ import Ġcom . br ack ey s . ui . edit ork it . adapter . Suggestion Adapter Ċ import Ġcom . br ack ey s . ui . edit ork it . utils . Symbols Tokenizer Ċ Ċ abstract Ġclass ĠCode Suggest s EditText Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style Attr : ĠInt Ġ= ĠR . attr . auto Complete TextView Style Ċ ) Ġ: ĠAuto Indent EditText ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġvar Ġsuggestion Adapter : ĠSuggest ion Adapter ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġshow DropDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Popup Showing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Focus ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . show DropDown () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Size Changed ( w : ĠInt , Ġh : ĠInt , Ġold w : ĠInt , Ġold h : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Size Changed ( w , Ġh , Ġold w , Ġold h ) ĊĠĠĠĠĠĠĠ Ġif Ġ( editor Config . code Completion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon DropDown Size Change ( w , Ġh ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdo On TextChanged ( text : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . do On TextChanged ( text , Ġstart , Ġbefore , Ġcount ) ĊĠĠĠĠĠĠĠ Ġif Ġ( editor Config . code Completion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Popup Change Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconfigure () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . configure () ĊĠĠĠĠĠĠĠ Ġif Ġ( editor Config . code Completion ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Adapter ( suggestion Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Tokenizer ( Symbols Tokenizer ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Tokenizer ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcolor ize () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuggestion Adapter ?. color Scheme Ġ= Ġcolor Scheme ĊĠĠĠĠĠĠĠ Ġsuper . color ize () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Text Content ( text Params : ĠPre computed Text Compat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlanguage ?. get Provider ()?. clear Lines () ĊĠĠĠĠĠĠĠ Ġsuper . setText Content ( text Params ) ĊĠĠĠĠĠĠĠ Ġlanguage ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuggestion Adapter ?. set Suggestion Provider ( it . get Provider ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Line ( line Number : ĠInt , Ġline Start : ĠInt , Ġline Length : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . add Line ( line Number , Ġline Start , Ġline Length ) ĊĠĠĠĠĠĠĠ Ġlanguage ?. get Provider ()?. process Line ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlineNumber Ġ= ĠlineNumber , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext . substring ( line Start , Ġline Start Ġ+ Ġline Length ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Line ( line Number : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlanguage ?. get Provider ()?. delete Line ( lines . getIndex For Line ( line Number )) ĊĠĠĠĠĠĠĠ Ġsuper . remove Line ( line Number ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreplace Text ( new Start : ĠInt , Ġnew End : ĠInt , Ġnew Text : ĠCharSequence ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . replace Text ( new Start , Ġnew End , Ġnew Text ) ĊĠĠĠĠĠĠĠ Ġval Ġstart Line Ġ= Ġlines . getLine For Index ( new Start ) ĊĠĠĠĠĠĠĠ Ġval Ġend Line Ġ= Ġlines . getLine For Index ( new Text . length Ġ+ Ġnew Start ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( current Line Ġin Ġstart Line .. end Line ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Start Ġ= Ġget Index For Start Of Line ( current Line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline End Ġ= Ġget Index For EndOf Line ( current Line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line Start Ġ<= Ġline End Ġ&& Ġline End Ġ<= Ġtext . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlanguage ?. get Provider ()?. process Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlineNumber Ġ= Ġcurrent Line , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext . substring ( line Start , Ġline End ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon DropDown Size Change ( width : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdrop Down Width Ġ= Ġwidth Ġ* Ġ 1 Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġdrop Down Height Ġ= Ġheight Ġ* Ġ 1 Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġon Popup Change Position () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Popup Change Position () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( layout Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġlayout . getLine For Offset ( selection Start ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġlayout . get Primary Horizontal ( selection Start ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġlayout . getLine Baseline ( line ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Horizontal Ġ= Ġx Ġ+ Ġpadding Start ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrop Down Horizontal Offset Ġ= Ġoffset Horizontal . toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Vertical Ġ= Ġy Ġ- Ġscroll Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= Ġoffset Vertical Ġ+ Ġdrop Down Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrop Down Vertical Offset Ġ= Ġif Ġ( temp Ġ< Ġget Visible Height ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Vertical ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Vertical Ġ- Ġdrop Down Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Visible Height (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrect Ġ= ĠRect () ĊĠĠĠĠĠĠĠ Ġget Window Visible Display Frame ( rect ) ĊĠĠĠĠĠĠĠ Ġreturn Ġrect . bottom Ġ- Ġrect . top ĊĠĠĠ Ġ} Ċ }