î i f& ã@sšdZddlmZddlmZddlmZddlmZddlmZm Z m Z m Z m Z ej dƒZGdd „d ejƒZd S) a Fixer for print. Change: 'print' into 'print()' 'print ...' into 'print(...)' 'print ... ,' into 'print(..., end=" ")' 'print >>x, ...' into 'print(..., file=x)' No changes are applied if print_function is imported from __future__ é)Úpatcomp)Úpytree)Útoken)Ú fixer_base)ÚNameÚCallÚCommaÚStringÚis_tuplez"atom< '(' [atom|STRING|NAME] ')' >c@s4eZdZdZdZdd„Zdd„ZdS)ÚFixPrintTzP simple_stmt< any* bare='print' any* > | print_stmt c Cs8|s t‚|jdƒ}|rJ|jttdƒgd|jƒƒdS|jdtdƒksit‚|jdd…}t|ƒdkr¥tj |dƒr¥dSd}}}|rå|dt ƒkrå|dd…}d}n|rE|dt j t jdƒkrEt|ƒdks"t‚|djƒ}|d d…}nd d „|Dƒ}|rnd |d_n|dk s’|dk s’|dk r|dk rÀ|j|d tt|ƒƒƒn|dk rî|j|dtt|ƒƒƒn|dk r|j|d|ƒqnttdƒ|ƒ} |j| _| S)NZbareÚprintÚprefixééú z>>récSsg|]}|jƒ‘qS©)Úclone)Ú.0Úargrrú?s z&FixPrint.transform..ÚÚsepÚendÚfileéÿÿÿÿr)ÚAssertionErrorÚgetÚreplacerrr ZchildrenÚlenÚ parend_exprÚmatchrrÚLeafrÚ RIGHTSHIFTrÚ add_kwargr Úrepr) ÚselfZnodeZresultsZ bare_printÚargsrrrZl_argsZn_stmtrrrÚ transform%s>  % %$ " "  zFixPrint.transformcCsrd|_tj|jjt|ƒtjtjdƒ|fƒ}|ra|j t ƒƒd|_n|j |ƒdS)Nrú=r) r rZNodeZsymsZargumentrr#rÚEQUALÚappendr)r'Zl_nodesZs_kwdZn_exprZ n_argumentrrrr%Ms    zFixPrint.add_kwargN)Ú__name__Ú __module__Ú __qualname__Z BM_compatibleZPATTERNr)r%rrrrr s  (r N)Ú__doc__rrrZpgen2rrZ fixer_utilrrrr r Zcompile_patternr!ZBaseFixr rrrrÚs(