
    jI                         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dS )    N)urlparse)	parse_nth)ascii_lower   )parser)SelectorErrorz	[^ 	
]+c                 @    d t          j        | |          D             S )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.

    c                 ,    g | ]}t          |          S  )CompiledSelector.0selectors     Z/home/ubuntu/budget-transfer-bot/.venv/lib/python3.11/site-packages/cssselect2/compiler.py
<listcomp>z)compile_selector_list.<locals>.<listcomp>   s!    WWW8X&&WWW    )r   parse)input
namespacess     r   compile_selector_listr      s%    " XWv|E:7V7VWWWWr   c                       e Zd ZdZd ZdS )r   z&Abstract representation of a selector.c                 0   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        | _        Pt!          |t"          j                  r|j        | _        |j        | _        t!          |t"          j                  r|j        | _        t!          |t"          j                  r|j        dk    rd| _        d S )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__$   s   :;;#s] 0& 
 

 /rBB	*6-< $"'*dF344 	:D#4 	3 	3O/6+<== 3)/OV-ABB 	3"1"<OV-EFF 3"1"<(7(H%%OV-EFF 3!0!:OV-EFF 3"'611.2D+	3 	3r   N)__name__
__module____qualname____doc__r:   r   r   r   r   r   "   s)        00!3 !3 !3 !3 !3r   r   c           
         t          | t          j                  rt          | j                  }|dk    rdS |dk    r-| j        dv rd}n~| j        dv rd}nrt          d| j                  | j        dk    rd	| d
}nK| j        dk    rd| d}n9| j        dk    rd| d}n'| j        dk    rd	| d}nt          d| j                  t          | j                  }|dk    rdS |dk    r|S d| d| dS t          | t          j                  r_d d | j	        D             D             }t          |          dk    r|d         S d|v rdS |rd                    d |D                       S dS t          | t          j                  rBd d | j        D             D             }|sdS dd                    d |D                        dS t          | t          j                  rg }| j        D ]u}t          |j        j                  }|dk    r"|j        dk    rd }n)|j        dk    rd!}n|j        dk    rd"}n|j        dk    rd#}|                    d$| d%| d&           vd                    |          S t          | t          j        t          j        f          r>d' d( | j        D             D             }|sdS d                    d) |D                       S t          | t          j                  r-| j        | j        k    r
d*| j        S d+| j        d,| j        dS t          | t          j                  r
d-| j        S t          | t          j                  r
| j        d.S t          | t          j                  r
d/| j        S t          | t          j                  r| j        | j        r^| j        | j        k    r tA          d1| j         d2| j                   }njd1| j         d2| j         }	d1| j         d2| j         }
d|	d,|
d}n<| j        | j        k    rtA          | j                  }n| j        | j        }
}	d|	d,|
d}| j!        }d3| d4}| j"        d5u r|#                                }|d6z  }| j$        | d7S | j$        d8k    r
| d9| d:|S | j$        d;k    rGt          |%                                          dk    s|&                                |k    rdn|d<| dS | j$        d=k    r| d9| d:|d| d>|d?z   d
S | j$        d@k    r|r| d>|dS dS | j$        dAk    r|r| dB|dndS | j$        dCk    r|r|dD| ndS t          dE| j$                  tN          t          | t          j(                  rq| j        dFv r(tS          dGdHdI          }|dJz  }| j        dKk    r|dLz  }|S | j        dMk    rAtS          dNdOdPdQdR          }tS          dSdTdU          }tS          dGdHdI          }d| dV| dW| dXS | j        dYk    r-tS          dNdOdPdQdR          }tS          dSdTdU          }d| dZ| d[S | j        d\k    r(tS          dOdT          }tS          dR          }d| d]| d^S | j        d_v rdS | j        d`v rdaS | j        dbk    rdcS | j        ddk    rdeS | j        dfk    r	 dgS | j        dhk    r	 diS | j        djk    rdkS | j        dlk    r	 dmS | j        dnk    rdoS t          dp| j                  t          | t          j*                  r| j        dqk    rg }dr | j+        D             }|r|,                    d          }|j-        dsk    r|                    |j.                   nB|j-        dtk    r(|                    t_          |j!                             nt          du          |r:|,                    d          }|j-        dsk    r|j!        dvk    rt          du          |d                    dw |D                       S g }g }|}| j+        D ]4}|j-        dsk    r|j!        dxk    r||u r|}|                    |           5|rd                    dy t          j0        |          D                       }| j        dzk    rd{| d&}nK| j        d|k    rd}| d&}n9| j        d~k    rd| d}n'| j        dk    rd| d}nt          dp| j                  |d| dz  }ni||u rt          d| j         d          | j        dzk    rd}n?| j        d|k    rd}n1| j        d~k    rd}n#| j        dk    rd}nt          dp| j                  tc          |          }|t          d| j         d          |\  }}|dz
  }|dk    rd| d| S d| d| d| dS te          t[          |           |           )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 combinatorrA   zany((z) for el in el.ancestors)rB   znext(el is not None and (z) for el in [el.parent])rD   z) for el in [el.previous])rC   z!) for el in el.previous_siblings)(z) and ()c                     g | ]
}|d k    |S r@   r   r   exprs     r   r   z!_compile_node.<locals>.<listcomp>}   -        s{{  {{r   c                 ,    g | ]}t          |          S r   )r   r   s     r   r   z!_compile_node.<locals>.<listcomp>~   s0     ; ; ; h''; ; ;r   r   r   z and c              3   "   K   | ]
}d | dV  dS rE   rF   Nr   )r   els     r   	<genexpr>z _compile_node.<locals>.<genexpr>   s*      DDb	B			DDDDDDr   c                     g | ]
}|d k    |S rH   r   rI   s     r   r   z!_compile_node.<locals>.<listcomp>   rK   r   c                 6    g | ]}t          |j                  S r   r   r   r   s     r   r   z!_compile_node.<locals>.<listcomp>   3     8 8 8 h2338 8 8r   znot (z or c              3   "   K   | ]
}d | dV  dS rN   r   rI   s     r   rP   z _compile_node.<locals>.<genexpr>   s*      "K"K4;t;;;"K"K"K"K"K"Kr   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                     g | ]
}|d k    |S )r   r   rI   s     r   r   z!_compile_node.<locals>.<listcomp>   rK   r   c                 6    g | ]}t          |j                  S r   rS   r   s     r   r   z!_compile_node.<locals>.<listcomp>   rT   r   c              3   "   K   | ]
}d | dV  dS rN   r   rI   s     r   rP   z _compile_node.<locals>.<genexpr>   s*      CC4;t;;;CCCCCCr   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 == N{}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arear^   z. and el.etree_element.get("href") is not None r_   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host)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   c                 $    g | ]}|j         d v|S ))
whitespacecomment)type)r   tokens     r   r   z!_compile_node.<locals>.<listcomp>9  s3     @ @ @:%>>> >>>r   r.   stringzInvalid arguments for :lang(),c              3   .   K   | ]}d |d|dz   dV  dS )zel.lang == z or el.lang.startswith(r]   rF   Nr   )r   r   s     r   rP   z _compile_node.<locals>.<genexpr>H  sN       # # OdNNdSjNNN# # # # # #r   ofc              3   >   K   | ]}t          |j                  V  d S NrS   r   s     r   rP   z _compile_node.<locals>.<genexpr>W  sI       $A $A  "("677$A $A $A $A $A $Ar   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_listRelationalSelectorr   r   appendMatchesAnySelectorSpecificityAdjustmentSelectorr0   r&   r%   r1   r'   r/   r$   r-   r.   r2   r3   
lower_namereprvaluecase_sensitiveloweroperatorsplitstripNotImplementedErrorPseudoClassSelectorhtml_tag_eqFunctionalPseudoClassSelector	argumentspopr   lower_valuer   r   r   	TypeError)r   left_insider   r+   sub_expressionsrelative_selector
expressionelementskeyr   r3   r   attribute_valuer    r   groupr`   rf   langstokensr   nthr   current_listargumentcountresultbBs                                r   r   r   H   s    (F344 C2#HM22#3C"j00.$
220#$8(:MNNN  C''A;AAADD C'')K ) ) ) D  C''+K + + + D  C''I;IIIDD 4h6IJJJhn--C<<3c\\K -u,,T,,,,	Hf5	6	6 ]2 ; ; ( 9; ; ;  
 1$$"1%%O##3 	<<DDODDDDDD3	Hf5	6	6 N2 8 8 ( 68 8 8  
  	3Nv{{"K"K?"K"K"KKKNNNN	Hf7	8	8 D2!)!7 	P 	P&'8'A'MNNJS   +s228"-44/"-44>"-444""#N:#N#N(#N#N#NOOOO{{?+++	H%v'KM 
N 
N s2 8 8 ( 68 8 8  
  	3{{CC?CCCCCC	Hf6	7	7 h2$(;;;>x':>>>HX%> H H/7/BH H HI 
Hf6	7	7 `2<h&8<<<	Hf2	3	3 ]2%7777	Hf/	0	0 Z2-8>---	Hf6	7	7 W2)! N=H$777IH$6II(-IIJJCCL!3LLx7JLLEE 2EEhmEEDMeMMDMMMCC=H$777x}--CC"*"5x}4EMeMMDMMMCNE@c@@@O&%//:- (::::"c)) 6 6&6 6,16 67 "d**u{{}}--22ekkmmu6L6LCC!LL/LLLN "d** G G&G G,1G G&G G5:S[G G GH "d** -EE5EEEE3"d**@EN<<%<<<<3P"d**<AJ%88888sJ#$@(BSTTT%%	Hf8	9	9 e2=>>>sFF33DDDD},,OOK]i'''8ZC CE
J
CCEC00AFE F FF F F F FG
 ]j(('8ZC CE
J
CCENE N NN N NO ]i''44E **FNE N N N N NO
 ] ( ( ( 3]///&&]m++"?]l**;;]o--=> > ]n,,AB B ]l**00]n,,@A A ]g%%EE 6FFF	HfB	C	C c2=F""E@ @#+#5@ @ @F  M

1:((LL!23333Z8++LLU[!9!9::::'(GHHH M"JJqMMEzW,,1C1C+,KLLL  M ;; # #!# # # # # # CML$. . .=G++$0F0F#s**'4 ##H---- -O|| $A $A$*L$?$?$A $A $A A A =K//LDLLL E]&666+"&+ + + E ]m33N$(N N N E
 ]&888N %)N N N E ((>NNN99999=00'C(-CCCE E E=K//&EE]&666CEE]m33@ E ]&888@ E ((>NNNs^^F~#?hm???A A ADAq
 AAAvv*5**q***G05G G;<G G@AG G GH
 X111r   c                      t          |           dk    rd| d          }d| d         d|dS d                    d | D                       }d                    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 == rV   r   c              3   4   K   | ]}t          |          V  d S r   r   )r   ns     r   rP   zhtml_tag_eq.<locals>.<genexpr>  s(      77a$q''777777r   c              3   :   K   | ]}t          d |           V  dS )r   Nr   )r   r3   s     r   rP   zhtml_tag_eq.<locals>.<genexpr>  sG       % % :D::;;% % % % % %r   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AQAA7+a. 7 7-07 7 7	8 		77;77777yy % %#% % % % %85 8 8.28 8 8	9r   r   )reurllib.parser   tinycss2.nthr   webencodingsr    r   r   compilefindallr   r   r   r   r   r   r   r   <module>r      s    				 ! ! ! ! ! ! " " " " " " $ $ $ $ $ $       ! ! ! ! ! ! 2:o..6 X X X X(#3 #3 #3 #3 #3 #3 #3 #3LQ2 Q2 Q2h
9 9 9 9 9r   