o ?Og6@sddlZedZd"ddZddZddZd d Zd d Zd dZddZ ddZ ddZ ddZ eee e e e dZ iZGdddZd"ddZd"ddZd"ddZd#d d!ZdS)$Nz`('[^']*'|\"[^\"]*\"|::|//?|\.\.|\(\)|!=|[/.*:\[\]\(\)@=])|((?:\{[^}]+\})?[^/\[\]\(\)@!=\s]+)|\s+c cs|r|dnd}d}t|D]U}|\}}|r_|ddkr_d|vrK|dd\}}z|s0t|d|||ffVWntyJtd|dw|rY|sY|d||ffVn|Vd}q|V|d k}qdS) NFr{:z{%s}%sz!prefix %r not found in prefix map@)getxpath_tokenizer_refindallsplitKeyError SyntaxError) pattern namespacesZdefault_namespaceZparsing_attributetokenZttypetagprefixZurir|j}|duri|_}|jD] }|D]}|||<qq|SN) parent_maprootiter)contextrperrrget_parent_mapbs  rcCs |dddkp|dddkS)N{*}}*rrrrr_is_wildcard_tagls r"csttdkrfdd}|Sdkrfdd}|SdddkrGddtt dddfd d}|Sd dd krgdd tdtfd d}|Std)Nz{*}*c3s"|D] }|jr|VqdSrr!rresultelem _isinstance_strrrselectvs  z_prepare_tag..selectz{}*c3s2|D]}|j}|r|ddkr|VqdS)Nrrr!rr$r%Zel_tagr&rrr)|rrc3s:|D]}|j}|ks|r|kr|VqdSrr!r*)r'r(no_nssuffixrrrr)srr c3s2|D]}|j}|r|kr|VqdSrr!r*)r'r(nsns_onlyrrr)r+zinternal parser error, got ) isinstancestrslicelen RuntimeError)rr)r)r'r(r-r0r1r.rr _prepare_tagps&     r7csT|dtrtfdd}|Sdddkr"ddfdd}|S)Nrcdd}|||S)Ncss|D]}|EdHqdSrr)r$r%rrr select_child z3prepare_child..select..select_childrrr$r9 select_tagrrr)szprepare_child..selectr,{}c3s*|D]}|D] }|jkr|VqqdSrr!rr$r%rr!rrr)s )r"r7nextrr)rr=rr prepare_childs    rCcC dd}|S)Ncss|D]}|EdHqdSrrr#rrrr)r:zprepare_star..selectrr@rrr prepare_starsrEcCrD)Ncss|EdHdSrr)rr$rrrr)szprepare_self..selectrr@rrr prepare_selfsrFcsz|}Wn tyYdSw|ddkrdn |ds"|dntdtr6tfdd}|SdddkrDddfd d}|S) Nr*rzinvalid descendantcr8)Ncss,|D]}|D] }||ur|Vq qdSrr)r$r%rrrrr9s z8prepare_descendant..select..select_childrr;r<rrr)sz"prepare_descendant..selectr,r>c3s.|D]}|D] }||ur|Vq qdSrrHr?r!rrr)s) StopIterationr r"r7r@rrBrprepare_descendants$       rJcCrD)NcssBt|}i}|D]}||vr||}||vrd||<|Vq dSr)r)rr$rZ result_mapr%parentrrrr)szprepare_parent..selectrr@rrrprepare_parents rLcsg}g} z|}Wn tyYdSw|ddkrn.|dkr!q|dr9|ddddvr9d|dddf}||dp@d||dqd |}|d kr_|dfd d }|S|d ksg|dkr|d|dfdd }fdd}d|vr|S|S|dkrtd|ds|dfdd }|S|dks|dks|dks|dkrtd|ds|d|dr·fdd }fdd}n fdd }fdd}d|vr|S|S|dks|dks|dkrA|dkrt|dddkrtdn3|dd krtd!|dkr7z t|d"dWn ty,td#wd$kr6td%ndfd&d }|Std')(Nrr])rrz'"'r/-rz@-c3$|D] }|dur|VqdSrrr#)keyrrr) z!prepare_predicate..selectz@-='z@-!='c3s$|D] }|kr|VqdSrrQr#rRvaluerrr)rSc3s0|D]}|}dur|kr|VqdSrrQ)rr$r%Z attr_valuerTrrselect_negateds z)prepare_predicate..select_negatedz!=z\-?\d+$c3rPr)findr#r!rrr)rSz.='z.!='z-='z-!='c3s<|D]}|D]}d|kr|Vnq qdSNr)r joinitertextr?rrUrrr)c3s<|D]}|D]}d|kr|Vnq qdSrX)iterfindrYrZr?r[rrrV"r\c3s(|D]}d|kr|VqdSrXrYrZr#rUrrr)) c3s(|D]}d|kr|VqdSrXr^r#r_rrrV-r`z-()z-()-zXPath position >= 1 expectedZlastzunsupported functionr,zunsupported expressionrz)XPath offset from last() must be negativec 3s\t|}|D]$}z||}t||j}||ur|VWqttfy+YqwdSr)rlistr r IndexErrorr )rr$rr%rKZelems)indexrrr)Es zinvalid predicate)rIappendrYrematchintr ValueError)rArZ signatureZ predicater)rVr)rcrRrrUrprepare_predicates              ri)rrG.z..z//[c@seZdZdZddZdS)_SelectorContextNcCs ||_dSr)r)selfrrrr__init__`s z_SelectorContext.__init__)__name__ __module__ __qualname__rrnrrrrrl^s rlc CsP|dddkr |d}|f}|r|tt|7}zt|}Wnstyttdkr2t|dddkr>tdtt ||j }z|}Wn t yVYYdSwg} z| t |d||Wn t yttddwz|}|ddkr|}Wn t yYnwqZ|t|<Ynw|g}t|}|D]} | ||}q|S) Nr//rGdrz#cannot use absolute path on elementrz invalid path)tuplesorteditems_cacher r5clearr rr__next__rIrdopsrl) r%pathrZ cache_keyZselectorrArr$rr)rrrr]hsR           r]cCstt|||dSr)rAr]r%r{rrrrrWsrWcCstt|||Sr)rar]r|rrrr sr cCs4ztt|||}|jp dWSty|YSwrX)rAr]textrI)r%r{defaultrrrrfindtexts   rr)NN)recompilerrrr"r7rCrErFrJrLrirzrwrlr]rWr rrrrrs6:  ) q  ,