Ë
    oj£$  ã                   ó  — d Z ddlmZ  G d„ de«      Z G d„ d«      Z G d„ d«      Z G d	„ d
«      Z G d„ d«      Zd„ Z	 G d„ d«      Z
 G d„ d«      Z G d„ d«      Z G d„ d«      Z G d„ d«      Zi Zd„ Zd„ Zd„ Zd„ Zd„ Zy)z¢
XPath query support.

This module provides L{XPathQuery} to match
L{domish.Element<twisted.words.xish.domish.Element>} instances against
XPath-like expressions.
é    )ÚStringIOc                   ó   — e Zd Zd„ Zy)ÚLiteralValuec                 ó   — | S ©N© ©ÚselfÚelems     ú:/usr/lib/python3/dist-packages/twisted/words/xish/xpath.pyÚvaluezLiteralValue.value   s   € Øˆó    N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r      s   „ ór   r   c                   ó   — e Zd Zd„ Zd„ Zy)Ú
IndexValuec                 ó*   — t        |«      dz
  | _        y )Né   )ÚintÚindex)r
   r   s     r   Ú__init__zIndexValue.__init__   s   € Ü˜“Z !‘^ˆ�
r   c                 ó4   — |j                   | j                     S r   )Úchildrenr   r	   s     r   r   zIndexValue.value   s   € Ø�}‰}˜TŸZ™ZÑ(Ð(r   N)r   r   r   r   r   r   r   r   r   r      s   „ ò$ó)r   r   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚAttribValuec                 óT   — || _         | j                   dk(  r| j                  | _        y y )NÚxmlns)Ú
attribnameÚvalue_nsr   )r
   r   s     r   r   zAttribValue.__init__    s%   € Ø$ˆŒØ�?‰?˜gÒ%ØŸ™ˆD�Jð &r   c                 ó   — |j                   S r   )Úurir	   s     r   r    zAttribValue.value_ns%   s   € Ø�x‰xˆr   c                 óf   — | j                   |j                  v r|j                  | j                      S y r   )r   Ú
attributesr	   s     r   r   zAttribValue.value(   s(   € Ø�?‰?˜dŸo™oÑ-Ø—?‘? 4§?¡?Ñ3Ð3àr   N)r   r   r   r   r    r   r   r   r   r   r      s   „ ò'ò
ór   r   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚCompareValuec                 óp   — || _         || _        |dk(  r| j                  | _        y | j                  | _        y )Nú=)ÚlhsÚrhsÚ_compareEqualr   Ú_compareNotEqual©r
   r)   Úopr*   s       r   r   zCompareValue.__init__0   s1   € ØˆŒØˆŒØ�Š9Ø×+Ñ+ˆD�Jà×.Ñ.ˆD�Jr   c                 óp   — | j                   j                  |«      | j                  j                  |«      k(  S r   ©r)   r   r*   r	   s     r   r+   zCompareValue._compareEqual8   ó'   € Ø�x‰x�~‰~˜dÓ# t§x¡x§~¡~°dÓ';Ñ;Ð;r   c                 óp   — | j                   j                  |«      | j                  j                  |«      k7  S r   r0   r	   s     r   r,   zCompareValue._compareNotEqual;   r1   r   N)r   r   r   r   r+   r,   r   r   r   r&   r&   /   s   „ ò/ò<ó<r   r&   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚBooleanValuea^  
    Provide boolean XPath expression operators.

    @ivar lhs: Left hand side expression of the operator.
    @ivar op: The operator. One of C{'and'}, C{'or'}.
    @ivar rhs: Right hand side expression of the operator.
    @ivar value: Reference to the method that will calculate the value of
                 this expression given an element.
    c                 óp   — || _         || _        |dk(  r| j                  | _        y | j                  | _        y )NÚand)r)   r*   Ú_booleanAndr   Ú
_booleanOrr-   s       r   r   zBooleanValue.__init__J   s/   € ØˆŒØˆŒØ�Š;Ø×)Ñ)ˆD�JàŸ™ˆD�Jr   c                 ór   — | j                   j                  |«      xr | j                  j                  |«      S )z£
        Calculate boolean and of the given expressions given an element.

        @param elem: The element to calculate the value of the expression from.
        r0   r	   s     r   r7   zBooleanValue._booleanAndR   s)   € ð �x‰x�~‰~˜dÓ#Ò<¨¯©¯©°tÓ(<Ð<r   c                 ór   — | j                   j                  |«      xs | j                  j                  |«      S )z¢
        Calculate boolean or of the given expressions given an element.

        @param elem: The element to calculate the value of the expression from.
        r0   r	   s     r   r8   zBooleanValue._booleanOrZ   s)   € ð �x‰x�~‰~˜dÓ#Ò; t§x¡x§~¡~°dÓ';Ð;r   N)r   r   r   Ú__doc__r   r7   r8   r   r   r   r4   r4   ?   s   „ ñò)ò=ó<r   r4   c                 ó4   — d| z  } t        «       |   «       }|S )z;
    Internal method which selects the function object
    z_%s_Function)Úglobals)ÚfnameÚ	klassnameÚcs      r   ÚFunctionrA   c   s$   € ð  Ñ&€IØŒ‹	�)ÑÓ€AØ€Hr   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)Ú_not_Functionc                 ó   — d | _         y r   ©Ú	baseValue©r
   s    r   r   z_not_Function.__init__m   s	   € Øˆ�r   c                 ó   — || _         y r   rE   )r
   rF   s     r   Ú	setParamsz_not_Function.setParamsp   s	   € Ø"ˆ�r   c                 ó:   — | j                   j                  |«       S r   )rF   r   r	   s     r   r   z_not_Function.values   s   € Ø—>‘>×'Ñ'¨Ó-Ð-Ð-r   N)r   r   r   r   rI   r   r   r   r   rC   rC   l   s   „ òò#ó.r   rC   c                   ó   — e Zd Zd„ Zd„ Zy)Ú_text_Functionc                  ó   — y r   r   rG   s    r   rI   z_text_Function.setParamsx   s   € Ør   c                 ó   — t        |«      S r   )Ústrr	   s     r   r   z_text_Function.value{   s   € Ü�4‹yÐr   N)r   r   r   rI   r   r   r   r   rL   rL   w   s   „ òór   rL   c                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)Ú	_Locationc                 ó.   — g | _         d | _        d | _        y r   ©Ú
predicatesÚelementNameÚchildLocationrG   s    r   r   z_Location.__init__€   ó   € ØˆŒØˆÔØ!ˆÕr   c                 óž   — | j                   d k7  r| j                   |j                  k7  ry| j                  D ]  }|j                  |«      rŒ y y©Nr   r   )rU   ÚnamerT   r   ©r
   r   Úps      r   ÚmatchesPredicatesz_Location.matchesPredicates…   sJ   € Ø×Ñ˜tÒ#¨×(8Ñ(8¸D¿I¹IÒ(EØà—‘ò 	ˆAØ—7‘7˜4•=Ùð	ð r   c                 ó¬   — | j                  |«      sy| j                  d k7  r3|j                  «       D ]  }| j                  j                  |«      sŒ y yyrY   )r]   rV   ÚelementsÚmatches©r
   r   r@   s      r   r`   z_Location.matches�   sW   € Ø×%Ñ% dÔ+Øà×Ñ Ò%Ø—]‘]“_ò �Ø×%Ñ%×-Ñ-¨aÕ0Ùðð ð r   c                 óÞ   — | j                  |«      sy | j                  d k7  r2|j                  «       D ]  }| j                  j                  ||«       Œ  y |j	                  t        |«      «       y r   )r]   rV   r_   ÚqueryForStringÚwriterO   )r
   r   Ú	resultbufr@   s       r   rc   z_Location.queryForStringœ   s`   € Ø×%Ñ% dÔ+Øà×Ñ Ò%Ø—]‘]“_ò @�Ø×"Ñ"×1Ñ1°!°YÕ?ñ@ð �O‰OœC ›IÕ&r   c                 óÌ   — | j                  |«      sy | j                  d k7  r2|j                  «       D ]  }| j                  j                  ||«       Œ  y |j	                  |«       y r   )r]   rV   r_   ÚqueryForNodesÚappend©r
   r   Ú
resultlistr@   s       r   rg   z_Location.queryForNodes¦   s^   € Ø×%Ñ% dÔ+Øà×Ñ Ò%Ø—]‘]“_ò @�Ø×"Ñ"×0Ñ0°°JÕ?ñ@ð ×Ñ˜dÕ#r   c                 ó  — | j                  |«      sy | j                  d k7  r2|j                  «       D ]  }| j                  j                  ||«       Œ  y |j                  D ]$  }t        |t        «      sŒ|j                  |«       Œ& y r   )r]   rV   r_   ÚqueryForStringListr   Ú
isinstancerO   rh   ri   s       r   rl   z_Location.queryForStringList°   s{   € Ø×%Ñ% dÔ+Øà×Ñ Ò%Ø—]‘]“_ò E�Ø×"Ñ"×5Ñ5°a¸ÕDñEð —]‘]ò )�Ü˜a¤Õ%Ø×%Ñ% aÕ(ñ)r   N)	r   r   r   r   r]   r`   rc   rg   rl   r   r   r   rQ   rQ      s    „ ò"ò
òò'ò$ó
)r   rQ   c                   óB   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zy
)Ú_AnyLocationc                 ó.   — g | _         d | _        d | _        y r   rS   rG   s    r   r   z_AnyLocation.__init__¾   rW   r   c                 óL   — | j                   D ]  }|j                  |«      rŒ y yrY   )rT   r   r[   s      r   r]   z_AnyLocation.matchesPredicatesÃ   s(   € Ø—‘ò 	ˆAØ—7‘7˜4•=Ùð	ð r   c                 ó�   — |j                   d k7  r| j                  |j                   |«       |j                  |j                  «       y r   )ÚparentÚlistParentsrh   rZ   )r
   r   Ú
parentlists      r   rt   z_AnyLocation.listParentsÉ   s4   € Ø�;‰;˜$ÒØ×Ñ˜TŸ[™[¨*Ô5Ø×Ñ˜$Ÿ)™)Õ$r   c                 óü   — | j                   d k(  s| j                   |j                  k(  rT| j                  |«      rC| j                  d k7  r3|j	                  «       D ]  }| j                  j                  |«      sŒ y yyy©NTF©rU   rZ   r]   rV   r_   r`   ra   s      r   ÚisRootMatchz_AnyLocation.isRootMatchÎ   sv   € à×Ñ Ò$¨×(8Ñ(8¸D¿I¹IÒ(EØ×$Ñ$ TÔ*Ø×!Ñ! TÒ)ØŸ™›ò $�AØ×)Ñ)×1Ñ1°!Õ4Ù#ð$ð
 ð Ør   c                 óV  — | j                   d k(  s| j                   |j                  k(  rW| j                  |«      rF| j                  d k7  r5|j	                  «       D ]!  }| j                  j                  |«      sŒ|c S  y |S |j	                  «       D ]  }| j                  |«      sŒ|c S  y r   rx   ra   s      r   ÚfindFirstRootMatchz_AnyLocation.findFirstRootMatchÚ   s¥   € à×Ñ Ò$¨×(8Ñ(8¸D¿I¹IÒ(EØ×$Ñ$ TÔ*ð
 ×!Ñ! TÒ)ØŸ™›ò !�AØ×)Ñ)×1Ñ1°!Õ4Ø šð!ð ð �ð
 —]‘]“_ò �Ø—<‘< •?Ø’Hðð r   c                 óx   — | j                  |«      ry|j                  «       D ]  }| j                  |«      sŒ y yrw   )ry   r_   r`   ra   s      r   r`   z_AnyLocation.matchesô   s=   € Ø×Ñ˜DÔ!Øð
 —]‘]“_ò  �Ø—<‘< •?Ùð ð r   c                 ó   — t        d«      ‚)Nz2queryForString is not implemented for any location)ÚNotImplementedError)r
   r   re   s      r   rc   z_AnyLocation.queryForString  s   € Ü!Ð"VÓWÐWr   c                 ó–   — | j                  |«      r|j                  |«       |j                  «       D ]  }| j                  ||«       Œ y r   )ry   rh   r_   rg   ri   s       r   rg   z_AnyLocation.queryForNodes  sE   € à×Ñ˜DÔ!Ø×Ñ˜dÔ#ð —‘“ò 	.ˆAØ×Ñ˜q *Õ-ñ	.r   c                 óÚ   — | j                  |«      r3|j                  D ]$  }t        |t        «      sŒ|j	                  |«       Œ& |j                  «       D ]  }| j                  ||«       Œ y r   )ry   r   rm   rO   rh   r_   rl   ri   s       r   rl   z_AnyLocation.queryForStringList  sb   € Ø×Ñ˜DÔ!Ø—]‘]ò )�Ü˜a¤Õ%Ø×%Ñ% aÕ(ð)ð —‘“ò 	3ˆAØ×#Ñ# A zÕ2ñ	3r   N)r   r   r   r   r]   rt   ry   r{   r`   rc   rg   rl   r   r   r   ro   ro   ½   s0   „ ò"ò
ò%ò

òò4òXò.ó3r   ro   c                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)Ú
XPathQueryc                 ój   — || _         ddlm}m}  | ||«      «      } t	        |d«      «       | _        y )Nr   )ÚXPathParserÚXPathParserScannerÚXPATH)ÚqueryStrÚtwisted.words.xish.xpathparserr„   r…   ÚgetattrÚbaseLocation)r
   r‡   r„   r…   Úparsers        r   r   zXPathQuery.__init__  s0   € Ø ˆŒçRáÑ/°Ó9Ó:ˆØ4œG F¨GÓ4Ó6ˆÕr   c                 ó6   — | j                   j                  «       S r   )r‡   Ú__hash__rG   s    r   r�   zXPathQuery.__hash__  s   € Ø�}‰}×%Ñ%Ó'Ð'r   c                 ó8   — | j                   j                  |«      S r   )rŠ   r`   r	   s     r   r`   zXPathQuery.matches"  s   € Ø× Ñ ×(Ñ(¨Ó.Ð.r   c                 ón   — t        «       }| j                  j                  ||«       |j                  «       S r   )r   rŠ   rc   Úgetvalue©r
   r   Úresults      r   rc   zXPathQuery.queryForString%  s,   € Ü“ˆØ×Ñ×(Ñ(¨¨vÔ6Ø�‰Ó Ð r   c                 ó`   — g }| j                   j                  ||«       t        |«      dk(  ry |S ©Nr   )rŠ   rg   Úlenr‘   s      r   rg   zXPathQuery.queryForNodes*  s1   € ØˆØ×Ñ×'Ñ'¨¨fÔ5Üˆv‹;˜!ÒØàˆMr   c                 ó`   — g }| j                   j                  ||«       t        |«      dk(  ry |S r”   )rŠ   rl   r•   r‘   s      r   rl   zXPathQuery.queryForStringList2  s1   € ØˆØ×Ñ×,Ñ,¨T°6Ô:Üˆv‹;˜!ÒØàˆMr   N)	r   r   r   r   r�   r`   rc   rg   rl   r   r   r   r‚   r‚     s    „ ò7ò(ò/ò!ò
ór   r‚   c                 óH   — | t         vrt        | «      t         | <   t         |    S r   )Ú__internedQueriesr‚   )ÚqueryStrings    r   ÚinternQueryrš   >  s&   € ØÔ+Ñ+Ü)3°KÓ)@Ô˜+Ñ&Ü˜[Ñ)Ð)r   c                 ó6   — t        | «      j                  |«      S r   )rš   r`   ©Úxpathstrr   s     r   r`   r`   D  s   € Ü�xÓ ×(Ñ(¨Ó.Ð.r   c                 ó6   — t        | «      j                  |«      S r   )rš   rl   rœ   s     r   rl   rl   H  s   € Ü�xÓ ×3Ñ3°DÓ9Ð9r   c                 ó6   — t        | «      j                  |«      S r   )rš   rc   rœ   s     r   rc   rc   L  s   € Ü�xÓ ×/Ñ/°Ó5Ð5r   c                 ó6   — t        | «      j                  |«      S r   )rš   rg   rœ   s     r   rg   rg   P  s   € Ü�xÓ ×.Ñ.¨tÓ4Ð4r   N)r;   Úior   rO   r   r   r   r&   r4   rA   rC   rL   rQ   ro   r‚   r˜   rš   r`   rl   rc   rg   r   r   r   ú<module>r¢      s¡   ðñõ ô�3ô ÷
)ñ )÷ñ ÷ <ñ <÷ !<ñ !<òH÷.ñ .÷ñ ÷;)ñ ;)÷|V3ñ V3÷r"ñ "ðJ Ð ò*ò/ò:ò6ó5r   