/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 9 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . script ing . compiler . plugin . repl . reader Ċ Ċ import Ġorg . jetbrains . kotlin . cli . common . repl . repl Un escape Line Break s Ċ import Ġorg . jetbrains . kotlin . script ing . compiler . plugin . repl . writer . Repl Writer Ċ import Ġorg . w 3 c . dom . Element Ċ import Ġorg . xml . sax . Input Source Ċ import Ġjava . io . ByteArray InputStream Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . InputStream Ċ import Ġjavax . xml . parsers . Document BuilderFactory Ċ Ċ class ĠRe pl System In Wrapper ( ĊĠĠĠ Ġprivate Ġval Ġstdin : ĠInputStream , ĊĠĠĠ Ġprivate Ġval Ġrepl Writer : ĠRe pl Writer Ċ ) Ġ: ĠInputStream () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġis Xml Incomplete Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġis Last Byte Processed Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis ReadLine Start Sent Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġbyte Builder Ġ= ĠByteArrayOutputStream () ĊĠĠĠ Ġprivate Ġvar Ġcur Byte Pos Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġinput ByteArray Ġ= Ġbyte ArrayOf () ĊĊĠĠĠ Ġprivate Ġval Ġis At Buffer End : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcur Byte Pos Ġ== Ġinput ByteArray . size ĊĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġvar Ġis Repl Script Executing Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġread (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Last Byte Processed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Repl Script Executing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ReadLine Start Sent Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepl Writer . notify ReadLine End () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Last Byte Processed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( is Xml Incomplete ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is ReadLine Start Sent Ġ&& Ġis Repl Script Executing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepl Writer . notify ReadLine Start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ReadLine Start Sent Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbyte Builder . write ( stdin . read ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( byte Builder . toString (). endsWith ('\ n ')) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Xml Incomplete Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Last Byte Processed Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ByteArray Ġ= Ġparse Input (). toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnext Byte Ġ= Ġinput ByteArray [ cur Byte Pos ++ ]. toInt () ĊĠĠĠĠĠĠĠ Ġreset Buffer IfNeeded () ĊĠĠĠĠĠĠĠ Ġreturn Ġnext Byte ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġparse Input (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġxml Input Ġ= Ġbyte Builder . toString () ĊĠĠĠĠĠĠĠ Ġval Ġun escaped Xml Ġ= Ġparse Xml ( xml Input ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Repl Script Executing ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun escaped Xml . repl Un escape Line Break s () ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun escaped Xml ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreset Buffer IfNeeded () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is At Buffer End ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Xml Incomplete Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbyte Builder Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcur Byte Pos Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Last Byte Processed Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġparse Xml ( input Message : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġfun Ġstr To Source ( s : ĠString ) Ġ= ĠInput Source ( ByteArray InputStream ( s . toByteArray ())) ĊĊĠĠĠ Ġval Ġdoc Factory Ġ= ĠDocument BuilderFactory . newInstance () ĊĠĠĠ Ġval Ġdoc Builder Ġ= Ġdoc Factory . new Document Builder () ĊĠĠĠ Ġval Ġinput Ġ= Ġdoc Builder . parse ( str To Source ( input Message )) ĊĊĠĠĠ Ġval Ġroot Ġ= Ġinput . firstChild Ġas ĠElement ĊĠĠĠ Ġreturn Ġroot . textContent Ċ } Ċ