3
‡Œði)  ã               @   s\   d Z ddlmZmZmZ ddlmZ ddlmZm	Z	m
Z
mZ ejdƒZG dd„ dejƒZdS )	a,  Fixer for print.

Change:
    "print"          into "print()"
    "print ..."      into "print(...)"
    "print(...)"     not changed
    "print ... ,"    into "print(..., end=' ')"
    "print >>x, ..." into "print(..., file=x)"

No changes are applied if print_function is imported from __future__

é    )ÚpatcompÚpytreeÚ
fixer_base)Útoken)ÚNameÚCallÚCommaÚStringz8atom< '(' [arith_expr|atom|power|term|STRING|NAME] ')' >c               @   s$   e Zd ZdZdZdd„ Zdd„ ZdS )ÚFixPrintTzP
              simple_stmt< any* bare='print' any* > | print_stmt
              c             C   sà  |st ‚|jdƒ}|r4|jttdƒg |jd�ƒ d S |jd tdƒksJt ‚|jdd … }t|ƒdkrvtj	|d ƒrvd S d  } }}|rê|d t
ƒ krê|d d… }d}dd„ |d jƒ D ƒ}|rê|d jd d	krê|d jdd… dkrêd}|�r2|d tjtjdƒk�r2t|ƒdk�st ‚|d jƒ }|d
d … }dd„ |D ƒ}	|	�rPd|	d _|d k	�sn|d k	�sn|d k	�rÆ|d k	�rŽ| j|	dtt|ƒƒƒ |d k	�r®| j|	dtt|ƒƒƒ |d k	�rÆ| j|	d|ƒ ttdƒ|	ƒ}
|j|
_|
S )NZbareÚprint)Úprefixr   é   ú c             S   s   g | ]}|j tjkr|‘qS © )Útyper   ÚSTRING)Ú.0Zleafr   r   ú=/tmp/pip-build-6m2fasei/future/libfuturize/fixes/fix_print.pyú
<listcomp>?   s    z&FixPrint.transform.<locals>.<listcomp>Úré   ú\tú\nú\rÚ z>>é   c             S   s   g | ]}|j ƒ ‘qS r   )Úclone)r   Úargr   r   r   r   K   s    ÚsepÚendÚfileéÿÿÿÿr!   r!   r!   r!   éýÿÿÿr!   )r   r   r   )ÚAssertionErrorÚgetÚreplacer   r   r   ÚchildrenÚlenÚparend_exprÚmatchr   ZleavesÚvaluer   ÚLeafr   Ú
RIGHTSHIFTr   Ú	add_kwargr	   Úrepr)ÚselfÚnodeÚresultsZ
bare_printÚargsr   r   r    Zstring_leavesZl_argsZn_stmtr   r   r   Ú	transform$   sH    




zFixPrint.transformc             C   sN   d|_ tj| jjt|ƒtjtjdƒ|fƒ}|r@|j	t
ƒ ƒ d|_ |j	|ƒ d S )Nr   ú=r   )r   r   ÚNodeZsymsÚargumentr   r+   r   ÚEQUALÚappendr   )r/   Zl_nodesZs_kwdZn_exprZ
n_argumentr   r   r   r-   ^   s    
zFixPrint.add_kwargN)Ú__name__Ú
__module__Ú__qualname__ZBM_compatibleZPATTERNr3   r-   r   r   r   r   r
      s   :r
   N)Ú__doc__Zlib2to3r   r   r   Zlib2to3.pgen2r   Zlib2to3.fixer_utilr   r   r   r	   Zcompile_patternr(   ZBaseFixr
   r   r   r   r   Ú<module>   s   