B
    18\C'                 @   sh  d dl Z d dlZd dlZd dlT d dlZe jjZeZe j	jZ
dd Zdd ZdZdd	 Zd
d Zdd ZdZdZdZdZdZdZdZdZed e d e ZdZde d Zde Zed e Zed e ZeeeeefZdd e d Z!e"e!Z#eeefZ$dd e$ d Z%e"e%Z&dd Z'dd  Z(d a)d!d" Z*d a+d#d$ Z,i Z-i Z.d%d& Z/e0d'krde  dS )(    N)*c              C   sn   t jd } td|  d  td td td td td td td	 td
 td td d S )Nr   zUsage: z/ [-c] [-r] [-s file] ... file-or-directory ...

z*-c           : substitute inside comments
z:-r           : reverse direction for following -s options
z+-s substfile : add a file of substitutions
z<Each non-empty non-comment line in a substitution file must
z>contain exactly two words: an identifier and its replacement.
z:Comments start with a # character and end at end of line.
z=If an identifier is preceded with a *, it is not substituted
z,inside a comment even when -c is specified.
)sysargverr)Zprogname r   T/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Tools/scripts/fixcid.pyusage/   s    
r	   c           
   C   s   yt  tjdd  d\} }W nH t jk
rf } z(tdt| d  t  td W d d }~X Y nX d}|st  td x<| D ]4\}}|dkrt  |dkrt	  |d	krt
| qW xR|D ]J}tj|rt|rd}qtj|rt|d
  d}qt|rd}qW t| d S )N   zcrs:zOptions error: r      r   z-cz-rz-sz": will not process symbolic links
)getoptr   r   errorr   strr	   exitsetdocomments
setreverseaddsubstospathisdirrecursedownislinkfix)optsargsmsgbadoptargr   r   r   main>   s6    

  r   z^[a-zA-Z0-9_]+\.[ch]$c             C   s   t t| S )N)rematchWanted)namer   r   r   wanted\   s    r$   c          
   C   s   t d| f  d}yt| }W n: tk
rZ } zt| d t| d  dS d }~X Y nX |  g }xf|D ]^}|tjtjfkrqntj	
| |}tj	|rqntj	|r|| qnt|rnt|rnd}qnW x|D ]}t|rd}qW |S )Nzrecursedown(%r)
r   z: cannot list directory: r   r
   )dbgr   listdirOSErrorr   r   sortcurdirpardirr   joinr   r   appendr$   r   r   )dirnamer   namesr   subdirsr#   fullnamer   r   r   r   _   s0    
   
 r   c          
   C   s  | dkrt j}t j}npyt| d}W n: tk
r^ } zt| d t| d  dS d }~X Y nX tj	| \}}tj
|d| }d }d}t  x| }|sP |d }x2|dd  d	kr| }	|	sP ||	 }|d }qW t|}
|
|kr|d krpyt|d
}W nD tk
rL } z$|  t|d t| d  dS d }~X Y nX |d d}t  t| d  qtt|d  td|  td|
  |d k	r||
 qW | dkrdS |  |sdS |  y"t| }t||t d@  W n< tk
r4 } zt|d t| d  W d d }~X Y nX yt| | d  W n< tk
r } zt| d t| d  W d d }~X Y nX yt||  W n< tk
r } zt| d t| d  dS d }~X Y nX dS )N-rz: cannot open: r   r
   @r   z\
wz: cannot create: z:
z< z> i  z: warning: chmod failed (z)
~z: warning: backup failed (z: rename failed ()r   stdinstdoutopenIOErrorr   r   r   r   splitr+   initfixlinereadlinefixlinecloseseekrepreprwritestatchmodST_MODEr'   rename)filenamefgr   headtailtempnamelinenolinenextlinenewlinestatbufr   r   r   r   u   s      



  
**r   z (struct )?[a-zA-Z_][a-zA-Z0-9_]+z"([^\n\\"]|\\.)*"z'([^\n\\']|\\.)*'z/\*z\*/z0[xX][0-9a-fA-F]*[uUlL]*z0[0-7]*[uUlL]*z[1-9][0-9]*[uUlL]*|z[eE][-+]?[0-9]+z([0-9]+\.[0-9]*|\.[0-9]+)(z)?z[0-9]+()c               C   s   t ad S )N)OutsideCommentProgramProgramr   r   r   r   r<      s    r<   c             C   s   d}x|t | k rt| |}|d kr(P | }|d}t |dkr`|dkrTtan|dkr`tat |}|tkrt| }ttkrtst	d| || }q|t
kr|}| d | | | || d   } t |}|| }qW | S )Nr   r   z/*z*/zFound in comment:)lenrW   searchstartgroupInsideCommentProgramrV   Dict
DocommentsprintNotInComment)rO   ir!   foundnZsubstr   r   r   r>      s4     

 r>   c               C   s   da d S )Nr
   )r^   r   r   r   r   r     s    r   c               C   s
   t  a d S )N)Reverser   r   r   r   r     s    r   c       	   
   C   s  yt | d}W nD tk
rR } z&t| d t| d  td W d d }~X Y nX d}xF| }|sjP |d }y|d}W n tk
r   d}Y nX |d | 	 }|sq\t
|dkr|d d	kr|d d
 |d  g|d d< n&t
|dkrt| d| ||f   q\tr|\}}n|\}}|d dkr@|dd  }|d dkrb|dd  }|t|< |tkrtd| |||f  td| |t| f  |t|< q\W |  d S )Nr2   z: cannot read substfile: r   r
   r   #   struct r   z%s:%r: warning: bad line: %rr   z"%s:%r: warning: overriding: %r %r
z%s:%r: warning: previous: %r
)r9   r:   r   r   r   r   r=   index
ValueErrorr;   rX   rd   r`   r]   r?   )		substfilefpr   rN   rO   ra   wordsvaluekeyr   r   r   r     sH     
  

r   __main__)1r   r    r   rD   r   stderrrC   r   r%   r8   rA   r	   r   r"   r$   r   r   Z
IdentifierStringZCharZCommentStartZ
CommentEnd	Hexnumber	Octnumber	Decnumber	IntnumberExponent
PointfloatExpfloatFloatnumberNumberZOutsideCommentr+   ZOutsideCommentPatterncompilerV   ZInsideCommentZInsideCommentPatternr\   r<   r>   r^   r   rd   r   r]   r`   r   __name__r   r   r   r   <module>%   sX   P


'%
