o bcK @sdZddlTdZdZedZedZedZedZed Z ee e hZ ee eeeeehZeed feed feed feed feedfeedfeedfeedfdZeefeefeefeeefgfeeefgfeeefgfeeefgfeeefgfeeefgfee fd Z!e"e#e$e%e&e'e(e)dZ*e'e#Be)BZ+e,e(BZ-Gddde.Z/GdddZ0GdddZ1GdddZ2ddZ3dd Z4d!d"Z5d#d$Z6d3d&d'Z7d(d)Z8d*d+Z9d4d-d.Z:d/d0Z;d1d2Z)r;r:rE MAXREPEATr/minmaxCALL SUBPATTERN _REPEATCODES _UNITCODESGROUPREFr9rrHSUCCESS) r"lohirKrLr jlhrrrr/s\               zSubPattern.getwidthr%r) rrrr#rGrQrSrWrYr\r^r(r/rrrrr8ns  ( r8c@sbeZdZddZddZddZddZd d Zd d Ze d dZ ddZ ddZ dddZ dS) TokenizercCs@t|t|_||_|jst|d}||_d|_d|_|dS)Nlatin1r)rIrCistextstringdecoded_stringrVnext_Tokenizer__next)r"rsrrrr#s   zTokenizer.__init__cCs|j}z|j|}Wn tyd|_YdSw|dkr>|d7}z ||j|7}Wnty=td|jt|jddw|d|_||_dS)Nr r>zbad escape (end of pattern))rVrt IndexErrorrur*rsr&)r"rVcharrrrZ__nexts(    zTokenizer.__nextcCs||jkr |dSdS)NTFrurv)r"rxrrrmatchs zTokenizer.matchcCs|j}||Sr%ry)r"thisrrrr+sz Tokenizer.getcCs:d}t|D]}|j}||vr|S||7}|q|SNr<)rangerurv)r"ncharsetresult_crrrgetwhiles  zTokenizer.getwhilecCsnd} |j}||dur!|s|d||d|t|||kr2|s/|d|d |S||7}q)Nr<Tzmissing zmissing %s, unterminated namer>)rurvr*r&)r"Z terminatorr,rrrrrgetuntil s" zTokenizer.getuntilcC|jt|jpdSr|rVr&rur!rrrpossz Tokenizer.poscCrr|rr!rrrtellszTokenizer.tellcCs||_|dSr%)rVrvrUrrrseek!s zTokenizer.seekrcCst||j||Sr%)r*rsr)r"msgoffsetrrrr*%szTokenizer.errorNro)rrrr#rvrzr+rrr7rrrr*rrrrrps   rpc Cst|}|r |St|}|r|dtur|Sz|dd}|dkrH||dt7}t|dkr<|d|t|tt |dddfWS|dkrs|j rs||dt7}t|d krg|d|t|tt |dddfWS|d kr|j r||d t7}t|d kr|d|t|t |ddd}t |t|fWS|d kr|j rddl }| ds|d|dd}z t||}Wnttfy|d|t|tdwt|fWS|tvr||dt7}t |ddd }|dkr |d|t|t|fWS|tvrtt|dkr5|tvr,|d|t|tt|dfWSWn ty@Ynw|d|t|)Nrr>r`rincomplete escape %srU N{ missing {}character nameundefined character name %r\N{}.octal escape value %s outside of range 0-0o377 bad escape %s)ESCAPESr+ CATEGORIESrDr HEXDIGITSr&r*LITERALintrrchr unicodedatarzrordlookupKeyError TypeError OCTDIGITSDIGITS ValueError ASCIILETTERS)r5escaper[rrcharnamerrr _class_escape(sv                 rc CsNt|}|r |St|}|r|Sz|dd}|dkrB||dt7}t|dkr6|d|t|tt|dddfWS|dkrm|j rm||dt7}t|dkra|d|t|tt|dddfWS|d kr|j r||d t7}t|d kr|d|t|t|ddd}t |t|fWS|d kr|j rd dl }| ds|d| dd}z t||}Wnttfy|d|t|tdwt|fWS|dkr||dt7}tt|ddd fWS|tvrr|jtvr?||7}|dtvr?|dtvr?|jtvr?||7}t|ddd }|dkr:|d|t|t|fWSt|dd}||jkrf||s[|dt||||t|fWS|d|t|dt|dkr|tvr|d|t|tt|dfWSWn tyYnw|d|t|)Nr>r`rrrrrrrrrrrrrrrrr0rrr4invalid group reference %dr)rr+rrrr&r*rrrrrrrzrrrrrrrrur'r3r6rhrr)r5rr9r[rrrgrouprrr_escapeds                        rcCstt|Sr%)rAdictfromkeys)itemsrrr_uniqr]rcCsNg}|j}|j}|} |t||||d| o| |ds"nq t|dkr-|dSt|} d} |D]} | s<n | durE| d} q6| d| krMnq6|D]} | d=qP|| q1 g} |D]/} t| dkrkn1| d\} } | tur}| | | fqa| tur| ddtur| | qan |tt | f|S|t d|ff|S)NTr>|r) r(rzr_parser&r8rrDNEGATEextendrrE)r5r9verbosenestedrZ itemsappend sourcematchstart subpatternprefixitemsetrKrLrrr _parse_subsV        rFc/ Cs t|}|j}|j}|j}t} t} |j} | durn| dvr!n||r>| tvr+q| dkr> |} | dus;| dkrr$t2||||d}(|jd>kr#|d?nd}(|d2s6|d;| | |t3|&|'|(ffq|t4vsJ|dkrt5|||})|)dur|r[|r}ddl }|j d@|j6ddAt|j6dAkrrdBnd!| ft7|d d |j8t9@r|st:q|)\}}d}n |dC|t|d|durz|;|!}Wnty}*z ||*jfn| dDkr|tt?fntdE|fqt@t|ddd&D]'},||,\}-}.|-t urO|.\}}}}|durO|sO|sO|||,|,d<q)|S)FNTz|)#rrr [r>z"Possible nested set at position %dr) stacklevel^zunterminated character set]z-&~|zPossible set %s at position %d- difference& intersection~zsymmetric differenceunionz&Possible set difference at position %dr`zbad character range %s-%s?)rr>r+rrr<,z"the repetition number is too largez"min repeat greater than max repeatzunsupported quantifier %rr_znothing to repeatzmultiple repeat.(zunexpected end of patternP<> group namebad character in group name %r=)unknown group name %rr4zunknown extension ?P:zmissing ), unterminated commentz=!z missing flagz8bad inline flags: cannot turn off flags 'a', 'u' and 'L'z missing :rz-bad inline flags: cannot turn off global flagz(bad inline flags: flag turned on and off) r+rrrr* TYPE_FLAGSisalphar&r GLOBAL_FLAGS)r5r9rxrrrflagrrrrrdsv          rcCsnt|tr!|t@r td|t@s|tO}|S|t@rtd|S|t@r)td|t@r5|t@r5td|S)Nz)cannot use LOCALE flag with a str patternz(ASCII and UNICODE flags are incompatiblez,cannot use UNICODE flag with a bytes patternz'ASCII and LOCALE flags are incompatible)rIrCSRE_FLAG_LOCALErSRE_FLAG_ASCIISRE_FLAG_UNICODE)Zsrcrrrr fix_flagss rNcCst|}|dur t}||_||_z t|||t@d}Wn ty<t}|tB|_||_|dt||dd}Ynwt||j j|j _|j durP| d|j j D]}||j j krjd|}t |||j j |qT|t@rs||S)NrTzunbalanced parenthesisr)rprrrCrrrrrr9rur*r r'SRE_FLAG_DEBUGrG)rCrr9r5r0grrrrparses2       rc st|j}gggj}fdd}j} |}|dur'n&|ddkrH|d}|dkrd}d sBd d d }|r`z||} Wn>ty_t d |wz t |} | dkrkt Wnt yd|t |ddw| t krd| t |d|| t |dn|dkrÈjtvr||7}jtvr||7}|tt |dddd@n|tvrd} jtvr ||7}|tvr |dtvr jtvr ||7}d} t |ddd}|dkrd|t ||t|| s|t |ddt |dn-z tt|d}WntyB|tvr@d|t |Ynw||n||qrXdt|tseddDfS)NcsX|jkr d||rddd=t|fddS)Nrr<)r'r*r(joinr&)rVrr'Zliteralliteralsrr9rraddgroups  z parse_template..addgroupTrr r>rr<rz missing 's"z"parse_template..)rpr+r( groupindexrzr*rrrrwrrr&r)rurrrrrrrIrC) r5r9ZsgetZlappendr rr{rr,rVZisoctalrrrparse_templates                         ; rcCsp|j}|jdd}|\}}|dd}z|D] \}}||p |||<qWn ty2td|w||S)Nrr)rrsrwr*r)templaterzremptyr'r rVrrrrexpand_template*s     r)F)rN)=__doc__ sre_constantsrr frozensetrrrrrrrrfrrrDrrCATEGORYrgrrrZAT_BEGINNING_STRINGZ AT_BOUNDARYZAT_NON_BOUNDARYZCATEGORY_DIGITZCATEGORY_NOT_DIGITZCATEGORY_SPACEZCATEGORY_NOT_SPACEZ CATEGORY_WORDZCATEGORY_NOT_WORDZ AT_END_STRINGrSRE_FLAG_IGNORECASErSRE_FLAG_MULTILINESRE_FLAG_DOTALLrrSRE_FLAG_TEMPLATErrrrr Exceptionrrr8rprrrrrrrrrrrrrrst                  $rH<M :x< % U