
    +g                    8   S r SSKJr  SSKrSSKJr  SSKJr  SSKJr	  SSKJ
r  SS	KJr  SSKrSS
KJrJrJrJr  Sr1 Skr1 Skr1 Skr1 Skr1 Skr\\-  \-  \-  \-  rSrS\ S3rSrS\ S\ S3rS\ S3rS\ S\ S3rS\ S\ S3r S\ S\ S 3r!S!\ S"\ S#\  S$3r"S\ S%\ S&\" S'\ S(\ S)3r#S*\  3r$S+\  3r%S,\  S-\  S.3r&S/\ S0\  S1\  S\# 3r'S2\  S3\ S43r(S2\  S3\ S53r)S6\  S3r*S7r+\ S83r,S9\( 3r-S:\  3r.S;\) S<\! S=\ S>\ S?\ \ S@\ S?\ \ SA3r/SB\) SC\! SD\ SE3r0\) SF\" S\ SG\ S?\" SH\ S83r1\) SI\ S83r2\ SJ\ SK\ S?3r3\) SF\" S\ SG\ S?\" SH\ S83r4\Rj                  " SL\ SM3\Rl                  5      r7\Rj                  " SL\ SN\ S3\Rl                  5      r8\Rj                  " SO\ SP\ SQ3\Rl                  5      r9\Rj                  " SR\" SS\ SG\ ST3\Rt                  5      r;\Rj                  " \5      r<\Rj                  " SU\ S?35      r=\Rj                  " \ SV35      r>\Rj                  " SU\* SW3\Rt                  5      r?SXr@SYrASrBSZrCS[rDS\rES]rFS^rGS_rHS`rISarJSbrKScrLSdrM\" \MSe9          SSf j5       rNSSg jrOSSh jrPSSSi jjrQSSj jrR " Sk Sl5      rS " Sm Sn\S5      rT " So Sp5      rU " Sq Sr5      rV\V" Ss5      R                  \B\F-  St9rX\V" Su5      R                  \B\F-  St9rY\V" Sv5      R                  \B\F-  \E-  St9rZ\V" Sw5      R                  \B\F-  \G-  St9r[\V" Sx5      R                  \B\F-  St9r\\V" Sy5      R                  \B\F-  St9r]\V" Sz5      R                  \B\F-  St9r^\V" S{5      R                  \B\F-  St9r_\V" S|5      R                  \B\F-  \K-  St9r`\V" S}5      R                  \BSt9ra\V" S~5      R                  \B\F-  St9rb\V" S5      R                  \B\F-  St9rc\V" S5      R                  \B\I-  \F-  St9rd\V" S5      R                  \B\J-  \F-  St9reg)zCSS selector parser.    )annotationsN)	lru_cache   )util)	css_match)	css_types)SelectorSyntaxError)MatchAnyIteratorcasti  >   :link:root:empty:scope:checked:default:defined:enabled	:any-link	:disabled	:in-range	:optional	:required
:read-only:last-child:only-child:read-write:first-child:last-of-type:only-of-type:out-of-range:first-of-type:indeterminate:placeholder-shown>   :host:past:focus:hover:active:future:paused:target:current:playing:visited:local-link:focus-within:user-invalid:focus-visible:target-within>   :is:has:not:where:matches	:contains:-soup-contains:-soup-contains-own>   r&   r.   :host-context>   :dir:lang
:nth-child:nth-of-type:nth-last-child:nth-last-of-typez(?:\r\n|(?!\r\n)[\n\f\r])z	(?:[ \t]|)z"(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)z(?:|z(?:\\(?:[a-f0-9]{1,6}z?|[^\r\n\f]|$))z?|[^\r\n\f]|$|z))z8
(?:(?:-?(?:[^\x00-\x2f\x30-\x40\x5B-\x5E\x60\x7B-\x9f]|z>)+|--)
(?:[^\x00-\x2c\x2e\x2f\x3A-\x40\x5B-\x5E\x60\x7B-\x9f]|z)*)
z (?:[-+])?(?:[0-9]+n?|n)(?:(?<=n)z	*(?:[-+])z*(?:[0-9]+))?z(?:"(?:\\(?:.|z)|[^\\"\r\n\f]+)*?"|'(?:\\(?:.|z)|[^\\'\r\n\f]+)*?'|z+)z*(?P<cmp>[!~^|*$]?=)z*(?P<value>z)(?:z*(?P<case>[is]))?)?z*\]z\#z\.z(?P<tag_ns>(?:z|\*)?\|)?(?P<tag_name>z|\*)z\[z*(?P<attr_ns>(?:z|\*)?\|)?(?P<attr_name>z
(?P<name>:z)(?P<open>\(z*)?z*)z(?P<name>:(?=--)&z*\):z@Pz
(?P<pseudo_nth_child>z
(?P<nth_child>z|even|odd))(?:z*\)|(?P<of>*z*ofz*))
z
(?P<pseudo_nth_type>z
(?P<nth_type>z|even|odd))z*\)
z(?P<values>z*,z)*)z(?P<dir>ltr|rtl)z*?(?P<relation>[,+>~]|z(?![,+>~]))z(?:(\\[a-f0-9]{1,6}z?)|(\\[^\r\n\f])|(\\$))z?)|(\\[^\r\n\f])|(\\$)|(\\z'(?P<s1>[-+])?(?P<a>[0-9]+n?|n)(?:(?<=n)z*(?P<s2>[-+])z*(?P<b>[0-9]+))?z(?:(?P<value>z)|(?P<split>z*))^z*$$,                 @         i   i   i  )maxsizec           	     z    [        U5      n[        R                  " U [        U UUS9R	                  5       UUU5      $ )zCached CSS compile.customflags)process_customcm	SoupSieve	CSSParserprocess_selectors)pattern
namespacesrY   rZ   custom_selectorss        \/Users/Alptekin/Desktop/izin_takip/venv/lib/python3.13/site-packages/soupsieve/css_parser.py_cached_css_compilerd      sH     &f-<<#	
 


 
    c                 ,    [         R                  5         g)zPurge the cache.N)rd   cache_clear re   rc   _purge_cacheri      s     ##%re   c                    0 nU bu  U R                  5        Ha  u  p#[        R                  " U5      n[        R	                  U5      c  [        SU S35      eXA;   a  [        SU S35      eX1[        U5      '   Mc     U$ )zProcess custom.z
The name 'z)' is not a valid custom pseudo-class namezThe custom selector 'z' has already been registered)itemsr   lower	RE_CUSTOMmatchr	   KeyErrorcss_unescape)rY   rb   keyvaluenames        rc   r[   r[      s      ,,.JC::c?Dt$,)Jtf<e*fgg'!6tf<YZ[[38\$/0 ) re   c                P    SS jnU(       d  [         O[        R                  X 5      $ )zg
Unescape CSS value.

Strings allow for spanning the value on multiple strings by escaping a new line.
c                0   U R                  S5      (       a7  [        U R                  S5      SS S5      nUS:X  a  [        n[        U5      nU$ U R                  S5      (       a  U R                  S5      SS nU$ U R                  S5      (       a  SnU$ SnU$ )	z(Replace with the appropriate substitute.r   NrQ   r   rN         � )groupintUNICODE_REPLACEMENT_CHARchr)m	codepointrr   s      rc   replacecss_unescape.<locals>.replace   s     771::AGGAJqrNB/IA~4		NE  WWQZZGGAJqrNE  WWQZZE  Ere   )r}   
Match[str]returnstr)
RE_CSS_ESCRE_CSS_STR_ESCsub)contentstringr   s      rc   rp   rp      s    " %J.==gOOre   c                   / n[        U 5      nUS:  =(       a    U S   S:H  nUS:X  a  U(       a  UR                  SU  35        GO[        U 5       GH  u  pE[        U5      nUS:X  a  UR                  S5        M*  SUs=::  a  S::  d  O  US:X  a  UR                  SUS S	35        MW  US:X  d  U(       a.  US:X  a(  S
Us=::  a  S::  a  O  OUR                  SUS S	35        M  US;   dC  US:  d=  S
Us=::  a  S::  d0  O  S
Us=::  a  S::  d!  O  SUs=::  a  S::  d  O  SUs=::  a  S::  a  O  OUR                  U5        M  UR                  SU 35        GM     SR	                  U5      $ )zEscape identifier.r   -r   \rw         xrM   0   9   )-   _   rT   A   Z   a   z   rx   )lenappend	enumerateordjoin)identr   length
start_dashindexcr~   s          rc   escaper   	  s@    FZF!/aCJ{z5'l#!%(HEAID h')+t+	T0A9Q-q121*
$)B[W[B[9Q-q12\)Y$->49C\X\C\*d*	0IT0ItW`OhdhOha 1#h' ) 776?re   c                  6    \ rS rSrSrSS jrS	S jrS
S jrSrg)SelectorPatterni%  Selector pattern.c                    Xl         [        R                  " U[        R                  [        R                  -  [        R
                  -  5      U l        g)Initialize.N)rs   recompileIXU
re_pattern)selfrs   r`   s      rc   __init__SelectorPattern.__init__(  s0     	**WbddRTTkBDD.@Are   c                    U R                   $ )	Get name.)rs   r   s    rc   get_nameSelectorPattern.get_name.  s     yyre   c                8    U R                   R                  X5      $ )Match the selector.)r   rn   )r   selectorr   rZ   s       rc   rn   SelectorPattern.match3  s     $$X55re   )rs   r   N)rs   r   r`   r   r   Noner   r   r   r   r   rz   rZ   rz   r   zMatch[str] | None	__name__
__module____qualname____firstlineno____doc__r   r   rn   __static_attributes__rh   re   rc   r   r   %  s    B
6re   r   c                  6    \ rS rSrSrSS jrS	S jrS
S jrSrg)SpecialPseudoPatterni9  r   c                ,   0 U l         U H0  nUS   nUS   " X2S   5      nUS    H  nX@R                   U'   M     M2     SU l        [        R                  " [        [        R
                  [        R                  -  [        R                  -  5      U l        g)r   r   rv   rN   r   N)	patternsmatched_namer   r   PAT_PSEUDO_CLASS_SPECIALr   r   r   re_pseudo_name)r   r   prs   r`   pseudos         rc   r   SpecialPseudoPattern.__init__<  s     AQ4Dd41&GA$(/f%   ! jj)A244"$$;QSQUQUCUVre   c                T    U R                   c  S$ U R                   R                  5       $ )r   rx   )r   r   r   s    rc   r   SpecialPseudoPattern.get_nameI  s)     &&.rPD4E4E4N4N4PPre   c                ,   SnU R                   R                  X5      nU(       ao  [        R                  " [	        UR                  S5      5      5      nU R                  R                  U5      nU(       a  UR                  XU5      nU(       a  Xpl        U$ )r   Nrs   )	r   rn   r   rl   rp   ry   r   getr   )r   r   r   rZ   r   r}   rs   r`   s           rc   rn   SpecialPseudoPattern.matchN  sr     %%h6::l1776?;<Dmm''-G x>(/%re   )r   r   r   N)r   zCtuple[tuple[str, tuple[str, ...], str, type[SelectorPattern]], ...]r   r   r   r   r   rh   re   rc   r   r   9  s    WQ
re   r   c                  D    \ rS rSrSrS	S jrS
S jrSS jrSS jr\r	Sr
g)	_Selectori^  z
Intermediate selector class.

This stores selector data for a compound selector as we are acquiring them.
Once we are done collecting the data for a compound selector, we freeze
the data in an object that can be pickled and hashed.
c                ,   UR                  SS5      U l        UR                  S/ 5      U l        UR                  S/ 5      U l        UR                  S/ 5      U l        UR                  S/ 5      U l        UR                  S/ 5      U l        UR                  S/ 5      U l        UR                  S	S5      U l        UR                  S
/ 5      U l	        UR                  S/ 5      U l
        UR                  SS5      U l        UR                  SS5      U l        g)r   tagNidsclasses
attributesnth	selectors	relationsrel_typecontainslangrZ   r   no_matchF)r   r   r   r   r   r   r   r   r   r   r   rZ   r   )r   kwargss     rc   r   _Selector.__init__g  s     ::eT*::eR(zz)R0 **\26::eR(K4K4

:t4

:r2JJvr*	ZZ+


:u5re   c                    U(       aH  US   nUR                   R                  USS 5        [        R                  " UR	                  5       /5      $ [        R                  " 5       $ )zFreeze relation.r   r   N)r   extendctSelectorListfreeze)r   r   sels      rc   _freeze_relations_Selector._freeze_relationsw  sL     A,CMM  12/??CJJL>22??$$re   c                   U R                   (       a  [        R                  " 5       $ [        R                  " U R                  [        U R                  5      [        U R                  5      [        U R                  5      [        U R                  5      [        U R                  5      U R                  U R                  5      U R                  [        U R                  5      [        U R                  5      U R                   5      $ )zFreeze self.)r   r   SelectorNullSelectorr   tupler   r   r   r   r   r   r   r   r   r   rZ   r   s    rc   r   _Selector.freeze  s     ==??$$;;dhhdll#doo&dhhdnn%&&t~~6dmm$dii 

 re   c                X   SU R                   < SU R                  < SU R                  < SU R                  < SU R                  < SU R
                  < SU R                  < SU R                  < S	U R                  < S
U R                  < SU R                  < SU R                  < S3$ )zString representation.z_Selector(tag=z, ids=z
, classes=z, attributes=z, nth=z, selectors=z, relations=z, rel_type=z, contains=z, lang=z, flags=z, no_match=rE   )r   r   r   r   r   r   r   r   r   r   rZ   r   r   s    rc   __str___Selector.__str__  s     TXXLtxxl*T\\DTTabfbqbqat u88,l4>>*<LHZ [(DMM3DGDII=X`aeakak`n o(+	
re   )r   r   r   rZ   r   r   r   r   r   r   r   r   N)r   r   r   r   )r   list[_Selector]r   ct.SelectorList)r   zct.Selector | ct.SelectorNullr   )r   r   r   r   r   r   r   r   r   __repr__r   rh   re   rc   r   r   ^  s"    6 %(
 Hre   r   c                  `   \ rS rSrSr\" S\5      \" SS\\4SS\	\4SS	\
\4S
S\\4SS\\445      \" S\5      \" S\5      \" S\5      \" S\5      \" S\5      \" S\5      \" S\5      \" S\5      \" S\5      \" S\5      4r  S*       S+S jjrS,S jrS,S jrS,S jr            S-S jr          S.S jr            S/S jr              S0S  jr                  S1S! jr S,S" jr!S,S# jr"S,S$ jr#S,S% jr$  S2       S3S& jjr%S4S' jr&S2S5S( jjr'S)r(g)6r^   i  zParse CSS selectors.pseudo_closepseudo_contains)r;   r<   r=   pseudo_nth_child)rA   rC   pseudo_nth_type)rB   rD   pseudo_lang)r@   
pseudo_dir)r?   pseudo_class_custompseudo_classpseudo_elementampat_ruleidclassr   	attributecombineNc                    UR                  SS5      U l        X0l        U R                  [        R                  -  U l        Uc  0 U l        gUU l        g)r    rw   N)r   r`   rZ   r   DEBUGdebugrY   )r   r   rY   rZ   s       rc   r   CSSParser.__init__  sB      ''9
ZZ$**,
"Nbre   c                b   SnUR                  S5      nUR                  S5      (       a%  [        R                  " UR                  S5      5      OSnUR                  S5      (       a  [        UR                  S5      SS 5      OSn[        UR                  S5      5      nSn	Sn
SnU(       a*  US	:X  a  [        R
                  OS
[        R                  -  nON[        R                  " U5      S:X  a$  [        R
                  [        R                  -  nSn	O[        R                  nU(       a^  UR                  S5      R                  S5      (       a  [        UR                  S5      SS S5      nO[        UR                  S5      5      nU(       d  SnGOUR                  S5      (       a0  [        R                  " S[        R                  " U5      -  U5      nGOUR                  S5      (       a0  [        R                  " S[        R                  " U5      -  U5      nGO:UR                  S5      (       a/  [        R                  " S[        R                  " U5      -  U5      nOUR                  S5      (       aT  U(       a  [        R                  U5      (       a  SO[        R                  " U5      n[        R                  " SU-  U5      nOUR                  S5      (       a/  [        R                  " S[        R                  " U5      -  U5      nOF[        R                  " S[        R                  " U5      -  U5      nUR                  S5      (       a  SnU	(       a'  U(       a   [        R                  " UR                  5      n
[        R                  " XX5      nU(       ak  [        5       nUR                   R#                  U5        [        R$                  " UR'                  5       /SS5      nUR(                  R#                  U5        SnU$ UR                   R#                  U5        SnU$ )z8Create attribute selector from the returned regex match.FcmpcaseNattr_nsrx   	attr_nameir   typeTrr   "'r   rJ   z^%s.*rK   z.*?%s$rI   z.*?%s.*~z[^\s\S]z7.*?(?:(?<=^)|(?<=[ \t\r\n\f]))%s(?=(?:[ \t\r\n\f]|$)).*rF   z^%s(?:-.*)?$z^%s$!)ry   r   rl   rp   r   r   DOTALL
startswithr   r   RE_WSsearchr`   r   SelectorAttributer   r   r   r   r   r   )r   r   r}   has_selectorinverseopr  nsattris_typepattern2rr   rZ   r`   sel_attrsub_selnot_lists                    rc   parse_attribute_selector"CSSParser.parse_attribute_selector  s    WWU^./ggfootzz!''&/*467ggi6H6H\!''),Sb12bAGGK01!S[RTTa299<EZZ'DD299$EGIIEwww**:66$QWWW%5a%;TB$QWWW%56G]]3jjBIIe,<!<eDG]]3jjRYYu-=!=uEG]]3jjbii.>!>FG]]3 ',u||E/B/BJ		RWHXEjj![^c!cejkG]]3jj299U3C!CUKG jj299U+;!;UCG}}S!!wzz'//2H '''DkG%%h/(8'94GHMM  *  NN!!(+re   c                    UR                  S5      (       a  [        UR                  S5      SS 5      OSn[        UR                  S5      5      n[        R                  " XT5      Ul        SnU$ )z#Parse tag pattern from regex match.tag_nsNr  tag_nameT)ry   rp   r   SelectorTagr   )r   r   r}   r  prefixr   s         rc   parse_tag_patternCSSParser.parse_tag_pattern  s]     :;9J9Jaggh/45PT177:./..-re   c                    [         R                  " [        UR                  S5      5      5      nU R                  R                  U5      nUc;  [        SU SUR                  S5       3U R                  UR                  S5      5      e[        U[        R                  5      (       dJ  U R                  U	 [        XPR                  U R                  S9R                  [        S9nXPR                  U'   UR                   R#                  U5        SnU$ )z
Parse custom pseudo class alias.

Compile custom selectors as we need them. When compiling a custom selector,
set it to `None` in the dictionary so we can avoid an infinite loop.
rs   zUndefined custom selector 'z' found at position r   rX   rZ   T)r   rl   rp   ry   rY   r   r	   endr`   
isinstancer   r   r^   rZ   r_   
FLG_PSEUDOr   r   )r   r   r}   r  r   r   s         rc   parse_pseudo_class_custom#CSSParser.parse_pseudo_class_custom  s     L9:;;??6*%-fX5I!%%PQ(Ta  (BOO44F# DJJj1  #+KKX&re   c                l   Sn[         R                  " [        UR                  S5      5      5      nUR                  S5      (       a  SnU(       a/  U[        ;   a%  U R                  XX4UR                  S5      5      nX54$ U(       Gd  U[        ;   Ga  US:X  a%  U=R                  [        R                  -  sl        GOUS:X  a'  U=R                  [        R                  -  sl        SnGOUS:X  a%  U=R                  [        R                  -  sl        GOXUS	:X  a%  U=R                  [        R                  -  sl        GO-US
;   a!  UR                  R                  [         5        GOUS:X  a!  UR                  R                  ["        5        GOUS:X  a!  UR                  R                  [$        5        GOUS:X  a!  UR                  R                  [&        5        GOUS:X  a!  UR                  R                  [(        5        GOjUS:X  a!  UR                  R                  [*        5        GOCUS:X  a!  UR                  R                  [,        5        GOUS:X  a!  UR                  R                  [.        5        GOUS:X  a!  UR                  R                  [0        5        GOUS:X  a!  UR                  R                  [2        5        GOUS:X  a!  UR                  R                  [4        5        GOUS:X  a!  UR                  R                  [6        5        GOYUS:X  a!  UR                  R                  [8        5        GO2US:X  aI  UR:                  R                  [        R<                  " SSSSS[        R>                  " 5       5      5        GOUS:X  aI  UR:                  R                  [        R<                  " SSSSS[        R>                  " 5       5      5        GOUS:X  aI  UR:                  R                  [        R<                  " SSSSS[        R>                  " 5       5      5        GOEUS:X  aH  UR:                  R                  [        R<                  " SSSSS[        R>                  " 5       5      5        OUS:X  av  UR:                  RA                  [        R<                  " SSSSS[        R>                  " 5       5      [        R<                  " SSSSS[        R>                  " 5       5      /5        O{US:X  au  UR:                  RA                  [        R<                  " SSSSS[        R>                  " 5       5      [        R<                  " SSSSS[        R>                  " 5       5      /5        SnX54$ U(       aB  U[B        ;   a8  U RE                  XBR                  S5      [F        [H        -  5        SUl%        SnX54$ U(       d  U[L        ;   a  SUl%        SnX54$ U[N        ;   a*  [Q        SU S3U RR                  URU                  S5      5      e[Q        SU S 3U RR                  URU                  S5      5      e)!zParse pseudo class.Frs   openTr   r   r   r   r   )r   r   r   r   r$   r   r   r   r   r   r   r   r"   r%   r   r   r   r#   r    r   r!   z!Invalid syntax for pseudo class 'r  z' was detected as a pseudo-class and is either unsupported or invalid. If the syntax was not intended to be recognized as a pseudo-class, please escape the colon.)+r   rl   rp   ry   PSEUDO_COMPLEXparse_pseudo_openr1  PSEUDO_SIMPLErZ   r   SEL_ROOTSEL_DEFINED	SEL_SCOPE	SEL_EMPTYr   r   CSS_LINKCSS_CHECKEDCSS_DEFAULTCSS_INDETERMINATECSS_DISABLEDCSS_ENABLEDCSS_REQUIREDCSS_OPTIONALCSS_READ_ONLYCSS_READ_WRITECSS_IN_RANGECSS_OUT_OF_RANGECSS_PLACEHOLDER_SHOWNr   SelectorNthr   r   PSEUDO_COMPLEX_NO_MATCHparse_selectorsr3  FLG_OPENr   PSEUDO_SIMPLE_NO_MATCHPSEUDO_SUPPORTEDr	   r`   start)r   r   r}   r  	iselectoris_htmlcomplex_pseudor   s           rc   parse_pseudo_classCSSParser.parse_pseudo_class9  s    L9:776??!Nf611#|XYX]X]^_X`aLb $$a  Fm$; 		R[[(	:%		R^^+	8#		R\\)	8#		R\\)	11$$X.:%$$[1:%$$[1++$$%67;&$$\2:%$$[1;&$$\2;&$$\2<'$$]3=($$^4;&$$\2?*$$%56//$$%:;>)r~~a5%IZ[\=(r~~a5$HYZ[++r~~a4HYZ[?*r~~a4rGXYZ=(q%E5"//BSTq%E4ARS ?*q%D%ARSq%D$@QR  L, $$+ *A A  EE!Hj86KLCLL$ $$#  F.D$DCLL $$ ''%3F81=
  &F8 n n
	 re   c                @   UR                  5       nUR                  S5      (       a  SnOSn[        R                  " [	        US   5      5      US'   [        R                  " UR                  SU-   5      5      nUS:X  a  SnSn	S	n
GO+US
:X  a  SnSn	S	n
GO[        [        [           [        R                  U5      5      nUR                  S5      (       a  UR                  S5      S:X  a  SOSnUR                  S5      nUR                  S5      n
UR                  S5      (       a  US-  nOU
(       a  XSS -  nOX-  nUR                  S5      (       a  UR                  S5      S:X  a  SOSnUR                  S5      (       a  XR                  S5      -  nOSn[        US5      n[        US5      n	US   nUS:X  a  UR                  S5      (       a-  U R                  XBR                  S5      [         ["        -  5      nO[$        nUS:X  a7  UR&                  R)                  [*        R,                  " XU	SSU5      5        S	nU$ US:X  a3  UR&                  R)                  [*        R,                  " XU	SS	U5      5        S	nU$ US:X  aJ  UR&                  R)                  [*        R,                  " XU	S	S[*        R.                  " 5       5      5        S	nU$ US:X  aF  UR&                  R)                  [*        R,                  " XU	S	S	[*        R.                  " 5       5      5        S	nU$ )zParse `nth` pseudo.r   _child_typers   r   evenrN   r   Toddr   s1r   rx   an1Nr  s2b0
   ofrA   FrC   rB   rD   )	groupdictr   r   rl   rp   r   r
   r   RE_NTHrn   ry   endswithr  rz   rN  r1  r3  rO  CSS_NTH_OF_S_DEFAULTr   r   r   rL  r   )r   r   r}   r  rS  mdictpostfixr   r]  ra  var	nth_parts_s1r^  _s2
pseudo_selnth_sels                    rc   parse_pseudo_nthCSSParser.parse_pseudo_nth  s    99'((GG

<f#>?f**UYYuw78fBBCBBCU3Zg)>?I"..9??43HC3O#UWC$A**S/C||C  s
"v"..9??43HC3O#UWCs##s++S"BS"B6]
hwwt}}..y%%(JQYDYZ /\)r~~br5%QR  00r~~br5$PQ  ^+r~~br4HYZ[  22r~~br4rGXYZre   c                    [         [        -  nUS:X  a
  U[        -  nOUS:X  a
  U[        -  nOUS;   a	  U[        -  nUR
                  R                  U R                  XEU5      5        SnU$ )z"Parse pseudo with opening bracket.r8   r7   )r9   r6   T)r3  rO  FLG_NOTFLG_RELATIVEFLG_FORGIVEr   r   rN  )r   r   rs   r  rS  r   rZ   s          rc   r9  CSSParser.parse_pseudo_open  sm     X%6>WEV^\!E&&[ ET11)EJKre   c                   UR                  S5      R                  5       nU(       d  [        nU[        :X  aG  XQl        US   R
                  R                  U5        S[        -   nUR                  [        5       5        OXU(       a%  XQl        US   R
                  R                  U5        O'USS [        :w  a  [        SU 3U R                  U5      eSU-   n[        5       nSnX1U4$ )Parse combinator tokens.relationr  rH   r   Nz%The multiple combinators at position F)
ry   stripWS_COMBINATORCOMMA_COMBINATORr   r   r   r   r	   r`   )r   r   r}   r  r   r   r   
combinators           rc   parse_has_combinatorCSSParser.parse_has_combinator  s     WWZ(..0
&J))#LbM##**3/]*HY[)'"''..s3!". *;E7CLL  Z'Hk(**re   c	                   UR                  S5      R                  5       n	U	(       d  [        n	U(       dW  U(       a
  U	[        :w  a  [	        SU	 SU S3U R
                  U5      eU	[        :X  a  SUl        USS2	 UR                  U5        OU	[        :X  af  UR                  (       d#  U(       d  [        R                  " SS5      Ul        UR                  R                  U5        UR                  U5        USS2	 O7UR                  R                  U5        Xl        USS2	 UR                  U5        [        5       nSnX14$ )	rz  r{  zThe combinator 'z' at position z , must have a selector before itTNrI   F)ry   r|  r}  r~  r	   r`   r   r   r   r   r+  r   r   r   r   )
r   r   r}   r  r   r   	is_pseudo
is_forgiver   r  s
             rc   parse_combinatorCSSParser.parse_combinator  s    WWZ(..0
&J/?!?)&zl.GghLL  --#aL  %--wwy nnS$7CG$$Y/  %aL$$Y/)aL  %k  re   c                    UR                  S5      nUR                  S5      (       a+  UR                  R                  [	        USS 5      5        SnU$ UR
                  R                  [	        USS 5      5        SnU$ )zParse HTML classes and ids.r   .r   NT)ry   r  r   r   rp   r   )r   r   r}   r  r   s        rc   parse_class_idCSSParser.parse_class_idN  st     771:s##KK|HQRL9:  GGNN<56re   c                V   [         R                  " [        UR                  S5      5      5      nUS:X  a  [        R
                  " S[        5        US:H  n[        UR                  S5      5      n/ n[        R                  U5       Hn  nUR                  S5      (       a  M  UR                  S5      n	U	R                  S5      (       a  [        U	S	S
 S5      n	O[        U	5      n	UR                  U	5        Mp     UR                  R                  [        R                  " Xu5      5        SnU$ )zParse contains.rs   r;   z\The pseudo class ':contains' is deprecated, ':-soup-contains' should be used moving forward.r=   valuessplitrr   )r  r  r   r  T)r   rl   rp   ry   warningswarnFutureWarning	RE_VALUESfinditerr  r   r   r   SelectorContains)
r   r   r}   r  r   contains_ownr  r   tokenrr   s
             rc   parse_pseudo_containsCSSParser.parse_pseudo_containsY  s     L9:[ MMn !66aggh/0''/E{{7##KK(E
++$U1R[$7$U+OOE" 0 	B//GHre   c                   UR                  S5      n/ n[        R                  U5       Hn  nUR                  S5      (       a  M  UR                  S5      nUR                  S5      (       a  [	        USS S5      nO[	        U5      nUR                  U5        Mp     UR                  R                  [        R                  " U5      5        SnU$ )zParse pseudo language.r  r  rr   r  r   r  T)	ry   r  r  r  rp   r   r   r   SelectorLang)r   r   r}   r  r  r   r  rr   s           rc   parse_pseudo_langCSSParser.parse_pseudo_langr  s     "''/E{{7##KK(E
++$U1R[$7$U+OOE" 0 	12re   c                    [         R                  " UR                  S5      5      S:X  a  [        R                  O[        R
                  nU=R                  U-  sl        SnU$ )zParse pseudo direction.dirltrT)r   rl   ry   r   SEL_DIR_LTRSEL_DIR_RTLrZ   )r   r   r}   r  rr   s        rc   parse_pseudo_dirCSSParser.parse_pseudo_dir  sD     #'**QWWU^"<"E2>>		U	re   c           
        [        5       n/ nSnSn/ nS[        -   n	[        U[        -  5      n
[        U[        -  5      n[        U[
        -  5      n[        U[        -  5      n[        U[        -  5      n[        U[        -  5      n[        U[        -  5      n[        U[        -  5      n[        U[        -  5      n[        U[        -  5      n[        U[        -  5      nU R                  (       a  U(       a  [        S5        U
(       a  [        S5        U(       a  [        S5        U(       a  [        S5        U(       a  [        S5        U(       a  [        S5        U(       a  [        S	5        U(       a  [        S
5        U(       a  [        S5        U(       a  [        S5        U(       a  [        S5        U(       a  UR!                  [        5       5          [#        U5      u  nnUS:X  a  [%        SUR'                  S5       35      eUS:X  a'  U=R(                  [*        R,                  -  sl        SnGO+US:X  a  U R/                  UUU5      nGOUS:X  a  U R1                  UUXaU5      u  pnGOUS:X  a  [%        SUR'                  S5       35      eUS:X  a  U R3                  UUU5      nGOUS;   a  U R5                  UUXa5      nGOUS:X  a  U R7                  UUU5      nGO~US:X  a  U R9                  UUU5      nSnGOaUS:X  a  U(       dF  U(       d8  [;        SUR'                  S5       3U R<                  UR'                  S5      5      eSUl        U
(       a  SnGO[;        SUR'                  S5       3U R<                  UR'                  S5      5      eUS:X  a8  U(       a  U RA                  UUXeX5      u  pdn	OU RC                  UUXeXUU5      u  pdOUS:X  a  U RE                  UUU5      nOsUS :X  aT  U(       a9  [;        S!UR'                  S5       S"3U R<                  UR'                  S5      5      eU RG                  UUU5      nOUS#;   a  U RI                  UUU5      nURK                  S5      nGM  U
(       a!  U(       d  [;        S$U 3U R<                  U5      eU(       a  URN                  (       d#  U(       d  [*        RP                  " S%S&5      Ul'        U(       a%  Xl)        US'   RT                  R!                  U5        OfURT                  RW                  U5        US&S&2	 UR!                  U5        O4U(       a-  U(       a  U(       d  SUl        US&S&2	 UR!                  U5        SnU(       d  [;        SU 3U R<                  U5      eU(       a  [*        RX                  US'   l        U(       a  [*        RZ                  US'   l        U(       a  [*        R\                  US'   l        U(       a  [*        R^                  US'   l        U(       a  [*        R`                  US'   l        [*        Rb                  " U Vs/ s H  nURe                  5       PM     snX5      $ ! [L         a     GNf = fs  snf )(zParse selectors.FrH   z    is_pseudo: Truez    is_open: Truez    is_relative: Truez    is_not: Truez    is_html: Truez    is_default: Truez    is_indeterminate: Truez    is_in_range: Truez    is_out_of_range: Truez    is_placeholder_shown: Truez    is_forgive: TrueTr   zAt-rules found at position r   r   r   r   r   z!Pseudo-element found at position r   )r   r   r   r   r   z Expected a selector at position z)Unmatched pseudo-class close at position r  r  r   zTag name found at position z instead of at the start)r  r  z"Unclosed pseudo-class at position rI   Nr  )3r   r}  boolrO  r3  rv  ru  FLG_HTMLFLG_DEFAULTFLG_INDETERMINATEFLG_IN_RANGEFLG_OUT_OF_RANGEFLG_PLACEHOLDER_SHOWNrw  r  printr   nextNotImplementedErrorrR  rZ   r   r=  r4  rV  r  rr  r  r  r	   r`   r   r  r  r&  r-  r  r1  StopIterationr   r+  r   r   r   SEL_DEFAULTSEL_INDETERMINATESEL_IN_RANGESEL_OUT_OF_RANGESEL_PLACEHOLDER_SHOWNr   r   )r   rS  r   rZ   r   r   r  closedr   r   is_openr  is_relativeis_notrT  
is_defaultis_indeterminateis_in_rangeis_out_of_rangeis_placeholder_shownr  rq   r}   ss                           rc   rN  CSSParser.parse_selectors  s    k		& ux'(+,	5</0ego&ux'(%+-.
(9 9:5</0u'778#E,A$AB%+-.
 ::+,)*-.())*,-23-.12#67,- Y[)D	iQ )#-0KAGGTUJ<.XYYE\II-I#'L11#'#A#A#q,#WLN*,0,C,CCLel,m)L',,-0QRSRYRYZ[R\Q].^__--#'#=#=c1l#SLCC#'#8#8a#YLM)#'#9#9#q,#OLL(#'#8#8a#NL"GN*')"5"B1771:, O $ !
# 
 (,!%1GPQ
|T LLGGAJ 
 I%"6:6O6OLX738 -1,A,ALYS]_d-)c K'#'#@#@a#VLE\#19!''!*E]^ LLGGAJ 
 $(#9#9#q,#OLO+#'#6#6sA|#LLaC L 6%4UG<  779..d3'"''..s3$$Y/aL  % )CL!S!L &25':  "$..IbM"$"6"6IbM"$//IbM"$"5"5IbM"$":":IbM I>Iq
I>PPq  		p  ?s    FY !DY =Y0
Y-,Y-c              #  p  #    [         R                  U5      nU(       a  UR                  S5      OSn[        R                  U5      nU(       a  UR	                  S5      S-
  O[        U5      S-
  nU R                  (       a  [        SU< 35        X4::  Ga  SnU R                   H  nUR                  XU R                  5      nU(       d  M(  UR                  5       nU R                  (       a3  [        SU SUR                  S5      < SUR	                  S5       35        UR                  S5      nXb4v     O   UcS  X   nUS:X  a  S	U 3nO-US
:X  a  SU 3nO!US:X  a  SU 3nOUS:X  a  SU 3nO	SU< SU 3n[        XR                  U5      eX4::  a  GM  U R                  (       a  [        S5        gg7f)zIterate selector tokens.r   r   z## PARSING: NzTOKEN: 'z' --> z at position [z)Malformed attribute selector at position r  z%Malformed class selector at position #z"Malformed id selector at position rH   z,Malformed pseudo-class selector at position zInvalid character z
 position z## END PARSING)RE_WS_BEGINr  r1  	RE_WS_ENDrR  r   r  r  
css_tokensrn   rZ   r   ry   r	   r`   )	r   r`   r}   r   r1  vrs   r   msgs	            rc   selector_iterCSSParser.selector_iterF  s     w'a1W%"#qwwqzA~#g,*:::L,-lA__GGGDJJ71::<DzzfQWWQZN-PQPWPWXYPZ|\]EE!HE'M % yN 8EeWMC#XA%IC#X>ugFC#XHPC.qe:eWEC)#||UCC5 l6 ::"# s   CF6C	F6F6c                X    U R                  U R                  U R                  5      X5      $ )zProcess selectors.)rN  r  r`   )r   r   rZ   s      rc   r_   CSSParser.process_selectorso  s&     ##D$6$6t||$DeSSre   )rY   r  rZ   r`   )Nr   )r   r   rY   z'dict[str, str | ct.SelectorList] | NonerZ   rz   r   r   )r   r   r}   r   r  r  r   r  )r   r   r}   r   r  r  rS   Iterator[tuple[str, Match[str]]]rT  r  r   ztuple[bool, bool])
r   r   r}   r   r  r  rS  r  r   r  )r   r   rs   r   r  r  rS  r  r   rz   r   r  )r   r   r}   r   r  r  r   r   r   r   r   rz   r   ztuple[bool, _Selector, str])r   r   r}   r   r  r  r   r   r   r   r  r  r  r  r   rz   r   ztuple[bool, _Selector])r   r   )rS  r  r   rz   rZ   rz   r   r   )r`   r   r   r  )r   rz   rZ   rz   r   r   ))r   r   r   r   r   r   PAT_PSEUDO_CLOSEr   PAT_PSEUDO_CONTAINSPAT_PSEUDO_NTH_CHILDPAT_PSEUDO_NTH_TYPEPAT_PSEUDO_LANGPAT_PSEUDO_DIRPAT_PSEUDO_CLASS_CUSTOMPAT_PSEUDO_CLASSPAT_PSEUDO_ELEMENTPAT_AMPPAT_AT_RULEPAT_ID	PAT_CLASSPAT_TAGPAT_ATTRPAT_COMBINEr  r   r&  r-  r4  rV  rr  r9  r  r  r  r  r  r  rN  r  r_   r   rh   re   rc   r^   r^     s    	(89 &K'#	 $%FH\^mn"$IK^`op
O_My./J	
 	-/FG(89(*<=w'	;/f%+w'X.	;/3J> ;?	77 87 	7
 
7DL8`%`% `% 	`%
 4`% `% 
`%D?? ? 	?
 4? 
?B  	
 4  
.)+)+ )+ 	)+
 #)+ )+ )+ 
%)+V.!.! .! 	.!
 #.! #.! .! .! .! 
 .!`	2* 	uQ3uQ uQ 	uQ
 
uQn'$RT Tre   r^   zhtml|*:is(a, area)[href]r0  z\
    html|*:is(input[type=checkbox], input[type=radio])[checked], html|option[selected]
    z
    :checked,

    /*
    This pattern must be at the end.
    Special logic is applied to the last selector.
    */
    html|form html|*:is(button, input)[type="submit"]
    aF  
    html|input[type="checkbox"][indeterminate],
    html|input[type="radio"]:is(:not([name]), [name=""]):not([checked]),
    html|progress:not([value]),

    /*
    This pattern must be at the end.
    Special logic is applied to the last selector.
    */
    html|input[type="radio"][name]:not([name='']):not([checked])
    a  
    html|*:is(input:not([type=hidden]), button, select, textarea, fieldset, optgroup, option, fieldset)[disabled],
    html|optgroup[disabled] > html|option,
    html|fieldset[disabled] > html|*:is(input:not([type=hidden]), button, select, textarea, fieldset),
    html|fieldset[disabled] >
        html|*:not(legend:nth-of-type(1)) html|*:is(input:not([type=hidden]), button, select, textarea, fieldset)
    z|
    html|*:is(input:not([type=hidden]), button, select, textarea, fieldset, optgroup, option, fieldset):not(:disabled)
    z,html|*:is(input, textarea, select)[required]z2html|*:is(input, textarea, select):not([required])aW  
    html|input:is(
        :not([type]),
        [type=""],
        [type=text],
        [type=search],
        [type=url],
        [type=tel],
        [type=email],
        [type=password],
        [type=number]
    )[placeholder]:not([placeholder='']):is(:not([value]), [value=""]),
    html|textarea[placeholder]:not([placeholder=''])
    z*|*a  
    html|*:is(
        textarea,
        input:is(
            :not([type]),
            [type=""],
            [type=text],
            [type=search],
            [type=url],
            [type=tel],
            [type=email],
            [type=number],
            [type=password],
            [type=date],
            [type=datetime-local],
            [type=month],
            [type=time],
            [type=week]
        )
    ):not([readonly], :disabled),
    html|*:is([contenteditable=""], [contenteditable="true" i])
    z!
    html|*:not(:read-write)
    z
    html|input:is(
        [type="date"],
        [type="month"],
        [type="week"],
        [type="time"],
        [type="datetime-local"],
        [type="number"],
        [type="range"]
    ):is(
        [min],
        [max]
    )
    )
r`   r   ra   zct.Namespaces | NonerY   ct.CustomSelectors | NonerZ   rz   r   zcm.SoupSieve)r   r   )rY   r  r   z dict[str, str | ct.SelectorList])F)r   r   r   r  r   r   )r   r   r   r   )fr   
__future__r   r   	functoolsr   rx   r   r   r\   r   r   r	   r  typingr
   r   r   r   r{   r:  rP  r8  rM  PSEUDO_SPECIALrQ  NEWLINEWSCOMMENTSWSCCSS_ESCAPESCSS_STRING_ESCAPES
IDENTIFIERNTHVALUEATTRr  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   rg  r   r  r  r  r  rm   r~  r}  r3  ru  rv  r  r  r  rO  r  r  r  rw  	_MAXCACHErd   ri   r[   rp   r   r   r   r   r^   r_   r?  r@  rA  rB  rC  rD  rE  rF  rK  ri  rH  rG  rI  rJ  rh   re   rc   <module>r     s    " 	     %  - -! 8 (	  !#99NJMddguu  ''!0	RD(1(O</t>'"M 88C} E88C} E

 
*#iuMJG9$CG9L`ak`llnq
cU&se;ugT#FYZ]Y^^ab zl	*	J<'=j\
N%j\1HTUVZU[\ LSA (LRH -j\; 
e3< *+, J< ./ 0e>#k(1RDS
RSTVSWX[W\ ] 
-. /U+cU # 
 //{5'SEC5PQRWQXX[\_[``cd-..>se3G,RDC5B23;ugSRPSuTUV[U\\_`c_ddgh  ZZ05LMrttT
4RD8RSZR[[]^`b`d`de	>se=QTPUUefhjhlhl	mJJ-wl3%r#cJBDDQ	


2jjAcU!%JJ3%r{#	JJ!34A6=	   

    	 9$ & 	
  ,&P686 6("? "JA AHPT PTn *x/0 	  *x/0	  
 *x/+=>  
 *x/2CCD   *x/0   *x/0	  2*x/0  8*x/0  " *x/2GGH " !	*%  . *x/0/ 2  *x/0	   *|3h>? "  *'77(BC re   