3 \&@sddlZejdZdddZddZddZd d Zd d Zd dZddZ ddZ eeee ee dZ iZ GdddZ dddZd ddZd!ddZd"ddZdS)#Nz\('[^']*'|\"[^\"]*\"|::|//?|\.\.|\(\)|[/.*:\[\]\(\)@=])|((?:\{[^}]+\})?[^/\[\]\(\)@=\s]+)|\s+c csxtj|D]}|d}|r|ddkrd|kry6|jdd\}}|sJt|dd|||ffVWqtk rtd|YqXq |Vq WdS)Nr{:z{%s}%sz!prefix %r not found in prefix map)xpath_tokenizer_refindallsplitKeyError SyntaxError)pattern namespacestokentagprefixZurir#/usr/lib64/python3.6/ElementPath.pyxpath_tokenizerIsrcCsF|j}|dkrBi|_}x(|jjD]}x|D] }|||<q.Wq$W|S)N) parent_maprootiter)contextrperrrget_parent_mapWs  rcs|dfdd}|S)Nrc3s0x*|D]"}x|D]}|jkr|VqWqWdS)N)r )rresultelemr)r rrselectbs   zprepare_child..selectr)nextr rr)r r prepare_child`s rcCs dd}|S)Ncssx|D]}|EdHqWdS)Nr)rrrrrrrjs zprepare_star..selectr)rr rrrr prepare_starisrcCs dd}|S)Ncss|EdHdS)Nr)rrrrrrpszprepare_self..selectr)rr rrrr prepare_selfosrc s\y |}Wntk rdSX|ddkr2dn|dsD|dntdfdd}|S)Nr*rzinvalid descendantc3s4x.|D]&}x |jD]}||k r|VqWqWdS)N)r)rrrr)r rrrs z"prepare_descendant..select) StopIterationr )rr rr)r rprepare_descendantts    r"cCs dd}|S)NcssDt|}i}x2|D]*}||kr||}||krd||<|VqWdS)N)r)rrrZ result_maprparentrrrrs zprepare_parent..selectr)rr rrrrprepare_parents r$c s*g}g}xy |}Wntk r(dSX|ddkr8P|drh|ddddkrhd|dddf}|j|dpvd|j|dq Wdj|}|dkr|dfd d }|S|d kr|d|dfd d }|S|dkrtjd |d r|dfdd }|S|dkrVtjd |d rV|d|dfdd }|S|dkst|dkst|dkr|dkrt|dddkrtdnl|ddkrtd|dkr yt|ddWntk rtdYnXdkrtdndfdd }|StddS) Nr]rz'"'-z@-c3s&x |D]}|jdk r|VqWdS)N)get)rrr)keyrrrs z!prepare_predicate..selectz@-='c3s&x |D]}|jkr|VqWdS)N)r))rrr)r*valuerrrs z\-?\d+$c3s&x |D]}|jdk r|VqWdS)N)find)rrr)r rrrs z-='c3s@x:|D]2}x,|jD]}dj|jkr|VPqWqWdS)Nr()rjoinZitertext)rrrr)r r+rrrs  z-()z-()-zXPath position >= 1 expectedZlastzunsupported functionzunsupported expressionz)XPath offset from last() must be negativec 3sbt|}xT|D]L}y.||}t|j|j}||kr>|VWqttfk rXYqXqWdS)N)rlistrr IndexErrorr)rrrrr#Zelems)indexrrrs   zinvalid predicater2r2r2)r!appendr-rematchintr ValueError)rr Z signatureZ predicaterr)r1r*r r+rprepare_predicatesd            r9)r(r .z..z//[c@seZdZdZddZdS)_SelectorContextNcCs ||_dS)N)r)selfrrrr__init__sz_SelectorContext.__init__)__name__ __module__ __qualname__rr>rrrrr<sr<c !Csh||dkrdntt|jf}|dddkr8|d}y t|}Wntk r:ttdkrjtj|dddkrtdtt ||j }y |}Wnt k rdSXg}xvy|j t |d||Wnt k rtdYnXy|}|ddkr|}Wqt k r(PYqXqW|t|<YnX|g}t|}x|D]} | ||}qPW|S) Nr/r dz#cannot use absolute path on elementrz invalid pathr2)tuplesorteditems_cacherlenclearr rr__next__r!r4opsr<) rpathr Z cache_keyZselectorrr rrrrrriterfindsD      rMcCstt|||dS)N)rrM)rrLr rrrr,)sr,cCstt|||S)N)r/rM)rrLr rrrr/src Cs4ytt|||}|jpdStk r.|SXdS)Nr()rrMtextr!)rrLdefaultr rrrfindtext5s  rP)N)N)N)N)NN)r5compilerrrrrrr"r$r9rKrGr<rMr,rrPrrrr;s,    Y )