o w[eK @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;d1d2Zrrrr&ps  zSubPattern.__init__rc Cs|d}ttf}|jD]\}}t|dt|dd|tur5t|D]\}}t|ddt||q"q |turYtt|dD]\}}|rPt|dd||dqBq |t ur|\}} } td|| |d| rt|dd| |dq t ||rd}|D]&}t |t r|st||dd}q|std ddt|ddd}q|stq td|q dS) NTz )endORELSEF ) tuplelistr>printstrINBRANCH enumeratedumpGROUPREF_EXISTS isinstancer<) r%levelnlseqtypesopavrr condgroupitem_yesitem_norrrrMwsR        zSubPattern.dumpcCr'r()reprr>r$rrr__repr__ zSubPattern.__repr__cCr'r()r)r>r$rrr__len__rZzSubPattern.__len__cCs |j|=dSr(r>r%indexrrr __delitem__s zSubPattern.__delitem__cCs&t|trt|j|j|S|j|Sr()rOslicer<r=r>r]rrr __getitem__s  zSubPattern.__getitem__cCs||j|<dSr(r\r%r^coderrr __setitem__zSubPattern.__setitem__cCs|j||dSr()r>insertrbrrrrfr6zSubPattern.insertcCs|j|dSr()r>r+)r%rcrrrr+szSubPattern.appendc Cs|jdur|jSd}}|jD]\}}|tur=td}d}|dD]}|\}}t||}t||}q!||}||}q|turP|\}}||}||}q|ture|d\}}||}||}q|t vr|d\}}|||d}|||d}q|t vr|d}|d}q|t ur|j j |\}}||}||}q|tur|d\}}|ddur|d\}}t||}t||}nd}||}||}q|turnqt|tdt|tf|_|jS)NrrB)r?r>rK MAXREPEATr3minmaxCALL SUBPATTERN _REPEATCODES _UNITCODESGROUPREFr=r!rNSUCCESS) r%lohirSrTrjlhrrrr3s\               zSubPattern.getwidthr(r) rrrr&rMrYr[r_rardrfr+r3rrrrr<ns  ( r<c@sbeZdZddZddZddZddZd d Zd d Ze d dZ ddZ ddZ dddZ dS) TokenizercCs@t|t|_||_|jst|d}||_d|_d|_|dS)Nlatin1r)rOrIistextstringdecoded_stringr^next_Tokenizer__next)r%r{rrrr&s   zTokenizer.__init__cCs|j}z|j|}Wn tyd|_YdSw|dkr>|d7}z ||j|7}Wnty=td|jt|jddw|d|_||_dS)NrrBzbad escape (end of pattern))r^r| IndexErrorr}r-r{r))r%r^charrrr__nexts(    zTokenizer.__nextcCs||jkr |dSdS)NTFr}r~)r%rrrrmatchs zTokenizer.matchcCs|j}||Sr(r)r%thisrrrr.sz Tokenizer.getcCs:d}t|D]}|j}||vr|S||7}|q|SNr@)ranger}r~)r%ncharsetresult_crrrgetwhiles  zTokenizer.getwhilecCsnd} |j}||dur!|s|d||d|t|||kr2|s/|d|d |S||7}q)Nr@Tzmissing zmissing %s, unterminated namerB)r}r~r-r))r% terminatorr/rrrrrgetuntil s" zTokenizer.getuntilcC|jt|jpdSrr^r)r}r$rrrpossz Tokenizer.poscCrrrr$rrrtellszTokenizer.tellcCs||_|dSr()r^r~r]rrrseek!s zTokenizer.seekrcCst||j||Sr()r-r{r)r%msgoffsetrrrr-%szTokenizer.errorNrw)rrrr&r~rr.rrr;rrrr-rrrrrxs   rxc 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|)NrrBrhrincomplete escape %srU N{ missing {}character nameundefined character name %r\N{}.octal escape value %s outside of range 0-0o377 bad escape %s)ESCAPESr. CATEGORIESrJr HEXDIGITSr)r-LITERALintrzchr unicodedatarrordlookupKeyError TypeError OCTDIGITSDIGITS ValueError ASCIILETTERS)r9escapercrrcharnamerrr _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|)NrBrhrrrrrrrrrrrrrrrrr0rrr8invalid group reference %dr)rr.rrrr)r-rrrzrrrrrrrrrrr}r*r7r:rprr)r9rr=rcrrrgrouprrr_escapeds                        rcCstt|Sr()rGdictfromkeys)itemsrrr_uniqrercCsNg}|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)NTrB|r) r+rr_parser)r<rrJNEGATEextendrrK)r9r=verbosenestedr itemsappend sourcematchstart subpatternprefixitemsetrSrTrrr _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|)#r rr[rBz"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 %drhzbad character range %s-%s?)rrBr+rrr@,z"the repetition number is too largez"min repeat greater than max repeatzunsupported quantifier %rrgznothing to repeatzmultiple repeat.(zunexpected end of patternP<> group namebad character in group name %r=)unknown group name %rr8zunknown 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..addgroupTrrrBrr@rz missing 's"z"parse_template..)rxr.r+ groupindexrr-rrrrrrr)r,r}rrrrrrrOrI) r9r=sgetlappendr"r&rrr/r^isoctalrrrparse_templates                         ; r*cCsp|j}|jdd}|\}}|dd}z|D] \}}||p |||<qWn ty2td|w||S)Nrr)rr{rr-r)templaterremptyr*r!r^rrrrexpand_template*s     r-)F)rN)=__doc__ sre_constantsrr frozensetrrrrrrrrnrrrJrrCATEGORYrorrrAT_BEGINNING_STRING AT_BOUNDARYAT_NON_BOUNDARYCATEGORY_DIGITCATEGORY_NOT_DIGITCATEGORY_SPACECATEGORY_NOT_SPACE CATEGORY_WORDCATEGORY_NOT_WORD AT_END_STRINGrSRE_FLAG_IGNORECASErSRE_FLAG_MULTILINESRE_FLAG_DOTALLrrSRE_FLAG_TEMPLATErrrrr Exceptionrrr<rxrrrrrrrrr*r-rrrrst                  $rH<M :x< % U