package Ġcn . ai hu ai edu . school . base . ext Ċ Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Html Ċ import Ġandroid . text . Sp anned Ċ import Ġorg . xml . sax .* Ċ Ċ import Ġjava . util . Array Deque Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠSi y Ġon Ġ 2 0 1 6 / 1 1 / 2 3 . Ċ Ġ*/ ĊĊ Ċ class ĠHtml Parser Ġprivate Ġconstructor ( private Ġval Ġhandler : ĠTag Handler ) Ġ: ĠHtml . Tag Handler , ĠContent Handler Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġwrapped : ĠContent Handler ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtext : ĠEdit able ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġtag Status Ġ= ĠArray Deque < Boolean >() ĊĊĠĠĠ Ġ// This Ġapproach Ġhas Ġthe Ġadvantage Ġthat Ġit Ġallows Ġto Ġdisable Ġprocessing Ġof Ġsome Ġtags Ġwhile Ġusing Ġdefault Ġprocessing Ġfor Ġothers , ĊĠĠĠ Ġ// Ġe . g . Ġyou Ġcan Ġmake Ġsure Ġthat ĠImage Span Ġobjects Ġare Ġnot Ġcreated : ĊĠĠĠ Ġinterface ĠTag Handler Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġreturn Ġtrue Ġhere Ġto Ġindicate Ġthat Ġthis Ġtag Ġwas Ġhandled Ġand ĊĠĠĠĠĠĠĠ Ġ// Ġshould Ġnot Ġbe Ġprocessed Ġfurther ĊĠĠĠĠĠĠĠ Ġfun Ġhandle Tag ( opening : ĠBoolean , Ġtag : ĠString , Ġoutput : ĠEdit able ?, Ġattributes : ĠAttributes ?): ĠBoolean ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Tag ( opening : ĠBoolean , Ġtag : ĠString , Ġoutput : ĠEdit able , Ġxml Reader : ĠXML Reader ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( wrapped Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrecord Ġresult Ġobject ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġoutput ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrecord Ġcurrent Ġcontent Ġhandler ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrapped Ġ= Ġxml Reader . content Handler ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreplace Ġcontent Ġhandler Ġwith Ġour Ġown Ġthat Ġforwards Ġto Ġcalls Ġto Ġoriginal Ġwhen Ġneeded ĊĠĠĠĠĠĠĠĠĠĠĠ Ġxml Reader . content Handler Ġ= Ġthis ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhandle Ġend Element () Ġcallback Ġfor Ġ< inject /> Ġtag ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag Status . add Last ( java . lang . Boolean . FALSE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( SAX Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġstart Element ( uri : ĠString , Ġlocal Name : ĠString , Ġq Name : ĠString , Ġattributes : ĠAttributes ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Handled Ġ= Ġhandler . handle Tag ( true , Ġlocal Name , Ġtext , Ġattributes ) ĊĠĠĠĠĠĠĠ Ġtag Status . add Last ( is Handled ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Handled ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrapped !!. start Element ( uri , Ġlocal Name , Ġq Name , Ġattributes ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( SAX Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġend Element ( uri : ĠString , Ġlocal Name : ĠString , Ġq Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! tag Status . remove Last ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrapped !!. end Element ( uri , Ġlocal Name , Ġq Name ) ĊĠĠĠĠĠĠĠ Ġhandler . handle Tag ( false , Ġlocal Name , Ġtext , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Document Locator ( locator : ĠLoc ator ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwrapped !!. set Document Locator ( locator ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( SAX Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġstart Document () Ġ{ ĊĠĠĠĠĠĠĠ Ġwrapped !!. start Document () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( SAX Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġend Document () Ġ{ ĊĠĠĠĠĠĠĠ Ġwrapped !!. end Document () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( SAX Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġstart Prefix Mapping ( prefix : ĠString , Ġuri : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwrapped !!. start Prefix Mapping ( prefix , Ġuri ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( SAX Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġend Prefix Mapping ( prefix : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwrapped !!. end Prefix Mapping ( prefix ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( SAX Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġcharacters ( ch : ĠChar Array , Ġstart : ĠInt , Ġlength : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwrapped !!. characters ( ch , Ġstart , Ġlength ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( SAX Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġign orable Whitespace ( ch : ĠChar Array , Ġstart : ĠInt , Ġlength : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwrapped !!. ign orable Whitespace ( ch , Ġstart , Ġlength ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( SAX Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġprocessing Instruction ( target : ĠString , Ġdata : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwrapped !!. processing Instruction ( target , Ġdata ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( SAX Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġskipped Entity ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwrapped !!. skipped Entity ( name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild Sp anned Text ( html : ĠString , Ġhandler : ĠTag Handler ): ĠSp anned Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġadd Ġa Ġtag Ġat Ġthe Ġstart Ġthat Ġis Ġnot Ġhandled Ġby Ġdefault , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġallowing Ġcustom Ġtag Ġhandler Ġto Ġreplace Ġxml Reader Ġcontent Handler ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHtml . from Html ("< inject /> $ html ", Ġnull , ĠHtml Parser ( handler )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetValue ( attributes : ĠAttributes , Ġname : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġattributes . length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name Ġ== Ġattributes . getLocal Name ( i )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġattributes . getValue ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }