
    /fQ                    	   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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  d.Z&d/e d0e  d1e  de# Z'd2e  d3e d4Z(d2e  d3e d5Z)d6e  dZ*e d7Z+d8e( Z,d9e  Z-d:e) d;e! d<e d=e d>e e d?e d>e e d@Z.dAe) dBe! dCe dDZ/e) dEe" de dFe d>e" dGe d7Z0e) dHe d7Z1e dIe dJe d>Z2e) dEe" de dFe d>e" dGe d7Z3 ej4        dKe dLej5                  Z6 ej4        dKe dMe dej5                  Z7 ej4        dNe dOe dPej5                  Z8 ej4        dQe" dRe dFe dSej9                  Z: ej4        e          Z; ej4        dTe d>          Z< ej4        e dU          Z= ej4        dTe* dVej9                  Z>dWZ?dXZ@dZAdYZBdZZCd[ZDd\ZEd]ZFd^ZGd_ZHd`ZIdaZJdbZKdcZL eeLd          ddo            ZMddqZNddsZOdddxZPddzZQ G d{ d|          ZR G d} d~eR          ZS G d d          ZT G d d          ZU eUd          V                    eAeEz            ZW eUd          V                    eAeEz            ZX eUd          V                    eAeEz  eDz            ZY eUd          V                    eAeEz  eFz            ZZ eUd          V                    eAeEz            Z[ eUd          V                    eAeEz            Z\ eUd          V                    eAeEz            Z] eUd          V                    eAeEz            Z^ eUd          V                    eAeEz  eJz            Z_ eUd          V                    eA          Z` eUd          V                    eAeEz            Za eUd          V                    eAeEz            Zb eUd          V                    eAeHz  eEz            Zc eUd          V                    eAeIz  eEz            ZddS )zCSS selector parser.    )annotationsN)	lru_cache   )util)	css_match)	css_types)SelectorSyntaxError)MatchAnyIteratorcasti  >   :link:root:empty:scope:checked:default:defined:enabled	:any-link	:disabled	:in-range	:optional	:required
:read-only:last-child:only-child:read-write:first-child:last-of-type:only-of-type:out-of-range:first-of-type:indeterminate:placeholder-shown>   :past:focus:hover:active:future:paused:target:playing:visited:local-link:focus-within:user-invalid:focus-visible:target-within:host:current>   :matches:is:has:not:where	:contains:-soup-contains:-soup-contains-own>   :host-contextr4   r5   >   :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  )maxsizepatternstr
namespacesct.Namespaces | Nonecustomct.CustomSelectors | Noneflagsintreturncm.SoupSievec                    t          |          }t          j        | t          | ||                                          |||          S )zCached CSS compile.rZ   r\   )process_customcm	SoupSieve	CSSParserprocess_selectors)rV   rX   rZ   r\   custom_selectorss        [/srv/repositorios/webnueva/scripts/env/lib/python3.11/site-packages/soupsieve/css_parser.py_cached_css_compileri      s[     &f--<#	
 	
 	
 



 
 
    Nonec                 8    t                                            dS )zPurge the cache.N)ri   cache_clear rj   rh   _purge_cachero      s     ##%%%%%rj    dict[str, str | ct.SelectorList]c                   i }| |                                  D ]o\  }}t          j        |          }t                              |          t          d| d          ||v rt          d| d          ||t          |          <   p|S )zProcess custom.Nz
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)rZ   rg   keyvaluenames        rh   rb   rb      s      ,,.. 	9 	9JC:c??Dt$$,)*ft*f*f*fggg'''ZtZZZ[[[38\$//00rj   Fcontentstringboolc                R    dd}|st           nt                              ||           S )zs
    Unescape CSS value.

    Strings allow for spanning the value on multiple strings by escaping a new line.
    m
Match[str]r^   rW   c                Z   |                      d          rHt          |                      d          dd         d          }|dk    rt          }t          |          }nM|                      d          r|                      d          dd         }n|                      d          rd}nd}|S )	z(Replace with the appropriate substitute.r   NrP   r   rM         � )groupr]   UNICODE_REPLACEMENT_CHARchr)r   	codepointry   s      rh   replacezcss_unescape.<locals>.replace   s     771:: 
	AGGAJJqrrNB//IA~~4		NNEEWWQZZ 	GGAJJqrrNEEWWQZZ 	EEErj   )r   r   r^   rW   )
RE_CSS_ESCRE_CSS_STR_ESCsub)r{   r|   r   s      rh   rw   rw      s7       " %8JJ.==gwOOOrj   identc                   g }t          |           }|dk    o| d         dk    }|dk    r|r|                    d|             n t          |           D ]\  }}t          |          }|dk    r|                    d           1d|cxk    rdk    sn |dk    r|                    d|dd	           a|dk    s|r1|dk    r+d
|cxk    rdk    rn n|                    d|dd	           |dv sC|dk    s=d
|cxk    rdk    s0n 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|                    |           |                    d|            d                    |          S )zEscape identifier.r   -r   \r         xrL   0   9   )-   _   rS   A   Z   a   z   r   )lenappend	enumerateordjoin)r   r|   length
start_dashindexcr   s          rh   escaper     s    FZZF!/aCJ{{z{l5ll####!%(( 	( 	(HE1AID  h'''')++++t++++	T0A0A19111122221***

$)B[B[B[B[W[B[B[B[B[B[1911112222\))Y$->->49C\C\C\C\X\C\C\C\C\****d****	0I0I0I0IT0I0I0I0ItW`OhOhOhOhdhOhOhOhOhOha    h1hh''''776??rj   c                  *    e Zd ZdZddZddZddZdS )SelectorPatternSelector pattern.rz   rW   rV   r^   rk   c                    || _         t          j        |t          j        t          j        z  t          j        z            | _        dS )Initialize.N)rz   recompileIXU
re_pattern)selfrz   rV   s      rh   __init__zSelectorPattern.__init__&  s1     	*WbdRTkBD.@AArj   c                    | j         S )	Get name.)rz   r   s    rh   get_namezSelectorPattern.get_name,  s     yrj   selectorr   r]   r\   Match[str] | Nonec                8    | j                             ||          S )Match the selector.)r   ru   )r   r   r   r\   s       rh   ru   zSelectorPattern.match1  s     $$Xu555rj   N)rz   rW   rV   rW   r^   rk   r^   rW   r   rW   r   r]   r\   r]   r^   r   __name__
__module____qualname____doc__r   r   ru   rn   rj   rh   r   r   #  sZ        B B B B   
6 6 6 6 6 6rj   r   c                  *    e Zd ZdZddZddZddZdS )SpecialPseudoPatternr   patternsCtuple[tuple[str, tuple[str, ...], str, type[SelectorPattern]], ...]r^   rk   c                   i | _         |D ]7}|d         } |d         ||d                   }|d         D ]}|| j         |<   8d| _        t          j        t          t          j        t          j        z  t          j        z            | _        dS )r   r   r   rM   r   N)	r   matched_namer   r   PAT_PSEUDO_CLASS_SPECIALr   r   r   re_pseudo_name)r   r   prz   rV   pseudos         rh   r   zSpecialPseudoPattern.__init__:  s      	0 	0AQ4Dad41&&GA$ 0 0(/f%%0 ! j)A24"$;QSQUCUVVrj   rW   c                F    | j         dn| j                                         S )r   Nr   )r   r   r   s    rh   r   zSpecialPseudoPattern.get_nameG  s%     &.rrD4E4N4N4P4PPrj   r   r   r]   r\   r   c                $   d}| j                             ||          }|rpt          j        t	          |                    d                              }| j                            |          }|r |                    |||          }|r|| _        |S )r   Nrz   )	r   ru   r   rs   rw   r   r   getr   )r   r   r   r\   r   r   rz   rV   s           rh   ru   zSpecialPseudoPattern.matchL  s     %%h66 	0:l1776??;;<<Dm''--G 0 x>> 0(/D%rj   N)r   r   r^   rk   r   r   r   rn   rj   rh   r   r   7  s^        W W W WQ Q Q Q
     rj   r   c                  6    e Zd ZdZddZdd
ZddZddZeZdS )	_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.
    kwargsr   r^   rk   c                   |                     dd          | _        |                     dg           | _        |                     dg           | _        |                     dg           | _        |                     dg           | _        |                     dg           | _        |                     dg           | _        |                     d	d          | _        |                     d
g           | _	        |                     dg           | _
        |                     dd          | _        |                     dd          | _        dS )r   tagNidsclasses
attributesnth	selectors	relationsrel_typecontainslangr\   r   no_matchF)r   r   r   r   r   r   r   r   r   r   r   r\   r   )r   r   s     rh   r   z_Selector.__init__e  s    ::eT**::eR((zz)R00 **\266::eR((K44K44

:t44

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

:u55rj   r   list[_Selector]ct.SelectorListc                    |rQ|d         }|j                             |dd                    t          j        |                                g          S t          j                    S )zFreeze relation.r   r   N)r   extendctSelectorListfreeze)r   r   sels      rh   _freeze_relationsz_Selector._freeze_relationsu  s[      	%A,CM  122///?CJJLL>222?$$$rj   ct.Selector | ct.SelectorNullc                   | j         rt          j                    S t          j        | j        t          | j                  t          | j                  t          | j                  t          | j	                  t          | 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   r\   r   s    rh   r   z_Selector.freeze  s     = 	?$$$;dhdl##do&&dhdn%%&&t~66dm$$di  
  rj   rW   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=rE   )r   r   r   r   r   r   r   r   r   r   r\   r   r   s    rh   __str__z_Selector.__str__  s    +TX + +tx + +T\ + +bfbq + +8+ ++/>+ +IM+ ++ +48M+ +LPI+ +aeak+ + + + +	
rj   N)r   r   r^   rk   )r   r   r^   r   )r^   r   r   )	r   r   r   r   r   r   r   r   __repr__rn   rj   rh   r   r   \  so         6 6 6 6 % % % %   (
 
 
 
 HHHrj   r   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          fZ	 	 dFdGd ZdHd'ZdHd(ZdHd)ZdId.ZdJd/ZdKd2ZdLd7ZdMd<ZdHd=ZdHd>Z dHd?Z!dHd@Z"	 	 dNdOdBZ#dPdDZ$dNdQdEZ%dS )Rre   zParse CSS selectors.pseudo_closepseudo_contains)r;   r<   r=   pseudo_nth_child)rA   rC   pseudo_nth_type)rB   rD   pseudo_lang)r@   
pseudo_dir)r?   pseudo_class_custompseudo_classpseudo_elementat_ruleidclassr   	attributecombineNr   r   rW   rZ   'dict[str, str | ct.SelectorList] | Noner\   r]   r^   rk   c                    |                     dd          | _        || _        | j        t          j        z  | _        |i n|| _        dS )r    r   N)r   rV   r\   r   DEBUGdebugrZ   )r   r   rZ   r\   s       rh   r   zCSSParser.__init__  sE      ''99
Z$*,
"Nbbrj   r   r   r   r   has_selectorr}   c                   d}|                     d          }|                     d          r't          j        |                     d                    nd}|                     d          r*t          |                     d          dd                   nd}t          |                     d                    }d}	d}
d}|r"|d	k    rt          j        nd
t          j        z  }n@t          j        |          dk    rt          j        t          j        z  }d}	nt          j        }|rv|                     d                              d          r,t          |                     d          dd         d          }n"t          |                     d                    }|sd}n|                    d          r,t	          j        dt	          j	        |          z  |          }nb|                    d          r,t	          j        dt	          j	        |          z  |          }n!|                    d          r+t	          j        dt	          j	        |          z  |          }n|                    d          rK|rt                              |          rdnt	          j	        |          }t	          j        d|z  |          }n|                    d          r+t	          j        dt	          j	        |          z  |          }nAt	          j        dt	          j	        |          z  |          }|                    d          rd}|	r|rt	          j        |j                  }
t          j        ||||
          }|rlt                      }|j                            |           t          j        |                                gdd          }|j                            |           n|j                            |           d}|S )z8Create attribute selector from the returned regex match.FcmpcaseNattr_nsr   	attr_nameir   typeTry   "'r   rI   z^%s.*rJ   z.*?%s$rH   z.*?%s.*~z[^\s\S]z7.*?(?:(?<=^)|(?<=[ \t\r\n\f]))%s(?=(?:[ \t\r\n\f]|$)).*rF   z^%s(?:-.*)?$z^%s$!)r   r   rs   rw   r   r   DOTALL
startswithr   r   RE_WSsearchrV   r   SelectorAttributer   r   r   r   r   r   )r   r   r   r  inverseopr  nsattris_typepattern2ry   r\   rV   sel_attrsub_selnot_lists                    rh   parse_attribute_selectorz"CSSParser.parse_attribute_selector  s    WWU^^./ggfooGtz!''&//***467ggi6H6HP\!''),,SbS1222bAGGK0011 	!S[[RTTa29<EEZ''D29$EGGIE 	7www**:66 7$QWWW%5%5ad%;TBB$QWWW%5%566 	GG]]3 	jBIe,<,<!<eDDGG]]3 	jRYu-=-=!=uEEGG]]3 	jbi.>.>!>FFGG]]3 	 ',Xu||E/B/BXJJ	RWHXHXEj![^c!cejkkGG]]3 	j29U3C3C!CUKKGG j29U+;+;!;UCCG}}S!!  	3w 	3z'/22H 'b'8DD 	,kkG%%h///(8(8'94GGHM  ****N!!(+++rj   c                   |                     d          r*t          |                     d          dd                   nd}t          |                     d                    }t          j        ||          |_        d}|S )z#Parse tag pattern from regex match.tag_nsNr  tag_nameT)r   rw   r   SelectorTagr   )r   r   r   r  prefixr   s         rh   parse_tag_patternzCSSParser.parse_tag_pattern  st     :;9J9JTaggh//4555PT177:..//.f--rj   c                $   t          j        t          |                    d                              }| j                            |          }|Bt          d| d|                    d           | j        |                    d                    t          |t          j                  sG| j        |= t          || j        | j                                      t                    }|| 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.
        rz   NzUndefined custom selector 'z' found at position r   ra   r\   T)r   rs   rw   r   rZ   r   r	   endrV   
isinstancer   r   re   r\   rf   
FLG_PSEUDOr   r   )r   r   r   r  r   r   s         rh   parse_pseudo_class_customz#CSSParser.parse_pseudo_class_custom  s    L99::;??6**%TfTT!%%PQ((TTa   (BO44 	+F# DJ  j11  #+DKX&&&rj   	iselector Iterator[tuple[str, Match[str]]]is_htmltuple[bool, bool]c                   d}t          j        t          |                    d                              }|                    d          rd}|r7|t          v r.|                     |||||                    d                    }nI|s|t          v r|dk    r|xj        t          j
        z  c_        nm|dk    r|xj        t          j        z  c_        d}nI|dk    r|xj        t          j        z  c_        n'|d	k    r|xj        t          j        z  c_        n|d
v r!|j                            t                      n|dk    r!|j                            t"                     n|dk    r!|j                            t$                     n|dk    r!|j                            t&                     nk|dk    r!|j                            t(                     nD|dk    r!|j                            t*                     n|dk    r!|j                            t,                     n|dk    r!|j                            t.                     n|dk    r!|j                            t0                     n|dk    r!|j                            t2                     n|dk    r!|j                            t4                     nZ|dk    r!|j                            t6                     n3|dk    r!|j                            t8                     n|dk    rD|j                            t          j        dddddt          j                                         n|dk    rD|j                            t          j        dddddt          j                                         nx|dk    rD|j                            t          j        dddddt          j                                         n.|dk    rC|j                            t          j        dddddt          j                                         n|dk    rm|j                             t          j        dddddt          j                              t          j        dddddt          j                              g           nr|dk    rl|j                             t          j        dddddt          j                              t          j        dddddt          j                              g           d}n|rJ|tB          v rA| "                    ||                    d          tF          tH          z             d|_%        d}n^|s|tL          v r
d|_%        d}nI|tN          v r-tQ          d| d| j)        |*                    d                    tW          d| d           ||fS )!zParse pseudo class.Frz   openTr   r   r   r   r   )r   r   r   r   r$   r   r   r   r   r   r   r   r"   r%   r   r   r   r#   r    r   r!   z!Invalid syntax for pseudo class 'r  z.' pseudo-class is not implemented at this time),r   rs   rw   r   PSEUDO_COMPLEXparse_pseudo_openr(  PSEUDO_SIMPLEr\   r   SEL_ROOTSEL_DEFINED	SEL_SCOPE	SEL_EMPTYr   r   CSS_LINKCSS_CHECKEDCSS_DEFAULTCSS_INDETERMINATECSS_DISABLEDCSS_ENABLEDCSS_REQUIREDCSS_OPTIONALCSS_READ_ONLYCSS_READ_WRITECSS_IN_RANGECSS_OUT_OF_RANGECSS_PLACEHOLDER_SHOWNr   SelectorNthr   r   PSEUDO_COMPLEX_NO_MATCHparse_selectorsr*  FLG_OPENr   PSEUDO_SIMPLE_NO_MATCHPSEUDO_SUPPORTEDr	   rV   startNotImplementedError)r   r   r   r  r,  r.  complex_pseudor   s           rh   parse_pseudo_classzCSSParser.parse_pseudo_class6  s    L99::776?? 	"!N M	f6611#v|YXYX]X]^_X`X`aaLL K	Fm$;$;  		R[(			:%%		R^+		8##		R\)			8##		R\)			111$$X....:%%$$[1111:%%$$[1111+++$$%67777;&&$$\2222:%%$$[1111;&&$$\2222;&&$$\2222<''$$]3333=(($$^4444;&&$$\2222?**$$%56666///$$%:;;;;>))r~a5%IZIZ[[\\\\=((r~a5$HYHYZZ[[[[+++r~a4HYHYZZ[[[[?**r~a4rGXGXYYZZZZ=((q%E5"/BSBSTTq%E4ARARSS    ?**q%D%ARARSSq%D$@Q@QRR    LL 	*A A A  AEE!HHj86KLLLCLLL 	F.D$D$DCLLL'''%=F===

   &JFJJJ   W$$rj   c                   |                                 }|                    d          rd}nd}t          j        t	          |d                             |d<   t          j        |                    d|z                       }|dk    rd}d}	d	}
nT|d
k    rd}d}	d	}
nFt          t          t                   t          	                    |                    }|
                    d          r|
                    d          dk    rdnd}|
                    d          }|                    d          }
|                    d          r|dz  }n|
r||dd         z  }n||z  }|
                    d          r|
                    d          dk    rdnd}|
                    d          r||
                    d          z  }nd}t          |d          }t          |d          }	|d         }|dk    r|
                    d          r8|                     ||                    d          t           t"          z            }nt$          }|dk    r2|j                            t+          j        ||
|	dd|                     n|dk    r1|j                            t+          j        ||
|	dd	|                     n|dk    rC|j                            t+          j        ||
|	d	dt+          j                                         nH|dk    rB|j                            t+          j        ||
|	d	d	t+          j                                         d	}|S )zParse `nth` pseudo.r   _child_typerz   r   evenrM   r   Toddr   s1r   r   an1Nr  s2b0
   ofrA   FrC   rB   rD   )	groupdictr   r   rs   rw   r   r
   rW   RE_NTHru   r   endswithr  r]   rH  r(  r*  rI  CSS_NTH_OF_S_DEFAULTr   r   r   rF  r   )r   r   r   r  r,  mdictpostfixr{   rU  rY  var	nth_parts_s1rV  _s2
pseudo_selnth_sels                    rh   parse_pseudo_nthzCSSParser.parse_pseudo_nth  s    99'(( 	GGG
<f#>#>??f*UYYuw7788fBBCCBBCCU3Zg)>)>??I"..W9??43H3HC3O3O##UWC$$A**S//C||C   s
 q"vq"..W9??43H3HC3O3O##UWCs## ys+++S"BS"B6]
hwwt}} /..y!%%((JQYDYZZ /\))r~b#r5%QQRRRR000r~b#r5$PPQQQ^++r~b#r4HYHYZZ[[[[222r~b#r4rGXGXYYZZZrj   rz   r   c                    t           t          z  }|dk    r|t          z  }n|dk    r|t          z  }n|dv r
|t          z  }|j                            |                     |||                     d}|S )z"Parse pseudo with opening bracket.r9   r8   )r:   r7   T)r*  rI  FLG_NOTFLG_RELATIVEFLG_FORGIVEr   r   rH  )r   r   rz   r  r,  r   r\   s          rh   r3  zCSSParser.parse_pseudo_open  s     X%6>>WEEV^^\!EE&&&[ ET11)UEJJKKKrj   r   r   r   tuple[bool, _Selector, str]c                   |                     d                                          }|st          }|t          k    rS||_        |d         j                            |           dt          z   }|                    t                                 n[|r(||_        |d         j                            |           n,|dd         t          k    rt          d| | j	        |          d|z   }t                      }d}|||fS )Parse combinator tokens.relationr  rG   r   Nz%The multiple combinators at position F)
r   stripWS_COMBINATORCOMMA_COMBINATORr   r   r   r   r	   rV   )r   r   r   r  r   r   r   
combinators           rh   parse_has_combinatorzCSSParser.parse_has_combinator  s    WWZ((..00
 	'&J)))#CLbM#**3///]*HY[[)))) '"'..s3333!"".. *CECCL   Z'HkkS(**rj   r   	is_pseudo
is_forgivetuple[bool, _Selector]c	                x   |                     d                                          }	|	st          }	|sW|r|	t          k    rt	          d|	 d| d| j        |          |	t          k    r!d|_        |dd= |                    |           n|	t          k    rX|j        s|st          j
        dd          |_        |j                            |           |                    |           |dd= n;|j                            |           |	|_        |dd= |                    |           t                      }d}||fS )	rq  rr  zThe combinator 'z' at position z , must have a selector before itTNrH   F)r   rs  rt  ru  r	   rV   r   r   r   r   r#  r   r   r   r   )
r   r   r   r  r   r   rx  ry  r   rv  s
             rh   parse_combinatorzCSSParser.parse_combinator  sj    WWZ((..00
 	'&J 	& /?!?!?)hzhhhhhL   ---#aaaL  %%%---w 8y 8 nS$77CG$$Y///  %%%aaaLL$$Y///)aaaL  %%%kkS  rj   c                   |                     d          }|                    d          r0|j                            t	          |dd                              n/|j                            t	          |dd                              d}|S )zParse HTML classes and ids.r   .r   NT)r   r  r   r   rw   r   )r   r   r   r  r   s        rh   parse_class_idzCSSParser.parse_class_idH  s     771::s## 	7K|HQRRL99::::GNN<55666rj   c                   t          j        t          |                    d                              }|dk    rt	          j        dt                     |dk    }t          |                    d                    }g }t                              |          D ]}|                    d          r|                    d          }	|		                    d          rt          |	d	d
         d          }	nt          |	          }	|
                    |	           |j        
                    t          j        ||                     d}|S )zParse contains.rz   r;   z\The pseudo class ':contains' is deprecated, ':-soup-contains' should be used moving forward.r=   valuessplitry   )r  r  r   r  T)r   rs   rw   r   warningswarnFutureWarning	RE_VALUESfinditerr  r   r   r   SelectorContains)
r   r   r   r  r   contains_ownr  r   tokenry   s
             rh   parse_pseudo_containszCSSParser.parse_pseudo_containsS  s9    L99::[  Mn   !66aggh//00''// 	# 	#E{{7## KK((E
++ ,$U1R4[$77$U++OOE""""B/,GGHHHrj   c                   |                     d          }g }t                              |          D ]}|                     d          r|                     d          }|                    d          rt	          |dd         d          }nt	          |          }|                    |           |j                            t          j        |                     d}|S )zParse pseudo language.r  r  ry   r  r   r  T)	r   r  r  r  rw   r   r   r   SelectorLang)r   r   r   r  r  r   r  ry   s           rh   parse_pseudo_langzCSSParser.parse_pseudo_langl  s     ""''// 		# 		#E{{7## KK((E
++ ,$U1R4[$77$U++OOE""""11222rj   c                    t          j        |                    d                    dk    rt          j        nt          j        }|xj        |z  c_        d}|S )zParse pseudo direction.dirltrT)r   rs   r   r   SEL_DIR_LTRSEL_DIR_RTLr\   )r   r   r   r  ry   s        rh   parse_pseudo_dirzCSSParser.parse_pseudo_dir  sJ     #'*QWWU^^"<"<"E"E2>		U		rj   r   c           
        t                      }g }d}d}g }d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            }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!|                    t                                 	 	 t#          |          \  }}|dk    r%t%          d|                    d                     |dk    r|                     |||          }nA|dk    r|                     |||||          \  }}n|dk    r%t%          d|                    d                     |dk    r|                     |||          }n|dv r|                     ||||          }n|dk    r|                     |||          }n|dk    r|                     |||          }d}nu|dk    r|sH|s?t5          d|                    d           | j        |                    d                    d|_        |
rd}n6t5          d|                    d           | j        |                    d                    |dk    rA|r|                     |||||	|          \  }}}	n|                     ||||||||          \  }}n|dk    r|                     |||          }n{|dk    rZ|r@t5          d |                    d           d!| j        |                    d                    |                      |||          }n|d"v r| !                    |||          }|"                    d          }n# tF          $ r Y nw xY w|
r|st5          d#| | j        |          |r|j$        s|stK          j&        d$d%          |_$        |r(|	|_'        |d&         j(                            |           n^|j(        )                    |           |d%d%= |                    |           n)|r'|r|s#d|_        |d%d%= |                    |           d}|st5          d| | j        |          |rtJ          j*        |d&         _+        |rtJ          j,        |d&         _+        |rtJ          j-        |d&         _+        |rtJ          j.        |d&         _+        |rtJ          j/        |d&         _+        tK          j0        d' |D             ||          S )(zParse selectors.FrG   z    is_pseudo: Truez    is_open: Truez    is_relative: Truez    is_not: Truez    is_html: Truez    is_default: Truez    is_indeterminate: Truez    is_in_range: Truez    is_out_of_range: Truez    is_placeholder_shown: Truez    is_forgive: TrueTr   zAt-rules found at position r   r   r   r   z!Pseudo-element found at position r   )r   r   r   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 rH   Nr  c                6    g | ]}|                                 S rn   )r   ).0ss     rh   
<listcomp>z-CSSParser.parse_selectors.<locals>.<listcomp>;  s     >>>q

>>>rj   )1r   rt  r}   rI  r*  rm  rl  FLG_HTMLFLG_DEFAULTFLG_INDETERMINATEFLG_IN_RANGEFLG_OUT_OF_RANGEFLG_PLACEHOLDER_SHOWNrn  r  printr   nextrM  rL  r+  rO  r  rj  r  r  r	   rV   r   rw  r|  r  r%  r  r(  StopIterationr   r   r#  r   r   r   SEL_DEFAULTr\   SEL_INDETERMINATESEL_IN_RANGESEL_OUT_OF_RANGESEL_PLACEHOLDER_SHOWNr   )r   r,  r   r\   r   r   r  closedr   r   is_openrx  is_relativeis_notr.  
is_defaultis_indeterminateis_in_rangeis_out_of_rangeis_placeholder_shownry  rx   r   s                          rh   rH  zCSSParser.parse_selectors  sc    kk		& ux'((+,,	5</00ego&&ux'((%+-..
(9 9::5</00u'7788#E,A$ABB%+-..
 : 	. -+,,, +)*** /-... *())) +)*** .,--- 42333 /-... 31222# 86777 .,---  	*Y[[)))A	>!iQ )##-.XAGGTUJJ.X.XYYY111#'#A#A#q,#W#WLLN**,0,C,CCLZcel,m,m)L'',,,-.^RSRYRYZ[R\R\.^.^___---#'#=#=c1l#S#SLLCCC#'#8#8ay#Y#YLLM))#'#9#9#q,#O#OLLL((#'#8#8a#N#NL"GGN**' ,) "5 O1771:: O O $ !

# # 
 (, !%1TPQ

TT LGGAJJ  
 I%%" 6:6O6OL)Xu7 73c88 -1,A,AL)Y	S]_d- -)cc K''#'#@#@a#V#VLLE\\# 1^!''!**^^^ LGGAJJ  
 $(#9#9#q,#O#OLLO++#'#6#6sA|#L#LLa}>!B <  	 	 	D	  	6 	%<U<<    	 7 49 4.d33 &'"'..s3333$$Y///aaaL  %%%%  	  	 ) 	 CL!!!S!!!L 	 &:5::    	1"$.IbM 	7"$"6IbM 	2"$/IbM 	6"$"5IbM 	;"$":IbM >>I>>>PPPs   J5R: :
SSrV   c              #  f  K   t                               |          }|r|                    d          nd}t                              |          }|r|                    d          dz
  nt          |          dz
  }| j        rt          d|           ||k    rd}| j        D ]}|	                    ||| j
                  }|rv|                                }| j        r>t          d| d|                    d          d|                    d                      |                    d          }||fV   n|V||         }|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    | j        rt          d           dS dS )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 rG   z,Malformed pseudo-class selector at position zInvalid character z
 position z## END PARSING)RE_WS_BEGINr  r(  	RE_WS_ENDrL  r   r  r  
css_tokensru   r\   r   r   r	   rV   )	r   rV   r   r   r(  vrz   r   msgs	            rh   selector_iterzCSSParser.selector_iter=  s      w''$a1W%%"#;qwwqzzA~~#g,,*:: 	.,,,---sllA_  GGGUDJ77 ::<<Dz ^\\\QWWQZZ\\PQPWPWXYPZPZ\\]]]EE!HHE'MMME yEN 88MeMMCC#XXI%IICC#XXFuFFCC#XXPPPCCEqEEeEEC)#t|UCCC5 sll6 : 	$"#####	$ 	$rj   c                `    |                      |                     | j                  ||          S )zProcess selectors.)rH  r  rV   )r   r   r\   s      rh   rf   zCSSParser.process_selectorsf  s,     ##D$6$6t|$D$DeUSSSrj   )Nr   )r   rW   rZ   r   r\   r]   r^   rk   )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   rz   rW   r  r}   r,  r-  r   r]   r^   r}   )r   r   r   r   r  r}   r   r   r   rW   r   r]   r^   ro  )r   r   r   r   r  r}   r   r   r   r   rx  r}   ry  r}   r   r]   r^   rz  )r   r   )r,  r-  r   r]   r\   r]   r^   r   )rV   rW   r^   r-  )r   r]   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_AT_RULEPAT_ID	PAT_CLASSPAT_TAGPAT_ATTRPAT_COMBINEr  r   r  r%  r+  rO  rj  r3  rw  r|  r  r  r  r  rH  r  rf   rn   rj   rh   re   re     s        	(899 &K'#	 $%FH\^mn"$IK^`op
O_My./J	
 	
 	-/FGG(899(*<==	;//f%%++w''X..	;//1J< ;?	7 7 7 7 7D D D DL      8]% ]% ]% ]%~? ? ? ?B   .)+ )+ )+ )+V.! .! .! .!`	 	 	 	   2   *    	rQ rQ rQ rQ rQh'$ '$ '$ '$RT T T T T T Trj   re   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]
    )
    )
rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   )r^   rk   )rZ   r[   r^   rp   )F)r{   rW   r|   r}   r^   rW   )r   rW   r^   rW   )er   
__future__r   r   	functoolsr   r   r   r   rc   r   r   r	   r  typingr
   r   r   r   r   r4  rJ  r2  rG  PSEUDO_SPECIALrK  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_  r   r  r  r  r  rt   ru  rt  r*  rl  rm  r  r  r  rI  r  r  r  rn  	_MAXCACHEri   ro   rb   rw   r   r   r   r   re   rf   r9  r:  r;  r<  r=  r>  r?  r@  rE  ra  rB  rA  rC  rD  rn   rj   rh   <module>r     s	     " " " " " " 				                         % % % % % %  - - - - - - - - - - - -!   8   (	 	 	      !#99NJMddguu  ''0R(<<<<MMM'MMM 8C 8C  

 K#JJJJJqGqqGqqakqqqbcbbsbbubb#bbZ]bbb 
z		*	
NJ
N
Nj
N
N
N\\\j\\\\VZ\\AAAAAA HHHHHH ;j;;; <<< ,*,,  J  .  "% 2: =?AD IQ TVX[   
-  !   
 /dd5ddSddCddRWdd\_ddd-GGsGGGBBRBBCBBB2hhuhhhhPShhV[hh`chhh  RZMMMMrtTT
^R^^SZ^^^`b`dee	fsffQTfffhjhl	m	mBJJJJ3JJ#JJJBDQQ	
2bjc%%BJ3{{{##	BJ63666==	   

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