JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbrў fc@sdZdZddlZddlZddlmZmZmZmZm Z m Z ddl m Z ddl m Z ejjejjedZGd d d eZd d ZGd ddeZiejd6ejd6ejd6dd6ZddZddZddZdS(uPattern compiler. The grammer is taken from PatternGrammar.txt. The compiler compiles a pattern to a pytree.*Pattern instance. u#Guido van Rossum iNi(udriveruliteralsutokenutokenizeuparseugrammar(upytree(upygramuPatternGrammar.txtcBs|EeZdZdS(uPatternSyntaxErrorN(u__name__u __module__u __qualname__(u __locals__((u4/opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyuPatternSyntaxErrorsuPatternSyntaxErrorc cswttjtjtjf}tjtj|j }x7|D]/}|\}}}}}||kr@|Vq@q@WdS(u6Tokenizes a string suppressing significant whitespace.N( usetutokenuNEWLINEuINDENTuDEDENTutokenizeugenerate_tokensuiouStringIOureadline( uinputuskiputokensu quintupleutypeuvalueustartuendu line_text((u4/opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyutokenize_wrapper!s   utokenize_wrappercBs\|EeZdZeddZd d ddZddZd ddZ d d Z d S( uPatternCompilercCs^tj||_tj|j|_tj|_tj|_ tj |jdt |_dS(u^Initializer. Takes an optional alternative filename for the pattern grammar. uconvertN( udriveru load_grammarugrammarupygramuSymbolsusymsupython_grammaru pygrammarupython_symbolsupysymsuDriverupattern_convert(uselfu grammar_file((u4/opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyu__init__-s   uPatternCompiler.__init__cCst|}y|jj|d|}Wn:tjk rd}ztt|WYdd}~XnX|r~|j||fS|j|SdS(u=Compiles a pattern string to a nested pytree.*Pattern object.udebugN(utokenize_wrapperudriveru parse_tokensuparseu ParseErroruPatternSyntaxErrorustru compile_node(uselfuinputudebugu with_treeutokensurootue((u4/opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyucompile_pattern8s %uPatternCompiler.compile_patternc s|jjjkr%|jd}n|jjjkrfdd|jdddD}t|dkr}|dStjdd|Dddd d}|jS|jjj kr"fd d|jD}t|dkr|dStj|gddd d}|jS|jjj krlj |jdd}tj |}|jS|jjj kstd}|j}t|d kr|djtjkr|dj}|dd}nd}t|dkr,|d jjjkr,|d}|dd}nj ||}|dk r|jjjkset|j} | d} | jtjkrd} tj} n| jtjkrd} tj} n| jtjkrH| djtjkstt| dkstj| d} } t| d krTj| d } qTn dsTt| dksl| dkr|j}tj|ggd| d | }qn|dk r||_n|jS(uXCompiles a node, recursively. This is one big switch on the node type. icsg|]}j|qS((u compile_node(u.0uch(uself(u4/opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyu Ps u0PatternCompiler.compile_node..NiicSsg|]}|gqS(((u.0ua((u4/opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyu Ss uminumaxcsg|]}j|qS((u compile_node(u.0uch(uself(u4/opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyu Ws iiiiii(iiF(utypeusymsuMatcheruchildrenu AlternativesulenupytreeuWildcardPatternuoptimizeu Alternativeu NegatedUnitu compile_basicuNegatedPatternuUnituAssertionErroruNoneutokenuEQUALuvalueuRepeateruSTARuHUGEuPLUSuLBRACEuRBRACEuget_intuFalseuname( uselfunodeualtsupuunitsupatternunameunodesurepeatuchildrenuchilduminumax((uselfu4/opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyu compile_nodeDsh)(    ( +        '  uPatternCompiler.compile_nodecCst|dkst|d}|jtjkrbttj|j}t j t ||S|jtj kr||j}|j r|tkrtd|n|ddrtdnt j t|S|dkrd}nF|jds3t|j|d}|dkr3td|q3n|ddrc|j|djdg}nd}t j||Sns|jdkr|j|dS|jd kr|dkst|j|d}t j|ggd dd dSd st|dS( NiiuInvalid token: %ruCan't have details for tokenuanyu_uInvalid symbol: %ru(u[uminumaxF(ulenuAssertionErrorutypeutokenuSTRINGustruliteralsu evalStringuvalueupytreeu LeafPatternu_type_of_literaluNAMEuisupperu TOKEN_MAPuPatternSyntaxErroruNoneu startswithugetattrupysymsu compile_nodeuchildrenu NodePatternuWildcardPatternuFalse(uselfunodesurepeatunodeuvalueutypeucontentu subpattern((u4/opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyu compile_basics<        uPatternCompiler.compile_basiccCs%|jtjkstt|jS(N(utypeutokenuNUMBERuAssertionErroruintuvalue(uselfunode((u4/opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyuget_intsuPatternCompiler.get_intNF( u__name__u __module__u __qualname__u_PATTERN_GRAMMAR_FILEu__init__uFalseucompile_patternu compile_nodeuNoneu compile_basicuget_int(u __locals__((u4/opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyuPatternCompiler+s   G#uPatternCompileruNAMEuSTRINGuNUMBERuTOKENcCs9|djrtjS|tjkr1tj|SdSdS(Ni(uisalphautokenuNAMEugrammaruopmapuNone(uvalue((u4/opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyu_type_of_literals  u_type_of_literalcCsW|\}}}}|s'||jkr=tj||d|Stj||d|SdS(u9Converts raw node information to a Node or Leaf instance.ucontextN(u number2symbolupytreeuNodeuLeaf(ugrammaru raw_node_infoutypeuvalueucontextuchildren((u4/opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyupattern_convertsupattern_convertcCstj|S(N(uPatternCompilerucompile_pattern(upattern((u4/opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyucompile_patternsucompile_pattern( u__doc__u __author__uiouosupgen2udriveruliteralsutokenutokenizeuparseugrammaruupytreeupygramupathujoinudirnameu__file__u_PATTERN_GRAMMAR_FILEu ExceptionuPatternSyntaxErrorutokenize_wrapperuobjectuPatternCompileruNAMEuSTRINGuNUMBERuNoneu TOKEN_MAPu_type_of_literalupattern_convertucompile_pattern(((u4/opt/alt/python33/lib64/python3.3/lib2to3/patcomp.pyu s$  .