package Ġclub . sk 1 er . element a . markdown . draw ables Ċ Ċ import Ġclub . sk 1 er . element a . components . UI Block Ċ import Ġclub . sk 1 er . element a . components . UI Rounded Rectangle Ċ import Ġclub . sk 1 er . element a . dsl . width Ċ import Ġclub . sk 1 er . element a . markdown . Draw State Ċ import Ġclub . sk 1 er . element a . markdown . Markdown Component Ċ import Ġclub . sk 1 er . element a . markdown . Markdown Config Ċ import Ġclub . sk 1 er . element a . markdown . selection . Text Cursor Ċ import Ġclub . sk 1 er . mods . core . universal . U Graphics Ċ import Ġclub . sk 1 er . mods . core . universal . UM ouse Ċ import Ġclub . sk 1 er . mods . core . universal . U Resolution Ċ Ċ class ĠText Drawable ( ĊĠĠĠ Ġmd : ĠMarkdown Component , ĊĠĠĠ Ġtext : ĠString , ĊĠĠĠ Ġval Ġstyle : ĠStyle Ċ ) Ġ: ĠDrawable ( md ) Ġ{ ĊĠĠĠ Ġ// ĠUsed Ġby ĠHeader Drawable ĊĠĠĠ Ġvar Ġscale Modifier Ġ= Ġ 1 f ĊĊĠĠĠ Ġvar Ġformatted Text : ĠString Ġ= Ġstyle . formatting Symbols Ġ+ Ġtext ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġ// ĠUsed Ġby Ġthe Ġselection ĠAPI Ġto Ġtell Ġthis ĠDrawable Ġhow Ġit Ġis ĊĠĠĠ Ġ// Ġselected . ĠThese Ġdo Ġnot Ġconsider Ġstyle Ġcharacters ĊĠĠĠ Ġvar Ġselection Start Ġ= Ġ- 1 ĊĠĠĠ Ġvar Ġselection End Ġ= Ġ- 1 ĊĊĠĠĠ Ġ// ĠUsed Ġto Ġstore Ġthe ĠText Ġclasses Ġto Ġrender Ġbetween Ġbefore Draw Ġand Ġdraw ĊĠĠĠ Ġprivate Ġvar Ġtexts Ġ= Ġmutable ListOf < Text >() ĊĊĠĠĠ Ġ// ĠStores Ġwhether Ġor Ġnot Ġthis Ġcomponent Ġis Ġhover ed ĊĠĠĠ Ġprivate Ġvar Ġis Hover ed Ġ= Ġfalse ĊĊĠĠĠ Ġ// ĠPop ulated Ġwith Ġany Ġtext Ġdraw ables Ġwhich Ġused Ġto Ġbe Ġpart Ġof Ġthis ĊĠĠĠ Ġ// Ġdrawable , Ġbut Ġwere Ġsplit Ġwith Ġa Ġcall Ġto Ġsplit (). ĠUsed Ġto Ġshow ĊĠĠĠ Ġ// Ġhover ed Ġlinks Ġacross Ġnewline Ġboundaries ĊĠĠĠ Ġvar Ġlinked Texts : ĠLinked Texts ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġplain Text () Ġ= Ġformatted Text . drop ( style . num Formatting Chars ) ĊĊĠĠĠ Ġfun Ġensure Trim med () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠWe Ġshouldn 't Ġmutate Ġformatted Text Ġhere , Ġbecause Ġthis Ġis Ġused ĊĠĠĠĠĠĠĠ Ġ// Ġcondition ally Ġbased Ġon Ġthe Ġposition Ġthis Ġtext Ġdrawable Ġ_ happ ens _ Ġto ĊĠĠĠĠĠĠĠ Ġ// Ġbe Ġrendered Ġin Ġits Ġparent ĠParagraph Drawable . ĠThis Ġmay Ġchange Ġif Ġthe ĊĠĠĠĠĠĠĠ Ġ// ĠMarkdown Component Ġre - layouts , Ġwhich Ġcan Ġhappen Ġat Ġany Ġtime . ĊĊĠĠĠĠĠĠĠ Ġval Ġstyle Chars Ġ= Ġstyle . num Formatting Chars ĊĠĠĠĠĠĠĠ Ġformatted Text Ġ= Ġformatted Text . substring ( 0 , Ġstyle Chars ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformatted Text . substring ( style Chars , Ġformatted Text . length ). trim Start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwidth () Ġ= Ġformatted Text . width ( scale Modifier ) Ġ+ Ġif Ġ( style . is Code ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig . inline Code Config . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . outline Width Ġ+ Ġit . horizontal Padding ) Ġ* Ġ 2 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ 0 f ĊĊĠĠĠ Ġ// ĠReturns Ġnull Ġif Ġthis Ġdrawable Ġcannot Ġbe Ġsplit Ġin Ġa Ġway Ġthat Ġdoesn 't ĊĠĠĠ Ġ// Ġbreak Ġa Ġword . ĠThis Ġmeans Ġthat Ġthe Ġdrawable Ġshould Ġjust Ġbe Ġdrawn Ġon ĊĠĠĠ Ġ// Ġthe Ġnext Ġline ĊĠĠĠ Ġfun Ġsplit ( maxWidth : ĠFloat , Ġbreak Words : ĠBoolean Ġ= Ġfalse ): ĠPair < Text Drawable , ĠText Drawable >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstyle Chars Ġ= Ġstyle . num Formatting Chars ĊĠĠĠĠĠĠĠ Ġval Ġplain Text Ġ= Ġplain Text () ĊĠĠĠĠĠĠĠ Ġif Ġ( plain Text . length Ġ<= Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġvar Ġsplit Point Ġ= Ġformatted Text . indices . drop ( style Chars ). first OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformatted Text . substring ( 0 , Ġit Ġ+ Ġ 1 ). width ( scale Modifier ) Ġ> ĠmaxWidth ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( split Point Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Text Drawable # split Ġcalled Ġwhen Ġit Ġshould Ġnot Ġhave Ġbeen Ġcalled ") ĊĊĠĠĠĠĠĠĠ Ġsplit Point Ġ= Ġsplit Point Ġ- Ġ 1 Ġ- Ġstyle Chars ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! break Words ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( split Point Ġ> Ġstyle Chars Ġ&& Ġformatted Text [ split Point Ġ- Ġ 1 ] Ġ!= Ġ' Ġ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Point -- ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( split Point Ġ== Ġstyle Chars ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfirst Ġ= ĠText Drawable ( md , Ġplain Text . substring ( 0 , Ġsplit Point ), Ġstyle ) ĊĠĠĠĠĠĠĠ Ġval Ġsecond Ġ= ĠText Drawable ( md , Ġplain Text . substring ( split Point , Ġplain Text . length ), Ġstyle ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlinked Texts Ġ= Ġthis . linked Texts ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġare Ġsplitting Ġthis Ġtext Ġdrawable , Ġso Ġin Ġeffect Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdrawable Ġno Ġlonger Ġ" exists ", Ġbecause Ġit Ġisn 't Ġrelevant . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTherefore Ġwe Ġremove Ġit Ġfrom Ġthis Ġlinked Ġtext Ġgroup ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . unlink Text ( this ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠLinked Texts () ĊĊĠĠĠĠĠĠĠ Ġlinked Texts . link Text ( first ) ĊĠĠĠĠĠĠĠ Ġlinked Texts . link Text ( second ) ĊĠĠĠĠĠĠĠ Ġfirst . linked Texts Ġ= Ġlinked Texts ĊĠĠĠĠĠĠĠ Ġsecond . linked Texts Ġ= Ġlinked Texts ĊĊĠĠĠĠĠĠĠ Ġfirst . scale Modifier Ġ= Ġscale Modifier ĊĠĠĠĠĠĠĠ Ġsecond . scale Modifier Ġ= Ġscale Modifier ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfirst Ġto Ġsecond ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlayout Impl ( x : ĠFloat , Ġy : ĠFloat , Ġwidth : ĠFloat ): ĠLayout Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLayout ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 9 f Ġ* Ġscale Modifier Ġ+ Ġif Ġ( style . is Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( config . inline Code Config . let Ġ{ Ġit . vertical Padding Ġ+ Ġit . outline Width Ġ}) Ġ* Ġ 2 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ 0 f ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbefore Draw ( state : ĠDraw State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtexts . clear () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( selection Start Ġ== Ġ- 1 Ġ&& Ġselection End Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexts . add ( Text ( formatted Text , Ġx , Ġy , Ġfalse )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( selection Start Ġ== Ġ- 1 Ġ|| Ġselection End Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġselection Start Ġ+ Ġstyle . num Formatting Chars ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġselection End Ġ+ Ġstyle . num Formatting Chars ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformat Chars Ġ= Ġformatted Text . substring ( 0 , Ġstyle . num Formatting Chars ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext X Ġ= Ġif Ġ( selection Start Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexts . add ( Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformatted Text . substring ( 0 , Ġstart ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ+ Ġformatted Text . substring ( 0 , Ġstart ). width ( scale Modifier ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġx ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected String Ġ= Ġformat Chars Ġ+ Ġformatted Text . substring ( start , Ġend ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexts . add ( Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected String , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( end Ġ< Ġformatted Text . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexts . add ( Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat Chars Ġ+ Ġformatted Text . substring ( end ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext X Ġ+ Ġselected String . width ( scale Modifier ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmouse X Ġ= ĠU Mouse . getS ca led X () Ġ- Ġstate . x Shift ĊĠĠĠĠĠĠĠ Ġval ĠmouseY Ġ= ĠU Resolution . scaled Height Ġ- ĠU Mouse . getS ca led Y () Ġ- Ġstate . y Shift ĊĠĠĠĠĠĠĠ Ġis Hover ed Ġ= Ġif Ġ( style . link Location Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Hover ed ( mouse X . toFloat (), ĠmouseY . toFloat ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdraw ( state : ĠDraw State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhover ed Ġ= Ġis Hover ed Ġ|| Ġ( linked Texts ?. is Hover ed () Ġ?: Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( style . is Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 1 Ġ= Ġx Ġ+ Ġstate . x Shift ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy 1 Ġ= Ġy Ġ+ Ġstate . y Shift Ġ- Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 2 Ġ= Ġx 1 Ġ+ Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy 2 Ġ= Ġy 1 Ġ+ Ġheight Ġ+ Ġconfig . inline Code Config . vertical Padding Ġ* Ġ 2 Ġ- Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutline Width Ġ= Ġconfig . inline Code Config . outline Width ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠU IR o unded Rectangle . draw Rounded Rectangle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . inline Code Config . corner Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . inline Code Config . outline Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠU IR o unded Rectangle . draw Rounded Rectangle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx 1 Ġ+ Ġoutline Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy 1 Ġ+ Ġoutline Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx 2 Ġ- Ġoutline Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy 2 Ġ- Ġoutline Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . inline Code Config . corner Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . inline Code Config . backgroundColor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġx Shift Ġ= Ġstate . x Shift Ġ+ Ġif Ġ( style . is Code ) Ġconfig . inline Code Config . horizontal Padding Ġelse Ġ 0 f ĊĠĠĠĠĠĠĠ Ġval Ġy Shift Ġ= Ġstate . y Shift Ġ+ Ġif Ġ( style . is Code ) Ġconfig . inline Code Config . vertical Padding Ġelse Ġ 0 f ĊĊĠĠĠĠĠĠĠ Ġtexts . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠU Graphics . scale ( scale Modifier , Ġscale Modifier , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw String ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . string , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . x Ġ+ Ġx Shift ) Ġ/ Ġscale Modifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . y Ġ+ Ġy Shift ) Ġ/ Ġscale Modifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . selected , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . link Location Ġ!= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhover ed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠU Graphics . scale ( 1 f Ġ/ Ġscale Modifier , Ġ 1 f Ġ/ Ġscale Modifier , Ġ 1 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠText ( ĊĠĠĠĠĠĠĠ Ġval Ġstring : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġx : ĠFloat , ĊĠĠĠĠĠĠĠ Ġval Ġy : ĠFloat , ĊĠĠĠĠĠĠĠ Ġval Ġselected : ĠBoolean ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ// ĠText Drawable Ġmouse Ġselection Ġis Ġmanaged Ġby ĠParagraph Drawable # select ĊĠĠĠ Ġoverride Ġfun Ġcursor At ( mouse X : ĠFloat , ĠmouseY : ĠFloat , Ġdrag ged : ĠBoolean ) Ġ= Ġthrow ĠIllegalStateException (" never Ġcalled ") ĊĊĠĠĠ Ġoverride Ġfun Ġcursor At Start () Ġ= ĠText Cursor ( this , Ġ 0 ) ĊĠĠĠ Ġoverride Ġfun Ġcursor At End () Ġ= ĠText Cursor ( this , Ġplain Text (). length ) ĊĊĠĠĠ Ġoverride Ġfun Ġselected Text ( as Markdown : ĠBoolean ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( selection Start Ġ== Ġ- 1 Ġ|| Ġselection End Ġ== Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĊĠĠĠĠĠĠĠ Ġval Ġselected Text Ġ= Ġplain Text (). substring ( selection Start , Ġselection End ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! as Markdown ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġselected Text ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ"${ style . markdown Symbols }$ selected Text ${ style . markdown Symbols }" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġformatted Text ĊĊĠĠĠ Ġclass ĠLinked Texts Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtexts Ġ= Ġmutable Set Of < Text Drawable >() ĊĊĠĠĠĠĠĠĠ Ġfun Ġis Hover ed () Ġ= Ġtexts . any Ġ{ Ġit . is Hover ed Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġlink Text ( text : ĠText Drawable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexts . add ( text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġunlink Text ( text : ĠText Drawable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexts . remove ( text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġmerge ( linked 1 : ĠLinked Texts ?, Ġlinked 2 : ĠLinked Texts ?): ĠLinked Texts Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlinked 1 Ġ== Ġnull Ġ&& Ġlinked 2 Ġ== Ġnull Ġ-> ĠLinked Texts () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlinked 1 Ġ== Ġnull Ġ-> Ġlinked 2 !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlinked 2 Ġ== Ġnull Ġ-> Ġlinked 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlinked 2 . texts . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlinked 1 . link Text ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlinked 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠStyle ( ĊĠĠĠĠĠĠĠ Ġval Ġis Bold : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġval Ġis Italic : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġval Ġis Stri ke through : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġval Ġis Underline : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġval Ġis Code : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġval Ġlink Location : ĠString ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġformatting Symbols Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ build String ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Bold ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Â§ l ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Italic ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Â§ o ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Stri ke through ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Â§ m ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Underline ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Â§ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmarkdown Symbols Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ` ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Bold ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ** ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Italic ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("* ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Stri ke through ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ~~ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Underline ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ++ ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnum Formatting Chars : ĠInt Ġget () Ġ= Ġformatting Symbols . length ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠEMPTY Ġ= ĠStyle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Bold Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Italic Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Stri ke through Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Underline Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Code Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlink Location Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġdraw String ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig : ĠMarkdown Config , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstring : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Link : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Hover ed : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUI Block . draw Block Sized ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . text Config . selection BackgroundColor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring . width (). toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 9 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġforeground Color Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Link Ġ-> Ġconfig . text Config . link Color . rgb ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Ġ-> Ġconfig . text Config . selection ForegroundColor . rgb ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġconfig . text Config . color . rgb ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( config . text Config . has Shadow ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠU Graphics . draw String ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforeground Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . text Config . shadow Color . rgb ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠU Graphics . draw String ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforeground Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Link Ġ&& Ġis Hover ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUI Block . draw Block Sized ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . text Config . link Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy . toDouble () Ġ+ Ġ 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring . width (). toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ