ó
    F\hÙE  ã                   óV  • S r SSKrSSKrSSKJr  SSKJr  S/r\R                  " S5      r
\R                  " S5      r\R                  " S5      r\R                  " S	5      r\R                  " S
5      r\R                  " S5      r\R                  " S5      r\R                  " S5      r\R                  " S5      r\R                  " S5      r\R                  " S\R(                  5      r\R                  " S5      r\R                  " S5      rS rS r " S S\R4                  5      rg)zA parser for HTML and XHTML.é    N)Úunescape)Úhtml5Ú
HTMLParserz[&<]z
&[a-zA-Z#]z%&([a-zA-Z][-.a-zA-Z0-9]*)[^a-zA-Z0-9]z)&#(?:[0-9]+|[xX][0-9a-fA-F]+)[^0-9a-fA-F]z6&(#[0-9]+|#[xX][0-9a-fA-F]+|[a-zA-Z][a-zA-Z0-9]*)[;=]?z	<[a-zA-Z]Ú>z--\s*>z+([a-zA-Z][^\t\n\r\f />\x00]*)(?:\s|/(?!>))*z]((?<=[\'"\s/])[^\s/>][^\s/=>]*)(\s*=+\s*(\'[^\']*\'|"[^"]*"|(?![\'"])[^>\s]*))?(?:\s|/(?!>))*aF  
  <[a-zA-Z][^\t\n\r\f />\x00]*       # tag name
  (?:[\s/]*                          # optional whitespace before attribute name
    (?:(?<=['"\s/])[^\s/>][^\s/=>]*  # attribute name
      (?:\s*=+\s*                    # value indicator
        (?:'[^']*'                   # LITA-enclosed value
          |"[^"]*"                   # LIT-enclosed value
          |(?!['"])[^>\s]*           # bare value
         )
        \s*                          # possibly followed by a space
       )?(?:\s|/(?!>))*
     )*
   )?
  \s*                                # trailing whitespace
z#</\s*([a-zA-Z][-.a-zA-Z0-9:_]*)\s*>c                 óÆ   • U R                  S5      nUR                  S5      (       a  [        U5      $ UR                  S5      (       d  USS  [        ;   a  [        U5      $ U$ )Nr   ú&#Ú=é   )ÚgroupÚ
startswithr   ÚendswithÚhtml5_entities)ÚmatchÚrefs     Ú"/usr/lib/python3.13/html/parser.pyÚ_replace_attr_charrefr   @   sU   € Ø
�+‰+�a‹.€Cà
‡~�~�d×ÑÜ˜‹}Ðð �<‰<˜×Ñ  Q R ¬NÓ!:Ü˜‹}Ðà€Jó    c                 ó6   • [         R                  [        U 5      $ ©N)Úattr_charrefÚsubr   )Úss    r   Ú_unescape_attrvaluer   L   s   € Ü×ÑÔ1°1Ó5Ð5r   c                   óÐ   ^ • \ rS rSrSrSrSS.U 4S jjrU 4S jrS rS	 r	S
r
S rS rS rS rS rS S jrS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrU =r $ )!r   éP   a  Find tags and other markup and call handler functions.

Usage:
    p = HTMLParser()
    p.feed(data)
    ...
    p.close()

Start tags are handled by calling self.handle_starttag() or
self.handle_startendtag(); end tags by self.handle_endtag().  The
data between tags is passed from the parser to the derived class
by calling self.handle_data() with the data as argument (the data
may be split up in arbitrary chunks).  If convert_charrefs is
True the character references are converted automatically to the
corresponding Unicode character (and self.handle_data() is no
longer split in chunks), otherwise they are passed by calling
self.handle_entityref() or self.handle_charref() with the string
containing respectively the named or numeric reference as the
argument.
)ÚscriptÚstyleT)Úconvert_charrefsc                óN   >• [         TU ]  5         Xl        U R                  5         g)z®Initialize and reset this instance.

If convert_charrefs is True (the default), all character references
are automatically converted to the corresponding Unicode characters.
N)ÚsuperÚ__init__r   Úreset)Úselfr   Ú	__class__s     €r   r!   ÚHTMLParser.__init__h   s   ø€ ô 	‰ÑÔØ 0ÔØ�
‰
�r   c                 ób   >• SU l         SU l        [        U l        SU l        [
        TU ]  5         g)z1Reset this instance.  Loses all unprocessed data.Ú z???N)ÚrawdataÚlasttagÚinteresting_normalÚinterestingÚ
cdata_elemr    r"   )r#   r$   s    €r   r"   ÚHTMLParser.resetr   s)   ø€ àˆŒØˆŒÜ-ˆÔØˆŒÜ‰‰�r   c                 óN   • U R                   U-   U l         U R                  S5        g)zyFeed data to the parser.

Call this as often as you want, with as little or as much text
as you want (may include '\n').
r   N)r(   Úgoahead©r#   Údatas     r   ÚfeedÚHTMLParser.feedz   s   € ð —|‘| dÑ*ˆŒØ�‰�Q�r   c                 ó&   • U R                  S5        g)zHandle any buffered data.r
   N)r/   ©r#   s    r   ÚcloseÚHTMLParser.closeƒ   s   € à�‰�Q�r   Nc                 ó   • U R                   $ )z)Return full source of start tag: '<...>'.)Ú_HTMLParser__starttag_textr5   s    r   Úget_starttag_textÚHTMLParser.get_starttag_text‰   s   € à×#Ñ#Ð#r   c                 óœ   • UR                  5       U l        [        R                  " SU R                  -  [        R                  5      U l        g )Nz</\s*%s\s*>)Úlowerr,   ÚreÚcompileÚIr+   )r#   Úelems     r   Úset_cdata_modeÚHTMLParser.set_cdata_mode�   s/   € ØŸ*™*›,ˆŒÜŸ:š: n°t·±Ñ&FÌÏÉÓMˆÕr   c                 ó(   • [         U l        S U l        g r   )r*   r+   r,   r5   s    r   Úclear_cdata_modeÚHTMLParser.clear_cdata_mode‘   s   € Ü-ˆÔØˆ�r   c                 óÄ
  • U R                   nSn[        U5      nX4:  GaÉ  U R                  (       a|  U R                  (       dk  UR	                  SU5      nUS:  aR  UR                  S[        X4S-
  5      5      nUS:¼  a,  [        R                  " S5      R                  X&5      (       d  GO?UnOHU R                  R                  X#5      nU(       a  UR                  5       nOU R                  (       a  GOöUnX5:  aR  U R                  (       a.  U R                  (       d  U R                  [        X#U 5      5        OU R                  X#U 5        U R                  X55      nX4:X  a  GO…UR                  nU" SU5      (       Gaƒ  [         R#                  X#5      (       a  U R%                  U5      n	O¢U" SU5      (       a  U R'                  U5      n	O‚U" SU5      (       a  U R)                  U5      n	ObU" SU5      (       a  U R+                  U5      n	OBU" S	U5      (       a  U R-                  U5      n	O"US
-   U:  a  U R                  S5        US
-   n	OGOœU	S:  aœ  U(       d  GO�UR	                  SUS
-   5      n	U	S:  a!  UR	                  SUS
-   5      n	U	S:  a  US
-   n	OU	S
-  n	U R                  (       a.  U R                  (       d  U R                  [        X#U	 5      5        OU R                  X#U	 5        U R                  X95      nGOßU" SU5      (       a®  [.        R#                  X#5      nU(       a^  UR1                  5       SS n
U R3                  U
5        UR5                  5       n	U" SU	S
-
  5      (       d  U	S
-
  n	U R                  X95      nGMp  SX#S  ;   a*  U R                  X#US-    5        U R                  X3S-   5      nGO+U" SU5      (       Ga  [6        R#                  X#5      nU(       a\  UR1                  S
5      n
U R9                  U
5        UR5                  5       n	U" SU	S
-
  5      (       d  U	S
-
  n	U R                  X95      nGM+  [:        R#                  X#5      nU(       aI  U(       aA  UR1                  5       X#S  :X  a+  UR5                  5       n	X“::  a  Un	U R                  X3S
-   5      nO?US
-   U:  a&  U R                  S5        U R                  X3S
-   5      nOO S5       eX4:  a  GMÉ  U(       ah  X4:  ac  U R                  (       a.  U R                  (       d  U R                  [        X#U 5      5        OU R                  X#U 5        U R                  X45      nX#S  U l         g )Nr   Ú<Ú&é"   z[\s;]ú</ú<!--ú<?ú<!r
   r   r   é   éÿÿÿÿÚ;zinteresting.search() lied)r(   Úlenr   r,   ÚfindÚrfindÚmaxr>   r?   Úsearchr+   ÚstartÚhandle_datar   Ú	updateposr   Ústarttagopenr   Úparse_starttagÚparse_endtagÚparse_commentÚparse_piÚparse_html_declarationÚcharrefr   Úhandle_charrefÚendÚ	entityrefÚhandle_entityrefÚ
incomplete)r#   rb   r(   ÚiÚnÚjÚampposr   r   ÚkÚnames              r   r/   ÚHTMLParser.goahead˜   s‚  € Ø—,‘,ˆØˆÜ�‹LˆØŒeØ×$×$¨T¯_¯_Ø—L‘L  aÓ(�Ø�q“5ð %Ÿ]™]¨3´°A¸±t³Ó=�FØ !›ÜŸJšJ xÓ0×7Ñ7¸×HÑHÙØ�Aøà×(Ñ(×/Ñ/°Ó;�ÞØŸ™›‘Aà——ÙØ�AØ‹uØ×(×(°··Ø×$Ñ$¤X¨g¸¨lÓ%;Õ<à×$Ñ$ W¨q \Ô2Ø—‘˜qÓ$ˆAØ‹v‘uØ ×+Ñ+ˆJÙ˜#˜q×!Ò!Ü×%Ñ% g×1Ñ1Ø×+Ñ+¨AÓ.‘AÙ  a×(Ñ(Ø×)Ñ)¨!Ó,‘AÙ ¨×*Ñ*Ø×*Ñ*¨1Ó-‘AÙ  a×(Ñ(ØŸ™ aÓ(‘AÙ  a×(Ñ(Ø×3Ñ3°AÓ6‘AØ˜!‘e˜q“[Ø×$Ñ$ SÔ)Ø˜A™‘AáØ�q“5ÞÙØŸ™ S¨!¨a©%Ó0�AØ˜1“uØ#ŸL™L¨¨a°!©eÓ4˜Ø˜q›5Ø ! A¡˜Aøà˜Q™˜Ø×,×,°T·_·_Ø×(Ñ(¬°'¸A°,Ó)?Õ@à×(Ñ(¨°1¨Ô6Ø—N‘N 1Ó(’Ù˜D !×$Ñ$ÜŸ™ gÓ1�ÞØ Ÿ;™;›=¨¨2Ð.�DØ×'Ñ'¨Ô-ØŸ	™	›�AÙ% c¨1¨Q©3×/Ñ/Ø ™E˜ØŸ™ qÓ,�AÚà˜g b˜kÓ)Ø×(Ñ(¨°1°Q±3¨Ô8Ø ŸN™N¨1°©cÓ2˜ÙÙ˜C ×#Ò#Ü!Ÿ™¨Ó3�ÞØ Ÿ;™; q›>�DØ×)Ñ)¨$Ô/ØŸ	™	›�AÙ% c¨1¨Q©3×/Ñ/Ø ™E˜ØŸ™ qÓ,�AÚÜ"×(Ñ(¨Ó4�Þæ˜uŸ{™{›}°¸°Ó;Ø!ŸI™I›K˜Ø›6Ø !˜AØ ŸN™N¨1°!©eÓ4˜àØ˜!‘e˜q“[ð ×$Ñ$ SÔ)ØŸ™ q¨a©%Ó0‘Aàà5Ð5Ó5�qðS ŽeöV �1“5Ø×$×$¨T¯_¯_Ø× Ñ ¤¨'°A¨,Ó!7Õ8à× Ñ  ¨1 Ô.Ø—‘˜qÓ$ˆAØ˜r�{ˆ�r   c                 óp  • U R                   nX!US-    S:X  d   S5       eX!US-    S:X  a  U R                  U5      $ X!US-    S:X  a  U R                  U5      $ X!US-    R                  5       S:X  a7  UR	                  S	US-   5      nUS
:X  a  g
U R                  X!S-   U 5        US-   $ U R                  U5      $ )NrO   rN   z+unexpected call to parse_html_declaration()é   rL   é	   z	<![CDATA[z	<!doctyper   rP   r
   )r(   r]   Úparse_marked_sectionr=   rS   Úhandle_declÚparse_bogus_comment)r#   rf   r(   Úgtposs       r   r_   Ú!HTMLParser.parse_html_declaration  sÚ   € Ø—,‘,ˆØ˜˜1™ˆ~ Ó%ð 	Dð )Có 	DÐ%à�Q�q‘Sˆ>˜VÓ#à×%Ñ% aÓ(Ð(Ø�q˜‘sˆ^˜{Ó*Ø×,Ñ,¨QÓ/Ð/Ø�q˜‘sˆ^×!Ñ!Ó# {Ó2à—L‘L  a¨¡cÓ*ˆEØ˜‹{ØØ×Ñ˜W q¡S¨Ð/Ô0Ø˜‘7ˆNà×+Ñ+¨AÓ.Ð.r   c                 óº   • U R                   nX1US-    S;   d   S5       eUR                  SUS-   5      nUS:X  a  gU(       a  U R                  X1S-   U 5        US-   $ )NrO   )rN   rK   z(unexpected call to parse_bogus_comment()r   rP   r
   )r(   rS   Úhandle_comment)r#   rf   Úreportr(   Úposs        r   rr   ÚHTMLParser.parse_bogus_comment'  sq   € Ø—,‘,ˆØ˜˜1™ˆ~ Ó-ð 	Ið 1Hó 	IÐ-à�l‰l˜3  !¡Ó$ˆØ�"‹9ØÞØ×Ñ ¨!©¨CÐ 0Ô1Ø�Q‰wˆr   c                 óî   • U R                   nX!US-    S:X  d   S5       e[        R                  X!S-   5      nU(       d  gUR                  5       nU R	                  X!S-   U 5        UR                  5       nU$ )NrO   rM   zunexpected call to parse_pi()rP   )r(   ÚpicloserV   rW   Ú	handle_pirb   )r#   rf   r(   r   rh   s        r   r^   ÚHTMLParser.parse_pi3  sn   € Ø—,‘,ˆØ˜˜1™ˆ~ Ó%ÐFÐ'FÓFÐ%Ü—‘˜w¨!©Ó,ˆÞØØ�K‰K‹MˆØ�‰�w ™s A�Ô'Ø�I‰I‹KˆØˆr   c                 ó²  • S U l         U R                  U5      nUS:  a  U$ U R                  nX1U U l         / n[        R	                  X1S-   5      nU(       d   S5       eUR                  5       nUR                  S5      R                  5       =U l        nXb:  a·  [        R	                  X65      nU(       d  OšUR                  SSS5      u  pšnU
(       d  S nO0US S Ss=:X  a	  USS  :X  d  O  US S Ss=:X  a	  USS  :X  a  O  OUSS nU(       a  [        U5      nUR                  U	R                  5       U45        UR                  5       nXb:  a  M·  X6U R                  5       nUS	;  a  U R                  X1U 5        U$ UR                  S
5      (       a  U R                  Xt5        U$ U R!                  Xt5        XpR"                  ;   a  U R%                  U5        U$ )Nr   r
   z#unexpected call to parse_starttag()rO   é   Ú'rP   Ú")r   ú/>r‚   )r9   Úcheck_for_whole_start_tagr(   Útagfind_tolerantr   rb   r   r=   r)   Úattrfind_tolerantr   ÚappendÚstriprX   r   Úhandle_startendtagÚhandle_starttagÚCDATA_CONTENT_ELEMENTSrB   )r#   rf   Úendposr(   Úattrsr   rj   ÚtagÚmÚattrnameÚrestÚ	attrvaluerb   s                r   r[   ÚHTMLParser.parse_starttag?  sÃ  € Ø#ˆÔØ×/Ñ/°Ó2ˆØ�A‹:ØˆMØ—,‘,ˆØ&¨Ð0ˆÔð ˆÜ ×&Ñ& w°!±Ó4ˆÞÐ;Ð;Ó;ˆuØ�I‰I‹KˆØ"Ÿ[™[¨›^×1Ñ1Ó3Ð3ˆŒ�sØ‹jÜ!×'Ñ'¨Ó3ˆAÞØØ()¯©°°1°aÓ(8Ñ%ˆH˜IÞØ ‘	Ø˜2˜A� $Õ8¨)°B°C¨.Õ8Ø˜2˜A� #Õ7¨°2°3¨Ö7Ø% a¨˜O�	ÞÜ/°	Ó:�	Ø�L‰L˜(Ÿ.™.Ó*¨IÐ6Ô7Ø—‘“ˆAð �jð ˜Ð×%Ñ%Ó'ˆØ�kÓ!Ø×Ñ˜W vÐ.Ô/ØˆMØ�<‰<˜×Ñà×#Ñ# CÔ/ð
 ˆð × Ñ  Ô,Ø×1Ñ1Ó1Ø×#Ñ# CÔ(Øˆr   c                 ól  • U R                   n[        R                  X!5      nU(       a‚  UR                  5       nX$US-    nUS:X  a  US-   $ US:X  a@  UR	                  SU5      (       a  US-   $ UR	                  SU5      (       a  gXA:”  a  U$ US-   $ US:X  a  gUS;   a  gXA:”  a  U$ US-   $ [        S	5      e)
Nr
   r   Ú/r‚   rO   rP   r'   z6abcdefghijklmnopqrstuvwxyz=/ABCDEFGHIJKLMNOPQRSTUVWXYZzwe should not get here!)r(   Úlocatestarttagend_tolerantr   rb   r   ÚAssertionError)r#   rf   r(   rŽ   rh   Únexts         r   rƒ   Ú$HTMLParser.check_for_whole_start_tagk  sÍ   € Ø—,‘,ˆÜ&×,Ñ,¨WÓ8ˆÞØ—‘“ˆAØ˜Q˜q™S�>ˆDØ�s‹{Ø˜1‘u�Ø�s‹{Ø×%Ñ% d¨A×.Ñ.Ø˜q™5�LØ×%Ñ% c¨1×-Ñ-àà“5Ø�Hà˜q™5�LØ�r‹zàØð 5ó 6ð Ø‹uØ�à˜1‘u�ÜÐ6Ó7Ð7r   c                 ó*  • U R                   nX!US-    S:X  d   S5       e[        R                  X!S-   5      nU(       d  gUR                  5       n[        R                  X!5      nU(       d·  U R                  b  U R                  X!U 5        U$ [        R                  X!S-   5      nU(       d!  X!US-    S:X  a  US-   $ U R                  U5      $ UR                  S5      R                  5       nUR                  SUR                  5       5      nU R                  U5        US-   $ UR                  S5      R                  5       nU R                  b$  XpR                  :w  a  U R                  X!U 5        U$ U R                  U5        U R                  5         U$ )	NrO   rK   zunexpected call to parse_endtagr
   rP   r   z</>r   )r(   Ú	endendtagrV   rb   Ú
endtagfindr   r,   rX   r„   rr   r   r=   rS   Úhandle_endtagrE   )r#   rf   r(   r   rs   Ú	namematchÚtagnamerA   s           r   r\   ÚHTMLParser.parse_endtag�  si  € Ø—,‘,ˆØ˜˜1™ˆ~ Ó%ÐHÐ'HÓHÐ%Ü× Ñ  ¨A©#Ó.ˆÞØØ—	‘	“ˆÜ× Ñ  Ó,ˆÞØ�‰Ñ*Ø× Ñ  ¨5Ð!1Ô2Ø�ä(×.Ñ.¨w¸!¹Ó<ˆIÞà˜Q˜q™S�> UÓ*Ø˜Q™3�Jà×3Ñ3°AÓ6Ð6Ø—o‘o aÓ(×.Ñ.Ó0ˆGð
 —L‘L  i§m¡m£oÓ6ˆEØ×Ñ˜wÔ'Ø˜‘7ˆNà�{‰{˜1‹~×#Ñ#Ó%ˆØ�?‰?Ñ&Ø—‘Ó&Ø× Ñ  ¨5Ð!1Ô2Ø�à×Ñ˜4Ô Ø×ÑÔØˆr   c                 óH   • U R                  X5        U R                  U5        g r   )r‰   rœ   ©r#   r�   rŒ   s      r   rˆ   ÚHTMLParser.handle_startendtagµ  s   € Ø×Ñ˜SÔ(Ø×Ñ˜3Õr   c                 ó   • g r   © r¡   s      r   r‰   ÚHTMLParser.handle_starttagº  ó   € Ør   c                 ó   • g r   r¤   )r#   r�   s     r   rœ   ÚHTMLParser.handle_endtag¾  r¦   r   c                 ó   • g r   r¤   ©r#   rk   s     r   ra   ÚHTMLParser.handle_charrefÂ  r¦   r   c                 ó   • g r   r¤   rª   s     r   rd   ÚHTMLParser.handle_entityrefÆ  r¦   r   c                 ó   • g r   r¤   r0   s     r   rX   ÚHTMLParser.handle_dataÊ  r¦   r   c                 ó   • g r   r¤   r0   s     r   rv   ÚHTMLParser.handle_commentÎ  r¦   r   c                 ó   • g r   r¤   )r#   Údecls     r   rq   ÚHTMLParser.handle_declÒ  r¦   r   c                 ó   • g r   r¤   r0   s     r   r|   ÚHTMLParser.handle_piÖ  r¦   r   c                 ó   • g r   r¤   r0   s     r   Úunknown_declÚHTMLParser.unknown_declÙ  r¦   r   )Ú__starttag_textr,   r   r+   r)   r(   )r
   )!Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rŠ   r!   r"   r2   r6   r9   r:   rB   rE   r/   r_   rr   r^   r[   rƒ   r\   rˆ   r‰   rœ   ra   rd   rX   rv   rq   r|   r¸   Ú__static_attributes__Ú__classcell__)r$   s   @r   r   r   P   s¢   ø† ñð* 1Ðà+/÷ ð õòòð €Oò$òNòòu#òt/ô*	ò	ò(òX8òD%òP ò
òòòòòòò÷ð r   )r¿   r>   Ú_markupbaseÚhtmlr   Úhtml.entitiesr   r   Ú__all__r?   r*   re   rc   r`   r   rZ   r{   Úcommentcloser„   r…   ÚVERBOSEr•   rš   r›   r   r   Ú
ParserBaser   r¤   r   r   Ú<module>rÉ      s  ðÙ "ó 
Û å Ý 1ð ˆ.€ð —Z’Z Ó'Ð Ø�ZŠZ˜Ó%€
à�JŠJÐ>Ó?€	Ø
�*Š*Ð@Ó
A€Ø�zŠzÐSÓT€à�zŠz˜+Ó&€Ø
�*Š*�S‹/€Ø�zŠz˜)Ó$€ð —:’:ÐLÓMÐ Ø—J’Jð=ó>Ð ð  ŸZšZð )ð ‡Z�ZóÐ ð �JŠJ�s‹O€	ð �ZŠZÐ>Ó?€
ò
ò6ôJ�×'Ñ'õ Jr   