package Ġtool . xf y 9 3 2 6 . schedule . content . adapters . parser Ċ Ċ import Ġlib . xf y 9 3 2 6 . kit . EMPTY Ċ import Ġlib . xf y 9 3 2 6 . kit . cast Ċ import Ġorg . json . JSONObject Ċ import Ġtool . xf y 9 3 2 6 . schedule . beans . Course Ċ import Ġtool . xf y 9 3 2 6 . schedule . beans . Course Time Ċ import Ġtool . xf y 9 3 2 6 . schedule . beans . Schedule Time Ċ import Ġtool . xf y 9 3 2 6 . schedule . beans . Week Day Ċ import Ġtool . xf y 9 3 2 6 . schedule . content . base . Network Course Parser Ċ import Ġtool . xf y 9 3 2 6 . schedule . content . utils . Course Parse Result Ċ Ċ class ĠA H ST U Course Parser Ġ: ĠNetwork Course Parser < Nothing >() Ġ{ ĊĠĠĠ Ġ@ Suppress (" RegExp Red undant Escape ") ĊĠĠĠ Ġprivate Ġval Ġpattern Teacher Ġ= Ġ"\\ [ \\ { id :\\ d +, name :\" (.* ? )\ ", lab :( false | true )\\ }\\ ]; ". to Regex () ĊĠĠĠ Ġprivate Ġval Ġpattern Course Info Ġ= Ġ" act Teacher Name . join \\ (',' \\ ), \" (.* ? )\ ", \" (.* ? )\ ", \" .*? \",\" (.* ? )\ ", \" (.* ? )\ ", .*? assistant Name ,\" .*? \",\" (.* ? )\ "" . to Regex () ĊĠĠĠ Ġprivate Ġval Ġpattern Day Ġ= Ġ"( \\ d +) \\ *[ \\ s ]* unit Count [ \\ s ]* \\ +( \\ d +) ". to Regex () ĊĊĠĠĠ Ġ@ Suppress (" RegExp Red undant Escape ") ĊĠĠĠ Ġprivate Ġval Ġsplit Regex Ġ= Ġ" var \\ s * te achers \\ s *= \\ s * \\ [ .*? \\ ]; ". to Regex () ĊĊĠĠĠ Ġoverride Ġfun Ġon Parse Schedule Times ( import Option : ĠInt , Ġcontent : ĠString ?) Ġ= ĊĠĠĠĠĠĠĠ ĠSchedule Time . listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 8 , Ġ 0 , Ġ 8 , Ġ 4 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 8 , Ġ 5 5 , Ġ 9 , Ġ 4 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 , Ġ 0 , Ġ 1 0 , Ġ 4 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 , Ġ 5 5 , Ġ 1 1 , Ġ 4 0 , ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 4 , Ġ 0 , Ġ 1 4 , Ġ 4 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 4 , Ġ 5 5 , Ġ 1 5 , Ġ 4 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 6 , Ġ 0 , Ġ 1 6 , Ġ 4 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 6 , Ġ 5 5 , Ġ 1 7 , Ġ 4 0 , ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 9 , Ġ 0 , Ġ 1 9 , Ġ 4 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 9 , Ġ 5 5 , Ġ 2 0 , Ġ 4 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 , Ġ 5 0 , Ġ 2 1 , Ġ 3 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 1 , Ġ 4 5 , Ġ 2 2 , Ġ 3 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ// Ġå°Ĩ åľ¨ è§£æŀĲ è¯¾ç¨ĭ æĹ¶ è°ĥçĶ¨ ĊĠĠĠ Ġ// ĠåıĤæķ° ï¼ļ å¯¼åħ¥ åıĤæķ° ï¼Į å¾ħ è§£æŀĲ çļĦ HTML ĊĠĠĠ Ġ// Ġè¿ĶåĽŀ ï¼ļ è¯¾ç¨ĭ è§£æŀĲ ç»ĵæŀľ ĊĠĠĠ Ġoverride Ġfun Ġon Parse Courses ( import Option : ĠInt , Ġcontent : ĠString ?): ĠCourse Parse Result Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( content Ġ== Ġnull ) Ġreturn ĠCourse Parse Result . EMPTY ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġparse ( content ) ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠCourse Parse Result . Builder ( result . size ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( json Objects Ġin Ġresult . values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcourse Times Ġ= ĠArrayList < Course Time >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( jsonObject Ġin Ġjson Objects ) Ġ{ Ġ// Ġ åĲĮ ä¸Ģ class Id çļĦ è¯¾ç¨ĭ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtp H Map Ġ= ĠjsonObject [" time "]. cast < HashMap < Int , ĠInt Array >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( k : ĠInt Ġin Ġ( tp H Map ). keys ) Ġ{ Ġ// Ġ æĺŁ æľŁ åĩł Ġ Ġ[ ç¬¬ åĩł èĬĤ è¯¾ , æĮģ ç»Ń åĩł èĬĤ ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcourse Times . add ( Course Time ( jsonObject [" week "]. cast (), ĠWeek Day . of ( k ), Ġtp H Map [ k ] ! ![ 0 ], Ġtp H Map [ k ] ! ![ 1 ], ĠjsonObject [" class Room "]. toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . add ( Course ( json Objects [ 0 ][" className "]. toString (), Ġjson Objects [ 0 ][" teacher Name "]. toString (), Ġcourse Times . toList ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// xk ĊĠĠĠ Ġprivate Ġfun Ġparse Week ( str : ĠString ): ĠBoolean Array Ġ{ ĊĠĠĠĠĠĠĠ Ġ// 0 0 0 0 0 1 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġtp Ġ= ĠBoolean Array ( str . length Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġtp . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtp [ i ] Ġ= Ġstr [ i Ġ+ Ġ 1 ] Ġ== Ġ' 1 ' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtp ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse ( course Js : ĠString ): ĠHashMap < String , ĠArrayList < JSONObject >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġret : ĠHashMap < String , ĠArrayList < JSONObject >> Ġ= ĠHashMap () // è¯¾ç¨ĭ id ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġcourse Js . split ( split Regex ) ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġitems . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtp 1 Ġ= Ġparse Item ( items [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclass Id : ĠString Ġ= Ġtp 1 [" class Id "]. toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret . containsKey ( class Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret [ class Id ]?. add ( tp 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret [ class Id ] Ġ= Ġarray ListOf ( tp 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Item ( item : ĠString ): ĠJSONObject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= ĠJSONObject () ĊĠĠĠĠĠĠĠ Ġ// Ġ åĮ¹éħį æķĻ å¸Ī å§ĵ åĲį ĊĠĠĠĠĠĠĠ Ġval Ġmatches Teacher Ġ= Ġpattern Teacher . find ( item ) !! ĊĠĠĠĠĠĠĠ Ġret . put (" teacher Name ", Ġmatches Teacher . group Values [ 1 ]) Ġ// Ġ æķĻ å¸Ī å§ĵ åĲį ĊĠĠĠĠĠĠĠ Ġ// Ġ åĮ¹éħį è¯¾ç¨ĭ ä¿¡æģ¯ ĊĠĠĠĠĠĠĠ Ġval Ġmatches Info Ġ= Ġpattern Course Info . find ( item ) !! ĊĊĠĠĠĠĠĠĠ Ġval Ġtp Name Ġ= Ġif Ġ( matches Info . group Values [ 5 ]. isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ç»Ħ ${ matches Info . group Values [ 5 ]}" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEMPTY ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġret . put (" class Id ", Ġmatches Info . group Values [ 1 ]) ĊĠĠĠĠĠĠĠ Ġret . put (" className ", Ġparse Class name ( matches Info . group Values [ 2 ])) ĊĠĠĠĠĠĠĠ Ġret . put (" class Room ", Ġ"${ matches Info . group Values [ 3 ]} Ġ$ tp Name ") ĊĠĠĠĠĠĠĠ Ġret . put (" week ", Ġparse Week ( matches Info . group Values [ 4 ])) ĊĊĠĠĠĠĠĠĠ Ġval Ġtp Ġ= ĠHashMap < Int , ĠInt Array >() Ġ// Ġ æĺŁ æľŁ åĩł Ġ Ġ[ ç¬¬ åĩł èĬĤ è¯¾ , æĮģ ç»Ń åĩł èĬĤ ] ĊĠĠĠĠĠĠĠ Ġval Ġmatcher Time Ġ= Ġpattern Day . findAll ( item ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( time Match Result Ġin Ġmatcher Time . iterator ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw Ġ= Ġtime Match Result . group Values [ 1 ]. toInt () Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tp . containsKey ( w )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtp [ w ] ! ![ 1 ] Ġ= Ġtp [ w ] ! ![ 1 ] Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtp [ w ] Ġ= Ġint ArrayOf ( time Match Result . group Values [ 2 ]. toInt () Ġ+ Ġ 1 , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġret . put (" time ", Ġtp ) ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Class name ( className : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtp I Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin ĠclassName . length Ġ- Ġ 1 Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( className [ i ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ')' Ġ-> Ġtp I ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'(' Ġ-> Ġtp I -- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tp I Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠclassName . substring ( 0 , Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} Ċ } Ċ