/* Ċ Ġ* ĠThis Ġfile Ġis Ġpart Ġof ĠK rypt on ĠN BT , Ġlicensed Ġunder Ġthe ĠMIT Ġlicense . Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠK rypt on MC Ġand Ġcontributors Ċ Ġ* Ċ Ġ* ĠThis Ġproject Ġis Ġlicensed Ġunder Ġthe Ġterms Ġof Ġthe ĠMIT Ġlicense . Ċ Ġ* ĠFor Ġmore Ġdetails , Ġplease Ġreference Ġthe ĠLICENSE Ġfile Ġin Ġthe Ġtop - level Ġdirectory . Ċ Ġ*/ Ċ package Ġorg . k rypt on mc . nbt Ċ Ċ import Ġkotlin . jvm . Jvm Static Ċ Ċ /** Ċ Ġ* ĠAn Ġex amin er Ġthat Ġapp ends Ġthe Ġresults Ġof Ġthe Ġexam ination Ġto Ġa Ġstring . Ċ Ġ*/ Ċ public Ġdata Ġclass ĠString Tag Ex amin er ( private Ġval Ġbuilder : ĠStringBuilder Ġ= ĠStringBuilder ()) Ġ: ĠTag Ex amin er < String > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġexamine ( tag : ĠTag ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġtag . exam ine ( this ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexamine End ( tag : ĠEnd Tag ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuilder . append (" END ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexamine Byte ( tag : ĠByte Tag ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuilder . append ( tag . value ). append (' b ') ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexamine Short ( tag : ĠShort Tag ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuilder . append ( tag . value ). append (' s ') ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexamine Int ( tag : ĠInt Tag ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuilder . append ( tag . value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexamine Long ( tag : ĠLong Tag ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuilder . append ( tag . value ). append (' L ') ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexamine Float ( tag : ĠFloat Tag ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuilder . append ( tag . value ). append (' f ') ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexamine Double ( tag : ĠDouble Tag ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuilder . append ( tag . value ). append (' d ') ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexamine ByteArray ( tag : ĠByteArray Tag ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuilder . append ("[ B ; ") ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġtag . data ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdata . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ!= Ġ 0 ) Ġbuilder . append (',') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( data [ i ]). append (' B ') ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . append (' ]') ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexamine String ( tag : ĠString Tag ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuilder . append ( quote And Escape ( tag . value )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexamine List ( tag : ĠList Tag ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuilder . append ('[ ') ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġtag . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ!= Ġ 0 ) Ġbuilder . append (',') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( String Tag Ex amin er (). exam ine ( tag [ i ])) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . append (' ]') ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexamine Compound ( tag : ĠCompound Tag ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuilder . append ('{ ') ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= Ġtag . keys . to Mutable List (). apply Ġ{ Ġsort () Ġ} ĊĠĠĠĠĠĠĠ Ġkeys . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( builder . length Ġ!= Ġ 1 ) Ġbuilder . append (',') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( escape ( it )). append (': '). append ( String Tag Ex amin er (). exam ine ( tag [ it ] !! )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . append (' }') ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexamine IntArray ( tag : ĠInt Array Tag ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuilder . append ("[ I ; ") ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġtag . data ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdata . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ!= Ġ 0 ) Ġbuilder . append (',') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( data [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . append (' ]') ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexamine Long Array ( tag : ĠLong Array Tag ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuilder . append ("[ L ; ") ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġtag . data ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdata . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ!= Ġ 0 ) Ġbuilder . append (',') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( data [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . append (' ]') ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠVALUE _ REGEX Ġ= Ġ"[ A - Za - z 0 - 9 ._ +- ]+ ". to Regex () ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġescape ( text : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( VALUE _ REGEX . matches ( text )) Ġreturn Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġquote And Escape ( text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġquote And Escape ( text : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠStringBuilder (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġquote Ġ= Ġ 0 . to Char () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġtext . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Ġ= Ġtext [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Ġ== Ġ'\\ ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ('\\ ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( current Ġ== Ġ'"' Ġ|| Ġcurrent Ġ== Ġ'\' ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( quote Ġ== Ġ 0 . to Char ()) Ġquote Ġ= Ġif Ġ( current Ġ== Ġ'" ') Ġ'\'' Ġelse Ġ'"' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( quote Ġ== Ġcurrent ) Ġbuilder . append ('\\ ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( current ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( quote Ġ== Ġ 0 . to Char ()) Ġquote Ġ= Ġ'"' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder [ 0 ] Ġ= Ġquote ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( quote ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuilder . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ