U
    ïûeH~  ã                   @   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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ÚnprintfÚParserÚRoundTripParserÚParserErrorc                   @   s   e Zd ZdS )r   N)Ú__name__Ú
__module__Ú__qualname__© r   r   ú1lib/python3.8/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   ú!!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__e   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   l   s    zParser.reset_parserc                 C   s   |   ¡  d S r   )r   r#   r   r   r   Údisposev   s    zParser.disposec                 C   s   t | jdƒr| jjS | jjS ©NÚtyp)Úhasattrr   ÚscannerZ_scannerr#   r   r   r   r(   z   s    zParser.scannerc                 C   s   t | jdƒr| jjS | jjS r%   )r'   r   ÚresolverZ	_resolverr#   r   r   r   r)      s    zParser.resolverc                 G   sL   | j d kr| jr|  ¡ | _ | j d k	rH|s,dS |D ]}t| j |ƒr0 dS q0d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 r   ©r   r"   r#   r   r   r   Ú
peek_event–   s    

zParser.peek_eventc                 C   s*   | j d kr| jr|  ¡ | _ | j }d | _ |S 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_markr1   Ú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   r4   r5   ÚDocumentStartEventr   ÚappendÚparse_document_endÚparse_block_noder"   Úparse_document_start)r   r9   r5   r6   r:   r   r   r   r7   ¹   s    

z$Parser.parse_implicit_document_startc                 C   sä   | j  t¡r| j  ¡  q | j  t¡s¨| j  ¡ }|j}|  ¡ \}}| j  t¡snt	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)r<   ÚversionÚtags©Úcomment)r(   r=   ÚDocumentEndTokenr2   r@   r4   r5   Úprocess_directivesr?   r   Úidr6   rB   r   rC   rD   Úparse_document_contentr"   ZStreamEndEventrJ   ÚAssertionErrorr    )r   r9   r5   rG   rH   r6   r:   r   r   r   rF   Ë   s<    

ü
    ÿ



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 )NFTr;   )é   rP   )r(   r4   r5   r=   rK   r2   r6   ZDocumentEndEventr)   Zprocessing_versionrF   r"   r7   )r   r9   r5   r6   r<   r:   r   r   r   rD   ì   s    



zParser.parse_document_endc                 C   s@   | j  tttt¡r4|  | j  ¡ j¡}| j	 
¡ | _|S |  ¡ S d S r   )r(   r=   r>   r?   rK   r@   Úprocess_empty_scalarr4   r5   r   Úpopr"   rE   )r   r:   r   r   r   rN      s       ÿzParser.parse_document_contentc                 C   s  d | _ i | _| j t¡r´| j ¡ }|jdkrr| j d k	rFtd d d|jƒ‚|j	\}}|dkrhtd d d|jƒ‚|j	| _ q|jdkr|j	\}}|| jkr¨td d dt
|ƒ |jƒ‚|| j|< qt| jƒrÐ| j | j ¡ f}n
| j d f}| jD ]}|| jkrà| j| | j|< qà|S )NZYAMLzfound duplicate YAML directiverP   z:found incompatible YAML document (version 1.* is required)ZTAGzduplicate tag handle %r)r   r   r(   r=   r>   r2   Únamer   r5   r/   r   ÚboolÚcopyrA   )r   r9   ÚmajorÚminorÚhandleÚprefixr/   Úkeyr   r   r   rL     sL    


   ÿ
ü



  
 ÿ



zParser.process_directivesc                 C   s   | j ddS )NT)Úblock©Ú
parse_noder#   r   r   r   rE   ?  s    zParser.parse_block_nodec                 C   s   |   ¡ S r   r\   r#   r   r   r   Úparse_flow_nodeC  s    zParser.parse_flow_nodec                 C   s   | j dddS )NT)r[   Úindentless_sequencer\   r#   r   r   r   Ú'parse_block_node_or_indentless_sequenceG  s    z.Parser.parse_block_node_or_indentless_sequencec                 C   s   | j | | S r   )r   ©r   rX   Úsuffixr   r   r   Útransform_tagK  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| _
np| j  t¡rþ| j  ¡ }| j  ¡ j}t|||||d|jd}| j| _
n(|rn| j  t¡rn| j  ¡ j}| j  ¡ }|j}|d ksF|d d krN|  ¡ }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_stylerJ   ©TF)FT)FF)ÚstylerJ   TrP   Ú r[   Zflowzwhile parsing a %s nodez'expected the node content, but found %r)%r(   r=   Z
AliasTokenr2   Z
AliasEventr/   r5   r6   r   rR   r"   ZAnchorTokenZTagTokenr   r   r   rc   r4   ÚBlockEntryTokenrJ   ZSequenceStartEventÚparse_indentless_sequence_entryZScalarTokenZplainÚScalarEventrf   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_keyrM   )r   r[   r_   r9   r:   ZanchorÚtagr5   r6   Ztag_markrX   rb   ZimplicitrJ   ZptZnoder   r   r   r]   O  s,   









ü


      ÿ

ø

ù	
ù	
      ÿ
      ÿ

üzParser.parse_nodec                 C   s    | j  ¡ }| j |j¡ |  ¡ S r   )r(   r2   r    rC   r5   Úparse_block_sequence_entry©r   r9   r   r   r   rn   ì  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éÿÿÿÿú"expected <block end>, but found %rrI   )r(   r=   rh   r2   r3   r4   ÚBlockEndTokenr   rC   rq   rE   r"   rQ   r6   r   r    rM   r5   ÚSequenceEndEventrJ   rR   r8   r   r   r   rq   ô  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 )NrI   )r(   r=   rh   r2   r3   r4   ÚKeyTokenÚ
ValueTokenru   r   rC   ri   rE   r"   rQ   r6   rv   r5   rJ   rR   r8   r   r   r   ri     s"    
   ÿ
z&Parser.parse_indentless_sequence_entryc                 C   s    | j  ¡ }| j |j¡ |  ¡ S r   )r(   r2   r    rC   r5   Úparse_block_mapping_keyrr   r   r   r   ro   +  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 mappingrs   rt   rI   )r(   r=   rw   r2   r3   r4   rx   ru   r   rC   Úparse_block_mapping_valuer`   r"   rQ   r6   r   r    rM   r5   ÚMappingEndEventrJ   rR   r8   r   r   r   ry   1  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}|r¾d |d g|_|d d g}| j|j|dS n| j
| _| j  ¡ }|  |j¡S d S )NT)ÚemptyrP   r   rI   )r(   r=   rx   r2   r3   r4   rw   ru   r   rC   ry   r`   r"   rJ   Z_commentrQ   r6   r5   )r   r9   rJ   r   r   r   rz   K  s*    


z Parser.parse_block_mapping_valuec                 C   s$   | j  ¡ }| j |j¡ | jddS ©NT)Úfirst)r(   r2   r    rC   r5   Úparse_flow_sequence_entryrr   r   r   r   rk   s  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 sequencers   zexpected ',' or ']', but got %rT)rd   rI   )r(   r=   ÚFlowSequenceEndTokenÚFlowEntryTokenr2   r4   r   r    rM   r5   rw   rl   r6   Ú%parse_flow_sequence_entry_mapping_keyr"   r   rC   r   r^   rv   rJ   rR   ©r   r~   r9   r:   r   r   r   r   y  s>    
ü
     ÿ

z Parser.parse_flow_sequence_entryc                 C   sH   | j  ¡ }| j  ttt¡s0| j | j¡ |  	¡ S | j| _
|  |j¡S d S r   )r(   r2   r=   rx   r   r€   r   rC   Ú'parse_flow_sequence_entry_mapping_valuer^   r"   rQ   r6   rr   r   r   r   r‚   ˜  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 r   )r(   r=   rx   r2   r   r€   r   rC   Ú%parse_flow_sequence_entry_mapping_endr^   r"   rQ   r6   r4   r5   rr   r   r   r   r„   ¢  s    

z.Parser.parse_flow_sequence_entry_mapping_valuec                 C   s    | j | _| j ¡ }t|j|jƒS r   )r   r"   r(   r4   r{   r5   rr   r   r   r   r…   ±  s    
z,Parser.parse_flow_sequence_entry_mapping_endc                 C   s$   | j  ¡ }| j |j¡ | jddS r}   )r(   r2   r    rC   r5   Úparse_flow_mapping_keyrr   r   r   r   rm   ½  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 mappingrs   zexpected ',' or '}', but got %rrI   )r(   r=   ÚFlowMappingEndTokenr   r2   r4   r   r    rM   r5   rw   rx   r   rC   Úparse_flow_mapping_valuer^   r"   rQ   r6   Úparse_flow_mapping_empty_valuer{   rJ   rR   rƒ   r   r   r   r†   Ã  s<    
ü
  ÿ

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 r   )r(   r=   rx   r2   r   r‡   r   rC   r†   r^   r"   rQ   r6   r4   r5   rr   r   r   r   rˆ   ä  s    

zParser.parse_flow_mapping_valuec                 C   s   | j | _|  | j ¡ j¡S r   )r†   r"   rQ   r(   r4   r5   r#   r   r   r   r‰   ó  s    z%Parser.parse_flow_mapping_empty_valueNc              	   C   s   t d d dd|||dS )Nre   rg   rI   )rj   )r   ZmarkrJ   r   r   r   rQ   ø  s    zParser.process_empty_scalar)FF)F)F)N)(r   r   r   rA   r   r   r$   Úpropertyr(   r)   r,   r.   r0   r!   r7   rF   rD   rN   rL   rE   r^   r`   rc   r]   rn   rq   ri   ro   ry   rz   rk   r   r‚   r„   r…   rm   r†   rˆ   r‰   rQ   r   r   r   r   r   _   sN   



!4
  (


!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 )Nr   )ZnullrT   ÚintÚfloatZbinaryZ	timestampZomapZpairsÚsetÚstrÚseqÚmap)r   rc   ra   r   r   r   rc      s    zRoundTripParser.transform_tagN)r   r   r   Ú__doc__rc   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	   r
   ZAnyZDictZOptionalZListÚ__all__r   Úobjectr   r   r   r   r   r   Ú<module>   s   L
     #