package Ġcom . g works . ric hed it text . converters Ċ Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Sp ann able StringBuilder Ċ import Ġandroid . text . Sp anned Ċ import Ġcom . g works . ric hed it text . mark ups .* Ċ import Ġorg . xml . sax . Attributes Ċ import Ġorg . xml . sax . Content Handler Ċ import Ġorg . xml . sax . Input Source Ċ import Ġorg . xml . sax . XML Reader Ċ import Ġorg . xml . sax . helpers . XML Reader Factory Ċ import Ġjava . io . String Reader Ċ Ċ val Ġdefault Markup Factory Ġ= Ġ{ Ġtag : ĠString Ġ-> ĊĊĠĠĠ Ġwhen Ġ( tag ) Ġ{ ĊĠĠĠĠĠĠĠ ĠHtml Converter . BOLD Ġ-> ĠB old :: class . java ĊĠĠĠĠĠĠĠ ĠHtml Converter . ITAL IC Ġ-> ĠIt alic :: class . java ĊĠĠĠĠĠĠĠ ĠHtml Converter . UNDER LINE Ġ-> ĠUnder line :: class . java ĊĠĠĠĠĠĠĠ ĠHtml Converter . LINK Ġ-> ĠLink :: class . java ĊĠĠĠĠĠĠĠ ĠHtml Converter . FONT Ġ-> ĠFont :: class . java ĊĠĠĠĠĠĠĠ ĠHtml Converter . STRI KE Ġ-> ĠStri ke through :: class . java ĊĠĠĠĠĠĠĠ ĠHtml Converter . SUB Ġ-> ĠSub script :: class . java ĊĠĠĠĠĠĠĠ ĠHtml Converter . SUP Ġ-> ĠSup erscript :: class . java ĊĠĠĠĠĠĠĠ ĠHtml Converter . OL Ġ-> ĠO List :: class . java ĊĠĠĠĠĠĠĠ ĠHtml Converter . UL Ġ-> ĠU List :: class . java ĊĠĠĠĠĠĠĠ ĠHtml Converter . P Ġ-> ĠParagraph :: class . java ĊĠĠĠĠĠĠĠ ĠHtml Converter . CODE Ġ-> ĠCode :: class . java ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ fun Ġto Html ( text : ĠSp anned , Ġunknown Markup Handler : ĠMark up Converter . Unknown Markup Handler ? Ġ= Ġnull ): ĠString Ġ{ ĊĊĠĠĠ Ġval Ġhtml Ġ= ĠStringBuilder ( text . length ) ĊĠĠĠ Ġval Ġhtml Converter Ġ= ĠHtml Converter ( unknown Markup Handler ) ĊĠĠĠ Ġval Ġspans Ġ= Ġtext . get Spans ( 0 , Ġtext . length , ĠMark up :: class . java ). to Mutable List () ĊĠĠĠ Ġvar Ġprocessed Ġ= Ġ- 1 ĊĊĠĠĠ Ġwhile Ġ( processed Ġ< Ġtext . length ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġnext Ġspan Ġtransition . ĊĠĠĠĠĠĠĠ Ġval Ġtransition Index Ġ= Ġtext . next Span Transition ( processed , Ġtext . length , ĠMark up :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthere Ġare Ġun processed Ġtext Ġbefore Ġtransition Ġadd . ĊĠĠĠĠĠĠĠ Ġif Ġ( transition Index Ġ> Ġprocessed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhtml . append ( text , Ġmax Of ( processed , Ġ 0 ), Ġtransition Index ) ĊĊĠĠĠĠĠĠĠ Ġval Ġold Len Ġ= Ġhtml . length ĊĠĠĠĠĠĠĠ Ġval Ġiterator Ġ= Ġspans . iterator () ĊĠĠĠĠĠĠĠ Ġfor Ġ( span Ġin Ġiterator ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġtext . get Span Start ( span ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Ġ== Ġtransition Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspan . convert ( html , Ġhtml . length , Ġhtml Converter , Ġtrue ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( text . get Span End ( span ) Ġ== Ġtransition Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspan . convert ( html , Ġif Ġ( start Ġ== Ġtransition Index ) Ġhtml . length Ġelse Ġold Len , Ġhtml Converter , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . remove () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġtext Ġand Ġspans Ġup Ġto Ġtransition Index Ġis Ġprocessed . ĊĠĠĠĠĠĠĠ Ġprocessed Ġ= Ġtransition Index ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġhtml . toString () Ċ } Ċ Ċ fun Ġfrom Html ( html : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarkup Factory : Ġ( String ) Ġ-> ĠClass < out ĠMark up >? Ġ= Ġdefault Markup Factory , ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġunknown Tag Handler : ĠUnknown Tag Handler ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġattribute Converter : ĠAttribute Converter < Attributes > Ġ= ĠHtml Attribute Converter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġxml Reader : ĠXML Reader Ġ= ĠXML Reader Factory . create XML Reader (" org . cc il . co wan . tag soup . Parser "), ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Handler : ĠContent Handler ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Continuous Editing : ĠBoolean Ġ= Ġtrue ): ĠSp anned Ġ{ ĊĠĠĠ Ġval Ġsb Ġ= ĠSp ann able StringBuilder () ĊĠĠĠ Ġxml Reader . content Handler Ġ= Ġcontent Handler Ġ?: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Html Handler ( sb , Ġmarkup Factory , Ġunknown Tag Handler , Ġattribute Converter ) ĊĠĠĠ Ġxml Reader . parse ( Input Source ( String Reader ( html ))) ĊĠĠĠ Ġif Ġ( enable Continuous Editing ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġspans Ġ= Ġsb . get Spans ( 0 , Ġsb . length , ĠMark up :: class . java ) ĊĠĠĠĠĠĠĠ Ġspans . forEach Ġ{ Ġit . update Span Flags Internal ( sb , ĠSp anned . SPAN _ EXCL USIVE _ INCL USIVE ) Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġsb Ċ } Ċ Ċ fun ĠAttributes . forEach ( consumer : Ġ( key : ĠString , Ġvalue : ĠString ) Ġ-> ĠUnit , Ġfilter : Ġ( key : ĠString ) Ġ-> ĠBoolean Ġ= Ġ{ true }) Ġ{ ĊĠĠĠ Ġfor Ġ( it Ġin Ġ 0 Ġuntil Ġlength ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġget QName ( it ) ĊĠĠĠĠĠĠĠ Ġif Ġ( filter ( name )) Ġconsumer ( name , Ġthis . getValue ( it )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠUnknown Tag Handler Ġ{ ĊĊĠĠĠ Ġfun Ġhandle Start Tag ( out : ĠEdit able , Ġq Name : ĠString , Ġattributes : ĠAttributes ?) ĊĊĠĠĠ Ġfun Ġhandle End Tag ( out : ĠEdit able , Ġq Name : ĠString ) Ċ Ċ } Ċ