+
    i                    J   R t ^ RIHt ^ RIHt ^RIHt ^ RIt^RIHt ^ RI	t	^ RI
t
^ RIHtHtHtHtHtHtHt ]P$                  ! R4      t]P$                  ! R4      tR	tR
tRtRtRtRtRtRtRtRt]P>                  ]P@                  ,          t!]PD                  ]PF                  ,          t$R]P>                  R]P@                  R^ /t%]P$                  ! R4      t&]P$                  ! R4      t']P$                  ! R4      t(]P$                  ! R4      t)]P$                  ! R4      t*]P$                  ! R4      t+]P$                  ! R4      t,R't-^t.^t/^t0^t1^t2^t3 ! R R4      t4 ! R R 4      t5 ! R! R"4      t6 ! R# R$]54      t7 ! R% R&]Pp                  4      t9]Pt                  ! ]94       R# )(zCSS matcher.)annotations)datetime)utilN)	css_types)IteratorIterableAnyCallableSequencer   castz[^ 	
]z	[^ 	
]+ >~+z: z:>z:~z:+zhttp://www.w3.org/1999/xhtmlz$http://www.w3.org/XML/1998/namespaceltrrtlautoz0^(?P<value>-?(?:[0-9]{1,}(\.[0-9]+)?|\.[0-9]+))$z*^(?P<hour>[0-9]{2}):(?P<minutes>[0-9]{2})$z)^(?P<year>[0-9]{4,})-(?P<month>[0-9]{2})$z)^(?P<year>[0-9]{4,})-W(?P<week>[0-9]{2})$z;^(?P<year>[0-9]{4,})-(?P<month>[0-9]{2})-(?P<day>[0-9]{2})$zd^(?P<year>[0-9]{4,})-(?P<month>[0-9]{2})-(?P<day>[0-9]{2})T(?P<hour>[0-9]{2}):(?P<minutes>[0-9]{2})$z(?:(?:-\*-)(?:\*(?:-|$))*|-\*$)c                  2    ] tR t^;tRtR R ltR R ltRtR# )_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                    V ^8  d   QhRRRR/# )   elementbs4.TagreturnNone )formats   "\/Users/mibo/.openclaw/workspace/.venv-ak/lib/python3.14/site-packages/soupsieve/css_match.py__annotate___FakeParent.__annotate__D   s     " " "D "    c                    V.V n         R# )Initialize.Ncontents)selfr   s   &&r   __init___FakeParent.__init__D   s     !	r    c                   V ^8  d   QhRR/# )r   r   intr   )r   s   "r   r   r   I   s     " " "r    c                ,    \        V P                  4      # )zLength.)lenr$   r%   s   &r   __len___FakeParent.__len__I   s     4==!!r    r#   N)__name__
__module____qualname____firstlineno____doc__r&   r-   __static_attributes__r   r    r   r   r   ;   s    "
" "r    r   c                     ] tR t^OtRt]R R l4       t]R R l4       t]R R l4       t	]R R	 l4       t
]R
 R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       tR R ltR R ltRHR R lltRIR R  lltRJR! R" lltRHR# R$ lltRKR% R& lltRHR' R( llt]R) R* l4       t]R+ R, l4       t]R- R. l4       t]R/ R0 l4       t]RHR1 R2 ll4       t]RLR3 R4 ll4       t]RHR5 R6 ll4       t ]R7 R8 l4       t!]R9 R: l4       t"]R; R< l4       t#]RMR= R> ll4       t$]R? R@ l4       t%]RA RB l4       t&RHRC RD llt'RHRE RF llt(RGt)R# )N_DocumentNavz#Navigate a Beautiful Soup document.c                    V ^8  d   QhRRRR/# )r   tagr   r   r   r   )r   s   "r   r   _DocumentNav.__annotate__S   s     f fS fT fr    c                b    V P                  V4      '       g   \        R\        V4       24      hR# )z%Check if valid input tag or document.z:Expected a BeautifulSoup 'Tag', but instead received type N)is_tag	TypeErrortype)clsr8   s   &&r   assert_valid_input_DocumentNav.assert_valid_inputR   s1    
 zz#XY]^aYbXcdee r    c                    V ^8  d   QhRRRR/# r   objbs4.element.PageElement | Noner   boolr   )r   s   "r   r   r9   [   s     2 22 2t 2r    c                6    \        V \        P                  4      # )zIs `BeautifulSoup` object.)
isinstancebs4BeautifulSouprC   s   &r   is_doc_DocumentNav.is_docZ   s     #s0011r    c                    V ^8  d   QhRRRR/# rB   r   )r   s   "r   r   r9   `   s     ( (2 (t (r    c                6    \        V \        P                  4      # )zIs tag.)rG   rH   TagrJ   s   &r   r;   _DocumentNav.is_tag_   s     #sww''r    c                    V ^8  d   QhRRRR/# rB   r   )r   s   "r   r   r9   e   s     0 0: 0t 0r    c                6    \        V \        P                  4      # )zIs declaration.)rG   rH   DeclarationrJ   s   &r   is_declaration_DocumentNav.is_declarationd   s     #s//r    c                    V ^8  d   QhRRRR/# rB   r   )r   s   "r   r   r9   j   s     * *4 * *r    c                6    \        V \        P                  4      # )z	Is CDATA.)rG   rH   CDatarJ   s   &r   is_cdata_DocumentNav.is_cdatai   s     #syy))r    c                    V ^8  d   QhRRRR/# rB   r   )r   s   "r   r   r9   o   s     : :'E :$ :r    c                6    \        V \        P                  4      # )zIs processing instruction.)rG   rH   ProcessingInstructionrJ   s   &r   is_processing_instruction&_DocumentNav.is_processing_instructionn   s     #s8899r    c                    V ^8  d   QhRRRR/# rB   r   )r   s   "r   r   r9   t   s     < <!? <D <r    c                J    \        V \        P                  P                  4      # )zIs navigable string.)rG   rH   r   NavigableStringrJ   s   &r   is_navigable_string _DocumentNav.is_navigable_strings   s     #s{{::;;r    c                    V ^8  d   QhRRRR/# rB   r   )r   s   "r   r   r9   y   s     r r= r$ rr    c                    \        V \        P                  \        P                  \        P                  \        P
                  \        P                  34      # )zIs special string.)rG   rH   CommentrS   rX   r]   DoctyperJ   s   &r   is_special_string_DocumentNav.is_special_stringx   s5     #S__ciiIbIbdgdodopqqr    c                    V ^8  d   QhRRRR/# rB   r   )r   s   "r   r   r9   ~   s     O O$B Ot Or    c                `    V P                  V4      ;'       d    V P                  V4      '       * # )z Check if node is content string.)rc   ri   )r>   rC   s   &&r   is_content_string_DocumentNav.is_content_string}   s+     &&s+NNC4I4I#4N0NNr    c                    V ^8  d   QhRRRR/# )r   elr   r   r   r   )r   s   "r   r   r9      s      w ; r    c                    \        V 4      # )z'Create fake parent for a given element.)r   rp   s   &r   create_fake_parent_DocumentNav.create_fake_parent   s     2r    c                    V ^8  d   QhRRRR/# r   rp   bs4.Tag | Noner   rE   r   )r   s   "r   r   r9      s     3 3 34 3r    c                D    V RJ;'       d    \        V P                  4      # )z2Check if element (or document) is from a XML tree.N)rE   _is_xmlrr   s   &r   is_xml_tree_DocumentNav.is_xml_tree   s     ~22$rzz"22r    c                    V ^8  d   QhRRRR/# rv   r   )r   s   "r   r   r9      s     	
 	
N 	
t 	
r    c                    Vf   R# \        V P                  V4      '       d   VP                  M\        P                  ! VP                  4      R8H  ;'       d    V P                  V4      4      # )z Check if element is an `iframe`.Fiframe)rE   rz   namer   loweris_html_tagr%   rp   s   &&r   	is_iframe_DocumentNav.is_iframe   s\     :))"--bgg4::bgg3F8S ! !R 
 	
r    c                    V ^8  d   QhRRRR/# r   rp   r   r   rE   r   )r   s   "r   r   r9      s      ' d r    c                    V P                   ;'       d    V P                   VJ pV'       gC   V P                  V4      pVRJ;'       d&    V P                  ;'       d    V P                  V4      pV# )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_parentis_htmlr   )r%   rp   r   parents   &&  r   is_root_DocumentNav.is_root   sZ     yy,,TYY"___R(F%QQ$,,QQ4>>&;QDr    c               $    V ^8  d   QhRRRRRR/# )r   rp   rw   	no_iframerE   r   !Iterator[bs4.element.PageElement]r   )r   s   "r   r   r9      s"     ' '~ '$ 'Kl 'r    c              #     "   Ve8   V'       d   V P                  V4      '       g   VP                   Rj  xL
  R# R# R#  L
5i)z$Get contents or contents in reverse.N)r   r$   r%   rp   r   s   &&&r   get_contents_DocumentNav.get_contents   s7      >DNN2$6$6;;&& %7 &s   AAAA ANc          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r   rp   rw   start
int | NonereverserE   r   r   Iterator[bs4.Tag]r   )r   s   "r   r   r9      sC     	F 	F	F 	F 		F
 	F 
	Fr    c                *    V P                  WVRV4      # )zGet tag children.T)get_children)r%   rp   r   r   r   s   &&&&&r   get_tag_children_DocumentNav.get_tag_children   s       GT9EEr    c               0    V ^8  d   QhRRRRRRRRRRR	R
/# )r   rp   rw   r   r   r   rE   tagsr   r   r   r   )r   s   "r   r   r9      sF     # ## # 	#
 # # 
+#r    c              #    "   Ve   V'       d   V P                  V4      '       g   \        VP                  4      ^,
          pVf   V'       d   TM^ pMTpV'       d   RMV^,           pV'       d   RM^p	^ Tu;8:  d   V8:  dO   M R# Wx8w  dC   VP                  V,          p
Wy,          pV'       d   V P                  V
4      '       g   KB  V
x  KH  R# R# R# R# 5i)zGet children.N)r   r+   r$   r;   )r%   rp   r   r   r   r   lastindexendincrnodes   &&&&&&     r   r   _DocumentNav.get_children   s      >9DNN24F4Fr{{#a'D} 'Q"TAXC 2aDE!T!!l;;u-DME4;;t#4#4"
	 # " 5G>s(   CC'CCC0AC	Cc               $    V ^8  d   QhRRRRRR/# )r   rp   rw   r   rE   r   r   r   )r   s   "r   r   r9      s-     L LL L 
	Lr    c              #  J   "   V P                  VRVR7       Rj  xL
  R#  L5i)z!Specifically get tag descendants.T)r   r   N)get_descendantsr   s   &&&r   get_tag_descendants _DocumentNav.get_tag_descendants   s"      '''KKKs   #!#c               (    V ^8  d   QhRRRRRRRR/# )r   rp   rw   r   rE   r   r   r   r   )r   s   "r   r   r9      s2     "  " "  "  	" 
 
+" r    c              #  B  "   VEe   V'       d   V P                  V4      '       g   RpVP                   F  pVe
   WTJd   K  Rp\        V\        P                  4      '       d   V'       d   V P                  V4      '       d~   VP
                  e   VP
                  pMUTp\        V\        P                  4      '       d(   VP                  '       d   VP                  R,          pKG  VP                  pVx  Vf    R# K  Vx  K  V'       d   K  Vx  K  	  R# R# R# 5i)zGet descendants.Nr   )r   descendantsrG   rH   rO   next_siblingr$   next_element)r%   rp   r   r   	next_goodchild
last_childs   &&&&   r   r   _DocumentNav.get_descendants   s      >9DNN24F4FI(-  $IeSWW-- T^^E%:%: --9(-(:(:I).J",Z"A"AjFYFYFY-7-@-@-D
(2(?(?I#$,! KK1 ( 5G>s)   DDAD-DAD9DDc               $    V ^8  d   QhRRRRRR/# )r   rp   rw   r   rE   r   r   )r   s   "r   r   r9     s!      ^   r    c                t    Ve   VP                   MRpV'       d   Ve   V P                  V4      '       d   RpV# )zGet parent.N)r   r   )r%   rp   r   r   s   &&& r   r   _DocumentNav.get_parent  s3     !n$+v0F0FFr    c                    V ^8  d   QhRRRR/# r   rp   rw   r   
str | Noner   )r   s   "r   r   r9   
  s     3 3 3J 3r    c                &    V e   V P                   # R# )Get tag.N)r   rr   s   &r   get_tag_name_DocumentNav.get_tag_name	  s     .rww2d2r    c                    V ^8  d   QhRRRR/# r   rp   r   r   r   r   )r   s   "r   r   r9     s      G 
 r    c                    V P                   # zGet prefix.)prefixrr   s   &r   get_prefix_name_DocumentNav.get_prefix_name  s     yyr    c                    V ^8  d   QhRRRR/# r   r   )r   s   "r   r   r9     s     8 8N 8z 8r    c                &    V e   V P                   # R# )zGet namespace `URI`.N)	namespacerr   s   &r   get_uri_DocumentNav.get_uri  s      "~r||747r    c                    V ^8  d   QhRRRR/# r   rp   r   r   rw   r   )r   s   "r   r   r9     s     + +g +. +r    c                (    V P                  VRR7      # )Get next sibling tag.T)r   )get_next)r>   rp   s   &&r   get_next_tag_DocumentNav.get_next_tag  s     ||BT|**r    c               $    V ^8  d   QhRRRRRR/# r   rp   r   r   rE   r   rD   r   )r   s   "r   r   r9   "  s"     
 
' 
 
:X 
r    c                    VP                   pV'       d3   \        V\        P                  4      '       g   Ve   VP                   pK:  V'       d#   \        V\        P                  4      '       g   RpV# )r   N)r   rG   rH   rO   r>   rp   r   siblings   &&& r   r   _DocumentNav.get_next!  sM     //:gsww77G<O**G
7CGG44Gr    c               $    V ^8  d   QhRRRRRR/# )r   rp   r   r   rE   r   rw   r   )r   s   "r   r   r9   /  s!     * *' * * *r    c                &    V P                  VR4      # )Get previous sibling tag.T)get_previous)r>   rp   r   s   &&&r   get_previous_tag_DocumentNav.get_previous_tag.  s     D))r    c               $    V ^8  d   QhRRRRRR/# r   r   )r   s   "r   r   r9   5  s"     
 
g 
T 
>\ 
r    c                    VP                   pV'       d3   \        V\        P                  4      '       g   Ve   VP                   pK:  V'       d#   \        V\        P                  4      '       g   RpV# )r   N)previous_siblingrG   rH   rO   r   s   &&& r   r   _DocumentNav.get_previous4  sO     %%:gsww77G<O..G
7CGG44Gr    c                    V ^8  d   QhRRRR/# rv   r   )r   s   "r   r   r9   B  s     	+ 	+ 	+4 	+r    c                ^    V e   \        V R4      MRp\        T;'       d
    V\        8H  4      # )z
Check if element has an HTML namespace.

This is a bit different than whether a element is treated as having an HTML namespace,
like we do in the case of `is_html_tag`.
Nr   )getattrrE   NS_XHTML)rp   nss   & r   has_html_ns_DocumentNav.has_html_nsA  s-     *,WR%TB))2>**r    c               $    V ^8  d   QhRRRRRR/# )r   rp   rw   	attr_namestrr   ztuple[str | None, str | None]r   )r   s   "r   r   r9   N  s'     W WN Ws W?\ Wr    c                B    V f   R# \        VRR4      \        VRR4      3# )z7Return namespace and attribute name without the prefix.Nr   r   )NN)r   )rp   r   s   &&r   split_namespace_DocumentNav.split_namespaceM  s-     :y+t4giQU6VVVr    c                    V ^8  d   QhRRRR/# )r   valuer   r   zstr | Sequence[str]r   )r   s   "r   r   r9   W  s      C ,? r    c           	        Vf   R# \        V\        4      '       d   V# \        V\        4      '       d   VP                  R4      # \        V\        4      '       d   . pV F  p\        V\        \        34      '       g3   \        V\        4      '       d   VP                  \        V4      4       KQ  VP                  \        \        V P                  V4      4      4       K  	  V# \        V4      # )z6Normalize the value to be a string or list of strings. utf8)rG   r   bytesdecoder
   appendr   normalize_value)r>   r   	new_valuevs   &&  r   r   _DocumentNav.normalize_valueV  s    
 = uc""L eU##<<'' eX&&I!!c5\22z!X7N7N $$SV, $$T#s/B/B1/E%FG   5zr    c               (    V ^8  d   QhRRRRRRRR/# )r   rp   r   r   r   defaultstr | Sequence[str] | Noner   r   )r   s   "r   r   r9   x  s2        ,	
 
$r    c                @   TpVP                   '       d&    V P                  VP                  V,          4      pV# VP                  P	                  4        F4  w  rV\
        P                  ! V4      V8X  g   K"  V P                  V4      p V# 	  V#   \         d     T# i ; i)zGet attribute by name.)ry   r   attrsKeyErroritemsr   r   )r>   rp   r   r   r   kr   s   &&&&   r   get_attribute_by_name"_DocumentNav.get_attribute_by_namew  s     :::++BHHTN; 	 (::a=D(//2E	 )    s   "B BBc                    V ^8  d   QhRRRR/# )r   rp   rw   r   z0Iterator[tuple[str, str | Sequence[str] | None]]r   )r   s   "r   r   r9     s     0 0 04d 0r    c              #     "   Ve:   VP                   P                  4        F  w  r#W P                  V4      3x  K  	  R# R# 5i)zIterate attributes.N)r   r  r   )r>   rp   r  r   s   &&  r   iter_attributes_DocumentNav.iter_attributes  s<      >(,,Q/// ) s   A Ac                    V ^8  d   QhRRRR/# )r   rp   r   r   zSequence[str]r   )r   s   "r   r   r9     s     , ,W , ,r    c                    V P                  VR. 4      p\        V\        4      '       d   \        P	                  V4      p\        \        \        ,          V4      # )zGet classes.class)r  rG   r   	RE_NOT_WSfindallr   r
   )r>   rp   classess   && r   get_classes_DocumentNav.get_classes  sF     ++B<gs##''0GHSM7++r    c               $    V ^8  d   QhRRRRRR/# )r   rp   r   r   rE   r   r   r   )r   s   "r   r   r9     s!     
 
7 
t 
 
r    c                    RP                  V P                  WR7       Uu. uF  pV P                  V4      '       g   K  VNK   	  up4      # u upi )z	Get text.r   r   )joinr   rm   r%   rp   r   r   s   &&& r   get_text_DocumentNav.get_text  sS     ww!%!5!5b!5!N!N))$/ !N
 	
s
   AAc               $    V ^8  d   QhRRRRRR/# )r   rp   r   r   rE   r   z	list[str]r   )r   s   "r   r   r9     s!     
 
w 
4 
I 
r    c                    V P                  WR7       Uu. uF  q0P                  V4      '       g   K  VNK  	  up# u upi )zGet Own Text.r  )r   rm   r  s   &&& r   get_own_text_DocumentNav.get_own_text  sB     "..r.G
GTKaKabfKgDDG
 	
 
s   ;;r   F)NFF)NFFF)FF)TN)*r/   r0   r1   r2   r3   classmethodr?   staticmethodrK   r;   rT   rY   r^   rc   ri   rm   rs   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r4   r   r    r   r6   r6   O   s&   -f f 2 2 ( ( 0 0 * * : : < < r r O O
  
 3 3
	
'	F#4L" H 3 3
  
 8 8
 + +
 
 
 * *
 
 
 	+ 	+ W W  @  * 0 0 , ,

 
r    r6   c                      ] tR tRtRt]R R l4       t]R R l4       t]R R l4       t]R	 R
 l4       t	]R R l4       t
]R R l4       t]R R l4       tRtR# )Inputsi  z-Class for parsing and validating input items.c               (    V ^8  d   QhRRRRRRRR/# )r   yearr)   monthdayr   rE   r   )r   s   "r   r   Inputs.__annotate__  s(     $ $3 $s $ $ $r    c                    \         pV\        8X  d8   V ^,          ^ 8X  d   V ^d,          ^ 8w  g   V R,          ^ 8X  d   \        M\        pMV\        9   d   \
        p^Tu;8*  ;'       d    V8*  # u # )zValidate day.i  )
LONG_MONTHFEBFEB_LEAP_MONTH	FEB_MONTH	MONTHS_30SHORT_MONTH)r$  r%  r&  max_dayss   &&& r   validate_dayInputs.validate_day  sa     C<+/!8q=tczQUY\_U_cdUd~ktHi"HC##8####r    c               $    V ^8  d   QhRRRRRR/# )r   r$  r)   weekr   rE   r   )r   s   "r   r   r'    s!     % %C %s %t %r    c                r    \        V ^^4      P                  4       ^,          p^Tu;8*  ;'       d    V8*  # u # )zValidate week.)r   isocalendar)r$  r3  max_weeks   && r   validate_weekInputs.validate_week  s9     D"b)557:D$$H$$$$r    c                    V ^8  d   QhRRRR/# )r   r%  r)   r   rE   r   )r   s   "r   r   r'    s        c  d  r    c                .    ^T u;8*  ;'       d    ^8*  # u # )zValidate month.r   )r%  s   &r   validate_monthInputs.validate_month  s     ERr    c                    V ^8  d   QhRRRR/# )r   r$  r)   r   rE   r   )r   s   "r   r   r'    s      C D r    c                    ^V 8*  # )zValidate year.r   )r$  s   &r   validate_yearInputs.validate_year  s     Dyr    c                    V ^8  d   QhRRRR/# )r   hourr)   r   rE   r   )r   s   "r   r   r'    s      C D r    c                .    ^ T u;8*  ;'       d    ^8*  # u # )zValidate hour.r   )rB  s   &r   validate_hourInputs.validate_hour  s     DBr    c                    V ^8  d   QhRRRR/# )r   minutesr)   r   rE   r   )r   s   "r   r   r'    s     " "# "$ "r    c                .    ^ T u;8*  ;'       d    ^;8*  # u # )zValidate minutes.r   )rG  s   &r   validate_minutesInputs.validate_minutes  s     G!!r!!!!r    c               $    V ^8  d   QhRRRRRR/# )r   ityper   r   r   r   ztuple[float, ...] | Noner   )r   s   "r   r   r'    s"     4 4 4J 4;S 4r    c                   RpVf   V# VR8X  d   \         P                  V4      pV'       d   \        VP                  R4      ^
4      p\        VP                  R4      ^
4      p\        VP                  R4      ^
4      pV P	                  V4      '       d4   V P                  V4      '       d   V P                  WVV4      '       d   WVV3pV# VR8X  d   \        P                  V4      pV'       dh   \        VP                  R4      ^
4      p\        VP                  R4      ^
4      pV P	                  V4      '       d   V P                  V4      '       d   WV3pV# VR8X  d   \        P                  V4      pV'       dh   \        VP                  R4      ^
4      p\        VP                  R4      ^
4      pV P	                  V4      '       d   V P                  WX4      '       d   WX3pV# VR8X  d   \        P                  V4      pV'       dh   \        VP                  R4      ^
4      p	\        VP                  R	4      ^
4      p
V P                  V	4      '       d   V P                  V
4      '       d   W3pV# VR
8X  Ed!   \        P                  V4      pV'       Ed   \        VP                  R4      ^
4      p\        VP                  R4      ^
4      p\        VP                  R4      ^
4      p\        VP                  R4      ^
4      p	\        VP                  R	4      ^
4      p
V P	                  V4      '       dc   V P                  V4      '       dL   V P                  WVV4      '       d4   V P                  V	4      '       d   V P                  V
4      '       d   WVWyV
3pV# VR9   d9   \        P                  V4      pV'       d   \        VP                  R4      4      3pV# )zParse the input value.Ndater$  r%  r&  r3  timerB  rG  datetime-localr   )numberrange)RE_DATEmatchr)   groupr?  r;  r0  RE_MONTHRE_WEEKr7  RE_TIMErD  rI  RE_DATETIMERE_NUMfloat)r>   rL  r   parsedmr$  r%  r&  r3  rB  rG  s   &&&        r   parse_valueInputs.parse_value  s-    =LF?e$A1776?B/AGGG,b1!''%."-$$T**s/A/A%/H/HSM]M]^bknMoMo"3/FN M gu%A1776?B/AGGG,b1$$T**s/A/A%/H/H"]F@ ? f_e$A1776?B/1776?B/$$T**s/@/@/L/L"\F2 1 f_e$A1776?B/aggi0"5$$T**s/C/CG/L/L"_F$ # &&!!%(Aq1776?B/AGGG,b1!''%."-1776?B/aggi0"5%%d++0B0B50I0IcN^N^_cloNpNp%%d++0D0DW0M0M"3g>F
 	 ))U#A 013r    r   N)r/   r0   r1   r2   r3   r   r0  r7  r;  r?  rD  rI  r  r^  r4   r   r    r   r"  r"    s    7$ $ % %"    
  
  
 " "
 4 4r    r"  c                     ] tR tRtRtR R ltR R ltR R ltR	 R
 ltR R lt	R R lt
R R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltRQR R  lltR! R" ltR# R$ ltR% R& ltR' R( ltR) R* ltR+ R, ltR- R. ltR/ R0 ltR1 R2 ltR3 R4 ltR5 R6 ltR7 R8 ltR9 R: lt R; R< lt!R= R> lt"R? R@ lt#RA RB lt$RC RD lt%RE RF lt&RRRG RH llt'RI RJ lt(RK RL lt)RM RN lt*ROt+RP# )SCSSMatchi   zPerform CSS matching.c          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )r   	selectorsct.SelectorListscoperw   
namespacesct.Namespaces | Noneflagsr)   r   r   r   )r   s   "r   r   CSSMatch.__annotate__#  sC     'B 'B"'B 'B )	'B
 'B 
'Br    c                >   V P                  V4       W n        . V n        . V n        . V n        Wn        Vf   / MTV n        W@n        RV n        TpV P                  V4      pV'       d   TpV P                  V4      pK  RpV P                  V4      '       g   TpMV P                  V4       F  pTp M	  Wpn        W%Jd   TMTV n        V P                  V4      V n        V P!                  V4      V n        V P"                  '       * ;'       g    V P                  V n        R# )r"   NF)r?   r8   cached_meta_langcached_default_formscached_indeterminate_formsrc  rf  rh  iframe_restrictr   rK   r   r   re  r   has_html_namespacerz   is_xmlr   )	r%   rc  re  rf  rh  docr   r   r   s	   &&&&&    r   r&   CSSMatch.__init__#  s    	& "$&!*,'" * 2"

$ %C__S)F{{3D..s3 4 	#.UD
"&"2"24"8 &&s+;;AA$*A*Ar    c                   V ^8  d   QhRR/# )r   r   rE   r   )r   s   "r   r   ri  L  s     6 6T 6r    c                B    V P                   ;'       g    V P                  # )z3Check if namespaces are supported in the HTML type.)rp  ro  r,   s   &r   supports_namespacesCSSMatch.supports_namespacesL  s     {{55d555r    c                    V ^8  d   QhRRRR/# )r   rp   rw   r   r   r   )r   s   "r   r   ri  Q  s      ^  r    c                    RpVf   V# V P                  4       '       d   V P                  V4      pV'       d   TpV# \        pV# )zGet tag namespace.r   )ru  r   r   )r%   rp   r   r   s   &&  r   
get_tag_nsCSSMatch.get_tag_nsQ  sN     	:##%%b!B	  !Ir    c                    V ^8  d   QhRRRR/# rv   r   )r   s   "r   r   ri  `  s     / /n / /r    c                2    V P                  V4      \        8H  # )z"Check if tag is in HTML namespace.)ry  r   r   s   &&r   r   CSSMatch.is_html_tag`  s     r"h..r    c                    V ^8  d   QhRRRR/# r   r   )r   s   "r   r   ri  e  s     R R. RZ Rr    c                    V P                  V4      pVe)   V P                  '       g   \        P                  ! V4      # T# )r   )r   rp  r   r   r%   rp   r   s   && r   get_tagCSSMatch.get_tage  s5       $#'#3DKKKtzz$QTQr    c                    V ^8  d   QhRRRR/# r   r   )r   s   "r   r   ri  k  s     X XW X Xr    c                    V P                  V4      pVe)   V P                  '       g   \        P                  ! V4      # T# r   )r   rp  r   r   )r%   rp   r   s   && r   
get_prefixCSSMatch.get_prefixk  s6     %%b)%+%7tzz&!WQWWr    c                    V ^8  d   QhRRRR/# )r   rp   r   r   r   r   )r   s   "r   r   ri  q  s     # #G #
 #r    c           
     b   V P                  V4       EF  pV P                  V4      '       d   \        P                  \        P
                  ! V P                  VRR4      4      R4      pV P                  V4      pV'       d   VR9   g   V P                  V4      '       d   Ve   K  V P                  V4      pVe   Vu # K  V P                  V4      '       d   K  V FK  p\        P                  ! V4      pVR9   g   K"  VR8X  d   \        P                  M\        P                  u u # 	  EK  	  R# )z%Get directionality from element text.dirr   NL)bdiscriptstyletextarear~   ALRr  )r   r;   DIR_MAPgetr   r   r  r  r   	find_bidiri   unicodedatabidirectionalctSEL_DIR_LTRSEL_DIR_RTL)r%   rp   r   	directionr   r   cbidis   &&      r   r  CSSMatch.find_bidiq  s    %%b)D {{4   $KK

43M3MdTY[]3^(_aef	||D)d&VV((..) t,$ L  %%d++ "003++-1S[2>>bnnL 9 *@ r    c               $    V ^8  d   QhRRRRRR/# )r   
lang_ranger   lang_tagr   rE   r   )r   s   "r   r   ri    s!     6 63 6# 6$ 6r    c                   Rp\         P                  RV4      P                  4       pVP                  R4      pVP                  4       P                  R4      p\	        V4      p\	        V4      p^ p^ p	WH,          p
WY,          pV^8X  d   V^8X  d   V
'       g	   W8X  d   R# V
R8w  d   W8w  g   V
R8X  d   V^8X  d   V'       g   RpV^,          pV	^,          p	V'       dS   W8  dM   WH,          p
 WY,          pT
'       g   RpK+  Y8X  d   T^,          pM\	        T4      ^8X  d   RpKO  T	^,          p	KZ  V#   \
         d    Rp Kl  i ; i)zFilter the language tags.T-*F)RE_WILD_STRIPsubr   splitr+   
IndexError)r%   r  r  rT  rangessubtagslengthslengthrindexsindexrss   &&&         r   extended_language_filter!CSSMatch.extended_language_filter  s8    "&&sJ7==?
!!#&.."((-Vg,NO Q;7a<af HQ#X'Q,qE!! AO  ! Q1 aKF1   	s   -D2 2EEc               (    V ^8  d   QhRRRRRRRR/# )	r   rp   r   attrr   r   r   r   r   r   )r   s   "r   r   ri    s2     3 33 3 	3
 
$3r    c                &   RpV P                  4       '       Ed*   RpV'       d*   V P                  P                  V4      pVf
   VR8w  d   R# MRpV P                  V4       F  w  rgV P	                  W4      w  rVfa   V P
                  '       d   W&8X  gB   V P
                  '       g5   \        P                  ! V4      \        P                  ! V4      8X  d   Tp V# K|  Ve   WX8w  d
   VR8w  d   K  V P
                  '       g1   \        P                  ! V4      \        P                  ! V	4      8w  d
   MW)8w  d   K  Tp V# 	   V# V P                  V4       F9  w  rg\        P                  ! V4      \        P                  ! V4      8w  d   K6  Tp V# 	  V# )z3Match attribute name and return value if it exists.Nr  )ru  rf  r  r  r   rp  r   r   )
r%   rp   r  r   r   r   r  r   r   r   s
   &&&&      r   match_attribute_nameCSSMatch.match_attribute_name  sf    ##%%E__((0:&C-,,R0 #'"6"6r"=	 :	4;;;4::VZK[_c_i_ijk_lKl !, %  $Vs] BFDJJt$

4(88SWS_ A 1@  ,,R0::d#tzz!}4 1
 r    c               $    V ^8  d   QhRRRRRR/# r   rp   r   r8   zct.SelectorTagr   rE   r   )r   s   "r   r   ri    s!      '  4 r    c                   RpV P                  V4      pV P                  P                  R4      pVP                  f   RM$V P                  P                  VP                  4      pVP                  f   Ve   WE8w  d   RpV# VP                  e   VP                  R8X  d   V'       d   RpV# VP                  '       d   VP                  R8w  d   Ve   WF8w  d   RpV# )z#Match the namespace of the element.Tr   Fr  )ry  rf  r  r   )r%   rp   r8   rT  r   default_namespacetag_nss   &&&    r   match_namespaceCSSMatch.match_namespace  s     OOB'	 OO//3zz)t/B/B3::/N::#4#@YEcE  jj$r)9iE 	 JJJJJ#6>Y5HEr    c               $    V ^8  d   QhRRRRRR/# )r   rp   r   
attributesz tuple[ct.SelectorAttribute, ...]r   rE   r   )r   s   "r   r   ri    s#      7 8X ]a r    c                   RpV'       d   V F  pV P                  WP                  VP                  4      pV P                  '       d   VP                  '       d   VP                  MVP
                  pVf   Rp V# \        V\        4      '       d   TMRP                  V4      pVf   K  VP                  V4      e   K  Rp V# 	  V# )zMatch attributes.TFr   )
r  	attributer   rp  xml_type_patternpatternrG   r   r  rT  )r%   rp   r  rT  atempr  r   s   &&&     r   match_attributesCSSMatch.match_attributes  s     00[[!((K04@R@R@R!,,XYXaXa<!E  !+4 5 5388D>?]]5)1!E   r    c               $    V ^8  d   QhRRRRRR/# r  r   )r   s   "r   r   ri  +  s!     
 
 
n 
 
r    c                    V P                   '       g/   VP                  e!   \        P                  ! VP                  4      MVP                  pVRJ;'       d    W0P	                  V4      R39  '       * # )zMatch tag name.Nr  )rp  r   r   r   r  )r%   rp   r8   r   s   &&& r   match_tagnameCSSMatch.match_tagname+  s`     -1KKKCHH<P

388$VYV^V^ 0 0b)3//
 	
r    c               $    V ^8  d   QhRRRRRR/# )r   rp   r   r8   zct.SelectorTag | Noner   rE   r   )r   s   "r   r   ri  4  s"     
 
G 
*? 
D 
r    c                v    RpVe3   V P                  W4      '       g   RpV P                  W4      '       g   RpV# )zMatch the tag.TF)r  r  )r%   rp   r8   rT  s   &&& r   	match_tagCSSMatch.match_tag4  s?     ?''00%%b..r    c               $    V ^8  d   QhRRRRRR/# r   rp   r   relationrd  r   rE   r   )r   s   "r   r   ri  @  s!      w / d r    c                t   Rp\        V^ ,          \        P                  4      '       d   V# V^ ,          P                  \        8X  d^   V P                  WP                  R7      pV'       g8   V'       d0   V P                  WB4      pV P                  W@P                  R7      pK?  V# V^ ,          P                  \        8X  d8   V P                  WP                  R7      pV'       d   V P                  WB4      pV# V^ ,          P                  \        8X  dH   V P                  V4      pV'       g-   V'       d%   V P                  WR4      pV P                  V4      pK4  V# V^ ,          P                  \        8X  dB   V P                  V4      pV'       d)   V P                  V4      '       d   V P                  WR4      pV# )zMatch past relationship.Fr  )rG   r  SelectorNullrel_type
REL_PARENTr   rn  match_selectorsREL_CLOSE_PARENTREL_SIBLINGr   REL_CLOSE_SIBLINGr;   )r%   rp   r  foundr   r   s   &&&   r   match_past_relationsCSSMatch.match_past_relations@  s]    hqk2??33LA;:-__R3G3G_HF,,V>;O;OP  a[!!%55__R3G3G_HF,,V>  a[!![0++B/G,,W?//8
 	 a[!!%66++B/G4;;w//,,W?r    c               (    V ^8  d   QhRRRRRRRR/# )r   r   r   r  rd  	recursiverE   r   r   )r   s   "r   r   ri  \  s*       O X\ im r    c                    RpV'       d   V P                   pMV P                  pV! WP                  R7       F  pV P                  Wb4      pV'       g   K   V# 	  V# )zMatch future child.Fr  )r   r   rn  r  )r%   r   r  r  rT  childrenr   s   &&&&   r   match_future_childCSSMatch.match_future_child\  s\     //H,,Hf0D0DEE((9Eu	 F r    c               $    V ^8  d   QhRRRRRR/# r  r   )r   s   "r   r   ri  j  s"       O PT r    c                   Rp\        V^ ,          \        P                  4      '       d   V# V^ ,          P                  \        8X  d   V P                  WR4      pV# V^ ,          P                  \        8X  d   V P                  W4      pV# V^ ,          P                  \        8X  dH   V P                  V4      pV'       g-   V'       d%   V P                  WB4      pV P                  V4      pK4  V# V^ ,          P                  \        8X  dB   V P                  V4      pV'       d)   V P                  V4      '       d   V P                  WB4      pV# )zMatch future relationship.FT)rG   r  r  r  REL_HAS_PARENTr  REL_HAS_CLOSE_PARENTREL_HAS_SIBLINGr   r  REL_HAS_CLOSE_SIBLINGr;   )r%   rp   r  r  r   s   &&&  r   match_future_relationsCSSMatch.match_future_relationsj  s    hqk2??33LA;>1++B$?E  a[!!%99++B9E  a[!!_4''+G,,W?++G4
 	 a[!!%::''+G4;;w//,,W?r    c               $    V ^8  d   QhRRRRRR/# r  r   )r   s   "r   r   ri    s!      ' _  r    c                   Rp\        V^ ,          \        P                  4      '       g   V^ ,          P                  f   V# V^ ,          P                  P	                  R4      '       d   V P                  W4      pV# V P                  W4      pV# )z%Match relationship to other elements.F:)rG   r  r  r  
startswithr  r  )r%   rp   r  r  s   &&& r   match_relationsCSSMatch.match_relations  s{     hqk2??33x{7K7K7SLA;**3////=E  --b;Er    c               $    V ^8  d   QhRRRRRR/# )r   rp   r   idstuple[str, ...]r   rE   r   )r   s   "r   r   ri    s!      7  T r    c                T    RpV F  pW@P                  VRR4      8w  g   K  Rp V# 	  V# )zMatch element's ID.Tidr   F)r  )r%   rp   r  r  is   &&&  r   match_idCSSMatch.match_id  s<     A..r4<<	  r    c               $    V ^8  d   QhRRRRRR/# )r   rp   r   r  r  r   rE   r   )r   s   "r   r   ri    s!     	 	 	/ 	d 	r    c                T    V P                  V4      pRpV F  pWS9  g   K  Rp V# 	  V# )zMatch element's classes.TF)r  )r%   rp   r  current_classesr  r  s   &&&   r   match_classesCSSMatch.match_classes  s=     **2.A'	  r    c                    V ^8  d   QhRRRR/# r   r   )r   s   "r   r   ri    s      W  r    c                   V P                  V4      pV'       d   V P                  V4      pV'       dw   Ves   V P                  V4      '       gE   V P                  V4      '       d   VP	                  4       '       g   V P                  V4      '       d   RpKk  V P                  V4      pK~  V'       d   V P                  V4      pV'       dw   Ves   V P                  V4      '       gE   V P                  V4      '       d   VP	                  4       '       g   V P                  V4      '       d   RpKk  V P                  V4      pK~  V# )zMatch element as root.F)r   r   r;   rm   striprY   r   )r%   rp   r   r   s   &&  r   
match_rootCSSMatch.match_root  s     ,,r"''+Gg1KK((T-C-CG-L-LQXQ^Q^Q`Q`MM'**#G"//8GmmB'Gg1KK((T-C-CG-L-LQXQ^Q^Q`Q`MM'**#G"mmG4Gr    c                    V ^8  d   QhRRRR/# r   r   )r   s   "r   r   ri    s        g  $  r    c                    V P                   VJ # )zMatch element as scope.)re  r   s   &&r   match_scopeCSSMatch.match_scope  s     zzRr    c               $    V ^8  d   QhRRRRRR/# )r   rp   r   r   r   rE   r   )r   s   "r   r   ri    s!     
 
W 
W 
 
r    c                    V P                  V4      V P                  V4      8H  ;'       d$    V P                  V4      V P                  V4      8H  # )z!Match tag type for `nth` matches.)r  ry  )r%   rp   r   s   &&&r   match_nth_tag_typeCSSMatch.match_nth_tag_type  sG     \\% DLL$44 < <__U#tr'::	
r    c               $    V ^8  d   QhRRRRRR/# )r   rp   r   nthztuple[ct.SelectorNth, ...]r   rE   r   )r   s   "r   r   ri    s'     c cG c*D c cr    c                l   RpV EF*  pRpVP                   '       d%   V P                  WP                   4      '       g    V# V P                  V4      pVf   \        RV P	                  V4      4      pVP
                  p\        V4      ^,
          pV'       d   TM^ p^ p	VP                  p
VP                  pVP                  p^ p^pV'       d   RM^pV'       d   W,          V,           MT
;ppV'       Ed
   RpV^8  g   VV8  d   V^ 8  dN   ^ V,
          pVe	   V^8X  d   MRpW,          pV'       d   W,          V,           MT
;pp^ V,
          pVV8  d   MQKb  VV,
          pVe	   VR8X  d   M:^pW,          pV'       d   W,          V,           MT
;ppVV,
          pVV8  d   MTpK  TpV
^ 8  d1   V^8  d(   TpW,          pV'       d   W,          V,           MT
;ppK.  RpTpV'       d   W,          V,           MT
;pp^Tu;8:  d   V^,           8:  Ed   M EMRpV P                  WXV^ 8  R7       F  pW,          p\        V\        P                  4      '       g   K-  VP                   '       d%   V P                  VVP                   4      '       g   Kc  VP                  '       d   V P                  VV4      '       g   K  V	^,          p	V	V8X  d   VVJ d   RpM MVVJ g   K   M	  VVJ d   M6TpW,          pV^ 8  d   M$V'       d   W,          V,           MT
pVV8X  g   EK%   V'       d   EK*   V# 	  V# )zMatch `nth` elements.TFNr   )r   r   r   )rc  r  r   r   rs   r   r+   r  bnr   rG   rH   rO   of_typer
  )r%   rp   r  matchedr  r   r   
last_indexr   relative_indexr  r  varcount
count_incrfactoridxlast_idxadjustdiff_lowdiff	diff_highlowestr   s   &&&                     r   	match_nthCSSMatch.match_nth  s    AG{{{4#7#7KK#H#Hv u __R(F~i)@)@)DE66DVqJ"&JAENAA##CEJRQF.1QY]q8C( s Agz!1Qw#$s7!-&A+!!#+:=Q1Dh 3w8+! , %(*$4	!-&B,!!"+:=Q1Dh"Z/9,!$(	
 q5(!&+:=Q1Dh!#J25Q1<h s,j1n,,!..vFUVJ.WEOE%eSWW55 {{{4+?+?q{{+S+S yyy)@)@U)K)K "a'N%, B;&*G!{# X$ B;#19'*ai!ms?7} | r    c                    V ^8  d   QhRRRR/# r   r   )r   s   "r   r   ri  1  s      g $ r    c                    RpV P                  V4       FX  pV P                  V4      '       d   Rp V# V P                  V4      '       g   K8  \        P	                  V4      '       g   KU  Rp V# 	  V# )z)Check if element is empty (if requested).TF)r   r;   rm   RE_NOT_EMPTYsearch)r%   rp   is_emptyr   s   &&  r   match_emptyCSSMatch.match_empty1  ss     &&r*E{{5!!   ''..<3F3Fu3M3M  + r    c               $    V ^8  d   QhRRRRRR/# )r   rp   r   rc  ztuple[ct.SelectorList, ...]r   rE   r   )r   s   "r   r   ri  >  s#      W 9T Y] r    c                R    RpV F  pV P                  W4      '       d   K  RpK   	  V# )zMatch selectors.TF)r  )r%   rp   rc  rT  sels   &&&  r   match_subselectorsCSSMatch.match_subselectors>  s0     C''00  r    c               $    V ^8  d   QhRRRRRR/# )r   rp   r   containsztuple[ct.SelectorContains, ...]r   rE   r   )r   s   "r   r   ri  G  s#       4S X\ r    c                v   RpRpV F  pVfL   VP                   '       d   V P                  WP                  R7      pMV P                  WP                  R7      pRpVP                   F>  pVP                   '       d    V F  pWx9   g   K  Rp M	  V'       d    MK4  Wt9   g   K<  Rp M	  V'       d   K  RpK  	  V# )z"Match element if it contains text.TNr  F)ownr  r   r  text)	r%   rp   r/  rT  contentcontain_listr  r2  r  s	   &&&      r   match_containsCSSMatch.match_containsG  s     $L###"//ll/KG"mmB,,mGGE$))###$9$(E! %    $ * 5) %* r    c                    V ^8  d   QhRRRR/# r   r   )r   s   "r   r   ri  c  s     & & &D &r    c                v   RpRpV P                  VRR7      pV'       dK   VfG   V P                  V4      R8X  d   V P                  V4      '       d   TpK=  V P                  VRR7      pKR  Ve   RpV P                   F  w  rgWcJ g   K  RpWqJ d   Rp M	  V'       g   V P	                  VRR7       F  pV P                  V4      p	V	R8X  d    V# V	R	9   g   K'  V P                  VRR4      p
V
'       g   KD  \        P                  ! V
4      R8X  g   Ka  V P                  P                  W834       WJ d   Rp V# 	  V# )
Match default.FNTr  formr=   r   submit)inputbutton)	r   r  r   rl  r   r  r   r   r   )r%   rp   rT  r:  r   
found_formftr   r   r   s   &&         r   match_defaultCSSMatch.match_defaultc  s6     t4||F#v-$2B2B62J2J4@J119!%Jw $ 2 !55dd5KE<<.Dv~  22 66ufbI1A(!: 55<<d]K!{(,! L r    c                    V ^8  d   QhRRRR/# r   r   )r   s   "r   r   ri    s     < <g <$ <r    c                X  a  Rp\        \        S P                  VR4      4      pR V 3R llpV! V4      pVEeq   RpS P                   F  w  rxp	WuJ g   K  W8X  g   K  RpV	RJ d   Rp M	  V'       Eg7   Rp
S P	                  VRR7       F  pWJ d   K
  S P                  V4      pVR8X  d   RpRpRpS P                  V4       F  w  pp\        P                  ! V4      R8X  d   \        P                  ! V4      R	8X  d   RpMB\        P                  ! V4      R8X  d   VV8X  d   RpM\        P                  ! V4      R
8X  d   RpV'       g   K  V'       g   K  V'       g   K  V! V4      VJ g   K  Rp
 M	  V
'       g   K   M	  V
'       g   RpS P                  P                  WSV34       V# )r9  Fr   c                    V ^8  d   QhRRRR/# r   r   )r   s   "r   r   2CSSMatch.match_indeterminate.<locals>.__annotate__  s     	 	 	N 	r    c                   < RpSP                  V RR7      pVfS   SP                  V4      R8X  d   SP                  V4      '       d   Tp V# TpSP                  VRR7      pVe   KQ  Tp V# V# )zFind this input's form.NTr  r:  )r   r  r   )rp   r:  r   last_parentr%   s   &   r   get_parent_form5CSSMatch.match_indeterminate.<locals>.get_parent_form  s~    D__R4_8F,<<'61d6F6Fv6N6N!D K %4@>&DK4Kr    Tr  r<  r=   radiochecked)
r   r   r  rm  r   r  r  r   r   r   )r%   rp   rT  r   rI  r:  r>  r?  r  r  rL  r   tag_nameis_radiocheckhas_namer  r   s   f&                r   match_indeterminateCSSMatch.match_indeterminate  s    C33B?@	 	 r" J::a9!%JDy $ ; :!55dd5KE{ #||E2H7*#( %#($($8$8$?DAq#zz!}64::a=G;S+/!%A&!8Q$Y+/!%A)!;(,'xEEhh?SXCY]aCa*. % %@ w' L(  E//66E7JKr    c               $    V ^8  d   QhRRRRRR/# )r   rp   r   langsztuple[ct.SelectorLang, ...]r   rE   r   )r   s   "r   r   ri    s'     T TW T-H TT Tr    c           	        RpV P                  4       pV P                  pV P                  pTpRpRp	V'       Eg   V P                  V4      p
V P	                  V4       F  w  rV P                  W{4      w  rV'       d	   V
'       d0   V P                  '       g   \        P                  ! V4      MTR8X  gW   V'       g   Ka  V
'       d   Kk  V\        8X  g   Kx  V P                  '       g   Ve   \        P                  ! V4      MTR8X  g   K  Tp M	  Tp	V P                  WpP                  R7      pVe   EK  T	pV P                  V4      pT	p VfR   V P                  '       d@   V P                   F/  pVf   K	  \        \        V4      V^ ,          J g   K&  V^,          pK1  	  VEf   V P                  '       d%   V'       Ed   V'       Ed   VP                  R8X  Ed   RpR Fg  pRpV P!                  WpP                  R7       F8  pV P#                  V4      V8X  g   K  V P%                  V4      '       g   K4  RpTp M	  V'       d   Kg   M	  V'       EdU   VEeP   V EF  p\'        V\(        P*                  4      '       d   V P#                  V4      R8X  d   V P%                  V4      '       d   RpRpV P	                  V4       F  w  r\        P                  ! V4      R8X  d   \        P                  ! V4      R	8X  d   Rp\        P                  ! V4      R
8X  d   TpV'       g   Kd  V'       g   Kn  TpV P                  P-                  \        \        V4      \        \        V4      34        M	  Vf   EK   M	  Vf,   V P                  P-                  \        \        V4      R34       VeJ   V FC  pRpV F-  pV P/                  V\        \        V4      4      '       g   K+  RpK/  	  V'       d   KB   V# 	  V# )zMatch languages.FNlangr  htmlTmetaz
http-equivzcontent-languager3  r   )rW  head)ru  r   ro  r   r  r   rp  r   r   NS_XMLr   r   rk  r   r   r   r   r  r   rG   rH   rO   r   r  )r%   rp   rT  rT  has_nsr   ro  r   
found_langr   r   r  r   attr_nsr  cacher  r8   r   child2c_langr3  patternsr  s   &&&                     r   
match_langCSSMatch.match_lang  sP    ))+yy!44 
***62K,,V4 $ 4 4V ? K4;;;djjm\]bh5h{{w&7H15AQD)W[`ff "#J 5 D__V||_DF~%)%5%5d%;" $"7"7"7..#S$58(C!&qJ /
 t{{{7I7IddW[W`W`djWjE'!226\\2RE||E*c1d6F6Fu6M6M $!&	 S
 u ( u+$F!&#''22t||F7Kv7UZ^ZjZjkqZrZr!&"&$($8$8$@DA#zz!}<ARdAd)-#zz!}	9*+%v''-4
 $ 5 5 < <d3otTWYcOd=e f % %A "- % %))00$sD/21FG !!'G44Wd3
>STT $  ( u " r    c               $    V ^8  d   QhRRRRRR/# )r   rp   rw   directionalityr)   r   rE   r   )r   s   "r   r   ri    s&     9S 9SN 9SC 9SD 9Sr    c           	       a  V\         P                  ,          '       d    V\         P                  ,          '       d   R# Ve   S P                  V4      '       g   R# \        P                  \        P                  ! S P                  VRR4      4      R4      pVR9  d   W28H  # S P                  V4      pV'       d   Vf   \         P                  V8H  # S P                  V4      pVR8H  pVR8H  pVR8H  pV'       d(   \        P                  ! S P                  VRR4      4      MRp	V'       d   V	R	8X  d   Vf   \         P                  V8H  # V'       d   V	R9   g
   V'       Ed   V^ 8X  Ed   V'       d.   RP                  V 3R
 lS P                  VRR7       4       4      p
M!\        \        S P                  VRR4      4      p
V
'       dg   V
 FM  p\        P                   ! V4      pVR9   g   K"  VR8X  d   \         P                  M\         P                  pW28H  u # 	  \         P                  V8H  # V'       d   \         P                  V8H  # S P#                  S P%                  VRR7      V4      # V'       d   Ve   V^ 8X  dX   S P'                  V4      pVe   W28H  # V'       d   \         P                  V8H  # S P#                  S P%                  VRR7      V4      # S P#                  S P%                  VRR7      V4      # )zCheck directionality.FNr  r   r<  r  r  r=   telc              3  Z   <"   T F   pSP                  V4      '       g   K  Vx  K"  	  R # 5ir  )rm   ).0r   r%   s   & r   	<genexpr>%CSSMatch.match_dir.<locals>.<genexpr>?  s$     w1VZ^ZpZpquZv1Vs   +
+Tr  r   r  )N    )r2  r%  rg  urlemailr  )r  r  r  r   r  r  r   r   r  r   r  r  r   r   r   r  r  	match_dirr   r  )r%   rp   re  r  r   r   is_inputis_textareais_bdirL  r   r  r  s   f&&          r   ro  CSSMatch.match_dir  sm    BNN**~/N/N:T--b11 KK

4+E+Eb%QS+T UW[\	I%.. ,,r"y(>>^33 ||B7?j(JR

455b&"EFXZ9+<>>^33 %#LLQ\Q\bkopbpw1B1B2QU1B1VwwS$"<"<R""MNA&44Q7D//6:ckBNNr~~	(::	  ~~77~~77>>$//"/"E~VV y(Y!^r*I$ 22~~77>>$//"/"E~VV ~~doobDoA>RRr    c               $    V ^8  d   QhRRRRRR/# )r   rp   r   	conditionr)   r   rE   r   )r   s   "r   r   ri  Z  s&     &Q &Qg &Q# &Q$ &Qr    c                   Rp\         P                  ! V P                  VR4      4      p\        P	                  V\        \        V P                  VRR4      4      4      p\        P	                  V\        \        V P                  VRR4      4      4      pVf   Vf   R# \        P	                  V\        \        V P                  VRR4      4      4      pVem   VR	9   d"   Ve	   Wu8  d   RpV'       g   Ve	   Wv8  d   RpMDVR8X  d>   Ve   Ve   WV8  d   Wu8  d	   Wv8  d   RpM Ve	   Wu8  d   RpV'       g   Ve	   Wv8  d   RpV\        P                  ,          '       d   V'       * # T# )
a3  
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=   minNmaxr   TrO  )rN  rP  r%  r3  rQ  rR  )	r   r   r  r"  r^  r   r   r  SEL_IN_RANGE)r%   rp   ru  out_of_rangerL  mnmxr   s   &&&     r   match_rangeCSSMatch.match_rangeZ  s;    

455b&ABtC1K1KBPUW[1\']^tC1K1KBPUW[1\']^ :"*""5$sD4N4NrSZ\`4a*bcVV>ej#'L#5:#'L&>bnzej'+~%*'+'BNuz'+#,r#>#><PLPr    c                    V ^8  d   QhRRRR/# r   r   )r   s   "r   r   ri    s     
 
 
D 
r    c                    V P                  V4      pVRJ;'       dL    VP                  R4      R8H  ;'       g0    VP                  R4      R8g  ;'       g    V P                  V4      RJ# )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.
Nr  r  r   )r  findr  r  s   && r   match_definedCSSMatch.match_defined  sn     ||B  		#"$ 0 0		#"$0 0#4/		
r    c                    V ^8  d   QhRRRR/# r   r   )r   s   "r   r   ri    s      ' d r    c                >    RpV P                  V4      pVR9   d   RpV# )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.

FT)r   
)r  )r%   rp   rT  r3  s   &&  r   match_placeholder_shown CSSMatch.match_placeholder_shown  s)     --#j Er    c               $    V ^8  d   QhRRRRRR/# )r   rp   r   rc  rd  r   rE   r   )r   s   "r   r   ri    s&     R R' Ro R$ Rr    c                	   RpVP                   pVP                  pV'       d-   V P                  pV P                  pR\        /V n        RV n        V'       d   V P                  '       EdB   V EF:  pTp\        V\        P                  4      '       d   K(  V P                  WP                  4      '       g   KK  VP                  \        P                  ,          '       d   V P                  V4      '       g   K  VP                  \        P                  ,          '       d   V P                  V4      '       g   K  VP                  \        P                  ,          '       d   V P!                  V4      '       g   EK  VP                  \        P"                  ,          '       d   V P%                  V4      '       g   EKM  V P'                  WP(                  4      '       g   EKq  VP                  \        P*                  ,          '       d   V P-                  V4      '       g   EK  VP.                  '       d%   V P1                  WP.                  4      '       g   EK  VP2                  '       d%   V P5                  WP2                  4      '       g   EK  V P7                  WP8                  4      '       g   EKB  VP                  \:        ,          '       d0   V P=                  WP                  \:        ,          4      '       g   EK  VP>                  '       d%   V PA                  WP>                  4      '       g   EK  VPB                  '       d%   V PE                  WPB                  4      '       g   EK  VPF                  '       d%   V PI                  WPF                  4      '       g   EK0  VP                  \        PJ                  ,          '       d   V PM                  V4      '       g   EKq  VP                  \        PN                  ,          '       d   V PQ                  V4      '       g   EK  VP                  \R        ,          '       d0   V PU                  WP                  \R        ,          4      '       g   EK  VPV                  '       d%   V PY                  WPV                  4      '       g   EK4  V'       * p M	  V'       d   XV n        XV n        V# )z.Check if element matches one of the selectors.FrW  T)-is_notr   rf  rn  r   rG   r  r  r  r8   rh  SEL_DEFINEDr  SEL_ROOTr  	SEL_SCOPEr  SEL_PLACEHOLDER_SHOWNr  r   r  	SEL_EMPTYr'  r  r  r  r  r  r  RANGESr}  rV  rb  rc  r,  r  r  SEL_DEFAULTrA  SEL_INDETERMINATErQ  	DIR_FLAGSro  r/  r5  )	r%   rp   rc  rT  r  r   rf  rn  selectors	   &&&      r   r  CSSMatch.match_selectors  s    !!## J"22O%x0DO#'D $,,,%h88~~b,,77>>BNN224;M;Mb;Q;Q>>BKK//8K8K>>BLL009I9I"9M9M>>B$<$<<<TEaEabdEeEe~~b,,77>>BLL009I9I"9M9M<<<b,,(G(G###D,>,>rCSCS,T,T,,R1D1DEE>>F**43C3CBY_H_3`3`===]])K)K%%%d.E.EbJ\J\.].]$$$T-A-A"FWFW-X-X>>BNN224;M;Mb;Q;Q >>B$8$888AYAYZ\A]A]>>I--dnnRZcIc6d6d$$$T-@-@EVEV-W-W"
y &~ (DO#2D r    c                    V ^8  d   QhRRRR/# )r   limitr)   r   r   r   )r   s   "r   r   ri    s      C (9 r    c              #     "   V^8  d   RMTpV P                  V P                  4       F9  pV P                  V4      '       g   K  Vx  Vf   K&  V^,          pV^8  g   K8   R# 	  R# 5i)z&Match all tags under the targeted tag.N)r   r8   rT  )r%   r  limr   s   &&  r   selectCSSMatch.select  sY      aidU--dhh7Ezz%  ?1HCQw 8s   >A(A(A(!A(c                   V ^8  d   QhRR/# )r   r   rw   r   )r   s   "r   r   ri  	  s     
 
 
r    c                    V P                   pRpVf3   Ve/   V P                  V4      '       d   TpK#  V P                  V4      pK6  V# )Match closest ancestor.N)r8   rT  r   )r%   currentclosests   &  r   r  CSSMatch.closest	  sC     ((o'"5zz'""!//'2r    c                   V ^8  d   QhRR/# )r   r   list[bs4.Tag]r   )r   s   "r   r   ri    s     
 
 
r    c                    V P                  V P                  4       Uu. uF@  p\        V\        P                  4      '       g   K%  V P                  V4      '       g   K>  VNKB  	  up# u upi )zFilter tag's children.)r   r8   rG   rH   rO   rT  r%   r8   s   & r   filterCSSMatch.filter  sX      ,,TXX6
6C#sww' ,0JJsO C6
 	
 
s   "A'A'A'c                    V ^8  d   QhRRRR/# r   r   )r   s   "r   r   ri    s     d d dD dr    c                    V P                  V4      '       * ;'       d5    V P                  V4      ;'       d    V P                  WP                  4      # zMatch.)rK   r;   r  rc  r   s   &&r   rT  CSSMatch.match  s?     ;;r?"cct{{2cc4;O;OPRTbTb;ccr    )rl  rm  rk  rh  ro  rn  r   rp  rf  r   re  rc  r8   Nr  rl  ),r/   r0   r1   r2   r3   r&   ru  ry  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r   r'  r,  r5  rA  rQ  rb  ro  r}  r  r  r  r  r  r  rT  r4   r   r    r   ra  ra     s    'BR6
/
RX#J6p3j*&

8.	4 

cJ8&P<|Tl9Sv&QP
.Rh

d dr    ra  c                     a  ] tR tRt$ RtR]R&   R]R&   R]R&   R	]R
&   R]R&   RtR V 3R lltR R ltR R lt	R R lt
R R ltRR R lltRR R lltR R lt]tRtV ;t# ) 	SoupSievei#  z-Compiled Soup Sieve selector matching object.r   r  rd  rc  rg  rf  zdict[str, str]customr)   rh  c          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )r   r  r   rc  rd  rf  rg  r  zct.CustomSelectors | Nonerh  r)   r   )r   s   "r   r   SoupSieve.__annotate__.  s<     
 

 #
 )	

 *
 
r    c                0   < \         SV `  VVVVVR7       R# )r"   )r  rc  rf  r  rh  N)superr&   )r%   r  rc  rf  r  rh  	__class__s   &&&&&&r   r&   SoupSieve.__init__.  s&     	! 	 	
r    c                    V ^8  d   QhRRRR/# )r   r8   r   r   rE   r   )r   s   "r   r   r  @  s     U U UT Ur    c                v    \        V P                  WP                  V P                  4      P	                  V4      # r  )ra  rc  rf  rh  rT  r  s   &&r   rT  SoupSieve.match@  s+     __djjIOOPSTTr    c                    V ^8  d   QhRRRR/# r   r8   r   r   rw   r   )r   s   "r   r   r  E  s     T T7 T~ Tr    c                t    \        V P                  WP                  V P                  4      P	                  4       # )r  )ra  rc  rf  rh  r  r  s   &&r   r  SoupSieve.closestE  s(     __djjIQQSSr    c                    V ^8  d   QhRRRR/# )r   iterablezIterable[bs4.Tag]r   r  r   )r   s   "r   r   r  J  s     n n0 n] nr    c                N   \        V\        P                  4      '       d:   \        V P                  WP
                  V P                  4      P                  4       # V Uu. uF;  p\        P                  V4      '       d   K   V P                  V4      '       g   K9  VNK=  	  up# u upi )aY  
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.
)
rG   rH   rO   ra  rc  rf  rh  r  rc   rT  )r%   r  r   s   && r   r  SoupSieve.filterJ  sr     h((DNNHootzzRYY[[%-mXTX5Q5QRV5WD\`\f\fgk\lDDXmmms   B" B"B"c                    V ^8  d   QhRRRR/# r  r   )r   s   "r   r   r  [  s     ) )g ). )r    c                N    V P                  V^R7      pV'       d
   V^ ,          # R# )zSelect a single tag.)r  N)r  )r%   r8   r   s   && r   
select_oneSoupSieve.select_one[  s'     {{3a{(tAw(D(r    c               $    V ^8  d   QhRRRRRR/# )r   r8   r   r  r)   r   r  r   )r   s   "r   r   r  a  s!     . .' .# .m .r    c                6    \        V P                  W4      4      # )zSelect the specified tags.)listiselectr%   r8   r  s   &&&r   r  SoupSieve.selecta  s     DLL,--r    c               $    V ^8  d   QhRRRRRR/# )r   r8   r   r  r)   r   r   r   )r   s   "r   r   r  f  s'     \ \7 \3 \7H \r    c              #     "   \        V P                  WP                  V P                  4      P	                  V4       Rj  xL
  R#  L5i)zIterate the specified tags.N)ra  rc  rf  rh  r  r  s   &&&r   r  SoupSieve.iselectf  s1      DNNC$**MTTUZ[[[s   >A	 AA	c                   V ^8  d   QhRR/# )r   r   r   r   )r   s   "r   r   r  k  s     
 
# 
r    c           	     x    RV P                   : RV P                  : RV P                  : RV P                  : R2	# )zRepresentation.zSoupSieve(pattern=z, namespaces=z	, custom=z, flags=))r  rf  r  rh  r,   s   &r   __repr__SoupSieve.__repr__k  s@     ! 0doo=P Qkk_HTZZN!=	
r    r   )r  rc  rf  r  rh  _hashr  )r/   r0   r1   r2   r3   __annotations__	__slots__r&   rT  r  r  r  r  r  r  __str__r4   __classcell__)r  s   @r   r  r  #  s_    7L$$JRI
 
$U
T
n").
\

 Gr    r  )      	      );r3   
__future__r   r   r   r   rer   r  r  rH   typingr   r   r   r	   r
   r   compiler$  r  r  r  r  r  r  r  r  r  r   rZ  r  r  r  ry  SEL_OUT_OF_RANGEr  r  rZ  rX  rV  rW  rS  rY  r  r-  r*  r.  r)  r,  r+  DAYS_IN_WEEKr   r6   r"  ra  	Immutabler  pickle_registerr   r    r   <module>r     s    "   	   
 I I I zz.)JJ'	 
     )	/NNR^^+		2..	. 
2>>	2>>
A 
G	H
**B
C::BC
**A
B
**S
Tjjk 

=>	
	" "(^
 ^
Bm m`@d| @dF P Pf   9 r    