/* Ċ Ġ* ĠThis Ġfile Ġis Ġbased / adapt ed Ġfrom Ġk xml 2 Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 0 2 , 2 0 0 3 , ĠSte fan ĠHa ust ein , ĠO ber haus en , ĠR h ld ., ĠGermany Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ċ Ġ* Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġ Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING Ċ Ġ* ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS Ċ Ġ* ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġnl . adapt ivity . xml util . core Ċ Ċ import Ġnl . adapt ivity . xml util .* Ċ import Ġnl . adapt ivity . xml util . XML Constants . XML NS _ ATTRIBUTE Ċ import Ġnl . adapt ivity . xml util . XML Constants . XML NS _ ATTRIBUTE _ NS _ URI Ċ import Ġnl . adapt ivity . xml util . core . impl . Namespace Holder Ċ import Ġnl . adapt ivity . xml util . core . impl . Platform Xml Writer Base Ċ import Ġnl . adapt ivity . xml util . core . impl . multi platform . assert Ċ Ċ /** Ċ Ġ* ĠA Ġcross - platform Ġimplementation Ġof ĠXml Writer . Ċ Ġ* ĠCreated Ġby Ġpd v rie ze Ġon Ġ 1 5 / 1 1 / 1 5 . Ċ Ġ* Ċ Ġ* Ġ@ property Ġis Repair Namespaces ĠShould Ġmissing Ġnamespace Ġattributes Ġbe Ġadded Ġautomatically Ċ Ġ* Ġ@ property Ġxml Decl Mode ĠShould Ġthe Ġxml Ġdeclaration Ġbe Ġemitted Ġautomatically ? Ċ Ġ*/ Ċ public Ġclass ĠK t Xml Writer ( ĊĠĠĠ Ġprivate Ġval Ġwriter : ĠAppend able , ĊĠĠĠ Ġpublic Ġval Ġis Repair Namespaces : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġpublic Ġval Ġxml Decl Mode : ĠXml Decl Mode Ġ= ĠXml Decl Mode . None , ĊĠĠĠ Ġxml Version : ĠXml Version Ġ= ĠXml Version . XML 1 1 Ċ ) Ġ: ĠPlatform Xml Writer Base (), ĠXml Writer Ġ{ ĊĊĠĠĠ Ġpublic Ġvar Ġxml Version : ĠXml Version Ġ= Ġxml Version ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġpublic Ġvar Ġadd Trailing Space Before End : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġprivate Ġvar Ġis Part ially Open Tag : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġelement Stack Ġ= ĠarrayOf Null s < String >( 1 2 ) ĊĊĠĠĠ Ġprivate Ġvar Ġstate : ĠWrite State Ġ= ĠWrite State . Before Document ĊĊĠĠĠ Ġprivate Ġval Ġnamespace Holder Ġ= ĠNamespace Holder () ĊĊĠĠĠ Ġprivate Ġvar Ġlast Tag Depth Ġ= ĠTAG _ DEPTH _ NOT _ TAG ĊĊĠĠĠ Ġoverride Ġval Ġnamespace Context : ĠNamespace Context ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnamespace Holder . namespace Context ĊĊĠĠĠ Ġoverride Ġval Ġdepth : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnamespace Holder . depth ĊĊĠĠĠ Ġprivate Ġfun Ġnamespace At ( depth : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġelement Stack [ depth Ġ* Ġ 3 ] !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Element Stack ( depth : ĠInt , Ġnamespace : ĠString , Ġprefix : ĠString , Ġlocal Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġesp Ġ= Ġdepth Ġ* Ġ 3 ĊĠĠĠĠĠĠĠ Ġif Ġ( element Stack . size Ġ< Ġesp Ġ+ Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġh lp Ġ= ĠarrayOf Null s < String >( element Stack . size Ġ+ Ġ 1 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement Stack . copy Into ( h lp , Ġend Index Ġ= Ġesp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelement Stack Ġ= Ġh lp ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġelement Stack [ esp ++] Ġ= Ġnamespace ĊĠĠĠĠĠĠĠ Ġelement Stack [ esp ++] Ġ= Ġprefix ĊĠĠĠĠĠĠĠ Ġelement Stack [ esp ] Ġ= Ġlocal Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprefix At ( depth : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġelement Stack [ depth Ġ* Ġ 3 Ġ+ Ġ 1 ] !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlocal Name At ( depth : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġelement Stack [ depth Ġ* Ġ 3 Ġ+ Ġ 2 ] !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfinish Partial Start Tag ( close : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Part ially Open Tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis Part ially Open Tag Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġend Of Tag Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! close Ġ-> Ġ" >" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Trailing Space Before End Ġ-> Ġ" Ġ/> " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" /> " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwriter . append ( end Of Tag ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġenum Ġclass ĠE scape Mode Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠE sc aping Ġcharacters Ġthat Ġmay Ġnot Ġoccur Ġdirectly Ġanywhere , Ġincluding Ġin Ġcomments Ġor Ġc data ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ ĠMIN IMAL , ĊĠĠĠĠĠĠĠ ĠATTR CONTENT QUOT , ĊĠĠĠĠĠĠĠ ĠATTR CONTENT A POS , ĊĠĠĠĠĠĠĠ ĠTEXT CONTENT , ĊĠĠĠĠĠĠĠ ĠD TD ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠAppend able . append Xml Char ( ch : ĠChar , Ġmode : ĠE scape Mode ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġappend Num Char Ref ( code : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" &# x "). append ( code . toString ( 1 6 )). append (' ; ') ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġthrow Invalid ( code : ĠInt ): ĠNothing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" In Ġxml Ġ${ xml Version . version String } Ġthe Ġcharacter Ġ 0 x ${ code . toString ( 1 6 )} Ġis Ġnot Ġvalid ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġch . code ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġ== Ġ 0 x 0 Ġ-> Ġthrow ĠIllegalArgumentException (" XML Ġdocuments Ġmay Ġnot Ġcontain Ġnull Ġstrings Ġdirectly Ġor Ġindirect ly ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġch Ġ== Ġ'& ' Ġ-> Ġappend ("& amp ; ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġch Ġ== Ġ'< ' Ġ&& Ġmode Ġ!= ĠE scape Mode . MIN IMAL Ġ-> Ġappend ("& lt ; ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġch Ġ== Ġ' >' Ġ&& Ġmode Ġ== ĠE scape Mode . TEXT CONTENT Ġ-> Ġappend ("& gt ; ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġch Ġ== Ġ'"' Ġ&& Ġmode Ġ== ĠE scape Mode . ATTR CONTENT QUOT Ġ-> Ġappend ("& quot ; ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġch Ġ== Ġ'\'' Ġ&& Ġmode Ġ== ĠE scape Mode . ATTR CONTENT A POS Ġ-> Ġappend ("& apos ; ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġin Ġ 0 x 1 .. 0 x 8 Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġ== Ġ 0 xB Ġ|| Ġc Ġ== Ġ 0 xC Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġin Ġ 0 xE .. 0 x 1 F Ġ-> Ġwhen Ġ( xml Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠXml Version . XML 1 0 Ġ-> Ġthrow Invalid ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠXml Version . XML 1 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Num Char Ref ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġin Ġ 0 x 7 f .. 0 x 8 4 Ġ|| Ġc Ġin Ġ 0 x 8 6 .. 0 x 9 f Ġ-> Ġwhen Ġ( xml Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠXml Version . XML 1 0 Ġ-> Ġappend ( ch ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠXml Version . XML 1 1 Ġ-> Ġappend Num Char Ref ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġin Ġ 0 xD 8 0 0 .. 0 xD FFF Ġ|| Ġc Ġ== Ġ 0 xFF FE Ġ|| Ġc Ġ== Ġ 0 xFFFF Ġ-> Ġthrow Invalid ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġappend ( ch ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwrite Esc aped Text ( s : ĠString , Ġmode : ĠE scape Mode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġloop @ Ġfor Ġ( c Ġin Ġs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . append Xml Char ( c , Ġmode ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtrigger Start Document () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠNon - before Ġstates Ġare Ġnot Ġmodified ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWrite State . Before Document Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( xml Decl Mode Ġ!= ĠXml Decl Mode . None ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Document ( null , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠWrite State . After Xml Decl ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwrite Indent ( new Depth : ĠInt Ġ= Ġdepth ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġindent Seq Ġ= Ġindent Sequence ĊĠĠĠĠĠĠĠ Ġif Ġ( last Tag Depth Ġ>= Ġ 0 Ġ&& Ġindent Seq . isNotEmpty () Ġ&& Ġlast Tag Depth Ġ!= Ġdepth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġign orable Whitespace ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindent Sequence Ġ= Ġempty List () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( depth ) Ġ{ Ġindent Seq . forEach Ġ{ Ġit . writeTo ( this ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmerged Ġ= Ġindent Seq . join Repeated ( depth ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmerged . forEach Ġ{ Ġit . writeTo ( this ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindent Sequence Ġ= Ġindent Seq ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlast Tag Depth Ġ= Ġnew Depth ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġensure Namespace If Repair ing ( namespace : ĠString ?, Ġprefix : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Repair Namespaces Ġ&& Ġnamespace Ġ!= Ġnull Ġ&& Ġnamespace . isNotEmpty () Ġ&& Ġprefix Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġfix Ġmore Ġcases Ġthan Ġmissing Ġnamespaces Ġwith Ġgiven Ġprefix Ġand Ġuri ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( namespace Holder . getName space Uri ( prefix ) Ġ!= Ġnamespace ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Attr ( prefix , Ġnamespace ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġflush () Ġ{ ĊĠĠĠĠĠĠĠ Ġfinish Partial Start Tag ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ{@ inheritDoc } ĊĠĠĠĠ Ġ* Ġ@ param Ġversion ĠThe Ġvalue Ġof Ġthe Ġversion Ġattribute . ĠThis Ġwill Ġupdate Ġthe Ġ[ xml Version ] Ġproperty ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠ Ġwhere Ġany Ġother Ġversion Ġthat Ġ 1 . 0 Ġor Ġ 1 . 1 Ġwill Ġbe Ġinterpreted Ġas Ġbeing Ġ 1 . 1 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġstart Document ( version : ĠString ?, Ġencoding : ĠString ?, Ġstandalone : ĠBoolean ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġwrite Indent ( TAG _ DEPTH _ FORCE _ IND ENT _ NEXT ) ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ!= ĠWrite State . Before Document ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠXml Exception (" At tempting Ġto Ġwrite Ġstart Ġdocument Ġafter Ġdocument Ġalready Ġstarted ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠWrite State . After Xml Decl ĊĊĠĠĠĠĠĠĠ Ġval Ġver String Ġ= Ġwhen Ġ( version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġxml Version . version String ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 . 0 " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġxml Version Ġ= ĠXml Version . XML 1 0 ; Ġversion ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġxml Version Ġ= ĠXml Version . XML 1 1 ; Ġversion ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwriter . append (" <? xml Ġversion ='$ ver String '") ĊĊĠĠĠĠĠĠĠ Ġval Ġeffective Encoding Ġ= Ġencoding Ġ?: Ġ" UTF - 8 " ĊĊĠĠĠĠĠĠĠ Ġif Ġ( xml Decl Mode Ġ!= ĠXml Decl Mode . Minimal Ġ|| Ġencoding Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . append (" Ġencoding =' ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Esc aped Text ( effective Encoding , ĠE scape Mode . ATTR CONTENT A POS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . append (' \' ') ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( standalone Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . append (" Ġstandalone =' ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . append ( if Ġ( standalone ) Ġ" yes " Ġelse Ġ" no ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . append (' \' ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( add Trailing Space Before End ) Ġwriter . append (' Ġ') ĊĠĠĠĠĠĠĠ Ġwriter . append (" ?> ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdoc decl ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwrite Indent ( TAG _ DEPTH _ FORCE _ IND ENT _ NEXT ) ĊĠĠĠĠĠĠĠ Ġtrigger Start Document () ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ!= ĠWrite State . After Xml Decl ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠXml Exception (" Writing Ġa ĠD TD Ġis Ġonly Ġallowed Ġonce , Ġin Ġthe Ġpro log ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠWrite State . After Doc Type Decl ĊĠĠĠĠĠĠĠ Ġwriter . append (" <! DOCTYPE Ġ"). append ( text . trim Start ()). append ("> ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprocessing Instruction ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfinish Partial Start Tag ( false ) ĊĠĠĠĠĠĠĠ Ġwrite Indent ( TAG _ DEPTH _ FORCE _ IND ENT _ NEXT ) ĊĠĠĠĠĠĠĠ Ġtrigger Start Document () ĊĠĠĠĠĠĠĠ Ġwriter . append (" <? ") ĊĠĠĠĠĠĠĠ Ġwriter . append ( text ) ĊĠĠĠĠĠĠĠ Ġwriter . append (" ?> ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Tag ( namespace : ĠString ?, Ġlocal Name : ĠString , Ġprefix : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġfinish Partial Start Tag ( false ) ĊĠĠĠĠĠĠĠ Ġwrite Indent () ĊĊĠĠĠĠĠĠĠ Ġtrigger Start Document () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠWrite State . Finished ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠXml Exception (" At tempting Ġto Ġwrite Ġtag Ġafter Ġthe Ġdocument Ġfinished ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠWrite State . In Tag Content ĊĊĠĠĠĠĠĠĠ Ġval Ġapplied Prefix Ġ= Ġif Ġ( namespace Ġ== Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreg Ġ= Ġget Prefix ( namespace ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreg Ġ!= Ġnull Ġ-> Ġreg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefix Ġ== Ġnull Ġ-> Ġnamespace Holder . next Auto Prefix () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġprefix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġset Element Stack ( depth , Ġnamespace Ġ?: Ġ"", Ġapplied Prefix , Ġlocal Name ) ĊĊĠĠĠĠĠĠĠ Ġwriter . append ('< ') ĊĠĠĠĠĠĠĠ Ġif Ġ( applied Prefix . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . append ( applied Prefix ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . append (': ') ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwriter . append ( local Name ) ĊĠĠĠĠĠĠĠ Ġis Part ially Open Tag Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġnamespace Holder . inc Depth () ĊĠĠĠĠĠĠĠ Ġensure Namespace If Repair ing ( namespace , Ġapplied Prefix ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġend Tag ( namespace : ĠString ?, Ġlocal Name : ĠString , Ġprefix : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġnamespace Holder . dec Depth () ĊĠĠĠĠĠĠĠ Ġwrite Indent ( TAG _ DEPTH _ FORCE _ IND ENT _ NEXT ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(( namespace Ġ?: Ġ"") Ġ!= Ġnamespace At ( depth ) Ġ|| Ġlocal Name At ( depth ) Ġ!= Ġlocal Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ("</ {$ namespace }$ local Name > Ġdoes Ġnot Ġmatch Ġstart ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Part ially Open Tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Partial Start Tag ( true ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . append ("</ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Prefix Ġ= Ġprefix At ( depth ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( actual Prefix . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . append ( actual Prefix ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . append (': ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . append ( local Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . append (' >') ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcomment ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfinish Partial Start Tag ( false ) ĊĠĠĠĠĠĠĠ Ġwrite Indent ( TAG _ DEPTH _ FORCE _ IND ENT _ NEXT ) ĊĠĠĠĠĠĠĠ Ġtrigger Start Document () Ġ// ĠNo Ġcontent Ġbefore ĠXml Declaration ĊĊĠĠĠĠĠĠĠ Ġvar Ġlast Was Hy phen Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ġescape Ġcomment Ġend Ġstrings ĊĠĠĠĠĠĠĠ Ġwriter . append (" <!-- ") ĊĠĠĠĠĠĠĠ Ġfor Ġ( ch Ġin Ġtext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( ch ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'-' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Was Hy phen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Was Hy phen Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . append (" &# x 2 d ; ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Was Hy phen Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . append ('- ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġwriter . append Xml Char ( ch , ĠE scape Mode . MIN IMAL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwriter . append (" --> ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtext ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfinish Partial Start Tag ( false ) ĊĊĠĠĠĠĠĠĠ Ġwrite Esc aped Text ( text , ĠE scape Mode . TEXT CONTENT ) ĊĊĠĠĠĠĠĠĠ Ġlast Tag Depth Ġ= ĠTAG _ DEPTH _ NOT _ TAG ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcd sect ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfinish Partial Start Tag ( false ) ĊĠĠĠĠĠĠĠ Ġ// ĠHandle Ġc data Ġwith Ġclose Ġpart Ġas Ġelement ĊĠĠĠĠĠĠĠ Ġvar Ġend Pos Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwriter . append ("< ![ CDATA [ ") ĊĠĠĠĠĠĠĠ Ġfor Ġ( ch Ġin Ġtext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġch Ġ== Ġ' ]' Ġ&& Ġ( end Pos Ġ== Ġ 0 Ġ|| Ġend Pos Ġ== Ġ 1 ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ end Pos ; Ġwriter . append ( ch ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġch Ġ== Ġ' >' Ġ&& Ġend Pos Ġ== Ġ 2 Ġ-> Ġwriter . append ("& gt ; ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġch Ġ== Ġ' ]' Ġ&& Ġend Pos Ġ== Ġ 2 Ġ-> Ġwriter . append ( ch ) Ġ// Ġwe Ġhave Ġ 3 Ġ] Ġcharacters Ġso Ġdrop Ġthe Ġfirst ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Pos Ġ= Ġ 0 ; Ġwriter . append Xml Char ( ch , ĠE scape Mode . MIN IMAL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwriter . append (" ]] >") ĊĊĠĠĠĠĠĠĠ Ġlast Tag Depth Ġ= ĠTAG _ DEPTH _ NOT _ TAG ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġentity Ref ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfinish Partial Start Tag ( false ) ĊĊĠĠĠĠĠĠĠ Ġwriter . append ('& '). append ( text ). append (' ; ') ĊĊĠĠĠĠĠĠĠ Ġlast Tag Depth Ġ= ĠTAG _ DEPTH _ NOT _ TAG ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġign orable Whitespace ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfinish Partial Start Tag ( false ) ĊĠĠĠĠĠĠĠ Ġtrigger Start Document () Ġ// Ġwhitespace Ġis Ġnot Ġallowed Ġbefore Ġthe Ġxml Ġdeclaration ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġtext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(!( c Ġ== Ġ'\ n ' Ġ|| Ġc Ġ== Ġ'\ r ' Ġ|| Ġc Ġ== Ġ'\ t ' Ġ|| Ġc Ġ== Ġ' Ġ')) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ("\" $ text \" Ġis Ġnot Ġign orable Ġwhitespace ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwriter . append ( text ) ĊĠĠĠĠĠĠĠ Ġlast Tag Depth Ġ= ĠTAG _ DEPTH _ NOT _ TAG ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġattribute ( namespace : ĠString ?, Ġname : ĠString , Ġprefix : ĠString ?, Ġvalue : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( namespace Ġ== ĠXML NS _ ATTRIBUTE _ NS _ URI ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Attr ( name , Ġvalue ) Ġ// ĠIf Ġit Ġis Ġa Ġnamespace Ġattribute , Ġjust Ġgo Ġthere . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( namespace . isNull OrEmpty () Ġ&& ĠXML NS _ ATTRIBUTE Ġ== Ġname ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Attr ("", Ġvalue ) Ġ// ĠIf Ġit Ġis Ġa Ġnamespace Ġattribute , Ġjust Ġgo Ġthere . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ġstream line Ġthe Ġway Ġnamespaces Ġare Ġhandled , Ġincluding Ġthe Ġcase Ġwhere Ġthe Ġprefix Ġis ĊĠĠĠĠĠĠĠ Ġ// Ġ Ġalready Ġdeclared Ġon Ġthis Ġtag Ġwith Ġa Ġdifferent Ġname . ĊĠĠĠĠĠĠĠ Ġif Ġ( prefix Ġ!= Ġnull Ġ&& Ġprefix . isNotEmpty () Ġ&& Ġnamespace Ġ!= Ġnull Ġ&& Ġnamespace . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Prefix ( prefix , Ġnamespace ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġensure Namespace If Repair ing ( namespace , Ġprefix ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! is Part ially Open Tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" il legal Ġposition Ġfor Ġattribute ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġval Ġactual Prefix Ġ= Ġif Ġ(! prefix . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( getName space Uri ( prefix ) Ġ!= Ġnamespace ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Prefix ( namespace ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġprefix ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprefix ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠ Ġraw Write Attribute ( actual Prefix , Ġname , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnamespace Attr ( namespace Prefix : ĠString , Ġnamespace Uri : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexisting Namespace For Prefix Ġ= Ġnamespace Holder . namespace At Current Depth ( namespace Prefix ) ĊĠĠĠĠĠĠĠ Ġif Ġ( existing Namespace For Prefix Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Repair Namespaces Ġ-> Ġreturn ĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhen Ġrepair ing , Ġjust Ġignore Ġduplicates ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexisting Namespace For Prefix Ġ!= Ġnamespace Uri ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" At tempting Ġto Ġset Ġprefix Ġto Ġdifferent Ġvalues Ġin Ġthe Ġsame Ġtag ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Namespace Ġattribute Ġduplicated ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnamespace Holder . add Prefix To Context ( namespace Prefix , Ġnamespace Uri ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! is Part ially Open Tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" il legal Ġposition Ġfor Ġattribute ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( namespace Prefix . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġraw Write Attribute ( XML NS _ ATTRIBUTE , Ġnamespace Prefix , Ġnamespace Uri ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġraw Write Attribute ("", ĠXML NS _ ATTRIBUTE , Ġnamespace Uri ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġraw Write Attribute ( prefix : ĠString , Ġlocal Name : ĠString , Ġvalue : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwriter . append (' Ġ') ĊĠĠĠĠĠĠĠ Ġif Ġ( prefix . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . append ( prefix ). append (': ') ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwriter . append ( local Name ). append (' =') ĊĊĠĠĠĠĠĠĠ Ġval Ġ( q , Ġmode ) Ġ= Ġwhen Ġ( value . indexOf ('" ')) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 Ġ-> ĠPair (' "', ĠE scape Mode . ATTR CONTENT QUOT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠPair (' \'', ĠE scape Mode . ATTR CONTENT A POS ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwriter . append ( q ) ĊĠĠĠĠĠĠĠ Ġwrite Esc aped Text ( value , Ġmode ) ĊĠĠĠĠĠĠĠ Ġwriter . append ( q ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġend Document () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert ( depth Ġ== Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ!= ĠWrite State . In Tag Content ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠXml Exception (" At tempting Ġto Ġend Ġdocument Ġwhen Ġin Ġinvalid Ġstate : Ġ$ state ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ġmake Ġthis Ġrepair ing Ġbehaviour Ġoptional ĊĠĠĠĠĠĠĠ Ġwhile Ġ( depth Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Tag ( namespace At ( depth Ġ- Ġ 1 ), Ġprefix At ( depth Ġ- Ġ 1 ), Ġlocal Name At ( depth Ġ- Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġflush () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Prefix ( prefix : ĠString , Ġnamespace Uri : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( namespace Uri Ġ!= Ġget Namespace Uri ( prefix )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Holder . add Prefix To Context ( prefix , Ġnamespace Uri ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Namespace Uri ( prefix : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnamespace Holder . getName space Uri ( prefix ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Prefix ( namespace Uri : ĠString ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnamespace Uri ?. let Ġ{ Ġnamespace Holder . get Prefix ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġnamespace Holder . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠNot Ġa Ġtag : Ġ- 1 Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG _ DEPTH _ NOT _ TAG Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG _ DEPTH _ FORCE _ IND ENT _ NEXT Ġ= ĠInt . MAX _ VALUE ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġenum Ġclass ĠWrite State Ġ{ ĊĠĠĠĠĠĠĠ ĠBefore Document , ĊĠĠĠĠĠĠĠ ĠAfter Xml Decl , ĊĠĠĠĠĠĠĠ ĠAfter Doc Type Decl , ĊĠĠĠĠĠĠĠ ĠIn Tag Content , ĊĠĠĠĠĠĠĠ ĠFinished ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ private Ġfun ĠIterable < Xml Event . Text Event >. join Repeated ( repe ats : ĠInt ): ĠList < Xml Event . Text Event > Ġ{ ĊĠĠĠ Ġval Ġit Ġ= Ġiterator () ĊĠĠĠ Ġif Ġ(! it . hasNext ()) Ġreturn Ġempty List () ĊĊĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < Xml Event . Text Event >() ĊĠĠĠ Ġvar Ġpending : ĠXml Event . Text Event ? Ġ= Ġnull ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġrepe ats ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( ev Ġin Ġthis @ join Repeated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pending Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Ġ= Ġev ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( pending . eventType Ġ== ĠEventType . COMMENT Ġ|| Ġpending . eventType Ġ!= Ġev . eventType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( pending ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Ġ= Ġev ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ev . eventType Ġ== Ġpending . eventType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Ġ= ĠXml Event . Text Event ( null , Ġpending . eventType , Ġpending . text Ġ+ Ġev . text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( pending Ġ!= Ġnull ) Ġresult . add ( pending ) ĊĠĠĠ Ġreturn Ġresult Ċ } ĊĊ