U mf@sLddgZddlmZddlTGdddeZGdddZGdddZd S) Emitter EmitterError) YAMLError)*c@s eZdZdS)rN)__name__ __module__ __qualname__r r d?Z d@dAZ!dBdCZ"dDdEZ#dFdGZ$dHdIZ%dJdKZ&dLdMZ'dNdOZ(dPdQZ)dRdSZ*dTdUZ+dVdWZ,dXdYZ-dZd[Z.d\d]Z/d^d_Z0d`daZ1dbdcZ2dddeZ3ddfdgZ4dhdiZ5ddjdkZ6dldmZ7dndoZ8ddqdrZ9dsdtdudvdwdxdydzd{d|d}d~ddddZ:dddZ;ddZdddZ?dS)r!z!!)rztag:yaml.org,2002:NcCs||_d|_g|_|j|_g|_d|_g|_d|_d|_ d|_ d|_ d|_ d|_ d|_d|_d|_d|_d|_||_||_d|_|rd|krdkrnn||_d|_|r||jdkr||_d|_|d kr||_d|_d|_d|_d|_d|_dS) NFTr P ) rz )streamencodingstatesexpect_stream_startstateeventseventindentsindent flow_level root_contextsequence_contextmapping_contextsimple_key_contextlinecolumn whitespace indention open_ended canonical allow_unicode best_indent best_widthbest_line_break tag_prefixesprepared_anchor prepared_taganalysisstyle)rrr2r'widthr3Z line_breakr r r r&sDzEmitter.__init__cCsg|_d|_dSr )r!r#rr r r disposejszEmitter.disposecCs6|j||s2|jd|_|d|_q dSNr)r$appendneed_more_eventspopr%r#rr%r r r emitos  z Emitter.emitcCsX|js dS|jd}t|tr(|dSt|tr<|dSt|trP|dSdSdS)NTrrrF)r$ isinstanceDocumentStartEvent need_eventsSequenceStartEventMappingStartEventrCr r r rAxs       zEmitter.need_more_eventscCsvd}|jddD]P}t|ttfr.|d7}n&t|ttfrF|d8}nt|trTd}|dkrdSqt|j|dkS)NrrF)r$rFrGCollectionStartEventDocumentEndEventZCollectionEndEventStreamEndEventlen)rcountlevelr%r r r rHs   zEmitter.need_eventsFcCsF|j|j|jdkr.|r&|j|_qBd|_n|sB|j|j7_dSr?)r&r@r'r4)rflow indentlessr r r increase_indents  zEmitter.increase_indentcCsNt|jtr<|jjr*t|jds*|jj|_||j|_nt d|jdS)Nr z%expected StreamStartEvent, but got %s) rFr%ZStreamStartEventr hasattrrwrite_stream_startexpect_first_document_startr#rr=r r r r"s   zEmitter.expect_stream_startcCstd|jdS)Nzexpected nothing, but got %s)rr%r=r r r expect_nothingszEmitter.expect_nothingcCs |jddSNT)first)expect_document_startr=r r r rWsz#Emitter.expect_first_document_startc Csrt|jtr$|jjs|jjr8|jr8|dd||jjrX||jj}| ||j |_ |jjrt |jj}|D]:}|jj|}||j |<||}||}|||q|o|jj o|j o|jj o|jj o| }|s||dd|jr||j|_nJt|jtr`|jrN|dd|||j|_ntd|jdS)N...T---z'expected DocumentStartEvent, but got %s)rFr%rGversiontagsr1write_indicator write_indentprepare_versionwrite_version_directiveDEFAULT_TAG_PREFIXEScopyr7sortedkeysprepare_tag_handleprepare_tag_prefixwrite_tag_directiveexplicitr2check_empty_documentexpect_document_rootr#rNwrite_stream_endrXr) rrZ version_textZhandleshandleprefix handle_text prefix_textimplicitr r r r[sL           zEmitter.expect_document_startcCsTt|jtrB||jjr0|dd|||j|_nt d|jdS)Nr\Tz%expected DocumentEndEvent, but got %s) rFr%rMrarkr` flush_streamr[r#rr=r r r expect_document_ends   zEmitter.expect_document_endcCs|j|j|jdddS)NT)root)r!r@rv expect_noder=r r r rmszEmitter.expect_document_rootcCs||_||_||_||_t|jtr.|nt|jtt fr| d| t|jtrf| qt|jt r|js|js|jjs|r|q|qt|jtr|js|js|jjs|r|q|ntd|jdS)N&zexpected NodeEvent, but got %s)r)r*r+r,rFr% AliasEvent expect_alias ScalarEventrLprocess_anchor process_tag expect_scalarrIr(r2Z flow_stylecheck_empty_sequenceexpect_flow_sequenceexpect_block_sequencerJcheck_empty_mappingexpect_flow_mappingexpect_block_mappingr)rrwsequencemapping simple_keyr r r rxs0           zEmitter.expect_nodecCs.|jjdkrtd|d|j|_dS)Nz!anchor is not specified for aliasr)r%anchorrr}r!rBr#r=r r r r{s  zEmitter.expect_aliascCs0|jdd||j|_|j|_dS)NTrR)rTprocess_scalarr&rBr'r!r#r=r r r r s  zEmitter.expect_scalarcCs6|jdddd|jd7_|jdd|j|_dS)N[Tr/rr)r`r(rTexpect_first_flow_sequence_itemr#r=r r r rs zEmitter.expect_flow_sequencecCsxt|jtr@|j|_|jd8_|dd|j|_ n4|j sR|j |j krZ| |j|j|jdddS)Nr]FTr)rFr%SequenceEndEventr&rBr'r(r`r!r#r2r.r5rar@expect_flow_sequence_itemrxr=r r r rs   z'Emitter.expect_first_flow_sequence_itemcCst|jtrZ|j|_|jd8_|jr@|dd| |dd|j |_ n@|dd|jsx|j |j kr| |j |j|jdddS)Nr,FrTr)rFr%rr&rBr'r(r2r`rar!r#r.r5r@rrxr=r r r r$s     z!Emitter.expect_flow_sequence_itemcCs6|jdddd|jd7_|jdd|j|_dS)N{Trrr)r`r(rTexpect_first_flow_mapping_keyr#r=r r r r6s zEmitter.expect_flow_mappingcCst|jtr@|j|_|jd8_|dd|j|_ nl|j sR|j |j krZ| |j s|r|j|j|jdddn&|dd|j|j|jdddS)Nr}FTrr?r)rFr%MappingEndEventr&rBr'r(r`r!r#r2r.r5racheck_simple_keyr@ expect_flow_mapping_simple_valuerxexpect_flow_mapping_valuer=r r r r<s    z%Emitter.expect_first_flow_mapping_keycCst|jtrZ|j|_|jd8_|jr@|dd| |dd|j |_ nx|dd|jsx|j |j kr| |js|r|j |j|jdddn&|dd|j |j|jdddS) NrrFrTrrr)rFr%rr&rBr'r(r2r`rar!r#r.r5rr@rrxrr=r r r expect_flow_mapping_keyMs"      zEmitter.expect_flow_mapping_keycCs*|dd|j|j|jdddSN:FTr)r`r!r@rrxr=r r r rbs z(Emitter.expect_flow_mapping_simple_valuecCsD|js|j|jkr||dd|j|j|jdddS)NrTr) r2r.r5rar`r!r@rrxr=r r r rgs  z!Emitter.expect_flow_mapping_valuecCs(|jo |j }|jd|d|j|_dS)NF)rRrS)r+r0rT expect_first_block_sequence_itemr#)rrSr r r rpszEmitter.expect_block_sequencecCs |jddSrY)expect_block_sequence_itemr=r r r rusz(Emitter.expect_first_block_sequence_itemcCs`|s*t|jtr*|j|_|j|_n2||j dddd|j |j |j dddS)N-Tr0r) rFr%rr&rBr'r!r#rar`r@rrxrrZr r r rxs z"Emitter.expect_block_sequence_itemcCs|jdd|j|_dS)NFr)rTexpect_first_block_mapping_keyr#r=r r r rs zEmitter.expect_block_mappingcCs |jddSrY)expect_block_mapping_keyr=r r r rsz&Emitter.expect_first_block_mapping_keycCs|s*t|jtr*|j|_|j|_nX|| rX|j |j |j dddn*|j dddd|j |j|j dddS)NTrrrr)rFr%rr&rBr'r!r#rarr@!expect_block_mapping_simple_valuerxr`expect_block_mapping_valuerr r r rs z Emitter.expect_block_mapping_keycCs*|dd|j|j|jdddSr)r`r!r@rrxr=r r r rs z)Emitter.expect_block_mapping_simple_valuecCs6||jdddd|j|j|jdddS)NrTrr)rar`r!r@rrxr=r r r rsz"Emitter.expect_block_mapping_valuecCs"t|jto |jo t|jdtSr?)rFr%rIr$rr=r r r rszEmitter.check_empty_sequencecCs"t|jto |jo t|jdtSr?)rFr%rJr$rr=r r r rszEmitter.check_empty_mappingcCsNt|jtr|jsdS|jd}t|toL|jdkoL|jdkoL|joL|jdkS)NFr) rFr%rGr$r|rtagrtvaluerCr r r rls zEmitter.check_empty_documentcCs d}t|jtrD|jjdk rD|jdkr6||jj|_|t|j7}t|jttfr|jj dk r|j dkrz| |jj |_ |t|j 7}t|jtr|j dkr| |jj|_ |t|j j7}|dkot|jtpt|jtr|j j r|j j p|p|S)Nr)rFr%Z NodeEventrr8prepare_anchorrOr|rLrr9 prepare_tagr:analyze_scalarrrrzrrrr)rlengthr r r rs2      zEmitter.check_simple_keycCsR|jjdkrd|_dS|jdkr0||jj|_|jrH|||jdd|_dS)NT)r%rr8rr`)r indicatorr r r r}s  zEmitter.process_anchorcCs|jj}t|jtr|jdkr(||_|jr6|dkrl|jdkrL|jjdsb|jdkrl|jjdrld|_dS|jjdr|dkrd}d|_n |jr|dkr|jjrd|_dS|dkrt d|jdkr| ||_|jr| |jdd|_dS)Nrrrrztag is not specifiedT) r%rrFr|r;choose_scalar_styler2rtr9rrr`)rrr r r r~s8       zEmitter.process_tagcCs|jdkr||jj|_|jjdks,|jr0dS|jjsz|jjdrz|jrZ|jjsz|jj sz|j rh|jj sv|j sz|jj rzdS|jjr|jjdkr|j s|js|jj r|jjS|jjr|jjdkr|jjr|jr|jj sdSdS)N"rrz|>')r:rr%rr;r2rtr,rrr(rrrrr=r r r rs@  zEmitter.choose_scalar_stylecCs|jdkr||jj|_|jdkr.||_|j }|jdkrR||jj|n`|jdkrn| |jj|nD|jdkr| |jjn*|jdkr| |jjn| |jj|d|_d|_dS)Nrr>|) r:rr%rr;rr,write_double_quotedrwrite_single_quoted write_folded write_literal write_plain)rsplitr r r rs        zEmitter.process_scalarcCs,|\}}|dkr td||fd||fS)Nrzunsupported YAML version: %d.%dz%d.%dr)rr^majorminorr r r rbszEmitter.prepare_versioncCs|s td|ddks$|ddkr0td||ddD]^}d|krTdks) rrfr7rg startswithrOr@rr) rrrpsuffixprefixesrqrrrrrZ suffix_textr r r rDsN  B       zEmitter.prepare_tagcCst|s td|D]^}d|kr(dksnd|kr>dksnd|krTdksn|dkstd ||fq|S) Nzanchor must not be emptyrrrrrrrz&invalid character %r in the anchor: %rr)rrrr r r rhsBzEmitter.prepare_anchorc Cs.|st|ddddddddSd}d}d}d}d}d}d}d} d} d} |dsX|dr`d}d}d} t|dkpz|ddk} d}d}d}|t|kr||}|dkr|d krd}d}|d krd}| rd}|d kr| rd}d}n<|d krd}|d krd}| rd}|dkr| rd}d}|dkr*d}|dksd|krLdksn|dksd|krpdksnd|krdksnd|krdkrnn|dkrd}|jsd}nd}|dkr |dkrd}|t|dkrd}|rd} d}d}nJ|dkrL|dkr"d}|t|dkr8d} |rBd} d}d}nd}d}|d7}|dk} |dt|kp||ddk} qd}d}d}d}d}|s|s|s| rd}}|rd}| rd}}}| s|rd}}}}|rd}}|r d}|rd}t|d||||||dS)NTFr r]r\ru …

rz#,[]{}&*!|>'"%@`z?:rz,?[]{}r# …

r ~… ퟿�u𐀀u􏿿)r rrOr3)rrZblock_indicatorsZflow_indicatorsZ line_breaksZspecial_characters leading_spaceZ leading_breakZtrailing_spaceZtrailing_breakZ break_spaceZ space_breakZpreceded_by_whitespaceZfollowed_by_whitespaceZprevious_spaceZprevious_breakindexrZunicode_charactersrrrrrr r r rrs     $$            zEmitter.analyze_scalarcCst|jdr|jdS)Nflush)rUrrr=r r r rus zEmitter.flush_streamcCs*|jr&|jdr&|jd|jdS)Nzutf-16r)r rrwriterr=r r r rVszEmitter.write_stream_startcCs |dSr )rur=r r r rnszEmitter.write_stream_endcCsd|js |s|}nd|}||_|jo&||_|jt|7_d|_|jrT||j}|j|dS)NrF) r/r0r.rOr1r rrr)rrZneed_whitespacer/r0rr r r r` s   zEmitter.write_indicatorcCsx|jpd}|jr*|j|ks*|j|kr2|js2||j|krtd|_d||j}||_|jrh||j}|j|dS)NrTr) r'r0r.r/write_line_breakr rrr)rr'rr r r ra.s   zEmitter.write_indentcCsP|dkr|j}d|_d|_|jd7_d|_|jr@||j}|j|dS)NTrr) r6r/r0r-r.r rrr)rrr r r r;s zEmitter.write_line_breakcCs2d|}|jr||j}|j||dS)Nz %%YAML %sr rrrr)rrorr r r rcFs   zEmitter.write_version_directivecCs6d||f}|jr||j}|j||dS)Nz %%TAG %s %sr)rrrrsrr r r rjMs    zEmitter.write_tag_directiveTc Cs |ddd}d}d}}|t|krd}|t|krB||}|r|dksV|dkr|d|kr|j|jkr|r|dkr|t|kr|n<|||}|jt|7_|jr||j}|j||}n|r>|dks|dkr||dkr| |||D]$} | dkr"| n | | q ||}nj|dks\|d ks\|dkr||kr|||}|jt|7_|jr||j}|j||}|dkrd }|jd 7_|jr||j}|j||d}|dk r|dk}|dk}|d7}q|dddS) NrTFrrrrr …

z''r) r`rOr.r5rar rrrr) rtextrspacesbreaksrrrrbrr r r rVsh                   zEmitter.write_single_quotedrrbtnvfrer\N_LP) r  rrrrru
u
cCs|ddd}}|t|krd}|t|kr:||}|dks|dksd|kr`dks|n|jrd|kr~dks|nd |krd ks|n||kr|||}|jt|7_|jr||j}|j||}|dk r|||jkrd |j|}n<|d krd t |}n$|dkr6dt |}n dt |}|jt|7_|jrh||j}|j||d}d|krt|dkrxnn|dks||krx|j|||j krx|rx|||d }||kr|}|jt|7_|jr||j}|j|| d|_ d|_ ||dkrxd }|jt|7_|jrl||j}|j||d7}q|dddS)NrTru "\…

rrrrrrrÿz\x%02Xu￿z\u%04Xz\U%08XrF)r`rOr3r.r rrrESCAPE_REPLACEMENTSrr5rar/r0)rrrrrrrr r r rs               8      zEmitter.write_double_quotedcCs\d}|rX|ddkr"|t|j7}|ddkr8|d7}n t|dksP|ddkrX|d 7}|S) NrrrrKrrr+)strr4rO)rrhintsr r r determine_block_hintss   zEmitter.determine_block_hintsc Cs||}|d|d|dddkr0d|_|d}d}d}d}}|t|krd}|t|krr||}|r|dks|dkr|s|dk r|dkr||d kr||dk}|||D] } | d kr|q|| q|dk r||}n|rt|dkr|d |kr0|j|jkr0|n>|||} |jt| 7_|jrb| |j} |j | |}nh|dks|d kr|||} |jt| 7_|jr| |j} |j | |dkr||}|dk r|dk}|dk}|d 7}qLdS) NrTrKrFrrrrrr) rr`r1rrOrar.r5r rrr) rrrrrrrrrrrr r r rsd               zEmitter.write_foldedc Cs4||}|d|d|dddkr0d|_|d}d}}|t|kr0d}|t|krj||}|r|dks~|dkr|||D] }|dkr|q||q|dk r||}nR|dks|dkr|||}|jr||j}|j ||dkr||}|dk r&|dk}|d7}qDdS) NrTrKrrrrr) rr`r1rrOrar rrr) rrrrrrrrrr r r rs>         zEmitter.write_literalc Cs|jr d|_|sdS|jsNd}|jt|7_|jrB||j}|j|d|_d|_ d}d}d}}|t|krd}|t|kr||}|r|dkr|d|kr|j|j kr|r| d|_d|_ n>|||}|jt|7_|jr||j}|j||}n|r|dkr||dkr<| |||D]$} | dkr`| n | | qH| d|_d|_ |}nV|dks|dkr|||}|jt|7_|jr||j}|j||}|dk r|dk}|dk}|d7}qjdS) NTrFrrrrr) r)r1r/r.rOr rrrr0r5rar) rrrrrrrrrrr r r r8sl              zEmitter.write_plain)NNNNN)FF)F)FFFF)F)F)FF)N)T)T)T)@rrrrdrr>rDrArHrTr"rXrWr[rvrmrxr{rrrrrrrrrrrrrrrrrrrrlrr}r~rrrbrhrirrrrurVrnr`rarrcrjrrrrrrrr r r r rs D     $        $ #   7 6 6#N)__all__errorrr$rr rr r r r  s