/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 Ġy vol k Ġ( Y uri ĠVol kov ), Ġhttp :// y ur iv olk ov . com Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . and status . app . net . social Ċ Ċ import Ġandroid . net . Uri Ċ import Ġandroid . text . Sp ann able Ċ import Ġandroid . text . Sp ann able String Ċ import Ġorg . and status . app . account . My Account Ċ import Ġorg . and status . app . context . Demo Data Ċ import Ġorg . and status . app . context . TestSuite Ċ import Ġorg . and status . app . data . Parsed Uri Ċ import Ġorg . and status . app . data . Text MediaType Ċ import Ġorg . and status . app . origin . Origin Pump io Ċ import Ġorg . and status . app . timeline . meta . Timeline Ċ import Ġorg . and status . app . util . My Url Span Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Test Ċ import Ġjava . util .* Ċ import Ġjava . util . function . Function Ċ Ċ class ĠSpan Util Test Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠTest Suite . initialize With Accounts ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlink ify Plain Text () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġma : ĠMy Account Ġ= ĠDemo Data . demo Data . get My Account ( Demo Data . demo Data . conversation AccountName ) ĊĠĠĠĠĠĠĠ Ġval Ġaudience Ġ= ĠAud ience ( ma . origin ) ĊĠĠĠĠĠĠĠ Ġaudience . add ( ma . actor ) ĊĠĠĠĠĠĠĠ Ġval Ġunique Name 2 Ġ= Ġ" second @ ident i . ca " ĊĠĠĠĠĠĠĠ Ġadd Recipient ( ma , Ġaudience , Ġunique Name 2 , ĠOrigin Pump io . Companion . ACCOUNT _ PREFIX Ġ+ Ġunique Name 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġmodifier Ġ= ĠSpan Util . spans Modifier ( audience ) ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ" Hello Ġ@ ${ ma . actor . get Web F inger Id ()}. ĠThank Ġyou Ġfor Ġnot icing .\ n @ $ unique Name 2 " ĊĠĠĠĠĠĠĠ Ġval Ġsp ann able : ĠSp ann able Ġ= ĠSp ann able String . valueOf ( text ) ĊĠĠĠĠĠĠĠ Ġval Ġmodified Ġ= Ġmodifier . apply ( span nable ) ĊĠĠĠĠĠĠĠ Ġval Ġspans Ġ= Ġmodified . get Spans ( 0 , Ġmodified . length , ĠAny :: class . java ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Spans Ġcreated : Ġ" Ġ+ ĠArrays . toString ( spans ), Ġ 2 , Ġspans . size . to Long ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlink ify Html () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġma : ĠMy Account Ġ= ĠDemo Data . demo Data . get G nu Social Account () ĊĠĠĠĠĠĠĠ Ġval Ġaudience Ġ= ĠAud ience ( ma . origin ) ĊĠĠĠĠĠĠĠ Ġadd Recipient ( ma , Ġaudience , Ġ" john smith ", Ġ" 2 3 2 3 8 0 ") ĊĠĠĠĠĠĠĠ Ġval Ġusername 2 Ġ= Ġma . username ĊĠĠĠĠĠĠĠ Ġaudience . add ( ma . actor ) ĊĠĠĠĠĠĠĠ Ġval Ġmodifier Ġ= ĠSpan Util . spans Modifier ( audience ) ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"@ < span Ġclass =\" v card \">< a Ġhref =\" http :// micro . site . com / john smith \" Ġclass =\" url \"" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġtitle =\" john smith \">< span Ġclass =\" fn Ġnickname Ġmention \"> john smith </ span ></ a ></ span >" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ@ < span Ġclass =\" v card \">< a Ġhref =\" http :// micro . site . com /" Ġ+ Ġusername 2 Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\" Ġclass =\" url \" Ġtitle =\"" Ġ+ Ġusername 2 Ġ+ Ġ"\ ">" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< span Ġclass =\" fn Ġnickname Ġmention \"> " Ġ+ Ġusername 2 Ġ+ Ġ"</ span ></ a ></ span >" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠPlease Ġapply Ġyour Ġ# logic Ġ# ÐĽ Ð¾Ð³ Ð¸ ÐºÐ° Ġto Ġanother Ġsubject ." ĊĠĠĠĠĠĠĠ Ġval Ġsp ann able : ĠSp ann able Ġ= ĠMy Url Span . Companion . to Sp ann able ( text , ĠText MediaType . HTML , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġregions 1 Ġ= ĠSpan Util . regions Of ( span nable ) ĊĠĠĠĠĠĠĠ Ġval Ġmessage 1 Ġ= Ġ" Regions Ġbefore Ġchange : Ġ$ regions 1 " ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( message 1 , Ġ 3 , Ġregions 1 . size . to Long ()) ĊĠĠĠĠĠĠĠ Ġval Ġmodified Ġ= Ġmodifier . apply ( span nable ) ĊĠĠĠĠĠĠĠ Ġval Ġregions 2 Ġ= ĠSpan Util . regions Of ( span nable ) ĊĠĠĠĠĠĠĠ Ġval Ġspans Ġ= Ġmodified . get Spans ( 0 , Ġmodified . length , ĠAny :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġmessage 2 Ġ= Ġ"$ message 1 \ n Regions Ġafter Ġchange : Ġ$ regions 2 " ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( message 2 , Ġ 4 , Ġspans . size . to Long ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( message 2 , Ġ 6 , Ġregions 2 . size . to Long ()) ĊĠĠĠĠĠĠĠ Ġone Mention ( regions 2 , Ġmessage 2 , Ġ 0 , Ġ" john smith ") ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( message 2 , Ġ" content :// timeline . app . and status . org / note /" Ġ+ Ġma . actor . actor Id Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ lt / sent / origin / 0 / actor /" Ġ+ Ġma . actor . actor Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregions 2 [ 1 ]. url Span . get (). url ) ĊĠĠĠĠĠĠĠ Ġone Hash Tag ( regions 2 , Ġmessage 2 , Ġ 3 , Ġ" logic ") ĊĠĠĠĠĠĠĠ Ġone Hash Tag ( regions 2 , Ġmessage 2 , Ġ 4 , Ġ"# ÐĽ Ð¾Ð³ Ð¸ ÐºÐ° ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" content :// timeline . app . and status . org / note / 0 / lt / search / origin / 0 / actor / 0 / search /" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 2 3 % D 0 % 9 B % D 0 % BE % D 0 % B 3 % D 0 % B 8 % D 0 % BA % D 0 % B 0 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġone Mention ( regions : ĠList < Span Util . Region >, Ġmessage : ĠString , Ġindex : ĠInt , Ġusername : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġregion Ġ= Ġregions . get ( index ) ĊĠĠĠĠĠĠĠ Ġval Ġurl Span Ġ= Ġregion . url Span ĊĠĠĠĠĠĠĠ Ġval Ġactor Ġ= Ġurl Span . flatMap Ġ{ Ġu : ĠMy Url Span Ġ-> Ġu . data . actor Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġaccount To Sync Ġ= Ġactor . map Ġ{ Ġa : ĠActor Ġ-> Ġa . origin . my Context . accounts . to Sync That Actor ( a ) Ġ} ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue (" Region Ġ$ index Ġshould Ġbe Ġa Ġmention Ġ$ region \ n $ message ", Ġactor . isPresent ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Region Ġ$ index Ġ$ message ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" content :// timeline . app . and status . org / note /" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount To Sync . map Ġ{ Ġobj : ĠMy Account Ġ-> Ġobj . actor Id Ġ}. orElse ( 0 L ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ lt / sent / origin / 0 / actor / 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Span . map Ġ{ Ġobj : ĠMy Url Span Ġ-> Ġobj . get URL () Ġ}. orElse ("")) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Username Ġin Ġregion Ġ$ index Ġ$ message ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername . toUpperCase (), Ġactor . map Ġ{ Ġobj : ĠActor Ġ-> Ġobj . getUsername () Ġ}. orElse (" "). toUpperCase ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġone Hash Tag ( regions : ĠList < Span Util . Region >, Ġmessage : ĠString , Ġindex : ĠInt , Ġterm : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġone Hash Tag ( regions , Ġmessage , Ġindex , Ġ"# $ term ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" content :// timeline . app . and status . org / note / 0 / lt / search / origin / 0 / actor / 0 / search /% 2 3 $ term ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġone Hash Tag ( regions : ĠList < Span Util . Region >, Ġmessage : ĠString , Ġindex : ĠInt , Ġhash Tag : ĠString , Ġurl : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġregion Ġ= Ġregions . get ( index ) ĊĠĠĠĠĠĠĠ Ġval Ġurl Span Ġ= Ġregion . url Span ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Region Ġ$ index Ġshould Ġbe Ġa Ġhas ht ag Ġ$ region \ n $ message ", Ġhash Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Span . flatMap Ġ{ Ġu : ĠMy Url Span Ġ-> Ġu . data . search Query Ġ}. orElse ("")) ĊĠĠĠĠĠĠĠ Ġval Ġtimeline Ġ= Ġurl Span . map Ġ{ Ġu : ĠMy Url Span Ġ-> Ġu . data . getTime line () Ġ}. orElse ( Timeline . EMPTY ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( message , Ġhash Tag , Ġtimeline . get Search Query ()) ĊĠĠĠĠĠĠĠ Ġval ĠonClick Url Ġ= Ġurl Span . map Ġ{ Ġobj : ĠMy Url Span Ġ-> Ġobj . get URL () Ġ}. orElse ("") ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( message , Ġurl , ĠonClick Url ) ĊĠĠĠĠĠĠĠ Ġval Ġparsed Uri : ĠParsed Uri Ġ= ĠParsed Uri . Companion . from Uri ( Uri . parse ( onClick Url )) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ("$ parsed Uri \ n ${ timeline . toString () }", Ġhash Tag , Ġparsed Uri . search Query ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmany Has ht ags () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmodifier Ġ= ĠSpan Util . spans Modifier ( Audience . Companion . EMPTY ) ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ" As Ġsome body Ġsaid Ġthere Ġare Ġ 5 Ġ' grand Ġchallenges ' Ġto Ġstopping Ġf lood s ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġhur ric an es , Ġand Ġdro ught ĠĠĠ Ġhttps :// and status . org / some link " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ# Act On C limate Ġ# SR 1 5 Ġ# IP CC Ġ# 1 o 5 Ġ# A gr ic ulture Ġ# Electric ity " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ# . test non hasht ag " Ġ+ Ġ Ġ// ĠInvalid Ġhas ht ag ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ# transport ation Ġ Ġ# build ings Ġ Ġ# Man ufact uring " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ# s Ġ# 1 " Ġ+ Ġ Ġ// ĠValid Ġtesting Ġhas ht ags ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ# ÃŁ Clean Energy Ġ# GH G " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠÃ Ł Ġ# Zero Carbon " Ġ// Ġ" ÃŁ " ĠUpper Ġcase Ġis Ġ" SS " ĊĠĠĠĠĠĠĠ Ġval Ġsp ann able : ĠSp ann able Ġ= ĠMy Url Span . Companion . to Sp ann able ( text , ĠText MediaType . HTML , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġregions 1 Ġ= ĠSpan Util . regions Of ( span nable ) ĊĠĠĠĠĠĠĠ Ġval Ġmessage 1 Ġ= Ġ" Regions Ġbefore Ġchange : Ġ$ regions 1 " ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( message 1 , Ġ 3 , Ġregions 1 . size . to Long ()) ĊĠĠĠĠĠĠĠ Ġval Ġmodified Ġ= Ġmodifier . apply ( span nable ) ĊĠĠĠĠĠĠĠ Ġval Ġregions 2 Ġ= ĠSpan Util . regions Of ( modified ) ĊĠĠĠĠĠĠĠ Ġval Ġmessage 2 Ġ= Ġ"$ message 1 \ n Regions Ġafter Ġchange : Ġ$ regions 2 " ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Wrong Ġnumber Ġof Ġregions Ġbefore Ġchange \ n $ message 2 ", Ġ 3 , Ġregions 1 . size . to Long ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Wrong Ġnumber Ġof Ġregions Ġafter Ġchange \ n $ message 2 ", Ġ 1 8 , Ġregions 2 . size . to Long ()) ĊĠĠĠĠĠĠĠ Ġone Hash Tag ( regions 2 , Ġmessage 2 , Ġ 2 , Ġ" Act On C limate ") ĊĠĠĠĠĠĠĠ Ġone Hash Tag ( regions 2 , Ġmessage 2 , Ġ 3 , Ġ" SR 1 5 ") ĊĠĠĠĠĠĠĠ Ġone Hash Tag ( regions 2 , Ġmessage 2 , Ġ 4 , Ġ" IP CC ") ĊĠĠĠĠĠĠĠ Ġone Hash Tag ( regions 2 , Ġmessage 2 , Ġ 5 , Ġ" 1 o 5 ") ĊĠĠĠĠĠĠĠ Ġone Hash Tag ( regions 2 , Ġmessage 2 , Ġ 6 , Ġ" A gr ic ulture ") ĊĠĠĠĠĠĠĠ Ġone Hash Tag ( regions 2 , Ġmessage 2 , Ġ 7 , Ġ" Electric ity ") ĊĠĠĠĠĠĠĠ Ġnot A Hash Tag ( regions 2 , Ġmessage 2 , Ġ 8 ) ĊĠĠĠĠĠĠĠ Ġone Hash Tag ( regions 2 , Ġmessage 2 , Ġ 9 , Ġ" transport ation ") ĊĠĠĠĠĠĠĠ Ġone Hash Tag ( regions 2 , Ġmessage 2 , Ġ 1 0 , Ġ" build ings ") ĊĠĠĠĠĠĠĠ Ġone Hash Tag ( regions 2 , Ġmessage 2 , Ġ 1 1 , Ġ" Man ufact uring ") ĊĠĠĠĠĠĠĠ Ġone Hash Tag ( regions 2 , Ġmessage 2 , Ġ 1 2 , Ġ" s ") ĊĠĠĠĠĠĠĠ Ġone Hash Tag ( regions 2 , Ġmessage 2 , Ġ 1 3 , Ġ" 1 ") ĊĠĠĠĠĠĠĠ Ġone Hash Tag ( regions 2 , Ġmessage 2 , Ġ 1 4 , Ġ"# ÃŁ Clean Energy ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" content :// timeline . app . and status . org / note / 0 / lt / search / origin / 0 / actor / 0 / search /" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 2 3 % C 3 % 9 FC lean Energy ") ĊĠĠĠĠĠĠĠ Ġone Hash Tag ( regions 2 , Ġmessage 2 , Ġ 1 5 , Ġ" GH G ") ĊĠĠĠĠĠĠĠ Ġnot A Hash Tag ( regions 2 , Ġmessage 2 , Ġ 1 6 ) ĊĠĠĠĠĠĠĠ Ġone Hash Tag ( regions 2 , Ġmessage 2 , Ġ 1 7 , Ġ" Zero Carbon ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnot A Hash Tag ( regions : ĠList < Span Util . Region >, Ġmessage : ĠString , Ġindex : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġregion Ġ= Ġregions . get ( index ) ĊĠĠĠĠĠĠĠ Ġval Ġurl Span Ġ= Ġregion . url Span ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Region Ġ$ index Ġshould Ġnot Ġbe Ġa Ġhas ht ag Ġ$ region \ n $ message ", Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Span . flatMap Ġ{ Ġu : ĠMy Url Span Ġ-> Ġu . data . search Query Ġ}. orElse ("")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġurl With Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġma : ĠMy Account Ġ= ĠDemo Data . demo Data . get My Account ( Demo Data . demo Data . mast od on Test AccountName ) ĊĠĠĠĠĠĠĠ Ġval Ġaudience Ġ= ĠAud ience ( ma . origin ) ĊĠĠĠĠĠĠĠ Ġadd Recipient ( ma , Ġaudience , Ġ" ni Pos ", Ġ" 5 2 6 7 0 3 ") ĊĠĠĠĠĠĠĠ Ġadd Recipient ( ma , Ġaudience , Ġ" er 1 n ", Ġ" 1 8 1 3 8 8 ") ĊĠĠĠĠĠĠĠ Ġadd Recipient ( ma , Ġaudience , Ġ" switch ings ocial ", Ġ" 3 5 5 5 5 1 ") ĊĠĠĠĠĠĠĠ Ġval Ġmodifier Ġ= ĠSpan Util . spans Modifier ( audience ) ĊĠĠĠĠĠĠĠ Ġtext With Ment ions 1 ( modifier ) ĊĠĠĠĠĠĠĠ Ġtext With Ment ions 2 ( modifier ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtext With Ment ions 1 ( modifier : ĠFunction < Sp ann able , ĠSp ann able >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"< p >< span Ġclass =\" h - card \">< a Ġhref =\" https :// net zk om bin . at / users / nip os \" Ġclass =\" u - url Ġmention \"> " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"@ < span > nip os </ span ></ a ></ span > ĠUnfortunately , Ġ< a Ġhref =\" https :// mast od on . social / tags / mast od on \"" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġclass =\" mention Ġhas ht ag \" Ġrel =\" tag \"> # < span > M ast od on </ span ></ a > ĠAPI Ġuses Ġinstance - specific " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġidentifiers Ġ( just Ġlike Ġ< a Ġhref =\" https :// mast od on . social / tags / twitter \" Ġclass =\" mention Ġhas ht ag \"" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġrel =\" tag \"> # < span > Twitter </ span ></ a >, Ġwhich Ġ_ is _ Ġa Ġsingle Ġinstance Ġfrom Ġa Ġuser & apos ; s Ġpoint Ġof Ġview )," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġwhich Ġlocks Ġa Ġuser Ġto Ġthis Ġinstance . ĠLong Ġstory Ġis Ġstarting Ġfrom Ġthis Ġcomment :" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ< a Ġhref =\" https :// github . com / and status / and status / issues / 4 1 9 # issuecomment - 2 5 4 0 3 1 2 0 8 \"" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġrel =\" nofollow Ġnoop ener \" Ġtarget =\" _ blank \"> " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< span Ġclass =\" invisible \"> https :// </ span >< span Ġclass =\" ellipsis \"> github . com / and status / and status </ span >" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< span Ġclass =\" invisible \"> / issues / 4 1 9 # issuecomment - 2 5 4 0 3 1 2 0 8 </ span ></ a >< br Ġ/> " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< span Ġclass =\" h - card \"> " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< a Ġhref =\" https :// social . me can is . me /@ er 1 n \" Ġclass =\" u - url Ġmention \"> @ < span > er 1 n </ span ></ a ></ span >" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ< span Ġclass =\" h - card \">< a Ġhref =\" https :// mast od on . at /@ switch ings ocial \" Ġclass =\" u - url Ġmention \"> " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"@ < span > switch ings ocial </ span ></ a ></ span ></ p >" ĊĠĠĠĠĠĠĠ Ġval Ġsp ann able : ĠSp ann able Ġ= ĠMy Url Span . Companion . to Sp ann able ( text , ĠText MediaType . HTML , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġregions 1 Ġ= ĠSpan Util . regions Of ( span nable ) ĊĠĠĠĠĠĠĠ Ġval Ġmessage 1 Ġ= Ġ" Regions Ġbefore Ġchange : Ġ$ regions 1 " ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( message 1 , Ġ 9 , Ġregions 1 . size . to Long ()) ĊĠĠĠĠĠĠĠ Ġval Ġmodified Ġ= Ġmodifier . apply ( span nable ) ĊĠĠĠĠĠĠĠ Ġval Ġregions 2 Ġ= ĠSpan Util . regions Of ( modified ) ĊĠĠĠĠĠĠĠ Ġval Ġmessage 2 Ġ= Ġ"$ message 1 \ n Regions Ġafter Ġchange : Ġ$ regions 2 " ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Wrong Ġnumber Ġof Ġregions Ġafter Ġchange \ n $ message 2 ", Ġ 9 , Ġregions 2 . size . to Long ()) ĊĠĠĠĠĠĠĠ Ġone Mention ( regions 2 , Ġmessage 2 , Ġ 0 , Ġ" nip os ") ĊĠĠĠĠĠĠĠ Ġone Hash Tag ( regions 2 , Ġmessage 2 , Ġ 2 , Ġ" M ast od on ") ĊĠĠĠĠĠĠĠ Ġnot A Hash Tag ( regions 2 , Ġmessage 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġone Hash Tag ( regions 2 , Ġmessage 2 , Ġ 4 , Ġ" Twitter ") ĊĠĠĠĠĠĠĠ Ġnot A Hash Tag ( regions 2 , Ġmessage 2 , Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġnot A Hash Tag ( regions 2 , Ġmessage 2 , Ġ 6 ) ĊĠĠĠĠĠĠĠ Ġone Mention ( regions 2 , Ġmessage 2 , Ġ 7 , Ġ" er 1 n ") ĊĠĠĠĠĠĠĠ Ġone Mention ( regions 2 , Ġmessage 2 , Ġ 8 , Ġ" switch ings ocial ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtext With Ment ions 2 ( modifier : ĠFunction < Sp ann able , ĠSp ann able >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ" Same Ġmentions Ġ@ n I pos Ġbut Ġin Ġa Ġdifferent Ġcase ĠÃ Ł Ġ@ er 1 N " ĊĠĠĠĠĠĠĠ Ġval Ġsp ann able : ĠSp ann able Ġ= ĠMy Url Span . Companion . to Sp ann able ( text , ĠText MediaType . HTML , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġregions 1 Ġ= ĠSpan Util . regions Of ( span nable ) ĊĠĠĠĠĠĠĠ Ġval Ġmessage 1 Ġ= Ġ" Regions Ġbefore Ġchange : Ġ$ regions 1 " ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( message 1 , Ġ 1 , Ġregions 1 . size . to Long ()) ĊĠĠĠĠĠĠĠ Ġval Ġmodified Ġ= Ġmodifier . apply ( span nable ) ĊĠĠĠĠĠĠĠ Ġval Ġregions 2 Ġ= ĠSpan Util . regions Of ( modified ) ĊĠĠĠĠĠĠĠ Ġval Ġmessage 2 Ġ= Ġ"$ message 1 \ n Regions Ġafter Ġchange : Ġ$ regions 2 " ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Wrong Ġnumber Ġof Ġregions Ġafter Ġchange \ n $ message 2 ", Ġ 4 , Ġregions 2 . size . to Long ()) ĊĠĠĠĠĠĠĠ Ġnot A Hash Tag ( regions 2 , Ġmessage 2 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġone Mention ( regions 2 , Ġmessage 2 , Ġ 1 , Ġ" nip os ") ĊĠĠĠĠĠĠĠ Ġnot A Hash Tag ( regions 2 , Ġmessage 2 , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġone Mention ( regions 2 , Ġmessage 2 , Ġ 3 , Ġ" er 1 n ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstarting With Mention () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġma : ĠMy Account Ġ= ĠDemo Data . demo Data . get My Account ( Demo Data . demo Data . mast od on Test AccountName ) ĊĠĠĠĠĠĠĠ Ġval Ġaudience Ġ= ĠAud ience ( ma . origin ) ĊĠĠĠĠĠĠĠ Ġadd Recipient ( ma , Ġaudience , Ġ" And Status ", Ġ" 5 9 6 2 ") ĊĠĠĠĠĠĠĠ Ġadd Recipient ( ma , Ġaudience , Ġ" qw ert yst op ", Ġ" 3 2 9 4 3 1 ") ĊĠĠĠĠĠĠĠ Ġval Ġmodifier Ġ= ĠSpan Util . spans Modifier ( audience ) ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"@ < a Ġhref =\" https :// mast od on . social / users / And Status \" Ġclass =\" h - card Ġu - url Ġp - nickname Ġmention \" Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" rel =\" nofollow Ġnoop ener \" Ġtarget =\" _ blank \"> and status </ a > Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"@ < a Ġhref =\" https :// wand ering . shop / users / qw ert yst op \" Ġclass =\" h - card Ġu - url Ġp - nickname Ġmention \" Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" rel =\" nofollow Ġnoop ener \" Ġtarget =\" _ blank \"> qw ert yst op </ a > ĠWhich Ġis Ġhow Ġit Ġis Ġencoded Ġin Ġthe ĠXML . Ġ< br >" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ< br > ĠC W Ġshould Ġproperly Ġhave Ġbeen Ġimplemented Ġusing Ġeither Ġsome Ġnew Ġfield , Ġor Ġusing Ġin - line Ġstuff " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġlike Ġ#< span Ġclass =\" \">< a Ġhref =\" https :// social . ume ah acker space . se / tag / cw \" Ġrel =\" nofollow Ġnoop ener \"" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġtarget =\" _ blank \"> cw </ a ></ span > Ġ& lt ; foo & gt ; Ġon Ġthe Ġfirst Ġline ." ĊĠĠĠĠĠĠĠ Ġval Ġsp ann able : ĠSp ann able Ġ= ĠMy Url Span . Companion . to Sp ann able ( text , ĠText MediaType . HTML , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġregions 1 Ġ= ĠSpan Util . regions Of ( span nable ) ĊĠĠĠĠĠĠĠ Ġval Ġmessage 1 Ġ= Ġ" Regions Ġbefore Ġchange : Ġ$ regions 1 " ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( message 1 , Ġ 5 , Ġregions 1 . size . to Long ()) ĊĠĠĠĠĠĠĠ Ġval Ġmodified Ġ= Ġmodifier . apply ( span nable ) ĊĠĠĠĠĠĠĠ Ġval Ġregions 2 Ġ= ĠSpan Util . regions Of ( modified ) ĊĠĠĠĠĠĠĠ Ġval Ġmessage 2 Ġ= Ġ"$ message 1 \ n Regions Ġafter Ġchange : Ġ$ regions 2 " ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Wrong Ġnumber Ġof Ġregions Ġafter Ġchange \ n $ message 2 ", Ġ 5 , Ġregions 2 . size . to Long ()) ĊĠĠĠĠĠĠĠ Ġone Mention ( regions 2 , Ġmessage 2 , Ġ 0 , Ġ" and status ") ĊĠĠĠĠĠĠĠ Ġone Mention ( regions 2 , Ġmessage 2 , Ġ 1 , Ġ" qw ert yst op ") ĊĠĠĠĠĠĠĠ Ġnot A Hash Tag ( regions 2 , Ġmessage 2 , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġone Hash Tag ( regions 2 , Ġmessage 2 , Ġ 3 , Ġ" cw ") ĊĠĠĠĠĠĠĠ Ġnot A Hash Tag ( regions 2 , Ġmessage 2 , Ġ 4 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Recipient ( ma : ĠMy Account , Ġaudience : ĠAud ience , Ġunique Name : ĠString , Ġactor Oid : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactor 1 : ĠActor Ġ= ĠActor . Companion . from Oid ( ma . origin , Ġactor Oid ) ĊĠĠĠĠĠĠĠ Ġactor 1 . with Unique Name ( unique Name ) ĊĠĠĠĠĠĠĠ Ġaudience . add ( actor 1 ) ĊĠĠĠ Ġ} Ċ } Ċ