
    +gI                         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      k/home/viktor/gitlab-persoonlijk/factuur-applicatie/venv/lib/python3.12/site-packages/cssselect2/compiler.pycompile_selector_listr      s)    " 8>||E:7VW8X&WWWs   .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                        rh| j                  D  cg c]  } t        |        c} D cg c]	  }|dk7  r| }}t        |      dk(  r|d   S d|v ry|rdj                  d |D              S y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        j.                        rd'| j0                  S t        | t        j2                        r| j4                  d(S t        | t        j6                        rd)| j8                  S t        | t        j:                        r| j0                  | j0                  r| j<                  | j>                  k(  r&tA        d*| j0                   d+| j<                         }	nd*| j0                   d+| j>                   }
d*| j0                   d+| j<                   }d|
d&|d}	nP| j<                  | j>                  k(  rtA        | j<                        }	n!| j>                  | j<                  }}
d|
d&|d}	| jB                  }d,|	 d-}| jD                  d.u r|jG                         }|d/z  }| jH                  |	 d0S | jH                  d1k(  r
|	 d2| d3|S | jH                  d4k(  r9t        |jK                               dk7  s|jM                         |k7  rdS |d5| dS | jH                  d6k(  r|	 d2| d3|d| d7|d8z   d
S | jH                  d9k(  r|r| d7|dS y| jH                  d:k(  r|r| d;|dS dS | jH                  d<k(  r|r|d=| S dS t        d>| jH                        tN        t        | t        jP                        r| j<                  d?v r(tS        d@dAdB      }|dCz  }| j<                  dDk(  r|dEz  }|S | j<                  dFk(  r5tS        dGdHdIdJdK      }tS        dLdMdN      }tS        d@dAdB      }d| dO| dP| dQS | j<                  dRk(  r%tS        dGdHdIdJdK      }tS        dLdMdN      }d| dS| dTS | j<                  dUk(  r tS        dHdM      }tS        dK      }d| dV| dWS | j<                  dXv ry| j<                  dYv ryZ| j<                  d[k(  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yht        di| j<                        t        | t        jT                        r| j<                  djk(  rg }| jV                  D cg c]  }|jX                  dkvr| }}|r|j[                  d      }|jX                  dlk(  r|j#                  |j\                         n?|jX                  dmk(  r%|j#                  t_        |jB                               nt        dn      |r:|j[                  d      }|jX                  dlk7  r|jB                  dok7  rt        dn      |rdj                  dp |D              S g }g }|}| jV                  D ]8  }|jX                  dlk(  r|jB                  dqk(  r||u r|}(|j#                  |       : |rdj                  dr t        j`                  |      D              }| j<                  dsk(  rdt| d"}nX| j<                  duk(  rdv| d"}nB| j<                  dwk(  rdx| dy}n,| j<                  dzk(  rd{| dy}nt        di| j<                        |d|| d}z  }n{||u rt        d~| j<                   d      | j<                  dsk(  rd}nL| j<                  duk(  rd}n:| j<                  dwk(  rd}n(| j<                  dzk(  rd}nt        di| j<                        tc        |      }|t        d~| j<                   d      |\  }}|dz
  }|dk(  rd| d| S d| d| d| dS te        tY        |       |       c c} w 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els     r   	<genexpr>z _compile_node.<locals>.<genexpr>   s     Db!B4q	D   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el.etree_element.get(z, "")Fz.lower()z in el.etree_element.attrib=z  in el.etree_element.attrib and z == z~=z in split_whitespace(z|=z.startswith(-z^=z$=z
.endswith(z*=z in 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>H  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>W  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) == z/next(r == 0 and n >= 0    for n, r in [divmod((z) - , z)]))3r#   r   r$   r   left
combinatorr   r%   CompoundSelectorr&   lenjoinNegationSelectorselector_listr   RelationalSelectorr   appendMatchesAnySelectorSpecificityAdjustmentSelectorr*   r    r   r+   r!   r)   r   r'   r(   r,   r-   
lower_namereprvaluecase_sensitiveloweroperatorsplitstripNotImplementedErrorPseudoClassSelectorhtml_tag_eqFunctionalPseudoClassSelector	argumentstypepoplower_valuer   r
   r   	TypeError)r   left_insiderz   r%   rK   sub_expressionsrelative_selector
expressionelementskeyr   r-   r   attribute_valuer   r   grouprT   rZ   langstokentokensnthr   current_listargumentcountresultbBs                                 r   r   r   H   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 !) 9 9; h'; s{  
 1$"1%%O#<<DODD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 5cU%@O&&%/:-  (9::""c)e;&'tE967 ""d*u{{}-2ekkmu6LCN!9$9/9J!LN ""d*e;&'tE9D&'|US[3DAGH ""d*-.l5)1EE""d*@E'z%!<PKNP""d*<A%$&78JsJ#$@(BSBSTT%%	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1w; 8:8b@s*   4k1k66k;l  l!l
9lc                      t        |       dk(  rd| d    }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 |         yw)r   Nr   )rE   r-   s     r   rG   zhtml_tag_eq.<locals>.<genexpr>  s%      % 3D6:;%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0Q0@A!+a.!3 4--0G27	8 		7;77yy %#% % #5' *..2V38	9r5   rx   )reurllib.parser   tinycss2.nthr   webencodingsr    r   r   compilefindallr   r   r   r   r   r:   r5   r   <module>r      sM    	 ! " $  ! 2::o.66 X(#3 #3LQ2h
9r5   