package Ġm ary k . yaml Ċ Ċ import Ġm ary k . json . Exception While Reading Json Ċ import Ġm ary k . json . Json Token Ċ import Ġm ary k . json . Json Token . End Document Ċ import Ġm ary k . json . Json Token . Start Document Ċ import Ġm ary k . json . Json Token . Value Ċ import Ġm ary k . json . TokenType Ċ import Ġm ary k . json . ValueType Ċ import Ġm ary k . lib . exceptions . ParseException Ċ import Ġm ary k . yaml . Plain Style Mode . NORMAL Ċ Ċ /** ĠRead Ġsingle Ġor Ġmultiple Ġyaml Ġdocuments Ġuntil Ġend Ġof Ġstream Ġor Ġ" ..." Ġ*/ Ċ internal Ġclass ĠDocument Reader ( ĊĠĠĠ Ġyaml Reader : ĠYaml Reader Impl Ċ ) Ġ: ĠYaml Char Reader ( yaml Reader ), ĊĠĠĠ ĠIs Yaml Char With Ind ents Reader Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġfinished With Directives : ĠBoolean ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġfirst Document Content Was Found Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġcontent Was Found Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġindent Count : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġread Until Token ( extra Indent : ĠInt , Ġtag : ĠTokenType ?): ĠJson Token Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . last Char Ġ== Ġ'\ u 0 0 0 0 ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . read () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( this . last Char ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'%' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . finished With Directives Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInvalid Yaml Content (" Cannot Ġstart Ġanother Ġdirectives Ġblock ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . finished With Directives Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . read () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . directive Reader Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . read Until Token ( 0 , Ġtag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'-' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . read () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException While Reading Json ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġplain String Reader ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( this . last Char ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'-' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . read () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException While Reading Json ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplain String Reader ("- ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( this . last Char ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'-' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( this . first Document Content Was Found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . content Was Found Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . indent Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStart Document ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFirst Ġfound Ġdocument Ġopen Ġbefore Ġcontent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . finished With Directives Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . read Until Token ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġplain String Reader ("-- ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' Ġ', Ġ'\ n ', Ġ'\ r ' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Already On Indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSequence Items Reader ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyaml Reader Ġ= Ġthis . yaml Reader , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Reader Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . current Reader Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . read Until Token ( 0 , Ġtag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġplain String Reader ("- ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'.' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . read () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException While Reading Json ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġplain String Reader ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( this . last Char ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'.' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . read () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException While Reading Json ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġplain String Reader (".") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( this . last Char ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'.' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnd Document ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġplain String Reader (" .. ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġplain String Reader (".") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'#' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . comment Reader Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . read Until Token ( 0 , Ġtag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'\ n ' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . read Until Token ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' Ġ' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindent Count Ġ= Ġthis . yaml Reader . skip Empty Lines And Comments And Count Ind ents () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . indent Count Ġ<= Ġ 0 Ġ&& Ġ! this . content Was Found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . indent Count Ġ= Ġindent Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( indent Count Ġ!= Ġthis . indent Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInvalid Yaml Content (" Cannot Ġhave Ġa Ġnew Ġindent Ġlevel Ġwhich Ġis Ġlower Ġthan Ġcurrent ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . select Reader And Read ( true , Ġtag , Ġ 0 ) Ġ{ Ġvalue , Ġis Plain String , Ġtag g , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Yaml Value Token ( value , Ġtag g , Ġis Plain String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . finished With Directives Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInvalid Yaml Content (" Directives Ġhas Ġto Ġend Ġwith Ġan Ġstart Ġdocument Ġ--- Ġseparator ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . check Already On Indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . select Reader And Read ( true , Ġtag , Ġ 0 ) Ġ{ Ġvalue , Ġis Plain String , Ġtag g , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Yaml Value Token ( value , Ġtag g , Ġis Plain String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . first Document Content Was Found Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . content Was Found Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfound Map ( tag : ĠTokenType ?, Ġstarted At Indent : ĠInt ): ĠJson Token Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMap Items Reader ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . yaml Reader , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindent ToAdd Ġ= Ġstarted At Indent ĊĠĠĠĠĠĠĠ Ġ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . current Reader Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . read Until Token ( 0 , Ġtag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcheck And Create FieldName ( fieldName : ĠString ?, Ġis Plain String Reader : ĠBoolean ) Ġ= ĊĠĠĠĠĠĠĠ Ġthrow ĠParseException (" Field Names Ġare Ġonly Ġallowed Ġwithin Ġmaps ") ĊĊĠĠĠ Ġoverride Ġfun Ġcontinue Indent Level ( extra Indent : ĠInt , Ġtag : ĠTokenType ?): ĠJson Token Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( this . indent Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Until Token ( extra Indent , Ġtag ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . select Reader And Read ( true , Ġtag , Ġextra Indent ) Ġ{ Ġvalue , Ġis Plain String , Ġtag g , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Yaml Value Token ( value , Ġtag g , Ġis Plain String ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġend Indent Level ( ĊĠĠĠĠĠĠĠ Ġindent Count : ĠInt , ĊĠĠĠĠĠĠĠ Ġtag : ĠTokenType ?, ĊĠĠĠĠĠĠĠ Ġtoken To Return : Ġ(() Ġ-> ĠJson Token )? ĊĠĠĠ Ġ): ĠJson Token Ġ{ ĊĠĠĠĠĠĠĠ Ġtoken To Return ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . yaml Reader . set Un claimed Indenting ( indent Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( indent Count Ġ< Ġthis . indent Count Ġ&& Ġindent Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInvalid Yaml Content (" Document Ġshould Ġnot Ġhave Ġa Ġlower Ġindent Ġthan Ġstarted ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġread Until Token ( indent Count , Ġtag ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġindent Count () Ġ= Ġthis . indent Count ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Reader Interrupt (): ĠJson Token Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠEnd Document ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġplain String Reader ( start With : ĠString ): ĠJson Token Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Already On Indent () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis . plain String Reader ( start With , Ġnull , ĠNORMAL , Ġ 0 ) Ġ{ Ġvalue , Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠValue ( value , ĠValueType . String ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠChecks Ġif Ġindentation Ġwas Ġnot Ġreset Ġand Ġthus Ġreading Ġon Ġa Ġlower Ġindent Ġthan Ġstarted Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcheck Already On Indent () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . indent Count Ġ> Ġ 0 Ġ&& Ġthis . content Was Found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInvalid Yaml Content (" Document Ġshould Ġnot Ġhave Ġa Ġlower Ġindent Ġthan Ġstarted ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ