JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr i f& @sdZddlmZddlmZddlmZddlmZddlmZm Z m Z m Z m Z ej dZGdd d ejZd 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)NameCallCommaStringis_tuplez"atom< '(' [atom|STRING|NAME] ')' >c@s4eZdZdZdZddZddZdS)FixPrintTzP simple_stmt< any* bare='print' any* > | print_stmt c Cs8|s t|jd}|rJ|jttdgd|jdS|jdtdksit|jdd}t|dkrtj |drdSd}}}|r|dt kr|dd}d}n|rE|dt j t jdkrEt|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)NZbareprintprefix z>>rcSsg|]}|jqS)clone).0argrr?s z&FixPrint.transform..sependfiler)AssertionErrorgetreplacerrr Zchildrenlen parend_exprmatchrrLeafr RIGHTSHIFTr add_kwargr repr) selfZnodeZresultsZ bare_printargsrrrZl_argsZn_stmtrrr transform%s>  % %$ " "  zFixPrint.transformcCsrd|_tj|jjt|tjtjd|f}|ra|j t d|_n|j |dS)Nr=r) r rZNodeZsymsZargumentrr#rEQUALappendr)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 rrrrs(