package Ġde . de bu gle vel . book metadata Ċ Ċ import Ġorg . js oup . J soup Ċ import Ġorg . js oup . nodes . Element Ċ import Ġorg . js oup . nodes . Node Ċ import Ġorg . js oup . nodes . Text Node Ċ import Ġorg . js oup . select . Node Tra ver sor Ċ import Ġorg . js oup . select . Node Visitor Ċ Ċ // Ġfrom Ġhttps :// raw . githubusercontent . com / j hy / js oup / 9 e 3 6 f 9 e / src / main / java / org / js oup / examples / Html To Plain Text . java Ċ class ĠHtml Converter Ġ{ ĊĠĠĠ Ġfun Ġto Pl aintext ( html : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠJ soup . parse ( html ) ĊĠĠĠĠĠĠĠ Ġreturn Ġto Pl aintext ( document ). trim () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFormat Ġan ĠElement Ġto Ġplain - text ĊĠĠĠĠ Ġ* Ġ@ param Ġelement Ġthe Ġroot Ġelement Ġto Ġformat ĊĠĠĠĠ Ġ* Ġ@ return Ġformatted Ġtext ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġto Pl aintext ( element : ĠElement ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġformatter Ġ= ĠFormat ting Visitor () ĊĠĠĠĠĠĠĠ ĠNode Tra ver sor . traverse ( formatter , Ġelement ) Ġ// Ġwalk Ġthe ĠDOM , Ġand Ġcall Ġ. head () Ġand Ġ. tail () Ġfor Ġeach Ġnode ĊĊĠĠĠĠĠĠĠ Ġreturn Ġformatter . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġthe Ġformatting Ġrules , Ġimplemented Ġin Ġa Ġb read th - first ĠDOM Ġtraverse ĊĠĠĠ Ġprivate Ġclass ĠFormat ting Visitor Ġ: ĠNode Visitor Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmaximum Width Ġ= ĠInt . MAX _ VALUE Ġ// Ġhard Ġwrap Ġtext Ġwhen Ġa Ġline Ġexceeds Ġthis Ġwidth ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġwidth Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġaccum Ġ= ĠStringBuilder () Ġ// Ġholds Ġthe Ġaccumulated Ġtext ĊĊĠĠĠĠĠĠĠ Ġ// Ġhit Ġwhen Ġthe Ġnode Ġis Ġfirst Ġseen ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhead ( node : ĠNode , Ġdepth : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġnode . nodeName () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode Ġis ĠText Node Ġ-> Ġappend ( node . text ()) Ġ// ĠText Nodes Ġcarry Ġall Ġuser - readable Ġtext Ġin Ġthe ĠDOM . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ== Ġ" li " Ġ-> Ġappend ("\ n Ġ* Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ== Ġ" dt " Ġ-> Ġappend (" Ġ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" p ", Ġ" h 1 ", Ġ" h 2 ", Ġ" h 3 ", Ġ" h 4 ", Ġ" h 5 ", Ġ" tr "). contains ( name ) Ġ-> Ġappend ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġhit Ġwhen Ġall Ġof Ġthe Ġnode 's Ġchildren Ġ( if Ġany ) Ġhave Ġbeen Ġvisited ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtail ( node : ĠNode , Ġdepth : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġnode . nodeName () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" br ", Ġ" dd ", Ġ" dt ", Ġ" p ", Ġ" h 1 ", Ġ" h 2 ", Ġ" h 3 ", Ġ" h 4 ", Ġ" h 5 "). contains ( name ) Ġ-> Ġappend ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ== Ġ" a " Ġ-> Ġappend ( String . format (" Ġ<% s >", Ġnode . abs Url (" href "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġapp ends Ġtext Ġto Ġthe Ġstring Ġbuilder Ġwith Ġa Ġsimple Ġword Ġwrap Ġmethod ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġappend ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( text . startsWith ("\ n ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġ 0 Ġ// Ġreset Ġcounter Ġif Ġstarts Ġwith Ġa Ġnewline . Ġonly Ġfrom Ġformats Ġabove , Ġnot Ġin Ġnatural Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( text Ġ== Ġ" Ġ" Ġ&& Ġ( accum . isEmpty () Ġ|| ĠlistOf (" Ġ", Ġ"\ n "). contains ( accum . substring ( accum . length Ġ- Ġ 1 ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ Ġ// Ġdon 't Ġaccum ulate Ġlong Ġruns Ġof Ġempty Ġspaces ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( text . length Ġ+ Ġwidth Ġ> Ġmaximum Width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwon 't Ġfit , Ġneeds Ġto Ġwrap ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwords Ġ= Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. split ("\\ s +". to Regex ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. drop Last While Ġ{ Ġit . isEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Typed Array () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġwords . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġword Ġ= Ġwords [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Ġ= Ġ( i Ġ== Ġwords . size Ġ- Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! last ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġinsert Ġa Ġspace Ġif Ġnot Ġthe Ġlast Ġword ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġword Ġ= Ġ"$ word Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( word . length Ġ+ Ġwidth Ġ> Ġmaximum Width ) Ġ{ Ġ// Ġwrap Ġand Ġreset Ġcounter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccum . append ("\ n "). append ( word ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġword . length ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccum . append ( word ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ+= Ġword . length ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// Ġfits Ġas Ġis , Ġwithout Ġneed Ġto Ġwrap Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccum . append ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ+= Ġtext . length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġaccum . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }