ó
    ã¾yj·I  ã                   óz  • 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5      r\R                  " S\R*                  5      r\R                  " S5      r\R                  " S5      rS rS r " S S\R6                  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
</[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   A   sU   € Ø
�+‰+�a‹.€Cà
‡~�~�d×ÑÜ˜‹}Ðð �<‰<˜×Ñ  Q R ¬NÓ!:Ü˜‹}Ðà€Jó    c                 ó6   • [         R                  [        U 5      $ ©N)Úattr_charrefÚsubr   )Úss    r   Ú_unescape_attrvaluer   M   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   éQ   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__i   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.resets   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.feed{   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O3U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OyUR                  nU" SU5      (       Gaw  [         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	OiU" SU5      (       a  U R+                  U5      n	OIU" S	U5      (       a  U R-                  U5      n	O)US
-   U:  d  U(       a  U R                  S5        US
-   n	OGO‰U	S:  Gaˆ  U(       d  GOy[         R#                  X#5      (       a  GOaU" SU5      (       aP  US-   U:X  a  U R                  S5        GO7[.        R#                  X#5      (       a  GOU R1                  X#S-   S  5        GOU" SU5      (       aK  UnS H,  n
UR3                  X£S-   5      (       d  M  U[        U
5      -  n  O   U R1                  X#S-   U 5        OªU" SU5      (       a  U R5                  X#S-   S  5        O…X#US-    R7                  5       S:X  a  U R9                  X#S-   S  5        OUU" S	U5      (       a  U R1                  X#S-   S  5        O0U" SU5      (       a  U R;                  X#S-   S  5        O[=        S5      eUn	U R                  X95      nGOßU" SU5      (       a®  [>        R#                  X#5      nU(       a^  URA                  5       SS nU RC                  U5        URE                  5       n	U" SU	S
-
  5      (       d  U	S
-
  n	U R                  X95      nGMd  SX#S  ;   a*  U R                  X#US-    5        U R                  X3S-   5      nGO+U" SU5      (       Ga  [F        R#                  X#5      nU(       a\  URA                  S
5      nU RI                  U5        URE                  5       n	U" SU	S
-
  5      (       d  U	S
-
  n	U R                  X95      nGM  [J        R#                  X#5      nU(       aI  U(       aA  URA                  5       X#S  :X  a+  URE                  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
   é   )z--!z--Ú-é   ú	<![CDATA[é   é	   ú	<!doctypeúwe should not get here!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Ú
endtagopenÚhandle_commentr   Úunknown_declr=   Úhandle_declÚ	handle_piÚAssertionErrorÚcharrefr   Úhandle_charrefÚendÚ	entityrefÚhandle_entityrefÚ
incomplete)r#   ro   r(   ÚiÚnÚjÚampposr   r   ÚkÚsuffixÚnames               r   r/   ÚHTMLParser.goahead™   sj  € Ø—,‘,ˆØˆÜ�‹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“[¦CØ×$Ñ$ SÔ)Ø˜A™‘AáØ�q”5ÞÙÜ#×)Ñ)¨'×5Ñ5ÙÙ# D¨!×,Ñ,Ø˜q™5 A›:Ø ×,Ñ,¨TÖ2Ü'×-Ñ-¨g×9Ñ9Ù ð !×/Ñ/°¸!¹¸°Ö>Ù# F¨A×.Ñ.Ø˜Û&8˜FØ&×/Ñ/°¸!¹×<Ó<Ø !¤S¨£[Ñ 0 Ù %ñ '9ð ×+Ñ+¨G°a±C¸¨NÕ;Ù# K°×3Ñ3Ø×)Ñ)¨'°A±#°$¨-Õ8Ø  1 Q¡3˜×-Ñ-Ó/°;Ó>Ø×(Ñ(¨°1±°¨Õ7Ù# D¨!×,Ñ,à×+Ñ+¨G°a±C°D¨MÕ:Ù# D¨!×,Ñ,ØŸ™ w°©s¨t }Õ5ä,Ð-FÓGÐGØ�AØ—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ðw Žeöz �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()rQ   rL   rT   rR   rU   r   rW   r
   )r(   rd   Úparse_marked_sectionr=   rZ   rj   Úparse_bogus_comment)r#   rs   r(   Úgtposs       r   rf   Ú!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   rW   r
   )r(   rZ   rh   )r#   rs   Úreportr(   Úposs        r   r}   Ú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()rW   )r(   Úpicloser]   r^   rk   ro   )r#   rs   r(   r   ru   s        r   re   ÚHTMLParser.parse_piF  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   rS   Ú'rW   Ú")r   ú/>rŠ   )r9   Úcheck_for_whole_start_tagr(   Útagfind_tolerantr   ro   r   r=   r)   Úattrfind_tolerantr   ÚappendÚstripr_   r   Úhandle_startendtagÚhandle_starttagÚCDATA_CONTENT_ELEMENTSrB   )r#   rs   Úendposr(   Úattrsr   rw   ÚtagÚmÚattrnameÚrestÚ	attrvaluero   s                r   rb   ÚHTMLParser.parse_starttagR  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   rW   r'   z6abcdefghijklmnopqrstuvwxyz=/ABCDEFGHIJKLMNOPQRSTUVWXYZrV   )r(   Úlocatestarttagend_tolerantr   ro   r   rl   )r#   rs   r(   r–   ru   Únexts         r   r‹   Ú$HTMLParser.check_for_whole_start_tag~  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
   rW   rS   z</>r   )r(   Ú	endendtagr]   ro   Ú
endtagfindr   r,   r_   rŒ   r}   r   r=   rZ   Úhandle_endtagrE   )r#   rs   r(   r   r~   Ú	namematchÚtagnamerA   s           r   rc   Ú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#   ry   s     r   rn   ÚHTMLParser.handle_charrefÕ  r­   r   c                 ó   • g r   r«   r±   s     r   rq   ÚHTMLParser.handle_entityrefÙ  r­   r   c                 ó   • g r   r«   r0   s     r   r_   ÚHTMLParser.handle_dataÝ  r­   r   c                 ó   • g r   r«   r0   s     r   rh   ÚHTMLParser.handle_commentá  r­   r   c                 ó   • g r   r«   )r#   Údecls     r   rj   ÚHTMLParser.handle_declå  r­   r   c                 ó   • g r   r«   r0   s     r   rk   ÚHTMLParser.handle_pié  r­   r   c                 ó   • g r   r«   r0   s     r   ri   Ú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/   rf   r}   re   rb   r‹   rc   r�   r‘   r£   rn   rq   r_   rh   rj   rk   ri   Ú__static_attributes__Ú__classcell__)r$   s   @r   r   r   Q   s¢   ø† ñð* 1Ðà+/÷ ð õòòð €Oò$òNòòG#òX/ô*	ò	ò(òX8òD%òP ò
òòòòòòò÷ð r   )rÅ   r>   Ú_markupbaseÚhtmlr   Úhtml.entitiesr   r   Ú__all__r?   r*   rr   rp   rm   r   ra   rg   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˜+Ó&€Ø�ZŠZ˜Ó%€
Ø
�*Š*�S‹/€Ø�zŠz˜)Ó$€ð —:’:ÐLÓMÐ Ø—J’Jð=ó>Ð ð  ŸZšZð )ð ‡Z�ZóÐ ð �JŠJ�s‹O€	ð �ZŠZÐ>Ó?€
ò
ò6ô\�×'Ñ'õ \r   