package Ġchat . rocket . android . helper Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Rect F Ċ import Ġandroid . text . Sp ann able Ċ import Ġandroid . text . Sp anned Ċ import Ġandroid . text . style . Clickable Span Ċ import Ġandroid . text . style . Image Span Ċ import Ġandroid . text . style . Replacement Span Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . content . res . Resources Compat Ċ import Ġchat . rocket . android . R Ċ import Ġchat . rocket . android . chat room . ui . Stri ke through Delimiter Processor Ċ import Ġchat . rocket . android . emoji . Emoji Parser Ċ import Ġchat . rocket . android . emoji . Emoji Repository Ċ import Ġchat . rocket . android . emoji . Emoji Type face Span Ċ import Ġchat . rocket . android . server . domain . Public Settings Ċ import Ġchat . rocket . android . server . domain . use Real Name Ċ import Ġchat . rocket . android . util . extensions . open Tabbed Url Ċ import Ġchat . rocket . common . model . Simple User Ċ import Ġchat . rocket . core . model . Message Ċ import Ġorg . common mark . Extension Ċ import Ġorg . common mark . ext . g fm . strikethrough . Stri ke through Extension Ċ import Ġorg . common mark . ext . g fm . tables . Tables Extension Ċ import Ġorg . common mark . node . Abstract Visitor Ċ import Ġorg . common mark . node . Document Ċ import Ġorg . common mark . node . Emp hasis Ċ import Ġorg . common mark . node . ListItem Ċ import Ġorg . common mark . node . Node Ċ import Ġorg . common mark . node . Order edList Ċ import Ġorg . common mark . node . Soft Line Break Ċ import Ġorg . common mark . node . Strong Emp hasis Ċ import Ġorg . common mark . parser . Parser Ċ import Ġru . not ies . mark won . Sp ann able Builder Ċ import Ġru . not ies . mark won . Sp ann able Configuration Ċ import Ġru . not ies . mark won . renderer . Sp ann able Markdown Visitor Ċ import Ġru . not ies . mark won . task list . TaskList Extension Ċ import Ġjava . util .* Ċ import Ġjava . util . regex . Pattern Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠMessage Parser Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠApplication , ĊĠĠĠ Ġprivate Ġval Ġconfiguration : ĠSp ann able Configuration , ĊĠĠĠ Ġprivate Ġval Ġsettings : ĠPublic Settings Ċ ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRender Ġmarkdown Ġand Ġother Ġrules Ġon Ġmessage Ġto Ġrich Ġtext Ġwith Ġspans . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmessage ĠThe Ġ[ Message ] Ġobject Ġwe 're Ġinterested Ġon Ġrendering . ĊĠĠĠĠ Ġ* Ġ@ param Ġself Username ĠThis Ġuser Ġusername . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠA ĠSp ann able Ġwith Ġthe Ġparsed Ġmarkdown . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrender ( message : ĠMessage , Ġself Username : ĠString ? Ġ= Ġnull ): ĠCharSequence Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtext : ĠString Ġ= Ġmessage . message ĊĠĠĠĠĠĠĠ Ġval Ġmentions Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠParser . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. extensions ( Arrays . asList < Extension >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStri ke through Extension . create (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTables Extension . create (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTask List Extension . create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. custom Delimiter Processor ( Stri ke through Delimiter Processor ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġmessage . mentions ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmention Ġ= Ġget Mention ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmentions . add ( mention ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . username Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext . replace ("@ ${ it . username }", Ġmention ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠSp ann able Builder () ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= ĠEmoji Repository . short name To Unicode ( text ) ĊĠĠĠĠĠĠĠ Ġval Ġparent Node Ġ= Ġparser . parse ( content ) ĊĊĠĠĠĠĠĠĠ Ġparent Node . accept ( Emp hasis Visitor ()) ĊĠĠĠĠĠĠĠ Ġparent Node . accept ( Strong Emp hasis Visitor ()) ĊĠĠĠĠĠĠĠ Ġparent Node . accept ( Markdown Visitor ( configuration , Ġbuilder )) ĊĠĠĠĠĠĠĠ Ġparent Node . accept ( Link Visitor ( builder )) ĊĠĠĠĠĠĠĠ Ġparent Node . accept ( Emoji Visitor ( context , Ġconfiguration , Ġbuilder )) ĊĊĠĠĠĠĠĠĠ Ġmessage . mentions ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Node . accept ( Mention Visitor ( context , Ġbuilder , Ġmentions , Ġself Username )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . text () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Mention ( user : ĠSimple User ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( settings . use Real Name ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . name Ġ?: Ġ"@ ${ user . username }" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"@ ${ user . username }" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠEmp hasis Visitor Ġ: ĠAbstract Visitor () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit ( emp hasis : ĠEmp hasis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( emp hasis . opening Delimiter Ġ== Ġ"*" Ġ&& Ġemp hasis . firstChild Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġemp hasis . firstChild ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstrong Emp hasis Ġ= ĠStr ong Emp hasis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstrong Emp hasis . appendChild ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemp hasis . insertBefore ( strong Emp hasis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemp hasis . unlink () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠStr ong Emp hasis Visitor Ġ: ĠAbstract Visitor () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit ( strong Emp hasis : ĠStr ong Emp hasis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( strong Emp hasis . opening Delimiter Ġ== Ġ"__ " Ġ&& Ġstrong Emp hasis . firstChild Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġstrong Emp hasis . firstChild ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġemp hasis Ġ= ĠEmp hasis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemp hasis . appendChild ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstrong Emp hasis . insertBefore ( emp hasis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstrong Emp hasis . unlink () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠM ention Visitor ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġbuilder : ĠSp ann able Builder , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmentions : ĠList < String >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠcurrentUser : ĠString ? ĊĠĠĠ Ġ) Ġ: ĠAbstract Visitor () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġothers TextColor Ġ= ĠResources Compat . getColor ( context . resources , ĠR . color . color Accent , Ġcontext . theme ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġothers BackgroundColor Ġ= ĠResources Compat . getColor ( context . resources , Ġandroid . R . color . transparent , Ġcontext . theme ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmyself TextColor Ġ= ĠResources Compat . getColor ( context . resources , ĠR . color . color White , Ġcontext . theme ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmyself BackgroundColor Ġ= ĠResources Compat . getColor ( context . resources , ĠR . color . color Accent , Ġcontext . theme ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpadding Ġ= Ġcontext . resources . get Dimension Pixel Size ( R . dim en . padding _ mention ). toFloat () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġradius Ġ= Ġcontext . resources . get Dimension Pixel Size ( R . dim en . radius _ mention ). toFloat () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit ( document : ĠDocument ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġbuilder . text () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoffset Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmentions . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmention Me Ġ= Ġit Ġ== Ġ"@ $ currentUser " Ġ|| Ġit Ġ== Ġ"@ all " Ġ|| Ġit Ġ== Ġ"@ here " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ= Ġtext . indexOf ( string Ġ= Ġit , ĠstartIndex Ġ= Ġoffset , Ġignore Case Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( offset Ġ> Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtextColor Ġ= Ġif Ġ( mention Me ) Ġmyself TextColor Ġelse Ġothers TextColor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠbackgroundColor Ġ= Ġif Ġ( mention Me ) Ġmyself BackgroundColor Ġelse Ġothers BackgroundColor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġusername Span Ġ= ĠM ention Span ( backgroundColor , ĠtextColor , Ġradius , Ġpadding , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmention Me ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġoffset Ġ+ Ġit . length ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Span ( username Span , Ġoffset , Ġend , ĠSp ann able . SPAN _ EXCL USIVE _ EXCL USIVE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ= Ġtext . indexOf ( string Ġ= Ġit , ĠstartIndex Ġ= Ġend , Ġignore Case Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠEmoji Visitor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġconfiguration : ĠSp ann able Configuration , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġbuilder : ĠSp ann able Builder ĊĠĠĠ Ġ) Ġ: ĠSp ann able Markdown Visitor ( configuration , Ġbuilder ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġemoji Size Ġ= Ġcontext . resources . get Dimension Pixel Size ( R . dim en . custom _ emoji _ small ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit ( document : ĠDocument ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsp ann able Ġ= ĠEmoji Parser . parse ( context , Ġbuilder . text ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( span nable Ġis ĠSp anned ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġemoji One Type face Spans Ġ= Ġsp ann able . get Spans ( 0 , Ġsp ann able . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEmoji Type face Span :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġemoji Image Spans Ġ= Ġsp ann able . get Spans ( 0 , Ġsp ann able . length , ĠImage Span :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemoji One Type face Spans . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Span ( it , Ġsp ann able . get Span Start ( it ), Ġsp ann able . get Span End ( it ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp anned . SPAN _ EXCL USIVE _ EXCL USIVE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemoji Image Spans . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . drawable ?. setBounds ( 0 , Ġ 0 , Ġemoji Size , Ġemoji Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Span ( it , Ġsp ann able . get Span Start ( it ), Ġsp ann able . get Span End ( it ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp anned . SPAN _ EXCL USIVE _ EXCL USIVE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠMarkdown Visitor ( ĊĠĠĠĠĠĠĠ Ġconfiguration : ĠSp ann able Configuration , ĊĠĠĠĠĠĠĠ Ġval Ġbuilder : ĠSp ann able Builder ĊĠĠĠ Ġ) Ġ: ĠSp ann able Markdown Visitor ( configuration , Ġbuilder ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠNO OP ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit ( ordered List : ĠOrder edList ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnumber Ġ= Ġorder edList . start Number ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelimiter Ġ= Ġorder edList . delimiter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnode : ĠNode ? Ġ= Ġorder edList . firstChild ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( node Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node Ġis ĠListItem ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Line () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ("$ number $ delimiter Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . visit Children ( node ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Line () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnumber ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode Ġ= Ġnode . next ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġnew Line () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( builder . isNotEmpty () Ġ&& Ġ'\ n ' Ġ!= Ġbuilder . last Char ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ('\ n ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit ( soft Line Break : ĠSoft Line Break ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . visit ( soft Line Break ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ("\ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠLink Visitor ( private Ġval Ġbuilder : ĠSp ann able Builder ) Ġ: ĠAbstract Visitor () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit ( document : ĠDocument ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReplace Ġall Ġurl Ġlinks Ġto Ġmarkdown Ġurl Ġsyntax . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatcher Ġ= ĠMessage Parser . WEB _ URL . matcher ( builder . text ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconsumed Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( matcher . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Ġ= Ġmatcher . group ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġskip Ġusername s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! link . startsWith ("@ ") Ġ&& Ġlink Ġ! in Ġconsumed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Span ( object Ġ: ĠClick able Span () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . open Tabbed Url ( link ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġmatcher . start ( 0 ), Ġmatcher . end ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed . add ( link ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠM ention Span ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠbackgroundColor : ĠInt , ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠtextColor : ĠInt , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġradius : ĠFloat , ĊĠĠĠĠĠĠĠ Ġpadding : ĠFloat , ĊĠĠĠĠĠĠĠ Ġrefer Self : ĠBoolean ĊĠĠĠ Ġ) Ġ: ĠRe placement Span () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpadding : ĠFloat Ġ= Ġif Ġ( refer Self ) Ġpadding Ġelse Ġ 0 F ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Size ( paint : ĠPaint , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext : ĠCharSequence , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfm : ĠPaint . Font Metrics Int ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( padding Ġ+ Ġpaint . measure Text ( text . sub Sequence ( start , Ġend ). toString ()) Ġ+ Ġpadding ). toInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdraw ( canvas : ĠCanvas , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext : ĠCharSequence , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint : ĠPaint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġpaint . measure Text ( text . sub Sequence ( start , Ġend ). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrect Ġ= ĠRect F ( x , Ġtop . toFloat (), Ġx Ġ+ Ġlength Ġ+ Ġpadding Ġ* Ġ 2 , Ġbottom . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . color Ġ= ĠbackgroundColor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Round Rect ( rect , Ġradius , Ġradius , Ġpaint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . color Ġ= ĠtextColor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ( text , Ġstart , Ġend , Ġx Ġ+ Ġpadding , Ġy . toFloat (), Ġpaint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRegular Ġexpression Ġto Ġmatch Ġall ĠI ANA Ġtop - level Ġdomains . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠList Ġaccurate Ġas Ġof Ġ 2 0 1 5 / 1 1 / 2 4 . Ġ ĠList Ġtaken Ġfrom : ĊĠĠĠĠĠĠĠĠ Ġ* Ġhttp :// data . iana . org / TL D / t lds - alpha - by - domain . txt ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġpattern Ġis Ġauto - generated Ġby Ġframeworks / ex / common / tools / make - iana - t ld - pattern . py ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠI ANA _ TOP _ LEVEL _ DOMAIN S Ġ= Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"( ? :" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"( ?: aaa | a arp | abb | ab bot t | ab og ado | academy | accent ure | account ant | account ants | aco | active " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| actor | ads | ad ult | ae g | a ero | a fl | agency | a ig | air force | air tel | all fin anz | als ace | am ica | am ster dam " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| android | ap art ments | app | apple | a quare lle | aram co | arch i | ar my | ar pa | arte | as ia | associ ates " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| att orn ey | auction | audio | auto | autos | ax a | azure | a [ c def gil mo q rst u wx z ]) " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: band | bank | bar | bar cel ona | bar cl ay card | bar cl ays | b arg ains | ba u haus | bay ern | bbc | bb va " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| bc n | beats | beer | b ent ley | ber lin | best | bet | bh art i | bible | bid | bi ke | bing | bing o | bio | biz | black " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| black f riday | bloom berg | blue | b ms | bm w | bn l | b np par ib as | bo ats | bom | bond | b oo | boot s | b out ique " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| br ades co | brid gest one | broad way | broker | bro ther | br us se ls | bud ape st | build | builders | business " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| buzz | b zh | b [ ab def gh ij mn or st vw yz ]) " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: cab | ca fe | cal | camera | camp | c ancer research | can on | ca pet own | capital | car | car avan | cards " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| care | care er | care ers | cars | cart ier | cas a | cash | cas ino | cat | c ater ing | cba | cb n | ceb | center | ce o " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| cern | cfa | cfd | ch anel | channel | chat | che ap | ch lo e | ch rist mas | chrome | ch urch | cip ri ani | cisco " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| cit ic | city | city e ats | claims | clean ing | click | clin ic | clo thing | cloud | club | club med | co ach " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| codes | coffee | col lege | co log ne | com | com mb ank | community | company | computer | com sec | cond os " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| construction | consult ing | contract ors | cook ing | cool | co op | cors ica | country | coup ons | courses " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| credit | credit card | credit union | cr icket | c rown | crs | cr u ises | csc | cu isin ella | c ym ru | cy ou | c [ ac df gh ik l mn or uvw xyz ]) " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: dab ur | dad | d ance | date | dating | d ats un | day | d clk | de als | degree | delivery | de ll | delta " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| dem ocr at | d ental | dent ist | de si | design | dev | di amon ds | diet | digital | direct | directory | discount " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| d np | docs | dog | do ha | domains | do os an | download | drive | dur ban | dv ag | d [ e jk moz ]) " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: earth | eat | edu | education | email | em er ck | energy | engine er | engineering | enter pri ses " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| ep son | equipment | ern i | es q | est ate | e uro vision | e us | events | ever bank | exchange | expert | ex posed " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| express | e [ ce gr stu ]) " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: f age | fail | fair wind s | fa ith | family | fan | f ans | farm | f ashion | feedback | f err ero | film " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| final | finance | financial | fir md ale | fish | fishing | fit | fitness | fl ights | fl or ist | flow ers | fl sm idth " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| fly | foo | foot ball | fore x | for sale | forum | foundation | f rl | f rog ans | fund | f urniture | fut bol | f yi " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| f [ ij km or ]) " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: gal | gallery | game | g arden | gb iz | g dn | ge a | gent | gent ing | g gee | gift | gif ts | g ives | g iving " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| glass | gle | global | glo bo | gmail | g mo | g mx | gold | gold point | g olf | goo | goog | google | gop | gov | gra inger " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| graphics | gr atis | green | g ri pe | group | g uc ci | gu ge | guide | gu it ars | guru | g [ ab def gh il m np q rst u wy ]) " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: h ambur g | hang out | haus | health care | help | here | her mes | hip hop | hit ach i | h iv | h ock ey | hold ings " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| holiday | home dep ot | home s | hon da | h orse | host | hosting | h ote les | hotmail | house | how | hs bc | hy und ai " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| h [ k mn rt u ]) " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: ibm | ic bc | ice | icu | if m | i inet | im mo | im mob ili en | ind ust ries | inf initi | info | ing | ink | institute " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| ins ure | int | international | invest ments | ip ir anga | ir ish | ist | istan bul | it au | iw c | i [ del m no q rst ]) " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: j ag uar | java | j cb | jet zt | j ew el ry | j lc | j ll | jobs | job urg | j prs | jue gos | j [ em op ]) " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: ka ufen | k ddi | k ia | kim | kin der | k itchen | ki wi | ko eln | kom ats u | k rd | k red | ky oto | k [ e gh im n pr wy z ]) " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: l aca ixa | l anc aster | land | land ro ver | las alle | lat | lat ro be | law | law yer | lds | lease | le cl erc " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| legal | lex us | lg bt | lia ison | l idl | life | l ifest yle | lighting | limited | li mo | lin de | link | live " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| lix il | loan | lo ans | lol | l ondon | lot te | lot to | love | l td | l td a | l up in | luxe | lux ury | l [ abc ik rst uv y ]) " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: mad rid | ma if | ma ison | man | management | m ango | market | marketing | mark ets | mar ri ott | mb a " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| media | meet | mel bo urne | meme | mem or ial | men | menu | me o | mi ami | microsoft | mil | mini | mma | mob i | mod a " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| moe | mo i | m om | mon ash | money | mont bl anc | m orm on | mort gage | mos cow | motor cycles | mov | movie | mov ist ar " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| m tn | m tp c | m tr | m use um | mut uelle | m [ ac de gh kl mnopqrst uvw xyz ]) " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: na dex | n ago ya | name | nav y | nec | net | net bank | network | ne ust ar | new | news | nexus | ngo | nh k " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| nico | ninja | n iss an | nok ia | n ra | n rw | nt t | ny c | n [ ace fg ilo pr uz ]) " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: obi | office | ok in awa | omega | one | ong | on l | online | oo o | oracle | orange | org | organ ic | os aka " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| ots uka | ov h | om )" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: page | pan era i | par is | partners | parts | party | pet | ph arm acy | phil ips | photo | photo graphy " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| photos | phys io | p ia get | p ics | pict et | pictures | ping | pink | p izza | place | play | play station | pl umb ing " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| plus | po hl | poker | por n | post | pr axi | press | pro | prod | production s | prof | properties | property " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| protection | pub | p [ aef gh kl mn rst wy ]) " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: qp on | que bec | qa )" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: r acing | re alt or | real ty | recipes | red | red stone | reh ab | re ise | re is en | re it | ren | rent | rent als " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| repair | report | re public an | rest | restaurant | review | reviews | rich | ric oh | rio | rip | ro cher | ro cks " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| ro de o | r svp | ru hr | run | r we | ry uk yu | r [ eos uw ]) " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: sa ar land | sak ura | sale | s amsung | sand vik | sand vik cor om ant | san of i | sap | sap o | sar l | sax o " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| s bs | sca | sc b | sch mid t | sch olar ships | school | sch ule | sch war z | science | sc or | s cot | seat | security " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| seek | s ener | services | se ven | se w | sex | se xy | sh ik sha | sh oes | show | sh ri ram | sing les | site | ski " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| sky | skype | sn cf | soc cer | social | software | so hu | solar | solutions | son y | so y | space | sp ie gel | spread bet ting " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| srl | st ada | star hub | stat o il | stc | st cgroup | stock hol m | studio | study | style | s ucks | supp lies " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| supply | support | surf | sur g ery | su z uki | sw atch | sw iss | sy dn ey | systems | s [ abc de gh ijkl mn ort uv xyz ]) " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: tab | ta ipe i | t ata mot ors | t atar | tat too | tax | tax i | team | tech | technology | tel | tele fon ica " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| tem ase k | ten nis | th d | the ater | the at re | tickets | ti enda | tips | t ires | ti rol | today | to ky o | tools " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| top | tor ay | to sh iba | to urs | town | toy ota | to ys | trade | trading | training | travel | trust | t ui | t [ cdf gh j kl mn ort vw z ]) " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: ub s | university | uno | u ol | u [ ag ks yz ]) " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: vac ations | v ana | ve gas | vent ures | vers icher ung | vet | via jes | video | v ill as | vin | vir gin " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| vision | v ista | v ist ap rint | v iva | v la and eren | vod ka | vote | v oting | v oto | voy age | v [ ace gin u ]) " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: w ales | w alter | wang | watch | web cam | website | wed | wed ding | we ir | wh os who | w ien | wiki | w illiam h ill " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| win | windows | wine | w me | work | works | world | w tc | w tf | w [ fs ]) " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?:\ u 0 3 b 5 \ u 0 3 bb |\ u 0 4 3 1 \ u 0 4 3 5 \ u 0 4 3 b |\ u 0 4 3 4 \ u 0 4 3 5 \ u 0 4 4 2 \ u 0 4 3 8 |\ u 0 4 3 a \ u 0 4 3 e \ u 0 4 3 c |\ u 0 4 3 c \ u 0 4 3 a \ u 0 4 3 4 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |\ u 0 4 3 c \ u 0 4 3 e \ u 0 4 3 d |\ u 0 4 3 c \ u 0 4 3 e \ u 0 4 4 1 \ u 0 4 3 a \ u 0 4 3 2 \ u 0 4 3 0 |\ u 0 4 3 e \ u 0 4 3 d \ u 0 4 3 b \ u 0 4 3 0 \ u 0 4 3 9 \ u 0 4 3 d " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |\ u 0 4 3 e \ u 0 4 4 0 \ u 0 4 3 3 |\ u 0 4 4 0 \ u 0 4 4 3 \ u 0 4 4 1 |\ u 0 4 4 0 \ u 0 4 4 4 |\ u 0 4 4 1 \ u 0 4 3 0 \ u 0 4 3 9 \ u 0 4 4 2 |\ u 0 4 4 1 \ u 0 4 4 0 \ u 0 4 3 1 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |\ u 0 4 4 3 \ u 0 4 3 a \ u 0 4 4 0 |\ u 0 4 9 b \ u 0 4 3 0 \ u 0 4 3 7 |\ u 0 5 7 0 \ u 0 5 6 1 \ u 0 5 7 5 |\ u 0 5 e 7 \ u 0 5 d 5 \ u 0 5 dd |\ u 0 6 2 7 \ u 0 6 3 1 \ u 0 6 2 7 \ u 0 6 4 5 \ u 0 6 4 3 \ u 0 6 4 8 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |\ u 0 6 2 7 \ u 0 6 4 4 \ u 0 6 2 7 \ u 0 6 3 1 \ u 0 6 2 f \ u 0 6 4 6 |\ u 0 6 2 7 \ u 0 6 4 4 \ u 0 6 2 c \ u 0 6 3 2 \ u 0 6 2 7 \ u 0 6 2 6 \ u 0 6 3 1 |\ u 0 6 2 7 \ u 0 6 4 4 \ u 0 6 3 3 \ u 0 6 3 9 \ u 0 6 4 8 \ u 0 6 2 f \ u 0 6 4 a \ u 0 6 2 9 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |\ u 0 6 2 7 \ u 0 6 4 4 \ u 0 6 4 5 \ u 0 6 3 a \ u 0 6 3 1 \ u 0 6 2 8 |\ u 0 6 2 7 \ u 0 6 4 5 \ u 0 6 2 7 \ u 0 6 3 1 \ u 0 6 2 7 \ u 0 6 2 a |\ u 0 6 2 7 \ u 0 6 cc \ u 0 6 3 1 \ u 0 6 2 7 \ u 0 6 4 6 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |\ u 0 6 2 8 \ u 0 6 2 7 \ u 0 6 3 2 \ u 0 6 2 7 \ u 0 6 3 1 |\ u 0 6 2 8 \ u 0 6 be \ u 0 6 2 7 \ u 0 6 3 1 \ u 0 6 2 a |\ u 0 6 2 a \ u 0 6 4 8 \ u 0 6 4 6 \ u 0 6 3 3 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |\ u 0 6 3 3 \ u 0 6 4 8 \ u 0 6 2 f \ u 0 6 2 7 \ u 0 6 4 6 |\ u 0 6 3 3 \ u 0 6 4 8 \ u 0 6 3 1 \ u 0 6 4 a \ u 0 6 2 9 |\ u 0 6 3 4 \ u 0 6 2 8 \ u 0 6 4 3 \ u 0 6 2 9 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |\ u 0 6 3 9 \ u 0 6 3 1 \ u 0 6 2 7 \ u 0 6 4 2 |\ u 0 6 3 9 \ u 0 6 4 5 \ u 0 6 2 7 \ u 0 6 4 6 |\ u 0 6 4 1 \ u 0 6 4 4 \ u 0 6 3 3 \ u 0 6 3 7 \ u 0 6 4 a \ u 0 6 4 6 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |\ u 0 6 4 2 \ u 0 6 3 7 \ u 0 6 3 1 |\ u 0 6 4 3 \ u 0 6 4 8 \ u 0 6 4 5 |\ u 0 6 4 5 \ u 0 6 3 5 \ u 0 6 3 1 |\ u 0 6 4 5 \ u 0 6 4 4 \ u 0 6 4 a \ u 0 6 3 3 \ u 0 6 4 a \ u 0 6 2 7 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |\ u 0 6 4 5 \ u 0 6 4 8 \ u 0 6 4 2 \ u 0 6 3 9 |\ u 0 9 1 5 \ u 0 9 4 9 \ u 0 9 2 e |\ u 0 9 2 8 \ u 0 9 4 7 \ u 0 9 1 f |\ u 0 9 2 d \ u 0 9 3 e \ u 0 9 3 0 \ u 0 9 2 4 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |\ u 0 9 3 8 \ u 0 9 0 2 \ u 0 9 1 7 \ u 0 9 2 0 \ u 0 9 2 8 |\ u 0 9 ad \ u 0 9 be \ u 0 9 b 0 \ u 0 9 a 4 |\ u 0 a 2 d \ u 0 a 3 e \ u 0 a 3 0 \ u 0 a 2 4 |\ u 0 aad \ u 0 abe \ u 0 ab 0 \ u 0 aa 4 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |\ u 0 b 8 7 \ u 0 ba 8 \ u 0 bcd \ u 0 ba 4 \ u 0 bbf \ u 0 baf \ u 0 bbe |\ u 0 b 8 7 \ u 0 bb 2 \ u 0 b 9 9 \ u 0 bcd \ u 0 b 9 5 \ u 0 bc 8 |\ u 0 b 9 a \ u 0 bbf \ u 0 b 9 9 \ u 0 bcd \ u 0 b 9 5 \ u 0 baa \ u 0 bcd \ u 0 baa \ u 0 bc 2 \ u 0 bb 0 \ u 0 bcd " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |\ u 0 c 2 d \ u 0 c 3 e \ u 0 c 3 0 \ u 0 c 2 4 \ u 0 c 4 d |\ u 0 dbd \ u 0 d 8 2 \ u 0 d 9 a \ u 0 dcf |\ u 0 e 0 4 \ u 0 e 2 d \ u 0 e 2 1 |\ u 0 e 4 4 \ u 0 e 1 7 \ u 0 e 2 2 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |\ u 1 0 d 2 \ u 1 0 d 4 |\ u 3 0 7 f \ u 3 0 9 3 \ u 3 0 6 a |\ u 3 0 b 0 \ u 3 0 fc \ u 3 0 b 0 \ u 3 0 eb |\ u 3 0 b 3 \ u 3 0 e 0 |\ u 4 e 1 6 \ u 7 5 4 c " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |\ u 4 e 2 d \ u 4 fe 1 |\ u 4 e 2 d \ u 5 6 fd |\ u 4 e 2 d \ u 5 7 0 b |\ u 4 e 2 d \ u 6 5 8 7 \ u 7 f 5 1 |\ u 4 f 0 1 \ u 4 e 1 a |\ u 4 f 5 b \ u 5 c 7 1 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |\ u 4 fe 1 \ u 6 0 6 f |\ u 5 0 6 5 \ u 5 eb 7 |\ u 5 1 6 b \ u 5 3 6 6 |\ u 5 1 6 c \ u 5 3 f 8 |\ u 5 1 6 c \ u 7 6 ca |\ u 5 3 f 0 \ u 6 e 7 e |\ u 5 3 f 0 \ u 7 0 6 3 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |\ u 5 5 4 6 \ u 5 7 ce |\ u 5 5 4 6 \ u 5 e 9 7 |\ u 5 5 4 6 \ u 6 8 0 7 |\ u 5 7 2 8 \ u 7 ebf |\ u 5 9 2 7 \ u 6 2 ff |\ u 5 a 3 1 \ u 4 e 5 0 |\ u 5 de 5 \ u 8 8 4 c " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |\ u 5 e 7 f \ u 4 e 1 c |\ u 6 1 4 8 \ u 5 5 8 4 |\ u 6 2 1 1 \ u 7 2 3 1 \ u 4 f 6 0 |\ u 6 2 4 b \ u 6 7 3 a |\ u 6 5 3 f \ u 5 2 a 1 |\ u 6 5 3 f \ u 5 e 9 c " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |\ u 6 5 b 0 \ u 5 2 a 0 \ u 5 7 6 1 |\ u 6 5 b 0 \ u 9 5 fb |\ u 6 5 f 6 \ u 5 c 1 a |\ u 6 7 3 a \ u 6 7 8 4 |\ u 6 de 1 \ u 9 a 6 c \ u 9 5 2 1 |\ u 6 e 3 8 \ u 6 2 0 f " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |\ u 7 0 b 9 \ u 7 7 0 b |\ u 7 9 fb \ u 5 2 a 8 |\ u 7 ec 4 \ u 7 ec 7 \ u 6 7 3 a \ u 6 7 8 4 |\ u 7 f 5 1 \ u 5 7 4 0 |\ u 7 f 5 1 \ u 5 e 9 7 |\ u 7 f 5 1 \ u 7 edc " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |\ u 8 c 3 7 \ u 6 b 4 c |\ u 9 6 c 6 \ u 5 6 e 2 |\ u 9 8 de \ u 5 2 2 9 \ u 6 d 6 6 |\ u 9 9 1 0 \ u 5 3 8 5 |\ u 9 9 9 9 \ u 6 e 2 f |\ ub 2 f 7 \ ub 1 3 7 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |\ ub 2 f 7 \ uce f 4 |\ uc 0 bc \ uc 1 3 1 |\ ud 5 5 c \ u ad 6 d | x box " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| xer ox | xin | xn \\ - \\ - 1 1 b 4 c 3 d | xn \\ - \\ - 1 qq w 2 3 a | xn \\ - \\ - 3 0 rr 7 y | xn \\ - \\ - 3 bst 0 0 m | xn \\ - \\ - 3 ds 4 4 3 g " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| xn \\ - \\ - 3 e 0 b 7 0 7 e | xn \\ - \\ - 3 px u 8 k | xn \\ - \\ - 4 2 c 2 d 9 a | xn \\ - \\ - 4 5 br j 9 c | xn \\ - \\ - 4 5 q 1 1 c | xn \\ - \\ - 4 gb rim " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| xn \\ - \\ - 5 5 qw 4 2 g | xn \\ - \\ - 5 5 qx 5 d | xn \\ - \\ - 6 fr z 8 2 g | xn \\ - \\ - 6 qq 9 8 6 b 3 xl | xn \\ - \\ - 8 0 ad xh ks " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| xn \\ - \\ - 8 0 ao 2 1 a | xn \\ - \\ - 8 0 ase h db | xn \\ - \\ - 8 0 as wg | xn \\ - \\ - 9 0 a 3 ac | xn \\ - \\ - 9 0 ais | xn \\ - \\ - 9 db q 2 a " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| xn \\ - \\ - 9 et 5 2 u | xn \\ - \\ - b 4 w 6 0 5 fer d | xn \\ - \\ - c 1 avg | xn \\ - \\ - c 2 br 7 g | xn \\ - \\ - cg 4 b ki | xn \\ - \\ - cl ch c 0 ea 0 b 2 g 2 a 9 gcd " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| xn \\ - \\ - cz r 6 9 4 b | xn \\ - \\ - cz rs 0 t | xn \\ - \\ - cz ru 2 d | xn \\ - \\ - d 1 ac j 3 b | xn \\ - \\ - d 1 alf | xn \\ - \\ - ef vy 8 8 h " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| xn \\ - \\ - est v 7 5 g | xn \\ - \\ - fh bei | xn \\ - \\ - fi q 2 2 8 c 5 hs | xn \\ - \\ - fi q 6 4 b | xn \\ - \\ - fi qs 8 s | xn \\ - \\ - fi qz 9 s " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| xn \\ - \\ - f jq 7 2 0 a | xn \\ - \\ - fl w 3 5 1 e | xn \\ - \\ - f pc rj 9 c 3 d | xn \\ - \\ - f zc 2 c 9 e 2 c | xn \\ - \\ - ge cr j 9 c " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| xn \\ - \\ - h 2 br j 9 c | xn \\ - \\ - h xt 8 1 4 e | xn \\ - \\ - i 1 b 6 b 1 a 6 a 2 e | xn \\ - \\ - im r 5 1 3 n | xn \\ - \\ - io 0 a 7 i " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| xn \\ - \\ - j 1 aef | xn \\ - \\ - j 1 am h | xn \\ - \\ - j 6 w 1 9 3 g | xn \\ - \\ - k cr x 7 7 d 1 x 4 a | xn \\ - \\ - k pr w 1 3 d | xn \\ - \\ - k pr y 5 7 d " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| xn \\ - \\ - k put 3 i | xn \\ - \\ - l 1 acc | xn \\ - \\ - lg bb at 1 ad 8 j | xn \\ - \\ - m gb 9 aw bf | xn \\ - \\ - mg ba 3 a 3 ej t " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| xn \\ - \\ - mg ba 3 a 4 f 1 6 a | xn \\ - \\ - mg ba am 7 a 8 h | xn \\ - \\ - m gb ab 2 bd | xn \\ - \\ - m gb ay h 7 g pa | xn \\ - \\ - mg bb h 1 a 7 1 e " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| xn \\ - \\ - mg bc 0 a 9 az cg | xn \\ - \\ - mg ber p 4 a 5 d 4 ar | xn \\ - \\ - m gb pl 2 fh | xn \\ - \\ - m gb tx 2 b | xn \\ - \\ - m gb x 4 cd 0 ab " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| xn \\ - \\ - mk 1 bu 4 4 c | xn \\ - \\ - m xt q 1 m | xn \\ - \\ - ng bc 5 az d | xn \\ - \\ - node | xn \\ - \\ - n qv 7 f | xn \\ - \\ - n qv 7 fs 0 0 ema " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| xn \\ - \\ - ny qy 2 6 a | xn \\ - \\ - o 3 cw 4 h | xn \\ - \\ - og b pf 8 fl | xn \\ - \\ - p 1 acf | xn \\ - \\ - p 1 ai | xn \\ - \\ - pg bs 0 dh " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| xn \\ - \\ - p ss y 2 u | xn \\ - \\ - q 9 j yb 4 c | xn \\ - \\ - q ck a 1 pmc | xn \\ - \\ - qx am | xn \\ - \\ - r hq v 9 6 g | xn \\ - \\ - s 9 br j 9 c " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| xn \\ - \\ - ses 5 5 4 g | xn \\ - \\ - t 6 0 b 5 6 a | xn \\ - \\ - t ck we | xn \\ - \\ - un up 4 y | xn \\ - \\ - ver mg ens ber ater \\ - ct b " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| xn \\ - \\ - ver mg ens ber at ung \\ - pw b | xn \\ - \\ - vh qu v | xn \\ - \\ - vu q 8 6 1 b | xn \\ - \\ - w gb h 1 c | xn \\ - \\ - wg bl 6 a " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| xn \\ - \\ - x hq 5 2 1 b | xn \\ - \\ - x kc 2 al 3 hy e 2 a | xn \\ - \\ - x kc 2 dl 3 a 5 ee 0 h | xn \\ - \\ - y 9 a 3 aq | xn \\ - \\ - yf ro 4 i 6 7 o " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"| xn \\ - \\ - y gb i 2 am mx | xn \\ - \\ - z fr 1 6 4 b | x per ia | xxx | xyz )" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: y acht s | y am ax un | yandex | y od ob ashi | y oga | y ok oh ama | youtube | y [ et ]) " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |( ?: z ara | zip | zone | z uer ich | z [ am w ])) ") ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRFC Ġ 3 4 9 2 Ġreferences ĠRFC Ġ 1 0 3 4 Ġand Ġlimits ĠP un y code Ġalgorithm Ġoutput Ġto Ġ 6 3 Ġcharacters . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠP UN Y CODE _ TL D Ġ= Ġ" xn \\ - \\ -[ \\ w \\ - ]{ 0 , 5 8 }\\ w " ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠValid ĠU CS Ġcharacters Ġdefined Ġin ĠRFC Ġ 3 9 8 7 . ĠExclude s Ġspace Ġcharacters . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠU CS _ CHAR Ġ= Ġ"[" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ u 0 0 A 0 -\ uD 7 FF " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ uF 9 0 0 -\ uF DC F " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ uF DF 0 -\ uFF EF " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ uD 8 0 0 \ u DC 0 0 -\ uD 8 3 F \ uD FFD " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ uD 8 4 0 \ u DC 0 0 -\ uD 8 7 F \ uD FFD " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ uD 8 8 0 \ u DC 0 0 -\ uD 8 BF \ uD FFD " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ uD 8 C 0 \ u DC 0 0 -\ uD 8 FF \ uD FFD " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ uD 9 0 0 \ u DC 0 0 -\ uD 9 3 F \ uD FFD " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ uD 9 4 0 \ u DC 0 0 -\ uD 9 7 F \ uD FFD " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ uD 9 8 0 \ u DC 0 0 -\ uD 9 BF \ uD FFD " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ uD 9 C 0 \ u DC 0 0 -\ uD 9 FF \ uD FFD " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ u DA 0 0 \ u DC 0 0 -\ u DA 3 F \ uD FFD " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ u DA 4 0 \ u DC 0 0 -\ u DA 7 F \ uD FFD " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ u DA 8 0 \ u DC 0 0 -\ uD AB F \ uD FFD " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ u DAC 0 \ u DC 0 0 -\ u DA FF \ uD FFD " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ u DB 0 0 \ u DC 0 0 -\ u DB 3 F \ uD FFD " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ u DB 4 4 \ u DC 0 0 -\ u DB 7 F \ uD FFD " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" && [^\ u 0 0 A 0 [\ u 2 0 0 0 -\ u 2 0 0 A ]\ u 2 0 2 8 \ u 2 0 2 9 \ u 2 0 2 F \ u 3 0 0 0 ]] " ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠValid Ġcharacters Ġfor ĠI RI Ġlabel Ġdefined Ġin ĠRFC Ġ 3 9 8 7 . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLABEL _ CHAR Ġ= Ġ" a - zA - Z 0 - 9 $ U CS _ CHAR " ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRFC Ġ 1 0 3 5 ĠSection Ġ 2 . 3 . 4 Ġlimits Ġthe Ġlabels Ġto Ġa Ġmaximum Ġ 6 3 Ġoct ets . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠI RI _ LABEL Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"[" Ġ+ ĠLABEL _ CHAR Ġ+ Ġ" ]( ?: [" Ġ+ ĠLABEL _ CHAR Ġ+ Ġ"_ \\ - ]{ 0 , 6 1 } [" Ġ+ ĠLABEL _ CHAR Ġ+ Ġ" ]){ 0 , 1 }" ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠIP _ ADDRESS Ġ= ĠPattern . compile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" (( 2 5 [ 0 - 5 ]| 2 [ 0 - 4 ][ 0 - 9 ] |[ 0 - 1 ][ 0 - 9 ]{ 2 } |[ 1 - 9 ][ 0 - 9 ] |[ 1 - 9 ]) \\ .( 2 5 [ 0 - 5 ]| 2 [ 0 - 4 ]" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"[ 0 - 9 ] |[ 0 - 1 ][ 0 - 9 ]{ 2 } |[ 1 - 9 ][ 0 - 9 ] |[ 1 - 9 ]| 0 )\\ .( 2 5 [ 0 - 5 ]| 2 [ 0 - 4 ][ 0 - 9 ] |[ 0 - 1 ]" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"[ 0 - 9 ]{ 2 } |[ 1 - 9 ][ 0 - 9 ] |[ 1 - 9 ]| 0 )\\ .( 2 5 [ 0 - 5 ]| 2 [ 0 - 4 ][ 0 - 9 ] |[ 0 - 1 ][ 0 - 9 ]{ 2 }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" |[ 1 - 9 ][ 0 - 9 ] |[ 0 - 9 ])) ") ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRegular Ġexpression Ġthat Ġmatches Ġdomain Ġnames Ġwithout Ġa ĠT LD ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠREL AX ED _ DOMAIN _ NAME Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"( ?: (?: $ IR I _ LABEL (?: \\ .( ?= \\ S )) ? )+ |$ IP _ ADDRESS )" ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠPROTO COL Ġ= Ġ"( ? i : http | https | rt sp ) ://" ĊĊĠĠĠĠĠĠĠ Ġ/* ĠA Ġword Ġboundary Ġor Ġend Ġof Ġinput . Ġ ĠThis Ġis Ġto Ġstop Ġfoo . sure Ġfrom Ġmatching Ġas Ġfoo . su Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠWORD _ BOUND ARY Ġ= Ġ"( ?: \\ b |$ | ^ )" ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠPORT _ NUMBER Ġ= Ġ"\\ :\\ d { 1 , 5 }" ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠPATH _ AND _ QUERY Ġ= Ġ(" [/ \\ ?]( ?: (?: [" Ġ+ ĠLABEL _ CHAR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" ;/ \\ ?: @ & =# ~ " Ġ Ġ// Ġplus Ġoptional Ġquery Ġparams ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"\\ - \\. \\ + ! \\ *' \\ (\\ ), _ \\ $ ]) |( ?: % [ a - fA - F 0 - 9 ]{ 2 })) * ") ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠUSER _ INFO Ġ= Ġ(" (?: [ a - zA - Z 0 - 9 \\ $ \\ - \\ _ \\. \\ + \\ ! \\ * \\ ' \\ (\\ )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"\\ , \\ ; \\ ? \\ & \\ = ] |( ?: \\ % [ a - fA - F 0 - 9 ]{ 2 } )){ 1 , 6 4 }( ?: \\ :( ?: [ a - zA - Z 0 - 9 \\ $ \\ - \\ _" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"\\ .\\ + \\ ! \\ * \\ ' \\ (\\ )\\ , \\ ; \\ ? \\ & \\ = ] |( ?: \\ % [ a - fA - F 0 - 9 ]{ 2 } )){ 1 , 2 5 }) ? \\ @ ") ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRegular Ġexpression Ġto Ġmatch Ġstrings Ġthat Ġstart Ġwith Ġa Ġsupported Ġprotocol . ĠRules Ġfor Ġdomain ĊĠĠĠĠĠĠĠĠ Ġ* Ġnames Ġand ĠT LD s Ġare Ġmore Ġrelax ed . ĠT LD s Ġare Ġoptional . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠWEB _ URL _ WITH _ PROTOCOL Ġ= Ġ(" (" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ĠWORD _ BOUND ARY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"( ? :" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"( ? :" Ġ+ ĠPROTO COL Ġ+ Ġ"( ? :" Ġ+ ĠUSER _ INFO Ġ+ Ġ" )? " Ġ+ Ġ")" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"( ? :" Ġ+ ĠREL AX ED _ DOMAIN _ NAME Ġ+ Ġ" )? " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"( ? :" Ġ+ ĠPORT _ NUMBER Ġ+ Ġ" )? " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ")" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"( ? :" Ġ+ ĠPATH _ AND _ QUERY Ġ+ Ġ" )? " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ĠWORD _ BOUND ARY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ") ") ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRegular Ġexpression Ġthat Ġmatches Ġknown ĠT LD s Ġand Ġp un y code ĠT LD s ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSTRICT _ TL D Ġ= Ġ"( ? :" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠI ANA _ TOP _ LEVEL _ DOMAIN S Ġ+ Ġ" |" Ġ+ ĠP UN Y CODE _ TL D Ġ+ Ġ")" ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSTRICT _ HOST _ NAME Ġ= Ġ(" (?: (? :" Ġ+ ĠI RI _ LABEL Ġ+ Ġ"\\ .) +" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ĠSTRICT _ TL D Ġ+ Ġ") ") ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSTRICT _ DOMAIN _ NAME Ġ= ĠPattern . compile (" (?: $ STRICT _ HOST _ NAME |$ IP _ ADDRESS )") ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRegular Ġexpression Ġto Ġmatch Ġstrings Ġthat Ġdo Ġnot Ġstart Ġwith Ġa Ġsupported Ġprotocol . ĠThe ĠT LD s ĊĠĠĠĠĠĠĠĠ Ġ* Ġare Ġexpected Ġto Ġbe Ġone Ġof Ġthe Ġknown ĠT LD s . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠWEB _ URL _ WITHOUT _ PROTOCOL Ġ= Ġ(" (" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ĠWORD _ BOUND ARY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"( ? <! :\\ / \\ /) " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"(" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"( ? :" Ġ+ ĠSTRICT _ DOMAIN _ NAME Ġ+ Ġ")" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"( ? :" Ġ+ ĠPORT _ NUMBER Ġ+ Ġ" )? " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ")" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ"( ? :" Ġ+ ĠPATH _ AND _ QUERY Ġ+ Ġ" )? " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ĠWORD _ BOUND ARY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ") ") ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRegular Ġexpression Ġpattern Ġto Ġmatch ĠIR Is . ĠIf Ġa Ġstring Ġstarts Ġwith Ġhttp ( s ) :// Ġthe Ġexpression ĊĠĠĠĠĠĠĠĠ Ġ* Ġtries Ġto Ġmatch Ġthe ĠURL Ġstructure Ġwith Ġa Ġrelax ed Ġrule Ġfor ĠT LD s . ĠIf Ġthe Ġstring Ġdoes Ġnot Ġstart ĊĠĠĠĠĠĠĠĠ Ġ* Ġwith Ġhttp ( s ) :// Ġthe ĠT LD s Ġare Ġexpected Ġto Ġbe Ġone Ġof Ġthe Ġknown ĠT LD s . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠB orrow ed Ġfrom Ġthe Ġ[ android x . core . util . Patterns Compat ] Ġsince Ġthis Ġregex Ġis Ġrestricted Ġto ĊĠĠĠĠĠĠĠĠ Ġ* Ġlibrary Ġand Ġthus , Ġbreaks Ġthe Ġlint . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠWEB _ URL Ġ= ĠPattern . compile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ($ WEB _ URL _ WITH _ PROTOCOL |$ WEB _ URL _ WITHOUT _ PROTOCOL )") ĊĠĠĠ Ġ} Ċ } Ċ