3
 ¯ñU  ã               @   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   úg/home/psgendb/BIRCHDEV/lib-linux-x86_64/python/lib64/python3.6/site-packages/Cython/Plex/Traditional.pyr      s   r   c             C   s   t | ƒjƒ 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| _| jƒ  d S )Nr   r   éÿÿÿÿ)r   ÚiÚendÚnext)Úselfr   r   r   r   Ú__init__   s    zREParser.__init__c             C   s&   | j ƒ }| js"| j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 ƒ }| jdkrF|g}x$| jdkr<| jƒ  |j| j ƒ ƒ 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   s2   g }x$| j  r(| jdkr(|j| jƒ ƒ 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   s\   | j ƒ }xN| j rV| jdkrV| jdkr0t|ƒ}n| jdkrDt|ƒ}nt|ƒ}| jƒ  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Š   | j ƒ }|dkrtdƒ}nl|dkr(t}n^|dkr6t}nP|dkrR| jƒ }| jdƒ n4|dkrn| jƒ }| jdƒ n|d	kr~| j ƒ }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ƒ  | j dkr:|jdƒ | jƒ  x€| j rº| j dkrº| jƒ }| j dkr®| jdƒdkr®| jƒ  | jƒ }x8tt|ƒt|ƒd ƒD ]}|jt|ƒƒ q–W q<|j|ƒ q<W dj	|ƒ}|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   Ú	char_listÚinvertÚc1Ú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| jdƒ | j}| 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   rD   r   )r   ÚnÚjr   r   r   r9   †   s    

zREParser.lookaheadc             C   s*   | j |kr| jƒ  n| j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   Ú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)Ú
__future__r   ÚRegexpsr   r   r   r   r   r	   r
   r   r   r   ÚErrorsr   r   r   Úobjectr   r   r   r   r   Ú<module>	   s
   0