
    -j                       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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\$ S23	r(S3\! S4\ S53r)S3\! S4\ S63r*S7\! S3r+S8r,\ S93r-S:\) 3r.S;\! 3r/S<\* S=\" S>\ S?\ S)\ \ S@\ S)\ \ SA3r0SB\* SC\" SD\ SE3r1\* SF\# S\ SG\ S)\# SH\ S93r2\* SI\ S93r3\ SJ\ SK\ S)3r4\* SF\# S\ SG\ S)\# SH\ S93r5\Rl                  " SL\ SM3\Rn                  5      r8\Rl                  " SL\ SN\ S3\Rn                  5      r9\Rl                  " SO\ SP\ SQ3\Rn                  5      r:\Rl                  " SR\# SS\ SG\ ST3\Rv                  5      r<\Rl                  " \5      r=\Rl                  " SU\ S)35      r>\Rl                  " \ SV35      r?\Rl                  " SU\+ SW3\Rv                  5      r@SXrASYrBSrCSZrDS[rES\rFS]rGS^rHS_rIS`rJSarKSbrLScrMSdrN\" \NSe9          SSf j5       rOSSg jrPSSh jrQSSSi jjrRSSj jrS " Sk Sl5      rT " Sm Sn\T5      rU " So Sp5      rV " Sq Sr5      rW\W" Ss5      R                  \C\G-  St9rY\W" Su5      R                  \C\G-  St9rZ\W" Sv5      R                  \C\G-  \F-  St9r[\W" Sw5      R                  \C\G-  \H-  St9r\\W" Sx5      R                  \C\G-  St9r]\W" Sy5      R                  \C\G-  St9r^\W" Sz5      R                  \C\G-  St9r_\W" S{5      R                  \C\G-  St9r`\W" S|5      R                  \C\G-  \L-  St9ra\W" S}5      R                  \CSt9rb\W" S~5      R                  \C\G-  St9rc\W" S5      R                  \C\G-  St9rd\W" S5      R                  \C\J-  \G-  St9re\W" S5      R                  \C\K-  \G-  St9rf\W" S5      R                  \C\G-  St9rg\W" S5      R                  \C\G-  St9rhg)zCSS selector parser.    )annotationsN)	lru_cache   )util)	css_match)	css_types)SelectorSyntaxError)MatchAnyIteratorcasti  i    >   :link:open:root:empty:muted: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:seeking:stalled:visited	:autofill
:buffering:fullscreen:local-link:focus-within:popover-open:user-invalid:focus-visible:target-within:volume-locked:picture-in-picture>   :is:has:not:where:matches	:contains:-soup-contains:-soup-contains-own>   r(   r0   :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*(?P<cmp>[!~^|*$]?=)z*(?P<value>z)(?:z*(?P<case>[is]))?)?*z\#z\.z(?P<tag_ns>(?:z|\*)?\|)?(?P<tag_name>z|\*)z\[z*(?P<attr_ns>(?:z|\*)?\|)?(?P<attr_name>z\]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
namespacesrc   rd   custom_selectorss        L/mnt/data/Frawley/.venv/lib/python3.13/site-packages/soupsieve/css_parser.py_cached_css_compilern      sH     &f-<<#	
 


 
    c                 ,    [         R                  5         g)zPurge the cache.N)rn   cache_clear ro   rm   _purge_cachers      s     ##%ro   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)rc   rl   keyvaluenames        rm   re   re      s      ,,.JC::c?Dt$,)Jtf<e*fgg'!6tf<YZ[[38\$/0 ) ro   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   Nr[   r   rX         � )groupintUNICODE_REPLACEMENT_CHARchr)m	codepointr|   s      rm   replacecss_unescape.<locals>.replace  s     771::AGGAJqrNB/IA~4		NE  WWQZZGGAJqrNE  WWQZZE  Ero   )r   
Match[str]returnstr)
RE_CSS_ESCRE_CSS_STR_ESCsub)contentstringr   s      rm   rz   rz      s    " %J.==gOOro   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   \r         xrW   0   9   )-   _   r^   A   Z   a   z   r   )lenappend	enumerateordjoin)identr   length
start_dashindexcr   s          rm   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?ro   c                  6    \ rS rSrSrSS jrS	S jrS
S jrSrg)SelectorPatterni1  Selector pattern.c                    Xl         [        R                  " U[        R                  [        R                  -  [        R
                  -  5      U l        g)Initialize.N)r}   recompileIXU
re_pattern)selfr}   rj   s      rm   __init__SelectorPattern.__init__4  s0     	**WbddRTTkBDD.@Aro   c                    U R                   $ )	Get name.)r}   r   s    rm   get_nameSelectorPattern.get_name:  s     yyro   c                8    U R                   R                  X5      $ )Match the selector.)r   rx   )r   selectorr   rd   s       rm   rx   SelectorPattern.match?  s     $$X55ro   )r}   r   N)r}   r   rj   r   r   Noner   r   r   r   r   r   rd   r   r   zMatch[str] | None	__name__
__module____qualname____firstlineno____doc__r   r   rx   __static_attributes__rr   ro   rm   r   r   1  s    B
6ro   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)SpecialPseudoPatterniE  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   r   rX   r   N)	patternsmatched_namer   r   PAT_PSEUDO_CLASS_SPECIALr   r   r   re_pseudo_name)r   r   pr}   rj   pseudos         rm   r   SpecialPseudoPattern.__init__H  s     AQ4Dd41&GA$(/f%   ! jj)A244"$$;QSQUQUCUVro   c                T    U R                   c  S$ U R                   R                  5       $ )r   r   )r   r   r   s    rm   r   SpecialPseudoPattern.get_nameU  s)     &&.rPD4E4E4N4N4PPro   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   Nr}   )	r   rx   r   rv   rz   r   r   getr   )r   r   r   rd   r   r   r}   rj   s           rm   rx   SpecialPseudoPattern.matchZ  sr     %%h6::l1776?;<Dmm''-G x>(/%ro   )r   r   r   N)r   zCtuple[tuple[str, tuple[str, ...], str, type[SelectorPattern]], ...]r   r   r   r   r   rr   ro   rm   r   r   E  s    WQ
ro   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)	_Selectorij  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langrd   r   no_matchF)r   r   r   r   r   r   r   r   r   r   r   rd   r   )r   kwargss     rm   r   _Selector.__init__s  s     ::eT*::eR(zz)R0 **\26::eR(K4K4

:t4

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

:u5ro   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      rm   _freeze_relations_Selector._freeze_relations  sL     A,CMM  12/??CJJL>22??$$ro   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   rd   r   s    rm   r   _Selector.freeze  s     ==??$$;;dhhdll#doo&dhhdnn%&&t~~6dmm$dii 

 ro   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=rO   )r   r   r   r   r   r   r   r   r   r   rd   r   r   s    rm   __str___Selector.__str__  s     TXXLtxxl*T\\DTTabfbqbqat u88,l4>>*<LHZ [(DMM3DGDII=X`aeakak`n o(+	
ro   )r   r   r   rd   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   rr   ro   rm   r   r   j  s"    6 %(
 Hro   r   c                  j   \ 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          S0S jr            S1S  jr              S2S! jr                   S3S" jr!S.S# jr"S.S$ jr#S.S% jr$S.S& jr%  S4       S5S' jjr&S6S( jr'S4S7S) jjr(S*r)g)8rh   i  zParse CSS selectors.pseudo_closepseudo_contains)rE   rF   rG   pseudo_nth_child)rK   rM   pseudo_nth_type)rL   rN   pseudo_lang)rJ   
pseudo_dir)rI   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 OUU l        SU l        g)r    r   Nr   )r   rj   rd   r   DEBUGdebugrc   count)r   r   rc   rd   s       rm   r   CSSParser.__init__  sE      ''9
ZZ$**,
"Nb
ro   c                P    U R                   [        :  a  [        S[         35      eg)z!Check the current selector count.z/Selector exceeds pseudo-class nesting limit of N)r  SELECTOR_LIMIT
ValueErrorr   s    rm   check_countCSSParser.check_count  s)     ::&N~N^_`` 'ro   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_nsr   	attr_nameir   typeTr|   "'r   rT   z^%s.*rU   z.*?%s$rQ   z.*?%s.*~z[^\s\S]z7.*?(?:(?<=^)|(?<=[ \t\r\n\f]))%s(?=(?:[ \t\r\n\f]|$)).*rP   z^%s(?:-.*)?$z^%s$!)r   r   rv   rz   r   r   DOTALL
startswithr   r   RE_WSsearchrj   r   SelectorAttributer   r   r   r   r   r   )r   r   r   has_selectorinverseopr  nsattris_typepattern2r|   rd   rj   sel_attrsub_selnot_lists                    rm   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!!(+ro   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)r   rz   r   SelectorTagr   )r   r   r   r,  prefixr   s         rm   parse_tag_patternCSSParser.parse_tag_pattern'  s]     :;9J9Jaggh/45PT177:./..-ro   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                   UR                   -  sl        U R#                  5         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.
r}   zUndefined custom selector 'z' found at position r   rb   rd   T)r   rv   rz   r   rc   r   r	   endrj   
isinstancer   r   rh   rd   ri   
FLG_PSEUDOr  r  r   r   )r   r   r   r,  r   r   s         rm   parse_pseudo_class_custom#CSSParser.parse_pseudo_class_custom0  s     L9:;;??6*%-fX5I!%%PQ(Ta  (BOO44F# DJJj1  #+KK

hnn$
X&ro   c                   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d6  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OUS	:X  a%  U=R                  [        R                  -  sl        GOxUS
;   aT  U =R                  [        R                  -  sl        U R!                  5         UR"                  R%                  [        5        GOUS:X  aT  U =R                  [&        R                  -  sl        U R!                  5         UR"                  R%                  [&        5        GOUS:X  aT  U =R                  [(        R                  -  sl        U R!                  5         UR"                  R%                  [(        5        GOjUS:X  aT  U =R                  [*        R                  -  sl        U R!                  5         UR"                  R%                  [*        5        GOUS:X  aT  U =R                  [,        R                  -  sl        U R!                  5         UR"                  R%                  [,        5        GOUS:X  aT  U =R                  [.        R                  -  sl        U R!                  5         UR"                  R%                  [.        5        GO\US:X  aT  U =R                  [0        R                  -  sl        U R!                  5         UR"                  R%                  [0        5        GOUS:X  aT  U =R                  [2        R                  -  sl        U R!                  5         UR"                  R%                  [2        5        GOUS:X  aT  U =R                  [4        R                  -  sl        U R!                  5         UR"                  R%                  [4        5        GONUS:X  aT  U =R                  [6        R                  -  sl        U R!                  5         UR"                  R%                  [6        5        GOUS:X  aT  U =R                  [8        R                  -  sl        U R!                  5         UR"                  R%                  [8        5        GOUS:X  aT  U =R                  [:        R                  -  sl        U R!                  5         UR"                  R%                  [:        5        GO@US:X  aT  U =R                  [<        R                  -  sl        U R!                  5         UR"                  R%                  [<        5        GOUS:X  aT  U =R                  [>        R                  -  sl        U R!                  5         UR"                  R%                  [>        5        GOUS:X  aT  U =R                  [@        R                  -  sl        U R!                  5         UR"                  R%                  [@        5        GO2US:X  aI  URB                  R%                  [        RD                  " SSSSS[        RF                  " 5       5      5        GOUS:X  aI  URB                  R%                  [        RD                  " SSSSS[        RF                  " 5       5      5        GOUS:X  aI  URB                  R%                  [        RD                  " SSSSS[        RF                  " 5       5      5        GOEUS:X  aH  URB                  R%                  [        RD                  " SSSSS[        RF                  " 5       5      5        OUS:X  av  URB                  RI                  [        RD                  " SSSSS[        RF                  " 5       5      [        RD                  " SSSSS[        RF                  " 5       5      /5        O{US:X  au  URB                  RI                  [        RD                  " SSSSS[        RF                  " 5       5      [        RD                  " SSSSS[        RF                  " 5       5      /5        SnX54$ U(       aB  U[J        ;   a8  U RM                  XBR                  S5      [N        [P        -  5        SUl)        SnX54$ U(       d  U[T        ;   a  SUl)        SnX54$ U[V        ;   a*  [Y        S U S!3U RZ                  UR]                  S5      5      e[Y        S!U S"3U RZ                  UR]                  S5      5      e)#zParse pseudo class.Fr}   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"   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   rv   rz   r   PSEUDO_COMPLEXparse_pseudo_openrA  PSEUDO_SIMPLErd   r   SEL_ROOTSEL_DEFINED	SEL_SCOPE	SEL_EMPTYr  CSS_LINKr  r   r   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_SHOWNr   SelectorNthr   r   PSEUDO_COMPLEX_NO_MATCHparse_selectorsrC  FLG_OPENr   PSEUDO_SIMPLE_NO_MATCHPSEUDO_SUPPORTEDr	   rj   start)r   r   r   r,  	iselectoris_htmlcomplex_pseudor   s           rm   parse_pseudo_classCSSParser.parse_pseudo_classO  s    L9:776??!Nf611#|XYX]X]^_X`aLf $$e  Fm$; 		R[[(	:%		R^^+	8#		R\\)	8#		R\\)	11

hnn,
  "$$X.:%

k///
  "$$[1:%

k///
  "$$[1++

/555
  "$$%67;&

l000
  "$$\2:%

k///
  "$$[1;&

l000
  "$$\28#

ioo-
  "$$Y/7"

hnn,
  "$$X.;&

l000
  "$$\2<'

m111
  "$$]3=(

n222
  "$$^4;&

l000
  "$$\2?*

.444
  "$$%56//

3999
  "$$%:;>)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
	 ro   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O5[$        nU =R&                  UR&                  -  sl        U R)                  5         US:X  a7  UR*                  R-                  [.        R0                  " XU	SSU5      5        S	nU$ US:X  a3  UR*                  R-                  [.        R0                  " XU	SS	U5      5        S	nU$ US:X  aJ  UR*                  R-                  [.        R0                  " XU	S	S[.        R2                  " 5       5      5        S	nU$ US:X  aF  UR*                  R-                  [.        R0                  " XU	S	S	[.        R2                  " 5       5      5        S	nU$ )zParse `nth` pseudo.r  _child_typer}   r   evenrX   r   Toddr   s1r   r   an1Nr  s2b0
   ofrK   FrM   rL   rN   )	groupdictr   r   rv   rz   r   r
   r   RE_NTHrx   r   endswithr(  r   r`  rA  rC  ra  CSS_NTH_OF_S_DEFAULTr  r  r   r   r   r^  r   )r   r   r   r,  re  mdictpostfixr   ro  rs  var	nth_parts_s1rp  _s2
pseudo_selnth_sels                    rm   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 /

gmm+
  "\)r~~br5%QR  00r~~br5$PQ  ^+r~~br4HYZ[  22r~~br4rGXYZro   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.rB   rA   )rC   r@   T)rC  ra  FLG_NOTFLG_RELATIVEFLG_FORGIVEr   r   r`  )r   r   r}   r,  re  r   rd   s          rm   rI  CSSParser.parse_pseudo_open  sm     X%6>WEV^\!E&&[ ET11)EJKro   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  rS   r   Nz%The multiple combinators at position F)
r   stripWS_COMBINATORCOMMA_COMBINATORr   r   r   r   r	   rj   )r   r   r   r,  r   r   r   
combinators           rm   parse_has_combinatorCSSParser.parse_has_combinator-  s     WWZ(..0
&J))#LbM##**3/]*HY[)'"''..s3!". *;E7CLL  Z'Hk(**ro   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$ )	r  r  zThe combinator 'z' at position z , must have a selector before itTNrQ   F)r   r  r  r  r	   rj   r   r   r   r   r;  r   r   r   r   )
r   r   r   r,  r   r   	is_pseudo
is_forgiver   r  s
             rm   parse_combinatorCSSParser.parse_combinatorX  s    WWZ(..0
&J/?!?)&zl.GghLL  --#aL  %--wwy nnS$7CG$$Y/  %aL$$Y/)aL  %k  ro   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)r   r(  r   r   rz   r   )r   r   r   r,  r   s        rm   parse_class_idCSSParser.parse_class_id  st     771:s##KK|HQRL9:  GGNN<56ro   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.r}   rE   z\The pseudo class ':contains' is deprecated, ':-soup-contains' should be used moving forward.rG   valuessplitr|   )r$  r#  r   r  T)r   rv   rz   r   warningswarnFutureWarning	RE_VALUESfinditerr(  r   r   r   SelectorContains)
r   r   r   r,  r   contains_ownr  r   tokenr|   s
             rm   parse_pseudo_containsCSSParser.parse_pseudo_contains  s     L9:[ MMn !66aggh/0''/E{{7##KK(E
++$U1R[$7$U+OOE" 0 	B//GHro   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  r|   r"  r   r  T)	r   r  r  r(  rz   r   r   r   SelectorLang)r   r   r   r,  r  r   r  r|   s           rm   parse_pseudo_langCSSParser.parse_pseudo_lang  s     "''/E{{7##KK(E
++$U1R[$7$U+OOE" 0 	12ro   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   rv   r   r   SEL_DIR_LTRSEL_DIR_RTLrd   )r   r   r   r,  r|   s        rm   parse_pseudo_dirCSSParser.parse_pseudo_dir  sD     #'**QWWU^"<"E2>>		U	ro   c           
     t   [        5       n/ nSnSn/ nS[        -   n	U R                  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;  a%  U =R                  S-  sl        U R'                  5         US:X  a  [)        SUR+                  S5       35      eUS:X  a'  U=R,                  [.        R0                  -  sl        SnGO+US:X  a  U R3                  UUU5      nGOUS:X  a  U R5                  UUXaU5      u  poGOUS:X  a  [)        SUR+                  S5       35      eUS:X  a  U R7                  UUU5      nGOUS;   a  U R9                  UUXa5      nGOUS:X  a  U R;                  UUU5      nGO~US:X  a  U R=                  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 RE                  UUXeX5      u  pdn	OU RG                  UUXeXUU5      u  pdOUS!:X  a  U RI                  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 RK                  UUU5      nOUS%;   a  U RM                  UUU5      nURO                  S5      nGM  U(       a!  U(       d  [?        S&U 3U R@                  U5      eU(       a  URR                  (       d#  U(       d  [.        RT                  " S'S(5      Ul)        U(       a%  Xl+        US)   RX                  R#                  U5        OfURX                  R[                  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  [.        R\                  US)   l        U(       a  [.        R^                  US)   l        U(       a  [.        R`                  US)   l        U(       a  [.        Rb                  US)   l        U(       a  [.        Rd                  US)   l        [.        Rf                  " U Vs/ s H  nURi                  5       PM     snXU R                  U
-
  5      $ ! [P         a     GNf = fs  snf )*zParse selectors.FrS   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: TrueT)r  r   r   r
  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 rQ   Nr  )5r   r  r  boolra  rC  r  r  FLG_HTMLFLG_DEFAULTFLG_INDETERMINATEFLG_IN_RANGEFLG_OUT_OF_RANGEFLG_PLACEHOLDER_SHOWNr  r  printr   nextr  NotImplementedErrorrd  rd   r   rM  rD  rh  r  r  r  r  r	   rj   r   r  r  r6  r=  r  rA  StopIterationr   r;  r   r   r   SEL_DEFAULTSEL_INDETERMINATESEL_IN_RANGESEL_OUT_OF_RANGESEL_PLACEHOLDER_SHOWNr   r   )r   re  r   rd   r   r   r,  closedr   r   r  is_openr  is_relativeis_notrf  
is_defaultis_indeterminateis_in_rangeis_out_of_rangeis_placeholder_shownr  r{   r   ss                            rm   r`  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[)H	iQ99JJ!OJ$$& )#-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K T 6%4UG<  779..d3'"''..s3$$Y/aL  % )CL!S!L &25':  "$..IbM"$"6"6IbM"$//IbM"$"5"5IbM"$":":IbM I>Iq
I>QUQ[Q[^cQcddq  		p  ?s    &F0Z$ DZ$ 4Z5$
Z21Z2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 rS   z,Malformed pseudo-class selector at position zInvalid character z
 position z## END PARSING)RE_WS_BEGINr*  rA  	RE_WS_ENDrd  r   r  r  
css_tokensrx   rd   r   r   r	   rj   )	r   rj   r   r   rA  vr}   r   msgs	            rm   selector_iterCSSParser.selector_iter  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.)r`  r  rj   )r   r   rd   s      rm   ri   CSSParser.process_selectors  s&     ##D$6$6t||$DeSSro   )r  rc   r  rd   rj   )Nr   )r   r   rc   z'dict[str, str | ct.SelectorList] | Nonerd   r   r   r   r   r   )r   r   r   r   r,  r  r   r  )r   r   r   r   r,  r  re   Iterator[tuple[str, Match[str]]]rf  r  r   ztuple[bool, bool])
r   r   r   r   r,  r  re  r  r   r  )r   r   r}   r   r,  r  re  r  r   r   r   r  )r   r   r   r   r,  r  r   r   r   r   r   r   r   ztuple[bool, _Selector, str])r   r   r   r   r,  r  r   r   r   r   r  r  r  r  r   r   r   ztuple[bool, _Selector])r   r   )re  r  r   r   rd   r   r   r   )rj   r   r   r  )r   r   rd   r   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  r6  r=  rD  rh  r  rI  r  r  r  r  r  r  r`  r  ri   r   rr   ro   rm   rh   rh     s    	(89 &K'#	 $%FH\^mn"$IK^`op
O_My./J	
 	-/FG(89(*<=w'	;/f%+w'X.	;/3J> ;?	 8 	
 
aDL>B%B% B% 	B%
 4B% B% 
B%HAA A 	A
 4A 
AF  	
 4  
.)+)+ )+ 	)+
 #)+ )+ )+ 
%)+V.!.! .! 	.!
 #.! #.! .! .! .! 
 .!`	2* 	ze3ze ze 	ze
 
zex'$RT Tro   rh   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]
    )
rj   r   rk   zct.Namespaces | Nonerc   ct.CustomSelectors | Nonerd   r   r   zcm.SoupSiever  )rc   r  r   z dict[str, str | ct.SelectorList])F)r   r   r   r  r   r   )r   r   r   r   )ir   
__future__r   r   	functoolsr   r   r   r   rf   r   r   r	   r  typingr
   r   r   r   r   r  rJ  rb  rH  r_  PSEUDO_SPECIALrc  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   ry  r   r  r)  r  r  rw   r  r  rC  r  r  r  r  r  ra  r  r  r  r  	_MAXCACHErn   rs   re   rz   r   r   r   r   rh   ri   rO  rP  rQ  rR  rS  rT  rU  rX  r]  r{  rZ  rY  r[  r\  rW  rV  rr   ro   rm   <module>r     sx    " 	     %  - -! < 8	  !#99NJMddguu  ''!0	RD(1(O</t>'"M 88C} E88C} E

 
*#iuMJG9$B7)K^_i^jjkn
cU&se;ugT#FYZ]Y^^_` 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CT CTT *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	 
ro   