+
     hw  c                  s	   R t ^ RIHt ^ RIt^ RIHt ^RIHt ^RIHt	 ^RIH
t ^RIHt ^ RIt^ RIHtHtHtHt R	t0 Rzmt0 R{mt0 R|mt0 R}mt0 R~mt]],          ],          ],          ],          tR
tR] R2tRtR] R] R2tR] R2tR] R] R2tR] R] R2t R] R] R2t!R] R] R]  R2t"R] R] R]" R ] R!] R"2t#R#]  2t$R$]  2t%R%]  R&]  R'2t&R(] R)]  R*]  R]# 2t'R+]  R,] R-2t(R+]  R,] R.2t)R/]  R2t*R0t+] R12t,R2]( 2t-R3]  2t.R4]) R5]! R6] R7] R8] ] R9] R8] ] R:2t/R;]) R<]! R=] R>2t0]) R?]" R] R@] R8]" RA] R12t1]) RB] R12t2] RC] RD] R82t3]) R?]" R] R@] R8]" RA] R12t4]Pj                  ! RE] RF2]Pl                  4      t7]Pj                  ! RE] RG] R2]Pl                  4      t8]Pj                  ! RH] RI] RJ2]Pl                  4      t9]Pj                  ! RK]" RL] R@] RM2]Pt                  4      t;]Pj                  ! ]4      t<]Pj                  ! RN] R824      t=]Pj                  ! ] RO24      t>]Pj                  ! RN]* RP2]Pt                  4      t?RQt@RRtA^tB^tC^tD^tE^tF^ tG^@tH^tIRStJRTtKRUtLRVtM]! ]MRW7      RX RY l4       tNRZ R[ ltOR\ R] ltPRR^ R_ lltQR` Ra ltR ! Rb Rc4      tS ! Rd Re]S4      tT ! Rf Rg4      tU ! Rh Ri4      tV]V! Rj4      P                  ]B]F,          Rk7      tX]V! Rl4      P                  ]B]F,          Rk7      tY]V! Rm4      P                  ]B]F,          ]E,          Rk7      tZ]V! Rn4      P                  ]B]F,          ]G,          Rk7      t[]V! Ro4      P                  ]B]F,          Rk7      t\]V! Rp4      P                  ]B]F,          Rk7      t]]V! Rq4      P                  ]B]F,          Rk7      t^]V! Rr4      P                  ]B]F,          Rk7      t_]V! Rs4      P                  ]B]F,          ]K,          Rk7      t`]V! Rt4      P                  ]BRk7      ta]V! Ru4      P                  ]B]F,          Rk7      tb]V! Rv4      P                  ]B]F,          Rk7      tc]V! Rw4      P                  ]B]I,          ]F,          Rk7      td]V! Rw4      P                  ]B]J,          ]F,          Rk7      te]V! Rx4      P                  ]B]F,          Rk7      tf]V! Ry4      P                  ]B]F,          Rk7      tgR# )zCSS selector parser.)annotationsN)	lru_cache)util)	css_match)	css_types)SelectorSyntaxError)MatchAnyIteratorcasti  z(?:\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*\):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*$$Z, i   i   i   i  )Zmaxsizec          
     s,    V ^8  d   QhRRRRRRRRR	R
/# )   patternstr
namespaceszct.Namespaces | Nonecustomct.CustomSelectors | Noneflagsintreturnzcm.SoupSieve Zformat   "9/usr/lib/python3.14/site-packages/soupsieve/css_parser.py__annotate__r      s:      $ & 	
     c           	     s    \        V4      p\        P                  ! V \        V VVR7      P	                  4       VVV4      # )zCached CSS compile.r   r   )process_customcmZ	SoupSieve	CSSParserprocess_selectors)r   r   r   r   custom_selectors   &&&& r   _cached_css_compiler'      sH     &f-<<#	
 


 
r   c                   V ^8  d   QhRR/# )r   r   Noner   r   r   r   r   r      s     & &d &r   c                 s.    \         P                  4        R# )zPurge the cache.N)r'   Zcache_clearr   r   r   _purge_cacher*      s     ##%r   c                    V ^8  d   QhRRRR/# )r   r   r   r   z dict[str, str | ct.SelectorList]r   r   r   r   r   r      s      4 9Y r   c                s    / pV ex   V P                  4        Fc  w  r#\        P                  ! V4      p\        P	                  V4      f   \        RV R24      hWA9   d   \        RV R24      hW1\        V4      &   Ke  	  V# )zProcess custom.z
The name 'z)' is not a valid custom pseudo-class namezThe custom selector 'z' has already been registered)Zitemsr   lower	RE_CUSTOMmatchr   ZKeyErrorcss_unescape)r   r%   keyvaluenames   &    r   r!   r!      s      ,,.JC::c?Dt$,)Jtf<e*fgg'!6tf<YZ[[38\$/0 ) r   c               s$    V ^8  d   QhRRRRRR/# )r   contentr   stringboolr   r   r   r   r   r   r      s&     P P# Pt P Pr   c                sT    R R lpV'       g   \         M\        P                  W 4      # )zg
Unescape CSS value.

Strings allow for spanning the value on multiple strings by escaping a new line.
c               r+   )r   m
Match[str]r   r   r   r   r   r   r   Z"css_unescape.<locals>.__annotate__   s      : # r   c                sH   V P                  ^4      '       d=   \        V P                  ^4      R,          ^4      pV^ 8X  d   \        p\        V4      pV# V P                  ^4      '       d   V P                  ^4      R,          pV# V P                  ^4      '       d   RpV# RpV# )z(Replace with the appropriate substitute.i   NN   � )groupr   UNICODE_REPLACEMENT_CHARZchr)r6   	codepointr1   s   &  r   replaceZcss_unescape.<locals>.replace   s     771::AGGAJrNB/IA~4		NE  WWQZZGGAJrNE  WWQZZE  Er   )
RE_CSS_ESCRE_CSS_STR_ESCZsub)r3   r4   r>      && r   r/   r/      s    " %J.==gOOr   c               s     V ^8  d   QhRRRR/# )r   identr   r   r   r   r   r   r   r     s      # # r   c                s   . p\        V 4      pV^ 8  ;'       d    V ^ ,          R8H  pV^8X  d   V'       d   VP                  RV  24       EM&\        V 4       EF  w  rE\        V4      pV^ 8X  d   VP                  R4       K+  ^Tu;8:  d   ^8:  g
   M V^8X  d   VP                  RVR R24       K[  V^ 8X  g   V'       d2   V^8X  d+   ^0Tu;8:  d   ^98:  d   M MVP                  RVR R24       K  VR9   gM   V^8  gF   ^0Tu;8:  d   ^98:  g7   M ^0Tu;8:  d   ^98:  g&   M ^ATu;8:  d   ^Z8:  g   M ^aTu;8:  d   ^z8:  d   M MVP                  V4       EK  VP                  RV 24       EK  	  RP	                  V4      # )zEscape identifier.-Z\r9   Zxr   r:   )i-   i_   )lenappendZ	enumerateZordZjoin)rB   r4   ZlengthZ
start_dashindexcr=   s   &      r   escaperH     sC    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?r   c                  >    ] tR tRtRtR R ltR R ltR R ltR	tR
# )SelectorPatterni/  Selector pattern.c               $    V ^8  d   QhRRRRRR/# )r   r2   r   r   r   r)   r   r   r   r   r   SelectorPattern.__annotate__2  s&     B BS B3 B4 Br   c                s    Wn         \        P                  ! V\        P                  \        P                  ,          \        P
                  ,          4      V n        R# Initialize.N)r2   recompileIXU
re_pattern)selfr2   r      &&&r   __init__ZSelectorPattern.__init__2  s0     	**WbddRTTkBDD.@Ar   c               r(   r   r   r   r   r   r   r   r   rM   8  s      # r   c                s    V P                   # )	Get name.)r2   rV      &r   get_nameZSelectorPattern.get_name8  s     yyr   c               (    V ^8  d   QhRRRRRRRR/# r   selectorr   rF   r   r   r   zMatch[str] | Noner   r   r   r   r   rM   =  s)     6 6c 6# 6c 6>O 6r   c                s8    V P                   P                  W4      # )Match the selector.)rU   r.   )rV   r`   rF   r      &&&&r   r.   ZSelectorPattern.match=  s     $$X55r   )r2   rU   N	__name__
__module____qualname____firstlineno____doc__rX   r]   r.   __static_attributes__r   r   r   rJ   rJ   /  s    B
6 6r   rJ   c                  rI   )SpecialPseudoPatterniC  rK   c               r+   )r   patternszCtuple[tuple[str, tuple[str, ...], str, type[SelectorPattern]], ...]r   r)   r   r   r   r   r   !SpecialPseudoPattern.__annotate__F  s      W W!d Wim Wr   c                s^   / V n         V F@  pV^ ,          pV^,          ! W2^,          4      pV^,           F  pW@P                   V&   K  	  KB  	  RV n        \        P                  ! \        \        P
                  \        P                  ,          \        P                  ,          4      V n        R# rN   )	rk   matched_namerP   rQ   PAT_PSEUDO_CLASS_SPECIALrR   rS   rT   re_pseudo_name)rV   rk   Zpr2   r   pseudos   &&    r   rX   ZSpecialPseudoPattern.__init__F  s     AQ4Dd41&GA$$(/f%   ! jj)A244"$$;QSQUQUCUVr   c               r(   rY   r   r   r   r   r   rl   S  s     Q Q# Qr   c                sV    V P                   f   R# V P                   P                  4       # )rZ   r:   )rm   r]   r[   r\   r   r]   ZSpecialPseudoPattern.get_nameS  s)     &&.rPD4E4E4N4N4PPr   c               r^   r_   r   r   r   r   r   rl   X  s)      c # c >O r   c                s2   RpV P                   P                  W4      pV'       dr   \        P                  ! \	        VP                  R4      4      4      pV P                  P                  V4      pV'       d!   VP                  WV4      pV'       d   Wpn        V# )ra   Nr2   )	ro   r.   r   r,   r/   r;   rk   getrm   )rV   r`   rF   r   rp   r6   r2   r      &&&&    r   r.   ZSpecialPseudoPattern.matchX  sr     %%h6::l1776?;<Dmm''-G x>(/%r   )rm   rk   ro   Nrc   r   r   r   rj   rj   C  s    WQ
 r   rj   c                  sN    ] tR tRtRtR R ltR R ltR R ltR	 R
 lt]t	Rt
R# )	_Selectorih  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               r+   )r   kwargsr   r   r)   r   r   r   r   r   _Selector.__annotate__q  s     6 6 6 6r   c                s.   VP                  RR4      V n        VP                  R. 4      V n        VP                  R. 4      V n        VP                  R. 4      V n        VP                  R. 4      V n        VP                  R. 4      V n        VP                  R. 4      V n        VP                  R	R4      V n        VP                  R
. 4      V n	        VP                  R. 4      V n
        VP                  R^ 4      V n        VP                  RR4      V n        R# )rO   tagNidsclasses
attributesnth	selectors	relationsrel_typecontainslangr   no_matchF)rq   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   )rV   rt   s   &,r   rX   Z_Selector.__init__q  s     ::eT*::eR(zz)R0 **\26::eR(K4K4

:t4

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

:u5r   c               r+   )r   r|   list[_Selector]r   ct.SelectorListr   r   r   r   r   ru     s     % %? % %r   c                s    V'       dQ   V^ ,          pVP                   P                  VR,          4       \        P                  ! VP	                  4       .4      # \        P                  ! 4       # )zFreeze relation.r8   )r|   extendctSelectorListfreeze)rV   r|   selrA   r   _freeze_relationsZ_Selector._freeze_relations  sJ     A,CMM  2/??CJJL>22??$$r   c               r(   )r   r   zct.Selector | ct.SelectorNullr   r   r   r   r   ru     s      5 r   c                s   V P                   '       d   \        P                  ! 4       # \        P                  ! V P                  \        V P                  4      \        V P                  4      \        V P                  4      \        V P                  4      \        V P                  4      V P                  V P                  4      V P                  \        V P                  4      \        V P                  4      V P                   4      # )zFreeze self.)r   r   ZSelectorNullZSelectorrv   Ztuplerw   rx   ry   rz   r{   r   r|   r}   r~   r   r   r[   r\   r   r   Z_Selector.freeze  s     ===??$$;;dhhdll#doo&dhhdnn%&&t~~6dmm$dii 

 r   c               r(   rY   r   r   r   r   r   ru     s     
 
 
r   c                sX   RV P                   : RV P                  : RV P                  : RV P                  : RV P                  : RV P
                  : RV P                  : RV P                  : R	V P                  : R
V P                  : RV P                  : RV P                  : R2# )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=r
   )rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r[   r\   r   __str__Z_Selector.__str__  s     TXXLtxxl*T\\DTTabfbqbqat u88,l4>>*<LHZ [(DMM3DGDII=X`aeakak`n o(+	
r   )ry   rx   r~   r   rw   r   r   rz   r}   r|   r{   rv   N)rd   re   rf   rg   rh   rX   r   r   r   Z__repr__ri   r   r   r   rs   rs   h  s"    6 %(
 Hr   rs   c                  s   ] tR tRtRt]! R]4      ]! RR5]]3RR6]	]3RR7]
]3RR8]]3RR9]]334      ]! R	]4      ]! R
]4      ]! R]4      ]! R]4      ]! R]4      ]! R]4      ]! R]4      ]! R]4      ]! R]4      ]! R]4      3tR:R R lltR R ltR R ltR R ltR R ltR R ltR  R! ltR" R# ltR$ R% lt R& R' lt!R( R) lt"R* R+ lt#R, R- lt$R;R. R/ llt%R0 R1 lt&R;R2 R3 llt'R4t(R# )<r#   i  zParse CSS selectors.pseudo_closepseudo_containspseudo_nth_childpseudo_nth_typepseudo_lang
pseudo_dirpseudo_class_custompseudo_classpseudo_elementampat_ruleidclassrv   	attributecombineNc               s(    V ^8  d   QhRRRRRRRR/# )	r   r`   r   r   z'dict[str, str | ct.SelectorList] | Noner   r   r   r)   r   r   r   r   r   CSSParser.__annotate__  s2     7 77 87 	7
 
7r   c                s    VP                  RR4      V n        W0n        V P                  \        P                  ,          V n        Vf
   / V n        R# TV n        R# )rO   Z r9   N)r>   r   r   r   ZDEBUGdebugr   )rV   r`   r   r   rb   r   rX   ZCSSParser.__init__  sB      ''9
ZZ$**,
"Nbr   c               (    V ^8  d   QhRRRRRRRR/# r   r   rs   r6   r7   has_selectorr5   r   r   r   r   r   r   r     s0     D DI D* DTX D]a Dr   c                s   RpVP                  R4      pVP                  R4      '       d&   \        P                  ! VP                  R4      4      MRpVP                  R4      '       d   \        VP                  R4      RR 4      MRp\        VP                  R4      4      pRp	Rp
RpV'       d0   VR8X  d   \        P
                  M^ \        P                  ,          pMS\        P                  ! V4      R	8X  d)   \        P
                  \        P                  ,          pR
p	M\        P                  pV'       d`   VP                  R4      P                  R4      '       d    \        VP                  R4      ^R R
4      pM\        VP                  R4      4      pV'       g   RpEMVP                  R4      '       d5   \        P                  ! R\        P                  ! V4      ,          V4      pEMVP                  R4      '       d5   \        P                  ! R\        P                  ! V4      ,          V4      pEMQVP                  R4      '       d5   \        P                  ! R\        P                  ! V4      ,          V4      pEMVP                  R4      '       d[   V'       d   \        P                  V4      '       d   RM\        P                  ! V4      p\        P                  ! RV,          V4      pMVP                  R4      '       d4   \        P                  ! R\        P                  ! V4      ,          V4      pMK\        P                  ! R\        P                  ! V4      ,          V4      pVP                  R4      '       d   R
pV	'       d)   V'       d!   \        P                  ! VP                  4      p
\        P                  ! WW4      pV'       dl   \        4       pVP                   P#                  V4       \        P$                  ! VP'                  4       .R
R4      pVP(                  P#                  V4       R
pV# VP                   P#                  V4       R
pV# )z8Create attribute selector from the returned regex match.FZcmpcaseNZattr_nsr:   Z	attr_nameZiZtypeTr1   r   z^%s.*r   z.*?%s$r   z.*?%s.*Z~z[^\s\S]z7.*?(?:(?<=^)|(?<=[ \t\r\n\f]))%s(?=(?:[ \t\r\n\f]|$)).*r   z^%s(?:-.*)?$z^%s$Z!"')r;   r   r,   r/   rP   rR   ZDOTALL
startswithrQ   rH   RE_WSsearchr   r   ZSelectorAttributers   ry   rE   r   r   r{   )rV   r   r6   r   ZinverseZopr   ZnsZattrZis_typeZpattern2r1   r   r   Zsel_attrZsub_selZnot_lists   &&&&             r   parse_attribute_selectorZ"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!!(+r   c               r   r   r   r   r   r   r   r     s)      Y : T VZ r   c                s    VP                  R4      '       d   \        VP                  R4      RR 4      MRp\        VP                  R4      4      p\        P                  ! WT4      Vn        RpV# )z#Parse tag pattern from regex match.Ztag_nsNZtag_nameTr   )r;   r/   r   SelectorTagrv   )rV   r   r6   r   Zprefixrv      &&&&  r   parse_tag_patternZCSSParser.parse_tag_pattern  s]     :;9J9Jaggh/45PT177:./..-r   c               r   r   r   r   r   r   r   r   '  s*      Y : UY ^b r   c                s0   \         P                  ! \        VP                  R4      4      4      pV P                  P                  V4      pVf<   \        RV RVP                  ^ 4       2V P                  VP                  ^ 4      4      h\        V\        P                  4      '       gQ   V P                  V \        WPP                  V P                  R7      P                  \        R7      pWPP                  V&   VP                   P#                  V4       RpV# )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.
r2   zUndefined custom selector 'z' found at position r    r   T)r   r,   r/   r;   r   rq   r   endr   Z
isinstancer   r   r#   r   r$   
FLG_PSEUDOr{   rE   )rV   r   r6   r   rp   r`   r   r   parse_pseudo_class_customZ#CSSParser.parse_pseudo_class_custom'  s     L9:;;??6*%-fX5I!%%PQ(Ta  (BOO44F# DJJj1  #+KKX&r   c               s0    V ^8  d   QhRRRRRRRRR	RR
R/# )r   r   rs   r6   r7   r   r5   	iselector Iterator[tuple[str, Match[str]]]is_htmlr   ztuple[bool, bool]r   r   r   r   r   r   C  sN     d% d%d% d% 	d%
 4d% d% 
d%r   c                sv   Rp\         P                  ! \        VP                  R4      4      4      pVP                  R4      '       d   RpV'       d1   V\        9   d&   V P                  WW4VP                  ^ 4      4      pW53# V'       Egd   V\        9   EdX   VR8X  d*   V;P                  \        P                  ,          un        EM"VR8X  d,   V;P                  \        P                  ,          un        RpEMVR8X  d*   V;P                  \        P                  ,          un        EMVR8X  d*   V;P                  \        P                  ,          un        EMVR 9   d"   VP                  P                  \         4       EMhVR	8X  d"   VP                  P                  \"        4       EM@VR
8X  d"   VP                  P                  \$        4       EMVR8X  d"   VP                  P                  \&        4       EMVR8X  d"   VP                  P                  \(        4       EMVR8X  d"   VP                  P                  \*        4       EMVR8X  d"   VP                  P                  \,        4       EMxVR8X  d"   VP                  P                  \.        4       EMPVR8X  d"   VP                  P                  \0        4       EM(VR8X  d"   VP                  P                  \2        4       EM VR8X  d"   VP                  P                  \4        4       EMVR8X  d"   VP                  P                  \6        4       EMVR8X  d"   VP                  P                  \8        4       EMVR8X  d"   VP                  P                  \:        4       EM`VR8X  d"   VP                  P                  \<        4       EM8VR8X  dJ   VP>                  P                  \        P@                  ! ^R^ RR\        PB                  ! 4       4      4       EMVR8X  dJ   VP>                  P                  \        P@                  ! ^R^ RR\        PB                  ! 4       4      4       EMVR8X  dJ   VP>                  P                  \        P@                  ! ^R^ RR\        PB                  ! 4       4      4       EMHVR8X  dI   VP>                  P                  \        P@                  ! ^R^ RR\        PB                  ! 4       4      4       MVR8X  dw   VP>                  PE                  \        P@                  ! ^R^ RR\        PB                  ! 4       4      \        P@                  ! ^R^ RR\        PB                  ! 4       4      .4       M|VR8X  dv   VP>                  PE                  \        P@                  ! ^R^ RR\        PB                  ! 4       4      \        P@                  ! ^R^ RR\        PB                  ! 4       4      .4       RpW53# V'       dH   V\F        9   d=   V PI                  WBP                  ^ 4      \J        \L        ,          4       RVn'        RpW53# V'       g   V\P        9   d   RVn'        RpW53# V\R        9   d+   \U        RV R2V PV                  VPY                  ^ 4      4      h\U        RV R2V PV                  VPY                  ^ 4      4      h)!zParse pseudo class.Fr2   ZopenT:root:defined:scope:empty:checked:default:indeterminate	:disabled:enabled	:required:muted:open	:optional
:read-only:read-write	:in-range:out-of-range:placeholder-shown:first-child:last-child:first-of-type:last-of-type:only-child:only-of-typez!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.):link	:any-link)-r   r,   r/   r;   PSEUDO_COMPLEXparse_pseudo_openr   PSEUDO_SIMPLEr   r   ZSEL_ROOTZSEL_DEFINED	SEL_SCOPEZ	SEL_EMPTYr{   rE   CSS_LINKCSS_CHECKEDCSS_DEFAULTCSS_INDETERMINATECSS_DISABLEDCSS_ENABLEDCSS_REQUIRED	CSS_MUTEDCSS_OPENCSS_OPTIONALCSS_READ_ONLYCSS_READ_WRITECSS_IN_RANGECSS_OUT_OF_RANGECSS_PLACEHOLDER_SHOWNrz   SelectorNthr   r   PSEUDO_COMPLEX_NO_MATCHparse_selectorsr   FLG_OPENr   PSEUDO_SIMPLE_NO_MATCHPSEUDO_SUPPORTEDr   r   start)rV   r   r6   r   r   r   Zcomplex_pseudorp   s   &&&&&&  r   parse_pseudo_classZCSSParser.parse_pseudo_classC  s    L9:776??!Nf611#|XYX]X]^_X`aLj $$i  Fm$; 		R[[(	:%		R^^+	8#		R\\)	8#		R\\)	11$$X.:%$$[1:%$$[1++$$%67;&$$\2:%$$[1;&$$\28#$$Y/7"$$X.;&$$\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
	 r   c          
     s,    V ^8  d   QhRRRRRRRRR	R/# )
r   r   rs   r6   r7   r   r5   r   r   r   r   r   r   r   r   r     s<     ? ?? ? 	?
 4? 
?r   c                s   VP                  4       pVP                  R4      '       d   RpMRp\        P                  ! \	        VR,          4      4      VR&   \        P                  ! VP                  RV,           4      4      pVR8X  d	   ^p^ p	Rp
EMGVR8X  d	   ^p^p	Rp
EM8\        \        \        ,          \        P                  V4      4      pVP                  R	4      '       d   VP                  R	4      R
8X  d   R
MRpVP                  R4      pVP                  R4      p
VP                  R4      '       d   VR,          pMV
'       d   WRR ,          pMW,          pVP                  R4      '       d   VP                  R4      R
8X  d   R
MRpVP                  R4      '       d   WP                  R4      ,          pMRp\        V^
4      p\        V^
4      p	VR,          pVR8X  d   VP                  R4      '       d2   V P                  WBP                  ^ 4      \         \"        ,          4      pM\$        pVR8X  d8   VP&                  P)                  \*        P,                  ! WV	RRV4      4       RpV# VR8X  d4   VP&                  P)                  \*        P,                  ! WV	RRV4      4       RpV# VR8X  dK   VP&                  P)                  \*        P,                  ! WV	RR\*        P.                  ! 4       4      4       RpV# VR8X  dG   VP&                  P)                  \*        P,                  ! WV	RR\*        P.                  ! 4       4      4       RpV# )zParse `nth` pseudo.r   Z_childZ_typer2   rz   ZevenTZodds1rC   r:   aZnZ1Ns2ZbZ0Zof
:nth-childF:nth-last-child:nth-of-type:nth-last-of-typer   )Z	groupdictrq   r   r,   r/   r	   r   r   RE_NTHr.   r;   Zendswithr   r   r   r   r   r   CSS_NTH_OF_S_DEFAULTrz   rE   r   r   r   )rV   r   r6   r   r   ZmdictZpostfixr3   r   r   ZvarZ	nth_partsZ_s1r   Z_s2Z
pseudo_selZnth_sels   &&&&&            r   parse_pseudo_nthZ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r   c               s0    V ^8  d   QhRRRRRRRRR	R
RR/# )r   r   rs   r2   r   r   r5   r   r   rF   r   r   r   r   r   r   r   r     sF        	
 4  
r   c                s    \         \        ,          pVR8X  d   V\        ,          pM)VR8X  d   V\        ,          pMVR9   d   V\        ,          pVP
                  P                  V P                  WEV4      4       RpV# )z"Parse pseudo with opening bracket.:not:hasT):where:is)r   r   FLG_NOTFLG_RELATIVEFLG_FORGIVEr{   rE   r   )rV   r   r2   r   r   rF   r   s   &&&&&& r   r   ZCSSParser.parse_pseudo_open  sm     X%6>WEV^\!E&&[ ET11)EJKr   c               s4    V ^8  d   QhRRRRRRRRR	R
RRRR/# )r   r   rs   r6   r7   r   r5   r{   r   r}   r   rF   r   r   ztuple[bool, _Selector, str]r   r   r   r   r   r     sP     )+ )+)+ )+ 	)+
 #)+ )+ )+ 
%)+r   c                s   VP                  R4      P                  4       pV'       g   \        pV\        8X  dP   WQn        VR,          P
                  P                  V4       R\        ,           pVP                  \        4       4       MfV'       d*   WQn        VR,          P
                  P                  V4       M,VR,          \        8w  d   \        RV 2V P                  V4      hRV,           p\        4       pRpW1V3# )Parse combinator tokens.relationr   r8   z%The multiple combinators at position Fr   )
r;   stripWS_COMBINATORCOMMA_COMBINATORr}   r|   rE   rs   r   r   )rV   r   r6   r   r{   r}   rF   
combinators   &&&&&&& r   parse_has_combinatorZCSSParser.parse_has_combinator  s     WWZ(..0
&J))#LbM##**3/]*HY[)'"''..s3". *;E7CLL  Z'Hk(**r   c               s<    V ^8  d   QhRRRRRRRRR	RR
RRRRRRR/	# )r   r   rs   r6   r7   r   r5   r{   r   r|   	is_pseudo
is_forgiverF   r   r   ztuple[bool, _Selector]r   r   r   r   r   r   ,  sd     .! .!.! .! 	.!
 #.! #.! .! .! .! 
 .!r   c	                s   VP                  R4      P                  4       p	V	'       g   \        p	V'       gY   V'       d   V	\        8w  d   \	        RV	 RV R2V P
                  V4      hV	\        8X  d   RVn        VR VP                  V4       MV	\        8X  dg   VP                  '       g%   V'       g   \        P                  ! RR4      Vn        VP                  P                  V4       VP                  V4       VR M5VP                  P                  V4       Wn        VR VP                  V4       \        4       pR	pW13# )
r   r   zThe combinator 'z' at position z , must have a selector before itTNNNr   NF)r;   r   r   r   r   r   r   rE   rv   r   r   r|   r   r}   rs   )
rV   r   r6   r   r{   r|   r   r   rF   r   s
   &&&&&&&&& r   parse_combinatorZCSSParser.parse_combinator,  s    WWZ(..0
&J/?!?)&zl.GghLL  --#aL  %--wwwy nnS$7CG$$Y/  %aL$$Y/)aL  %k  r   c               r   r   r   r   r   r   r   r   \  s)     	 	) 	
 	$ 	SW 	r   c                s   VP                  ^ 4      pVP                  R4      '       d0   VP                  P                  \	        VR,          4      4       RpV# VP
                  P                  \	        VR,          4      4       RpV# )zParse HTML classes and ids..r8   T)r;   r   rx   rE   r/   rw   )rV   r   r6   r   r`   r&   r   parse_class_idZCSSParser.parse_class_id\  sp     771:s##KK|HRL9:  GGNN<56r   c               r   r   r   r   r   r   r   r   g  s*       z QU Z^ r   c                s\   \         P                  ! \        VP                  R4      4      4      pVR8X  d   \        P
                  ! R\        4       VR8H  p\        VP                  R4      4      p. p\        P                  V4       Fp  pVP                  R4      '       d   K  VP                  R4      p	V	P                  R	4      '       d   \        V	^R
 R4      p	M\        V	4      p	VP                  V	4       Kr  	  VP                  P                  \        P                  ! Wu4      4       RpV# )zParse contains.r2   	:containsz\The pseudo class ':contains' is deprecated, ':-soup-contains' should be used moving forward.:-soup-contains-ownvaluessplitr1   T)r   r   r   )r   r,   r/   r;   warningsZwarnZFutureWarning	RE_VALUESfinditerr   rE   r~   r   ZSelectorContains)
rV   r   r6   r   rp   Zcontains_ownr  rk   tokenr1   s
   &&&&      r   parse_pseudo_containsZCSSParser.parse_pseudo_containsg  s     L9:[ MMn !66aggh/0''/E{{7##KK(E
++$U1R[$7$U+OOE" 0 	B//GHr   c               r   r   r   r   r   r   r   r     s)      Y : T VZ r   c                s   VP                  R4      p. p\        P                  V4       Fp  pVP                  R4      '       d   K  VP                  R4      pVP                  R4      '       d   \	        V^R R4      pM\	        V4      pVP                  V4       Kr  	  VP                  P                  \        P                  ! V4      4       RpV# )zParse pseudo language.r  r  r1   Tr   r   )	r;   r	  r
  r   r/   rE   r   r   ZSelectorLang)rV   r   r6   r   r  rk   r  r1   rr   r   parse_pseudo_langZCSSParser.parse_pseudo_lang  s     "''/E{{7##KK(E
++$U1R[$7$U+OOE" 0 	12r   c               r   r   r   r   r   r   r   r     s)      I * D UY r   c                s    \         P                  ! VP                  R4      4      R8X  d   \        P                  M\        P
                  pV;P                  V,          un        RpV# )zParse pseudo direction.ZdirZltrT)r   r,   r;   r   ZSEL_DIR_LTRZSEL_DIR_RTLr   )rV   r   r6   r   r1   r&   r   parse_pseudo_dirZCSSParser.parse_pseudo_dir  sD     #'**QWWU^"<"E2>>		U	r   c               r^   )r   r   r   rF   r   r   r   r   r   r   r   r   r   r     s>     uQ uQ3uQ uQ 	uQ
 
uQr   c           
     s   \        4       p. pRpRp. pR\        ,           p	\        V\        ,          4      p
\        V\        ,          4      p\        V\
        ,          4      p\        V\        ,          4      p\        V\        ,          4      p\        V\        ,          4      p\        V\        ,          4      p\        V\        ,          4      p\        V\        ,          4      p\        V\        ,          4      p\        V\        ,          4      pV P                  '       d   V'       d   \        R4       V
'       d   \        R4       V'       d   \        R4       V'       d   \        R4       V'       d   \        R4       V'       d   \        R4       V'       d   \        R	4       V'       d   \        R
4       V'       d   \        R4       V'       d   \        R4       V'       d   \        R4       V'       d   VP!                  \        4       4         \#        V4      w  ppVR8X  d   \%        RVP'                  ^ 4       24      hVR8X  d,   V;P(                  \*        P,                  ,          un        RpEM<VR8X  d   V P/                  VVV4      pEM VR8X  d   V P1                  VVWaV4      w  rnEMVR8X  d   \%        RVP'                  ^ 4       24      hVR8X  d   V P3                  VVV4      pEMVR%9   d   V P5                  VVWa4      pEMVR8X  d   V P7                  VVV4      pEMVR8X  d   V P9                  VVV4      pRpEMkVR8X  d   V'       gH   V'       g9   \;        RVP'                  ^ 4       2V P<                  VP'                  ^ 4      4      hRVn        V
'       d   RpEM\;        RVP'                  ^ 4       2V P<                  VP'                  ^ 4      4      hVR8X  d:   V'       d   V PA                  VVWeW4      w  rdp	MV PC                  VVWeWVV4      w  rdMVR8X  d   V PE                  VVV4      pMvVR8X  dV   V'       d:   \;        RVP'                  ^ 4       R 2V P<                  VP'                  ^ 4      4      hV PG                  VVV4      pMVR&9   d   V PI                  VVV4      pVPK                  ^ 4      pEK  V
'       d#   V'       g   \;        R!V 2V P<                  V4      hV'       d   VPN                  '       g%   V'       g   \*        PP                  ! R"R#4      Vn'        V'       d*   Wn)        VR',          PT                  P!                  V4       MeVPT                  PW                  V4       VR$ VP!                  V4       M5V'       d.   V'       d	   V'       g   RVn        VR$ VP!                  V4       RpV'       g   \;        RV 2V P<                  V4      hV'       d   \*        PX                  VR',          n        V'       d   \*        PZ                  VR',          n        V'       d   \*        P\                  VR',          n        V'       d   \*        P^                  VR',          n        V'       d   \*        P`                  VR',          n        \*        Pb                  ! V Uu. uF  pVPe                  4       NK  	  upW4      #   \L         d     ELi ; iu upi )(zParse selectors.Fr   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   z!Pseudo-element found at position r   r   r   r   z Expected a selector at position z)Unmatched pseudo-class close at position r   r   rv   zTag name found at position z instead of at the startz"Unclosed pseudo-class at position r   Nr   )r   r   )r   r   r   )3rs   r   r5   r   r   r   r   FLG_HTMLFLG_DEFAULTFLG_INDETERMINATEFLG_IN_RANGEFLG_OUT_OF_RANGEFLG_PLACEHOLDER_SHOWNr   r   printrE   ZnextZNotImplementedErrorr   r   r   r   r   r   r  r   r  r  r   r   r   r   r  r   r   r  r   ZStopIterationrv   r   r}   r|   r   ZSEL_DEFAULTZSEL_INDETERMINATEZSEL_IN_RANGEZSEL_OUT_OF_RANGEZSEL_PLACEHOLDER_SHOWNr   r   )rV   r   rF   r   r   r{   r   Zclosedr|   r}   Zis_openr   Zis_relativeZis_notr   Z
is_defaultZis_indeterminateZis_in_rangeZis_out_of_rangeZis_placeholder_shownr   r0   r6   Zss   &&&&                    r   r   Z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
 6%4UG<  7779..d3'"''..s3$$Y/aL  % )CL!S!L &25':  "$..IbM"$"6"6IbM"$//IbM"$"5"5IbM"$":":IbM I>Iq
I>PPq  		p  ?sA   E[ [ $A[ +[ /A[ 6A[ A;[ 4['[$#[$c               r+   )r   r   r   r   r   r   r   r   r   r   r   T  s     '$ '$S '$-M '$r   c              #  s  "   \         P                  V4      pV'       d   VP                  ^ 4      M^ p\        P                  V4      pV'       d   VP	                  ^ 4      ^,
          M\        V4      ^,
          pV P                  '       d   \        RV: 24       W48:  Ed   RpV P                   F  pVP                  WV P                  4      pV'       g   K)  VP                  4       pV P                  '       d4   \        RV RVP                  ^ 4      : RVP	                  ^ 4       24       VP                  ^ 4      pWb3x   M	  Ve   K  W,          pVR8X  d   RV 2pM0VR8X  d   R	V 2pM#VR
8X  d   RV 2pMVR8X  d   RV 2pM	RV: RV 2p\        WP                  V4      hV P                  '       d   \        R4       R# R# 5i)zIterate selector tokens.z## PARSING: NzTOKEN: 'z' --> z at position Z[z)Malformed attribute selector at position r  z%Malformed class selector at position Z#z"Malformed id selector at position r   z,Malformed pseudo-class selector at position zInvalid character z
 position z## END PARSING)RE_WS_BEGINr   r   	RE_WS_ENDr   rD   r   r  
css_tokensr.   r   r]   r;   r   r   )	rV   r   r6   rF   r   Zvr2   rG   Zmsgs	   &&       r   selector_iterZCSSParser.selector_iterT  s     w'a1W%"#qwwqzA~#g,*::::L,-lA__GGGDJJ71::<DzzzfQWWQZN-PQPWPWXYPZ|\]EE!HE'M % yN 8EeWMC#XA%IC#X>ugFC#XHPC.qe:eWEC)#||UCC:::"# s-   AG
;G
AG
!G
;AG
A,G
;G
c               rL   )r   rF   r   r   r   r   r   r   r   r   r   r   }  s&     T Ts Ts T? Tr   c                sX    V P                  V P                  V P                  4      W4      # )zProcess selectors.)r   r  r   )rV   rF   r   rW   r   r$   ZCSSParser.process_selectors}  s&     ##D$6$6t||$DeSSr   )r   r   r   r   )r  :-soup-containsr  )r   r   )r   r   ):lang):dir)N    )r  r  ))rd   re   rf   rg   rh   rJ   PAT_PSEUDO_CLOSErj   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  rX   r   r   r   r   r   r   r   r  r  r  r  r  r   r  r$   ri   r   r   r   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J87DL8d%L?B.)+V.!`	2*uQn'$RT Tr   r#   zhtml|*:is(a, area)[href]r   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]
    )
    z*
    html|*:is(details, dialog)[open]
    z(
    html|*:is(video, audio)[muted]
    >   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   r   >   :hostz:pastz:focusz:hoverz:activez:futurez:pausedz:target:currentz:playingz:seekingz:stalledz:visitedz	:autofillz
:bufferingz:fullscreenz:local-linkz:focus-withinz:popover-openz:user-invalidz:focus-visiblez:target-withinz:volume-lockedz:picture-in-picture>   r   r   r   r   z:matchesr  r  r  >   r.  r/  z:host-context>   r  r  r   r   r   r   )F)hrh   Z
__future__r    rP   Z	functoolsr   r:   r   r   r"   r   r   r   r  Ztypingr   r   r   r	   r<   r   r   r   r   ZPSEUDO_SPECIALr   ZNEWLINEZWSZCOMMENTSZWSCZCSS_ESCAPESZCSS_STRING_ESCAPESZ
IDENTIFIERZNTHZVALUEZATTRr)  r*  r+  r,  r%  rn   r$  r'  r  r&  r(  r   r!  r"  r#  r-  r  rQ   rR   r?   r@   r   rS   r	  r   r  r  r-   r   r   r   r   r   r  r  r  r   r  r  r  r   Z	_MAXCACHEr'   r*   r!   r/   rH   rJ   rj   rs   r#   r$   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r0     sB    " 	     %  - -! < 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TT TTv *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 $  *x/0	 	  *x/0	 
r   