o ?OgK @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|d7}z ||j|7}Wnty=td|jt|jddw|d|_||_dS)Nr r?zbad escape (end of pattern))r[ry IndexErrorrzr*rxr&)r"r[charrrr__nexts(    zTokenizer.__nextcCs||jkr |dSdS)NTFrzr{)r"r}rrrmatchs zTokenizer.matchcCs|j}||Sr%r)r"thisrrrr+sz Tokenizer.getcCs:d}t|D]}|j}||vr|S||7}|q|SNr=)rangerzr{)r"ncharsetresult_crrrgetwhiles  zTokenizer.getwhilecCsnd} |j}||dur!|s|d||d|t|||kr2|s/|d|d |S||7}q)Nr=Tzmissing zmissing %s, unterminated namer?)rzr{r*r&)r" terminatorr,rrrrrgetuntil s" zTokenizer.getuntilcC|jt|jpdSrr[r&rzr!rrrpossz Tokenizer.poscCrrrr!rrrtellszTokenizer.tellcCs||_|dSr%)r[r{rZrrrseek!s zTokenizer.seekrcCst||j||Sr%)r*rxr)r"msgoffsetrrrr*%szTokenizer.errorNrt)rrrr#r{rr+rrr8rrrr*rrrrrus   ruc 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?rerincomplete escape %srU N{ missing {}character nameundefined character name %r\N{}.octal escape value %s outside of range 0-0o377 bad escape %s)ESCAPESr+ CATEGORIESrGr HEXDIGITSr&r*LITERALintrwchr unicodedatarrordlookupKeyError TypeError OCTDIGITSDIGITS ValueError ASCIILETTERS)r6escaper`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?rerrrrrrrrrrrrrrrrr0rrr5invalid group reference %dr)rr+rrrr&r*rrrwrrrrrrrrrrrzr'r4r7rmrr)r6rr:r`rrrgrouprrr_escapeds                        rcCstt|Sr%)rDdictfromkeys)itemsrrr_uniqrbrcCsNg}|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(rr_parser&r9rrGNEGATEextendrrH)r6r:verbosenestedr itemsappend sourcematchstart subpatternprefixitemsetrPrQrrr _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 %drezbad character range %s-%s?)rr?r+rrr=,z"the repetition number is too largez"min repeat greater than max repeatzunsupported quantifier %rrdznothing to repeatzmultiple repeat.(zunexpected end of patternP<> group namebad character in group name %r=)unknown group name %rr5zunknown extension ?P:zmissing ), unterminated commentz=!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&)r[rr'literalliteralsrr:rraddgroups  z parse_template..addgroupTrr r?rr=rz missing 's"z"parse_template..)rur+r( groupindexrr*rrrr|rrr&r)rzrrrrrrrLrF) r6r:sgetlappendrr#rrr,r[isoctalrrrparse_templates                         ; r'cCsp|j}|jdd}|\}}|dd}z|D] \}}||p |||<qWn ty2td|w||S)Nrr)rrxr|r*r)templaterremptyr'rr[rrrrexpand_template*s     r*)F)rN)=__doc__ sre_constantsrr frozensetrrrrrrrrkrrrGrrCATEGORYrlrrrZAT_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 Exceptionrrr9rurrrrrrrrr'r*rrrrst                  $rH<M :x< % U