package Ġjp . j ug g ler . sub way to oter . api . entity čĊč Ċ import Ġjp . j ug g ler . sub way to oter . api . To ot Parser č Ċ import Ġjp . j ug g ler . sub way to oter . util . Miss key Markdown Decoder č Ċ import Ġjp . j ug g ler . util .* č Ċ import Ġorg . json . JSONArray č Ċ import Ġorg . json . JSONObject č Ċ import Ġjava . util . regex . Pattern čĊč Ċ open Ġclass ĠT oot Tag Ġconstructor ( čĊĉčĊ ĉ // ĠThe Ġhas ht ag , Ġnot Ġincluding Ġthe Ġpreceding Ġ# čĊ ĉ val Ġname Ġ: ĠString , čĊĉčĊ ĉ // ĠThe ĠURL Ġof Ġthe Ġhas ht ag . Ġmay Ġnull Ġif Ġgenerated Ġfrom ĠT oot Context čĊ ĉ val Ġurl Ġ: ĠString ? Ġ= Ġnull , čĊĉčĊ ĉ // ĠM ast od on Ġ/ api / v 2 / search Ġprovides Ġhistory . čĊ ĉ val Ġhistory Ġ: ĠArrayList < History >? Ġ= Ġnull čĊč Ċ ) Ġ: ĠTimeline Item () Ġ{ čĊĉčĊ ĉ val Ġcount Daily Ġ: ĠInt čĊ ĉ val Ġcount Week ly Ġ: ĠInt čĊ ĉ val Ġaccount Daily Ġ: ĠInt čĊ ĉ val Ġaccount Week ly Ġ: ĠInt čĊĉčĊ ĉ init Ġ{ čĊĉ ĉ count Daily Ġ= Ġhistory ?. first ()?. uses Ġ?: Ġ 0 čĊĉ ĉ count Week ly Ġ= Ġhistory ?. sum By Ġ{ Ġit . uses Ġ} Ġ?: Ġ 0 čĊĉĉčĊĉ ĉ account Daily Ġ= Ġhistory ?. first ()?. accounts Ġ?: Ġ 0 čĊĉ ĉ account Week ly Ġ= Ġhistory ?. map Ġ{ Ġit . accounts Ġ} ?. max () Ġ?: Ġaccount Daily čĊ ĉ } čĊĉčĊ ĉ class ĠHistory ( src Ġ: ĠJSONObject ) Ġ{ čĊĉ ĉ val Ġday Ġ: ĠLong čĊĉ ĉ val Ġuses Ġ: ĠInt čĊĉ ĉ val Ġaccounts Ġ: ĠInt čĊĉĉčĊĉ ĉ init Ġ{ čĊĉĉ ĉ day Ġ= Ġsrc . parse Long (" day ") čĊĉĉĉ ĉ ?: Ġthrow ĠRuntimeException (" To ot Trend Tag . History : Ġmissing Ġday ") čĊĉĉ ĉ uses Ġ= Ġsrc . parseInt (" uses ") čĊĉĉĉ ĉ ?: Ġthrow ĠRuntimeException (" To ot Trend Tag . History : Ġmissing Ġuses ") čĊĉĉ ĉ accounts Ġ= Ġsrc . parseInt (" accounts ") čĊĉĉĉ ĉ ?: Ġthrow ĠRuntimeException (" To ot Trend Tag . History : Ġmissing Ġaccounts ") čĊĉ ĉ } čĊĉĉčĊ ĉ } čĊĉčĊ ĉ // Ġfor ĠT RE ND _ TAG Ġcolumn čĊ ĉ constructor ( src Ġ: ĠJSONObject ) Ġ: Ġthis ( čĊĉ ĉ name Ġ= Ġsrc . not Empty OrThrow (" name "), čĊĉ ĉ url Ġ= Ġsrc . parse String (" url "), čĊĉ ĉ history Ġ= Ġparse Hist ories ( src . opt JSONArray (" history ")) čĊ ĉ ) čĊĉčĊ ĉ comp anion Ġobject Ġ{ čĊĉĉčĊĉ ĉ val Ġlog Ġ= ĠLog Category (" To ot Tag ") čĊĉĉčĊĉ ĉ private Ġfun Ġparse Hist ories ( src Ġ: ĠJSONArray ?) Ġ: ĠArrayList < History >? Ġ{ čĊĉĉ ĉ src Ġ?: Ġreturn Ġnull čĊĉĉĉčĊĉĉ ĉ val Ġdst Ġ= ĠArrayList < History >() čĊĉĉ ĉ for ( i Ġin Ġ 0 Ġuntil Ġsrc . length ()) Ġ{ čĊĉĉĉ ĉ try Ġ{ čĊĉĉĉĉ ĉ dst . add ( History ( src . opt JSONObject ( i ))) čĊĉĉĉ ĉ } Ġcatch ( ex Ġ: ĠThrowable ) Ġ{ čĊĉĉĉĉ ĉ log . e ( ex , Ġ" parse Hist ories Ġfailed .") čĊĉĉĉ ĉ } čĊĉĉ ĉ } čĊĉĉ ĉ return Ġdst čĊĉ ĉ } čĊĉĉčĊĉ ĉ fun Ġparse List ( parser Ġ: ĠT oot Parser , Ġarray Ġ: ĠJSONArray ?) Ġ: ĠArrayList < To ot Tag > Ġ{ čĊĉĉ ĉ val Ġresult Ġ= ĠArrayList < To ot Tag >() čĊĉĉ ĉ if ( array Ġ!= Ġnull ) Ġ{ čĊĉĉĉ ĉ if ( parser . service Type Ġ== ĠService Type . MIS S KEY ) Ġ{ čĊĉĉĉĉ ĉ for ( i Ġin Ġ 0 Ġuntil Ġarray . length ()) Ġ{ čĊĉĉĉĉĉ ĉ val Ġsv Ġ= Ġarray . parse String ( i ) čĊĉĉĉĉĉ ĉ if ( sv ?. isNotEmpty () Ġ== Ġtrue ) Ġ{ čĊĉĉĉĉĉĉ ĉ result . add ( To ot Tag ( name Ġ= Ġsv )) čĊĉĉĉĉĉ ĉ } čĊĉĉĉĉ ĉ } čĊĉĉĉ ĉ } Ġelse Ġ{ čĊĉĉĉĉ ĉ for ( i Ġin Ġ 0 Ġuntil Ġarray . length ()) Ġ{ čĊĉĉĉĉĉ ĉ val Ġtag Ġ= Ġtry Ġ{ čĊĉĉĉĉĉĉ ĉ when ( val Ġitem Ġ= Ġarray . opt ( i )) Ġ{ čĊĉĉĉĉĉĉĉ ĉ is ĠString Ġ-> Ġif ( item . isNotEmpty ()) Ġ{ čĊĉĉĉĉĉĉĉĉ ĉ To ot Tag ( name Ġ= Ġitem ) čĊĉĉĉĉĉĉĉ ĉ } Ġelse Ġ{ čĊĉĉĉĉĉĉĉĉ ĉ null čĊĉĉĉĉĉĉĉ ĉ } čĊĉĉĉĉĉĉĉ ĉ is ĠJSONObject Ġ-> ĠT oot Tag ( item ) čĊĉĉĉĉĉĉĉ ĉ else Ġ-> Ġnull čĊĉĉĉĉĉĉ ĉ } čĊĉĉĉĉĉ ĉ } Ġcatch ( ex Ġ: ĠThrowable ) Ġ{ čĊĉĉĉĉĉĉ ĉ log . w ( ex , Ġ" parse List : Ġparse Ġerror ") čĊĉĉĉĉĉĉ ĉ null čĊĉĉĉĉĉ ĉ } čĊĉĉĉĉĉ ĉ if ( tag Ġ!= Ġnull ) Ġresult . add ( tag ) čĊĉĉĉĉ ĉ } čĊĉĉĉ ĉ } čĊĉĉ ĉ } čĊĉĉ ĉ return Ġresult čĊĉ ĉ } čĊĉĉčĊĉ ĉ // Ġ\ p { L } Ġ: ĠãĤ¢ ãĥ« ãĥķãĤ ¡ ãĥĻ ãĥĥãĥĪ Ġ( Letter )ãĢĤ čĊĉ ĉ // Ġ ãĢĢ ãĢĢ Ll ( å°ı æĸĩåŃĹ ) ãĢģ Lm ( æĵ ¬ ä¼¼ æĸĩåŃĹ ) ãĢģ Lo ( ãģĿãģ® ä»ĸ ãģ® æĸĩåŃĹ ) ãĢģ Lt ( ãĤ¿ ãĤ¤ãĥĪ ãĥ« æĸĩåŃĹ ) ãĢģ Lu ( å¤§ æĸĩåŃĹ ãĤ¢ ãĥ« ãĥķãĤ ¡ ãĥĻ ãĥĥãĥĪ ) ãĤĴ åĲ« ãĤĢ čĊĉ ĉ // Ġ\ p { M } Ġ: Ġ è¨ĺ åı· Ġ( Mark ) čĊĉ ĉ // Ġ\ p { Nd } Ġ: Ġ 1 0 Ġ éĢ² æķ°åŃĹ Ġ( Decimal Ġnumber ) čĊĉ ĉ // Ġ\ p { Pc } Ġ: Ġ éĢ£ çµĲ çĶ¨ åı¥ èªŃ è¨ĺ åı· Ġ( Connector Ġpunctuation ) čĊĉĉčĊĉ ĉ // Ġruby ãģ® Ġ[: word :] Ġ ï¼ļ Ġ åįĺ èªŀ æ§ĭæĪĲ æĸĩåŃĹ Ġ( Letter Ġ| ĠMark Ġ| ĠDecimal _ Number Ġ| ĠConnector _ P unctuation ) čĊĉ ĉ private Ġconst Ġval Ġw Ġ= Ġ""" \ p { L }\ p { M }\ p { Nd }\ p { Pc } """ čĊĉĉčĊĉ ĉ // Ġruby ãģ® Ġ[: alpha :] Ġ: Ġ èĭ± åŃĹ Ġ( Letter Ġ| ĠMark ) čĊĉ ĉ private Ġconst Ġval Ġa Ġ= Ġ""" \ p { L }\ p { M } """ čĊĉĉčĊĉ ĉ // Ġ 2 0 1 9 / 7 / 2 0 Ġhttps :// github . com / to ot suite / mast od on / pull / 1 1 3 6 3 / files čĊĉ ĉ private Ġval Ġre Tag M ast od on Ġ: ĠPattern Ġ= čĊĉĉ ĉ Pattern . compile (""" (?: ^ |[ ^\ w )]) # ([ _$ w ][ Â· _$ w ]* [ Â· _$ a ][ Â· _$ w ]* [_ $ w ] |[ _$ w ]* [$ a ][ _$ w ]*) """) čĊĉĉčĊĉ ĉ // Ġhttps :// medium . com /@ alice / some - article #. abcdef 1 2 3 Ġ=> ĠãĤ ¿ ãĤ° ãģ«ãģª ãĤī ãģªãģĦ čĊĉ ĉ // Ġhttps :// en . wikipedia . org / wiki / Ghost b usters _( song )# L aws uit Ġ=> ĠãĤ ¿ ãĤ° ãģ«ãģª ãĤī ãģªãģĦ čĊĉ ĉ // Ġ# ï½ ģ ï½ ħ ï½ ĵ ï ½Ķ ï½ Ī ï½ ħ ï ½Ķ ï½ ī ï½ ĥ Ġ=> Ġ# ï½ ģ ï½ ħ ï½ ĵ ï ½Ķ ï½ Ī ï½ ħ ï ½Ķ ï½ ī ï½ ĥ čĊĉ ĉ // Ġ# 3 d Ġ=> Ġ# 3 d čĊĉ ĉ // Ġ# l 3 3 ts 3 5 k Ġ=> Ġ Ġ# l 3 3 ts 3 5 k čĊĉ ĉ // Ġ# world 2 0 1 6 Ġ=> Ġ# world 2 0 1 6 čĊĉ ĉ // Ġ# _ test Ġ=> Ġ# _ test čĊĉ ĉ // Ġ# test _ Ġ=> Ġ# test _ čĊĉ ĉ // Ġ# one Â· two Â· three Â· Ġ=> Ġ æľ« å°¾ ãģ® ãĥ» ãģ¯ ãĤ¿ ãĤ° ãģ« åĲ« ãģ¾ ãĤĮ ãģªãģĦ ãĢĤ # one Â· two Â· three Ġ ãģ¾ãģ§ ãģĮ ãĥı ãĥĥ ãĤ·ãĥ¥ ãĤ¿ ãĤ° ãģ« ãģªãĤĭ ãĢĤ čĊĉ ĉ // Ġ# 0 1 2 3 4 5 6 ' Ġ=> Ġ æķ°åŃĹ ãģłãģĳ ãģ® ãĥı ãĥĥ ãĤ·ãĥ¥ ãĤ¿ ãĤ° ãģ¯ ãĤ¿ ãĤ° ãģ¨ãģĹãģ¦ èªį èŃ ĺ ãģķãĤĮ ãģªãģĦ ãĢĤ čĊĉ ĉ // Ġ# 0 0 0 _ 0 0 0 Ġ=> Ġ èªį èŃ ĺ ãģķãĤĮãĤĭ ãĢĤ or ãģ® åīį åįĬ åĪĨ ãģĮ æ©Łèĥ½ ãģĹãģ¦ ãĤĭ ãĤī ãģĹãģĦ čĊĉ ĉ // čĊĉĉčĊĉ ĉ // ĠãĤ ¿ ãĤ° ãģ« ä½¿ ãģĪ ãģªãģĦ æĸĩåŃĹ čĊĉ ĉ // Ġ åħ¥åĬĽ è£ ľ å®Į çĶ¨ ãģª ãģ®ãģ§ ãĤĦ ãĤĦ ç· © ãĤģ čĊĉ ĉ private Ġval Ġre Chars Not Tag M ast od on Ġ= ĠPattern . compile (""" [^ Â· _$ w $ a ] """) čĊĉ ĉ private Ġval Ġre Chars Not Tag Miss key Ġ= ĠPattern . compile (""" [\ s ., ! ?' ${ '" '} :/ \ [\ ] ãĢĲ ãĢĳ ] """) čĊĉĉčĊĉ ĉ // Ġfind Ġhas ht ags Ġin Ġcontent Ġtext ( raw ) čĊĉ ĉ // Ġreturns Ġnull Ġif Ġhas ht ags Ġnot Ġfound , Ġor ĠArrayList Ġof ĠString Ġ( tag Ġwithout Ġ# ) čĊĉ ĉ fun Ġfind Has ht ags ( src Ġ: ĠString , Ġis Miss key Ġ: ĠBoolean ) Ġ: ĠArrayList < String >? Ġ= čĊĉĉ ĉ if ( is Miss key ) Ġ{ čĊĉĉĉ ĉ Miss key Markdown Decoder . find Has ht ags ( src ) čĊĉĉ ĉ } Ġelse Ġ{ čĊĉĉĉ ĉ var Ġresult Ġ: ĠArrayList < String >? Ġ= Ġnull čĊĉĉĉ ĉ val Ġm Ġ= Ġre Tag M ast od on . matcher ( src ) čĊĉĉĉ ĉ while ( m . find ()) Ġ{ čĊĉĉĉĉ ĉ if ( result Ġ== Ġnull ) Ġresult Ġ= ĠArrayList () čĊĉĉĉĉ ĉ result . add ( m . group Ex ( 1 ) Ġ!! ) čĊĉĉĉ ĉ } čĊĉĉĉ ĉ result čĊĉĉ ĉ } čĊĉĉčĊĉ ĉ fun ĠisValid ( src Ġ: ĠString , Ġis Miss key Ġ: ĠBoolean ) Ġ= čĊĉĉ ĉ if ( is Miss key ) Ġ{ čĊĉĉĉ ĉ ! Ġre Chars Not Tag Miss key . matcher ( src ). find () čĊĉĉ ĉ } Ġelse Ġ{ čĊĉĉĉ ĉ ! Ġre Chars Not Tag M ast od on . matcher ( src ). find () čĊĉĉ ĉ } čĊĉĉčĊĉ ĉ // Ġhttps :// mast od on . j ug g ler . jp / tags /% E 3 % 8 3 % 8 F % E 3 % 8 3 % 8 3 % E 3 % 8 2 % B 7 % E 3 % 8 3 % A 5 % E 3 % 8 2 % BF % E 3 % 8 2 % B 0 čĊĉ ĉ private Ġval Ġre Url Hash Tag Ġ= čĊĉĉ ĉ Pattern . compile (""" \ A https :// ([^ / ]+)/ tags / ([^ ? # ãĥ» \ s \- + ., : ;/ ]+ )( ?:\ z |[ ? # ]) """) čĊĉĉčĊĉ ĉ // Ġhttps :// pixel fed . to ky o / discover / tags / Sub way To oter ? src = hash čĊĉ ĉ private Ġval Ġre Url Hash Tag Pixel fed Ġ= čĊĉĉ ĉ Pattern . compile (""" \ A https :// ([^ / ]+)/ discover / tags / ([^ ? # ãĥ» \ s \- + ., : ;/ ]+ )( ?:\ z |[ ? # ]) """) čĊĉĉčĊĉ ĉ // Ġreturns Ġnull Ġor Ġpair Ġof Ġ( Ġdecoded Ġtag Ġwithout Ġsh arp , Ġhost ) čĊĉ ĉ fun ĠString . find Has ht ag From Url () Ġ: ĠPair < String , ĠString >? Ġ{ čĊĉĉ ĉ var Ġm Ġ= Ġre Url Hash Tag . matcher ( this ) čĊĉĉ ĉ if ( m . find ()) Ġ{ čĊĉĉĉ ĉ val Ġhost Ġ= Ġm . group Ex ( 1 ) Ġ!! čĊĉĉĉ ĉ val Ġtag Ġ= Ġm . group Ex ( 2 ) Ġ!! . decode Percent () čĊĉĉĉ ĉ return ĠPair ( tag , Ġhost ) čĊĉĉ ĉ } čĊĉĉĉčĊĉĉ ĉ m Ġ= Ġre Url Hash Tag Pixel fed . matcher ( this ) čĊĉĉ ĉ if ( m . find ()) Ġ{ čĊĉĉĉ ĉ val Ġhost Ġ= Ġm . group Ex ( 1 ) Ġ!! čĊĉĉĉ ĉ val Ġtag Ġ= Ġm . group Ex ( 2 ) Ġ!! . decode Percent () čĊĉĉĉ ĉ return ĠPair ( tag , Ġhost ) čĊĉĉ ĉ } čĊĉĉĉčĊĉĉ ĉ return Ġnull čĊĉ ĉ } čĊĉĉčĊ ĉ } č Ċ }