B
    |?_[#~  ã               @   sŠ   d dl mZ d dlmZ d dlT d dlT d dlmZmZm	Z	 d dl
mZmZ dddgZG d	d„ deƒZG d
d„ deƒZG dd„ deƒZdS )é    )Úabsolute_import)ÚMarkedYAMLError)Ú*)ÚScannerÚRoundTripScannerÚScannerError)Úutf8ÚnprintÚParserÚRoundTripParserÚParserErrorc               @   s   e Zd ZdS )r   N)Ú__name__Ú
__module__Ú__qualname__© r   r   ú1lib/python3.7/site-packages/ruamel_yaml/parser.pyr   [   s   c               @   s>  e Zd ZdddœZdd„ Zdd„ Zdd	„ Zed
d„ ƒZedd„ ƒZ	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ ZdLd)d*„Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ ZdMd9d:„Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dNdCdD„Z$dEdF„ Z%dGdH„ Z&dOdJdK„Z'dIS )Pr
   ú!ztag:yaml.org,2002:)r   z!!c             C   s6   || _ | j d k	r*t| j dd ƒd kr*| | j _|  ¡  d S )NÚ_parser)ÚloaderÚgetattrr   Úreset_parser)Úselfr   r   r   r   Ú__init__h   s    zParser.__init__c             C   s*   d | _ d | _i | _g | _g | _| j| _d S )N)Úcurrent_eventÚyaml_versionÚtag_handlesÚstatesÚmarksÚparse_stream_startÚstate)r   r   r   r   r   o   s    zParser.reset_parserc             C   s   |   ¡  d S )N)r   )r   r   r   r   Údisposey   s    zParser.disposec             C   s   t | jdƒr| jj | jjS )NÚtyp)Úhasattrr   ÚscannerZ_scanner)r   r   r   r   r#   }   s    zParser.scannerc             C   s   t | jdƒr| jj | jjS )Nr!   )r"   r   ÚresolverZ	_resolver)r   r   r   r   r$   „   s    zParser.resolverc             G   sN   | j d kr| jr|  ¡ | _ | j d k	rJ|s,dS x|D ]}t| j |ƒr2dS q2W dS )NTF)r   r   Ú
isinstance)r   ÚchoicesZchoicer   r   r   Úcheck_event‹   s    



zParser.check_eventc             C   s    | j d kr| jr|  ¡ | _ | j S )N)r   r   )r   r   r   r   Ú
peek_event™   s    

zParser.peek_eventc             C   s*   | j d kr| jr|  ¡ | _ | j }d | _ |S )N)r   r   )r   Úvaluer   r   r   Ú	get_event¡   s    

zParser.get_eventc             C   s:   | j  ¡ }| | j  ¡ ¡ t|j|j|jd}| j| _	|S )N)Úencoding)
r#   Ú	get_tokenÚmove_commentÚ
peek_tokenZStreamStartEventÚ
start_markÚend_markr+   Úparse_implicit_document_startr   )r   ÚtokenÚeventr   r   r   r   °   s    


zParser.parse_stream_startc             C   s`   | j  ttt¡sT| j| _| j  ¡ }|j }}t	||dd}| j
 | j¡ | j| _|S |  ¡ S d S )NF)Úexplicit)r#   Úcheck_tokenÚDirectiveTokenÚDocumentStartTokenÚStreamEndTokenÚDEFAULT_TAGSr   r.   r/   ÚDocumentStartEventr   ÚappendÚparse_document_endÚparse_block_noder   Úparse_document_start)r   r2   r/   r0   r3   r   r   r   r1   ½   s    


z$Parser.parse_implicit_document_startc             C   sè   x| j  t¡r| j  ¡  qW | j  t¡s¬| j  ¡ }|j}|  ¡ \}}| j  t¡srt	d d d| j  ¡ j
 | j  ¡ jƒ‚| j  ¡ }|j}t||d||d}| j | j¡ | j| _n8| j  ¡ }t|j|j|jd}| jrÔt‚| jrÞt‚d | _|S )Nz)expected '<document start>', but found %rT)r4   ÚversionÚtags)Úcomment)r#   r5   ÚDocumentEndTokenr,   r8   r.   r/   Úprocess_directivesr7   r   Úidr0   r:   r   r;   r<   Úparse_document_contentr   ZStreamEndEventrA   ÚAssertionErrorr   )r   r2   r/   r?   r@   r0   r3   r   r   r   r>   Ñ   s2    







zParser.parse_document_startc             C   sh   | j  ¡ }|j }}d}| j  t¡r8| j  ¡ }|j}d}t|||d}| jj	dkr\| j
| _n| j| _|S )NFT)r4   )é   rG   )r#   r.   r/   r5   rB   r,   r0   ZDocumentEndEventr$   Zprocessing_versionr>   r   r1   )r   r2   r/   r0   r4   r3   r   r   r   r<   ñ   s    



zParser.parse_document_endc             C   s@   | j  tttt¡r4|  | j  ¡ j¡}| j	 
¡ | _|S |  ¡ S d S )N)r#   r5   r6   r7   rB   r8   Úprocess_empty_scalarr.   r/   r   Úpopr   r=   )r   r3   r   r   r   rE     s    
zParser.parse_document_contentc             C   s  d | _ i | _xª| j t¡r¶| j ¡ }|jdkrt| j d k	rHtd d d|jƒ‚|j	\}}|dkrjtd d d|jƒ‚|j	| _ q|jdkr|j	\}}|| jkrªtd d dt
|ƒ |jƒ‚|| j|< qW t| jƒrÔ| j | j ¡ f}n
| j d f}x(| jD ]}|| jkræ| j| | j|< qæW |S )NZYAMLzfound duplicate YAML directiverG   z:found incompatible YAML document (version 1.* is required)ZTAGzduplicate tag handle %r)r   r   r#   r5   r6   r,   Únamer   r/   r)   r   ÚboolÚcopyr9   )r   r2   ÚmajorÚminorÚhandleÚprefixr)   Úkeyr   r   r   rC     s<    












zParser.process_directivesc             C   s   | j ddS )NT)Úblock)Ú
parse_node)r   r   r   r   r=   C  s    zParser.parse_block_nodec             C   s   |   ¡ S )N)rS   )r   r   r   r   Úparse_flow_nodeG  s    zParser.parse_flow_nodec             C   s   | j dddS )NT)rR   Úindentless_sequence)rS   )r   r   r   r   Ú'parse_block_node_or_indentless_sequenceK  s    z.Parser.parse_block_node_or_indentless_sequencec             C   s   | j | | S )N)r   )r   rO   Úsuffixr   r   r   Útransform_tagO  s    zParser.transform_tagFc          
   C   s  | j  t¡r8| j  ¡ }t|j|j|jƒ}| j 	¡ | _
|S d }d }d  } }}	| j  t¡rž| j  ¡ }|j}|j}|j}| j  t¡rö| j  ¡ }|j}	|j}|j}nX| j  t¡rö| j  ¡ }|j }}	|j}|j}| j  t¡rö| j  ¡ }|j }}	|j}|j}|d k	rF|\}
}|
d k	rB|
| jkr4td|dt|
ƒ |	ƒ‚|  |
|¡}n|}|d kr`| j  ¡ j }}d }|d kpt|dk}|rò| j  t¡ròd }| j  ¡ }|jrÄ|jd rÄ|jd g g}d |jd< | j  ¡ j}t|||||d|d}| j| _
|S | j  t¡rt| j  ¡ }|j}|jr"|d ks,|dkr2d}n|d krBd}nd	}t||||j|||j|jd
}| j 	¡ | _
n¤| j  t¡r¶| j  ¡ }|j}t|||||d|jd}| j| _
nb| j  t¡rð| j  ¡ j}t|||||dd}| j| _
n(|r`| j  t¡r`| j  ¡ j}| j  ¡ }|j}|d ks8|d d kr@|  ¡ }t|||||d|d}| j!| _
n¸|r¬| j  t"¡r¬| j  ¡ j}| j  ¡ j}t|||||d|d}| j#| _
nl|d k	sÀ|d k	rät|||dfd||ƒ}| j 	¡ | _
n4|rðd}nd}| j  ¡ }td| |d|j$ |jƒ‚|S )Nzwhile parsing a nodezfound undefined tag handle %rr   r   F)Ú
flow_stylerA   )TF)FT)FF)ÚstylerA   T)rY   rG   Ú rR   Zflowzwhile parsing a %s nodez'expected the node content, but found %r)%r#   r5   Z
AliasTokenr,   Z
AliasEventr)   r/   r0   r   rI   r   ZAnchorTokenZTagTokenr   r   r   rX   r.   ÚBlockEntryTokenrA   ZSequenceStartEventÚparse_indentless_sequence_entryZScalarTokenZplainÚScalarEventrZ   ZFlowSequenceStartTokenÚparse_flow_sequence_first_entryZFlowMappingStartTokenÚMappingStartEventÚparse_flow_mapping_first_keyZBlockSequenceStartTokenZsplit_commentÚ parse_block_sequence_first_entryZBlockMappingStartTokenÚparse_block_mapping_first_keyrD   )r   rR   rU   r2   r3   ZanchorÚtagr/   r0   Ztag_markrO   rW   ZimplicitrA   ZptZnoder   r   r   rS   S  sÜ    

























zParser.parse_nodec             C   s    | j  ¡ }| j |j¡ |  ¡ S )N)r#   r,   r   r;   r/   Úparse_block_sequence_entry)r   r2   r   r   r   rb   Ü  s    
z'Parser.parse_block_sequence_first_entryc             C   sÈ   | j  t¡r^| j  ¡ }| | j  ¡ ¡ | j  tt¡sJ| j | j	¡ |  
¡ S | j	| _|  |j¡S | j  t¡s| j  ¡ }td| jd d|j |jƒ‚| j  ¡ }t|j|j|jd}| j ¡ | _| j ¡  |S )Nz while parsing a block collectionéÿÿÿÿz"expected <block end>, but found %r)rA   )r#   r5   r\   r,   r-   r.   ÚBlockEndTokenr   r;   re   r=   r   rH   r0   r   r   rD   r/   ÚSequenceEndEventrA   rI   )r   r2   r3   r   r   r   re   ä  s(    






z!Parser.parse_block_sequence_entryc             C   s   | j  t¡rb| j  ¡ }| | j  ¡ ¡ | j  tttt¡sN| j	 
| j¡ |  ¡ S | j| _|  |j¡S | j  ¡ }t|j|j|jd}| j	 ¡ | _|S )N)rA   )r#   r5   r\   r,   r-   r.   ÚKeyTokenÚ
ValueTokenrg   r   r;   r]   r=   r   rH   r0   rh   r/   rA   rI   )r   r2   r3   r   r   r   r]     s    




z&Parser.parse_indentless_sequence_entryc             C   s    | j  ¡ }| j |j¡ |  ¡ S )N)r#   r,   r   r;   r/   Úparse_block_mapping_key)r   r2   r   r   r   rc     s    
z$Parser.parse_block_mapping_first_keyc             C   sÚ   | j  t¡r`| j  ¡ }| | j  ¡ ¡ | j  ttt¡sL| j 	| j
¡ |  ¡ S | j
| _|  |j¡S | j  t¡s’| j  ¡ }td| jd d|j |jƒ‚| j  ¡ }| | j  ¡ ¡ t|j|j|jd}| j ¡ | _| j ¡  |S )Nzwhile parsing a block mappingrf   z"expected <block end>, but found %r)rA   )r#   r5   ri   r,   r-   r.   rj   rg   r   r;   Úparse_block_mapping_valuerV   r   rH   r0   r   r   rD   r/   ÚMappingEndEventrA   rI   )r   r2   r3   r   r   r   rk      s*    






zParser.parse_block_mapping_keyc             C   sÐ   | j  t¡r®| j  ¡ }| j  t¡r4| | j  ¡ ¡ n | j  t¡sT|j| j  ¡ dd | j  ttt¡sz| j 	| j
¡ |  ¡ S | j
| _|j}|d krœ| j  ¡ j}| j|j|dS n| j
| _| j  ¡ }|  |j¡S d S )NT)Úempty)rA   )r#   r5   rj   r,   r-   r.   ri   rg   r   r;   rk   rV   r   rA   rH   r0   r/   )r   r2   rA   r   r   r   rl   :  s"    

z Parser.parse_block_mapping_valuec             C   s$   | j  ¡ }| j |j¡ | jddS )NT)Úfirst)r#   r,   r   r;   r/   Úparse_flow_sequence_entry)r   r2   r   r   r   r_   `  s    
z&Parser.parse_flow_sequence_first_entryc             C   sâ   | j  t¡sª|sN| j  t¡r(| j  ¡  n&| j  ¡ }td| jd d|j |j	ƒ‚| j  t
¡rˆ| j  ¡ }td d d|j	|jdd}| j| _|S | j  t¡sª| j | j¡ |  ¡ S | j  ¡ }t|j	|j|jd}| j ¡ | _| j ¡  |S )Nzwhile parsing a flow sequencerf   zexpected ',' or ']', but got %rT)rY   )rA   )r#   r5   ÚFlowSequenceEndTokenÚFlowEntryTokenr,   r.   r   r   rD   r/   ri   r`   r0   Ú%parse_flow_sequence_entry_mapping_keyr   r   r;   rp   rT   rh   rA   rI   )r   ro   r2   r3   r   r   r   rp   f  s2    






z Parser.parse_flow_sequence_entryc             C   sH   | j  ¡ }| j  ttt¡s0| j | j¡ |  	¡ S | j| _
|  |j¡S d S )N)r#   r,   r5   rj   rr   rq   r   r;   Ú'parse_flow_sequence_entry_mapping_valuerT   r   rH   r0   )r   r2   r   r   r   rs   „  s    
z,Parser.parse_flow_sequence_entry_mapping_keyc             C   sr   | j  t¡rP| j  ¡ }| j  tt¡s:| j | j¡ |  	¡ S | j| _
|  |j¡S n| j| _
| j  ¡ }|  |j¡S d S )N)r#   r5   rj   r,   rr   rq   r   r;   Ú%parse_flow_sequence_entry_mapping_endrT   r   rH   r0   r.   r/   )r   r2   r   r   r   rt     s    

z.Parser.parse_flow_sequence_entry_mapping_valuec             C   s    | j | _| j ¡ }t|j|jƒS )N)rp   r   r#   r.   rm   r/   )r   r2   r   r   r   ru   ž  s    
z,Parser.parse_flow_sequence_entry_mapping_endc             C   s$   | j  ¡ }| j |j¡ | jddS )NT)ro   )r#   r,   r   r;   r/   Úparse_flow_mapping_key)r   r2   r   r   r   ra   ª  s    
z#Parser.parse_flow_mapping_first_keyc             C   sú   | j  t¡sÂ|sN| j  t¡r(| j  ¡  n&| j  ¡ }td| jd d|j |j	ƒ‚| j  t
¡r | j  ¡ }| j  ttt¡sŠ| j | j¡ |  ¡ S | j| _|  |j¡S n"| j  t¡sÂ| j | j¡ |  ¡ S | j  ¡ }t|j	|j|jd}| j ¡ | _| j ¡  |S )Nzwhile parsing a flow mappingrf   zexpected ',' or '}', but got %r)rA   )r#   r5   ÚFlowMappingEndTokenrr   r,   r.   r   r   rD   r/   ri   rj   r   r;   Úparse_flow_mapping_valuerT   r   rH   r0   Úparse_flow_mapping_empty_valuerm   rA   rI   )r   ro   r2   r3   r   r   r   rv   °  s4    






zParser.parse_flow_mapping_keyc             C   sr   | j  t¡rP| j  ¡ }| j  tt¡s:| j | j¡ |  	¡ S | j| _
|  |j¡S n| j| _
| j  ¡ }|  |j¡S d S )N)r#   r5   rj   r,   rr   rw   r   r;   rv   rT   r   rH   r0   r.   r/   )r   r2   r   r   r   rx   Ï  s    

zParser.parse_flow_mapping_valuec             C   s   | j | _|  | j ¡ j¡S )N)rv   r   rH   r#   r.   r/   )r   r   r   r   ry   Þ  s    z%Parser.parse_flow_mapping_empty_valueNc          	   C   s   t d d dd|||dS )N)TFr[   )rA   )r^   )r   ZmarkrA   r   r   r   rH   ã  s    zParser.process_empty_scalar)FF)F)F)N)(r   r   r   r9   r   r   r    Úpropertyr#   r$   r'   r(   r*   r   r1   r>   r<   rE   rC   r=   rT   rV   rX   rS   rb   re   r]   rc   rk   rl   r_   rp   rs   rt   ru   ra   rv   rx   ry   rH   r   r   r   r   r
   _   sL   
 3
 
&

c               @   s   e Zd ZdZdd„ ZdS )r   z?roundtrip is a safe loader, that wants to see the unmangled tagc             C   s&   |dkr|dkrt  | ||¡S || S )Nz!!)ZnullrK   ÚintÚfloatZbinaryZ	timestampZomapZpairsÚsetÚstrÚseqÚmap)r
   rX   )r   rO   rW   r   r   r   rX   ê  s    zRoundTripParser.transform_tagN)r   r   r   Ú__doc__rX   r   r   r   r   r   è  s   N)Z
__future__r   Zruamel_yaml.errorr   Zruamel_yaml.tokensZruamel_yaml.eventsZruamel_yaml.scannerr   r   r   Zruamel_yaml.compatr   r	   Ú__all__r   Úobjectr
   r   r   r   r   r   Ú<module>   s   L
     