B
    idB                 @   s  d dl Z d dlZd dlmZmZmZmZmZmZm	Z	m
Z
 d/eeee dddZedZedejdZed	Zed
ZedZedZedZedZedZedZedZedZedZedZedZG dd deZG dd deZG dd dZ G dd de!Z"G dd dZ#ee eed d!d"Z$e#ee d#d$d%Z%e#ed#d&d'Z&e#ed#d(d)Z'e#ed#d*d+Z(ee ee d,d-d.Z)dS )0    N)IOIteratorMatch
NamedTupleOptionalPatternSequenceTuple)stringextra_flagsreturnc             C   s   t | t j|B S )N)recompileUNICODE)r
   r    r   1/tmp/pip-unpacked-wheel-mbm0dzz5/dotenv/parser.py
make_regex   s    r   z(\r\n|\n|\r)z\s*)r   z
[^\S\r\n]*z(?:export[^\S\r\n]+)?z	'([^']+)'z([^=\#\s]+)z(=[^\S\r\n]*)z'((?:\\'|[^'])*)'z"((?:\\"|[^"])*)"z
([^\r\n]*)z(?:[^\S\r\n]*#[^\r\n]*)?z[^\S\r\n]*(?:\r\n|\n|\r|$)z[^\r\n]*(?:\r|\n|\r\n)?z\\[\\'\"abfnrtv]z\\[\\']c               @   s   e Zd ZU eed< eed< dS )Originalr
   lineN)__name__
__module____qualname__str__annotations__intr   r   r   r   r      s   
r   c               @   s6   e Zd ZU ee ed< ee ed< eed< eed< dS )BindingkeyvalueoriginalerrorN)r   r   r   r   r   r   r   boolr   r   r   r   r   !   s   
r   c               @   sP   e Zd ZeeddddZed dddZd ddd	d
ZeddddZ	dS )PositionN)charsr   r   c             C   s   || _ || _d S )N)r"   r   )selfr"   r   r   r   r   __init__)   s    zPosition.__init__)r   c             C   s   | dddS )Nr      )r"   r   r   )clsr   r   r   start-   s    zPosition.start)otherr   c             C   s   |j | _ |j| _d S )N)r"   r   )r#   r(   r   r   r   set1   s    zPosition.set)r
   r   c             C   s0   |  j t|7  _ |  jttt|7  _d S )N)r"   lenr   r   findall_newline)r#   r
   r   r   r   advance5   s    zPosition.advance)
r   r   r   r   r$   classmethodr'   r)   r   r-   r   r   r   r   r!   (   s
   r!   c               @   s   e Zd ZdS )ErrorN)r   r   r   r   r   r   r   r/   :   s   r/   c               @   s   e Zd Zee ddddZedddZdddd	Ze	dd
dZ
eedddZeedddZee ee dddZdS )ReaderN)streamr   c             C   s"   |  | _t | _t | _d S )N)readr
   r!   r'   positionmark)r#   r1   r   r   r   r$   ?   s    

zReader.__init__)r   c             C   s   | j jt| jk S )N)r3   r"   r*   r
   )r#   r   r   r   has_nextD   s    zReader.has_nextc             C   s   | j | j d S )N)r4   r)   r3   )r#   r   r   r   set_markG   s    zReader.set_markc             C   s"   t | j| jj| jj | jjdS )N)r
   r   )r   r
   r4   r"   r3   r   )r#   r   r   r   
get_markedJ   s    zReader.get_marked)countr   c             C   s   | j | jj| jj|  S )N)r
   r3   r"   )r#   r8   r   r   r   peekP   s    zReader.peekc             C   s>   | j | jj| jj|  }t||k r.td| j| |S )Nzread: End of string)r
   r3   r"   r*   r/   r-   )r#   r8   resultr   r   r   r2   S   s
    zReader.read)regexr   c             C   sH   | | j| jj}|d kr"td| j| j| |   | S )Nzread_regex: Pattern not found)	matchr
   r3   r"   r/   r-   r'   endgroups)r#   r;   r<   r   r   r   
read_regexZ   s
    zReader.read_regex)r   r   r   r   r   r$   r    r5   r6   r   r7   r   r9   r2   r   r   r?   r   r   r   r   r0   >   s   r0   )r;   r
   r   c             C   s    t t tddd}| ||S )N)r<   r   c             S   s   t | ddS )Nr   zunicode-escape)codecsdecodegroup)r<   r   r   r   decode_matchc   s    z$decode_escapes.<locals>.decode_match)r   r   sub)r;   r
   rC   r   r   r   decode_escapesb   s    rE   )readerr   c             C   s<   |  d}|dkrd S |dkr,| t\}n| t\}|S )Nr%   #')r9   r?   _single_quoted_key_unquoted_key)rF   charr   r   r   r   	parse_keyi   s    
rL   c             C   s   |  t\}tdd| S )Nz\s+#.* )r?   _unquoted_valuer   rD   rstrip)rF   partr   r   r   parse_unquoted_valuet   s    rQ   c             C   s^   |  d}|dkr(| t\}tt|S |dkrF| t\}tt|S |dkrRdS t| S d S )Nr%   rH   ")rM   
rM   )r9   r?   _single_quoted_valuerE   _single_quote_escapes_double_quoted_value_double_quote_escapesrQ   )rF   rK   r   r   r   r   parse_valuey   s    


rY   c          	   C   s   |    y| t |  s0td d |  ddS | t t| }| t | 	ddkrn| t
 t| }nd }| t | t t|||  ddS  tk
r   | t td d |  ddS X d S )NF)r   r   r   r   r%   =T)r6   r?   _multiline_whitespacer5   r   r7   _exportrL   _whitespacer9   _equal_signrY   _comment_end_of_liner/   _rest_of_line)rF   r   r   r   r   r   parse_binding   s<    







rb   )r1   r   c             c   s$   t | }x| rt|V  q
W d S )N)r0   r5   rb   )r1   rF   r   r   r   parse_stream   s    
rc   )r   )*r@   r   typingr   r   r   r   r   r   r   r	   r   r   r   r,   	MULTILINEr[   r]   r\   rI   rJ   r^   rU   rW   rN   r_   r`   ra   rX   rV   r   r   r!   	Exceptionr/   r0   rE   rL   rQ   rY   rb   rc   r   r   r   r   <module>   s:   ($%