K iz4dZddlmZddlmZddlmZddlZddlmZddl Z ddl Z ddl m Z m Z mZmZmZmZmZej$d Zej$d Zd Zd Zd ZdZdZdZdZdZdZdZej>ej@zZ!ejDejFzZ$ej>ej@ddZ%ej$dZ&ej$dZ'ej$dZ(ej$dZ)ej$dZ*ej$dZ+ej$dZ,dZ-dZ.dZ/d Z0d!Z1d"Z2d#Z3Gd$d%Z4Gd&d'Z5Gd(d)Z6Gd*d+e5Z7Gd,d-ejpZ9ejte9y).z CSS matcher.) annotations)datetime)utilN) css_types)IteratorIterableAnyCallableSequencer castz[^ ]z [^ ]+ >~+z: z:>z:~z:+zhttp://www.w3.org/1999/xhtmlz$http://www.w3.org/XML/1998/namespace)ltrrtlautoz0^(?P-?(?:[0-9]{1,}(\.[0-9]+)?|\.[0-9]+))$z*^(?P[0-9]{2}):(?P[0-9]{2})$z)^(?P[0-9]{4,})-(?P[0-9]{2})$z)^(?P[0-9]{4,})-W(?P[0-9]{2})$z;^(?P[0-9]{4,})-(?P[0-9]{2})-(?P[0-9]{2})$zd^(?P[0-9]{4,})-(?P[0-9]{2})-(?P[0-9]{2})T(?P[0-9]{2}):(?P[0-9]{2})$z(?:(?:-\*-)(?:\*(?:-|$))*|-\*$)) c eZdZdZddZddZy) _FakeParentz Fake parent class. When we have a fragment with no `BeautifulSoup` document object, we can't evaluate `nth` selectors properly. Create a temporary fake parent so we can traverse the root element as a child. c|g|_y) Initialize.N)contents)selfelements Y/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/soupsieve/css_match.py__init__z_FakeParent.__init__Ds !  c,t|jS)zLength.)lenr#r$s r&__len__z_FakeParent.__len__Is4==!!r(N)r%bs4.TagreturnNone)r.int)__name__ __module__ __qualname____doc__r'r,r(r&r r ;s" "r(r ceZdZdZed%dZed&dZed&dZed&dZ ed&dZ ed&dZ ed&dZ ed&d Z ed&d Zed'd Zed(d Zd(d Zd)dZd*d+dZ d, d-dZ d. d/dZ d* d0dZ d1 d2dZd*d3dZed4dZed5dZed4dZed6dZed*d7dZed8d9dZed*d7dZed(dZ ed:dZ!ed;dZ"e d< d=d Z#ed>d!Z$ed?d"Z%d*d@d#Z&d*dAd$Z'y)B _DocumentNavz#Navigate a Beautiful Soup document.cT|j|stdt|y)z%Check if valid input tag or document.z:Expected a BeautifulSoup 'Tag', but instead received type N)is_tag TypeErrortype)clstags r&assert_valid_inputz_DocumentNav.assert_valid_inputRs/ zz#XY]^aYbXcde er(c6t|tjS)zIs `BeautifulSoup` object.) isinstancebs4 BeautifulSoupobjs r&is_docz_DocumentNav.is_docZs#s0011r(c6t|tjS)zIs tag.)r@rATagrCs r&r9z_DocumentNav.is_tag_s#sww''r(c6t|tjS)zIs declaration.)r@rA DeclarationrCs r&is_declarationz_DocumentNav.is_declarationds#s//r(c6t|tjS)z Is CDATA.)r@rACDatarCs r&is_cdataz_DocumentNav.is_cdatais#syy))r(c6t|tjS)zIs processing instruction.)r@rAProcessingInstructionrCs r&is_processing_instructionz&_DocumentNav.is_processing_instructionns#s8899r(cJt|tjjS)zIs navigable string.)r@rAr%NavigableStringrCs r&is_navigable_stringz _DocumentNav.is_navigable_stringss#s{{::;;r(ct|tjtjtjtj tj fS)zIs special string.)r@rACommentrIrLrODoctyperCs r&is_special_stringz_DocumentNav.is_special_stringxs5# S__ciiIbIbdgdodopqqr(cL|j|xr|j| S)z Check if node is content string.)rSrW)r<rDs r&is_content_stringz_DocumentNav.is_content_string}s(&&s+NC4I4I#4N0NNr(ct|S)z'Create fake parent for a given element.)r els r&create_fake_parentz_DocumentNav.create_fake_parents2r(c8|duxrt|jS)z2Check if element (or document) is from a XML tree.N)bool_is_xmlr[s r& is_xml_treez_DocumentNav.is_xml_trees~2$rzz"22r(c|yt|j|r |jntj|jdk(xr|j |S)z Check if element is an `iframe`.Fiframe)r_ranamerlower is_html_tagr$r\s r& is_iframez_DocumentNav.is_iframesT :))"-bgg4::bgg3F8 S !   R   r(c|jxr|j|u}|s6|j|}|duxr|jxr|j|}|S)z Return whether element is a root element. We check that the element is the root of the tree (which we have already pre-calculated), and we check if it is the root element under an `iframe`. N)root get_parentis_htmlrh)r$r\rjparents r&is_rootz_DocumentNav.is_rootsQyy,TYY"___R(F%Q$,,Q4>>&;QD r(c#fK|)|r|j|s|jEd{yyy7w)z$Get contents or contents in reverse.N)rhr#r$r\ no_iframes r& get_contentsz_DocumentNav.get_contentss5 >DNN2$6;;&&%7 &s %1/1Nc,|j|||d|S)zGet tag children.T) get_children)r$r\startreverserqs r&get_tag_childrenz_DocumentNav.get_tag_childrens  UGT9EEr(c#*K||r|j|syt|jdz }||r|nd}n|}|rdn|dz}|rdnd} d|cxkr|kr;ny||k7r2|j|} || z }|r|j| r| ||k7r1yyyyyw)z Get children.Nrr)rhr*r#r9) r$r\rurvtagsrqlastindexendincrnodes r&rtz_DocumentNav.get_childrens >9DNN24Fr{{#a'D} 'Q"TAXC 2aDE!T!sl;;u-DTME4;;t#4" sl"5G>s B BBc#HK|j|d|Ed{y7w)z!Specifically get tag descendants.T)rzrqN)get_descendantsrps r&get_tag_descendantsz _DocumentNav.get_tag_descendantss#'''KKKs " "c#K||r|j|sd}|jD]}|||ur d}t|tjr|r|j|r|j |j }nj|}t|tjrB|j r6|j d}t|tjr |j r6|j}||y||r|yyyw)zGet descendants.Nry)rh descendantsr@rArG next_siblingr# next_element)r$r\rzrq next_goodchild last_childs r&rz_DocumentNav.get_descendantss >9DNN24FI (I- $IeSWW- T^^E%: --9(-(:(:I).J",Z"AjFYFY-7-@-@-D #-Z"AjFYFY(2(?(?I# $,! KK1 5G>sCC<C<3 C<cT| |jnd}|r||j|rd}|S)z Get parent.N)rmrh)r$r\rqrms r&rkz_DocumentNav.get_parents0!n$ +v0FF r(c"| |jSdS)Get tag.N)rdr[s r& get_tag_namez_DocumentNav.get_tag_name s.rww2d2r(c|jSz Get prefix.)prefixr[s r&get_prefix_namez_DocumentNav.get_prefix_namesyyr(c"| |jSdS)zGet namespace `URI`.N) namespacer[s r&get_uriz_DocumentNav.get_uris "~r||747r(c(|j|dS)Get next sibling tag.T)rz)get_next)r<r\s r& get_next_tagz_DocumentNav.get_next_tags||BT|**r(c|j}|rGt|tjs-|+|j}|rt|tjs|+|rt|tjsd}|S)rN)rr@rArGr<r\rzsiblings r&rz_DocumentNav.get_next!s`//:gsww7G**r(c<|yt|ddt|ddfS)z7Return namespace and attribute name without the prefix.N)NNrrd)r)r\ attr_names r&split_namespacez_DocumentNav.split_namespaceMs* :y+t4giQU6VVVr(c |yt|tr|St|tr|jdSt|trzg}|D]q}t|ttfs+t|tr|j t|D|j t t|j|s|St|S)z6Normalize the value to be a string or list of strings.utf8)r@strbytesdecoder appendr normalize_value)r<value new_valuevs r&rz_DocumentNav.normalize_valueVs = uc "L eU #<<' ' eX &I H!!c5\2z!X7N$$SV,$$T#s/B/B1/E%FG H 5zr(c |}|jr! |j|j|}|S|jj D]1\}}t j ||k(s|j|}|S|S#t$rY|SwxYw)zGet attribute by name.)r`rattrsKeyErroritemsrre)r<r\rddefaultrkrs r&get_attribute_by_namez"_DocumentNav.get_attribute_by_namews :: ++BHHTN; ( 1::a=D(//2E       sB B  B c#K|8|jjD]\}}||j|fyyw)zIterate attributes.N)rrr)r<r\rrs r&iter_attributesz_DocumentNav.iter_attributessF >( 01,,Q/// 0 s<>c|j|dg}t|trtj |}t t t|S)z Get classes.class)rr@r RE_NOT_WSfindallr r )r<r\classess r& get_classesz_DocumentNav.get_classessC++B< gs #''0GHSM7++r(cdj|j||Dcgc]}|j|r|c}Scc}w)z Get text.rrq)joinrrYr$r\rqrs r&get_textz_DocumentNav.get_textsNww!%!5!5bI!5!N ))$/    sAcr|j||Dcgc]}|j|s|c}Scc}w)z Get Own Text.r)rrrYrs r& get_own_textz_DocumentNav.get_own_texts?"..rY.G 4KaKabfKgD   s44)r=r r.r/)rDbs4.element.PageElement | Noner.r_)r\r-r.r r\bs4.Tag | Noner.r_r\r-r.r_F)r\rrqr_r.!Iterator[bs4.element.PageElement])NFF) r\rru int | Nonervr_rqr_r.Iterator[bs4.Tag])NFFF) r\rrurrvr_rzr_rqr_r.r)r\rrqr_r.r)FF)r\rrzr_rqr_r.r)r\rrqr_r.rr\rr. str | Noner\r-r.rr\r-r.r)r\r-rzr_r.r)T)r\r-rzr_r.r)r\rrrr.ztuple[str | None, str | None])rr r.zstr | Sequence[str]N)r\r-rdrrstr | Sequence[str] | Noner.r)r\rr.z0Iterator[tuple[str, str | Sequence[str] | None]])r\r-r.z Sequence[str])r\r-rqr_r.r)r\r-rqr_r.z list[str])(r1r2r3r4 classmethodr> staticmethodrEr9rJrMrPrSrWrYr]rarhrnrrrwrtrrrkrrrrrrrrrrrrrrrr5r(r&r7r7Os&-ff22((00**::<<rrOO  33   '! F  F F F  F  F! # ## #  #  # +#: L LL  L " " "  " + " H33  88 ++   **    + +WW@ /3  ,  $ *00,,  r(r7ceZdZdZed dZed dZed dZed dZeddZ eddZ e ddZ y )Inputsz-Class for parsing and validating input items.ct}|tk(r%|dzdk(r|dzdk7s|dzdk(rtnt}n|tvrt }d|cxkxr|kScS)z Validate day.rrdir) LONG_MONTHFEBFEB_LEAP_MONTH FEB_MONTH MONTHS_30 SHORT_MONTH)yearmonthdaymax_dayss r& validate_dayzInputs.validate_days^ C<+/!8q=tczQUY\_U_cdUd~ktH i "HC#8####r(ctjdddd|djd}|dk(rd}d|cxkxr|kScS)zValidate week. -rz%m-%d-%Yr5)rstrptime isocalendar)rweekmax_weeks r& validate_weekzInputs.validate_weeksX$$t1RD$%8*EQQSTUV q=HD$H$$$$r(c"d|cxkxrdkScS)zValidate month.rrr5)rs r&validate_monthzInputs.validate_monthsERr(c d|kS)zValidate year.rr5)rs r& validate_yearzInputs.validate_yearsDyr(c"d|cxkxrdkScS)zValidate hour.rr5)hours r& validate_hourzInputs.validate_hoursDBr(c"d|cxkxrdkScS)zValidate minutes.r;r5)minutess r&validate_minuteszInputs.validate_minutessG!r!!!!r(cd}||S|dk(rtj|}|rt|jdd}t|jdd}t|jdd}|j |r)|j |r|j |||r|||f}|S|dk(rutj|}|r\t|jdd}t|jdd}|j |r|j |r||f}|S|dk(rvtj|}|r]t|jdd}t|jdd}|j |r|j||r||f}|S|dk(rutj|}|r\t|jd d} t|jd d} |j| r|j| r| | f}|S|d k(rtj|}|rt|jdd}t|jdd}t|jdd}t|jd d} t|jd d} |j |rM|j |r<|j |||r)|j| r|j| r|||| | f}|S|d vr2tj|}|rt|jd f}|S)zParse the input value.Ndater rrrtimerrdatetime-local)numberranger)RE_DATEmatchr0grouprrrRE_MONTHRE_WEEKrRE_TIMErr RE_DATETIMERE_NUMfloat) r<ityperparsedmrrrrrrs r& parse_valuezInputs.parse_values =L F? e$A1776?B/AGGG,b1!''%."-$$T*s/A/A%/HSM]M]^bdiknMo"E3/FN Mg u%A1776?B/AGGG,b1$$T*s/A/A%/H"E]F@ ?f_ e$A1776?B/1776?B/$$T*s/@/@t/L"D\F2 1f_ e$A1776?B/aggi0"5$$T*s/C/CG/L"G_F$ #& &!!%(A1776?B/AGGG,b1!''%."-1776?B/aggi0"5%%d+0B0B50IcN^N^_cejloNp%%d+0D0DW0M"E3g>F  ) ) U#A 013 r(N)rr0rr0rr0r.r_)rr0rr0r.r_)rr0r.r_)rr0r.r_)rr0r.r_)rr0r.r_)rrrrr.ztuple[float, ...] | None) r1r2r3r4rrrrrrrrrr5r(r&rrs7$$%%    "" 44r(rcheZdZdZ d)dZd*dZd+dZd,dZd-dZd.dZ d/dZ d0d Z d1d Z d2d Z d3d Zd2d Zd4dZd5dZd6d7dZd5dZd5dZd8dZd9dZd:dZd:dZd;dZddZd:dZd:dZd?dZ d@dZ!dAd Z"d:d!Z#d:d"Z$dBd#Z%dCdDd$Z&dEd%Z'dFd&Z(d:d'Z)y()GCSSMatchzPerform CSS matching.c|j|||_g|_g|_g|_||_|in||_||_d|_|}|j|}|r|}|j|}|rd}|j|s|}n|j|D]}|}n||_ ||ur|n||_ |j||_|j!||_|j" xs |j|_y)r"NF)r>r=cached_meta_langcached_default_formscached_indeterminate_forms selectors namespacesflagsiframe_restrictrkrErwrjscoperhas_html_namespacerais_xmlrl) r$rrrrdocrmrjrs r&r'zCSSMatch.__init__s & "$&!*,'" * 2"  $%C__S)F{{3D..s3   #3.UD "&"2"24"8&&s+ ;;A$*A*A r(c6|jxs |jS)z3Check if namespaces are supported in the HTML type.)rrr+s r&supports_namespaceszCSSMatch.supports_namespacesCs{{5d555r(cld}||S|jr|j|}|r|}|St}|S)zGet tag namespace.r)r"rr)r$r\rrs r& get_tag_nszCSSMatch.get_tag_nsHsK :   # # %b!B !Ir(c2|j|tk(S)z"Check if tag is in HTML namespace.)r$rrgs r&rfzCSSMatch.is_html_tagWsr"h..r(cn|j|}|!|jstj|S|S)r)rrrrer$r\rds r&get_tagzCSSMatch.get_tag\s3  $#'#3DKKtzz$QTQr(cn|j|}|!|jstj|S|Sr)rrrre)r$r\rs r& get_prefixzCSSMatch.get_prefixbs4%%b)%+%7 tzz&!WQWWr(c |j|D]}|j|r}tjt j |j |ddd}|j|}|r|dvs|j|r|y|j|}||cS|j|r|D]D}tj|}|dvs|dk(rtjntjccSy)z%Get directionality from element text.dirrN)bdiscriptstyletextarearcALRLr4)rtr9DIR_MAPgetrrerr(rf find_bidirW unicodedata bidirectionalct SEL_DIR_LTR SEL_DIR_RTL)r$r\r directionrdrcbidis r&r7zCSSMatch.find_bidihs%%b) MD{{4 $KK 43M3MdTY[]3^(_aef ||D)d&VV((.)t,$ L%%d+ M"003++-1S[2>>bnnL M9 M@r(cd}tjd|j}|jd}|jjd}t |}t |}d}d} ||} || } |dk(r |dk(r| s| | k(ry| dk7r| | k7s | dk(r |dk(r| sd}|dz }| dz } |r>||kr9||} || } | sd}| | k(r|dz }nt | dk(rd}3| dz } |r||kr9|S#t $rd}YOwxYw)zFilter the language tags.Trrr*F) RE_WILD_STRIPsubresplitr* IndexError) r$ lang_rangelang_tagrrangessubtagslengthslengthrindexsindexrss r&extended_language_filterz!CSSMatch.extended_language_filtersU"&&sJ7==? !!#&.."((-Vg, 6N FO Q;7a<a1f HaQ#X'Q,qE! ! vA FOa! Q1 aKF58 1   s<C11 C?>C?cd}|jrd}|r#|jj|}||dk7ryd}|j|D]\}}|j ||\}} |N|j r||k(s7|j s0t j|t j|k(r|}|Sk| ||k7r|dk7rx|j s,t j|t j| k7rn|| k7r|}|S|S|j|D]5\}}t j|t j|k7r2|}|S|S)z3Match attribute name and return value if it exists.NrA)r"rr6rrrrre) r$r\attrrrrrrrrds r&match_attribute_namezCSSMatch.match_attribute_namesu  # # %E__((0:&C-,,R0 1#'"6"6r1"= 4:  4;;4::VZK[_c_i_ijk_lKl !, %$yVs]BFDJJt$ 4(88SW[_S_ A @ ,,R0 1::d#tzz!}4    r(cd}|j|}|jjd}|jdn$|jj|j}|j | ||k7rd}|S|j|jdk(r|rd}|S|jr|jdk7r |||k7rd}|S)z#Match the namespace of the element.TrFrA)r$rr6r)r$r\r=rrdefault_namespacetag_nss r&match_namespacezCSSMatch.match_namespacesOOB'  OO//3zz)t/B/B3::/N :: #4#@YRcEcE jj$r)9iE JJ JJ# 6>Y&5HE r(cPd}|r|D]}|j||j|j}|jr|jr |jn |j }|d}|St |tr|ndj|}||j|d}|S|S)zMatch attributes.TFr) rS attributerrxml_type_patternpatternr@rrr)r$r\ attributesratempr[rs r&match_attributeszCSSMatch.match_attributess  00Q[[!((K04 @R@R!,,XYXaXa<!E !+4 5388D>?]]5)1!E   r(c|js+|jtj|jn |j}|duxr||j |dfv S)zMatch tag name.NrA)rrdrrer()r$r\r=rds r& match_tagnamezCSSMatch.match_tagname"s[-1KKCHH4;O;OP  a[ ! !%5 5__R43G3G_HF,,VX> a[ ! ![ 0++B/G,,Wh?//8 a[ ! !%6 6++B/G4;;w/,,Wh? r(cd}|r |j}n |j}|||jD]}|j||}|s|S|S)zMatch future child.Fr)rrwrrh)r$rmrl recursiverchildrenrs r&match_future_childzCSSMatch.match_future_childSsb //H,,Hf0D0DE E((9E   r(c4d}t|dtjr|S|djtk(r|j ||d}|S|djt k(r|j ||}|S|djtk(r?|j|}|s*|r(|j||}|j|}|s|r(|S|djtk(r6|j|}|r#|j|r|j||}|S)zMatch future relationship.FrT) r@r:rerfREL_HAS_PARENTrrREL_HAS_CLOSE_PARENTREL_HAS_SIBLINGrrhREL_HAS_CLOSE_SIBLINGr9)r$r\rlrmrs r&match_future_relationszCSSMatch.match_future_relationsas hqk2?? 3L A;  > 1++B$?E a[ ! !%9 9++B9E a[ ! !_ 4''+G,,Wh?++G4 a[ ! !%: :''+G4;;w/,,Wh? r(cd}t|dtjs|dj|S|djj dr|j ||}|S|j ||}|S)z%Match relationship to other elements.Fr:)r@r:rerf startswithrxrn)r$r\rlrms r&match_relationszCSSMatch.match_relationsxsy hqk2?? 3x{7K7K7SL A;   * *3 ///H=E --b(;E r(cNd}|D]}||j|ddk7sd}|S|S)zMatch element's ID.TidrF)r)r$r\idsrmis r&match_idzCSSMatch.match_idsC AD..r4<<   r(cL|j|}d}|D] }||vsd}|S|S)zMatch element's classes.TF)r)r$r\rcurrent_classesrmr>s r& match_classeszCSSMatch.match_classessD**2. A'   r(c|j|}|rq|j|}|r^|\|j|s2|j|r|j s|j |rd}n|j|}|r|\|rq|j |}|r^|\|j|s2|j|r|j s|j |rd}n|j |}|r|\|S)zMatch element as root.F)rnrr9rYstriprMr)r$r\rnrs r& match_rootzCSSMatch.match_roots,,r" ''+Gg1KK(T-C-CG-LQXQ^Q^Q`MM'*#G"//8Gg1 mmB'Gg1KK(T-C-CG-LQXQ^Q^Q`MM'*#G"mmG4Gg1r(c|j|uS)zMatch element as scope.)rrgs r& match_scopezCSSMatch.match_scopeszzRr(c|j||j|k(xr#|j||j|k(S)z!Match tag type for `nth` matches.)r(r$)r$r\rs r&match_nth_tag_typezCSSMatch.match_nth_tag_typesB\\% DLL$4 4 < __U #tr': : r(cd}|D]Z}d}|jr|j||js|S|j|}|td|j |}|j }t |dz }|r|nd}d} |j} |j} |j} d} d}|rdnd}| r| | z| zn| x}}| rd}|dks||kDrm|dkr-d|z }||dk(rn[d}| |z } | r| | z| zn| x}}d|z }||k\r0n;||z }||dk(rn.d}| |z } | r| | z| zn| x}}||z }||k\rn|}|dkrg||kDrm| }| dkr"|dk\r| }| |z } | r| | z| zn| x}}|dk\rd}|} | r| | z| zn| x}}d|cxkr|dzkrnnd}|j|||dkD]}||z }t|tjs#|jr|j||jsL|jr|j||sk| dz } | |k(r ||urd}nn||usn||urn0|}| |z } | dkrn#| r| | z| zn| }||k(rnd|cxkr |dzkrn|rZ|S|S) zMatch `nth` elements.TFNr-rrry)rurv)rrhrkr r]r{r*r]bnrtr@rArGof_typer)r$r\nthmatchedrrmr{ last_indexr|relative_indexr]rvarcount count_incrfactoridxlast_idxadjustdiff_lowdiff diff_highlowestrs r& match_nthzCSSMatch.match_nths:] AG{{4#7#7AKK#Hvu__R(F~i)@)@)DE66DVqJ"&JAENAA##CEJRQF.1QY]q 8C(Agz!1Qw#$s7!-&A+!!#+:=UQ1Dh 3w8+!$'*$4 !-&B,!!"+:=UQ1Dh"Z/9,!$( +Agz!14q5(!&+:=UQ1Dh("$J25UQ1<hs,j1n,!..vUFUVJ.WEVOE%eSWW5 {{4+?+?q{{+S yy)@)@U)K "a'N%, B;&*G!{#$B;#19'*a%i!ms?=s,j1n,>}] |r(cd}|j|D]D}|j|rd}|S|j|s+tj |sAd}|S|S)z)Check if element is empty (if requested).TF)rtr9rY RE_NOT_EMPTYsearch)r$r\is_emptyrs r& match_emptyzCSSMatch.match_empty(so&&r* E{{5! ''.<3F3Fu3M  r(cBd}|D]}|j||rd}|S)zMatch selectors.TF)rh)r$r\rrsels r&match_subselectorszCSSMatch.match_subselectors5s4 C''C0  r(c.d}d}|D]}|G|jr|j||j}n|j||j}d}|jD]*}|jr|D] }||vsd}n|s!n ||vs(d}n|rd}|S)z"Match element if it contains text.TNrF)ownrrlrtext) r$r\containsrcontent contain_listrmrr>s r&match_containszCSSMatch.match_contains>s$ L##"//dll/KG"mmB$,,mGGE$)) ##$"19$(E!"w $ ) * r(c d}d}|j|d}|rB|@|j|dk(r|j|r|}n|j|d}|r|@|d}|jD]\}}||us d}||urd}n|s|j |dD]t}|j|} | dk(r|S| dvs!|j |dd} | s7t j| d k(sP|jj||f||urd}|S|S) Match default.FNTrform)inputbuttonr;rsubmit) rkr(rfrrrrrer) r$r\rrrm found_formftrrdrs r& match_defaultzCSSMatch.match_defaultZsOt4||F#v-$2B2B62J4@   J11 19!%JBw $  !55dd5K "E<<.Dv~ 22 66ufbIA(!: 55<.get_parent_formsD__R4_8F,<<'61d6F6Fv6N!D K % 4@>&DK,Kr(Trrr;radiocheckedr) r rrrrr(rrrer)r$r\rrdrrrrrrrrtag_nameis_radiocheckhas_namerrs` r&match_indeterminatezCSSMatch.match_indeterminatesC33B?@ r"  J:: 1a9d!%JDy $  !55dd5KE{ #||E2H7*#( %#($($8$8$? &DAq#zz!}64::a=G;S+/!%A&!8Q$Y+/!%A)!;(,'Eh?SXCY]aCa*. % &'( E//66dE7JK r(c Hd}|j}|j}|j}|}d}d} |s|j|} |j |D]\} } |j || \} }|r| r&|j stj| n| dk(s9|sH| rK| tk(sU|j s|tj|n|dk(s~| }n|} |j||j}|| }|j|}| }n|s|*|jr|jD]}||dus |d}||j r|r|r|jdk(rd}dD]V}d}|j||jD].}|j||k(s|j!|s*d }|}n|rVn|r%|"|D]}t#|t$j&r|j|d k(r|j!|rd}d}|j |D]\} } tj| d k(rtj| d k(rd }tj| d k(r| }|sU|sX|}|jj)t+t,|t+t,|fn|n|+|jj)t+t,|df|8|D]3}d}|D]%}|j/|t+t,|s$d }'|r2|S|S)zMatch languages.FNlangrrrhtml)rheadTmetaz http-equivzcontent-languagerr)r"rjrrrrrrreNS_XMLrkrlrrdrwr(rfr@rArGrr rrP)r$r\langsrhas_nsrjrrm found_langr{rrrattr_nsrRcachermr=rchild2c_langrpatternsr[s r& match_langzCSSMatch.match_langsR))+yy!44 **62K,,V4 1 $ 4 4VQ ?  K4;;djjm\]bh5h{w&7H15AQD)W[`ff"#J D__Vt||_DF~%)%5%5d%;").  $"7"7.. *58#!&qJ *  t{{7IdW[W`W`djWjE' !226T\\2RE||E*c1d6F6Fu6M $!&   +$F!&#''2t||F7Kv7UZ^ZjZjkqZr!&"&$($8$8$@&DAq#zz!} <ARdAd)-#zz!} 9*+%'-4 $ 5 5 < ST $%   r(c |tjzr|tjzry|j|sytj t jj|ddd}|dvr||k(Sj|}|r|tj|k(Sj|}|dk(}|dk(}|dk(}|r&t jj|d dnd} |r| d k(r|tj|k(S|r| d vs|r|d k(r|r,djfd j|dD} n!ttj|dd} | r_| D]G} tj | } | dvs| dk(rtjntj}||k(cStj|k(S|rtj|k(Sj#j%|d|S|r||d k(rPj'|}|||k(S|rtj|k(Sj#j%|d|Sj#j%|d|S)zCheck directionality.FNr,r)Nrrr0r-r;tel)rrrurlemailrc3FK|]}j|s|ywr)rY).0rr$s r& z%CSSMatch.match_dir..6s wZ^ZpZpquZvws!!Trrr1r4)r:r;r<rfr5r6rrerrnr(rrrr rr8r9 match_dirrkr7) r$r\directionalityr=rnrdis_input is_textareais_bdirrr>r?s ` r&rzCSSMatch.match_dirsl BNN *~/N :T--b1KK 4+E+Eb%QS+T UW[\ I %. .,,r" y(>>^3 3||B7?j( JR 455b&"EFXZ 9+<>>^3 3%#LLQ\bkopbpw1B1B2QU1B1VwwS$"<">$//"/"E~V V y(Y!^r*I$ N22~~77>>$//"/"E~V V~~doobDoA>RRr(c \d}tj|j|d}tj |t t |j|dd}tj |t t |j|dd}||ytj |t t |j|dd}|H|dvr|||krd}|s9|7||kDr2d}n/|d k(r*||||kDr ||kr||kDrd}n|||krd}|s |||kDrd}|tjzr| S|S) ac Match range. Behavior is modeled after what we see in browsers. Browsers seem to evaluate if the value is out of range, and if not, it is in range. So a missing value will not evaluate out of range; therefore, value is in range. Personally, I feel like this should evaluate as neither in or out of range. Fr;minNmaxr)rrrrrrTr) rrerrrr rr: SEL_IN_RANGE)r$r\ condition out_of_rangermnmxrs r& match_rangezCSSMatch.match_rangeQsD  455b&AB   tC1K1KBPUW[1\'] ^   tC1K1KBPUW[1\'] ^ :"*""5$sD4N4NrSZ\`4a*bc  VV>ebj#'L#52:#'L&>bnbrzebj'+ ~%"*'+ 'BNurz'+ #,r#><PLPr(c|j|}|duxr?|jddk(xs)|jddk7xs|j|duS)a Match defined. `:defined` is related to custom elements in a browser. - If the document is XML (not XHTML), all tags will match. - Tags that are not custom (don't have a hyphen) are marked defined. - If the tag has a prefix (without or without a namespace), it will not match. This is of course requires the parser to provide us with the proper prefix and namespace info, if it doesn't, there is nothing we can do. Nrryrz)r(findr*r's r& match_definedzCSSMatch.match_definedys_||B    #"$0 #"$0#4/  r(c8d}|j|}|dvrd}|S)z Match placeholder shown according to HTML spec. - text area should be checked if they have content. A single newline does not count as content. F)r T)r)r$r\rrs r&match_placeholder_shownz CSSMatch.match_placeholder_showns)--# j E r(cHd}|j}|j}|r,|j}|j}dti|_d|_|r |jr:|D]4}|}t |t jr!|j||js>|jt jzr|j|sm|jt jzr|j|s|jt jzr|j!|s|jt j"zr|j%|s|j'||j(s|jt j*zr|j-|sH|j.r|j1||j.sr|j2r|j5||j2s|j7||j8s|jt:zr%|j=||jt:zs|j>r|jA||j>s|jBr|jE||jBsF|jFr|jI||jFsp|jt jJzr|jM|s|jt jNzr|jQ|s|jtRzr%|jU||jtRzs|jVr|jY||jVs2| }n|r|_|_|S)z.Check if element matches one of the selectors.FrT)-is_notrlrrrr@r:rercr=r SEL_DEFINEDrSEL_ROOTr SEL_SCOPErSEL_PLACEHOLDER_SHOWNrrr SEL_EMPTYrrrrrr_r\RANGESrrrrrrlr| SEL_DEFAULTrSEL_INDETERMINATEr DIR_FLAGSrrr) r$r\rrrrlrrselectors r&rhzCSSMatch.match_selectorss!!## J"22O%x0DO#'D $,,%< h8~~b(,,7>>BNN24;M;Mb;Q>>BKK/8K>>BLL09I9I"9M>>B$<$<>BLL09I9I"9M<< b(,,(G##D,>,>r8CSCS,T,,R1D1DE>>F*43C3CBY_H_3`==X]])K%%d.E.Eb(J\J\.]$$T-A-A"hFWFW-X>>BNN24;M;Mb;Q>>B$8$88AYAYZ\A]>>I-dnnRZcIc6d$$T-@-@XEVEV-W" y< ~ (DO#2D  r(c#K|dkrdn|}|j|jD]'}|j|s|||dz}|dks'yyw)z&Match all tags under the targeted tag.rN)rr=r)r$limitlimrs r&selectzCSSMatch.selects\aidU--dhh7 Ezz%  ?1HCQw  s9AA AAc~|j}d}|,|*|j|r|}n|j|}||*|S)Match closest ancestor.N)r=rrk)r$currentclosests r&rzCSSMatch.closestsN((o'"5zz'"!//'2 o'"5 r(c|j|jDcgc]/}t|tjr|j |r|1c}Scc}w)zFilter tag's children.)rrr=r@rArGrr$r=s r&filterzCSSMatch.filter sK ,,TXX6 #sww'DJJsO    s4Ac|j| xr/|j|xr|j||jSzMatch.)rEr9rhrrgs r&rzCSSMatch.matchs<;;r?"ct{{2c4;O;OPRTXTbTb;ccr(N) rct.SelectorListrrrct.Namespaces | Nonerr0r.r/)r.r_)r\rr.rrrr)r\r-r.r)rFrrGrr.r_)r\r-rRrrrr.r)r\r-r=zct.SelectorTagr.r_)r\r-r\z tuple[ct.SelectorAttribute, ...]r.r_)r\r-r=zct.SelectorTag | Noner.r_)r\r-rlrr.r_r)rmr-rlrrpr_r.r_)r\r-rtuple[str, ...]r.r_)r\r-rr r.r_r)r\r-rr-r.r_)r\r-rztuple[ct.SelectorNth, ...]r.r_)r\r-rztuple[ct.SelectorList, ...]r.r_)r\r-rztuple[ct.SelectorContains, ...]r.r_)r\r-rztuple[ct.SelectorLang, ...]r.r_)r\rrr0r.r_)r\r-rr0r.r_)r\r-rrr.r_r)rr0r.r)r.r)r. list[bs4.Tag])*r1r2r3r4r'r"r$rfr(r*r7rPrSrWr_rarcrnrrrxr|rrrrrrrrrrrrrrrrrhrrrrr5r(r&rrs2'B"'B'B) 'B  'B  'BR6 / R X #J6p3 33 3 $ 3j*&  8 .  4  cJ 8&P<|Tl9Sv&QP . Rh   dr(rceZdZUdZded<ded<ded<ded <d ed <d Z dfd ZddZddZddZ ddZ dddZ dddZ ddZ e ZxZS) SoupSievez-Compiled Soup Sieve selector matching object.rr[rrrrzdict[str, str]customr0r)r[rrrr_hashc.t||||||y)r")r[rrrrN)superr')r$r[rrrr __class__s r&r'zSoupSieve.__init__%s& !  r(cxt|j||j|jj |Sr)rrrrrrs r&rzSoupSieve.match7s-T__djjIOOPSTTr(cvt|j||j|jj S)r)rrrrrrs r&rzSoupSieve.closest<s*T__djjIQQSSr(c$t|tjr:t|j||j |j jS|Dcgc],}tj|r|j|s+|.c}Scc}w)a Filter. `CSSMatch` can cache certain searches for tags of the same document, so if we are given a tag, all tags are from the same document, and we can take advantage of the optimization. Any other kind of iterable could have tags from different documents or detached tags, so for those, we use a new `CSSMatch` for each item in the iterable. ) r@rArGrrrrrrSr)r$iterablers r&rzSoupSieve.filterAsi h (DNNHdootzzRYY[ [%-mTX5Q5QRV5W\`\f\fgk\lDm mmsB 4B B c:|j|d}|r|dSdS)zSelect a single tag.r)rrN)r)r$r=rzs r& select_onezSoupSieve.select_oneRs'{{3a{(tAw(D(r(c8t|j||S)zSelect the specified tags.)listiselectr$r=rs r&rzSoupSieve.selectXsDLLe,--r(c#Kt|j||j|jj |Ed{y7w)zIterate the specified tags.N)rrrrrrs r&rzSoupSieve.iselect]s4DNNC$**MTTUZ[[[s?A AA c pd|jd|jd|jd|jd S)zRepresentation.zSoupSieve(pattern=z , namespaces=z , custom=z, flags=))r[rrrr+s r&__repr__zSoupSieve.__repr__bs@! 0 doo=PQkk_HTZZN! = r() r[rrrrrrzct.CustomSelectors | Nonerr0)r=r-r.r_)r=r-r.r)rzIterable[bs4.Tag]r.r r )r=r-rr0r.r )r=r-rr0r.r)r.r)r1r2r3r4__annotations__ __slots__r'rrrrrrr __str__ __classcell__)rs@r&r r s7 L$$  JRI  # )  *    $U T n") . \  Gr(r );r4 __future__rrrrrerr:r8rAtypingrr r r r r compilerrrgrirjrkrtrurvrwrrr;r<rrSEL_OUT_OF_RANGErr5r r r r rr rBrrrrrr DAYS_IN_WEEKr r7rr Immutabler pickle_registerr5r(r&r-s"  IIIrzz.) BJJ '    ) / NNR^^ + 2.. . >> >>   G H "**B C 2::B C "**A B "**S Tbjjk  =>      ""(^ ^ B ddN@d|@dF P Pf9r(