
    (phw                       S r SSKJr  SSKrSSKJr  SSKJr  SSKJr	  SSKJ
r  SS	KJr  SSKrSS
KJrJrJrJr  Sr1 Skr1 Skr1 Skr1 Skr1 Skr\\-  \-  \-  \-  rSrS\ S3rSrS\ S\ S3rS\ S3rS\ S\ S3rS\ S\ S3r S\ S\ S 3r!S!\ S"\ S#\  S$3r"S\ S%\ S&\" S'\ S(\ S)3r#S*\  3r$S+\  3r%S,\  S-\  S.3r&S/\ S0\  S1\  S\# 3r'S2\  S3\ S43r(S2\  S3\ S53r)S6\  S3r*S7r+\ S83r,S9\( 3r-S:\  3r.S;\) S<\! S=\ S>\ S?\ \ S@\ S?\ \ SA3r/SB\) SC\! SD\ SE3r0\) SF\" S\ SG\ S?\" SH\ S83r1\) SI\ S83r2\ SJ\ SK\ S?3r3\) SF\" S\ SG\ S?\" SH\ S83r4\Rj                  " SL\ SM3\Rl                  5      r7\Rj                  " SL\ SN\ S3\Rl                  5      r8\Rj                  " SO\ SP\ SQ3\Rl                  5      r9\Rj                  " SR\" SS\ SG\ ST3\Rt                  5      r;\Rj                  " \5      r<\Rj                  " SU\ S?35      r=\Rj                  " \ SV35      r>\Rj                  " SU\* SW3\Rt                  5      r?SXr@SYrASrBSZrCS[rDS\rES]rFS^rGS_rHS`rISarJSbrKScrLSdrM\" \MSe9          SSf j5       rNSSg jrOSSh jrPSSSi jjrQSSj jrR " Sk Sl5      rS " Sm Sn\S5      rT " So Sp5      rU " Sq Sr5      rV\V" Ss5      R                  \B\F-  St9rX\V" Su5      R                  \B\F-  St9rY\V" Sv5      R                  \B\F-  \E-  St9rZ\V" Sw5      R                  \B\F-  \G-  St9r[\V" Sx5      R                  \B\F-  St9r\\V" Sy5      R                  \B\F-  St9r]\V" Sz5      R                  \B\F-  St9r^\V" S{5      R                  \B\F-  St9r_\V" S|5      R                  \B\F-  \K-  St9r`\V" S}5      R                  \BSt9ra\V" S~5      R                  \B\F-  St9rb\V" S5      R                  \B\F-  St9rc\V" S5      R                  \B\I-  \F-  St9rd\V" S5      R                  \B\J-  \F-  St9re\V" S5      R                  \B\F-  St9rf\V" S5      R                  \B\F-  St9rgg)zCSS selector parser.    )annotationsN)	lru_cache   )util)	css_match)	css_types)SelectorSyntaxError)MatchAnyIteratorcasti  >   :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+)z*(?P<cmp>[!~^|*$]?=)z*(?P<value>z)(?:z*(?P<case>[is]))?)?z*\]z\#z\.z(?P<tag_ns>(?:z|\*)?\|)?(?P<tag_name>z|\*)z\[z*(?P<attr_ns>(?:z|\*)?\|)?(?P<attr_name>z
(?P<name>:z)(?P<open>\(z*)?z*)z(?P<name>:(?=--)&z*\):z@Pz
(?P<pseudo_nth_child>z
(?P<nth_child>z|even|odd))(?:z*\)|(?P<of>*z*ofz*))
z
(?P<pseudo_nth_type>z
(?P<nth_type>z|even|odd))z*\)
z(?P<values>z*,z)*)z(?P<dir>ltr|rtl)z*?(?P<relation>[,+>~]|z(?![,+>~]))z(?:(\\[a-f0-9]{1,6}z?)|(\\[^\r\n\f])|(\\$))z?)|(\\[^\r\n\f])|(\\$)|(\\z'(?P<s1>[-+])?(?P<a>[0-9]+n?|n)(?:(?<=n)z*(?P<s2>[-+])z*(?P<b>[0-9]+))?z(?:(?P<value>z)|(?P<split>z*))^z*$$,                 @         i   i   i  )maxsizec           	     z    [        U5      n[        R                  " U [        U UUS9R	                  5       UUU5      $ )zCached CSS compile.customflags)process_customcm	SoupSieve	CSSParserprocess_selectors)pattern
namespacesrc   rd   custom_selectorss        G/var/www/html/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)SelectorPatterni/  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__2  s0     	**WbddRTTkBDD.@Aro   c                    U R                   $ )	Get name.)r}   r   s    rm   get_nameSelectorPattern.get_name8  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   /  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)SpecialPseudoPatterniC  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__F  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_nameS  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.matchX  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   C  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)	_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                ,   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__q  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   h  s"    6 %(
 Hro   r   c                  `   \ rS rSrSr\" S\5      \" SS\\4SS\	\4SS	\
\4S
S\\4SS\\445      \" S\5      \" S\5      \" S\5      \" S\5      \" S\5      \" S\5      \" S\5      \" S\5      \" S\5      \" S\5      4r  S*       S+S jjrS,S jrS,S jrS,S jr            S-S jr          S.S jr            S/S jr              S0S  jr                  S1S! jr S,S" jr!S,S# jr"S,S$ jr#S,S% jr$  S2       S3S& jjr%S4S' jr&S2S5S( jjr'S)r(g)6rh   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 U l        gUU l        g)r    r   N)r   rj   rd   r   DEBUGdebugrc   )r   r   rc   rd   s       rm   r   CSSParser.__init__  sB      ''9
ZZ$**,
"Nb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$rS   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                   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   s         rm   parse_pseudo_class_custom#CSSParser.parse_pseudo_class_custom'  s     L9:;;??6*%-fX5I!%%PQ(Ta  (BOO44F# DJJj1  #+KKX&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d9  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O{US
;   a!  UR                  R                  [         5        GOTUS:X  a!  UR                  R                  ["        5        GO-US:X  a!  UR                  R                  [$        5        GOUS:X  a!  UR                  R                  [&        5        GOUS:X  a!  UR                  R                  [(        5        GOUS:X  a!  UR                  R                  [*        5        GOUS:X  a!  UR                  R                  [,        5        GOjUS:X  a!  UR                  R                  [.        5        GOCUS:X  a!  UR                  R                  [0        5        GOUS:X  a!  UR                  R                  [2        5        GOUS:X  a!  UR                  R                  [4        5        GOUS:X  a!  UR                  R                  [6        5        GOUS:X  a!  UR                  R                  [8        5        GOUS:X  a!  UR                  R                  [:        5        GOYUS:X  a!  UR                  R                  [<        5        GO2US:X  aI  UR>                  R                  [        R@                  " SSSSS[        RB                  " 5       5      5        GOUS:X  aI  UR>                  R                  [        R@                  " SSSSS[        RB                  " 5       5      5        GOUS:X  aI  UR>                  R                  [        R@                  " SSSSS[        RB                  " 5       5      5        GOEUS:X  aH  UR>                  R                  [        R@                  " SSSSS[        RB                  " 5       5      5        OUS:X  av  UR>                  RE                  [        R@                  " SSSSS[        RB                  " 5       5      [        R@                  " SSSSS[        RB                  " 5       5      /5        O{US:X  au  UR>                  RE                  [        R@                  " SSSSS[        RB                  " 5       5      [        R@                  " SSSSS[        RB                  " 5       5      /5        SnX54$ U(       aB  U[F        ;   a8  U RI                  XBR                  S5      [J        [L        -  5        SUl'        SnX54$ U(       d  U[P        ;   a  SUl'        SnX54$ U[R        ;   a*  [U        S U S!3U RV                  URY                  S5      5      e[U        S!U S"3U RV                  URY                  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_openr;  PSEUDO_SIMPLErd   r   SEL_ROOTSEL_DEFINED	SEL_SCOPE	SEL_EMPTYr   r   CSS_LINKCSS_CHECKEDCSS_DEFAULTCSS_INDETERMINATECSS_DISABLEDCSS_ENABLEDCSS_REQUIRED	CSS_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_selectorsr=  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_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
	 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O[$        nUS:X  a7  UR&                  R)                  [*        R,                  " XU	SSU5      5        S	nU$ US:X  a3  UR&                  R)                  [*        R,                  " XU	SS	U5      5        S	nU$ US:X  aJ  UR&                  R)                  [*        R,                  " XU	S	S[*        R.                  " 5       5      5        S	nU$ US:X  aF  UR&                  R)                  [*        R,                  " XU	S	S	[*        R.                  " 5       5      5        S	nU$ )zParse `nth` pseudo.r  _child_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   rZ  r;  r=  r[  CSS_NTH_OF_S_DEFAULTr   r   r   rX  r   )r   r   r   r&  r_  mdictpostfixr   ri  rm  var	nth_parts_s1rj  _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 /\)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)r=  r[  FLG_NOTFLG_RELATIVEFLG_FORGIVEr   r   rZ  )r   r   r}   r&  r_  r   rd   s          rm   rC  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  rR   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 itTNrS   F)r   r  r  r  r	   rj   r   r   r   r   r5  r   r   r   r   )
r   r   r   r&  r   r   	is_pseudo
is_forgiver   r  s
             rm   parse_combinatorCSSParser.parse_combinator,  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_containsg  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           
        [        5       n/ nSnSn/ nS[        -   n	[        U[        -  5      n
[        U[        -  5      n[        U[
        -  5      n[        U[        -  5      n[        U[        -  5      n[        U[        -  5      n[        U[        -  5      n[        U[        -  5      n[        U[        -  5      n[        U[        -  5      n[        U[        -  5      nU R                  (       a  U(       a  [        S5        U
(       a  [        S5        U(       a  [        S5        U(       a  [        S5        U(       a  [        S5        U(       a  [        S5        U(       a  [        S	5        U(       a  [        S
5        U(       a  [        S5        U(       a  [        S5        U(       a  [        S5        U(       a  UR!                  [        5       5          [#        U5      u  nnUS:X  a  [%        SUR'                  S5       35      eUS:X  a'  U=R(                  [*        R,                  -  sl        SnGO+US:X  a  U R/                  UUU5      nGOUS:X  a  U R1                  UUXaU5      u  pnGOUS:X  a  [%        SUR'                  S5       35      eUS:X  a  U R3                  UUU5      nGOUS;   a  U R5                  UUXa5      nGOUS:X  a  U R7                  UUU5      nGO~US:X  a  U R9                  UUU5      nSnGOaUS:X  a  U(       dF  U(       d8  [;        SUR'                  S5       3U R<                  UR'                  S5      5      eSUl        U
(       a  SnGO[;        SUR'                  S5       3U R<                  UR'                  S5      5      eUS:X  a8  U(       a  U RA                  UUXeX5      u  pdn	OU RC                  UUXeXUU5      u  pdOUS:X  a  U RE                  UUU5      nOsUS :X  aT  U(       a9  [;        S!UR'                  S5       S"3U R<                  UR'                  S5      5      eU RG                  UUU5      nOUS#;   a  U RI                  UUU5      nURK                  S5      nGM  U
(       a!  U(       d  [;        S$U 3U R<                  U5      eU(       a  URN                  (       d#  U(       d  [*        RP                  " S%S&5      Ul'        U(       a%  Xl)        US'   RT                  R!                  U5        OfURT                  RW                  U5        US&S&2	 UR!                  U5        O4U(       a-  U(       a  U(       d  SUl        US&S&2	 UR!                  U5        SnU(       d  [;        SU 3U R<                  U5      eU(       a  [*        RX                  US'   l        U(       a  [*        RZ                  US'   l        U(       a  [*        R\                  US'   l        U(       a  [*        R^                  US'   l        U(       a  [*        R`                  US'   l        [*        Rb                  " U Vs/ s H  nURe                  5       PM     snX5      $ ! [L         a     GNf = fs  snf )(zParse selectors.FrR   z    is_pseudo: Truez    is_open: Truez    is_relative: Truez    is_not: Truez    is_html: Truez    is_default: Truez    is_indeterminate: Truez    is_in_range: Truez    is_out_of_range: Truez    is_placeholder_shown: Truez    is_forgive: TrueTr
  zAt-rules found at position r   r	  r  r  r  z!Pseudo-element found at position r  )r  r  r  r  r   z Expected a selector at position z)Unmatched pseudo-class close at position r  r  r   zTag name found at position z instead of at the start)r  r  z"Unclosed pseudo-class at position rS   Nr  )3r   r  boolr[  r=  r  r  FLG_HTMLFLG_DEFAULTFLG_INDETERMINATEFLG_IN_RANGEFLG_OUT_OF_RANGEFLG_PLACEHOLDER_SHOWNr  r  printr   nextNotImplementedErrorr^  rd   r   rG  r>  rb  r  r~  r  r  r	   rj   r   r  r  r0  r7  r  r;  StopIterationr   r5  r   r   r   SEL_DEFAULTSEL_INDETERMINATESEL_IN_RANGESEL_OUT_OF_RANGESEL_PLACEHOLDER_SHOWNr   r   )r   r_  r   rd   r   r   r&  closedr   r   is_openr  is_relativeis_notr`  
is_defaultis_indeterminateis_in_rangeis_out_of_rangeis_placeholder_shownr  r{   r   ss                           rm   rZ  CSSParser.parse_selectors  s    k		& ux'(+,	5</0ego&ux'(%+-.
(9 9:5</0u'778#E,A$AB%+-.
 ::+,)*-.())*,-23-.12#67,- Y[)D	iQ )#-0KAGGTUJ<.XYYE\II-I#'L11#'#A#A#q,#WLN*,0,C,CCLel,m)L',,-0QRSRYRYZ[R\Q].^__--#'#=#=c1l#SLCC#'#8#8a#YLM)#'#9#9#q,#OLL(#'#8#8a#NL"GN*')"5"B1771:, O $ !
# 
 (,!%1GPQ
|T LLGGAJ 
 I%"6:6O6OLX738 -1,A,ALYS]_d-)c K'#'#@#@a#VLE\#19!''!*E]^ LLGGAJ 
 $(#9#9#q,#OLO+#'#6#6sA|#LLaC L 6%4UG<  779..d3'"''..s3$$Y/aL  % )CL!S!L &25':  "$..IbM"$"6"6IbM"$//IbM"$"5"5IbM"$":":IbM I>Iq
I>PPq  		p  ?s    FY !DY =Y0
Y-,Y-c              #  p  #    [         R                  U5      nU(       a  UR                  S5      OSn[        R                  U5      nU(       a  UR	                  S5      S-
  O[        U5      S-
  nU R                  (       a  [        SU< 35        X4::  Ga  SnU R                   H  nUR                  XU R                  5      nU(       d  M(  UR                  5       nU R                  (       a3  [        SU SUR                  S5      < SUR	                  S5       35        UR                  S5      nXb4v     O   UcS  X   nUS:X  a  S	U 3nO-US
:X  a  SU 3nO!US:X  a  SU 3nOUS:X  a  SU 3nO	SU< SU 3n[        XR                  U5      eX4::  a  GM  U R                  (       a  [        S5        gg7f)zIterate selector tokens.r   r   z## PARSING: NzTOKEN: 'z' --> z at position [z)Malformed attribute selector at position r  z%Malformed class selector at position #z"Malformed id selector at position rR   z,Malformed pseudo-class selector at position zInvalid character z
 position z## END PARSING)RE_WS_BEGINr$  r;  	RE_WS_ENDr^  r   r  r  
css_tokensrx   rd   r   r   r	   rj   )	r   rj   r   r   r;  vr}   r   msgs	            rm   selector_iterCSSParser.selector_iterT  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.)rZ  r  rj   )r   r   rd   s      rm   ri   CSSParser.process_selectors}  s&     ##D$6$6t||$DeSSro   )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_   Iterator[tuple[str, Match[str]]]r`  r  r   ztuple[bool, bool])
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&  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   )r_  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   r0  r7  r>  rb  r~  rC  r  r  r  r  r  r  rZ  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> ;?	77 87 	7
 
7DL8d%d% d% 	d%
 4d% d% 
d%L?? ? 	?
 4? 
?B  	
 4  
.)+)+ )+ 	)+
 #)+ )+ )+ 
%)+V.!.! .! 	.!
 #.! #.! .! .! .! 
 .!`	2* 	uQ3uQ uQ 	uQ
 
uQn'$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.SoupSieve)r   r   )rc   r  r   z dict[str, str | ct.SelectorList])F)r   r   r   r  r   r   )r   r   r   r   )hr   
__future__r   r   	functoolsr   r   r   r   rf   r   r   r	   r  typingr
   r   r   r   r   rD  r\  rB  rY  PSEUDO_SPECIALr]  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   rs  r   r  r#  r  r  rw   r  r  r=  r  r  r  r  r  r[  r  r  r  r  	_MAXCACHErn   rs   re   rz   r   r   r   r   rh   ri   rI  rJ  rK  rL  rM  rN  rO  rR  rW  ru  rT  rS  rU  rV  rQ  rP  rr   ro   rm   <module>r     sp    " 	     %  - -! < 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	 
ro   