MpjsDdZddlmZddlZddlmZddlmZddlmZ ddlm Z dd lm Z ddl Z dd lmZmZmZmZdd lmZdd lmZddlZej0Zej4Zd ZdZhdZhdZhdZ hdZ!hdZ"eeze ze!ze"zZ#dZ$de$dZ%dZ&de%de&dZ'de%dZ(de%de$dZ)de(de(d Z*d!e'd"e'd#Z+d$e$d%e$d&e*dZ,de'd'e'd(e,d)e'd*e'd+ Z-d,e*Z.d-e*Z/d.e*d/e*d0Z0d1e'd2e*d3e*de-d4 Z1d5e*d6e'd7Z2d5e*d6e'd8Z3d9e*dZ4d:Z5e'd;Z6de3d?e+d@e'dAe&d+e%e'dBe&d+e%e'dCZ9dDe3dEe+dFe'dGZ:e3dHe,de'dIe'd+e,dJe'd; Z;e3dKe'd;Zej~dNe'dOejZAej~dNe%dPe$dejZBej~dQe'dRe'dSejZCej~dTe,dUe'dIe'dVejZEej~e%ZFej~dWe'd+ZGej~dXe&dYZHej~dWe4dZejZIej~e3ejejzejzZKd[ZLd\ZMdZNd]ZOd^ZPd_ZQd`ZRdaZSdbZTdcZUddZVdeZWdfZXdgZYeeYh ddiZZddjZ[ddkZ\dddlZ]ddmZ^GdndoZ_Gdpdqe_Z`GdrdsZaeGdtduZbGdvdweecebe jzfZeebdxeNeRzZfebdyeNeRzZgebdzeNeRzeQzZhebd{eNeRzeSzZiebd|eNeRzZjebd}eNeRzZkebd~eNeRzZlebdeNeRzZmebdeNeRzeWzZnebdeNeRzZoebdeNeRzZpebdeNeRzeUzZqebdeNeRzeVzZrebdeNeRzZsebdeNeRzZtebdeNZuGddZvy)zCSS selector parser.) annotationsN) lru_cache)util) css_match) css_types)SelectorSyntaxError)MatchAnyIteratorcast) dataclass)UserDictii >: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[!~^|*$]?=)z *(?Pz)(?:z*(?P[is]))?)?*z\#z\.z(?P(?:z|\*)?\|)?(?Pz|\*)z\[z*(?P(?:z|\*)?\|)?(?Pz\]z (?P:z )(?P\(z*)?z*)z(?P:(?=--)&z*\):z@Pz (?Pz (?Pz|even|odd))(?:z *\)|(?Pz*ofz*)) z (?Pz (?Pz |even|odd))z*\) z (?Pz*,z)*)z(?Pltr|rtl)z*?(?P[,+>~]|z (?![,+>~]))z(?:(\\[a-f0-9]{1,6}z?)|(\\[^\r\n\f])|(\\$))z?)|(\\[^\r\n\f])|(\\$)|(\\z'(?P[-+])?(?P[0-9]+n?|n)(?:(?<=n)z *(?P[-+])z*(?P[0-9]+))?z (?:(?Pz )|(?Pz*))^z$^(?:[ \t]|(?:\n\r|(?!\n\r)[\n\f\r])|z)*$,  @iii)maxsizec~t|}tj|t|||j |||S)zCached CSS compile.customflags)process_customcm SoupSieve CSSParserprocess_selectors)pattern namespacesrerfcustom_selectorss b/mnt/ssd/data/Dropbox/adrian/scripts/msg_venv/lib/python3.12/site-packages/soupsieve/css_parser.py_cached_css_compilerpsH&f- << #       c,tjy)zPurge the cache.N)rp cache_clearrqro _purge_cacherus##%rqci}|r|jD]_\}}tj|}tj |t d|d||vrt d|d||t|<a|S)zProcess custom.z The name 'z)' is not a valid custom pseudo-class namezThe custom selector 'z' has already been registered)itemsrlower RE_CUSTOMmatchr KeyError css_unescape)rernkeyvaluenames rorgrgs  ,,. 9JC::c?Dt$,)Jtf.replaces 771:AGGAJqrNB/IA~4  NE WWQZGGAJqrNE  WWQZE E rq)r Match[str]returnstr) RE_CSS_ESCRE_CSS_STR_ESCsub)contentstringrs ror|r|s "%J. = =gw OOrqczg}t|}|dkDxr|ddk(}|dk(r|r|jd|nt|D]\}}t|}|dk(r|jd(d|cxkrdksn|dk(r|jd|dd Q|dk(s|r*|dk(r%d |cxkrd krnn|jd|dd |d vs:|d k\s5d |cxkrd ks*nd |cxkrd ksnd|cxkrdksnd|cxkrdkrnn|j||jd|dj |S)zEscape identifier.r-r\rxrY09)-_r`AZazr)lenappend enumerateordjoin)identrlength start_dashindexcrs roescapersGF ZF!/aCJ {z 5'l#!%( (HE1AID  h')+t+ T0A 9Q-q121* $)B[W[B[ 9Q-q12\)Y$->49C\X\C\*d* 0IT0ItW`OhdhOh a  1#h' ( 776?rqc:eZdZdZddZeddZd dZd dZy) SelectorPatternSelector pattern.c.||_||_d|_y) Initialize.N)rrl _re_pattern)selfrrls ro__init__zSelectorPattern.__init__;s  37rqc(t5|jUtj|jtj tj ztjz|_ddd|jS#1swY|jSxYw)z1Retrieve the compiled regular expression pattern.N)RE_LOCKrrecompilerlIXUrs ro re_patternzSelectorPattern.re_patternBsn P'#%::dllBDD244K"$$(/D% rqN)rzCtuple[tuple[str, tuple[str, ...], str, type[SelectorPattern]], ...]rrrr)rrrrrrrzrtrqrorrVs !Q rqrc4eZdZdZddZddZd dZd dZeZy) _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 ,|jdd|_|jdg|_|jdg|_|jdg|_|jdg|_|jdg|_|jdg|_|jd d|_|jd g|_ |jd g|_ |jd d |_ |jdd|_ y)rtagNidsclasses attributesnth selectors relationsrel_typecontainslangrfrno_matchF) rrrrrrrrrrrrfr)rkwargss rorz_Selector.__init__s::eT*::eR(zz)R0  **\26::eR(K4K4 :t4  :r2 JJvr* ZZ+  :u5 rqc|rG|d}|jj|ddtj|j gStjS)zFreeze relation.rrN)rextendct SelectorListfreeze)rrsels ro_freeze_relationsz_Selector._freeze_relationssL A,C MM 12 /??CJJL>2 2??$ $rqc|jrtjStj|jt |j t |jt |jt |jt |j|j|j|jt |jt |j|j S)z Freeze self.)rr SelectorNullSelectorrtuplerrrrrrrrrrrfrs rorz_Selector.freezes ==??$ $;;dhhdll#doo&dhhdnn%&&t~~6 dmm$dii    rqc@d|jd|jd|jd|jd|jd|j d|j d|jd |jd |jd |jd |jd S)zString 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) rrrrrrrrrrrfrrs ro__str__z_Selector.__str__sTXXLtxxl*T\\DTTabfbqbqatu88,l4>>*t |j j |j}||j|<ddd|S#1swYSxYw)z Get item.rfN)SEL_LOCKr isinstancerrjrrkrfrs ro __getitem__zPseudoSelectorMap.__getitem__si 'IIcNE%,!%..1CC%++CV!& #  '   '  s AA//A9N)r}rr~zCSSPattern | ct.SelectorListrr)r}rrr)rrrrrrrtrqrorrs rqrzhtml|*: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]) zhtml|*: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]zhtml|*:is(video, audio)[muted]z*|*ceZdZdZedeeddeefddeefdde efd d e efd d e effed e ede edeedeedeedeedeedeedeedef Zeidededededededededed e d!e!d"e"d#e#d$e$d%e%d&e&d'e'Z( d: d;d)Z)dd.Z. d?d/Z/ d@d0Z0 dAd1Z1 dBd2Z2d=d3Z3d=d4Z4d=d5Z5d=d6Z6 dC dDd7Z7dEd8Z8dCdFd9Z9y()GrjzParse CSS selectors. pseudo_closepseudo_contains)rGrHrIpseudo_nth_child)rMrOpseudo_nth_type)rNrP pseudo_lang)rL pseudo_dir)rKpseudo_class_custom pseudo_classpseudo_elementampat_ruleidclassr attributecombinerrrrr(rrrrrrrr"rr&r) Nc|jdd|_||_|jtjz|_|in||_d|_y)rrNr)rrlrfrDEBUGdebugrecount)rrrerfs rorzCSSParser.__init__sG ''9  ZZ$**, "Nb  rqcN|jtkDrtdty)z!Check the current selector count.z/Selector exceeds pseudo-class nesting limit of N)rSELECTOR_LIMIT ValueErrorrs ro check_countzCSSParser.check_counts) :: &N~N^_` ` 'rqcd}|jd}|jdr$tj|jdnd}|jdrt|jdddnd}t|jd}d} d} d} |r)|d k(rtj nd tj z} nLtj|d k(r$tj tj z} d } ntj } |rY|jd jdrt|jd ddd } nt|jd } |sd} n|jdr4| sdnt j| } t jd| z| } n_|jdr4| sdnt j| } t jd| z| } n|jdr3| sdnt j| } t jd| z| } n|jdrH| rtj| rdnt j| } t jd| z| } n}|jdr-t jdt j| z| } n?t jdt j| z| } |jdrd }| r!| rt j| j} tj||| | }|rjt}|j j#|tj$|j'gd d}|j(j#|d }|S|j j#|d }|S)z8Create attribute selector from the returned regex match.FcmpcaseNattr_nsr attr_nameirtypeTr~"'rrVz(?!)z^%s.*rWz.*?%s$rSz.*?%s.*~z7.*?(?:(?<=^)|(?<=[ \t\r\n\f]))%s(?=(?:[ \t\r\n\f]|$)).*rRz ^%s(?:-.*)?$z^%s$!)rrrxr|rrDOTALL startswithrrRE_WSsearchrlrSelectorAttributerrrrrr)rrr has_selectorinverseopr nsattris_typepattern2r~rfrlsel_attrsub_selnot_lists roparse_attribute_selectorz"CSSParser.parse_attribute_selectors WWU^./ggfotzz!''&/*467ggi6H\!''),Sb1 2bAGGK01 !S[RTTa299EjjE!159G ]]3 $)Gbii.>EjjU!2E:G ]]3 $)Gbii.>Ejje!3U;G ]]3 $)ELL,?GRYYuEUEjj![^c!cejkG ]]3 jj299U3C!CUKGjj299U+;!;UCG}}S! wzz'//2H''b'8D kG    % %h /(8'94GH MM  *  NN ! !( + rqc|jdrt|jdddnd}t|jd}tj|||_d}|S)z#Parse tag pattern from regex match.tag_nsNr"tag_nameT)rr|r SelectorTagr)rrrr0prefixrs roparse_tag_patternzCSSParser.parse_tag_patterns\:;9Jaggh/45PT177:./..f- rqctjt|jd}|jj |}|;t d|d|jd|j|jdt|tjsR|j|=t||j|jjt}||j|<|xj |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. rzUndefined custom selector 'z' found at position rrdrT)rrxr|rrerr endrlrrrrjrfrk FLG_PSEUDOrrrr)rrrr0rrs roparse_pseudo_class_customz#CSSParser.parse_pseudo_class_custom sL9:;;??6*  %-fX5I!%%PQ(T a  (BOO4 F# DJJj1 #+DKK  hnn$   X& rqc d}tjt|jd}|jdrd}|r0|tvr(|j |||||j d}||fS|s>|tvr5|dk(r%|xjtjzc_n|dk(r'|xjtjzc_d}n|dk(r%|xjtjzc_n|d k(r%|xjtjzc_n||jvr[|j|}|xj|jz c_|j!|j"j%|n|d k(rG|j&j%tj(d ddddtj*n|d k(rG|j&j%tj(d ddddtj*n|d k(rG|j&j%tj(d ddddtj*n8|dk(rF|j&j%tj(d ddddtj*n|dk(rr|j&j-tj(d ddddtj*tj(d ddddtj*gnv|dk(rq|j&j-tj(d ddddtj*tj(d ddddtj*gd}||fS|rB|t.vr:|j1||j dt2t4zd|_d}||fS|s|t8vr d|_d}||fS|t:vr*t=d|d|j>|jAdt=d|d|j>|jAd)zParse pseudo class.FropenTrrrrrr#rr 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.)!rrxr|rPSEUDO_COMPLEXparse_pseudo_openrB PSEUDO_SIMPLErfrSEL_ROOT SEL_DEFINED SEL_SCOPE SEL_EMPTYPSEUDO_SELECTORSrrrrr SelectorNthrrPSEUDO_COMPLEX_NO_MATCHparse_selectorsrCFLG_OPENrPSEUDO_SIMPLE_NO_MATCHPSEUDO_SUPPORTEDr rlstart) rrrr0 iselectoris_htmlcomplex_pseudorpseudo_selectors roparse_pseudo_classzCSSParser.parse_pseudo_class,sL9: 776?!N f611#v|YXYX]X]^_X`aLxW$$w Fm$;  R[[( :% R^^+ 8# R\\) 8# R\\) 4000"&"7"7"? o333   " $$_5>)r~~a5%IZ[\=(r~~a5$HYZ[++r~~a4HYZ[?*r~~a4rGXYZ=(q%E5"//BSTq%E4ARS ?*q%D%ARSq%D$@QR  L,W$$+*A A  AEE!Hj86K LCLL$W$$# F.D$DCLLW$$' '%3F81=    &F8nn   rqc X|j}|jdrd}nd}tjt |d|d<tj|jd|z}|dk(rd}d} d } n|d k(rd}d } d } nt t ttj|} | jd r| jd d k(rd nd} | jd} | jd} | jdr| dz } n| r | | ddz } n| | z } | jdr| jdd k(rd nd}| jdr|| jdz }nd}t| d}t|d} |d}|dk(r|jdr.|j||jdt t"z}n>|j$d}|xj&|j&z c_|j)|dk(r7|j*j-t/j0|| | dd|d }|S|dk(r3|j*j-t/j0|| | dd |d }|S|dk(rI|j*j-t/j0|| | d dt/j2d }|S|dk(rE|j*j-t/j0|| | d d t/j2d }|S)zParse `nth` pseudo.r_child_typerrevenrZrToddrs1rran1Nr"s2b0 ofrrMFrOrNrP) groupdictrrrxr|r r rRE_NTHrzrendswithr,rrQrBrCrRrNrrrrrrOr)rrrr0rVmdictpostfixrr`rdvar nth_parts_s1ra_s2 pseudo_selnth_sels roparse_pseudo_nthzCSSParser.parse_pseudo_nthys  99' (GG <f #>?f **UYYuw78 f BBC  BBCU3Zg)>?I".9??43HC3O#UWC$A**S/C||C s q"v q".9??43HC3O#UWCs#ys++S"BS"B6] h wwt}..y!%%(JQYDYZ// = gmm+   "\)r~~b#r5%QR 00r~~b#r5$PQ   ^+r~~b#r4HYZ[ 22r~~b#r4rGXYZ rqcttz}|dk(r |tz}n|dk(r |tz}n |dvr |tz}|j j |j|||d}|S)z"Parse pseudo with opening bracket.rErD)rFrCT)rCrRFLG_NOT FLG_RELATIVE FLG_FORGIVErrrQ)rrrr0rVrrfs rorHzCSSParser.parse_pseudo_opensoX% 6> W E V^ \ !E & & [ E T11)UEJK rqc|jdj}|st}|tk(rH||_|dj j |dtz}|j tnS|r&||_|dj j |n&|ddtk7rtd||j|d|z}t}d}|||fS)Parse combinator tokens.relationr"rUrNz%The multiple combinators at position F) rstrip WS_COMBINATORCOMMA_COMBINATORrrrrr rl)rrrr0rrr combinators roparse_has_combinatorzCSSParser.parse_has_combinatorsWWZ(..0 &J ) )#CL bM # # * *3 /]*H   Y[ )' " ''..s3!". *;E7CLLZ'Hk S(**rqc L|jdj} | st} |sP|r | tk7rt d| d|d|j || tk(rd|_|dd=|j|n| tk(r[|js|stjdd|_|jj||j||dd=n8|jj|| |_ |dd=|j|t}d}||fS) rzr{zThe combinator 'z' at position z , must have a selector before itTNrSF)rr|r}r~r rlrrrrr>rrrr) rrrr0rr is_pseudo is_forgiverrs roparse_combinatorzCSSParser.parse_combinatorsWWZ(..0 &J/?!?)&zl.GghLL--# aL  %--wwy nnS$7CG $$Y/  %aL $$Y/) aL  %k S  rqc|jd}|jdr+|jjt |ddd}|S|j jt |ddd}|S)zParse HTML classes and ids.r.rNT)rr,rrr|r)rrrr0rs roparse_class_idzCSSParser.parse_class_id.sq771:   s # KK  |HQRL9 :  GGNN< 5 6 rqc6tjt|jd}|dk(rt j dt |dk(}t|jd}g}tj|D]b}|jdr|jd} | jdrt| d d d } n t| } |j| d|jjtj||d }|S) zParse contains.rrGz\The pseudo class ':contains' is deprecated, ':-soup-contains' should be used moving forward.rIvaluessplitr~)r(r'rr"T)rrxr|rwarningswarn FutureWarning RE_VALUESfinditerr,rrrSelectorContains) rrrr0r contains_ownrrtokenr~s roparse_pseudo_containszCSSParser.parse_pseudo_contains9sL9: [ MMn !66 aggh/0''/ #E{{7#KK(E +$U1R[$7$U+ OOE " # B//,GH rqc|jd}g}tj|D]b}|jdr|jd}|jdrt |ddd}n t |}|j |d|j j tj|d}|S)zParse pseudo language.rrr~r&rr"T) rrrr,r|rrr SelectorLang)rrrr0rrrr~s roparse_pseudo_langzCSSParser.parse_pseudo_langRs"''/ #E{{7#KK(E +$U1R[$7$U+ OOE " # 12 rqctj|jddk(rtjntj }|xj |zc_d}|S)zParse pseudo direction.dirltrT)rrxrr SEL_DIR_LTR SEL_DIR_RTLrf)rrrr0r~s roparse_pseudo_dirzCSSParser.parse_pseudo_dirgsD#'**QWWU^"<"E2>> U  rqc  t}g}d}d}g}dtz} |j} t|tz} t|t z} t|t z} t|tz}t|tz}t|tz}t|tz}t|tz}t|tz}t|tz}t|tz}|jr| 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%|\}}|dvr%|xjdz c_|j'|dk(rt)d|j+d|dk(r'|xj,t.j0zc_d}n |dk(r|j3|||}n|dk(r|j5|||||\}}n|dk(rt)d|j+d|dk(r|j7|||}n|dvr|j9||||}n~|dk(r|j;|||}nd|dk(r|j=|||}d}nH|dk(r|sA|s8t?d|j+d|j@|j+dd|_!| rd}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+dd$|j@|j+d|jK|||}n|d%vr|jM|||}|jOd} | r|st?d&||j@||r|jRs| st/jTd'd(|_)| r&| |_+|d)jXj#|nW|jXj[||d(d(=|j#|n%|r#|r|sd|_!|d(d(=|j#|d}|st?d||j@||rt.j\|d)_|rt.j^|d)_|rt.j`|d)_|rt.jb|d)_|rt.jd|d)_t/jf|Dcgc]}|jic}|||j| z S#tP$rYwxYwcc}w)*zParse selectors.FrUz 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)rrrrzAt-rules found at position rrr r r z!Pseudo-element found at position r)rrr r rz Expected a selector at position z)Unmatched pseudo-class close at position rrrzTag name found at position z instead of at the start)rrz"Unclosed pseudo-class at position rSNr")5rr}rboolrRrCrwrvFLG_HTML FLG_DEFAULTFLG_INDETERMINATE FLG_IN_RANGEFLG_OUT_OF_RANGEFLG_PLACEHOLDER_SHOWNrxrprintrnextrNotImplementedErrorrUrfrrLrDrZrrtrrr rlrrrr:r@rrB StopIterationrr>rrr SEL_DEFAULTSEL_INDETERMINATE SEL_IN_RANGESEL_OUT_OF_RANGESEL_PLACEHOLDER_SHOWNrr)rrVrrfrrr0closedrrris_openr is_relativeis_notrW is_defaultis_indeterminate is_in_rangeis_out_of_rangeis_placeholder_shownrr}rss rorQzCSSParser.parse_selectorsosk   & ux'(+, 5</0 ego&ux'(%+-. (9 9:5</0 u'778#E,A$AB%+-.  ::+,)*-.())*,-23-.12#67,-    Y[ )H iQ99JJ!OJ$$&)#-0KAGGTUJ<.XYYE\II-I#'L11#'#A#A#q,#WLN*,0,C,CCLZcel,m)L',,-0QRSRYRYZ[R\Q].^__--#'#=#=c1l#SLCC#'#8#8ay#YLM)#'#9#9#q,#OLL(#'#8#8a#NL"GN*')"5"B1771:, O $ ! # (, !%1GPQ |T LLGGAJ I%"6:6O6OL)Xu73 c8-1,A,AL)Y S]_d-) cK'#'#@#@a#VLE\#19!''!*E]^ LLGGAJ $(#9#9#q,#OLO+#'#6#6sA|#LLaKPD 6%4UG<   779..d3' " ''..s3 $$Y/aL  %)CL!   S !L&25':   "$..IbM  "$"6"6IbM  "$//IbM  "$"5"5IbM  "$":":IbM I>q >QUQ[Q[^cQcddq   p ?s%J&W3X3 X?Xc #2Ktj|}|r|jdnd}tj|ddd}|r|jdnd}t |d|zz }|j rt d|||krd}|jD]}|j|||j}|s#|j}|j r2t d|d|jdd|jd|jd}||fn|P||}|d k(rd |} n)|d k(rd |} n|d k(rd|} n|dk(rd|} nd|d|} t| |j|||kr|j r t dyyw)zIterate selector tokens.rNr"rz ## PARSING: zTOKEN: 'z' --> z at position [z)Malformed attribute selector at position rz%Malformed class selector at position #z"Malformed id selector at position rUz,Malformed pseudo-class selector at position zInvalid character z position z## END PARSING) RE_WS_BEGINr.rB RE_WS_ENDrrr CSS_TOKENSrzrfrrrUr rl) rrlrroffsetrBvrrmsgs ro selector_iterzCSSParser.selector_iter+s   w 'a1   WTrT] +qA'la&j) :: L , -slA__ GGGUDJJ7::ugFC#XHPC.qe:eWEC)#t||UCC5sl6 :: " # sB;F>B?F>FcZ|j|j|j||S)zProcess selectors.)rQrrl)rrrfs rorkzCSSParser.process_selectorsUs(##D$6$6t||$DeUSSrq)Nr)rrrez'dict[str, str | ct.SelectorList] | Nonerfrrrrr)rrrrr0rrr) rrrrr0rrV Iterator[tuple[str, Match[str]]]rWrrztuple[bool, bool]) rrrrr0rrVrrr) rrrrr0rrVrrrrr)rrrrr0rrrrrrrrztuple[bool, _Selector, str])rrrrr0rrrrrrrrrrrrztuple[bool, _Selector])rr)rVrrrrfrrr)rlrrr)rrrfrrr):rrrrrPAT_PSEUDO_CLOSErPAT_PSEUDO_CONTAINSPAT_PSEUDO_NTH_CHILDPAT_PSEUDO_NTH_TYPEPAT_PSEUDO_LANGPAT_PSEUDO_DIRPAT_PSEUDO_CLASS_CUSTOMPAT_PSEUDO_CLASSPAT_PSEUDO_ELEMENTPAT_AMP PAT_AT_RULEPAT_ID PAT_CLASSPAT_TAGPAT_ATTR PAT_COMBINErrCSS_LINK CSS_CHECKED CSS_DEFAULTCSS_INDETERMINATE CSS_DISABLED CSS_ENABLED CSS_REQUIRED CSS_MUTEDCSS_OPEN CSS_OPTIONAL CSS_READ_ONLYCSS_READ_WRITE CSS_IN_RANGECSS_OUT_OF_RANGECSS_PLACEHOLDER_SHOWNCSS_NTH_OF_S_DEFAULTrNrrr:r@rDrZrtrHrrrrrrrQrrkrtrqrorjrjos (89&K'#  $%FH\^mn"$IK^`op O_My./J   -/FG(89(*<=w' ;/f%+w' X. ;/3J:) X        /          i  X    -  >    - !"7! " .# 2;?  8    a IV>K% K% K% K% 4 K%  K% K%ZA A A A 4 A  AF   4    .)+ )+ )+ )+ # )+  )+)+ %)+V.! .! .! .! # .! # .!.!.!.! .!` 2* ze3zeze ze  zex($TTrqrj) rlrrmzct.Namespaces | Nonerect.CustomSelectors | Nonerfrrz cm.SoupSiever)rerrz dict[str, str | ct.SelectorList])F)rrrrrr)rrrr)wr __future__rr functoolsrrrrrhrrr rtypingr r r r dataclassesr collectionsr threadingLockrRLockrrrrIrSrGrPPSEUDO_SPECIALrTNEWLINEWSCOMMENTSWSC CSS_ESCAPESCSS_STRING_ESCAPES IDENTIFIERNTHVALUEATTRrrrrrPAT_PSEUDO_CLASS_SPECIALrrrrrrrrrrrrrrrrjrrr-rrryrrr~r}rCrvrwrrrrRrrrrx _MAXCACHErprurgr|rrrrrrrrrrrrrrrrrrrrrrrrrjrtrqrors " %--!  )..  9?? ! <8 !#99NJMddguu ''! ) RD(1(O< /t>'"M;;F-H88C}E *#iuMJ G9$B7)K^_i^jjkn cU&se;ugT#FYZ]Y^^_` zl *  J<'=j\ N%j\1H TUVZU[[] ^  LSA( LRH-j\; e3<*+,J< ./0e>#k(1RDS RSTVSWX[W\] -./U+cU# //{5'SEC5PQRWQXX[\_[``cd-..>se3G,RD C5B 23;ugSRPSuTUV[U\\_`c_ddghRZZ05LMrtt T 4RD8RSZR[[]^`b`d`de >se=QTPUUefhjhlhl m BJJ-wl3%r#cJBDD Q  2bjjAcU!% BJJ>xjK L BJJ!34A6 = $"**%=rttbdd{RTT?QR          9 $ &    ,& P6866