3 d?�Z d@dA�Z!dBdC�Z"dDdE�Z#dFdG�Z$dHdI�Z%dJdK�Z&dLdM�Z'dNdO�Z(dPdQ�Z)dRdS�Z*dTdU�Z+dVdW�Z,dXdY�Z-dZd[�Z.d\d]�Z/d^d_�Z0d`da�Z1dbdc�Z2ddde�Z3d�dfdg�Z4dhdi�Z5d�djdk�Z6dldm�Z7dndo�Z8d�dqdr�Z9dsdtdudvdwdxdydzd{d|d}d~dd�d�d��Z:d�d�d��Z;d�d��Zd�d�d��Z?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|_|r�d|ko�dknr�||_d|_|r�||jdkr�||_d|_|d kr�||_d|_d|_d|_d|_d|_dS) N�FT�r� �P� � � )rrr)�stream�encoding�states�expect_stream_start�state�events�event�indents�indent� flow_level� root_context�sequence_context�mapping_context�simple_key_context�line�column� whitespace� indention� open_ended� canonical� allow_unicode� best_indent� best_width�best_line_break� tag_prefixes�prepared_anchor� prepared_tag�analysis�style)rrr1r&�widthr2Z line_breakr r r r&sDzEmitter.__init__cCsg|_d|_dS)N)r r")rr r r �disposejszEmitter.disposecCs:|jj|�x(|j�s4|jjd�|_|j�d|_qWdS)Nr)r#�append�need_more_events�popr$r")rr$r r r �emitos   z Emitter.emitcCsX|js dS|jd}t|t�r(|jd�St|t�r<|jd�St|t�rP|jd�SdSdS)NTrrr�F)r#� isinstance�DocumentStartEvent� need_events�SequenceStartEvent�MappingStartEvent)rr$r r r r>xs       zEmitter.need_more_eventscCsxd}x`|jdd�D]N}t|ttf�r0|d7}n&t|ttf�rH|d8}nt|t�rVd}|dkrdSqWt|j�|dkS)NrrF�����)r#rBrC�CollectionStartEvent�DocumentEndEventZCollectionEndEvent�StreamEndEvent�len)r�count�levelr$r r r rD�s   zEmitter.need_eventsFcCsF|jj|j�|jdkr.|r&|j|_qBd|_n|sB|j|j7_dS)Nr)r%r=r&r3)r�flow� indentlessr r r �increase_indent�s  zEmitter.increase_indentcCsPt|jt�r>|jjr,t|jd� r,|jj|_|j�|j|_nt d|j��dS)Nrz%expected StreamStartEvent, but got %s) rBr$ZStreamStartEventr�hasattrr�write_stream_start�expect_first_document_startr"r)rr r r r!�s   zEmitter.expect_stream_startcCstd|j��dS)Nzexpected nothing, but got %s)rr$)rr r r �expect_nothing�szEmitter.expect_nothingcCs |jdd�S)NT)�first)�expect_document_start)rr r r rS�sz#Emitter.expect_first_document_startc Csvt|jt��r(|jjs|jjr8|jr8|jdd�|j�|jjrX|j|jj�}|j |�|j j �|_ |jjr�t |jjj��}xB|D]:}|jj|}||j |<|j|�}|j|�}|j||�q�W|o�|jj o�|j o�|jj o�|jj o�|j� }|�s|j�|jdd�|j�r|j�|j|_nJt|jt��rd|j�rR|jdd�|j�|j�|j|_ntd|j��dS)Nz...Tz---z'expected DocumentStartEvent, but got %s)rBr$rC�versionZtagsr0�write_indicator� write_indent�prepare_version�write_version_directive�DEFAULT_TAG_PREFIXES�copyr6�sorted�keys�prepare_tag_handle�prepare_tag_prefix�write_tag_directive�explicitr1�check_empty_document�expect_document_rootr"rJ�write_stream_endrTr) rrU� version_textZhandles�handle�prefix� handle_text� prefix_text�implicitr r r rV�sB             zEmitter.expect_document_startcCsTt|jt�rB|j�|jjr0|jdd�|j�|j�|j|_nt d|j��dS)Nz...Tz%expected DocumentEndEvent, but got %s) rBr$rIrYrcrX� flush_streamrVr"r)rr r r �expect_document_end�s   zEmitter.expect_document_endcCs|jj|j�|jdd�dS)NT)�root)r r=rn� expect_node)rr r r re�szEmitter.expect_document_rootcCs�||_||_||_||_t|jt�r.|j�n�t|jtt f�r�|j d�|j �t|jt�rf|j �q�t|jt �r�|js�|js�|jjs�|j�r�|j�q�|j�q�t|jt�r�|js�|js�|jjs�|j�r�|j�q�|j�ntd|j��dS)N�&zexpected NodeEvent, but got %s)r(r)r*r+rBr$� AliasEvent� expect_alias� ScalarEventrH�process_anchor� process_tag� expect_scalarrEr'r1Z flow_style�check_empty_sequence�expect_flow_sequence�expect_block_sequencerF�check_empty_mapping�expect_flow_mapping�expect_block_mappingr)rro�sequence�mapping� simple_keyr r r rp�s,           zEmitter.expect_nodecCs.|jjdkrtd��|jd�|jj�|_dS)Nz!anchor is not specified for aliasr)r$�anchorrrur r?r")rr r r rss  zEmitter.expect_aliascCs0|jdd�|j�|jj�|_|jj�|_dS)NT)rN)rP�process_scalarr%r?r&r r")rr r r rw s  zEmitter.expect_scalarcCs6|jdddd�|jd7_|jdd�|j|_dS)N�[T)r.r)rN)rXr'rP�expect_first_flow_sequence_itemr")rr r r rys zEmitter.expect_flow_sequencecCsxt|jt�r@|jj�|_|jd8_|jdd�|jj�|_ n4|j sR|j |j krZ|j �|jj|j�|jdd�dS)Nr�]FT)r~)rBr$�SequenceEndEventr%r?r&r'rXr r"r1r-r4rYr=�expect_flow_sequence_itemrp)rr r r r�s   z'Emitter.expect_first_flow_sequence_itemcCs�t|jt�rZ|jj�|_|jd8_|jr@|jdd�|j �|jdd�|j j�|_ n@|jdd�|jsx|j |j kr�|j �|j j|j�|jdd�dS)Nr�,Fr�T)r~)rBr$r�r%r?r&r'r1rXrYr r"r-r4r=r�rp)rr r r r�$s     z!Emitter.expect_flow_sequence_itemcCs6|jdddd�|jd7_|jdd�|j|_dS)N�{T)r.r)rN)rXr'rP�expect_first_flow_mapping_keyr")rr r r r|6s zEmitter.expect_flow_mappingcCs�t|jt�r@|jj�|_|jd8_|jdd�|jj�|_ nn|j sR|j |j krZ|j �|j r�|j�r�|jj|j�|jddd�n&|jdd�|jj|j�|jdd�dS)Nr�}FT)rr��?)r)rBr$�MappingEndEventr%r?r&r'rXr r"r1r-r4rY�check_simple_keyr=� expect_flow_mapping_simple_valuerp�expect_flow_mapping_value)rr r r r�<s    z%Emitter.expect_first_flow_mapping_keycCs�t|jt�rZ|jj�|_|jd8_|jr@|jdd�|j �|jdd�|j j�|_ nz|jdd�|jsx|j |j kr�|j �|j r�|j�r�|j j|j�|jddd�n&|jdd�|j j|j�|jdd�dS) Nrr�Fr�T)rr�r�)r)rBr$r�r%r?r&r'r1rXrYr r"r-r4r�r=r�rpr�)rr r r �expect_flow_mapping_keyMs"      zEmitter.expect_flow_mapping_keycCs*|jdd�|jj|j�|jdd�dS)N�:FT)r)rXr r=r�rp)rr r r r�bs z(Emitter.expect_flow_mapping_simple_valuecCsD|js|j|jkr|j�|jdd�|jj|j�|jdd�dS)Nr�T)r) r1r-r4rYrXr r=r�rp)rr r r r�gs  z!Emitter.expect_flow_mapping_valuecCs(|jo |j }|jd|d�|j|_dS)NF)rNrO)r*r/rP� expect_first_block_sequence_itemr")rrOr r r rzpszEmitter.expect_block_sequencecCs |jdd�S)NT)rU)�expect_block_sequence_item)rr r r r�usz(Emitter.expect_first_block_sequence_itemcCsb| r,t|jt�r,|jj�|_|jj�|_n2|j�|j dddd�|jj |j �|j dd�dS)N�-T)r/)r~) rBr$r�r%r?r&r r"rYrXr=r�rp)rrUr r r r�xs z"Emitter.expect_block_sequence_itemcCs|jdd�|j|_dS)NF)rN)rP�expect_first_block_mapping_keyr")rr r r r}�s zEmitter.expect_block_mappingcCs |jdd�S)NT)rU)�expect_block_mapping_key)rr r r r��sz&Emitter.expect_first_block_mapping_keycCs�| r,t|jt�r,|jj�|_|jj�|_nX|j�|j �rZ|jj |j �|j ddd�n*|j dddd�|jj |j�|j dd�dS)NT)rr�r�)r/)r)rBr$r�r%r?r&r r"rYr�r=�!expect_block_mapping_simple_valuerprX�expect_block_mapping_value)rrUr r r r��s z Emitter.expect_block_mapping_keycCs*|jdd�|jj|j�|jdd�dS)Nr�FT)r)rXr r=r�rp)rr r r r��s z)Emitter.expect_block_mapping_simple_valuecCs6|j�|jdddd�|jj|j�|jdd�dS)Nr�T)r/)r)rYrXr r=r�rp)rr r r r��sz"Emitter.expect_block_mapping_valuecCs"t|jt�o |jo t|jdt�S)Nr)rBr$rEr#r�)rr r r rx�szEmitter.check_empty_sequencecCs"t|jt�o |jo t|jdt�S)Nr)rBr$rFr#r�)rr r r r{�szEmitter.check_empty_mappingcCsRt|jt� s|j rdS|jd}t|t�oP|jdkoP|jdkoP|joP|jdkS)NFr�) rBr$rCr#rtr��tagrl�value)rr$r r r rd�s  zEmitter.check_empty_documentcCs d}t|jt�rD|jjdk rD|jdkr6|j|jj�|_|t|j�7}t|jttf�r�|jj dk r�|j dkrz|j |jj �|_ |t|j �7}t|jt�r�|j dkr�|j |jj�|_ |t|j j�7}|dk�ot|jt��pt|jt�r�|j j r�|j j �p|j��p|j�S)Nr�)rBr$Z NodeEventr�r7�prepare_anchorrKrtrHr�r8� prepare_tagr9�analyze_scalarr�r rrr rrxr{)rZlengthr r r r��s$      zEmitter.check_simple_keycCsR|jjdkrd|_dS|jdkr0|j|jj�|_|jrH|j||jd�d|_dS)NT)r$r�r7r�rX)r� indicatorr r r ru�s  zEmitter.process_anchorcCs�|jj}t|jt�r�|jdkr(|j�|_|j s8|dkrn|jdkrN|jjdsd|jdkrn|jjdrnd|_dS|jjdr�|dkr�d}d|_n"|j s�|dkr�|jjr�d|_dS|dkr�t d��|jdkr�|j |�|_|jr�|j |jd�d|_dS)Nr�rrrztag is not specifiedT) r$r�rBrtr:�choose_scalar_styler1rlr8rr�rX)rr�r r r rv�s,     zEmitter.process_tagcCs�|jdkr|j|jj�|_|jjdks,|jr0dS|jj r�|jjdr�|joZ|jjpZ|jj r�|j rl|jj s||j r�|jj r�dS|jjr�|jjdkr�|j r�|j r�|jj r�|jjS|jj s�|jjdkr�|jjr�|jo�|jj r�dSdS)N�"rr�z|>�')r9r�r$r�r:r1rlr+r rr'rrrr)rr r r r��s& zEmitter.choose_scalar_stylecCs�|jdkr|j|jj�|_|jdkr.|j�|_|j }|jdkrR|j|jj|�n`|jdkrn|j |jj|�nD|jdkr�|j |jj�n*|jdkr�|j |jj�n|j |jj|�d|_d|_dS)Nr�r��>�|) r9r�r$r�r:r�r+�write_double_quotedr �write_single_quoted� write_folded� write_literal� write_plain)r�splitr r r r�s        zEmitter.process_scalarcCs,|\}}|dkr td||f��d||fS)Nrzunsupported YAML version: %d.%dz%d.%d)r)rrW�major�minorr r r rZszEmitter.prepare_versioncCs�|s td��|ddks$|ddkr0td|��xt|dd�D]d}d|koTdknp�d|kold knp�d |ko�d knp�|d ks>td ||f��q>W|S)Nztag handle must not be emptyrrrz*tag handle must start and end with '!': %r�0�9�A�Z�a�zz-_z*invalid character %r in the tag handle: %rrGrG)r)rrh�chr r r r`!s HzEmitter.prepare_tag_handlecCs|s td��g}d}}|ddkr(d}x�|t|�kr�||}d|koPdkns�d|kohdkns�d |ko�d kns�|d kr�|d7}q*||kr�|j|||��|d}}|jd �}x|D]}|jd t|��q�Wq*W||k�r|j|||��dj|�S)Nztag prefix must not be emptyrrrr�r�r�r�r�r�z-;/?!:@&=+$,_.~*'()[]zutf-8z%%%02Xr�)rrKr=�encode�ord�join)rri�chunks�start�endr��datar r r ra-s( H     zEmitter.prepare_tag_prefixc Cs�|s td��|dkr|Sd}|}t|jj��}xH|D]@}|j|�r4|dksZt|�t|�kr4|j|}|t|�d�}q4Wg}d}}x�|t|�k�r^||} d| ko�dknp�d| ko�dknp�d| ko�d knp�| d kp�| dko�|dk�r|d 7}q�||k�r$|j|||��|d }}| jd �} x | D]} |jd t| ���q@Wq�W||k�r||j|||��dj |�} |�r�d|| fSd| SdS)Nztag must not be emptyrrr�r�r�r�r�r�z-;/?:@&=+$,_.~*'()[]rzutf-8z%%%02Xr�z%s%sz!<%s>) rr^r6r_� startswithrKr=r�r�r�) rr�rh�suffix�prefixesrir�r�r�r�r�Z suffix_textr r r r�Ds@   H        zEmitter.prepare_tagcCs~|s td��xl|D]d}d|ko(dknpdd|ko@dknpdd|koXdknpd|dkstd ||f��qW|S) Nzanchor must not be emptyr�r�r�r�r�r�z-_z&invalid character %r in the anchor: %r)r)rr�r�r r r r�hs HzEmitter.prepare_anchorc Cs|st|dddddddd�Sd}d}d}d}d}d}d}d} d} d} |jd�sX|jd�r`d}d}d} t|�dkpz|ddk} d}d}d}�x�|t|�k�rv||}|dkr�|d kr�d}d}|d kr�d}| r�d}|d kr�| r�d}d}n<|d kr�d}|d k�rd}| �rd}|dk�r | �r d}d}|dk�r.d}|dk�pPd|k�oLdkn�s�|dk�s�d|k�ordkn�s�d|k�o�dkn�r�|dk�r�d}|j�s�d}nd}|dk�r�|dk�r�d}|t|�dk�r�d}|�r�d} d}d}nJ|dk�r:|dk�rd}|t|�dk�r&d} |�r0d} d}d}nd}d}|d7}|dk} |dt|�k�pr||ddk} q�Wd}d}d}d}d}|�s�|�s�|�s�| �r�d}}|�r�d}| �r�d}}}| �s�|�r�d}}}}|�r�d}}|�r�d}|�rd}t|d||||||d�S)NTF)r r rrrrrrz---z...ru …

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

r� �~�…� u퟿uu�u)r r�rKr2)rr Zblock_indicatorsZflow_indicatorsZ line_breaksZspecial_characters� leading_spaceZ leading_breakZtrailing_spaceZtrailing_breakZ break_spaceZ space_breakZpreceeded_by_whitespaceZfollowed_by_whitespaceZprevious_spaceZprevious_break�indexr�Zunicode_charactersrrrrrr r r r�rs�     &&&        zEmitter.analyze_scalarcCst|jd�r|jj�dS)N�flush)rQrr�)rr r r rms zEmitter.flush_streamcCs*|jr&|jjd�r&|jjdj|j��dS)Nzutf-16u)rr�r�writer�)rr r r rRszEmitter.write_stream_startcCs |j�dS)N)rm)rr r r rfszEmitter.write_stream_endcCsf|js | r|}nd|}||_|jo(||_|jt|�7_d|_|jrV|j|j�}|jj|�dS)Nr�F) r.r/r-rKr0rr�rr�)rr�Zneed_whitespacer.r/r�r r r rXs   zEmitter.write_indicatorcCs||jpd}|j s.|j|ks.|j|kr6|j r6|j�|j|krxd|_d||j}||_|jrl|j|j�}|jj|�dS)NrTr�) r&r/r-r.�write_line_breakrr�rr�)rr&r�r r r rY-s   zEmitter.write_indentcCsP|dkr|j}d|_d|_|jd7_d|_|jr@|j|j�}|jj|�dS)NTrr) r5r.r/r,r-rr�rr�)rr�r r r r�:s zEmitter.write_line_breakcCs2d|}|jr|j|j�}|jj|�|j�dS)Nz %%YAML %s)rr�rr�r�)rrgr�r r r r[Es   zEmitter.write_version_directivecCs6d||f}|jr|j|j�}|jj|�|j�dS)Nz %%TAG %s %s)rr�rr�r�)rrjrkr�r r r rbLs    zEmitter.write_tag_directiveTc Cs,|jdd�d}d}d}}�x�|t|�k�rd}|t|�krF||}|r�|dksZ|dkr�|d|kr�|j|jkr�|r�|dkr�|t|�kr�|j�n<|||�}|jt|�7_|jr�|j|j�}|jj|�|}n�|�rH|dks�|dk�r�||dk�r|j �x4|||�D]$} | dk�r*|j �n |j | ��qW|j�|}nj|dk�sf|d k�sf|dk�r�||k�r�|||�}|jt|�7_|j�r�|j|j�}|jj|�|}|dk�r�d }|jd 7_|j�r�|j|j�}|jj|�|d}|dk �r|dk}|dk}|d7}q W|jdd�dS) Nr�TFrr�ru …

ru …

z''r) rXrKr-r4rYrr�rr�r�) r�textr��spaces�breaksr�r�r�r��brr r r r�Usb                 zEmitter.write_single_quotedr�r��b�t�n�v�f�r�er��\�N�_�L�P)���� r� � r�r�r�r�r�u
u
cCs�|jdd�d}}�xt|t|�k�r�d}|t|�kr>||}|dks�|dks�d|ko`dknp�|jo�d|ko~dknp�d |ko�d kn �r�||kr�|||�}|jt|�7_|jr�|j|j�}|jj|�|}|dk �r�||jk�rd |j|}n<|d k�r&d t |�}n$|dk�r>dt |�}n dt |�}|jt|�7_|j�rp|j|j�}|jj|�|d}d|k�o�t|�dkn�r�|dk�s�||k�r�|j|||j k�r�|�r�|||�d }||k�r�|}|jt|�7_|j�r|j|j�}|jj|�|j �d|_ d|_ ||dk�r�d }|jt|�7_|j�rt|j|j�}|jj|�|d7}qW|jdd�dS)Nr�Tru "\…

r�r�r�u퟿uu�r��ÿz\x%02Xuï¿¿z\u%04Xz\U%08XrF)rXrKr2r-rr�rr��ESCAPE_REPLACEMENTSr�r4rYr.r/)rr�r�r�r�r�r�r r r r��sf            8      zEmitter.write_double_quotedcCs\d}|rX|ddkr"|t|j�7}|d dkr8|d7}n t|�dksP|d dkrX|d7}|S) Nr�ru …

ru …

r�r�+rG�����)�strr3rK)rr��hintsr r r �determine_block_hints�s   zEmitter.determine_block_hintsc Cs|j|�}|jd|d�|d d�dkr0d|_|j�d}d}d}d}}�x�|t|�k�rd}|t|�krv||}|�r |dks�|dk�r�| r�|dk r�|dkr�||d kr�|j�|dk}x0|||�D] } | d kr�|j�q�|j| �q�W|dk �r|j�|}n�|�r�|dk�r�|d|k�r@|j|jk�r@|j�n>|||�} |jt| �7_|j�rr| j |j�} |j j | �|}nh|dk�s�|d k�r�|||�} |jt| �7_|j�r�| j |j�} |j j | �|dk�r�|j�|}|dk �r|dk}|dk}|d7}qPWdS) Nr�Trr�Fru …

r�ru …

rG) r�rXr0r�rKrYr-r4rr�rr�) rr�r�r�r�r�r�r�r�r�r�r r r r��sb               zEmitter.write_foldedc Cs<|j|�}|jd|d�|dd�dkr0d|_|j�d}d}}x�|t|�k�r6d}|t|�krl||}|r�|dks�|dkr�x0|||�D] }|dkr�|j�q�|j|�q�W|dk r�|j�|}nR|dks�|dk�r|||�}|jr�|j|j�}|jj |�|dk�r|j�|}|dk �r,|dk}|d7}qFWdS) Nr�Trr�ru …

rrG) r�rXr0r�rKrYrr�rr�) rr�r�r�r�r�r�r�r�r r r r�s>        zEmitter.write_literalc Cs|jr d|_|sdS|jsNd}|jt|�7_|jrB|j|j�}|jj|�d|_d|_ d}d}d}}�x�|t|�k�r d}|t|�kr�||}|�r|dk�r�|d|kr�|j|j kr�|r�|j �d|_d|_ n>|||�}|jt|�7_|j�r|j|j�}|jj|�|}n�|�r�|dk�r�||dk�r@|j �x4|||�D]$} | dk�rf|j �n |j | ��qNW|j �d|_d|_ |}nV|dk�s�|dk�r�|||�}|jt|�7_|j�r�|j|j�}|jj|�|}|dk �r|dk}|dk}|d7}qnWdS) NTr�Frru …

ru …

) r(r0r.r-rKrr�rr�r/r4rYr�) rr�r�r�r�r�r�r�r�r�r r r r�7sl              zEmitter.write_plain)NNNNN)FF)F)FFFF)F)F)FF)N)T)T)T)@rrrr\rr<r@r>rDrPr!rTrSrVrnrerprsrwryr�r�r|r�r�r�r�rzr�r�r}r�r�r�r�rxr{rdr�rurvr�r�rZr`rar�r�r�rmrRrfrXrYr�r[rbr�r�r�r�r�r�r�r r r r rs� C     $        $ "   7 6 6#N)�__all__�errorrr#rr rr r r r � s