a
    »ÏOc±¤  ã                   @   s‚  d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d	d
lmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ d	dlmZ d	dlm Z  d	dlm!Z! d	dl"m#Z# d	dl"m$Z$ d	dl"m%Z% d	d l"m&Z& d	d!l"m'Z' d	d"l"m(Z( d	d#l"m)Z) d	d$l"m*Z* d	d%l"m+Z+ d	d&l"m,Z, d	d'l"m-Z- d	d(l"m.Z. d	d)l"m/Z/ d	d*l"m0Z0 d	d+l"m1Z1 d	d,l"m2Z2 d	d-l"m3Z3 d	d.l"m4Z4 d	d/l"m5Z5 d	d0l"m6Z6 d	d1l7m8Z8 d	d2l9m:Z: d	d3l;m<Z< d4Z=d5Z>d6Z?d7Z@d8ZAG d9d:„ d:ƒZBdS );é    )Úunicode_literalsN)ÚAny)Ú	Generator)ÚList)ÚOptional)ÚTuple)ÚUnioné   )Úchr)Údecode)ÚRFC_3339_LOOSE)Ú_escaped)Úparse_rfc3339)Ú	Container)ÚEmptyKeyError)ÚEmptyTableNameError)ÚInternalParserError)ÚInvalidCharInStringError)ÚInvalidControlChar)ÚInvalidDateError)ÚInvalidDateTimeError)ÚInvalidNumberError)ÚInvalidTimeError)ÚInvalidUnicodeValueError)Ú
ParseError)ÚUnexpectedCharError)ÚUnexpectedEofError)ÚAoT)ÚArray)ÚBool)ÚBoolType)ÚComment)ÚDate)ÚDateTime)ÚFloat)ÚInlineTable)ÚInteger)ÚItem)ÚKey)ÚKeyType)ÚNull)ÚString)Ú
StringType)ÚTable)ÚTime)ÚTrivia)Ú
Whitespace)ÚSource)ÚTOMLChar)ÚTOMLDocumenté	   é
   é   é   é   c                   @   sf  e Zd ZdZdd„ Zedd„ ƒZedd„ ƒZedd	„ ƒZed
d„ ƒZ	dd„ Z
dTdd„ZdUdd„ZdVdd„Zdd„ Zdd„ Zefdd„Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ ZdWd*d+„Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Z d<d=„ Z!d>d?„ Z"d@dA„ Z#dBdC„ Z$dDdE„ Z%dFdG„ Z&dHdI„ Z'dXdJdK„Z(dLdM„ Z)dNdO„ Z*dPdQ„ Z+dRdS„ Z,dS )YÚParserz$
    Parser for TOML documents.
    c                 C   s   t t|ƒƒ| _g | _d S ©N)r1   r   Ú_srcÚ
_aot_stack)ÚselfÚstring© r?   úE/var/www/html/gsl.tools/lib/python3.9/site-packages/tomlkit/parser.pyÚ__init__F   s    zParser.__init__c                 C   s   | j jS r:   )r;   Ústate©r=   r?   r?   r@   Ú_stateL   s    zParser._statec                 C   s   | j jS r:   )r;   ÚidxrC   r?   r?   r@   Ú_idxP   s    zParser._idxc                 C   s   | j jS r:   )r;   ÚcurrentrC   r?   r?   r@   Ú_currentT   s    zParser._currentc                 C   s   | j jS r:   )r;   ÚmarkerrC   r?   r?   r@   Ú_markerX   s    zParser._markerc                 C   s
   | j  ¡ S )z=
        Extracts the value between marker and index
        )r;   ÚextractrC   r?   r?   r@   rK   \   s    zParser.extractNc                 C   s   | j j|d�S )zŒ
        Increments the parser if the end of the input has not been reached.
        Returns whether or not it was able to advance.
        ©Ú	exception)r;   Úinc)r=   rM   r?   r?   r@   rN   b   s    z
Parser.incc                 C   s   | j j||d�S )zm
        Increments the parser by n characters
        if the end of the input has not been reached.
        )ÚnrM   )r;   Úinc_n)r=   rO   rM   r?   r?   r@   rP   i   s    zParser.inc_nr   éÿÿÿÿc                 C   s   | j j|||d�S )zD
        Consume chars until min/max is satisfied is valid.
        )ÚcharsÚminÚmax)r;   Úconsume)r=   rR   rS   rT   r?   r?   r@   rU   p   s    zParser.consumec                 C   s
   | j  ¡ S )zN
        Returns True if the parser has reached the end of the input.
        )r;   ÚendrC   r?   r?   r@   rV   v   s    z
Parser.endc                 C   s   | j  ¡  dS )zA
        Sets the marker to the index's current position
        N)r;   ÚmarkrC   r?   r?   r@   rW   |   s    zParser.markc                 G   s   | j j|g|¢R Ž S )zJ
        Creates a generic "parse error" at the current position.
        )r;   Úparse_error)r=   rM   Úargsr?   r?   r@   rX   ‚   s    zParser.parse_errorc                 C   sÄ   t dƒ}|  ¡ st| jdkrqt|  ¡ }|s*qt|\}}|d urR| ¡ rR|  |||¡ n|  ||¡sj| ||¡ |  ¡  q|  ¡ s¶|  	¡ \}}t
|tƒr¨| ¡ r¨|  ||j¡}| ||¡ qt| d¡ |S )NTú[F)r3   rV   rH   Ú_parse_itemÚ	is_dottedÚ_handle_dotted_keyÚ	_merge_wsÚappendrW   Ú_parse_tableÚ
isinstancer-   Zis_aot_elementÚ
_parse_aotÚkeyZparsing)r=   ÚbodyÚitemrc   Úvaluer?   r?   r@   Úparseˆ   s(    


zParser.parsec                 C   sn   |  ¡ }|sdS t|tƒr$t|tƒs(dS | jt|jƒt|jƒ  }|jd d t| j|| j… ƒf|jd< dS )z°
        Merges the given Item with the last one currently in the given Container if
        both are whitespace items.

        Returns True if the items were merged.
        FrQ   r   T)Z	last_itemra   r0   rF   ÚlenÚsrd   r;   )r=   re   Ú	containerÚlastÚstartr?   r?   r@   r^   ¬   s    þ
zParser._merge_wsc                 C   s<   t |  |¡ƒ}t |  |¡ƒ}||kr(dS ||dt|ƒ… kS )zŒ
        Returns whether a key is strictly a child of another key.
        AoT siblings are not considered children of one another.
        FN)ÚtupleÚ_split_table_namerh   )r=   ÚparentÚchildZparent_partsÚchild_partsr?   r?   r@   Ú	_is_childÂ   s
    zParser._is_childc                 c   sd  d}d}t j}d}|D �]&}t|ƒ}|dkrr|r:||7 }q|sF|  ¡ ‚t| ¡ |d|d�V  |d7 }d}t j}qq|dv �r|rÆ|t jkr’|dks¤|t jkr®|d	kr®||7 }q||jkrÀ|  ¡ ‚d}q| ¡ rêt|d
 ƒ 	¡ rê|sê|  ¡ ‚d}|d	krüt jnt j}qq|�s| 
¡ �r ||7 }q| 	¡ �r6||7 }qq|  ¡ ‚q| ¡ �r`t| ¡ |d|d�V  d S )NFÚ r   Ú.)ÚtÚsepÚoriginalr	   >   ú'ú"ry   rx   rQ   T)r)   ÚBarer2   rX   r(   ÚstripÚLiteralZBasicrf   Ú	is_spacesÚis_bare_key_char)r=   ÚnameZin_namerG   ru   ÚpartsÚcr?   r?   r@   rn   Ï   sd    

ÿþýü
ÿþý



zParser._split_table_namec                 C   s   |   ¡  | j�Ø}| j}|dkrD|  ¡  dt|  ¡ ƒfW  d  ƒ S |dv rt|  ¡ sÖdt|  ¡ ƒfW  d  ƒ S q|dkr¶|  ¡ }|  ¡ \}}}dtt||||ƒƒfW  d  ƒ S |dkrÎW d  ƒ dS d|_	qØqW d  ƒ n1 sì0    Y  |  
d¡S )zw
        Attempts to parse the next item and returns it, along with its key
        if the item is value-like.
        Ú
Nú 	ú#rZ   T)rW   rD   rH   rN   r0   rK   Ú_parse_comment_trailr!   r/   ÚrestoreÚ_parse_key_value)r=   rB   r�   ÚindentÚcwsÚcommentÚtrailr?   r?   r@   r[     s$     $"zParser._parse_itemc                 C   sF  |   ¡ rdS d}d}|  ¡  | j}|dkr.qÚn |dkr°|  ¡ }|  ¡  |  ¡  |   ¡ sœ| j ¡ sœt| jƒ}|tks‚|tkr�|t	kr�|  
t|d¡‚|  ¡ sNqœqN|  ¡ }|  ¡  qÚn|dv rÂ|  ¡  n|  
t|¡‚|   ¡ rqÚq| j ¡ rî|  ¡ rîqÚ| jdk�r|  ¡  | jdk�r|  ¡  d}| j| jk�s4| j ¡ �r<|  ¡ }|||fS )z‹
        Returns (comment_ws, comment, trail)
        If there is no comment, comment_ws and comment will
        simply be empty.
        )rs   rs   rs   rs   r‚   r„   Úcommentsrƒ   ú)rV   rW   rH   rK   rN   Zis_nlÚordÚCHR_DELÚCTRL_CHAR_LIMITÚCTRL_IrX   r   r   r}   rF   rJ   Úis_ws)r=   rŠ   Ú
comment_wsr�   Úcoder‹   r?   r?   r@   r…   4  sH    

zParser._parse_comment_trailFc           
      C   sè   |   ¡  | j ¡ r|  ¡ rq|  ¡ }|  ¡ }|   ¡  | jdk}| j ¡ rr|  ¡ rr| jdkr>|rl|  td¡‚q>d}q>|j	s„|  ¡ |_	n| j	|  ¡ 7  _	|  
¡ }|rÐ|  ¡ \}}}|j}	|	jsÂ||	_||	_||	_nd|j_||j_||fS )Nú=Trs   )rW   rH   r}   rN   rK   Ú
_parse_keyZ	is_kv_seprX   r   rv   Ú_parse_valuer…   Útriviar“   rŠ   r‹   rˆ   )
r=   Úparse_commentrˆ   rc   Zfound_equalsÚvalr‰   rŠ   r‹   Úmetar?   r?   r@   r‡   p  s6    

zParser._parse_key_valuec                 C   s   | j dv r|  ¡ S |  ¡ S dS )zz
        Parses a Key at the current position;
        WS before the key must be exhausted first at the callsite.
        z"'N)rH   Ú_parse_quoted_keyÚ_parse_bare_keyrC   r?   r?   r@   r–   ž  s    
zParser._parse_keyc                 C   s®   | j }d}d}tD ]}|j|kr|} q*q|du r:tdƒ‚|  ¡  |  ¡  | j |kr^|  ¡ r^qJ|  ¡ }| j dkr˜|  ¡  d}|d|  ¡  ¡  7 }tj	}n|  ¡  t
||d|ƒS )zJ
        Parses a key enclosed in either single or double quotes.
        NFz+Should not have entered _parse_quoted_key()rt   Trs   )rH   r)   rf   ÚRuntimeErrorrN   rW   rK   r–   Ú	as_stringrz   r(   )r=   Zquote_styleÚkey_typeÚdottedru   rc   r?   r?   r@   rœ   ¨  s*    

zParser._parse_quoted_keyc                 C   s²   d}d}|   ¡  | j ¡ s$| j ¡ r.|  ¡ r.q|  ¡ }| ¡ }|sN|  td¡‚d|v rh|  td 	|¡¡‚| jdkr |  ¡  d}|d|  
¡  ¡  7 }| ¡ }tj}t||d||d	�S )
z$
        Parses a bare key.
        NFzEmpty key foundú zInvalid key "{}"rt   Trs   )rw   )rW   rH   r~   r}   rN   rK   r{   rX   r   Úformatr–   rŸ   r)   rz   r(   )r=   r    r¡   rw   rc   r?   r?   r@   r�   É  s.    ÿÿþ
zParser._parse_bare_keyc           
      C   s¬  t |  | ¡ ¡ƒ}|d }d|_||v rØt|tƒsÈttdƒtƒ ddd�}|}t|dd … ƒD ]f\}}	|t	|ƒd krŠ|j
|	_
| |	|¡ q\d|	_| |	ttdƒtƒ d|t	|ƒd k d�¡ ||	 }q\|}| ||¡ d S ttdƒtƒ ddd�}t|tƒ�r| ||¡ n| ||¡ t|dd … ƒD ]‚\}}	|t	|ƒd k�rT|j
|	_
| |	|¡ nPd|	_|	|jv �rr|j|	 }n2| |	ttdƒtƒ d|t	|ƒd k d�¡ ||	 }�q$d S )Nr   TF)Úis_super_tabler	   é   )rm   rn   rŸ   Z_dottedra   r-   r   r/   Ú	enumeraterh   rv   r_   Ú
raw_appendrf   )
r=   rj   rc   rf   Únamesr   ÚtableZ_tableÚiÚ_namer?   r?   r@   r]   é  s\    
üþ

üþ
zParser._handle_dotted_keyc           
      C   sÞ  |   ¡  | j}tƒ }|tjjkr(|  ¡ S |tjjkr<|  ¡ S |t	j
jd krT|  ¡ S |t	jjd krl|  ¡ S |dkr||  ¡ S |dkrŒ|  ¡ S |dv s¢|  d¡dv rä| jdvr¶|  ¡ r¶q¢|  ¡ }|  ||¡}|durÖ|S |  t¡‚�nö|tjv �rÎ| jdv�r
|  ¡ �r
� qð|  ¡ }t |¡}|�r¨| d	¡�rŽ| d
¡�rŽz4t|ƒ}t|j|j|j|j |j!|j"|j#|j$||ƒ
W S  t%�yŒ   |  t&¡‚Y n0 | d	¡�rTzšt|ƒ}t'|j|j|j||ƒ}|   ¡  | jdv�rÜ|  ¡ �rÜ�qÂ|  ¡ }| (¡ �sú||_)|W S t|| ƒ}t|j|j|j|j |j!|j"|j#|j$||| ƒ
W S  t%�yR   |  t*¡‚Y n0 | d
¡�r¨z(t|ƒ}	t+|	j |	j!|	j"|	j#|	j$||ƒW S  t%�y¦   |  t,¡‚Y n0 |  ||¡}|du�rÂ|S |  t¡‚n|  t-|¡‚dS )zD
        Attempts to parse a value at the current position.
        r   rZ   Ú{z+-é   >   z+nanÚinfz+infÚnanz-nanz-infú 	
#,]}Nr	   é   z	
#,]}).rW   rH   r/   r,   ÚSLBrf   Ú_parse_basic_stringÚSLLÚ_parse_literal_stringr    ÚTRUEÚ_parse_trueÚFALSEÚ_parse_falseÚ_parse_arrayÚ_parse_inline_tableÚ_peekrN   rK   Ú_parse_numberrX   r   r>   Údigitsr   ÚmatchÚgroupr   r#   ÚyearÚmonthÚdayÚhourÚminuteÚsecondÚmicrosecondÚtzinfoÚ
ValueErrorr   r"   r{   r“   r   r.   r   r   )
r=   r�   r˜   Úrawre   ÚmÚdtÚdateZtime_rawru   r?   r?   r@   r—   (  s¶    	
ö
öù	
zParser._parse_valuec                 C   s   |   tj¡S r:   )Ú_parse_boolr    r¶   rC   r?   r?   r@   r·   Ÿ  s    zParser._parse_truec                 C   s   |   tj¡S r:   )rÎ   r    r¸   rC   r?   r?   r@   r¹   ¢  s    zParser._parse_falsec                 C   sX   | j �> t|ƒ}|D ]}| j|ddd� qt|tƒ ƒW  d   ƒ S 1 sJ0    Y  d S )Nr	   )rS   rT   )rD   r    rU   r   r/   )r=   Ústyler�   r?   r?   r@   rÎ   ¥  s
    zParser._parse_boolc           
      C   sR  | j td� g }d }| j}|  tj¡ |  tj¡}| j|| j… }|rV| t	|ƒ¡ q| j
dkrˆ|  ¡ \}}}| tt||||ƒƒ¡ q|rœ| t	|ƒ¡ q|sÎz| |  ¡ ¡ d}W qW n tyÌ   Y n0 |rü| j
dkrü| j td� | t	dƒ¡ d}q| j
dk�r|   ¡  �q$|  t| j
¡‚qzt|tƒ ƒ}	W n t�yH   Y n0 |	S d S )NrL   r„   Tú,Fú])rN   r   rF   rU   r2   ÚSPACESÚNLr;   r_   r0   rH   r…   r!   r/   r—   r   rX   r   rÉ   )
r=   ÚelemsZ
prev_valuerW   Únewlinerˆ   r‰   rŠ   r‹   Úresr?   r?   r@   rº   °  sL    
zParser._parse_arrayc                 C   sB  | j td� tdƒ}d }| j}|  tj¡ | j|| j… }|rL| t	|ƒ¡ |s�| j
dkrf|   ¡  �q6|du s€|d u r²| j
dkr²|  t| j
¡‚n"| j
dks¤| j
dkr²|  t| j
¡‚|  d¡\}}| ¡ rØ|  |||¡ n| ||¡ | j}|  tj¡ | j|| j… }|�r| t	|ƒ¡ | j
dk}|r| j td� qt|tƒ ƒS )NrL   TÚ}FrÐ   )rN   r   r   rF   rU   r2   rÒ   r;   Úaddr0   rH   rX   r   r‡   r\   r]   r%   r/   )r=   rÔ   Ztrailing_commarW   rÊ   rc   rš   r?   r?   r@   r»   ê  sD    
ÿþý
zParser._parse_inline_tablec                 C   s8  d}|  d¡r"|d }|dd … }t|ƒdkrF|  d¡rF|  d¡sFd S |  d¡rX|rXd S d}d	}|  d
¡rtd}d}n&|  d¡rˆd}d}n|  d¡ršd}d}t d ||¡d|¡}d|v r¼d S | d¡rÊd S ztt|| |ƒ||| ƒW S  t�y2   zt	t
|| ƒ||| ƒW  Y S  t�y,   Y Y d S 0 Y n0 d S )Nrs   )ú+ú-r   r	   Ú0)z0.Ú0oÚ0xÚ0bZ0e)rÜ   rÝ   rÞ   z[0-9]r5   rÞ   z[01]r¥   rÜ   z[0-7]é   rÝ   z[0-9a-f]é   z(?i)(?<={})_(?={})Ú_rt   )Ú
startswithrh   ÚreÚsubr£   Úendswithr&   ÚintrÉ   r$   Úfloat)r=   rÊ   r˜   Úsignr¾   ÚbaseÚcleanr?   r?   r@   r½   "  sH    

ÿþý



zParser._parse_numberc                 C   s6   | j � |  tj¡W  d   ƒ S 1 s(0    Y  d S r:   )rD   Ú_parse_stringr,   r´   rC   r?   r?   r@   rµ   P  s    zParser._parse_literal_stringc                 C   s6   | j � |  tj¡W  d   ƒ S 1 s(0    Y  d S r:   )rD   rë   r,   r²   rC   r?   r?   r@   r³   T  s    zParser._parse_basic_stringc                 C   sÌ   |rP| j  ¡ rPd}| j  ¡ r6|| j 7 }| jtd� qqd|vrL|  t| j ¡‚dS | j tv rtt| j  }| jtd� |S | j dv rº|  | j dk¡\}}|d ur°|  t	|ƒd ¡ |S |  t
¡‚|  t| j ¡‚d S )Nrs   rL   r‚   ¾   ÚuÚUrî   r	   )rH   r’   rN   r   rX   r   r   Ú_peek_unicoderP   rh   r   )r=   Ú	multilineÚtmpr�   rí   Zuer?   r?   r@   Ú_parse_escaped_charX  s(    





zParser._parse_escaped_charc                 C   sv  | j |jkr|  td |¡¡‚| jtd� | j |jkrn|  ¡ rJ| j |jkrZt|ddtƒ ƒS | jtd� | 	¡ }|  
¡  d}| ¡ r˜| j dkr˜| jtd� d}t| j ƒ}| ¡ rÚ|sÚ|tksÊ|tkrÚ|tkrÚ|  t|d¡‚qœ| ¡ �r|�s|tk�s|tk�r|tttfv�r|  t|d¡‚qœ|�s
| j |jk�r
|  ¡ }d}| ¡ �ròd}| j |jk�rp|| j 7 }|  ¡  �qLt|ƒdk �rˆ||7 }qœt|ƒdk�r¦t|||tƒ ƒS t|ƒdk�rÂ|  t| j ¡‚||d d	… 7 }||d d	… 7 }t|||tƒ ƒS |  ¡  t|||tƒ ƒS | ¡ �r2|�r2||  | ¡ ¡7 }d}qœ| ¡ �rZ| j d
k�rZd}| jtd� qœ|| j 7 }| jtd� qœd S )Nz$Invalid character for string type {}rL   rs   r‚   FÚstringsé   é   éýÿÿÿú\T)rH   ÚunitrX   r   r£   rN   r   r+   r/   ZtogglerW   Zis_multilinerŽ   Zis_singleliner�   r�   r‘   r   ÚCTRL_JÚCTRL_MrK   rh   r   Zis_basicrò   )r=   Údelimrf   Úescapedr”   rw   Úcloser?   r?   r@   rë   …  s†    þ
ÿþýýýÿþüûú	


zParser._parse_stringc                 C   sÚ  | j dkr|  td¡‚|  ¡ }|  ¡  |  ¡ r8|  t¡‚d}| j dkr\|  ¡ sX|  t¡‚d}|  ¡  | j  ¡ rx|  ¡ rxqd|  ¡ }| j t	j
jt	jjfv �r| j t	j
jkr¬t	j
nt	j}|  |¡}dj|j|d�}|  ¡  | j dkrú|  ¡ rú|  ¡ rÔ|  t¡‚qÔ|  ¡ }||7 }n>|  ¡  | j dk�rB|  ¡ �rB|  ¡ �r|  t¡‚�q|  ¡ }|| }| ¡ �sf|  t¡‚t|dd	�}	t|  |¡ƒ}
td
d„ |
D ƒƒ�r¦|  td |¡¡‚d}|�rÀt|  |¡ƒ}ntƒ }t|
ƒt|ƒd k�ràd}|
t|ƒd… }
tdƒ}|  ¡  |�r|  ¡  |  ¡ \}}}tƒ }t|t||||ƒ|||d�}t|
ƒdk�rŠ|�r˜ttdƒt||||ƒ|�oz|
d j| jv d|
d jd�}|}|
d }	t|
dd… ƒD ]à\}}||v �rÂ|| }npttdƒt||||ƒ|�oò|t|
dd… ƒd k|t|
dd… ƒd k |j|t|
dd… ƒd k�r*|ndd�}|�rn|t|
dd… ƒd k�rn| |t |g|j!dd�¡ n| ||¡ |}|j}�q¦n|
�r˜|
d }	|  ¡ �s˜|  "¡ }|�rø|\}}|  #||¡�s”|du�rê| $¡ �rê|  %|||¡ n| ||¡ nœ| j dk�rˆ|  &¡ \}}|  '||¡�r˜|  (||¡\}}| ||¡ |  ¡ �s˜|  &¡ \}}|  '||¡�sb�q˜|  (||¡\}}| ||¡ �q:�q˜n|  td¡‚�q˜t)|tƒ�rÒ|}|�rÒ| j�rÆ|| jd k�rÒ|  *||¡}|	|fS )z)
        Parses a table element.
        rZ   z/_parse_table() called on non-bracket character.FTz{delimiter}{name}{delimiter})Ú	delimiterr   rÑ   rs   )rv   c                 s   s$   | ]}d |j  ¡ v o| ¡ V  qdS )r¢   N)rc   r{   Zis_bare)Ú.0Úpartr?   r?   r@   Ú	<genexpr>5  ó    z&Parser._parse_table.<locals>.<genexpr>zInvalid table name "{}"r	   N)r   Údisplay_namer   )r¤   r   )r¤   r   r  )r   Úparsedz7_parse_item() returned None on a non-bracket character.rQ   )+rH   rX   r   rK   rN   rV   r   rW   r}   r,   r´   rf   r²   rë   r£   r{   r   r(   rm   rn   Úanyr   rh   r   r…   r*   r-   r/   rc   r<   r¦   r§   r   r   r[   r^   r\   r]   Ú_peek_tablerr   r`   ra   rb   )r=   Úparent_namero   rˆ   Úis_aotZ	ws_prefixrþ   r   Z	ws_suffixrc   Z
name_partsZmissing_tableZparent_name_partsÚvaluesr‰   rŠ   r‹   Úresultr©   rª   r«   rp   re   Ú_keyÚis_aot_nextÚ	name_nextZkey_nextZ
table_nextrá   r?   r?   r@   r`   ð  sü    
ÿ


ÿý
ÿ





ûû

 ú	 ÿ

þzParser._parse_tablec                 C   sš   d}| j ddd��t | jdkr*|  td¡‚|  ¡  d}| jdkrL|  ¡  d}|  ¡  | jdkrp|  ¡ rp|  ¡ }qT||fW  d  ƒ S 1 sŒ0    Y  dS )	zÜ
        Peeks ahead non-intrusively by cloning then restoring the
        initial state of the parser.

        Returns the name of the table about to be parsed,
        as well as whether it is part of an AoT.
        rs   T©Zsave_markerr†   rZ   z._peek_table() entered on non-bracket characterFrÑ   N)rD   rH   rX   r   rN   rW   rK   )r=   Z
table_namer  r?   r?   r@   r  ­  s     	
þ

zParser._peek_tablec                 C   sf   |g}| j  |¡ |  ¡ sP|  ¡ \}}|rP||krP|  |¡\}}| |¡ qqPq| j  ¡  t|dd�S )zg
        Parses all siblings of the provided table first and bundles them into
        an AoT.
        T)r  )r<   r_   rV   r  r`   Úpopr   )r=   ÚfirstZ
name_firstÚpayloadr  r  rá   r©   r?   r?   r@   rb   Ì  s    
zParser._parse_aotc                 C   sh   | j dd��H d}t|ƒD ]&}| jdvr<|| j7 }|  ¡  q qBq|W  d  ƒ S 1 sZ0    Y  dS )zk
        Peeks ahead n characters.

        n is the max number of characters that will be peeked.
        T)r†   rs   r°   N)rD   ÚrangerH   rN   )r=   rO   Úbufrá   r?   r?   r@   r¼   ß  s    

zParser._peekc              
   C   sæ   | j ddd��Ä | jdvr&|  td¡‚|  ¡  |  ¡  |r@d}nd}|  |¡sXd\}}nd|  ¡ }|d  ¡ d	krŽ|d
  	d¡rŽW d  ƒ dS zt
t|dƒƒ}W n ttfyº   d}Y n0 ||fW  d  ƒ S 1 sØ0    Y  dS )z²
        Peeks ahead non-intrusively by cloning then restoring the
        initial state of the parser.

        Returns the unicode value is it's a valid one else None.
        Tr  rì   z,_peek_unicode() entered on non-unicode valuerß   r­   )NNr   Údr	   Ú01234567Nrà   )rD   rH   rX   r   rN   rW   rP   rK   Úlowerr{   r
   ræ   rÉ   ÚOverflowError)r=   Zis_longrR   rf   Z	extractedr?   r?   r@   rï   ñ  s(    

ÿ


zParser._peek_unicode)N)N)r   rQ   )F)NN)-Ú__name__Ú
__module__Ú__qualname__Ú__doc__rA   ÚpropertyrD   rF   rH   rJ   rK   rN   rP   rU   rV   rW   r   rX   rg   r^   rr   rn   r[   r…   r‡   r–   rœ   r�   r]   r—   r·   r¹   rÎ   rº   r»   r½   rµ   r³   rò   rë   r`   r  rb   r¼   rï   r?   r?   r?   r@   r9   A   s\   






$A$<
.
! ?w:8.-l ÿ
 >r9   )CÚ
__future__r   rã   r>   Útypingr   r   r   r   r   r   Ú_compatr
   r   Ú_utilsr   r   r   rj   r   Ú
exceptionsr   r   r   r   r   r   r   r   r   r   r   r   r   Úitemsr   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   Úsourcer1   Z	toml_charr2   Ztoml_documentr3   r‘   rù   rú   r�   r�   r9   r?   r?   r?   r@   Ú<module>   sp   