B
    ž†\  ã               @   st   d dl mZ ddlmZmZmZmZmZmZm	Z	m
Z
mZmZ ddlmZ G dd„ deƒZdd„ ZG d	d
„ d
eƒZdS )é    )Úabsolute_importé   )
ÚAltÚSeqÚRepÚRep1ÚOptÚAnyÚAnyButÚBolÚEolÚChar)Ú	PlexErrorc               @   s   e Zd ZdS )ÚRegexpSyntaxErrorN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú6lib/python3.7/site-packages/Cython/Plex/Traditional.pyr      s   r   c             C   s   t | ƒ ¡ S )zk
    Convert traditional string representation of regular expression |s|
    into Plex representation.
    )ÚREParserÚparse_re)Úsr   r   r   Úre   s    r   c               @   sl   e Z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S )r   c             C   s   || _ d| _d| _|  ¡  d S )Néÿÿÿÿr   )r   ÚiÚendÚnext)Úselfr   r   r   r   Ú__init__   s    zREParser.__init__c             C   s&   |   ¡ }| js"|  dt| jƒ ¡ |S )NzUnexpected %s)Ú	parse_altr   ÚerrorÚreprÚc)r   r   r   r   r   r   "   s    zREParser.parse_rec             C   sJ   |   ¡ }| jdkrF|g}x$| jdkr<|  ¡  | |   ¡ ¡ qW t|Ž }|S )z#Parse a set of alternative regexps.ú|)Ú	parse_seqr"   r   Úappendr   )r   r   Úre_listr   r   r   r   (   s    
zREParser.parse_altc             C   s0   g }x"| j s&| jdkr&| |  ¡ ¡ qW t|Ž S )zParse a sequence of regexps.z|))r   r"   r%   Ú	parse_modr   )r   r&   r   r   r   r$   3   s    zREParser.parse_seqc             C   sZ   |   ¡ }xL| jsT| jdkrT| jdkr.t|ƒ}n| jdkrBt|ƒ}nt|ƒ}|  ¡  q
W |S )z7Parse a primitive regexp followed by *, +, ? modifiers.z*+?Ú*ú+)Ú
parse_primr   r"   r   r   r   r   )r   r   r   r   r   r'   :   s    



zREParser.parse_modc             C   sŠ   |   ¡ }|dkrtdƒ}nl|dkr(t}n^|dkr6t}nP|dkrR|  ¡ }|  d¡ n4|dkrn|  ¡ }|  d¡ n|d	kr~|   ¡ }t|ƒ}|S )
zParse a primitive regexp.Ú.Ú
ú^ú$ú(ú)ú[ú]ú\)Úgetr
   r   r   r   ÚexpectÚparse_charsetr   )r   r"   r   r   r   r   r*   G   s"    
zREParser.parse_primc             C   sÜ   g }d}| j dkrd}|  ¡  | j dkr:| d¡ |  ¡  x~| js¸| j dkr¸|  ¡ }| j dkr¬|  d¡dkr¬|  ¡  |  ¡ }x8tt|ƒt|ƒd ƒD ]}| t|ƒ¡ q”W q<| |¡ q<W d 	|¡}|rÐt
|ƒS t|ƒS dS )z5Parse a charset. Does not include the surrounding [].r   r-   r   r2   ú-Ú N)r"   r   r%   r   r4   Ú	lookaheadÚrangeÚordÚchrÚjoinr
   r	   )r   Z	char_listÚinvertZc1Zc2ÚaÚcharsr   r   r   r6   \   s(    



zREParser.parse_charsetc             C   s>   | j }| jd  }| _|t|ƒk r.|| | _nd| _d| _dS )zAdvance to the next char.r   r8   N)r   r   Úlenr"   r   )r   r   r   r   r   r   r   u   s    zREParser.nextc             C   s"   | j r|  d¡ | j}|  ¡  |S )NzPremature end of string)r   r    r"   r   )r   r"   r   r   r   r4      s
    
zREParser.getc             C   s*   | j | }|t| jƒk r"| j| S dS dS )zLook ahead n chars.r8   N)r   rA   r   )r   ÚnÚjr   r   r   r9   †   s    

zREParser.lookaheadc             C   s*   | j |kr|  ¡  n|  dt|ƒ ¡ dS )zj
        Expect to find character |c| at current position.
        Raises an exception otherwise.
        z
Missing %sN)r"   r   r    r!   )r   r"   r   r   r   r5   Ž   s    

zREParser.expectc             C   s   t dt| jƒ| j|f ƒ‚dS )z1Raise exception to signal syntax error in regexp.z,Syntax error in regexp %s at position %d: %sN)r   r!   r   r   )r   Zmessr   r   r   r    ˜   s    zREParser.errorN)r   r   r   r   r   r   r$   r'   r*   r6   r   r4   r9   r5   r    r   r   r   r   r      s   

r   N)Z
__future__r   ZRegexpsr   r   r   r   r   r	   r
   r   r   r   ZErrorsr   r   r   Úobjectr   r   r   r   r   Ú<module>	   s
   0