package Ġorg . jetbrains . dok ka . base . parsers Ċ Ċ import Ġorg . jetbrains . dok ka . model . doc .* Ċ import Ġorg . jetbrains . dok ka . base . parsers . factories . Doc Tags FromString Factory Ċ import Ġorg . js oup . J soup Ċ import Ġorg . js oup . nodes . Node Ċ import Ġorg . js oup . select . Node Filter Ċ import Ġorg . js oup . select . Node Tra ver sor Ċ Ċ class ĠHtml Parser Ġ: ĠParser () Ġ{ ĊĊĠĠĠ Ġinner Ġclass ĠNode Filter Impl Ġ: ĠNode Filter Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġnodes Cache : ĠMutable Map < Int , ĠMutable List < Doc Tag >> Ġ= Ġmutable Map Of () ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcurrent Depth Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġfun Ġcollect (): ĠDoc Tag Ġ= Ġnodes Cache [ current Depth ] ! ![ 0 ] ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtail ( node : ĠNode ?, Ġdepth : ĠInt ): ĠNode Filter . Filter Result Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnodeName Ġ= Ġnode !!. nodeName () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Attributes Ġ= Ġnode . attributes () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( nodeName Ġin ĠlistOf ("# document ", Ġ" html ", Ġ" head ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNode Filter . Filter Result . CONTINUE ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams : ĠMap < String , ĠString > ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( nodeName Ġ!= Ġ"# text ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġnode Attributes . map Ġ{ Ġit . key Ġto Ġit . value Ġ}. toMap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġnode Attributes [" # text "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ= Ġempty Map () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdoc Node Ġ= Ġif ( depth Ġ< Ġcurrent Depth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDoc Tags FromString Factory . getInstance ( nodeName , Ġnodes Cache . get OrDefault ( current Depth , Ġmutable ListOf ()). toList (), Ġparams , Ġbody ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnodes Cache [ current Depth ] Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Depth Ġ= Ġdepth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDoc Tags FromString Factory . getInstance ( nodeName , Ġempty List (), Ġparams , Ġbody ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnodes Cache . get OrDefault ( depth , Ġmutable ListOf ()) Ġ+= Ġdoc Node ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNode Filter . Filter Result . CONTINUE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhead ( node : ĠNode ?, Ġdepth : ĠInt ): ĠNode Filter . Filter Result Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnodeName Ġ= Ġnode !!. nodeName () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( current Depth Ġ< Ġdepth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Depth Ġ= Ġdepth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnodes Cache [ current Depth ] Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( nodeName Ġin ĠlistOf ("# document ", Ġ" html ", Ġ" head ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNode Filter . Filter Result . CONTINUE ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNode Filter . Filter Result . CONTINUE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġhtml To Doc Node ( string : ĠString ): ĠDoc Tag Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠJ soup . parse ( string ) ĊĠĠĠĠĠĠĠ Ġval Ġnode Filter Impl Ġ= ĠNode Filter Impl () ĊĠĠĠĠĠĠĠ ĠNode Tra ver sor . filter ( node Filter Impl , Ġdocument . root ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġnode Filter Impl . collect () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreplace Link sWith H refs ( javadoc : ĠString ): ĠString Ġ= ĠRegex ("\\ {@ link Ġ.* ?} "). replace ( javadoc ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsplit Ġ= Ġit . value . drop Last ( 1 ). split (" Ġ") ĊĠĠĠĠĠĠĠ Ġif ( split . size Ġ! in ĠlistOf ( 2 , Ġ 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ replace Ġit . value ĊĠĠĠĠĠĠĠ Ġif ( split . size Ġ== Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ replace Ġ"< documentation link Ġhref =\" ${ split [ 1 ] }\ ">${ split [ 2 ] }</ documentation link >" ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ replace Ġ"< documentation link Ġhref =\" ${ split [ 1 ] }\ ">${ split [ 1 ] }</ documentation link >" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġparse StringTo Doc Node ( extract edString : ĠString ) Ġ= Ġhtml To Doc Node ( extract edString ) ĊĠĠĠ Ġoverride Ġfun Ġpre parse ( text : ĠString ) Ġ= Ġreplace Link sWith H refs ( text ) Ċ } ĊĊĊ