3
؊[	                 @   sb   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	G dd de
ZdS )    Nc             C   s   g | ]}t |qS  )chr).0ir   r   /opt/Infobot/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src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S r   )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}xh| D ]`}|dkr&d}qn>|dkr@| r@d}d}qn$|rd|j t|d	 d t| d}|jt| qW djdd |D S )
NF\T-   r   c             S   s   g | ]}t |qS r   )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               @   s0   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   s(   || _ | j|\| _| _| _| _| _d S )N)patternparsequalr	   r
   flagscount)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__5   s    zSubstitution.__repr__c             C   s   t j|}|std| d}|j }d|d kr6d}d}x*|d D ]}|dkrD|tt|j 7 }qDW |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,   8   s    
zSubstitution.parsec             C   s   t j| j | j|| j| jdS )N)r/   r.   )r	   r
   r/   r.   )r0   onr   r   r   doM   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   
