
    h                        S SK Jr  S SKJrJrJrJr  S SKJr	  S SKJ
r  S SKJrJrJr  S SKJr  S SKJr  \(       a  S SKJr   " S	 S
\5      r " S S\5      r " S S5      r " S S\\	5      r " S S\\5      r
\
" 5       rS\S\4S jrg)    )	lru_cache)TYPE_CHECKINGAnyOptionalProtocol)GenericTranslator)HTMLTranslator)ElementFunctionalPseudoElementPseudoElement)ExpressionError)	XPathExpr)Selfc                      ^  \ rS rSr% Sr\\S'   Sr\\	   \S'   \
  SS\S\S\\	   SS4S	 jj5       rS\	4U 4S
 jjrSSS\	S\S\S\SS4U 4S jjrSrU =r$ )r      FtextnodeN	attributexpathreturnr   c                 j    U " UR                   UR                  UR                  S9nX$l        X4l        U$ )N)pathelement	condition)r   r   r   r   r   )clsr   r   r   xs        [/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/parsel/csstranslator.py
from_xpathXPathExpr.from_xpath   s-     UZZ%//R
    c                   > [         TU ]  5       nU R                  (       a-  US:X  a  SnO$UR                  S5      (       a	  US S S-   nOUS-  nU R                  b-  UR                  S5      (       a  US S nUSU R                   3-  nU$ )N*ztext()z::*/*z/text()z/@)super__str__r   endswithr   )selfr   	__class__s     r   r%   XPathExpr.__str__    s    w ==s{w''CRy8+	!>>%}}W%%CRyb())Dr   r'   combinerotherargskwargsc                    > [        U[        5      (       d  [        S[         S[	        U5       35      e[
        TU ]  " X/UQ70 UD6  UR                  U l        UR                  U l        U $ )NzExpressions of type zO.XPathExpr can ony join expressions of the same type (or its descendants), got )	
isinstancer   
ValueError__name__typer$   joinr   r   )r'   r*   r+   r,   r-   r(   s        r   r3   XPathExpr.join1   sm     %++&xj 1??CE{mM  	X6t6v6r   )r   r   )FN)r1   
__module____qualname____firstlineno__r   bool__annotations__r   r   strclassmethodOriginalXPathExprr   r%   r   r3   __static_attributes____classcell__r(   s   @r   r   r      s    Hd#Ix}# #'		 	 	 C=		
 
	 	 " ! 	
  
 r   r   c                   @    \ rS rSrS\S\4S jrS
S\S\S\4S jjrSr	g	)TranslatorProtocolD   selectorr   c                     g N )r'   rC   s     r   xpath_element TranslatorProtocol.xpath_elementE       r   cssprefixc                     g rE   rF   )r'   rJ   rK   s      r   css_to_xpathTranslatorProtocol.css_to_xpathH   rI   r   rF   N).)
r1   r5   r6   r7   r
   r<   rG   r:   rM   r=   rF   r   r   rA   rA   D   s5    g 2C  S 3  r   rA   c                   z   ^  \ rS rSrSrS\S\S\4U 4S jjrS\	S\
S\	4S	 jrS\	S
\S\4S jrS\	S\4S jrSrU =r$ )TranslatorMixinL   zThis mixin adds support to CSS pseudo elements via dynamic dispatch.

Currently supported pseudo-elements are ``::text`` and ``::attr(ATTR_NAME)``.
r'   rC   r   c                 L   > [         TU ]  U5      n[        R                  U5      $ rE   )r$   rG   r   r   )r'   rC   r   r(   s      r   rG   TranslatorMixin.xpath_elementR   s#    %h/##E**r   r   pseudo_elementc                 \   [        U[        5      (       aV  SUR                  R                  SS5       S3n[	        XS5      nU(       d  [        SUR                   S35      eU" X5      nU$ SUR                  SS5       S3n[	        XS5      nU(       d  [        S	U S
35      eU" U5      nU$ )zA
Dispatch method that transforms XPath to support pseudo-element
xpath_-__functional_pseudo_elementNz The functional pseudo-element ::z() is unknown_simple_pseudo_elementzThe pseudo-element ::z is unknown)r/   r   namereplacegetattrr   )r'   r   rT   method_namemethods        r   xpath_pseudo_element$TranslatorMixin.xpath_pseudo_elementW   s     n&=>>">#6#6#>#>sC#H"IIcdKT5F%6~7J7J6K=Y  51E  //S9::PQ  T5F%+N+;;G  5MEr   functionc                     UR                  5       S/S/4;  a  [        SUR                  < 35      e[        R	                  XR                  S   R
                  S9$ )z@Support selecting attribute values using ::attr() pseudo-elementSTRINGIDENTz4Expected a single string or ident for ::attr(), got r   )r   )argument_typesr   	argumentsr   r   value)r'   r   rb   s      r   $xpath_attr_functional_pseudo_element4TranslatorMixin.xpath_attr_functional_pseudo_elementq   sc     ""$hZ',CC!FxGYGYF\]  ##E5G5G5J5P5P#QQr   c                 *    [         R                  USS9$ )z8Support selecting text nodes using ::text pseudo-elementT)r   )r   r   )r'   r   s     r    xpath_text_simple_pseudo_element0TranslatorMixin.xpath_text_simple_pseudo_element{   s    ##ED#99r   rF   )r1   r5   r6   r7   __doc__rA   r
   r   rG   r<   r   r`   r   ri   rl   r=   r>   r?   s   @r   rP   rP   L   sz    
+. +' +i +
&8E	4R&R2IR	R:6G :I : :r   rP   c                   N   ^  \ rS rSr\" SS9S	S\S\S\4U 4S jjj5       rSrU =r$ )
r         maxsizerJ   rK   r   c                 "   > [         TU ]  X5      $ rE   r$   rM   r'   rJ   rK   r(   s      r   rM   GenericTranslator.css_to_xpath       w#C00r   rF   zdescendant-or-self::	r1   r5   r6   r7   r   r:   rM   r=   r>   r?   s   @r   r   r      /    s1 1S 1c 1 1r   r   c                   N   ^  \ rS rSr\" SS9S	S\S\S\4U 4S jjj5       rSrU =r$ )
r	      rq   rr   rJ   rK   r   c                 "   > [         TU ]  X5      $ rE   ru   rv   s      r   rM   HTMLTranslator.css_to_xpath   rx   r   rF   ry   rz   r?   s   @r   r	   r	      r{   r   r	   queryr   c                 ,    [         R                  U 5      $ )z4Return translated XPath version of a given CSS query)_translatorrM   )r   s    r   	css2xpathr      s    ##E**r   N)	functoolsr   typingr   r   r   r   	cssselectr   OriginalGenericTranslatorr	   OriginalHTMLTranslatorcssselect.parserr
   r   r   cssselect.xpathr   r   r<   typing_extensionsr   rA   rP   r   r:   r   rF   r   r   <module>r      s     9 9 D > L L + :&1! 1j 1: 1:h1)B 11_&< 1 +S +S +r   