B
    18™\çB  ã               @   sx  d Z d ZdZddlZddlZddlZi Zd ed< ed< d ed< ed	< d
ed< ded< d ed<  ed<  ed<  ed< ed< ded< dZG dd„ dƒZej	ej
e eefdd„Zej	ej
e eefdd„Zej	ej
e eefdd„Ze eefdd„Ze eefd d!„Ze eefd"d#„Zd$d%„ Ze eefd&d'„Ze eefd(d)„Ze eefd*d+„Zd,eƒ  Zd-d.„ Zd/d0„ Zed1krteƒ  dS )2é   Fé    N)ÚelifÚelseÚendÚifr   )r   r   ÚwhileÚfor)ÚexceptÚfinallyÚtry)r	   r   r
   r   r	   r   r   r
   ÚwithÚdefÚclass© )r   r   r   r   r   r   r   c               @   sd   e Zd Zejejeeef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 )ÚPythonIndenterc             C   sT   || _ || _|| _|| _d| _|| _|j| _t 	d¡| _
t 	d¡| _t 	d¡| _d S )Nr   zC^(?:\s|\\\n)*(?P<kw>[a-z]+)((?:\s|\\\n)+(?P<id>[a-zA-Z_]\w*))?[^\w]zE^(?:\s|\\\n)*#?\s*end\s+(?P<kw>[a-z]+)(\s+(?P<id>[a-zA-Z_]\w*))?[^\w]z^[ \t]*)ÚfpiÚfpoÚ
indentsizeÚtabsizeÚlinenoÚ
expandtabsÚwriteÚ_writeÚreÚcompileÚkwprogÚendprogÚwsprog)Úselfr   r   r   r   r   r   r   úU/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Tools/scripts/pindent.pyÚ__init__d   s    zPythonIndenter.__init__c             C   s(   | j r|  |  | j¡¡ n
|  |¡ d S )N)r   r   r   )r   Úliner   r   r   r   x   s    zPythonIndenter.writec             C   s    | j  ¡ }|r|  jd7  _|S )Né   )r   Úreadliner   )r   r!   r   r   r   r#   €   s    
 zPythonIndenter.readlinec             G   s4   |r|| }t j d| j|f ¡ |  d| ¡ d S )NzError at line %d: %s
z### %s ###
)ÚsysÚstderrr   r   )r   ÚfmtÚargsr   r   r   Úerror‡   s     zPythonIndenter.errorc             C   s8   |   ¡ }x*|dd … dkr2|   ¡ }|s(P ||7 }q
W |S )Néþÿÿÿz\
)r#   )r   r!   Úline2r   r   r   ÚgetlineŽ   s     zPythonIndenter.getlinec             C   sd   t || j | jƒ\}}| j |¡ ¡ }||d … }|d d… dkrVd| d|  | }|  |¡ d S )Nr"   )Ú
úÚ ú	ú )Údivmodr   r   r   Úmatchr   r   )r   r!   ÚindentÚtabsZspacesÚir   r   r   Úputline™   s    zPythonIndenter.putlinec             C   s4  g }xø|   ¡ }|sP | j |¡}|rnd}| d¡}|sB|  d¡ n| ¡ d |kr\|  d¡ |  |t|ƒ¡ q| j |¡}|rê| d¡}|t	kr°|  |t|ƒ¡ | 
||f¡ q|tkrê|rê|  |t|ƒd ¡ |d \}}||f|d< q|  |t|ƒ¡ qW |r0|  d¡ x |D ]\}}|  d	| ¡ qW d S )
Nr   Úkwzunexpected endr   zunmatched endr"   éÿÿÿÿzunterminated keywordsz	%s
)r+   r   r2   Úgroupr(   Úpopr6   Úlenr   ÚstartÚappendÚnextr   )r   Ústackr!   Úmr7   Zkw2ZkwaZkwbr   r   r   Úreformat£   s@     



zPythonIndenter.reformatc             C   s    d}d}x`|   ¡ }|sP | j |¡}|r2|d7 }q
| j |¡}|r\| d¡}|tkr\|d7 }|  |¡ q
W || dk r„tj d¡ n|| dkrœtj d¡ d S )Nr   r"   r7   z5Warning: input contained more end tags than expected
z5Warning: input contained less end tags than expected
)	r+   r   r2   r   r9   r<   r   r$   r%   )r   Zbegin_counterZend_counterr!   r@   r7   r   r   r   ÚdeleteÎ   s(     
zPythonIndenter.deletec             C   sx  g }g }d } } } }}xT|   ¡ }| j |¡ ¡ }	| j |¡}
|
rbd}|
 d¡}|
 d¡}nf| j |¡}
|
r¢|
 d¡}|tkrˆd}|dkrœ|
 d¡}qÈd}n&||	|	d … dkrÄ| |¡ q nd}|d |	… }t	| 
| j¡ƒ}t	| 
| j¡ƒ}xf||k rZ|r8|rd||f }nd	| }|  || ¡ d }}| ¡ \}}}}t	| 
| j¡ƒ}qöW ||krÚ|rÚ|dkr”||krŠ|  d
¡ d }}nF|r¤|tkrÚ|r¸d||f }nd	| }|  || ¡ d } }}||kr| ||||f¡ |r
|tkr
d}||||f\}}}}|r@|tkr<| }}|}n|}x|D ]}|  |¡ qFW g }|sfP |  |¡ q W d S )Nr.   r   r7   Úid)r   r   r"   )r,   ú#z# end %s %s
z	# end %s
zmismatched end)r+   r   r2   r   r   r9   r   r>   r=   r;   r   r   r   r:   r(   r<   )r   r?   ÚtodoZ	currentwsZthisidZfirstkwZlastkwZtopidr!   r5   r@   ZthiskwZendkwZindentwsr3   ÚcurrentÚsÚlr   r   r   Úcompleteê   s€    









  zPythonIndenter.completeN)Ú__name__Ú
__module__Ú__qualname__r$   ÚstdinÚstdoutÚSTEPSIZEÚTABSIZEÚ
EXPANDTABSr    r   r#   r(   r+   r6   rA   rB   rI   r   r   r   r   r   b   s   
+r   c             C   s   t | ||||ƒ}| ¡  d S )N)r   rI   )ÚinputÚoutputÚstepsizer   r   Úpir   r   r   Úcomplete_filterK  s    rV   c             C   s   t | ||||ƒ}| ¡  d S )N)r   rB   )rR   rS   rT   r   r   rU   r   r   r   Údelete_filterQ  s    rW   c             C   s   t | ||||ƒ}| ¡  d S )N)r   rA   )rR   rS   rT   r   r   rU   r   r   r   Úreformat_filterW  s    rX   c             C   s2   t  | ¡}t  ¡ }t|||||ƒ}| ¡  | ¡ S )N)ÚioÚStringIOr   rI   Úgetvalue)ÚsourcerT   r   r   rR   rS   rU   r   r   r   Úcomplete_string]  s
    
r]   c             C   s2   t  | ¡}t  ¡ }t|||||ƒ}| ¡  | ¡ S )N)rY   rZ   r   rB   r[   )r\   rT   r   r   rR   rS   rU   r   r   r   Údelete_stringe  s
    
r^   c             C   s2   t  | ¡}t  ¡ }t|||||ƒ}| ¡  | ¡ S )N)rY   rZ   r   rA   r[   )r\   rT   r   r   rR   rS   rU   r   r   r   Úreformat_stringm  s
    
r_   c             C   sœ   dd l }dd l}| d }|j |¡r\y| |¡ W n( tk
rZ   td|f tjd Y nX y| 	| |¡ W n* tk
r–   td| |f tjd Y nX d S )Nr   ú~zCan't remove backup %r)ÚfilezCan't rename %r to %r)
ÚosÚos.pathÚpathÚlexistsÚremoveÚOSErrorÚprintr$   r%   Úrename)Úfilenamerb   Úbackupr   r   r   Úmake_backupu  s    rl   c          	   C   sd   t | dƒ}| ¡ }W d Q R X t||||ƒ}||kr8dS t| ƒ t | dƒ}| |¡ W d Q R X dS )NÚrr   Úwr"   )ÚopenÚreadr]   rl   r   )rj   rT   r   r   Úfr\   Úresultr   r   r   Úcomplete_file†  s     rs   c          	   C   sd   t | dƒ}| ¡ }W d Q R X t||||ƒ}||kr8dS t| ƒ t | dƒ}| |¡ W d Q R X dS )Nrm   r   rn   r"   )ro   rp   r^   rl   r   )rj   rT   r   r   rq   r\   rr   r   r   r   Údelete_file”  s     rt   c          	   C   sd   t | dƒ}| ¡ }W d Q R X t||||ƒ}||kr8dS t| ƒ t | dƒ}| |¡ W d Q R X dS )Nrm   r   rn   r"   )ro   rp   r_   rl   r   )rj   rT   r   r   rq   r\   rr   r   r   r   Úreformat_file¢  s     ru   aG  
usage: pindent (-c|-d|-r) [-s stepsize] [-t tabsize] [-e] [file] ...
-c         : complete a correctly indented program (add #end directives)
-d         : delete #end directives
-r         : reformat a completed program (use #end directives)
-s stepsize: indentation step (default %(STEPSIZE)d)
-t tabsize : the worth in spaces of a tab (default %(TABSIZE)d)
-e         : expand TABs into spaces (default OFF)
[file] ... : files are changed in place, with backups in file~
If no files are specified or a single - is given,
the program acts as a filter (reads stdin, writes stdout).
c             C   s:   t j d|  d |d  d ¡ t j t¡ t  d¡ d S )Nz Error: You can not specify both z and -r   z at the same time
é   )r$   r%   r   ÚusageÚexit)Zop1Zop2r   r   r   Ú
error_both¿  s     ry   c           
   C   s¤  dd l } y|   tjdd … d¡\}}W nJ | jk
rp } z*tj d| ¡ tj t¡ t d¡ W d d }~X Y nX d }t}t	}t
}x–|D ]Ž\}}	|dkr¬|r¦t||ƒ d}qˆ|dkrÈ|rÂt||ƒ d	}qˆ|d
krä|rÞt||ƒ d}qˆ|dkröt|	ƒ}qˆ|dkr
t|	ƒ}qˆ|dkrˆd}qˆW |sBtj d¡ tj t¡ t d¡ |rT|dgkrvt|d ƒ}|tjtj|||ƒ n*t|d ƒ}x|D ]}
||
|||ƒ qˆW d S )Nr   r"   zcdrs:t:ez
Error: %s
rv   z-crI   z-drB   z-rrA   z-sz-tz-eTz7You must specify -c(omplete), -d(elete) or -r(eformat)
ú-Z_filterÚ_file)Úgetoptr$   Úargvr(   r%   r   rw   rx   rO   rP   rQ   ry   ÚintÚevalrM   rN   )r|   Úoptsr'   ÚmsgÚactionrT   r   r   ÚoÚarj   r   r   r   ÚtestÅ  sR     
 
 





r…   Ú__main__)rO   rP   rQ   rY   r   r$   r>   r<   r   rM   rN   rV   rW   rX   r]   r^   r_   rl   rs   rt   ru   Úvarsrw   ry   r…   rJ   r   r   r   r   Ú<module>P   sB   ( j
3
