
    OwgJ                         d dl Z d dlmZ d dlmZ d dlmZ ddlmZ ddlm	Z	  e j                  d      j                  Zdd	Z G d
 d      Zd Zd Zy)    N)urlparse)	parse_nth)ascii_lower   )parser)SelectorErrorz	[^ 	
]+c                 f    t        j                  | |      D cg c]  }t        |       c}S c c}w )a  Compile a (comma-separated) list of selectors.

    :param input:
        A string, or an iterable of tinycss2 component values such as
        the :attr:`tinycss2.ast.QualifiedRule.prelude` of a style rule.
    :param namespaces:
        A optional dictionary of all `namespace prefix declarations
        <http://www.w3.org/TR/selectors/#nsdecl>`_ in scope for this selector.
        Keys are namespace prefixes as strings, or ``None`` for the default
        namespace.
        Values are namespace URLs as strings.
        If omitted, assume that no prefix is declared.
    :returns:
        A list of opaque :class:`compiler.CompiledSelector` objects.

    )r   parseCompiledSelector)input
namespacesselectors      J/var/www/horilla/myenv/lib/python3.12/site-packages/cssselect2/compiler.pycompile_selector_listr      s4    & UJ7 	"  s   .c                       e Zd ZdZd Zy)r   z&Abstract representation of a selector.c                    t        |j                        }|dk(  | _        t        t        t
        d}t        d|z   |i       | _        |j                  | _        |j                  | _	        d | _
        d | _        d | _        d | _        d | _        d| _        |j                  }t!        |t"        j$                        r|j&                  }|j(                  D ]  }t!        |t"        j*                        r|j,                  | _
        /t!        |t"        j.                        r|j                  | _        [t!        |t"        j0                        r#|j                  | _        |j                  | _        t!        |t"        j2                        r|j                  | _        t!        |t"        j4                        s|j6                  dk(  sd| _         y )N0)split_whitespacer   r   zlambda el: FlangT)_compile_nodeparsed_treenever_matchesr   r   r   evaltestspecificitypseudo_elementid
class_name
local_namelower_local_name	namespacerequires_lang_attr
isinstancer   CombinedSelectorrightsimple_selectors
IDSelectoridentClassSelectorLocalNameSelectorNamespaceSelectorAttributeSelectorname)selfparsed_selectorsourceeval_globalsnodesimple_selectors         r   __init__zCompiledSelector.__init__'   sn   ::;#s] 0& 

 /rB	*66-<< $"'**dF334::D#44 	3O/6+<+<=)//OV-A-AB"1"<"<OV-E-EF"1"<"<(7(H(H%OV-E-EF!0!:!:OV-E-EF"''61.2D+	3    N)__name__
__module____qualname____doc__r4    r5   r   r   r   %   s
    0!3r5   r   c                    t        | t        j                        rt        | j                        }|dk(  ry|dk(  r8| j
                  dv rd}n| j
                  dv rd}nt        d| j
                        | j
                  dk(  rd	| d
}nX| j
                  dk(  rd| d}nB| j
                  dk(  rd| d}n,| j
                  dk(  rd	| d}nt        d| j
                        t        | j                        }|dk(  ry|dk(  r|S d| d| dS t        | t        j                        rit        t        | j                        D cg c]	  }|dk7  r| }}t        |      dk(  r|d   }|S d|v rd}|S |rdj                  d |D              }|S d}|S t        | t        j                        r^| j                  D  cg c]  } t        | j                         c} D cg c]	  }|dk7  r| }}|syddj                  d |D               dS t        | t        j                         rg }| j                  D ]  }t        |j"                  j                        }|dk(  r(|j
                  dk(  rd}	n5|j
                  dk(  rd}	n#|j
                  dk(  rd}	n|j
                  dk(  rd}	|j%                  d | d!	 d"        dj                  |      S t        | t        j&                  t        j(                  f      rZ| j                  D  cg c]  } t        | j                         c} D cg c]	  }|dk7  r| }}|sydj                  d# |D              S t        | t        j*                        rE| j,                  | j.                  k(  rd$| j.                  S d%| j,                  d&| j.                  dS t        | t        j0                        rd'| j2                  S t        | t        j4                        r| j6                  d(S t        | t        j8                        rd)| j:                  S t        | t        j<                        r| j2                  | j2                  r| j>                  | j@                  k(  r&tC        d*| j2                   d+| j>                         }
nd*| j2                   d+| j@                   }d*| j2                   d+| j>                   }d|d&|d}
nP| j>                  | j@                  k(  rtC        | j>                        }
n!| j@                  | j>                  }}d|d&|d}
| jD                  }| jF                  |
 d,S | jF                  d-k(  rd.|
 d/|S | jF                  d0k(  r8t        |jI                               dk7  s|jK                         |k7  ry|d1|
 d2S | jF                  d3k(  rd4|d5|d6z   d7|
 d8S | jF                  d9k(  r|r	d.|
 d:|dS y| jF                  d;k(  r|r	d.|
 d<|dS y| jF                  d=k(  r|r|d>|
 d?S yt        d@| jF                        tL        t        | t        jN                        r| j>                  dAv r(tQ        dBdCdD      }|dEz  }| j>                  dFk(  r|dGz  }|S | j>                  dHk(  r5tQ        dIdJdKdLdM      }tQ        dNdOdP      }tQ        dBdCdD      }d| dQ| dR| dSS | j>                  dTk(  r%tQ        dIdJdKdLdM      }tQ        dNdOdP      }d| dU| dVS | j>                  dWk(  r tQ        dJdO      }tQ        dM      }d| dX| dYS | j>                  dZv ry| j>                  d[v ry\| j>                  d]k(  ry^| j>                  d_k(  ry`| j>                  dak(  r	 yb| j>                  dck(  r	 yd| j>                  dek(  ryf| j>                  dgk(  r	 yh| j>                  dik(  ryjt        dk| j>                        t        | t        jR                        r| j>                  dlk(  rg }| jT                  D cg c]  }|jV                  dmvr| }}|r|jY                  d      }|jV                  dnk(  r|j%                  |jZ                         n?|jV                  dok(  r%|j%                  t]        |jD                               nt        dp      |r:|jY                  d      }|jV                  dnk7  r|jD                  dqk7  rt        dp      |rdj                  dr |D              S g }g }|}| jT                  D ]8  }|jV                  dnk(  r|jD                  dsk(  r||u r|}(|j%                  |       : |rdj                  dt t        j^                  |      D              }| j>                  duk(  rdv| d"}nX| j>                  dwk(  rdx| d"}nB| j>                  dyk(  rdz| d{}n,| j>                  d|k(  rd}| d{}nt        dk| j>                        |d~| dz  }n{||u rt        d| j>                   d      | j>                  duk(  rd}nL| j>                  dwk(  rd}n:| j>                  dyk(  rd}n(| j>                  d|k(  rd}nt        dk| j>                        ta        |      }|t        d| j>                   d      |\  }}|dz
  }|dk(  rd| d/| S d| d| d| d8S tc        tW        |       |       c c}w c c} w c c}w c c} w c c}w c c}w )zReturn a boolean expression, as a Python source string.

    When evaluated in a context where the `el` variable is an
    :class:`cssselect2.tree.Element` object, tells whether the element is a
    subject of `selector`.

    r   1) >zel.parent is not None)~+zel.previous is not NonezUnknown combinatorr=   zany((z) for el in el.ancestors)r>   znext(el is not None and (z) for el in [el.parent])r@   z) for el in [el.previous])r?   z!) for el in el.previous_siblings)(z) and ()r   r   z and c              3   (   K   | ]
  }d | d  ywrA   rB   Nr:   ).0es     r   	<genexpr>z _compile_node.<locals>.<genexpr>   s     BQ!A3aB   znot (z or c              3   (   K   | ]
  }d | d  ywrD   r:   rE   exprs     r   rG   z _compile_node.<locals>.<genexpr>   s     "K4QtfA;"KrH   zlist(el.iter_subtree())[1:]zel.iter_children()z!list(el.iter_next_siblings())[:1]zel.iter_next_siblings()z(any(z for el in ))c              3   (   K   | ]
  }d | d  ywrD   r:   rJ   s     r   rG   z _compile_node.<locals>.<genexpr>   s     C4QtfA;CrH   zel.local_name == zel.local_name == (z if el.in_html_document else zel.namespace_url == z in el.classesz	el.id == {}z in el.etree_element.attrib=zel.etree_element.get(z) == z~=z* in split_whitespace(el.etree_element.get(z, ""))z|=z
next(v == z) or      (v is not None and v.startswith(-z&))     for v in [el.etree_element.get(z)])z^=z, "").startswith(z$=z, "").endswith(z*=z in el.etree_element.get(z, "")zUnknown attribute operator)linkzany-link
local-linkaarearR   z. and el.etree_element.get("href") is not None rS   z5and not urlparse(el.etree_element.get("href")).schemeenabledbuttonr   selecttextareaoptionoptgroupmenuitemfieldsetzS and el.etree_element.get("disabled") is None  and not el.in_disabled_fieldset) or(z3 and el.etree_element.get("disabled") is None) or (z. and el.etree_element.get("href") is not None)disabledzT and (el.etree_element.get("disabled") is not None  or el.in_disabled_fieldset)) or(z2 and el.etree_element.get("disabled") is not None)checkedz and el.etree_element.get("checked") is not None and  ascii_lower(el.etree_element.get("type", ""))   in ("checkbox", "radio")) or (z2 and el.etree_element.get("selected") is not None))visitedhoveractivefocuszfocus-withinzfocus-visibletargetztarget-withincurrentpastfutureplayingpausedseeking	bufferingstalledmutedzvolume-lockedz
user-validzuser-invalid)rootscopezel.parent is Nonezfirst-childzel.index == 0z
last-childz&el.index + 1 == len(el.etree_siblings)zfirst-of-typezKall(s.tag != el.etree_element.tag    for s in el.etree_siblings[:el.index])zlast-of-typezOall(s.tag != el.etree_element.tag    for s in el.etree_siblings[el.index + 1:])z
only-childzlen(el.etree_siblings) == 1zonly-of-typez_all(s.tag != el.etree_element.tag or i == el.index    for i, s in enumerate(el.etree_siblings))emptyz0not (el.etree_children or el.etree_element.text)zUnknown pseudo-classr   )
whitespacecommentr(   stringzInvalid arguments for :lang(),c              3   4   K   | ]  }d |d|dz   d  yw)zel.lang == z or el.lang.startswith(rQ   rB   Nr:   )rE   r   s     r   rG   z _compile_node.<locals>.<genexpr>Q  s-      # dX%<dSj<LAN#s   ofc              3   F   K   | ]  }t        |j                          y wN)r   r   )rE   r   s     r   rG   z _compile_node.<locals>.<genexpr>`  s%      $A  "("6"67$As   !z	nth-childz)sum(1 for el in el.previous_siblings if (znth-last-childzBsum(1 for el in    tuple(el.iter_siblings())[el.index + 1:]   if (znth-of-typez@sum(1 for s in (      el for el in el.previous_siblings     if (z5))    if s.etree_element.tag == el.etree_element.tag)znth-last-of-typezYsum(1 for s in (      el for el in      tuple(el.iter_siblings())[el.index + 1:]     if (zif (z) else float("nan")zInvalid arguments for :z()zel.indexz%len(el.etree_siblings) - el.index - 1zPsum(1 for s in el.etree_siblings[:el.index]    if s.tag == el.etree_element.tag)zTsum(1 for s in el.etree_siblings[el.index + 1:]    if s.tag == el.etree_element.tag)z/next(r == 0 and n >= 0    for n, r in [divmod((z) - , )2r#   r   r$   r   left
combinatorr   r%   CompoundSelectormapr&   lenjoinNegationSelectorselector_listr   RelationalSelectorr   appendMatchesAnySelectorSpecificityAdjustmentSelectorr*   r    r   r+   r!   r)   r   r'   r(   r,   r-   
lower_namereprvalueoperatorsplitstripNotImplementedErrorPseudoClassSelectorhtml_tag_eqFunctionalPseudoClassSelector	argumentstypepoplower_valuer   r
   r   	TypeError)r   left_insiderz   r%   rK   sub_expressionsr   relative_selector
expressionelementskeylowerr-   r   r   grouprT   rZ   langstokentokensnthr   current_listargumentcountresultbBs                                r   r   r   K   s    (F334#HMM2#C""j0.$$
20#$8(:M:MNN   C';-'@AD  C'+K= 9) )    C'+K= 9+ +    C';-'HID 4h6I6IJJhnn-C<c\K ugWTF!,,	Hf55	6 0I0IJs{   1$"1%D  O#D
 	 <<B/BBD  D	Hf55	6 !) 6 68 h2238 s{  
 v{{"K?"KKLANN	Hf77	8!)!7!7 	P&'8'A'A'M'MNJS  ++s28"--4/"--4>"--44""U:,k(2#NO	P {{?++	H%%v'K'KM 
N
 !) 6 68 h2238 s{  
 {{C?CCC	Hf66	7$$(;(;;&x':':&=>> %X%>%>$A B//7/B/B.EQHI 
Hf66	7%h&8&8%;<<	Hf22	3%%(77	Hf//	08>>,--	Hf66	7)!!==H$7$77H$6$6#7r(--IJC !3!3 4Bx7J7J6KLE 2 232hmm_EDeY&CD81MC==H$7$77x}}-C"*"5"5x}}4EeY&CD81MCNNE  (9::""c).se5	BB""d*u{{}%*ekkmu.D !) $AADVMN ""d* 	 *<=BS[;L M;;>%sDE ""d*/u 5'',iq23 ""d*/u 5%%*IQ01 ""d*#Y&?uEJJ#0(2C2CE E &%	Hf88	9==>>sFF3DDDD}},OOK]]i''8ZCE
J
CEC0AE7 7 3DFG
 ]]j('8ZCE
J
CEE7 7LNO ]]i'4E *FE7 3 (LNO
 ]]     ]]//&]]m+"]]l*;]]o-=> ]]n,AB ]]l*0]]n,@A ]]g%E 6FF	HfBB	C==F"E#+#5#5@::%>> @F @ 

1::(LL!2!23ZZ8+LLU[[!9:'(GHH"JJqMEzzW,1C+,KLL  ;; #!# # # CML$.. .==G+$0F#s*'4 ##H-. || $A$*LL$?$A A ==K/CD6L ]]&66""&r+  ]]m3$$(6 *NN 
 ]]&88$ %)6 *NN  ((>NN4v%899=0'1(--CE E==K/&E]]&66CE]]m3@  ]]&88@  ((>NNs^F~#-hmm_B?A ADAq
 AAAv5'qc**005wd1#Rs#GH
 X11E	8:8p@s$   k7kkk"k
kc                      t        |       dk(  rd| d   z   }d| d   d|dS dj                  d | D              }dj                  d	 | D              }d
| d| dS )z;Generate expression testing equality with HTML local names.r   {http://www.w3.org/1999/xhtml}r   z((el.local_name == z7) if el.in_html_document else (el.etree_element.tag == rL   ry   c              3   2   K   | ]  }t        |        y wrx   r   rE   ns     r   rG   zhtml_tag_eq.<locals>.<genexpr>  s     7a$q'7s   c              3   8   K   | ]  }t        d |z           yw)r   Nr   r   s     r   rG   zhtml_tag_eq.<locals>.<genexpr>  s"      M;<D1A56Ms   z((el.local_name in (z9)) if el.in_html_document else (el.etree_element.tag in (z))))r~   r   )local_namestagnamestagss       r   r   r     s    
;1.Q?!+a.!3 4--0G27	8 		7;77yy M@KM M #5' *..2V38	9r5   rx   )reurllib.parser   tinycss2.nthr   webencodingsr    r   r   compilefindallr   r   r   r   r   r:   r5   r   <module>r      sL    	 ! " $  ! 2::o.66 .#3 #3LW2t
9r5   