// ĠCopyright Ġ 2 0 0 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġcom . intellij . ui . svg Ċ Ċ import Ġorg . apache . bat ik . anim . dom . SVG 1 2 DOM Implementation Ċ import Ġorg . apache . bat ik . anim . dom . SVG DOM Implementation Ċ import Ġorg . apache . bat ik . anim . dom . SVG OM Document Ċ import Ġorg . apache . bat ik . constants . XML Constants Ċ import Ġorg . apache . bat ik . dom . Abstract Document Ċ import Ġorg . apache . bat ik . dom . util . Document Descriptor Ċ import Ġorg . apache . bat ik . dom . util . HashTable Stack Ċ import Ġorg . apache . bat ik . dom . util . XML Support Ċ import Ġorg . apache . bat ik . trans coder . Trans coder Exception Ċ import Ġorg . apache . bat ik . util . Parsed URL Ċ import Ġorg . w 3 c . dom .* Ċ import Ġorg . xml . sax .* Ċ import Ġorg . xml . sax . ext . Lex ical Handler Ċ import Ġorg . xml . sax . helpers . Default Handler Ċ import Ġjava . io . IOException Ċ import Ġjava . io . Inter rupted IOException Ċ import Ġjavax . xml . parsers . Parser ConfigurationException Ċ import Ġjavax . xml . parsers . SAX Parser Factory Ċ Ċ class ĠS ax Svg Document Factory Ġ: ĠDefault Handler (), ĠLex ical Handler Ġ{ ĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġs ax Factory Ġ= ĠSAX Parser Factory . newInstance () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġs ax Factory . set Feature (" http :// xml . org / sax / features / external - general - entities ", Ġfalse ) ĊĠĠĠĠĠĠĠ Ġs ax Factory . set Feature (" http :// xml . org / sax / features / external - parameter - entities ", Ġfalse ) ĊĠĠĠĠĠĠĠ Ġs ax Factory . set Feature (" http :// apache . org / xml / features / non valid ating / load - external - dtd ", Ġfalse ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġcatch Ġ( e : ĠSAX Not Re cognized Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġcatch Ġ( e : ĠSAX NotSupportedException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġcatch Ġ( e : ĠParser ConfigurationException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe ĠDOM Ġimplementation Ġused Ġto Ġcreate Ġthe Ġdocument . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġimplementation : ĠDOM Implementation Ġ= ĠSVG DOM Implementation . get DOM Implementation () ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe ĠSAX 2 Ġparser Ġobject . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġparser : ĠXML Reader ? Ġ= Ġnull ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġcreated Ġdocument . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġdocument : ĠDocument ? Ġ= Ġnull ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġcreated Ġdocument Ġdescriptor . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġdocument Descriptor : ĠDocument Descriptor ? Ġ= Ġnull ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠWhether Ġa Ġdocument Ġdescriptor Ġmust Ġbe Ġgenerated . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġcreate Document Descriptor : ĠBoolean Ġ= Ġfalse ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġcurrent Ġnode . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar ĠcurrentNode : ĠNode ? Ġ= Ġnull ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġlocator . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġlocator : ĠLoc ator ? Ġ= Ġnull ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠContains Ġcollected Ġstring Ġdata . Ġ ĠMay Ġbe ĠText , ĠC DATA Ġor ĠComment . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġval ĠstringBuilder Ġ= ĠStringBuilder () ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe ĠD TD Ġto Ġuse Ġwhen Ġthe Ġdocument Ġis Ġcreated . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġdo ctype : ĠDocument Type ? Ġ= Ġnull ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠIndicates Ġif ĠstringBuilder Ġhas Ġcontent , Ġneeded Ġin Ġcase Ġof ĊĠĠ Ġ* Ġzero Ġsized Ġ" text " Ġcontent . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġstring Content : ĠBoolean Ġ= Ġfalse ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠTrue Ġif Ġthe Ġparser Ġis Ġcurrently Ġparsing Ġa ĠD TD . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġin DTD : ĠBoolean Ġ= Ġfalse ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠTrue Ġif Ġthe Ġparser Ġis Ġcurrently Ġparsing Ġa ĠC DATA Ġsection . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġin CDATA : ĠBoolean Ġ= Ġfalse ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠWhether Ġthe Ġparser Ġstill Ġhasn 't Ġread Ġthe Ġdocument Ġelement 's ĊĠĠ Ġ* Ġopening Ġtag . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġin Pro log : ĠBoolean Ġ= Ġfalse ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠWhether Ġthe Ġdocument Ġjust Ġparsed Ġwas Ġstandalone . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġis Standalone : ĠBoolean Ġ= Ġfalse ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠXML Ġversion Ġof Ġthe Ġdocument Ġjust Ġparsed . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġxml Version : ĠString ? Ġ= Ġnull ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġstack Ġused Ġto Ġstore Ġthe Ġnamespace ĠURIs . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġnamespaces Ġ= ĠHash Table Stack () ĊĊĠ Ġoverride Ġfun Ġset Document Locator ( l : ĠLoc ator ?) Ġ{ ĊĠĠĠ Ġlocator Ġ= Ġl ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġfatal Error ( e : ĠSAX ParseException ) Ġ= Ġthrow Ġe ĊĊĠ Ġoverride Ġfun Ġerror ( e : ĠSAX ParseException ) Ġ= Ġthrow Ġe ĊĊĠ Ġoverride Ġfun Ġwarning ( e : ĠSAX ParseException ?) Ġ{ ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġstart Document () Ġ{ ĊĠĠĠ Ġnamespaces Ġ= ĠHash Table Stack () ĊĠĠĠ Ġval Ġnamespaces Ġ= Ġnamespaces ĊĠĠĠ Ġnamespaces . put (" xml ", ĠXML Support . XML _ NAMESPACE _ URI ) ĊĠĠĠ Ġnamespaces . put (" xmlns ", ĠXML Support . XML NS _ NAMESPACE _ URI ) ĊĠĠĠ Ġnamespaces . put ("", Ġnull ) ĊĊĠĠĠ Ġin DTD Ġ= Ġfalse ĊĠĠĠ Ġin CDATA Ġ= Ġfalse ĊĠĠĠ Ġin Pro log Ġ= Ġtrue ĊĠĠĠ ĠcurrentNode Ġ= Ġnull ĊĠĠĠ Ġdocument Ġ= Ġnull ĊĠĠĠ Ġdo ctype Ġ= Ġnull ĊĠĠĠ Ġis Standalone Ġ= Ġfalse ĊĠĠĠ Ġxml Version Ġ= ĠXML Constants . XML _ VERSION _ 1 0 ĊĊĠĠĠ ĠstringBuilder . set Length ( 0 ) ĊĠĠĠ Ġstring Content Ġ= Ġfalse ĊĊĠĠĠ Ġif Ġ( create Document Descriptor ) Ġ{ ĊĠĠĠĠĠ Ġdocument Descriptor Ġ= ĠDocument Descriptor () ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġdocument Descriptor Ġ= Ġnull ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġstart Element ( uri : ĠString ?, Ġlocal Name : ĠString ?, Ġraw Name : ĠString ?, Ġattributes : ĠAttributes ) Ġ{ ĊĠĠĠ Ġif Ġ( in Pro log ) Ġ{ ĊĠĠĠĠĠ Ġin Pro log Ġ= Ġfalse ĊĠĠĠĠĠ Ġif Ġ( parser Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġis Standalone Ġ= Ġparser !!. get Feature (" http :// xml . org / sax / features / is - standalone ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( ignore : ĠSAX Not Re cognized Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġxml Version Ġ= Ġparser !!. getProperty (" http :// xml . org / sax / properties / document - xml - version ") Ġas ĠString ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( ignore : ĠSAX Not Re cognized Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġnamespaces Ġresolution ĊĠĠĠ Ġnamespaces . push () ĊĠĠĠ Ġvar Ġversion : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġattributes . length ) Ġ{ ĊĠĠĠĠĠ Ġval Ġq Name Ġ= Ġattributes . get QName ( i ) ĊĠĠĠĠĠ Ġval Ġs Len Ġ= Ġq Name . length ĊĠĠĠĠĠ Ġif Ġ( s Len Ġ< Ġ 5 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( q Name Ġ== Ġ" version ") Ġ{ ĊĠĠĠĠĠĠĠ Ġversion Ġ= Ġattributes . getValue ( i ) ĊĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ(! q Name . startsWith (" xmlns ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġif Ġ( s Len Ġ== Ġ 5 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnamespaces . put ("", Ġattributes . getValue ( i )?. take If ( String :: isNotEmpty )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġif Ġ( q Name [ 5 ] Ġ== Ġ': ') Ġ{ ĊĠĠĠĠĠĠĠ Ġnamespaces . put ( q Name . substring ( 6 ), Ġattributes . getValue ( i )?. take If ( String :: isNotEmpty )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠAdd Ġany Ġcollected ĠString ĠData Ġbefore Ġelement . ĊĠĠĠ Ġappend String Data () ĊĊĠĠĠ Ġ// ĠElement Ġcreation ĊĠĠĠ Ġvar Ġidx Ġ= Ġraw Name !!. indexOf (': ') ĊĠĠĠ Ġval Ġn sp Ġ= Ġwhen Ġ( idx ) Ġ{ ĊĠĠĠĠĠ Ġ- 1 , Ġraw Name . length Ġ- Ġ 1 Ġ-> Ġ"" ĊĠĠĠĠĠ Ġelse Ġ-> Ġraw Name . substring ( 0 , Ġidx ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġe : ĠElement ĊĠĠĠ Ġvar Ġns URI : ĠString ? Ġ= Ġnamespaces . get ( n sp ) ĊĠĠĠ Ġif Ġ( currentNode Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġimplementation Ġ= Ġget DOM Implementation ( version ) ĊĠĠĠĠĠ Ġdocument Ġ= Ġimplementation . create Document ( ns URI , Ġraw Name , Ġdo ctype ) ĊĠĠĠĠĠ Ġe Ġ= Ġdocument !!. documentElement ĊĠĠĠĠĠ ĠcurrentNode Ġ= Ġe ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġe Ġ= Ġdocument !!. createElement NS ( ns URI , Ġraw Name ) ĊĠĠĠĠĠ ĠcurrentNode !!. appendChild ( e ) ĊĠĠĠĠĠ ĠcurrentNode Ġ= Ġe ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠStorage Ġof Ġthe Ġline Ġnumber . ĊĠĠĠ Ġif Ġ( create Document Descriptor Ġ&& Ġlocator Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġdocument Descriptor !!. setLocation ( e , Ġlocator !!. line Number , Ġlocator !!. column Number ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠAttributes Ġcreation ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġattributes . length ) Ġ{ ĊĠĠĠĠĠ Ġval Ġq Name Ġ= Ġattributes . get QName ( i ) ĊĠĠĠĠĠ Ġif Ġ( q Name Ġ== Ġ" xmlns ") Ġ{ ĊĠĠĠĠĠĠĠ Ġe . setAttribute NS ( XML Support . XML NS _ NAMESPACE _ URI , Ġq Name , Ġattributes . getValue ( i )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġidx Ġ= Ġq Name . indexOf (': ') ĊĠĠĠĠĠĠĠ Ġns URI Ġ= Ġwhen Ġ( idx ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ- 1 Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnamespaces . get ( q Name . substring ( 0 , Ġidx )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġe . setAttribute NS ( ns URI , Ġq Name , Ġattributes . getValue ( i )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġend Element ( uri : ĠString ?, Ġlocal Name : ĠString ?, Ġraw Name : ĠString ?) Ġ{ ĊĠĠĠ Ġappend String Data () Ġ// Ġadd Ġstring Ġdata Ġif Ġany . ĊĊĠĠĠ Ġif Ġ( currentNode Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ ĠcurrentNode Ġ= ĠcurrentNode !!. parentNode ĊĠĠĠ Ġ} ĊĠĠĠ Ġnamespaces . pop () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġappend String Data () Ġ{ ĊĠĠĠ Ġif Ġ(! string Content ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġstr Ġ= ĠstringBuilder . toString () ĊĠĠĠ ĠstringBuilder . set Length ( 0 ) Ġ// Ġreuse Ġbuffer . ĊĠĠĠ Ġstring Content Ġ= Ġfalse ĊĠĠĠ Ġif Ġ( currentNode Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġval Ġn : ĠNode ĊĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġin CDATA Ġ-> Ġn Ġ= Ġdocument !!. create CDATA Section ( str ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġn Ġ= Ġdocument !!. createTextNode ( str ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠcurrentNode !!. appendChild ( n ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcharacters ( ch : ĠChar Array ?, Ġstart : ĠInt , Ġlength : ĠInt ) Ġ{ ĊĠĠĠ ĠstringBuilder . append ( ch , Ġstart , Ġlength ) ĊĠĠĠ Ġstring Content Ġ= Ġtrue ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġign orable Whitespace ( ch : ĠChar Array ?, Ġstart : ĠInt , Ġlength : ĠInt ) Ġ{ ĊĠĠĠ ĠstringBuilder . append ( ch , Ġstart , Ġlength ) ĊĠĠĠ Ġstring Content Ġ= Ġtrue ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġprocessing Instruction ( target : ĠString ?, Ġdata : ĠString ?) Ġ{ ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġstart DTD ( name : ĠString , Ġpublic Id : ĠString , Ġsystem Id : ĠString ) Ġ{ ĊĠĠĠ Ġappend String Data () Ġ// ĠAdd Ġcollected Ġstring Ġdata Ġbefore Ġentering ĠD TD ĊĠĠĠ Ġdo ctype Ġ= Ġimplementation . create Document Type ( name , Ġpublic Id , Ġsystem Id ) ĊĠĠĠ Ġin DTD Ġ= Ġtrue ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġend DTD () Ġ{ ĊĠĠĠ Ġin DTD Ġ= Ġfalse ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġstart Entity ( name : ĠString ) Ġ{ ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġend Entity ( name : ĠString ) Ġ{ ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġstart CDATA () Ġ{ ĊĠĠĠ Ġappend String Data () Ġ// ĠAdd Ġany Ġcollected ĠString ĠData Ġbefore ĠC Data ĊĠĠĠ Ġin CDATA Ġ= Ġtrue ĊĠĠĠ Ġstring Content Ġ= Ġtrue Ġ// Ġalways Ġcreate ĠC DATA Ġeven Ġif Ġempty . ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġend CDATA () Ġ{ ĊĠĠĠ Ġappend String Data () Ġ// ĠAdd Ġthe ĠC DATA Ġsection ĊĠĠĠ Ġin CDATA Ġ= Ġfalse ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcomment ( ch : ĠChar Array , Ġstart : ĠInt , Ġlength : ĠInt ) Ġ{ ĊĠ Ġ} ĊĊĠ Ġfun Ġcreate Document ( uri : ĠString ?, Ġinput Source : ĠInput Source ): ĠDocument Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġval Ġparser Ġ= Ġs ax Factory . new SAX Parser (). xml Reader !! ĊĠĠĠĠĠ Ġthis . parser Ġ= Ġparser ĊĊĠĠĠĠĠ Ġparser . content Handler Ġ= Ġthis ĊĠĠĠĠĠ Ġparser . dtd Handler Ġ= Ġthis ĊĠĠĠĠĠ Ġparser . entity Resolver Ġ= Ġthis ĊĠĠĠĠĠ Ġparser . error Handler Ġ= Ġthis ĊĊĠĠĠĠĠ Ġparser . set Feature (" http :// xml . org / sax / features / namespaces ", Ġtrue ) ĊĠĠĠĠĠ Ġparser . set Feature (" http :// xml . org / sax / features / namespace - prefixes ", Ġtrue ) ĊĠĠĠĠĠ Ġparser . set Feature (" http :// xml . org / sax / features / validation ", Ġfalse ) ĊĠĠĠĠĠ Ġparser . set Feature (" http :// xml . org / sax / features / external - general - entities ", Ġfalse ) ĊĠĠĠĠĠ Ġparser . set Feature (" http :// xml . org / sax / features / external - parameter - entities ", Ġfalse ) ĊĠĠĠĠĠ Ġparser . set Feature (" http :// apache . org / xml / features / non valid ating / load - external - dtd ", Ġfalse ) ĊĠĠĠĠĠ Ġparser . setProperty (" http :// xml . org / sax / properties / lexical - handler ", Ġthis ) ĊĊĠĠĠĠĠ Ġparser . parse ( input Source ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġcatch Ġ( e : ĠSAX Exception ) Ġ{ ĊĠĠĠĠĠ Ġval Ġex Ġ= Ġe . exception ĊĠĠĠĠĠ Ġif Ġ( ex Ġ!= Ġnull Ġ&& Ġex Ġis ĠInter rupted IOException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Ġex ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġthrow ĠTrans coder Exception ( e ) ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠcurrentNode Ġ= Ġnull ĊĠĠĠ Ġval Ġret Ġ= Ġdocument ĊĠĠĠ Ġdocument Ġ= Ġnull ĊĠĠĠ Ġdo ctype Ġ= Ġnull ĊĠĠĠ Ġlocator Ġ= Ġnull ĊĠĠĠ Ġparser Ġ= Ġnull ĊĠĠĠ Ġval Ġresult Ġ= Ġret !! ĊĠĠĠ Ġval Ġdoc Elem Ġ= Ġresult . documentElement ĊĠĠĠ Ġval Ġdoc Elem NS Ġ= Ġdoc Elem . namespace URI ĊĠĠĠ Ġ@ Suppress (" Sus pic ious Equals Combination ") ĊĠĠĠ Ġif Ġ( doc Elem NS Ġ!== ĠSVG DOM Implementation . SVG _ NAMESPACE _ URI Ġ&& Ġ( doc Elem NS Ġ== Ġnull Ġ|| Ġdoc Elem NS Ġ!= ĠSVG DOM Implementation . SVG _ NAMESPACE _ URI )) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠIOException ( ĊĠĠĠĠĠĠĠ Ġ" Root Ġelement Ġnamespace Ġdoes Ġnot Ġmatch Ġthat Ġrequested :\ n Requested : Ġ${ SVG DOM Implementation . SVG _ NAMESPACE _ URI }\ n Found : Ġ$ doc Elem NS ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( doc Elem . local Name Ġ!= Ġ" svg ") Ġ{ ĊĠĠĠĠĠ Ġthrow ĠIOException (" Root Ġelement Ġdoes Ġnot Ġmatch Ġthat Ġrequested :\ n Requested : Ġsvg \ n Found : Ġ${ doc Elem . local Name }") ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( uri Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġ( result Ġas ĠSVG OM Document ). parsed URL Ġ= ĠParsed URL ( uri ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġd Ġ= Ġresult Ġas ĠAbstract Document ĊĠĠĠ Ġd . document URI Ġ= Ġuri ĊĠĠĠ Ġd . xml Standalone Ġ= Ġis Standalone ĊĠĠĠ Ġd . xml Version Ġ= Ġxml Version ĊĠĠĠ Ġreturn Ġresult ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġget DOM Implementation ( ver : ĠString ?): ĠDOM Implementation Ġ{ ĊĠ Ġif Ġ( ver Ġ== Ġnull Ġ|| Ġver . isEmpty () Ġ|| Ġver Ġ== Ġ" 1 . 0 " Ġ|| Ġver Ġ== Ġ" 1 . 1 ") Ġ{ ĊĠĠĠ Ġreturn ĠSVG DOM Implementation . get DOM Implementation () ĊĠ Ġ} ĊĠ Ġelse Ġif Ġ( ver Ġ== Ġ" 1 . 2 ") Ġ{ ĊĠĠĠ Ġreturn ĠSVG 1 2 DOM Implementation . get DOM Implementation () ĊĠ Ġ} ĊĠ Ġelse Ġ{ ĊĠĠĠ Ġthrow ĠRuntimeException (" Unsupported ĠSVG Ġversion Ġ'$ ver '") ĊĠ Ġ} Ċ } Ċ Ċ private Ġinterface ĠPre Info Ġ{ ĊĠ Ġfun Ġcreate Node ( doc : ĠDocument ): ĠNode Ċ } Ċ Ċ private Ġclass ĠProcessing Instruction Info ( var Ġtarget : ĠString ?, Ġvar Ġdata : ĠString ?) Ġ: ĠPre Info Ġ{ ĊĠ Ġoverride Ġfun Ġcreate Node ( doc : ĠDocument ): ĠNode Ġ= Ġdoc . create Processing Instruction ( target , Ġdata ) Ċ } Ċ Ċ private Ġclass ĠComment Info ( var Ġcomment : ĠString ) Ġ: ĠPre Info Ġ{ ĊĠ Ġoverride Ġfun Ġcreate Node ( doc : ĠDocument ): ĠNode Ġ= Ġdoc . create Comment ( comment ) Ċ } Ċ Ċ private Ġclass ĠC Data Info ( var Ġc data : ĠString ) Ġ: ĠPre Info Ġ{ ĊĠ Ġoverride Ġfun Ġcreate Node ( doc : ĠDocument ): ĠNode Ġ= Ġdoc . create CDATA Section ( cdata ) Ċ } Ċ Ċ private Ġclass ĠText Info ( var Ġtext : ĠString ) Ġ: ĠPre Info Ġ{ ĊĠ Ġoverride Ġfun Ġcreate Node ( doc : ĠDocument ): ĠNode Ġ= Ġdoc . createTextNode ( text ) Ċ }