
_W	                 @   s   d  d l  Z  d  d l Z d  d l Z d d   e d  D e _ e  j d  Z d d   Z d d	   Z d
 d   Z	 Gd d   d e
  Z d S)    Nc             C   s   g  |  ] } t  |   q S )chr).0ir   r   ./plugins/sed.py
<listcomp>   s   	 r      z?^(?:s|(.+?)/s)/((?:\\/|[^/])+)\/((?:\\/|[^/])*?)/([gixs]{0,4})?c             C   s.   x' |  D] } t  j | d | |  } q W| S)Nz{2,})resub)lstsrcZchr   r   r   squeeze	   s    r   c             C   s   |  j  d d  j  d t j  j  d t j  j  d t j  j  d t j  j  d t j  j  d t j t j  j  d	 t j  j  d
 t j  j  d d j	 d d   t j
 D   j  d t j  S)Nz\//z	[:upper:]z	[:lower:]z	[:alpha:]z	[:digit:]z
[:xdigit:]z	[:alnum:]z	[:blank:]z	[:punct:]z	[:cntrl:] c             S   s%   g  |  ] } | t  j k r |  q Sr   )string	printable)r   r   r   r   r   r      s   	 zsugar.<locals>.<listcomp>z	[:print:])replacer   ascii_uppercaseascii_lowercaseascii_lettersdigits	hexdigits
whitespacepunctuationjoinasciir   )r   r   r   r   sugar   s    r   c             C   s   g  } d } d } x |  D] } | d k r7 d } q nX | d k r\ | r\ d } d } q n3 | r | j  t | d	 d t |    d } n  | j t |   q Wd j d d   | D  S)
NF\T-   r   c             S   s   g  |  ] } t  |   q Sr   )r   )r   r   r   r   r   r   ,   s   	 zexpand.<locals>.<listcomp>)extendrangeordappendr   )r   outescapedZhyphencharr   r   r   expand   s     $	r(   c               @   sF   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 S)Substitutionz- A class representing a substitution in sed. c             C   sZ   | |  _  |  j |  \ |  _ |  _ |  _ |  _ |  _ t d |  j |  j |  j f  d  S)Nz
s/%s/%s/%s)patternparsequalr	   r
   flagscountprint)selfr*   r   r   r   __init__1   s    	-zSubstitution.__init__c             C   s   d |  j  S)NzSubstitution(%r))r*   )r0   r   r   r   __repr__6   s    zSubstitution.__repr__c             C   s  t  j |  } | s( t d |   n  d } | j   } d | d k rS d } n  d } x: | d D]. } | d k rd | t t | j    7} qd qd W| d j d d  } t j d	 d
 |  } t	 j
 t | d   d j d  } t | d  d   | | | g S)Nz/Pattern %r isn't a proper substitution pattern!r   g   r      z\/r   z(?<!\\)(\\)(?=\d+|g<\w+>)z\\\\zutf-8)	SUB_REGEXmatch	TypeErrorgroupsgetattrr	   upperr   r
   codecsescape_decodebytesdecodelist)r0   r*   mr.   r:   r-   cr
   r   r   r   r+   9   s    	 %zSubstitution.parsec             C   s+   t  j |  j  |  j | d |  j d |  j S)Nr.   r-   )r	   r
   r.   r-   )r0   onr   r   r   doN   s    zSubstitution.doN)__name__
__module____qualname____doc__r1   r2   r+   rE   r   r   r   r   r)   /   s
   r)   )r	   r=   r   r"   r   compiler7   r   r   r(   objectr)   r   r   r   r   <module>   s   