Ë
    `Qbjs½  ã                  óD  — d Z ddlmZ ddlZddlmZ ddlmZ ddlmZ	 ddlm
Z dd	lmZ ddlZdd
lmZmZmZmZ ddlmZ ddlmZ ddlZ ej0                  «       Z ej4                  «       ZdZdZh d£Zh d£Zh d£Z h d£Z!h d£Z"eez  e z  e!z  e"z  Z#dZ$de$› d�Z%dZ&de%› de&› d�Z'de%› d�Z(de%› de$› d�Z)de(› de(› d �Z*d!e'› d"e'› d#�Z+d$e$› d%e$› d&e*› d�Z,de'› d'e'› d(e,› d)e'› d*e'› d+�Z-d,e*› �Z.d-e*› �Z/d.e*› d/e*› d0�Z0d1e'› d2e*› d3e*› de-› d4�	Z1d5e*› d6e'› d7�Z2d5e*› d6e'› d8�Z3d9e*› d�Z4d:Z5e'› d;�Z6d<e2› �Z7d=e*› �Z8d>e3› d?e+› d@e'› dAe&› d+e%› e'› dBe&› d+e%› e'› dC�Z9dDe3› dEe+› dFe'› dG�Z:e3› dHe,› de'› dIe'› d+e,› dJe'› d;�Z;e3› dKe'› d;�Z<e'› dLe%› dMe'› d+�Z=e3› dHe,› de'› dIe'› d+e,› dJe'› d;�Z> ej~                  dNe'› dO�ej€                  «      ZA ej~                  dNe%› dPe$› d�ej€                  «      ZB ej~                  dQe'› dRe'› dS�ej€                  «      ZC ej~                  dTe,› dUe'› dIe'› dV�ejˆ                  «      ZE ej~                  e%«      ZF ej~                  dWe'› d+�«      ZG ej~                  dXe&› dY�«      ZH ej~                  dWe4› dZ�ejˆ                  «      ZI ej~                  e3ej€                  ejˆ                  z  ej”                  z  «      ZKd[ZLd\ZMdZNd]ZOd^ZPd_ZQd`ZRdaZSdbZTdcZUddZVdeZWdfZXdgZY eeY¬h«      	 	 	 	 	 	 	 	 	 	 d‰di„«       ZZdŠdj„Z[d‹dk„Z\dŒd�dl„Z]dŽdm„Z^ G dn„ do«      Z_ G dp„ dqe_«      Z` G dr„ ds«      Zae G dt„ du«      «       Zb G dv„ dweecebejÈ                  z  f   «      Ze ebdxeNeRz  «      Zf ebdyeNeRz  «      Zg ebdzeNeRz  eQz  «      Zh ebd{eNeRz  eSz  «      Zi ebd|eNeRz  «      Zj ebd}eNeRz  «      Zk ebd~eNeRz  «      Zl ebdeNeRz  «      Zm ebd€eNeRz  eWz  «      Zn ebd�eNeRz  «      Zo ebd‚eNeRz  «      Zp ebdƒeNeRz  eUz  «      Zq ebdƒeNeRz  eVz  «      Zr ebd„eNeRz  «      Zs ebd…eNeRz  «      Zt ebd†eN«      Zu G d‡„ dˆ«      Zvy)�zCSS selector parser.é    )ÚannotationsN)Ú	lru_cacheé   )Úutil)Ú	css_match)Ú	css_types)ÚSelectorSyntaxError)ÚMatchÚAnyÚIteratorÚcast)Ú	dataclass)ÚUserDictiýÿ  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>   ú:pastú:focusú:hoverú:activeú:futureú:pausedú:targetú:playingú:seekingú:stalledú:visitedú	:autofillú
:bufferingú:fullscreenú:local-linkú:focus-withinú:popover-openú:user-invalidú:focus-visibleú:target-withinú:volume-lockedú:picture-in-pictureú:hostú:current>   ú:matchesú:isú:hasú:notú:whereú	:containsú:-soup-containsú:-soup-contains-own>   ú:host-contextr@   rA   >   ú: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))z;
(?:(?:--|-?(?:[^\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$^(?:[ \t]|(?:\n\r|(?!\n\r)[\n\f\r])|z)*ú$ú,ú é   é   é   é   é    é@   é€   é   i   i   iô  )Úmaxsizec                ó~   — t        |«      }t        j                  | t        | ||¬«      j	                  «       |||«      S )zCached CSS compile.©ÚcustomÚflags)Úprocess_customÚcmÚ	SoupSieveÚ	CSSParserÚprocess_selectors)ÚpatternÚ
namespacesre   rf   Úcustom_selectorss        úG/var/www/html/venv/lib/python3.12/site-packages/soupsieve/css_parser.pyÚ_cached_css_compilerp   Õ   sH   € ô & fÓ-ÐÜ�<‰<ØÜØØ#Øô	
÷ Ñ
Ó
ØØØó
ð 
ó    c                 ó,   — t         j                  «        y)zPurge the cache.N)rp   Úcache_clear© rq   ro   Ú_purge_cacheru   ì   s   € ô ×#Ñ#Õ%rq   c                óò   — i }| �r| j                  «       D ]_  \  }}t        j                  |«      }t        j	                  |«      €t        d|› d�«      ‚||v rt        d|› d�«      ‚||t        |«      <   Œa |S )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)re   rn   ÚkeyÚvalueÚnames        ro   rg   rg   ò   s‘   € ð ÐØÐØ Ÿ,™,›.ò 	9‰JˆC�Ü—:‘:˜c“?ˆDÜ�‰˜tÓ$Ð,Ü)¨J°t°fÐ<eÐ*fÓgÐgØÐ'Ñ'ÜÐ!6°t°fÐ<YÐZÓ[Ð[Ø38Ðœ\¨$Ó/Ò0ð	9ð Ðrq   c                óF   — dd„}|st         nt        j                  || «      S )zs
    Unescape CSS value.

    Strings allow for spanning the value on multiple strings by escaping a new line.
    c                ó  — | j                  d«      r6t        | j                  d«      dd d«      }|dk(  rt        }t        |«      }|S | j                  d«      r| j                  d«      dd }|S | j                  d«      rd}|S d}|S )	z(Replace with the appropriate substitute.r   Nr]   r   rZ   é   õ   ï¿½Ú )ÚgroupÚintÚUNICODE_REPLACEMENT_CHARÚchr)ÚmÚ	codepointr~   s      ro   Úreplacezcss_unescape.<locals>.replace  s‘   € ð �7‰7�1Œ:Ü˜AŸG™G A›J q r˜N¨BÓ/ˆIØ˜AŠ~Ü4�	Ü˜	“NˆEð ˆð �W‰W�QŒZØ—G‘G˜A“J˜q˜r�NˆEð ˆð �W‰W�QŒZØˆEð ˆð ˆEàˆrq   )r‰   ú
Match[str]ÚreturnÚstr)Ú
RE_CSS_ESCÚRE_CSS_STR_ESCÚsub)ÚcontentÚstringr‹   s      ro   r|   r|     s    € óñ" %�J¬.×=Ñ=¸gÀwÓOÐOrq   c                óz  — g }t        | «      }|dkD  xr | d   dk(  }|dk(  r|r|j                  d| › �«       nót        | «      D ]å  \  }}t        |«      }|dk(  r|j                  d«       Œ(d|cxk  rdk  sn |dk(  r|j                  d|d›d	�«       ŒQ|dk(  s|r*|dk(  r%d
|cxk  rdk  rn n|j                  d|d›d	�«       Œ‚|dv s:|dk\  s5d
|cxk  rdk  s*n d
|cxk  rdk  sn d|cxk  rdk  sn d|cxk  rdk  rn n|j                  |«       ŒÒ|j                  d|› �«       Œç dj	                  |«      S )zEscape identifier.r   ú-r   ú\rƒ   é   é   ÚxrY   é0   é9   )é-   é_   r`   éA   éZ   éa   éz   r„   )ÚlenÚappendÚ	enumerateÚordÚjoin)Úidentr“   ÚlengthÚ
start_dashÚindexÚcrŠ   s          ro   Úescaper¬     sG  € ð €FÜ�‹Z€FØ˜!‘Ò/  a¡¨C¡€JØ�‚{‘zà�‰˜˜5˜'�lÕ#ä! %Ó(ò 	(‰HˆE�1Ü˜A›ˆIØ˜DÒ Ø—‘˜hÕ'Ø˜)Ô+ tÔ+°	¸TÒ0AØ—‘  9¨Q -¨qÐ1Õ2Ø˜1’*¡°¸²
À$È)ÔB[ÐW[ÕB[Ø—‘  9¨Q -¨qÐ1Õ2à˜\Ñ)¨Y¸$Ò->À4È9ÔC\ÐX\ÔC\Ø˜Ô* dÔ*°¸	Ô0IÀTÔ0IÈtÐW`ÔOhÐdhÕOhà—‘˜aÕ à—‘  1 #˜hÕ'ð	(ð �7‰7�6‹?Ðrq   c                  ó:   — e Zd ZdZdd„Zedd„«       Zd	d„Zd
d„Zy)ÚSelectorPatternúSelector pattern.c                ó.   — || _         || _        d| _        y)úInitialize.N)r   rl   Ú_re_pattern)Úselfr   rl   s      ro   Ú__init__zSelectorPattern.__init__;  s   € ð ˆŒ	ØˆŒØ37ˆÕrq   c                ó(  — t         5  | j                  €Ut        j                  | j                  t        j
                  t        j                  z  t        j                  z  «      | _        ddd«       | j                  S # 1 sw Y   | j                  S xY w)z1Retrieve the compiled regular expression pattern.N)ÚRE_LOCKr²   ÚreÚcompilerl   ÚIÚXÚU©r³   s    ro   Ú
re_patternzSelectorPattern.re_patternB  sn   € ô ñ 	PØ×ÑÐ'Ü#%§:¡:¨d¯l©l¼B¿D¹DÄ2Ç4Á4¹KÌ"Ï$É$Ñ<NÓ#O�Ô ÷	Pð ×ÑÐ÷	Pð ×ÑÐús   ‡A"A=Á=Bc                ó   — | j                   S )ú	Get name.)r   r¼   s    ro   Úget_namezSelectorPattern.get_nameK  s   € ð �y‰yÐrq   c                ó:   — | j                   j                  ||«      S )úMatch the selector.)r½   rz   )r³   Úselectorrª   rf   s       ro   rz   zSelectorPattern.matchP  s   € ð �‰×$Ñ$ X¨uÓ5Ð5rq   N)r   rŽ   rl   rŽ   r�   ÚNone)r�   zre.Pattern[str]©r�   rŽ   ©rÃ   rŽ   rª   r†   rf   r†   r�   zMatch[str] | None)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r´   Úpropertyr½   rÀ   rz   rt   rq   ro   r®   r®   8  s(   „ Ùó8ð ò ó ð óô
6rq   r®   c                  ó(   — e Zd ZdZdd„Zdd„Zdd„Zy)	ÚSpecialPseudoPatternr¯   c                óˆ   — i | _         |D ]/  }|d   } |d   ||d   «      }|d   D ]  }|| j                   |<   Œ Œ1 d| _        y)r±   r   r‚   rZ   r   N)ÚpatternsÚmatched_name)r³   rÏ   Úpr   rl   Úpseudos         ro   r´   zSpecialPseudoPattern.__init__Y  sd   € ð ˆŒØò 	0ˆAØ�Q‘4ˆDØ�a˜‘d˜4  1¡Ó&ˆGØ˜A™$ò 0�Ø(/�—‘˜fÒ%ñ0ð	0ð !ˆÕrq   c                óR   — | j                   €dS | j                   j                  «       S )r¿   r„   )rÐ   rÀ   r¼   s    ro   rÀ   zSpecialPseudoPattern.get_namee  s)   € ð ×&Ñ&Ð.ˆrÐP°D×4EÑ4E×4NÑ4NÓ4PÐPrq   c                ó  — d}t         j                  ||«      }|rft        j                  t	        |j                  d«      «      «      }| j                  j                  |«      }|r|j                  |||«      }|r|| _        |S )rÂ   Nr   )	ÚRE_PSEUDO_CLASS_SPECIALrz   r   rx   r|   r…   rÏ   ÚgetrÐ   )r³   rÃ   rª   rf   rÒ   r‰   r   rl   s           ro   rz   zSpecialPseudoPattern.matchj  sr   € ð ˆÜ#×)Ñ)¨(°EÓ:ˆÙÜ—:‘:œl¨1¯7©7°6«?Ó;Ó<ˆDØ—m‘m×'Ñ'¨Ó-ˆGÙØ Ÿ™ x°¸Ó>�ÙØ(/�DÔ%àˆrq   N)rÏ   zCtuple[tuple[str, tuple[str, ...], str, type[SelectorPattern]], ...]r�   rÄ   rÅ   rÆ   )rÇ   rÈ   rÉ   rÊ   r´   rÀ   rz   rt   rq   ro   rÍ   rÍ   V  s   „ Ùó
!óQô
rq   rÍ   c                  ó4   — e Zd ZdZdd„Zdd„Zd	d„Zd
d„ZeZy)Ú	_Selectorzý
    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                ó,  — |j                  dd«      | _        |j                  dg «      | _        |j                  dg «      | _        |j                  dg «      | _        |j                  dg «      | _        |j                  dg «      | _        |j                  dg «      | _        |j                  d	d«      | _        |j                  d
g «      | _	        |j                  dg «      | _
        |j                  dd«      | _        |j                  dd«      | _        y)r±   ÚtagNÚidsÚclassesÚ
attributesÚnthÚ	selectorsÚ	relationsÚrel_typeÚcontainsÚlangrf   r   Úno_matchF)rÖ   rÚ   rÛ   rÜ   rÝ   rÞ   rß   rà   rá   râ   rã   rf   rä   )r³   Úkwargss     ro   r´   z_Selector.__init__ƒ  sÜ   € ð —:‘:˜e TÓ*ˆŒØ—:‘:˜e RÓ(ˆŒØ—z‘z )¨RÓ0ˆŒØ Ÿ*™* \°2Ó6ˆŒØ—:‘:˜e RÓ(ˆŒØŸ™ K°Ó4ˆŒØŸ™ K°Ó4ˆŒØŸ
™
 :¨tÓ4ˆŒØŸ
™
 :¨rÓ2ˆŒØ—J‘J˜v rÓ*ˆŒ	Ø—Z‘Z ¨Ó+ˆŒ
ØŸ
™
 :¨uÓ5ˆ�rq   c                ó¼   — |rG|d   }|j                   j                  |dd «       t        j                  |j	                  «       g«      S t        j                  «       S )zFreeze relation.r   r   N)rà   ÚextendÚctÚSelectorListÚfreeze)r³   rà   Úsels      ro   Ú_freeze_relationsz_Selector._freeze_relations“  sL   € ñ Ø˜A‘,ˆCØ�M‰M× Ñ  ¨1¨2 Ô/Ü—?‘? C§J¡J£L >Ó2Ð2ä—?‘?Ó$Ð$rq   c                óø  — | j                   rt        j                  «       S t        j                  | j                  t        | j                  «      t        | j                  «      t        | j                  «      t        | j                  «      t        | j                  «      | j                  | j                  «      | j                  t        | j                  «      t        | j                  «      | j                   «      S )zFreeze self.)rä   rè   ÚSelectorNullÚSelectorrÚ   ÚtuplerÛ   rÜ   rÝ   rÞ   rß   rì   rà   rá   râ   rã   rf   r¼   s    ro   rê   z_Selector.freeze�  s¢   € ð �=Š=Ü—?‘?Ó$Ð$ä—;‘;Ø—‘Ü�d—h‘h“Ü�d—l‘lÓ#Ü�d—o‘oÓ&Ü�d—h‘h“Ü�d—n‘nÓ%Ø×&Ñ& t§~¡~Ó6Ø—‘Ü�d—m‘mÓ$Ü�d—i‘iÓ Ø—
‘
óð rq   c                ó@  — d| j                   ›d| j                  ›d| j                  ›d| j                  ›d| j                  ›d| j
                  ›d| j                  ›d| j                  ›d	| j                  ›d
| j                  ›d| j                  ›d| j                  ›d�S )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=rQ   )rÚ   rÛ   rÜ   rÝ   rÞ   rß   rà   rá   râ   rã   rf   rä   r¼   s    ro   Ú__str__z_Selector.__str__±  s¨   € ð ˜TŸX™X˜L¨¨t¯x©x¨l¸*ÀTÇ\Á\ÐDTÐTaÐbf×bqÑbqÐatð uØ—8‘8�,˜l¨4¯>©>Ð*<¸LÈÏÉÐHZð [ØŸ™Ð(¨°D·M±MÐ3DÀGÈDÏIÉIÈ=ÐX`Ðae×akÑakÐ`nð oØŸ™Ð(¨ð+ð	
rq   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ò   Ú__repr__rt   rq   ro   rØ   rØ   z  s"   „ ñó6ó %óó(
ð �Hrq   rØ   c                  ó&   — e Zd ZU dZded<   ded<   y)Ú
CSSPatternz<A CSS pattern that hasn't been processed by `CSSParser` yet.rŽ   rÃ   r†   rf   N)rÇ   rÈ   rÉ   rÊ   Ú__annotations__rt   rq   ro   r÷   r÷   ¾  s   … áFàƒMØ„Jrq   r÷   c                  ó    — e Zd ZdZdd„Zdd„Zy)ÚPseudoSelectorMapzPseudo selector map.c                ó"   — || j                   |<   y)z	Set item.N)Údata©r³   r}   r~   s      ro   Ú__setitem__zPseudoSelectorMap.__setitem__É  s   € ð ˆ�	‰	�#Šrq   c                óø   — t         5  | j                  |   }t        |t        «      r>t	        |j
                  «      j                  |j                  ¬«      }|| j                  |<   ddd«       |S # 1 sw Y   S xY w)z	Get item.©rf   N)ÚSEL_LOCKrü   Ú
isinstancer÷   rj   rÃ   rk   rf   rý   s      ro   Ú__getitem__zPseudoSelectorMap.__getitem__Î  si   € ô ñ 	'Ø—I‘I˜c‘NˆEÜ˜%¤Ô,Ü! %§.¡.Ó1×CÑCÈ%Ï+É+ÐCÓV�Ø!&�—	‘	˜#‘÷		'ð ˆ÷	'ð ˆús   ‡AA/Á/A9N)r}   rŽ   r~   zCSSPattern | ct.SelectorListr�   rÄ   )r}   rŽ   r�   rô   )rÇ   rÈ   rÉ   rÊ   rþ   r  rt   rq   ro   rú   rú   Æ  s   „ Ùóô
	rq   rú   zhtml|*:is(a, area)[href]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=''])
    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]z*|*c                  ó°  — e Zd ZdZ ede«       eddeefddeefdde	efd	d
e
efddeeff«       ede«       ede«       ede«       ede«       ede«       ede«       ede«       ede«       ede«       ede«      fZ ei de“de“de“de“de“de“de“de“de“d e “d!e!“d"e"“d#e#“d$e$“d%e%“d&e&“d'e'“«      Z(	 	 d:	 	 	 	 	 	 	 d;d)„Z)d<d*„Z*d=d+„Z+d=d,„Z,d=d-„Z-	 	 	 	 	 	 	 	 	 	 	 	 d>d.„Z.	 	 	 	 	 	 	 	 	 	 d?d/„Z/	 	 	 	 	 	 	 	 	 	 	 	 d@d0„Z0	 	 	 	 	 	 	 	 	 	 	 	 	 	 dAd1„Z1	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dBd2„Z2d=d3„Z3d=d4„Z4d=d5„Z5d=d6„Z6	 	 dC	 	 	 	 	 	 	 dDd7„Z7dEd8„Z8dCdFd9„Z9y()Grj   zParse CSS selectors.Úpseudo_closeÚpseudo_contains)rG   rH   rI   Úpseudo_nth_child)rM   rO   Úpseudo_nth_type)rN   rP   Úpseudo_lang)rL   Ú
pseudo_dir)rK   Úpseudo_class_customÚpseudo_classÚpseudo_elementÚampÚat_ruleÚidÚclassrÚ   Ú	attributeÚcombiner   r   r   r   r(   r   r   r   r   r   r   r   r"   r   r&   r)   ú
<nth-of-s>Nc                ó¨   — |j                  dd«      | _        || _        | j                  t        j                  z  | _        |€i n|| _        d| _        y)r±   ú rƒ   Nr   )r‹   rl   rf   r   ÚDEBUGÚdebugre   Úcount)r³   rÃ   re   rf   s       ro   r´   zCSSParser.__init__¥  sG   € ð  ×'Ñ'¨°Ó9ˆŒØˆŒ
Ø—Z‘Z¤$§*¡*Ñ,ˆŒ
Ø"˜N‘b°ˆŒØˆ�
rq   c                óN   — | j                   t        kD  rt        dt        › �«      ‚y)z!Check the current selector count.z/Selector exceeds pseudo-class nesting limit of N)r  ÚSELECTOR_LIMITÚ
ValueErrorr¼   s    ro   Úcheck_countzCSSParser.check_count³  s)   € ð �:‰:œÒ&ÜÐNÌ~ÐN^Ð_Ó`Ð`ð 'rq   c                óº  — d}|j                  d«      }|j                  d«      r$t        j                  |j                  d«      «      nd}|j                  d«      rt        |j                  d«      dd «      nd}t        |j                  d«      «      }d}	d}
d}|r)|d	k(  rt        j
                  nd
t        j                  z  }nLt        j                  |«      dk(  r$t        j
                  t        j                  z  }d}	nt        j                  }|rY|j                  d«      j                  d«      rt        |j                  d«      dd d«      }nt        |j                  d«      «      }|sd}�n¤|j                  d«      r4|sdnt	        j                  |«      }t	        j                  d|z  |«      }�n_|j                  d«      r4|sdnt	        j                  |«      }t	        j                  d|z  |«      }�n|j                  d«      r3|sdnt	        j                  |«      }t	        j                  d|z  |«      }nÖ|j                  d«      rH|rt        j                  |«      rdnt	        j                  |«      }t	        j                  d|z  |«      }n}|j                  d«      r-t	        j                  dt	        j                  |«      z  |«      }n?t	        j                  dt	        j                  |«      z  |«      }|j                  d«      rd}|	r!|rt	        j                  |j                  «      }
t        j                  ||||
«      }|rjt        «       }|j                   j#                  |«       t        j$                  |j'                  «       gdd«      }|j(                  j#                  |«       d}|S |j                   j#                  |«       d}|S )z8Create attribute selector from the returned regex match.FÚcmpÚcaseNÚattr_nséÿÿÿÿr„   Ú	attr_nameÚir   ÚtypeTr~   ©ú"ú'r   rV   z(?!)z^%s.*rW   z.*?%s$rS   z.*?%s.*ú~z7.*?(?:(?<=^)|(?<=[ \t\r\n\f]))%s(?=(?:[ \t\r\n\f]|$)).*rR   z^%s(?:-.*)?$z^%s$ú!)r…   r   rx   r|   r·   r¹   ÚDOTALLÚ
startswithr¬   r¸   ÚRE_WSÚsearchrl   rè   ÚSelectorAttributerØ   rÝ   r£   ré   rê   rß   )r³   rë   r‰   Úhas_selectorÚinverseÚopr   ÚnsÚattrÚis_typeÚpattern2r~   rf   rl   Úsel_attrÚsub_selÚnot_lists                    ro   Úparse_attribute_selectorz"CSSParser.parse_attribute_selector¹  s  € ð ˆØ�W‰W�U‹^ˆØ./¯g©g°f¬oŒt�z‰z˜!Ÿ'™' &›/Ô*À4ˆØ67·g±g¸iÔ6HŒ\˜!Ÿ'™' )Ó,¨S¨bÐ1Ô2ÈbˆÜ˜AŸG™G KÓ0Ó1ˆØˆØˆØˆáØ! Sš[”R—T’T¨a´2·9±9Ñ<‰EÜ�Z‰Z˜Ó Ò'Ü—D‘Dœ2Ÿ9™9Ñ$ˆEØ‰Gä—I‘IˆEáØ�w‰w�wÓ×*Ñ*¨:Ô6Ü$ Q§W¡W¨WÓ%5°a¸Ð%;¸TÓB‘ä$ Q§W¡W¨WÓ%5Ó6�áàŠGØ�]‰]˜3Ôñ $)‘G¬b¯i©i¸Ó.>ˆEÜ—j‘j ¨EÑ!1°5Ó9ŠGØ�]‰]˜3Ôñ $)‘G¬b¯i©i¸Ó.>ˆEÜ—j‘j ¨UÑ!2°EÓ:ŠGØ�]‰]˜3Ôñ $)‘G¬b¯i©i¸Ó.>ˆEÜ—j‘j ¨eÑ!3°UÓ;‰GØ�]‰]˜3Ôñ $)¬E¯L©L¸Ô,?‘GÄRÇYÁYÈuÓEUˆEÜ—j‘jÐ![Ð^cÑ!cÐejÓk‰GØ�]‰]˜3Ôä—j‘j ´2·9±9¸UÓ3CÑ!CÀUÓK‰Gô —j‘j ¬2¯9©9°UÓ+;Ñ!;¸UÓCˆGØ�}‰}˜SÔ!à�Ù‘wÜ—z‘z '§/¡/Ó2ˆHô ×'Ñ'¨¨b°'¸8ÓDˆÙä“kˆGØ×Ñ×%Ñ% hÔ/Ü—‘¨¯©Ó(8Ð'9¸4ÀÓGˆHØ�M‰M× Ñ  Ô*ð ˆØÐð �N‰N×!Ñ! (Ô+àˆØÐrq   c                óÔ   — |j                  d«      rt        |j                  d«      dd «      nd}t        |j                  d«      «      }t        j                  ||«      |_        d}|S )z#Parse tag pattern from regex match.Útag_nsNr"  Útag_nameT)r…   r|   rè   ÚSelectorTagrÚ   )r³   rë   r‰   r0  ÚprefixrÚ   s         ro   Úparse_tag_patternzCSSParser.parse_tag_pattern  s\   € ð :;¿¹ÀÔ9J”˜aŸg™g hÓ/°°Ð4Ô5ÐPTˆÜ˜1Ÿ7™7 :Ó.Ó/ˆÜ—.‘.  fÓ-ˆŒØˆØÐrq   c                ó€  — t        j                  t        |j                  d«      «      «      }| j                  j                  |«      }|€;t        d|› d|j                  d«      › �| j                  |j                  d«      «      ‚t        |t        j                  «      sR| j                  |= t        || j                  | j                  ¬«      j                  t        ¬«      }|| j                  |<   | xj                   |j                   z  c_        | j#                  «        |j$                  j'                  |«       d}|S )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   rd   r   T)r   rx   r|   r…   re   rÖ   r	   Úendrl   r  rè   ré   rj   rf   rk   Ú
FLG_PSEUDOr  r  rß   r£   )r³   rë   r‰   r0  rÒ   rÃ   s         ro   Úparse_pseudo_class_customz#CSSParser.parse_pseudo_class_custom  s  € ô —‘œL¨¯©°«Ó9Ó:ˆØ—;‘;—?‘? 6Ó*ˆØÐÜ%Ø-¨f¨XÐ5IÈ!Ï%É%ÐPQË(ÈÐTØ—‘Ø—‘�a“óð ô ˜(¤B§O¡OÔ4Ø—‘˜FÐ#Ü Ø §¡°D·J±JôçÑ¤jÐÓ1ð ð #+ˆD�K‰K˜Ñà�
Š
�h—n‘nÑ$�
Ø×ÑÔà�‰×Ñ˜XÔ&ØˆØÐrq   c                óÚ  — d}t        j                  t        |j                  d«      «      «      }|j                  d«      rd}|r0|t        v r(| j                  |||||j                  d«      «      }||fS |�s>|t        v �r5|dk(  r%|xj                  t        j                  z  c_        �n|dk(  r'|xj                  t        j                  z  c_        d}�nÙ|dk(  r%|xj                  t        j                  z  c_        �n¯|d	k(  r%|xj                  t        j                  z  c_        �n…|| j                  v r[| j                  |   }| xj                  |j                  z  c_        | j!                  «        |j"                  j%                  |«       �n|d
k(  rG|j&                  j%                  t        j(                  dddddt        j*                  «       «      «       �nÐ|dk(  rG|j&                  j%                  t        j(                  dddddt        j*                  «       «      «       �n„|dk(  rG|j&                  j%                  t        j(                  dddddt        j*                  «       «      «       �n8|dk(  rF|j&                  j%                  t        j(                  dddddt        j*                  «       «      «       ní|dk(  rr|j&                  j-                  t        j(                  dddddt        j*                  «       «      t        j(                  dddddt        j*                  «       «      g«       nv|dk(  rq|j&                  j-                  t        j(                  dddddt        j*                  «       «      t        j(                  dddddt        j*                  «       «      g«       d}||fS |rB|t.        v r:| j1                  ||j                  d«      t2        t4        z  «       d|_        d}||fS |s|t8        v rd|_        d}||fS |t:        v r*t=        d|› d�| j>                  |jA                  d«      «      ‚t=        d|› d�| j>                  |jA                  d«      «      ‚)zParse pseudo class.Fr   ÚopenTr   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   rx   r|   r…   ÚPSEUDO_COMPLEXÚparse_pseudo_openrB  ÚPSEUDO_SIMPLErf   rè   ÚSEL_ROOTÚSEL_DEFINEDÚ	SEL_SCOPEÚ	SEL_EMPTYÚPSEUDO_SELECTORSr  r  rß   r£   rÞ   ÚSelectorNthré   rç   ÚPSEUDO_COMPLEX_NO_MATCHÚparse_selectorsrC  ÚFLG_OPENrä   ÚPSEUDO_SIMPLE_NO_MATCHÚPSEUDO_SUPPORTEDr	   rl   Ústart)	r³   rë   r‰   r0  Ú	iselectorÚis_htmlÚcomplex_pseudorÒ   Úpseudo_selectors	            ro   Úparse_pseudo_classzCSSParser.parse_pseudo_class,  s�  € ð ˆÜ—‘œL¨¯©°«Ó9Ó:ˆØ�7‰7�6Œ?Ø!ˆNÙ˜f¬Ñ6Ø×1Ñ1°#°v¸|ÈYÐXY×X]ÑX]Ð^_ÓX`ÓaˆLðx ˜WÐ$Ð$òw   F¬mÒ$;Ø˜Ò Ø—	’	œRŸ[™[Ñ(—	Ø˜:Ò%Ø—	’	œRŸ^™^Ñ+•	Ø’Ø˜8Ò#Ø—	’	œRŸ\™\Ñ)—	Ø˜8Ò#Ø—	’	œRŸ\™\Ñ)—	Ø˜4×0Ñ0Ñ0Ø"&×"7Ñ"7¸Ñ"?�Ø—
’
˜o×3Ñ3Ñ3•
Ø× Ñ Ô"Ø—‘×$Ñ$ _Ö5Ø˜>Ò)Ø—‘—‘œrŸ~™~¨a°¸¸5À%ÌÏÉÓIZÓ[Ö\Ø˜=Ò(Ø—‘—‘œrŸ~™~¨a°¸¸5À$ÌÏÉÓHYÓZÖ[ØÐ+Ò+Ø—‘—‘œrŸ~™~¨a°¸¸4ÀÌÏÉÓHYÓZÖ[Ø˜?Ò*Ø—‘—‘œrŸ~™~¨a°¸¸4ÀÄrÇÁÓGXÓYÕZØ˜=Ò(Ø—‘—‘äŸ™ q¨%°°E¸5Ä"Ç/Á/ÓBSÓTÜŸ™ q¨%°°E¸4ÄÇÁÓARÓSðõð ˜?Ò*Ø—‘—‘äŸ™ q¨%°°D¸%ÄÇÁÓARÓSÜŸ™ q¨%°°D¸$ÄÇÁÓ@QÓRðôð  ˆLð, ˜WÐ$Ð$ñ+  Ô*AÑ AØ× Ñ  ¨A¯E©E°!«H´jÄ8Ñ6KÔLØˆCŒLØˆLð$ ˜WÐ$Ð$ñ#   FÔ.DÑ$DØˆCŒLØˆLð ˜WÐ$Ð$ð Ô'Ñ'Ü%Ø3°F°8¸1Ð=Ø—‘Ø—‘˜“
óð ô &Ø�F�8ð nð nà—‘Ø—‘˜“
ó	ð rq   c                óX  — |j                  «       }|j                  d«      rd}nd}t        j                  t	        |d   «      «      |d<   t        j                  |j                  d|z   «      «      }|dk(  rd}d}	d	}
�n|d
k(  rd}d}	d	}
�nt        t        t           t        j                  |«      «      }|j                  d«      r|j                  d«      dk(  rdnd}|j                  d«      }|j                  d«      }
|j                  d«      r|dz  }n|
r	||dd z  }n||z  }|j                  d«      r|j                  d«      dk(  rdnd}|j                  d«      r||j                  d«      z  }nd}t        |d«      }t        |d«      }	|d   }|dk(  rõ|j                  d«      r.| j                  ||j                  d«      t         t"        z  «      }n>| j$                  d   }| xj&                  |j&                  z  c_        | j)                  «        |dk(  r7|j*                  j-                  t/        j0                  ||
|	dd|«      «       d	}|S |dk(  r3|j*                  j-                  t/        j0                  ||
|	dd	|«      «       d	}|S |dk(  rI|j*                  j-                  t/        j0                  ||
|	d	dt/        j2                  «       «      «       d	}|S |dk(  rE|j*                  j-                  t/        j0                  ||
|	d	d	t/        j2                  «       «      «       d	}|S )zParse `nth` pseudo.r  Ú_childÚ_typer   rÞ   ÚevenrZ   r   TÚoddr   Ús1r•   r„   ÚaÚnÚ1Nr"  Ús2ÚbÚ0é
   Úofr  rM   FrO   rN   rP   )Ú	groupdictrÖ   r   rx   r|   r   r
   rŽ   ÚRE_NTHrz   r…   Úendswithr,  r†   rQ  rB  rC  rR  rN  r  r  rÞ   r£   rè   rO  ré   )r³   rë   r‰   r0  rV  ÚmdictÚpostfixr’   r`  rd  ÚvarÚ	nth_partsÚ_s1ra  Ú_s2Ú
pseudo_selÚnth_sels                    ro   Úparse_pseudo_nthzCSSParser.parse_pseudo_nthy  sÐ  € ð —‘“ˆØ�9‰9Ð'Ô(Ø‰GàˆGÜŸ
™
¤<°°f±Ó#>Ó?ˆˆf‰Ü—*‘*˜UŸY™Y u¨w¡Ó7Ó8ˆØ�fÒàˆBØˆBØŠCØ˜ÒàˆBØˆBØŠCäœU¤3™Z¬¯©°gÓ)>Ó?ˆIØ"Ÿ™¨Ô.°9·?±?À4Ó3HÈCÒ3O‘#ÐUWˆCØ—‘ Ó$ˆAØ—*‘*˜S“/ˆCØ�|‰|˜CÔ Ø�s‘
‘ÙØ�q˜˜"�v‘‘à�q‘�Ø"Ÿ™¨Ô.°9·?±?À4Ó3HÈCÒ3O‘#ÐUWˆCØ�‰˜sÔ#Ø�y—‘ sÓ+Ñ+‘à�Ü�S˜"“ˆBÜ�S˜"“ˆBà˜6‘]ˆ
Ø�hÒØ�w‰w�tŒ}à×.Ñ.¨y¸!¿%¹%À»(ÄJÔQYÑDYÓZ‘ð ×/Ñ/°Ñ=�Ø—
’
˜gŸm™mÑ+•
Ø× Ñ Ô"Ø˜\Ò)Ø—‘—‘œrŸ~™~¨b°#°r¸5À%ÈÓQÔRð ˆØÐð Ð0Ò0Ø—‘—‘œrŸ~™~¨b°#°r¸5À$ÈÓPÔQð ˆØÐð ˜^Ò+Ø—‘—‘œrŸ~™~¨b°#°r¸4ÀÌÏÉÓHYÓZÔ[ð ˆØÐð Ð2Ò2Ø—‘—‘œrŸ~™~¨b°#°r¸4ÀÄrÇÁÓGXÓYÔZØˆØÐrq   c                óÒ   — t         t        z  }|dk(  r
|t        z  }n|dk(  r
|t        z  }n|dv r	|t        z  }|j
                  j                  | j                  |||«      «       d}|S )z"Parse pseudo with opening bracket.rE   rD   )rF   rC   T)rC  rR  ÚFLG_NOTÚFLG_RELATIVEÚFLG_FORGIVErß   r£   rQ  )r³   rë   r   r0  rV  rª   rf   s          ro   rH  zCSSParser.parse_pseudo_open¼  so   € ô œXÑ%ˆØ�6Š>Ø”WÑ‰EØ�VŠ^Ø”\Ñ!‰EØÐ&Ñ&Ø”[Ñ ˆEà�‰×Ñ˜T×1Ñ1°)¸UÀEÓJÔKØˆàÐrq   c                óº  — |j                  d«      j                  «       }|st        }|t        k(  rH||_        |d   j
                  j                  |«       dt        z   }|j                  t        «       «       nS|r&||_        |d   j
                  j                  |«       n&|dd t        k7  rt        d|› �| j                  |«      ‚d|z   }t        «       }d}|||fS )úParse combinator tokens.Úrelationr"  rU   r   Nz%The multiple combinators at position F)
r…   ÚstripÚWS_COMBINATORÚCOMMA_COMBINATORrá   rà   r£   rØ   r	   rl   )r³   rë   r‰   r0  rß   rá   rª   Ú
combinators           ro   Úparse_has_combinatorzCSSParser.parse_has_combinatorÓ  sÝ   € ð —W‘W˜ZÓ(×.Ñ.Ó0ˆ
ÙÜ&ˆJØÔ)Ò)Ø#ˆCŒLØ�b‰M×#Ñ#×*Ñ*¨3Ô/Øœ]Ñ*ˆHØ×ÑœY›[Õ)áà'�”Ø˜"‘×'Ñ'×.Ñ.¨sÕ3Ø˜!˜"�¤Ò.ô *Ø;¸E¸7ÐCØ—L‘LØóð ð ˜ZÑ'ˆHä‹kˆØˆØ˜S (Ð*Ð*rq   c	                óL  — |j                  d«      j                  «       }	|	st        }	|sP|r	|	t        k7  rt	        d|	› d|› d�| j
                  |«      ‚|	t        k(  rºd|_        |dd…= |j                  |«       nœ|	t        k(  r[|j                  s|st        j                  dd«      |_        |j                  j                  |«       |j                  |«       |dd…= n8|j                  j                  |«       |	|_        |dd…= |j                  |«       t        «       }d}||fS )	rz  r{  zThe combinator 'z' at position z , must have a selector before itTNrS   F)r…   r|  r}  r~  r	   rl   rä   r£   rÚ   rè   r>  rà   rç   rá   rØ   )
r³   rë   r‰   r0  rß   rà   Ú	is_pseudoÚ
is_forgiverª   r  s
             ro   Úparse_combinatorzCSSParser.parse_combinatorþ  s  € ð —W‘W˜ZÓ(×.Ñ.Ó0ˆ
ÙÜ&ˆJÙÙ Ô/?Ò!?Ü)Ø& z l°.ÀÀÐGgÐhØ—L‘LØóð ð Ô-Ò-Ø#�”Øša�LØ× Ñ  Õ%àÔ-Ò-Ø—w’w¡yä Ÿn™n¨S°$Ó7�C”GØ—‘×$Ñ$ YÔ/Ø× Ñ  Ô%Øša‘Là—‘×$Ñ$ YÔ/Ø)�”Øša�LØ× Ñ  Ô%ä‹kˆØˆà˜SÐ Ð rq   c                óò   — |j                  d«      }|j                  d«      r+|j                  j                  t	        |dd «      «       d}|S |j
                  j                  t	        |dd «      «       d}|S )zParse HTML classes and ids.r   ú.r   NT)r…   r,  rÜ   r£   r|   rÛ   )r³   rë   r‰   r0  rÃ   s        ro   Úparse_class_idzCSSParser.parse_class_id.  sq   € ð —7‘7˜1“:ˆØ×Ñ˜sÔ#Ø�K‰K×Ñœ|¨H°Q°R¨LÓ9Ô:ð ˆØÐð �G‰G�N‰Nœ<¨°°¨Ó5Ô6ØˆØÐrq   c                ó6  — t        j                  t        |j                  d«      «      «      }|dk(  rt	        j
                  dt        «       |dk(  }t        |j                  d«      «      }g }t        j                  |«      D ]b  }|j                  d«      rŒ|j                  d«      }	|	j                  d«      rt        |	d	d
 d«      }	nt        |	«      }	|j                  |	«       Œd |j                  j                  t        j                  ||«      «       d}|S )zParse contains.r   rG   z\The pseudo class ':contains' is deprecated, ':-soup-contains' should be used moving forward.rI   ÚvaluesÚsplitr~   )r(  r'  r   r"  T)r   rx   r|   r…   ÚwarningsÚwarnÚFutureWarningÚ	RE_VALUESÚfinditerr,  r£   râ   rè   ÚSelectorContains)
r³   rë   r‰   r0  rÒ   Úcontains_ownr‰  rÏ   Útokenr~   s
             ro   Úparse_pseudo_containszCSSParser.parse_pseudo_contains9  s÷   € ô —‘œL¨¯©°«Ó9Ó:ˆØ�[Ò Ü�M‰MØnÜôð Ð!6Ñ6ˆÜ˜aŸg™g hÓ/Ó0ˆØˆÜ×'Ñ'¨Ó/ò 	#ˆEØ�{‰{˜7Ô#ØØ—K‘K Ó(ˆEØ×Ñ 
Ô+Ü$ U¨1¨R [°$Ó7‘ä$ UÓ+�Ø�O‰O˜EÕ"ð	#ð 	�‰×ÑœB×/Ñ/°¸,ÓGÔHØˆØÐrq   c                ó€  — |j                  d«      }g }t        j                  |«      D ]b  }|j                  d«      rŒ|j                  d«      }|j                  d«      rt	        |dd d«      }nt	        |«      }|j                  |«       Œd |j                  j                  t        j                  |«      «       d}|S )zParse pseudo language.r‰  rŠ  r~   r&  r   r"  T)	r…   rŽ  r�  r,  r|   r£   rã   rè   ÚSelectorLang)r³   rë   r‰   r0  r‰  rÏ   r’  r~   s           ro   Úparse_pseudo_langzCSSParser.parse_pseudo_langR  sª   € ð —‘˜Ó"ˆØˆÜ×'Ñ'¨Ó/ò 		#ˆEØ�{‰{˜7Ô#ØØ—K‘K Ó(ˆEØ×Ñ 
Ô+Ü$ U¨1¨R [°$Ó7‘ä$ UÓ+�à�O‰O˜EÕ"ð		#ð 	�‰�‰œŸ™¨Ó1Ô2ØˆàÐrq   c                óÂ   — t        j                  |j                  d«      «      dk(  rt        j                  nt        j
                  }|xj                  |z  c_        d}|S )zParse pseudo direction.ÚdirÚltrT)r   rx   r…   rè   ÚSEL_DIR_LTRÚSEL_DIR_RTLrf   )r³   rë   r‰   r0  r~   s        ro   Úparse_pseudo_dirzCSSParser.parse_pseudo_dirg  sD   € ô #'§*¡*¨Q¯W©W°U«^Ó"<ÀÒ"E”—’Ì2Ï>É>ˆØ�	Š	�UÑ�	ØˆØÐrq   c           
     ó  — t        «       }g }d}d}g }dt        z   }	| j                  }
t        |t        z  «      }t        |t
        z  «      }t        |t        z  «      }t        |t        z  «      }t        |t        z  «      }t        |t        z  «      }t        |t        z  «      }t        |t        z  «      }t        |t        z  «      }t        |t        z  «      }t        |t        z  «      }| j                  r�|rt!        d«       |rt!        d«       |rt!        d«       |rt!        d«       |rt!        d«       |rt!        d«       |rt!        d	«       |rt!        d
«       |rt!        d«       |rt!        d«       |rt!        d«       |r|j#                  t        «       «       	 	 t%        |«      \  }}|dvr%| xj                  dz  c_        | j'                  «        |dk(  rt)        d|j+                  d«      › �«      ‚|dk(  r'|xj,                  t.        j0                  z  c_        d}�n|dk(  r| j3                  |||«      }�nó|dk(  r| j5                  |||||«      \  }}�nÔ|dk(  rt)        d|j+                  d«      › �«      ‚|dk(  r| j7                  |||«      }�n˜|dv r| j9                  ||||«      }�n~|dk(  r| j;                  |||«      }�nd|dk(  r| j=                  |||«      }d}�nH|dk(  r�|sA|s8t?        d|j+                  d«      › �| j@                  |j+                  d«      «      ‚d|_!        |rd}�nt?        d|j+                  d«      › �| j@                  |j+                  d«      «      ‚|d k(  r9|r| jE                  |||||	|«      \  }}}	n | jG                  ||||||||«      \  }}n„|d!k(  r| jI                  |||«      }nk|d"k(  rO|r9t?        d#|j+                  d«      › d$�| j@                  |j+                  d«      «      ‚| jK                  |||«      }n|d%v r| jM                  |||«      }|jO                  d«      }�Œ¥	 |r|st?        d&|› �| j@                  |«      ‚|rƒ|jR                  s|st/        jT                  d'd(«      |_)        |r&|	|_+        |d)   jX                  j#                  |«       nW|jX                  j[                  |«       |d(d(…= |j#                  |«       n%|r#|r|sd|_!        |d(d(…= |j#                  |«       d}|st?        d|› �| j@                  |«      ‚|rt.        j\                  |d)   _        |rt.        j^                  |d)   _        |rt.        j`                  |d)   _        |rt.        jb                  |d)   _        |rt.        jd                  |d)   _        t/        jf                  |D �cg c]  }|ji                  «       ‘Œ c}||| j                  |
z
  «      S # tP        $ r Y �Œ³w xY wc c}w )*zParse selectors.FrU   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 rS   Nr"  )5rØ   r}  r  ÚboolrR  rC  rw  rv  ÚFLG_HTMLÚFLG_DEFAULTÚFLG_INDETERMINATEÚFLG_IN_RANGEÚFLG_OUT_OF_RANGEÚFLG_PLACEHOLDER_SHOWNrx  r  Úprintr£   Únextr  ÚNotImplementedErrorrU  rf   rè   rL  rD  rZ  r“  rt  r–  rœ  r	   rl   rä   r€  r„  r:  r@  r‡  rB  ÚStopIterationrÚ   r>  rá   rà   rç   ÚSEL_DEFAULTÚSEL_INDETERMINATEÚSEL_IN_RANGEÚSEL_OUT_OF_RANGEÚSEL_PLACEHOLDER_SHOWNré   rê   )r³   rV  rª   rf   rë   rß   r0  Úclosedrà   rá   r  Úis_openr‚  Úis_relativeÚis_notrW  Ú
is_defaultÚis_indeterminateÚis_in_rangeÚis_out_of_rangeÚis_placeholder_shownrƒ  r}   r‰   Úss                            ro   rQ  zCSSParser.parse_selectorso  s  € ô ‹kˆØˆ	ØˆØˆØˆ	ØœÑ&ˆØ—
‘
ˆô �uœxÑ'Ó(ˆÜ˜¤Ñ+Ó,ˆ	Ü˜5¤<Ñ/Ó0ˆÜ�eœg‘oÓ&ˆÜ�uœxÑ'Ó(ˆÜ˜%¤+Ñ-Ó.ˆ
Ü Ô(9Ñ 9Ó:ÐÜ˜5¤<Ñ/Ó0ˆÜ˜uÔ'7Ñ7Ó8ˆÜ# EÔ,AÑ$AÓBÐÜ˜%¤+Ñ-Ó.ˆ
ð �:Š:ÙÜÐ+Ô,ÙÜÐ)Ô*ÙÜÐ-Ô.ÙÜÐ(Ô)ÙÜÐ)Ô*ÙÜÐ,Ô-ÙÜÐ2Ô3ÙÜÐ-Ô.ÙÜÐ1Ô2Ù#ÜÐ6Ô7ÙÜÐ,Ô-ñ Ø×ÑœY›[Ô)ðH	ØÜ˜i›‘��QàÐ9Ñ9Ø—J’J !‘O•JØ×$Ñ$Ô&ð ˜)Ò#Ü-Ð0KÈAÏGÉGÐTUËJÈ<Ð.XÓYÐYØ˜E’\Ø—I’I¤§¡Ñ-•IØ#'’LØÐ1Ò1Ø#'×#AÑ#AÀ#ÀqÈ,Ó#W’LØ˜NÒ*Ø,0×,CÑ,CÀCÈÈLÐZcÐelÓ,mÑ)�L¢'ØÐ,Ò,Ü-Ð0QÐRS×RYÑRYÐZ[ÓR\ÐQ]Ð.^Ó_Ð_ØÐ-Ò-Ø#'×#=Ñ#=¸cÀ1ÀlÓ#S’LØÐCÑCØ#'×#8Ñ#8¸¸aÀÈyÓ#Y’LØ˜MÒ)Ø#'×#9Ñ#9¸#¸qÀ,Ó#O’LØ˜LÒ(Ø#'×#8Ñ#8¸¸aÀÓ#N�Là"’GØ˜NÒ*Ù'Ù)Ü"5Ø"BÀ1Ç7Á7È1Ã:À,Ð OØ $§¡Ø !§¡¨£
ó#ð ð
 (,˜œÙØ!%˜Ùä1ØGÈÏÉÐPQË
À|ÐTØ ŸL™LØŸG™G A›Jóð ð
 ˜IÒ%Ù"Ø6:×6OÑ6OØ  L°)¸XÀuó7Ñ3˜ c©8ð -1×,AÑ,AØ  L°)¸YÈ	ÐS]Ð_dó-Ñ)˜¡cð ˜KÒ'Ø#'×#@Ñ#@ÀÀaÈÓ#V‘LØ˜E’\Ù#Ü1Ø9¸!¿'¹'À!»*¸ÐE]Ð^Ø ŸL™LØŸG™G A›Jóð ð
 $(×#9Ñ#9¸#¸qÀ,Ó#O‘LØ˜OÑ+Ø#'×#6Ñ#6°s¸A¸|Ó#L�LàŸ™˜a›�ñK ðP ñD ™6Ü%Ø4°U°GÐ<Ø—‘Øóð ñ Ø—7’7¡9äŸ.™.¨¨dÓ3�”ÙØ'�”Ø˜"‘×'Ñ'×.Ñ.¨sÕ3à—‘×$Ñ$ YÔ/Øša�LØ× Ñ  Õ%ñ ¡±)àˆCŒLØš!�Ø×Ñ˜SÔ!ØˆLáô &Ø2°5°'Ð:Ø—‘Øóð ñ Ü"$§.¡.ˆI�b‰MÔÙÜ"$×"6Ñ"6ˆI�b‰MÔÙÜ"$§/¡/ˆI�b‰MÔÙÜ"$×"5Ñ"5ˆI�b‰MÔÙÜ"$×":Ñ":ˆI�b‰MÔô �‰°IÖ>¨q §¡¥
Ò>ÀÈÐQU×Q[ÑQ[Ð^cÑQcÓdÐdøôq ò 	Úð	üòp  ?s   Æ%J&W3 ×X×3	X ×?X c              #  ó2  K  — t         j                  |«      }|r|j                  d«      nd}t        j                  |ddd…   «      }|r|j                  d«      nd}t	        |«      d|z   z
  }| j
                  rt        d|›�«       ||k  rñd}| j                  D ]ˆ  }|j                  ||| j                  «      }|sŒ#|j                  «       }| j
                  r2t        d|› d|j                  d«      ›d|j                  d«      › �«       |j                  d«      }||f–—  n |€P||   }|d	k(  rd
|› �}	n)|dk(  rd|› �}	n|dk(  rd|› �}	n|dk(  rd|› �}	nd|›d|› �}	t        |	| j                  |«      ‚||k  rŒñ| j
                  rt        d«       yy­w)zIterate selector tokens.r   Nr"  r   z## PARSING: zTOKEN: 'z' --> z at position ú[z)Malformed attribute selector at position r†  z%Malformed class selector at position ú#z"Malformed id selector at position rU   z,Malformed pseudo-class selector at position zInvalid character z
 position z## END PARSING)ÚRE_WS_BEGINr.  rB  Ú	RE_WS_ENDr¢   r  r¥  Ú
CSS_TOKENSrz   rf   rÀ   r…   rU  r	   rl   )
r³   rl   r‰   rª   ÚoffsetrB  Úvr   r«   Úmsgs
             ro   Úselector_iterzCSSParser.selector_iter+  s°  è ø€ ô ×Ñ˜wÓ'ˆÙ�—‘�a” 1ˆÜ×Ñ˜W¡T r T™]Ó+ˆÙ�—‘�q” AˆÜ�'‹l˜a &™jÑ)ˆà�:Š:Ü�L  Ð,Ô-Ø�sŠlØˆAØ—_‘_ò �Ø—G‘G˜G U¨D¯J©JÓ7�ÚØŸ:™:›<�DØ—z’zÜ ¨¨¨f°Q·W±W¸Q³Z°NÀ-ÐPQ×PWÑPWÐXYÓPZÈ|Ð\Ô]ØŸE™E !›H�EØ ˜'’MÙðð ˆyØ˜E‘N�ð ˜’8ØEÀeÀWÐM‘CØ˜#’XØAÀ%ÀÐI‘CØ˜#’XØ>¸u¸gÐF‘CØ˜#’XØHÈÈÐP‘Cà.¨q¨e°:¸e¸WÐE�CÜ)¨#¨t¯|©|¸UÓCÐCð5 �s‹lð6 �:Š:ÜÐ"Õ#ð ùs   ‚B;FÂ>B?FÅ>Fc                óZ   — | j                  | j                  | j                  «      ||«      S )zProcess selectors.)rQ  rÁ  rl   )r³   rª   rf   s      ro   rk   zCSSParser.process_selectorsU  s(   € ð ×#Ñ# D×$6Ñ$6°t·|±|Ó$DÀeÈUÓSÐSrq   )Nr   )rÃ   rŽ   re   z'dict[str, str | ct.SelectorList] | Nonerf   r†   r�   rÄ   ©r�   rÄ   )rë   rØ   r‰   rŒ   r0  rž  r�   rž  )rë   rØ   r‰   rŒ   r0  rž  rV  ú Iterator[tuple[str, Match[str]]]rW  rž  r�   ztuple[bool, bool])
rë   rØ   r‰   rŒ   r0  rž  rV  rÄ  r�   rž  )rë   rØ   r   rŽ   r0  rž  rV  rÄ  rª   r†   r�   rž  )rë   rØ   r‰   rŒ   r0  rž  rß   ró   rá   rŽ   rª   r†   r�   ztuple[bool, _Selector, str])rë   rØ   r‰   rŒ   r0  rž  rß   ró   rà   ró   r‚  rž  rƒ  rž  rª   r†   r�   ztuple[bool, _Selector])r   r   )rV  rÄ  rª   r†   rf   r†   r�   rô   )rl   rŽ   r�   rÄ  )rª   r†   rf   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ú   Ú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_SHOWNÚCSS_NTH_OF_S_DEFAULTrN  r´   r  r:  r@  rD  rZ  rt  rH  r€  r„  r‡  r“  r–  rœ  rQ  rÁ  rk   rt   rq   ro   rj   rj   o  sÌ  „ Ùñ 	˜Ð(8Ó9Ùð &ØKØ'Ø#ð	ð $Ð%FÐH\Ð^mÐnØ"Ð$IÐK^Ð`oÐpØ 
¨O¸_ÐMØ˜y¨.¸/ÐJðó	
ñ 	Ð-Ð/FÓGÙ˜Ð(8Ó9ÙÐ(Ð*<Ó=Ù˜˜wÓ'Ù˜	 ;Ó/Ù˜˜fÓ%Ù˜ Ó+Ù˜˜wÓ'Ù˜ XÓ.Ù˜	 ;Ó/ð3€Jñ: )ð	
Ø�Xð	
à˜ð	
ð ˜ð	
ð ˜ð		
ð
 Ð/ð	
ð ˜ð	
ð ˜ð	
ð ˜ð	
ð �ið	
ð �Xð	
ð ˜ð	
ð ˜-ð	
ð ˜>ð	
ð ˜ð	
ð Ð-ð	
ð  !Ð"7ð!	
ð" Ð.ð#	
óÐð2 ;?Øð	àðð 8ðð ð	ð
 
óóaóIóVóð>K%àðK%ð ðK%ð ð	K%ð
 4ðK%ð ðK%ð 
óK%ðZAàðAð ðAð ð	Að
 4ðAð 
óAðFàðð ðð ð	ð
 4ðð ðð 
óð.)+àð)+ð ð)+ð ð	)+ð
 #ð)+ð ð)+ð ð)+ð 
%ó)+ðV.!àð.!ð ð.!ð ð	.!ð
 #ð.!ð #ð.!ð ð.!ð ð.!ð ð.!ð 
 ó.!ó`	óó2ó*ð Øð	zeà3ðzeð ðzeð ð	zeð
 
ózeóx($õTTrq   rj   )
rl   rŽ   rm   zct.Namespaces | Nonere   úct.CustomSelectors | Nonerf   r†   r�   zcm.SoupSieverÃ  )re   rå  r�   z dict[str, str | ct.SelectorList])F)r’   rŽ   r“   rž  r�   rŽ   )r§   rŽ   r�   rŽ   )wrÊ   Ú
__future__r   r·   Ú	functoolsr   r„   r   r   rh   r   rè   r	   r‹  Útypingr
   r   r   r   Údataclassesr   Úcollectionsr   Ú	threadingÚLockr¶   ÚRLockr  r‡   r  rI  rS  rG  rP  ÚPSEUDO_SPECIALrT  ÚNEWLINEÚWSÚCOMMENTSÚWSCÚCSS_ESCAPESÚCSS_STRING_ESCAPESÚ
IDENTIFIERÚNTHÚVALUEÚATTRrÐ  rÑ  rÒ  rÓ  rÌ  ÚPAT_PSEUDO_CLASS_SPECIALrË  rÎ  rÅ  rÍ  rÏ  rÇ  rÈ  rÉ  rÊ  rÔ  rÆ  r¸   r¹   r�   r�   rj  rº   rŽ  r-  r»  r¼  ry   r»   rÕ   r~  r}  rC  rv  rw  r   rŸ  r¡  rR  r¢  r£  r¤  rx  Ú	_MAXCACHErp   ru   rg   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ä  rj   rt   rq   ro   ú<module>rû     s
  ðÙ Ý "Û 	Ý Ý Ý Ý Ý %Û ß -Ó -Ý !Ý  Û à
ˆ)�.‰.Ó
€Øˆ9�?‰?Ó€à!Ð à€ò€ò<Ð ò8	€òÐ ò€ð !Ð#9Ñ9¸NÑJÐMdÑdÐguÑuÐ ð '€Ø�'�˜!Ð€à)€à	ˆRˆD��(�˜1Ð€à(¨¨¨OÐ<€Ø/°¨t°>À'ÀÈ"ÐMÐ ð;Ø;F¸-ð H8Ø8C°}ð Eð€
ð
 
*¨#¨¨i¸°u¸MÐJ€à˜G˜9Ð$BÀ7À)ÐK^Ð_iÐ^jÐjkÐn€à
ˆcˆUÐ& s e¨;°u°g¸TÀ#ÀÐFYÐZ]ÐY^Ð^_Ð`€ð ˆzˆlÐ	€à�*�Ð€	à˜J˜<Ð'=¸j¸\ÈÐ
N€à��Ð% j \Ð1HÈÈÐTUÐVZÐU[Ð[]Ð^€à   ¨L¸¸¸SÐAÐ à(¨¨°LÀÀÀRÐHÐ à-¨j¨\¸Ð;Ð à
€à�e˜3�<Ð àÐ*Ð+Ð,Ð à�J�<Ð €ðØ.Ð/ð 0Øˆe�> #  k°(°¸1¸R¸DÀÀÀSÈÈ
ÐRSÐTVÐSWÐX[ÐW\ð ]ðÐ ð
Ø-Ð.ð /ØˆU�+˜c˜Uð #ðÐ ð
 /Ð/¨{¸5¸'ÀÀSÀEÈÈCÈ5ÐPQÐRWÐQXÐX[Ð\_Ð[`Ð`cÐd€à-Ð.Ð.>¸s¸eÀ3ÐG€à�Ð,¨R¨D°¸C¸5ÀÐB€à2Ð3°;¸u¸gÀSÈÈÈRÐPSÈuÐTUÐV[ÐU\Ð\_Ð`cÐ_dÐdgÐhÐ ð ˆR�Z‰ZÐ0°°Ð5LÐMÈrÏtÉtÓT€
Ø�—‘Ð4°R°DÐ8RÐSZÐR[Ð[]Ð^Ð`b×`dÑ`dÓe€à	ˆ�‰Ð>¸s¸eÀ=ÐQTÐPUÐUeÐfÐhj×hlÑhlÓ	m€àˆB�J‰J˜-¨ w¨l¸3¸%¸rÀ#ÀÀcÐJÈBÏDÉDÓQ€	àˆ�
‰
�2‹€Øˆb�j‰j˜A˜c˜U !˜Ó%€ØˆB�J‰JÐ>¸x¸jÈÐKÓL€	ØˆB�J‰J˜!Ð3Ð4°AÐ6¸¿¹Ó=€	Ø$˜"Ÿ*™*Ð%=¸r¿t¹tÀbÇdÁd¹{ÈRÏTÉTÑ?QÓRÐ ð Ð à€ð €
Ø
€Ø€Ø€Ø€ØÐ Ø€Ø€ØÐ ØÐ Ø€ð €	ñ �9ÔðØðà$ðð &ðð ð	ð
 òó ðó,&óôPó6÷86ñ 6ô<!˜?ô !÷HAñ AðH ÷ð ó ðô˜  j°2·?±?Ñ&BÐ!BÑCô ñ* Ð0°*¸xÑ2GÓH€áðð �Ñó	€ñ ðð �Ñ˜KÑ'ó€ñ ð
ð �ÑÐ-Ñ-óÐ ñ ðð �Ñó	€ñ ðð �Ñó	€ñ ÐHÈ*ÐW_ÑJ_Ó`€áÐNÐPZÐ]eÑPeÓf€á"ðð �ÑÐ1Ñ1óÐ ñ$ ðð, �Ñó/€ñ4 Ð4°jÀ8Ñ6KÓL€áðð �Ñ˜LÑ(ó€ñ$ ðð �ÑÐ,Ñ,óÐ ñ$ Ð8¸*ÀxÑ:OÓP€áÐ7¸ÀhÑ9NÓO€	á! %¨Ó4Ð ÷iTò iTrq   