B
    |?_[´à  ã               @   s¨   d dl mZ d dl mZ d dlZd dlmZmZ d dlT d dlm	Z	m
Z
mZmZmZmZmZ ddgZG d	d„ deƒZG d
d„ deƒZG dd„ deƒZG dd„ deƒZdS )é    )Úabsolute_import)Úprint_functionN)Ú	YAMLErrorÚYAMLStreamError)Ú*)Úutf8Ú	text_typeÚPY2ÚnprintÚdbgÚ	DBG_EVENTÚcheck_anchorname_charÚEmitterÚEmitterErrorc               @   s   e Zd ZdS )r   N)Ú__name__Ú
__module__Ú__qualname__© r   r   ú2lib/python3.7/site-packages/ruamel_yaml/emitter.pyr      s   c               @   s   e Zd Zdd„ ZdS )ÚScalarAnalysisc	       	      C   s4   || _ || _|| _|| _|| _|| _|| _|| _d S )N)ÚscalarÚemptyÚ	multilineÚallow_flow_plainÚallow_block_plainÚallow_single_quotedÚallow_double_quotedÚallow_block)	Úselfr   r   r   r   r   r   r   r   r   r   r   Ú__init__   s    zScalarAnalysis.__init__N)r   r   r   r   r   r   r   r   r      s   r   c               @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚIndentsc             C   s
   g | _ d S )N)Úvalues)r   r   r   r   r   0   s    zIndents.__init__c             C   s   | j  ||f¡ d S )N)r!   Úappend)r   ÚvalÚseqr   r   r   r"   4   s    zIndents.appendc             C   s   | j  ¡ d S )Nr   )r!   Úpop)r   r   r   r   r%   8   s    zIndents.popc             C   s(   y| j d d S  tk
r"   dS X d S )Néþÿÿÿé   F)r!   Ú
IndexError)r   r   r   r   Úlast_seq<   s    zIndents.last_seqc             C   sT   t | jƒdk s| jd d s dS | jd d d k	r@| jd d nd}|| | d S )Né   éÿÿÿÿr'   r   )Úlenr!   )r   Z
seq_indentÚcolumnÚbaser   r   r   Úseq_flow_alignE   s    $zIndents.seq_flow_alignc             C   s
   t | jƒS )N)r,   r!   )r   r   r   r   Ú__len__N   s    zIndents.__len__N)	r   r   r   r   r"   r%   r)   r/   r0   r   r   r   r   r    .   s   		r    c               @   sj  e Zd ZdddœZdZd™dd„Zedd	„ ƒZejd
d	„ ƒZedd„ ƒZ	dd„ Z
dd„ Zdd„ Zdd„ Zdšdd„Zdd„ Zdd„ Zdd„ Zd›dd„Zd d!„ Zd"d#„ Zdœd$d%„Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Z d<d=„ Z!dd>d?„Z"d@dA„ Z#dBdC„ Z$dždDdE„Z%dFdG„ Z&dHdI„ Z'dJdK„ Z(dLdM„ Z)dNdO„ Z*dPdQ„ Z+dRdS„ Z,dTdU„ Z-dVdW„ Z.dXdY„ Z/dZd[„ Z0d\d]„ Z1d^d_„ Z2d`da„ Z3dbdc„ Z4ddde„ Z5dfdg„ Z6dhdi„ Z7djdk„ Z8dŸdldm„Z9dndo„ Z:d dpdq„Z;drds„ Z<dtdu„ Z=d¡dwdx„Z>dydzd{d|d}d~dd€dd‚dƒd„d…d†d‡dˆœZ?d¢d‰dŠ„Z@d‹dŒ„ ZAddŽ„ ZBdd„ ZCd£d‘d’„ZDd“d”„ ZEd•d–„ ZFd—d˜„ ZGdS )¤r   ú!z!!)r1   ztag:yaml.org,2002:é€   Nc             C   sˆ  |
| _ | j d k	r*t| j dd ƒd kr*| | j _|| _d | _d | _g | _| j| _g | _	d | _
tƒ | _d | _d| _d| _d| _d| _d| _d| _d| _d| _d| _d | _d| _d| _|	d krº| jn|	| j | _|| _|| _tjdk| _|ræ|nd| _ || _!d| _"|| _#|r&d|  k rd	k r&n n|| _"| j"| _$d
| _%|rP|| j"d krP|| _%d| _&|dkrf|| _&d | _'d | _(d | _)d | _*d | _+d S )NÚ_emitterr   FTú:iÿÿ  r*   r'   é
   éP   Ú
)úr7   z
),ÚdumperÚgetattrr3   ÚstreamÚencodingÚallow_space_breakÚstatesÚexpect_stream_startÚstateÚeventsÚeventr    ÚindentsÚindentÚ
flow_levelÚroot_contextÚsequence_contextÚmapping_contextÚsimple_key_contextÚliner-   Ú
whitespaceÚ	indentionÚ
no_newlineÚ
open_endedÚcolonÚprefixed_colonÚ	canonicalÚallow_unicodeÚsysÚ
maxunicodeÚunicode_supplementaryÚsequence_dash_offsetÚtop_level_colon_alignÚbest_sequence_indentÚrequested_indentÚbest_map_indentÚ
best_widthÚbest_line_breakÚtag_prefixesÚprepared_anchorÚprepared_tagÚanalysisÚstyle)r   r;   rQ   rD   ÚwidthrR   Z
line_breakZblock_seq_indentrW   Zprefix_colonr9   r   r   r   r   [   s\    "
zEmitter.__init__c             C   s(   y| j S  tk
r"   tdƒ‚Y nX d S )Nz output stream needs to specified)Ú_streamÚAttributeErrorr   )r   r   r   r   r;   °   s    zEmitter.streamc             C   s(   |d krd S t |dƒstdƒ‚|| _d S )NÚwritez.stream argument needs to have a write() method)Úhasattrr   rc   )r   r#   r   r   r   r;   ¸   s
    
c             C   s6   yt | jdƒr| jjS | jjS  tk
r0   | S X d S )NÚtyp)rf   r9   Ú
serializerZ_serializerrd   )r   r   r   r   rh   Á   s    zEmitter.serializerc             C   s   g | _ d | _d S )N)r>   r@   )r   r   r   r   ÚdisposeË   s    zEmitter.disposec             C   sJ   t tƒrt|ƒ | j |¡ x(|  ¡ sD| j d¡| _|  ¡  d | _qW d S )Nr   )	r   r   r
   rA   r"   Úneed_more_eventsr%   rB   r@   )r   rB   r   r   r   ÚemitÑ   s    
zEmitter.emitc             C   sX   | j s
dS | j d }t|tƒr(|  d¡S t|tƒr<|  d¡S t|tƒrP|  d¡S dS d S )NTr   r'   r*   é   F)rA   Ú
isinstanceÚDocumentStartEventÚneed_eventsÚSequenceStartEventÚMappingStartEvent)r   rB   r   r   r   rj   Ý   s    






zEmitter.need_more_eventsc             C   sx   d}x`| j dd … D ]N}t|ttfƒr0|d7 }n&t|ttfƒrH|d8 }nt|tƒrVd}|dk rdS qW t| j ƒ|d k S )Nr   r'   r+   F)rA   rm   rn   ÚCollectionStartEventÚDocumentEndEventZCollectionEndEventÚStreamEndEventr,   )r   ÚcountÚlevelrB   r   r   r   ro   ë   s    


zEmitter.need_eventsFc             C   sX   | j  | j|¡ | jd kr0|r(| j| _qTd| _n$|sT|  j| j  ¡ rJ| jn| j7  _d S )Nr   )rC   r"   rD   rY   r)   rX   rZ   )r   ÚflowÚsequenceÚ
indentlessr   r   r   Úincrease_indentù   s    

zEmitter.increase_indentc             C   st   t | jtƒrbtr2| jjrPt| jdd ƒsP| jj| _n| jjrPt| jdƒsP| jj| _|  ¡  | j	| _
ntd| j ƒ‚d S )Nr<   z%expected StreamStartEvent, but got %s)rm   rB   ZStreamStartEventr	   r<   r:   r;   rf   Úwrite_stream_startÚexpect_first_document_startr@   r   )r   r   r   r   r?     s    

zEmitter.expect_stream_startc             C   s   t d| j ƒ‚d S )Nzexpected nothing, but got %s)r   rB   )r   r   r   r   Úexpect_nothing$  s    zEmitter.expect_nothingc             C   s   | j ddS )NT)Úfirst)Úexpect_document_start)r   r   r   r   r|   *  s    z#Emitter.expect_first_document_startc       	      C   sv  t | jtƒr(| jjs| jjr8| jr8|  dd¡ |  ¡  | jjrX|  | jj¡}|  	|¡ | j
 ¡ | _| jjrÀt| jj ¡ ƒ}xB|D ]:}| jj| }|| j|< |  |¡}|  |¡}|  ||¡ q‚W |oò| jj oò| j oò| jj oò| jj oò|  ¡  }|s|  ¡  |  dd¡ | jr|  ¡  | j| _nJt | jtƒrd| jrR|  dd¡ |  ¡  |  ¡  | j| _ntd| j ƒ‚d S )Nz...Tz---z'expected DocumentStartEvent, but got %s)rm   rB   rn   ÚversionZtagsrN   Úwrite_indicatorÚwrite_indentÚprepare_versionÚwrite_version_directiveÚDEFAULT_TAG_PREFIXESÚcopyr]   ÚsortedÚkeysÚprepare_tag_handleÚprepare_tag_prefixÚwrite_tag_directiveÚexplicitrQ   Úcheck_empty_documentÚexpect_document_rootr@   rt   Úwrite_stream_endr}   r   )	r   r~   Úversion_textZhandlesÚhandleÚprefixÚhandle_textÚprefix_textÚimplicitr   r   r   r   .  sH    










zEmitter.expect_document_startc             C   sT   t | jtƒrB|  ¡  | jjr0|  dd¡ |  ¡  |  ¡  | j| _nt	d| j ƒ‚d S )Nz...Tz%expected DocumentEndEvent, but got %s)
rm   rB   rs   r‚   rŒ   r   Úflush_streamr   r@   r   )r   r   r   r   Úexpect_document_endV  s    
zEmitter.expect_document_endc             C   s   | j  | j¡ | jdd d S )NT)Úroot)r>   r"   r—   Úexpect_node)r   r   r   r   rŽ   c  s    zEmitter.expect_document_rootc             C   s”  || _ || _|| _|| _t| jtƒr0|  ¡  n`t| jtt	fƒr‚|  
d¡ |  ¡  t| jtƒrl|  ¡  qt| jtƒrô| jjrÄ| jjdkr¬| jjr¬|  | j¡r¬d| _d| _|  | j¡rÄd| _d| _| jsà| jsà| jjsà|  ¡ rê|  ¡  n|  ¡  nŒt| jtƒr| jjdkr&| jjr&|  | j¡ | jjrJ| jjd rJ|  | j¡ | jsn| jsn| jjsn|  ¡ rx|  ¡  n|  ¡  ntd| j ƒ‚d S )Nú&FTr'   zexpected NodeEvent, but got %s)rF   rG   rH   rI   rm   rB   Ú
AliasEventÚexpect_aliasÚScalarEventrr   Úprocess_anchorÚprocess_tagÚexpect_scalarrp   ÚcommentÚ
flow_styleÚwrite_post_commentrL   rM   Úwrite_pre_commentrE   rQ   Úcheck_empty_sequenceÚexpect_flow_sequenceÚexpect_block_sequencerq   Úcheck_empty_mappingÚexpect_flow_mappingÚexpect_block_mappingr   )r   r˜   rx   ÚmappingÚ
simple_keyr   r   r   r™   j  sD    





zEmitter.expect_nodec             C   s.   | j jd krtdƒ‚|  d¡ | j ¡ | _d S )Nz!anchor is not specified for aliasr   )rB   Úanchorr   rž   r>   r%   r@   )r   r   r   r   rœ   “  s    
zEmitter.expect_aliasc             C   s0   | j dd |  ¡  | j ¡ | _| j ¡ | _d S )NT)rw   )rz   Úprocess_scalarrC   r%   rD   r>   r@   )r   r   r   r   r    š  s    zEmitter.expect_scalarc             C   sR   | j  | j| j¡}| jd| d ddd | jddd |  jd7  _| j| _d S )Nú ú[T)rK   )rw   rx   r'   )	rC   r/   rX   r-   r   rz   rE   Úexpect_first_flow_sequence_itemr@   )r   Úindr   r   r   r¦   £  s
    zEmitter.expect_flow_sequencec             C   s¢   t | jtƒrj| j ¡ | _|  jd8  _|  dd¡ | jjrT| jjd rT|  	| j¡ n|  
¡  | j ¡ | _n4| js|| j| jkr„|  ¡  | j | j¡ | jdd d S )Nr'   ú]Fr   T)rx   )rm   rB   ÚSequenceEndEventrC   r%   rD   rE   r   r¡   r£   Úwrite_line_breakr>   r@   rQ   r-   r[   r‚   r"   Úexpect_flow_sequence_itemr™   )r   r   r   r   r±   «  s    z'Emitter.expect_first_flow_sequence_itemc             C   sÆ   t | jtƒr‚| j ¡ | _|  jd8  _| jr@|  dd¡ |  	¡  |  dd¡ | jj
rn| jj
d rn|  | j¡ nd| _| j ¡ | _n@|  dd¡ | js | j| jkr¨|  	¡  | j | j¡ | jdd d S )Nr'   ú,Fr³   r   T)rx   )rm   rB   r´   rC   r%   rD   rE   rQ   r   r‚   r¡   r£   rM   r>   r@   r-   r[   r"   r¶   r™   )r   r   r   r   r¶   ½  s     z!Emitter.expect_flow_sequence_itemc             C   sR   | j  | j| j¡}| jd| d ddd |  jd7  _| jddd | j| _d S )Nr¯   Ú{T)rK   r'   F)rw   rx   )	rC   r/   rX   r-   r   rE   rz   Úexpect_first_flow_mapping_keyr@   )r   r²   r   r   r   r©   Õ  s
    zEmitter.expect_flow_mappingc             C   s°   t | jtƒr@| j ¡ | _|  jd8  _|  dd¡ | j ¡ | _	nl| j
sR| j| jkrZ|  ¡  | j
s†|  ¡ r†| j | j¡ | jddd n&|  dd¡ | j | j¡ | jdd d S )Nr'   Ú}FT)r«   r¬   ú?)r«   )rm   rB   ÚMappingEndEventrC   r%   rD   rE   r   r>   r@   rQ   r-   r[   r‚   Úcheck_simple_keyr"   Ú expect_flow_mapping_simple_valuer™   Úexpect_flow_mapping_value)r   r   r   r   r¹   Ý  s    z%Emitter.expect_first_flow_mapping_keyc             C   sö   t | jtƒrz| j ¡ | _|  jd8  _| jr@|  dd¡ |  	¡  |  dd¡ | jj
rl| jj
d rl|  | j¡ | j ¡ | _nx|  dd¡ | js˜| j| jkr |  	¡  | jsÌ|  ¡ rÌ| j | j¡ | jddd n&|  dd¡ | j | j¡ | jdd	 d S )
Nr'   r·   Frº   r   T)r«   r¬   r»   )r«   )rm   rB   r¼   rC   r%   rD   rE   rQ   r   r‚   r¡   r£   r>   r@   r-   r[   r½   r"   r¾   r™   r¿   )r   r   r   r   Úexpect_flow_mapping_keyò  s&    zEmitter.expect_flow_mapping_keyc             C   s,   |   | jd¡ | j | j¡ | jdd d S )NFT)r«   )r   rP   r>   r"   rÀ   r™   )r   r   r   r   r¾     s    z(Emitter.expect_flow_mapping_simple_valuec             C   sF   | j s| j| jkr|  ¡  |  | jd¡ | j | j¡ | j	dd d S )NT)r«   )
rQ   r-   r[   r‚   r   rP   r>   r"   rÀ   r™   )r   r   r   r   r¿     s
    z!Emitter.expect_flow_mapping_valuec             C   s*   | j o| j }| jdd|d | j| _d S )NFT)rw   rx   ry   )rH   rL   rz   Ú expect_first_block_sequence_itemr@   )r   ry   r   r   r   r§     s    zEmitter.expect_block_sequencec             C   s   | j ddS )NT)r~   )Úexpect_block_sequence_item)r   r   r   r   rÁ   #  s    z(Emitter.expect_first_block_sequence_itemc             C   sÜ   |sJt | jtƒrJ| jjr0| jjd r0|  | j¡ | j ¡ | _| j ¡ | _	nŽ| jjrj| jjd rj|  | j¡ | j
dkrz| jnd}|  ¡  | j}| jd| d ddd |s¸| jd | jkr¾d| _| j | j¡ | jdd	 d S )
Nr'   r   Fr¯   ú-T)rL   r*   )rx   )rm   rB   r´   r¡   r¤   rC   r%   rD   r>   r@   r-   rM   r‚   rV   r   rX   r"   rÂ   r™   )r   r~   Znonlr²   r   r   r   rÂ   '  s    z"Emitter.expect_block_sequence_itemc             C   s   | j ddd | j| _d S )NF)rw   rx   )rz   Úexpect_first_block_mapping_keyr@   )r   r   r   r   rª   =  s    zEmitter.expect_block_mappingc             C   s   | j ddS )NT)r~   )Úexpect_block_mapping_key)r   r   r   r   rÄ   B  s    z&Emitter.expect_first_block_mapping_keyc             C   sî   |sJt | jtƒrJ| jjr0| jjd r0|  | j¡ | j ¡ | _| j ¡ | _	n | jjrj| jjd rj|  | j¡ |  
¡  |  ¡ rÀt | jtƒs¢| jjdkr¢| jdddd | j | j¡ | jddd n*| jdddd | j | j¡ | jdd d S )Nr'   r»   T)rL   )r«   r¬   )r«   )rm   rB   r¼   r¡   r¤   rC   r%   rD   r>   r@   r‚   r½   rp   ra   r   r"   Ú!expect_block_mapping_simple_valuer™   Úexpect_block_mapping_value)r   r~   r   r   r   rÅ   F  s"    z Emitter.expect_block_mapping_keyc             C   sn   t | jdd ƒdkrP| jdkr>| jd k	r>d| j| j  | j }n| j}|  |d¡ | j 	| j
¡ | jdd d S )Nra   r»   r   r¯   FT)r«   )r:   rB   rD   rW   r-   rO   rP   r   r>   r"   rÅ   r™   )r   Úcr   r   r   rÆ   ^  s    z)Emitter.expect_block_mapping_simple_valuec             C   s8   |   ¡  | j| jddd | j | j¡ | jdd d S )NT)rL   )r«   )r‚   r   rP   r>   r"   rÅ   r™   )r   r   r   r   rÇ   k  s    z"Emitter.expect_block_mapping_valuec             C   s&   t | jtƒo$t| jƒo$t | jd tƒS )Nr   )rm   rB   rp   ÚboolrA   r´   )r   r   r   r   r¥   t  s    zEmitter.check_empty_sequencec             C   s&   t | jtƒo$t| jƒo$t | jd tƒS )Nr   )rm   rB   rq   rÉ   rA   r¼   )r   r   r   r   r¨   y  s    zEmitter.check_empty_mappingc             C   sN   t | jtƒr| jsdS | jd }t |tƒoL|jd koL|jd koL|joL|jdkS )NFr   Ú )	rm   rB   rn   rA   r   r­   Útagr•   Úvalue)r   rB   r   r   r   r   ~  s
    
zEmitter.check_empty_documentc             C   s*  d}t | jtƒrD| jjd k	rD| jd kr6|  | jj¡| _|t| jƒ7 }t | jttfƒrˆ| jj	d k	rˆ| j
d krz|  | jj	¡| _
|t| j
ƒ7 }t | jtƒr¾| jd kr®|  | jj¡| _|t| jjƒ7 }|| jk o(t | jtƒp(t | jtƒrò| jjdkp(t | jtƒr| jj r| jj p(|  ¡ p(|  ¡ S )Nr   T)rm   rB   Z	NodeEventr­   r^   Úprepare_anchorr,   r   rr   rË   r_   Úprepare_tagr`   Úanalyze_scalarrÌ   r   ÚMAX_SIMPLE_KEY_LENGTHr›   rp   r¢   r   r   r¥   r¨   )r   Úlengthr   r   r   r½   †  s*    


zEmitter.check_simple_keyc             C   sR   | j jd krd | _d S | jd kr0|  | j j¡| _| jrH|  || j d¡ d | _d S )NT)rB   r­   r^   rÍ   r   )r   Ú	indicatorr   r   r   rž      s    
zEmitter.process_anchorc             C   s  | j j}t| j tƒrŒ| jd kr(|  ¡ | _| jr6|d krl| jdkrL| j jd sb| jdkrl| j jd rld | _d S | j jd r¬|d kr¬d}d | _n | jrš|d kr¬| j jr¬d | _d S |d kr¼t	dƒ‚| jd krÒ|  
|¡| _| jr|  | jd¡ | jr| jst| j tƒrd| _d | _d S )NrÊ   r   r'   r1   ztag is not specifiedT)rB   rË   rm   r   ra   Úchoose_scalar_stylerQ   r•   r_   r   rÎ   r   rG   rE   rM   )r   rË   r   r   r   rŸ   «  s2    


zEmitter.process_tagc             C   s2  | j d kr|  | jj¡| _ | jjdks,| jr0dS | jjrD| jjdkr’| jjd s\| jjd s’| jrr| j js’| j j	s’| j
r€| j jsŽ| j
s’| j jr’dS d| j _| jjrÊ| jjdkrÊ| j
sÊ| jsÊ| j jrÊ| jjS | jjsö| j jröd| jjksòd	| jjkrödS | jjr| jjdkr.| j jr.| jr*| j j	s.dS dS )
Nú"r»   r   r*   rÊ   Tz|>ú'r7   )r`   rÏ   rB   rÌ   ra   rQ   r•   rI   r   r   rE   r   r   r   r   r   )r   r   r   r   rÓ   È  s0    

zEmitter.choose_scalar_stylec             C   sê   | j d kr|  | jj¡| _ | jd kr.|  ¡ | _| j }| jrJ| jsJ|  	¡  | jdkrf|  
| j j|¡ n`| jdkr‚|  | j j|¡ nD| jdkrœ|  | j j¡ n*| jdkr¶|  | j j¡ n|  | j j|¡ d | _ d | _| jjræ|  | j¡ d S )NrÔ   rÕ   ú>ú|)r`   rÏ   rB   rÌ   ra   rÓ   rI   rG   rE   r‚   Úwrite_double_quotedr   Úwrite_single_quotedÚwrite_foldedÚwrite_literalÚwrite_plainr¡   r£   )r   Úsplitr   r   r   r®   ã  s(    






zEmitter.process_scalarc             C   s,   |\}}|dkr t d||f ƒ‚d||f S )Nr'   zunsupported YAML version: %d.%dz%d.%d)r   )r   r€   ÚmajorÚminorr   r   r   rƒ      s
    zEmitter.prepare_versionc             C   s°   |st dƒ‚|d dks$|d dkr4t dt|ƒ ƒ‚xv|dd… D ]f}d|  krZdksBn d	|  krpd
ksBn d|  kr†dksBn |dksBt dt|ƒt|ƒf ƒ‚qBW |S )Nztag handle must not be emptyr   r1   r+   z*tag handle must start and end with '!': %rr'   Ú0Ú9ÚAÚZÚaÚzz-_z*invalid character %r in the tag handle: %r)r   r   )r   r‘   Úchr   r   r   r‰     s    ,zEmitter.prepare_tag_handlec             C   s  |st dƒ‚g }d }}|d dkr(d}xº|t|ƒk râ|| }d|  krRdksˆn d|  krhdksˆn d	|  kr~d
ksˆn |dkr’|d7 }q*||k r¬| |||… ¡ |d  }}t|ƒ}x|D ]}| dt|ƒ ¡ qÆW q*W ||k rþ| |||… ¡ d |¡S )Nztag prefix must not be emptyr   r1   r'   rà   rá   râ   rã   rä   rå   z-;/?!:@&=+$,_.~*'()[]z%%%02XrÊ   )r   r,   r"   r   ÚordÚjoin)r   r’   ÚchunksÚstartÚendræ   Údatar   r   r   rŠ     s(    B

zEmitter.prepare_tag_prefixc             C   sž  |st dƒ‚|dkr|S d }|}t| j ¡ ƒ}xH|D ]@}| |¡r4|dksZt|ƒt|ƒk r4| j| }|t|ƒd … }q4W g }d }}xÔ|t|ƒk rX|| }	d|	  kr°dksún d|	  krÆdksún d|	  krÜd	ksún |	d
ksú|	dkr|dkr|d7 }q†||k r | |||… ¡ |d  }}t|	ƒ}
x |
D ]}	| dt|	ƒ ¡ q:W q†W ||k rv| |||… ¡ d 	|¡}|r’d||f S d| S d S )Nztag must not be emptyr1   r   rà   rá   râ   rã   rä   rå   z-;/?:@&=+$,_.~*'()[]r'   z%%%02XrÊ   z%s%sz!<%s>)
r   r‡   r]   rˆ   Ú
startswithr,   r"   r   rç   rè   )r   rË   r‘   ÚsuffixÚprefixesr’   ré   rê   rë   ræ   rì   Zsuffix_textr   r   r   rÎ   .  s@    


B




zEmitter.prepare_tagc             C   s>   |st dƒ‚x,|D ]$}t|ƒst dt|ƒt|ƒf ƒ‚qW |S )Nzanchor must not be emptyz&invalid character %r in the anchor: %r)r   r   r   )r   r­   ræ   r   r   r   rÍ   S  s    
zEmitter.prepare_anchorc          
   C   sz  |st |ddddddddS d}d}d}d}d}d}d}d}	d}
d}| d¡sX| d¡r`d}d}d}t|ƒdkpz|d dk}d}d}d}x.|t|ƒk r¸|| }|dkrð|d	krºd}d}|d
krÚ| jjdkrÒd}|rÚd}|dkrî|rîd}d}nX|dkrüd}|dkr| jjdkrd}|dkr0|r0d}d}|dkrH|rHd}d}|dkrVd}|dksød|  krxdksøn |dksÜd|  krœdksÜn d|  kr¶dksÜn | jrôd|  krØdkrôn n|dkrô| jsød}nd}|dkr:|dkrd}|t|ƒd kr&d}|r0d}
d}d}nJ|dkr||dkrRd}|t|ƒd krhd}	|rrd}d}d}nd}d}|d7 }|dk}|d t|ƒkp´||d  dk}qŒW d}d}d}d}d}|sæ|sæ|sæ|	rîd }}|rød}|
r
d } }}|r"d } } }}n|r@d } }}| js@d}|rNd }}|rXd}|rbd}t |d||||||dS )NTF)r   r   r   r   r   r   r   r   z---z...r'   u     	
Â…â€¨â€©r   z#,[]{}&*!|>'"%@`z?:)r'   r'   rÃ   z,[]{}r»   r4   ú#u	   
Â…â€¨â€©r7   r¯   ú~õ   Â…õ   Â u   íŸ¿u   î€€u   ï¿½u   ð€€u   ô¿¿u   ï»¿)r   rí   r,   rh   Zuse_versionrU   rR   r=   )r   r   Zblock_indicatorsZflow_indicatorsZline_breaksZspecial_charactersÚleading_spaceZleading_breakZtrailing_spaceZtrailing_breakZbreak_spaceZspace_breakZpreceeded_by_whitespaceZfollowed_by_whitespaceZprevious_spaceZprevious_breakÚindexræ   r   r   r   r   r   r   r   r   rÏ   ]  sä    

$$&



zEmitter.analyze_scalarc             C   s   t | jdƒr| j ¡  d S )NÚflush)rf   r;   rö   )r   r   r   r   r–     s    zEmitter.flush_streamc             C   s*   | j r&| j  d¡r&| j d | j ¡¡ d S )Nzutf-16u   ï»¿)r<   rí   r;   re   Úencode)r   r   r   r   r{     s    zEmitter.write_stream_startc             C   s   |   ¡  d S )N)r–   )r   r   r   r   r     s    zEmitter.write_stream_endc             C   sh   | j s
|s|}nd| }|| _ | jo&|| _|  jt|ƒ7  _d| _t| jƒrX| | j¡}| j 	|¡ d S )Nr¯   F)
rK   rL   r-   r,   rN   rÉ   r<   r÷   r;   re   )r   rÒ   Zneed_whitespacerK   rL   rì   r   r   r   r     s    

zEmitter.write_indicatorc             C   sŠ   | j pd}| jr*| j|ks*| j|krD| jsDt| jƒr<d| _n|  ¡  | j|k r†d| _d|| j  }|| _| jrz| | j¡}| j	 
|¡ d S )Nr   FTr¯   )rD   rL   r-   rK   rÉ   rM   rµ   r<   r÷   r;   re   )r   rD   rì   r   r   r   r‚   %  s    


zEmitter.write_indentc             C   sT   |d kr| j }d| _d| _|  jd7  _d| _t| jƒrD| | j¡}| j 	|¡ d S )NTr'   r   )
r\   rK   rL   rJ   r-   rÉ   r<   r÷   r;   re   )r   rì   r   r   r   rµ   6  s    
zEmitter.write_line_breakc             C   s2   d| }| j r| | j ¡}| j |¡ |  ¡  d S )Nz	%%YAML %s)r<   r÷   r;   re   rµ   )r   r   rì   r   r   r   r„   B  s
    zEmitter.write_version_directivec             C   s6   d||f }| j r| | j ¡}| j |¡ |  ¡  d S )Nz%%TAG %s %s)r<   r÷   r;   re   rµ   )r   r“   r”   rì   r   r   r   r‹   J  s
    zEmitter.write_tag_directiveTc       
      C   sh  | j r*| jd k	r*|  ¡  | jdkr*|  ¡  |  dd¡ d}d}d }}x|t|ƒkrVd }|t|ƒk rp|| }|r|d ksˆ|dkrê|d |krÂ| j| jkrÂ|rÂ|dkrÂ|t|ƒkrÂ|  ¡  n@|||… }|  jt|ƒ7  _t| j	ƒrö| 
| j	¡}| j |¡ |}nâ|r||d ks"|dkrê|| dkr8|  ¡  x4|||… D ]$}	|	dkr^|  ¡  n
|  |	¡ qFW |  ¡  |}nn|d ksš|d	ksš|dkrê||k rê|||… }|  jt|ƒ7  _t| j	ƒrÚ| 
| j	¡}| j |¡ |}|dkr2d
}|  jd7  _t| j	ƒr| 
| j	¡}| j |¡ |d }|d k	rL|dk}|dk}|d7 }qJW |  dd¡ d S )Nr   rÕ   TFr¯   r'   u	   
Â…â€¨â€©r7   u
    
Â…â€¨â€©z''r*   )rF   rY   rµ   r‚   r   r,   r-   r[   rÉ   r<   r÷   r;   re   )
r   ÚtextrÝ   ÚspacesÚbreaksrê   rë   ræ   rì   Úbrr   r   r   rÙ   T  sl    








zEmitter.write_single_quotedrà   rä   ÚbÚtÚnÚvÚfÚrÚerÔ   ú\ÚNÚ_ÚLÚP)ú úúú	r7   úúr8   úrÔ   r  rò   ró   u   â€¨u   â€©c             C   sÖ  | j r*| jd k	r*|  ¡  | jdkr*|  ¡  |  dd¡ d }}x„|t|ƒkrÄd }|t|ƒk rh|| }|d ksÆ|dksÆd|  krŽdks¶n | jrÆd|  kr¬dks¶n d	|  krÄd
ks¶n ||k r|||… }|  jt|ƒ7  _t| j	ƒr| 
| j	¡}| j |¡ |}|d k	r¶|| jkr<d| j|  }n<|dkrTdt|ƒ }n$|dkrldt|ƒ }ndt|ƒ }|  jt|ƒ7  _t| j	ƒr¢| 
| j	¡}| j |¡ |d }d|  k rÖt|ƒd k rºn nà|dksî||krº| j||  | jkrº|rº|||… d }||k r(|}|  jt|ƒ7  _t| j	ƒrR| 
| j	¡}| j |¡ |  ¡  d| _d| _|| dkrºd}|  jt|ƒ7  _t| j	ƒr®| 
| j	¡}| j |¡ |d7 }qBW |  dd¡ d S )Nr   rÔ   Tu   "\Â…â€¨â€©ï»¿r¯   rñ   ró   u   íŸ¿u   î€€u   ï¿½r  õ   Ã¿z\x%02Xu   ï¿¿z\u%04Xz\U%08Xr'   F)rF   rY   rµ   r‚   r   r,   rR   r-   rÉ   r<   r÷   r;   re   ÚESCAPE_REPLACEMENTSrç   r[   rK   rL   )r   rø   rÝ   rê   rë   ræ   rì   r   r   r   rØ   ¢  sn    

0



8
zEmitter.write_double_quotedc             C   s\   d}|rX|d dkr"|t | jƒ7 }|d dkr8|d7 }n t|ƒdksP|d dkrX|d	7 }|S )
NrÊ   r   u
    
Â…â€¨â€©r+   u	   
Â…â€¨â€©rÃ   r'   r&   ú+)r   rX   r,   )r   rø   Úhintsr   r   r   Údetermine_block_hintsÝ  s    
zEmitter.determine_block_hintsc             C   s  |   |¡}|  d| d¡ |dd … dkr0d| _|  ¡  d}d}d}d }}xÈ|t|ƒkrd }|t|ƒk rv|| }|r|d ksŽ|dkrò|s¶|d k	r¶|dkr¶|| d	kr¶|  ¡  |dk}x0|||… D ] }	|	d	krâ|  ¡  qÌ|  |	¡ qÌW |d k	r|  ¡  |}nê|r†|dkrò|d
 |kr>| j| jkr>|  ¡  nB|||… }
|  jt|
ƒ7  _t| j	ƒrt|
 
| j	¡}
| j |
¡ |}nl|d ksš|dkrò|||… }
|  jt|
ƒ7  _t| j	ƒrÐ|
 
| j	¡}
| j |
¡ |d krî|  ¡  |}|d k	r|dk}|dk}|d
7 }qPW d S )NrÖ   Tr+   r  Fr   u	   
Â…â€¨â€©r¯   r7   r'   u
    
Â…â€¨â€©)r  r   rN   rµ   r,   r‚   r-   r[   rÉ   r<   r÷   r;   re   )r   rø   r  rô   rù   rú   rê   rë   ræ   rû   rì   r   r   r   rÚ   é  sb    






zEmitter.write_foldedc       	      C   sP  |   |¡}|  d| d¡ |dd … dkr0d| _|  ¡  d}d }}x|t|ƒkrJd }|t|ƒk rn|| }|rÖ|d ks‚|dkrÔx0|||… D ] }|dkr¦|  ¡  q|  |¡ qW |d k	rÐ| jrÈ| jrÐ|  ¡  |}nX|d ksè|dkr.|||… }t| j	ƒr| 
| j	¡}| j |¡ |d kr*|  ¡  |}|d k	r@|dk}|d7 }qHW d S )	Nr×   Tr+   r  r   u	   
Â…â€¨â€©r7   r'   )r  r   rN   rµ   r,   rF   rY   r‚   rÉ   r<   r÷   r;   re   )	r   rø   r  rú   rê   rë   ræ   rû   rì   r   r   r   rÛ      s>    



zEmitter.write_literalc       
      C   sV  | j r2| jd k	r,|  ¡  | jdkr2|  ¡  nd| _|s:d S | jstd}|  jt|ƒ7  _| jrh| 	| j¡}| j
 |¡ d| _d| _d}d}d }}x¾|t|ƒkrPd }|t|ƒk rº|| }|r@|dkr,|d |krü| j| jkrü|rü|  ¡  d| _d| _n>|||… }|  jt|ƒ7  _| jr.| 	| j¡}| j
 |¡ |}nì|r¶|dkr,|| dkrf|  ¡  x4|||… D ]$}	|	dkrŒ|  ¡  n
|  |	¡ qtW |  ¡  d| _d| _|}nv|d ksÊ|dkr,|||… }|  jt|ƒ7  _| jrü| 	| j¡}y| j
 |¡ W n   tt|ƒƒ ‚ Y nX |}|d k	rF|dk}|dk}|d7 }q”W d S )	Nr   Tr¯   Fr'   u	   
Â…â€¨â€©r7   u
    
Â…â€¨â€©)rF   rY   rµ   r‚   rN   rK   r-   r,   r<   r÷   r;   re   rL   r[   ÚprintÚrepr)
r   rø   rÝ   rì   rù   rú   rê   rë   ræ   rû   r   r   r   rÜ   D  s|    







zEmitter.write_plainc             C   sð   |j }|d dkr|d d… }y|jj}|| jd k r:t W n tk
rZ   | jd }Y nX yp|| j }| jr‚| ¡ r‚|dk r‚d}d| | }yt| jƒr¦| | j¡}W n tk
r¼   Y nX | j	 
|¡ W n tk
râ   ‚ Y nX |  ¡  d S )Nr+   r7   r'   r¯   )rÌ   Z
start_markr-   Ú
ValueErrorÚstriprÉ   r<   r÷   ÚUnicodeDecodeErrorr;   re   Ú	TypeErrorrµ   )r   r¡   rÌ   ÚcolZ	nr_spacesr   r   r   Úwrite_comment‰  s.    

zEmitter.write_commentc             C   s    |j d }|d krdS y^ttf}xP|D ]H}t||ƒrBt|dd ƒrBq&| jdkrT|  ¡  |  |¡ t||ƒr&d|_q&W W n& t	k
rš   t
dt|ƒ|ƒ ‚ Y nX dS )Nr'   FÚpre_doner   TZeventtt)r¡   rq   rp   rm   r:   r-   rµ   r  r  r  r  Útype)r   rB   ZcommentsZstart_eventsr¡   r   r   r   r¤   ¨  s$    





zEmitter.write_pre_commentc             C   s,   | j jd d krdS |jd }|  |¡ dS )Nr   FT)rB   r¡   r  )r   rB   r¡   r   r   r   r£   ½  s
    

zEmitter.write_post_comment)	NNNNNNNNN)FNF)F)FFFF)F)F)FF)N)T)T)T)Hr   r   r   r…   rÐ   r   Úpropertyr;   Úsetterrh   ri   rk   rj   ro   rz   r?   r}   r|   r   r—   rŽ   r™   rœ   r    r¦   r±   r¶   r©   r¹   rÀ   r¾   r¿   r§   rÁ   rÂ   rª   rÄ   rÅ   rÆ   rÇ   r¥   r¨   r   r½   rž   rŸ   rÓ   r®   rƒ   r‰   rŠ   rÎ   rÍ   rÏ   r–   r{   r   r   r‚   rµ   r„   r‹   rÙ   r  rØ   r  rÚ   rÛ   rÜ   r  r¤   r£   r   r   r   r   r   S   s®     
S	


( 
(	


	%
 +



=
;7$
E)Z
__future__r   r   rS   Zruamel_yaml.errorr   r   Zruamel_yaml.eventsZruamel_yaml.compatr   r   r	   r
   r   r   r   Ú__all__r   Úobjectr   r    r   r   r   r   r   Ú<module>   s   	$%