/* Ċ Ġ* ĠCopyright Ġ 2 0 0 0 - 2 0 1 6 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . intellij . configuration Store Ċ Ċ import Ġorg . j dom .* Ċ import Ġjava . io . Data InputStream Ċ import Ġjava . io . Data OutputStream Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . OutputStream Ċ Ċ private Ġenum Ġclass ĠType Marker Ġ{ ĊĠ ĠELEMENT , ĠC DATA , ĠTEXT , ĠELEMENT _ END Ċ } Ċ Ċ fun Ġserialize Element To Binary ( element : ĠElement , Ġout : ĠOutputStream ) Ġ{ ĊĠ Ġwrite Element ( element , ĠData OutputStream ( out )) Ċ } Ċ Ċ fun Ġread Element ( input : ĠInputStream ) Ġ= Ġread Element ( Data InputStream ( input )) Ċ Ċ fun Ġread Element ( input : ĠData InputStream ): ĠElement Ġ{ ĊĠ Ġval Ġelement Ġ= ĠElement ( input . read UTF ()) ĊĠ Ġread Attributes ( element , Ġinput ) ĊĠ Ġread Content ( element , Ġinput ) ĊĠ Ġreturn Ġelement Ċ } Ċ Ċ private Ġfun Ġread Content ( element : ĠElement , Ġinput : ĠData InputStream ) Ġ{ ĊĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠ Ġwhen Ġ( input . read ()) Ġ{ ĊĠĠĠĠĠ ĠType Marker . ELEMENT . ordinal Ġ-> Ġelement . add Content ( read Element ( input )) ĊĠĠĠĠĠ ĠType Marker . TEXT . ordinal Ġ-> Ġelement . add Content ( Text ( input . read UTF ())) ĊĠĠĠĠĠ ĠType Marker . CDATA . ordinal Ġ-> Ġelement . add Content ( CDATA ( input . read UTF ())) ĊĠĠĠĠĠ ĠType Marker . ELEMENT _ END . ordinal Ġ-> Ġreturn ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġwrite Element ( element : ĠElement , Ġout : ĠData OutputStream ) Ġ{ ĊĠ Ġout . write UTF ( element . name ) ĊĊĠ Ġwrite Attributes ( out , Ġelement . attributes ) ĊĊĠ Ġval Ġcontent Ġ= Ġelement . content ĊĠ Ġfor Ġ( item Ġin Ġcontent ) Ġ{ ĊĠĠĠ Ġif Ġ( item Ġis ĠElement ) Ġ{ ĊĠĠĠĠĠ Ġout . write Byte ( Type Marker . ELEMENT . ordinal ) ĊĠĠĠĠĠ Ġwrite Element ( item , Ġout ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġif Ġ( item Ġis ĠText ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ(! is All Whitespace ( item )) Ġ{ ĊĠĠĠĠĠĠĠ Ġout . write Byte ( Type Marker . TEXT . ordinal ) ĊĠĠĠĠĠĠĠ Ġout . write UTF ( item . text ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġif Ġ( item Ġis ĠC DATA ) Ġ{ ĊĠĠĠĠĠ Ġout . write Byte ( Type Marker . CDATA . ordinal ) ĊĠĠĠĠĠ Ġout . write UTF ( item . text ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĠ Ġout . write Byte ( Type Marker . ELEMENT _ END . ordinal ) Ċ } Ċ Ċ private Ġfun Ġwrite Attributes ( out : ĠData OutputStream , Ġattributes : ĠList < Attribute > ?) Ġ{ ĊĠ Ġval Ġsize Ġ= Ġattributes ?. size Ġ?: Ġ 0 ĊĠ Ġout . write ( size ) ĊĠ Ġif Ġ( size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠ Ġreturn ĊĠ Ġ} ĊĊĠ Ġif Ġ( size Ġ> Ġ 2 5 5 ) Ġ{ ĊĠĠĠ Ġthrow ĠUnsupportedOperationException (" attributes Ġsize Ġ> Ġ 2 5 5 ") ĊĠ Ġ} ĊĠ Ġelse Ġ{ ĊĠĠĠ Ġfor Ġ( attribute Ġin Ġattributes !! ) Ġ{ ĊĠĠĠĠĠ Ġout . write UTF ( attribute . name ) ĊĠĠĠĠĠ Ġout . write UTF ( attribute . value ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġread Attributes ( element : ĠElement , Ġinput : ĠData InputStream ) Ġ{ ĊĠ Ġval Ġsize Ġ= Ġinput . read Unsigned Byte () ĊĠ Ġfor Ġ( i Ġin Ġ 0 .. size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠ Ġelement . setAttribute ( Attribute ( input . read UTF (), Ġinput . read UTF ())) ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġis All Whitespace ( obj : ĠContent ): ĠBoolean Ġ{ ĊĠ Ġval Ġstr Ġ= Ġ( obj Ġas ? ĠText )?. text Ġ?: Ġreturn Ġfalse ĊĠ Ġfor Ġ( i Ġin Ġ 0 .. str . length Ġ- Ġ 1 ) Ġ{ ĊĠĠĠ Ġif Ġ(! Verifier . is XML Whitespace ( str [ i ])) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĠ Ġreturn Ġtrue Ċ }