Ë
    m]j~a  ã                   ó˜  — d dl Z d dlZd dlmZmZ d dlmZ d dlmZm	Z	 d dl
Z
ddlmZmZmZ  ed„ eD «       «      Z ed„ eD «       «      Z ed	„ e	D «       «      Ze ed
dg«      z  Z ej(                  d«      Zh d£Z ej(                  d«      Zi Zd„ Z G d„ d«      Z G d„ de«      Z G d„ de«      Z G d„ d«      Z G d„ d«      Zd„ Z y)é    N)ÚBytesIOÚStringIO)ÚPath)Úascii_lettersÚascii_uppercaseé   )ÚEOFÚReparseErrorÚspace_charactersc              #   ó<   K  — | ]  }|j                  «       –— Œ y ­w©N©Úencode©Ú.0Úitems     úL/var/www/zogu/zoguvenv/lib/python3.12/site-packages/tinyhtml5/inputstream.pyú	<genexpr>r      s   è ø€ Ò"N°T 4§;¡;§=Ñ"Nùó   ‚c              #   ó<   K  — | ]  }|j                  «       –— Œ y ­wr   r   r   s     r   r   r      s   è ø€ ÒH°$ §¡§ÑHùr   c              #   ó<   K  — | ]  }|j                  «       –— Œ y ­wr   r   r   s     r   r   r      s   è ø€ Ò!L°D $§+¡+§-Ñ!Lùr   ó   >ó   <u¡   [---ÂŸï·�-ï·¯ï¿¾ï¿¿ðŸ¿¾ðŸ¿¿ð¯¿¾ð¯¿¿ð¿¿¾ð¿¿¿ñ�¿¾ñ�¿¿ñŸ¿¾ñŸ¿¿ñ¯¿¾ñ¯¿¿ñ¿¿¾ñ¿¿¿ò�¿¾ò�¿¿òŸ¿¾òŸ¿¿ò¯¿¾ò¯¿¿ò¿¿¾ò¿¿¿ó�¿¾ó�¿¿óŸ¿¾óŸ¿¿ó¯¿¾ó¯¿¿ó¿¿¾ó¿¿¿ô�¿¾ô�¿¿í €-í¿¿]>    éþÿ éþÿ éþÿ éþÿ éþÿ éþÿ éþÿ éþÿ éþÿ	 éþÿ
 éþÿ éþÿ éþÿ éþÿ éþÿ éþÿ éÿÿ éÿÿ éÿÿ éÿÿ éÿÿ éÿÿ éÿÿ éÿÿ éÿÿ	 éÿÿ
 éÿÿ éÿÿ éÿÿ éÿÿ éÿÿ éÿÿ z[	- -/:-@\[-`{-~]c                 ó”  — t        | t        «      rJt        | «      dk  r<t        | «      j	                  «       r#t        t        | «      j                  «       fi |¤ŽS t        | t        «      rt        | j                  «       fi |¤ŽS t        t        | d«      r| j                  d«      n| t        «      rt        | fi |¤ŽS t        | fi |¤ŽS )NéÈ   Úreadr   )
Ú
isinstanceÚstrÚlenr   Úis_fileÚHTMLUnicodeInputStreamÚ	read_textÚhasattrr<   ÚHTMLBinaryInputStream)ÚsourceÚkwargss     r   ÚHTMLInputStreamrG   &   s£   € Ü�&œ#Ô¤3 v£;°Ò#4¼¸f»×9MÑ9MÔ9OÜ%¤d¨6£l×&<Ñ&<Ó&>ÑIÀ&ÑIÐIÜ	�FœDÔ	!Ü% f×&6Ñ&6Ó&8ÑC¸FÑCÐCÜ	¤g¨f°fÔ&=�F—K‘K ”NÀ6Ì3Ô	OÜ% fÑ7°Ñ7Ð7ä$ VÑ6¨vÑ6Ð6ó    c                   óH   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
dd	„Zd
„ Zy)rA   z×Provides a Unicode stream of characters to the HTMLTokenizer.

    This class takes care of character encoding and removing or replacing
    incorrect byte-sequences and also provides column and line tracking.

    c                 ó„   — dg| _         t        d«      df| _        | j                  |«      | _        | j                  «        y)z¸Initialise the HTMLInputStream.

        Create a normalized stream from source for use by tinyhtml5.

        source can be either a file-object, local filename or a string.

        r   úutf-8ÚcertainN)Ú	new_linesÚlookup_encodingÚencodingÚopen_streamÚstreamÚreset)ÚselfrE   rF   s      r   Ú__init__zHTMLUnicodeInputStream.__init__9   s9   € ð ˜ˆŒä(¨Ó1°9Ð=ˆŒØ×&Ñ& vÓ.ˆŒà�
‰
�rH   c                 óf   — d| _         d| _        d| _        g | _        d| _        d| _        d | _        y )NÚ r   )ÚchunkÚ
chunk_sizeÚchunk_offsetÚerrorsÚprevious_number_linesÚprevious_number_columnsÚ_buffered_character©rS   s    r   rR   zHTMLUnicodeInputStream.resetI   s;   € ØˆŒ
ØˆŒØˆÔØˆŒð &'ˆÔ"à'(ˆÔ$ð $(ˆÕ rH   c                 ó4   — t        |d«      r|S t        |«      S )zuProduce a file object from source.

        source can be either a file object, local filename or a string.

        r<   )rC   r   ©rS   rE   s     r   rP   z"HTMLUnicodeInputStream.open_streamW   s   € ô ! ¨Ô0ˆvÐF´h¸vÓ6FÐFrH   c                 óÌ   — | j                   }|j                  dd|«      }| j                  |z   }|j                  dd|«      }|dk(  r| j                  |z   }||fS ||dz   z
  }||fS )Nú
r   éÿÿÿÿr   )rW   Úcountr[   Úrfindr\   )rS   ÚoffsetrW   Únumber_linesÚposition_lineÚlast_line_positionÚposition_columns          r   Ú	_positionz HTMLUnicodeInputStream._position_   s‚   € Ø—
‘
ˆØ—{‘{ 4¨¨FÓ3ˆØ×2Ñ2°\ÑAˆØ"Ÿ[™[¨¨q°&Ó9ÐØ Ò#Ø"×:Ñ:¸VÑCˆOð ˜Ð/Ð/ð %Ð(:¸QÑ(>Ñ?ˆOØ˜Ð/Ð/rH   c                 óL   — | j                  | j                  «      \  }}|dz   |fS )z9Return (line, col) of the current position in the stream.r   )rk   rY   )rS   ÚlineÚcolumns      r   ÚpositionzHTMLUnicodeInputStream.positionj   s)   € à—~‘~ d×&7Ñ&7Ó8‰ˆˆfØ�q‘˜&Ð!Ð!rH   c                 ó®   — | j                   | j                  k\  r| j                  «       st        S | j                   }| j                  |   }|dz   | _         |S )zlRead one character from the stream or queue if available.

        Return EOF when EOF is reached.

        r   )rY   rX   Ú
read_chunkr	   rW   )rS   rY   Ú	characters      r   rr   z HTMLUnicodeInputStream.charactero   sQ   € ð ×Ñ §¡Ò/Ø—?‘?Ô$Ü�
à×(Ñ(ˆØ—J‘J˜|Ñ,ˆ	Ø(¨1Ñ,ˆÔàÐrH   c                 ó€  — | j                  | j                  «      \  | _        | _        d| _        d| _        d| _        | j                  j                  d«      }| j                  r| j                  |z   }d | _        n|syt        |«      dkD  r0t        |d   «      }|dk(  sd|cxk  rd	k  rn n|d   | _        |d d }t        t        t        j                  |«      «      «      D ]  }| j                  j                  d
«       Œ |j!                  dd«      }|j!                  dd«      }|| _        t        |«      | _        y)NrV   r   i (  Fr   rc   é   i Ø  iÿÛ  zinvalid-codepointz
rb   úT)rk   rX   r[   r\   rW   rY   rQ   r<   r]   r?   ÚordÚrangeÚinvalid_unicode_reÚfindallrZ   ÚappendÚreplace)rS   ÚdataÚlastÚ_s       r   rq   z!HTMLUnicodeInputStream.read_chunk€   s+  € ØCGÇ>Á>Ø�O‰OóDÑ@ˆÔ" DÔ$@ð ˆŒ
ØˆŒØˆÔà�{‰{×Ñ Ó&ˆð ×#Ò#Ø×+Ñ+¨dÑ2ˆDØ'+ˆDÕ$Ùàäˆt‹9�qŠ=Ü�t˜B‘x“=ˆDØ�tŠ|˜v¨Ô7°Õ7Ø+/°©8�Ô(Ø˜C˜R�y�ô ”sÔ-×5Ñ5°dÓ;Ó<Ó=ò 	4ˆAØ�K‰K×ÑÐ2Õ3ð	4ð �|‰|˜F DÓ)ˆØ�|‰|˜D $Ó'ˆàˆŒ
Ü˜d›)ˆŒàrH   c           
      ó¶  — 	 t         ||f   }g }	 |j                  | j                  | j                  «      }|€| j                  | j                  k7  rPn‰|j                  «       }|| j                  k7  r0|j                  | j                  | j                  | «       || _        n:|j                  | j                  | j                  d «       | j                  «       snŒËdj                  |«      S # t        $ rc dj                  |D �cg c]  }dt        |«      d›�‘Œ nc c}w c}«      }|sd|› �}t	        j
                  d|› d�«      }|x}t         ||f<   Y �ŒJw xY w)a   Return a string of characters from the stream.

        String goes up to but does not include any character in 'characters' or
        EOF. 'characters' must be a container that supports the 'in' method and
        iteration over its characters.

        rV   z\xÚ02xú^ú[z]+N)Úcharacters_until_regexÚKeyErrorÚjoinrv   ÚreÚcompileÚmatchrW   rY   rX   Úendrz   rq   )rS   Ú
charactersÚoppositerr   ÚregexÚresultrˆ   r‰   s           r   Úchars_untilz"HTMLUnicodeInputStream.chars_until¥   sS  € ð	PÜ/°¸XÐ0FÑGˆJð ˆàà×$Ñ$ T§Z¡Z°×1BÑ1BÓCˆEØˆ}ð ×$Ñ$¨¯©Ò7Øà—i‘i“k�ð ˜$Ÿ/™/Ò)Ø—M‘M $§*¡*¨T×->Ñ->¸sÐ"CÔDØ(+�DÔ%Øð �M‰M˜$Ÿ*™* T×%6Ñ%6Ð%7Ð8Ô9Ø—?‘?Ô$àð+ ð. �w‰w�v‹ÐøôA ò 	PØ—G‘GÈÖT¸I˜s¤3 y£>°#Ð"6Ò7ÑTùÔTÓUˆEÙØ˜E˜7˜�Ü—J‘J  5 '¨˜}Ó-ˆEØJOÐOˆJÔ/°¸XÐ0FÔGð	Pús   ‚C, Ã,EÄD
Ä:EÅEc                 óî   — |t         urm| j                  dk(  r*|| j                  z   | _        | xj                  dz  c_        y | xj                  dz  c_        | j                  | j                     |k(  sJ ‚y y )Nr   r   )r	   rY   rW   rX   )rS   Úchars     r   ÚungetzHTMLUnicodeInputStream.ungetÓ   sl   € ð ”s‰?Ø× Ñ  AÒ%ð
 " D§J¡JÑ.�”
Ø—’ 1Ñ$–à×!Ò! QÑ&Õ!Ø—z‘z $×"3Ñ"3Ñ4¸Ò<Ð<Ñ<ð rH   N)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rT   rR   rP   rk   ro   rr   rq   rŽ   r‘   © rH   r   rA   rA   1   s7   „ ñòò (òGò	0ò"ò
ò"#óJ,ó\=rH   rA   c                   óN   ‡ — e Zd ZdZ	 	 	 d	d„Zˆ fd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
ˆ xZS )
rD   zÕProvide a binary stream of characters to the HTMLTokenizer.

    This class takes care of character encoding and removing or replacing
    incorrect byte-sequences and also provides column and line tracking.

    c                 óð   — | j                  |«      | _        d| _        || _        || _        || _        || _        || _        | j                  «       | _	        | j                  d   €J ‚| j                  «        y )Ni   r   )rP   Ú
raw_streamÚnumber_bytes_metaÚoverride_encodingÚtransport_encodingÚsame_origin_parent_encodingÚlikely_encodingÚdefault_encodingÚdetermine_encodingrO   rR   )rS   rE   r›   rœ   r�   rž   rŸ   rF   s           r   rT   zHTMLBinaryInputStream.__init__ë   sz   € ð
 ×*Ñ*¨6Ó2ˆŒð
 "&ˆÔà!2ˆÔØ"4ˆÔØ+FˆÔ(Ø.ˆÔØ 0ˆÔð ×/Ñ/Ó1ˆŒØ�}‰}˜QÑÐ+Ð+Ð+ð 	�
‰
�rH   c                 ó˜   •— | j                   d   j                  j                  } || j                  d«      | _        t
        ‰| �  «        y )Nr   r{   )rO   Ú
codec_infoÚstreamreaderr™   rQ   ÚsuperrR   )rS   r£   Ú	__class__s     €r   rR   zHTMLBinaryInputStream.reset  s8   ø€ Ø—}‘} QÑ'×2Ñ2×?Ñ?ˆÙ" 4§?¡?°IÓ>ˆŒÜ‰‰�rH   c                 óŒ   — t        |d«      r.t        |d«      r|j                  «       r|S |j                  «       }t        |«      S )Nr<   Úseekable)rC   r§   r<   r   r`   s     r   rP   z!HTMLBinaryInputStream.open_stream	  s9   € Ü�6˜6Ô"Ü�v˜zÔ*¨v¯©Ô/@Ø�Ø—[‘[“]ˆFÜ�v‹ÐrH   c                 óè  — | j                  «       df}|d   �|S t        | j                  «      df}|d   �|S t        | j                  «      df}|d   �|S | j	                  «       df}|d   �|S t        | j
                  «      df}|d   � |d   j                  j                  d«      s|S t        | j                  «      df}|d   �|S t        | j                  «      df}|d   �|S t        d«      dfS )NrL   r   Ú	tentativezutf-16úwindows-1252)
Ú
detect_bomrN   r›   rœ   Údetect_encoding_metar�   ÚnameÚ
startswithrž   rŸ   )rS   rO   s     r   r    z(HTMLBinaryInputStream.determine_encoding  s/  € ð —?‘?Ó$ iÐ/ˆØ�A‰;Ð"ØˆOô # 4×#9Ñ#9Ó:¸IÐEˆØ�A‰;Ð"ØˆOô # 4×#:Ñ#:Ó;¸YÐFˆØ�A‰;Ð"ØˆOð ×,Ñ,Ó.°Ð;ˆØ�A‰;Ð"ØˆOô # 4×#CÑ#CÓDÀkÐQˆØ�A‰;Ð"¨8°A©;×+;Ñ+;×+FÑ+FÀxÔ+PØˆOô # 4×#7Ñ#7Ó8¸+ÐEˆØ�A‰;Ð"ØˆOô # 4×#8Ñ#8Ó9¸;ÐFˆØ�A‰;Ð"ØˆOô ˜~Ó.°Ð;Ð;rH   c                 óx  — | j                   d   dk7  sJ ‚t        |«      x}€y |j                  dv rt        d«      }|€J ‚y || j                   d   k(  r| j                   d   df| _         y | j                  j	                  d«       |df| _         | j                  «        t        d| j                   d   › d|› �«      ‚)Nr   rL   ©úutf-16beúutf-16lerK   r   zEncoding changed from z to )rO   rN   r­   r™   ÚseekrR   r
   )rS   Únew_encodings     r   Úchange_encodingz%HTMLBinaryInputStream.change_encoding8  sÇ   € Ø�}‰}˜QÑ 9Ò,Ð,Ð,Ü+¨LÓ9Ð9ˆLÐBØØ×ÑÐ 8Ñ8Ü*¨7Ó3ˆLØÐ+Ð+Ñ+Ø˜TŸ]™]¨1Ñ-Ò-Ø!Ÿ]™]¨1Ñ-¨yÐ9ˆD�Mà�O‰O× Ñ  Ô#Ø)¨9Ð5ˆDŒMØ�J‰JŒLÜØ(¨¯©°qÑ)9Ð(:¸$¸|¸nÐMóOð OrH   c           
      óÂ  — t         j                  dt         j                  dt         j                  dt         j                  dt         j
                  di}| j                  j                  d«      }t        |t        «      sJ ‚dD ]@  }|j                  |d| «      x}sŒ| j                  j                  |«       t        |«      c S  | j                  j                  d	«       y)
z´Attempt to detect at BOM at the start of the stream.

        If an encoding can be determined from the BOM return the name of the
        encoding otherwise return None.

        rK   r²   r±   zutf-32lezutf-32beé   )é   r·   é   Nr   )ÚcodecsÚBOM_UTF8ÚBOM_UTF16_LEÚBOM_UTF16_BEÚBOM_UTF32_LEÚBOM_UTF32_BEr™   r<   r=   ÚbytesÚgetr³   rN   )rS   ÚbomsÚstringr³   rO   s        r   r«   z HTMLBinaryInputStream.detect_bomH  sÂ   € ô �O‰O˜WÜ×Ñ Ü×Ñ Ü×Ñ Ü×Ñ ð
ˆð —‘×%Ñ% aÓ(ˆÜ˜&¤%Ô(Ð(Ð(ð ò 	1ˆDØŸ8™8 F¨5¨D MÓ2Ð2ˆxÑ2à—‘×$Ñ$ TÔ*Ü& xÓ0Ò0ð		1ð 	�‰×Ñ˜QÕrH   c                 ó  — | j                   j                  | j                  «      }t        |t        «      sJ ‚t        |«      }| j                   j                  d«       |j                  «       }|�|j                  dv rt        d«      }|S )z1Report the encoding declared by the meta element.r   r°   rK   )
r™   r<   rš   r=   rÀ   ÚEncodingParserr³   Úget_encodingr­   rN   )rS   ÚbufferÚparserrO   s       r   r¬   z*HTMLBinaryInputStream.detect_encoding_metae  sw   € à—‘×%Ñ% d×&<Ñ&<Ó=ˆÜ˜&¤%Ô(Ð(Ð(Ü Ó'ˆØ�‰×Ñ˜QÔØ×&Ñ&Ó(ˆàÐ H§M¡MÐ5MÑ$MÜ& wÓ/ˆHàˆrH   )NNNNrª   )r’   r“   r”   r•   rT   rR   rP   r    rµ   r«   r¬   Ú__classcell__)r¥   s   @r   rD   rD   ã   s:   ø„ ñð KOØCGØ"0óô2ò
ò&<òPOò  ö:rH   rD   c                   ór   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	 e
e	e«      Ze
d„ «       Zefd	„Zd
„ Zd„ Zd„ Zy)ÚEncodingBytesz«Bytes-like object with an associated position and various extra methods.

    If the position is ever greater than the string length then an exception is
    raised.

    c                 ón   — t        |t        «      sJ ‚t        j                  | |j                  «       «      S r   )r=   rÀ   Ú__new__Úlower)ÚclsÚvalues     r   rÍ   zEncodingBytes.__new__{  s)   € Ü˜%¤Ô'Ð'Ð'Ü�}‰}˜S %§+¡+£-Ó0Ð0rH   c                 ó   — d| _         y )Nrc   ©rk   )rS   rÐ   s     r   rT   zEncodingBytes.__init__  s	   € Øˆ�rH   c                 óf   — | j                   dz   x}| _         |t        | «      k\  rt        ‚| ||dz    S ©Nr   ©rk   r?   ÚStopIteration©rS   ro   s     r   Ú__next__zEncodingBytes.__next__‚  s:   € Ø$(§N¡N°QÑ$6Ð6ˆ�4”>Ø”s˜4“yÒ ÜÐØ�H˜X¨™\Ð*Ð*rH   c                 ó>   — | j                   dz
  x| _         }| ||dz    S rÔ   rÒ   r×   s     r   ÚpreviouszEncodingBytes.previousˆ  s(   € Ø$(§N¡N°QÑ$6Ð6ˆŒ˜Ø�H˜X¨™\Ð*Ð*rH   c                 ób   — | j                   t        | «      k\  rt        ‚t        d|«      | _         y ©Nr   )rk   r?   rÖ   Úmaxr×   s     r   Úset_positionzEncodingBytes.set_positionŒ  s&   € Ø�>‰>œS ›YÒ&ÜÐÜ˜Q Ó)ˆ�rH   c                 óv   — | j                   t        | «      k\  rt        ‚| j                   dk\  r| j                   S y rÜ   rÕ   r^   s    r   Úget_positionzEncodingBytes.get_position‘  s3   € Ø�>‰>œS ›YÒ&ÜÐØ�>‰>˜QÒØ—>‘>Ð!ð rH   c                 ó:   — | | j                   | j                   dz    S rÔ   )ro   r^   s    r   Úcurrent_bytezEncodingBytes.current_byte™  s   € à�D—M‘M $§-¡-°!Ñ"3Ð4Ð4rH   c                 ó˜   — | j                   }|t        | «      k  r)| ||dz    }||vr	|| _        |S |dz  }|t        | «      k  rŒ)|| _        y)zSkip past a list of characters.r   N©ro   r?   rk   ©rS   rŠ   ro   rr   s       r   ÚskipzEncodingBytes.skip�  s_   € à—=‘=ˆØœ˜T›Ò"Ø˜X h°¡lÐ3ˆIØ 
Ñ*Ø!)�”Ø Ð Ø˜‰MˆHð œ˜T›Ó"ð "ˆŒØrH   c                 ó˜   — | j                   }|t        | «      k  r)| ||dz    }||v r	|| _        |S |dz  }|t        | «      k  rŒ)|| _        y rÔ   rä   rå   s       r   Ú
skip_untilzEncodingBytes.skip_until©  s_   € Ø—=‘=ˆØœ˜T›Ò"Ø˜X h°¡lÐ3ˆIØ˜JÑ&Ø!)�”Ø Ð Ø˜‰MˆHð œ˜T›Ó"ð "ˆŒØrH   c                 ó~   — | j                  || j                  «      x}r| xj                  t        |«      z  c_        |S )zßLook for a sequence of bytes at the start of a string.

        If the bytes are found return True and advance the position to the byte
        after the match. Otherwise return False and leave the position alone.

        )r®   ro   r?   )rS   rÀ   r�   s      r   Úmatch_byteszEncodingBytes.match_bytes´  s5   € ð —_‘_ U¨D¯M©MÓ:Ð:ˆ6Ð:Ø�MŠMœS ›ZÑ'�MØˆrH   c                 óŒ   — 	 | j                  || j                  «      t        |«      z   dz
  | _        y# t        $ r t
        ‚w xY w)z™Look for the next sequence of bytes matching a given sequence.

        If a match is found advance the position to the last byte of the match.

        r   T)Úindexro   r?   rk   Ú
ValueErrorrÖ   )rS   rÀ   s     r   Újump_tozEncodingBytes.jump_to¿  sG   € ð	 Ø!ŸZ™Z¨¨t¯}©}Ó=ÄÀEÃ
ÑJÈQÑNˆDŒNð øô ò 	 ÜÐð	 ús	   ‚03 ³AN)r’   r“   r”   r•   rÍ   rT   rØ   rÚ   rÞ   rà   Úpropertyro   râ   Úspace_characters_bytesræ   rè   rê   rî   r–   rH   r   rË   rË   s  s^   „ ñò1òò+ò+ò*ò
"ñ ˜ lÓ3€Hàñ5ó ð5ð 5ó 
ò	ò	ó
rH   rË   c                   óF   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zy)rÅ   z@Mini parser for detecting character encoding from meta elements.c                 ó2   — t        |«      | _        d | _        y r   )rË   r|   rO   ©rS   r|   s     r   rT   zEncodingParser.__init__Ï  s   € Ü! $Ó'ˆŒ	Øˆ�rH   c                 ó  — d| j                   vry | j                  | j                  | j                  | j                  | j                  | j
                  dœ}| j                   D ]l  }d}	 | j                   j                  d«       |j                  «       D ]*  \  }}| j                   j                  |«      sŒ"	  |«       } n |rŒa | j                  S  | j                  S # t        $ r Y  | j                  S w xY w# t        $ r d}Y  ŒFw xY w)Nó   <meta)s   <!--rõ   s   </s   <!s   <?r   Tr   F)r|   Úhandle_commentÚhandle_metaÚhandle_possible_end_tagÚhandle_otherÚhandle_possible_start_tagrî   rÖ   Úitemsrê   rO   )rS   Úmethod_dispatchr~   Úkeep_parsingÚkeyÚmethods         r   rÆ   zEncodingParser.get_encodingÓ  s  € Ø˜4Ÿ9™9Ñ$Øð ×(Ñ(Ø×&Ñ&Ø×/Ñ/Ø×$Ñ$Ø×$Ñ$Ø×0Ñ0ñ
ˆð —‘ò 	ˆAØˆLðØ—	‘	×!Ñ! $Ô'ð  /×4Ñ4Ó6ò ‘��VØ—9‘9×(Ñ(¨Õ-ðÙ'-£x˜Ùð	ò  Øà�}‰}Ðð#	ð" �}‰}Ðøô !ò Ùð �}‰}Ððûô )ò Ø',˜Úðús$   Á'CÂ5C7Ã	C4Ã3C4Ã7DÄDc                 ó8   — | j                   j                  d«      S )zSkip over comments.s   -->©r|   rî   r^   s    r   rö   zEncodingParser.handle_commentò  s   € à�y‰y× Ñ  Ó(Ð(rH   c                 ó~  — | j                   j                  t        vryd}d }	 | j                  «       x}€y|d   dk(  r|d   dk(  }|rv|�t|| _        y|d   dk(  r|d   }t        |«      }|�R|| _        y|d   dk(  rBt        t        |d   «      «      }|j                  «       x}�t        |«      }|�|r|| _        y|}Œœ)	NTFr   s
   http-equivr   s   content-typeó   charsets   content)	r|   râ   rð   Úget_attributerO   rN   ÚContentAttributeParserrË   Úparse)rS   Ú
has_pragmaÚpending_encodingÚ	attributeÚtentative_encodingÚcodecÚcontent_parsers          r   r÷   zEncodingParser.handle_metaö  sù   € Ø�9‰9×!Ñ!Ô)?Ñ?ààˆ
ØÐØà!×/Ñ/Ó1Ð1�	Ð:Øà˜‰|˜}Ò,Ø& q™\¨_Ñ<�
ÙÐ"2Ð">Ø$4�D”MØ Ø˜1‘ Ò+Ø%.¨q¡\Ð"Ü'Ð(:Ó;�ØÐ$Ø$)�D”MØ Ø˜1‘ Ò+Ü!7¼ÀiÐPQÁlÓ8SÓ!T�Ø*8×*>Ñ*>Ó*@Ð@Ð&ÐMÜ+Ð,>Ó?�EØÐ(Ù%Ø,1˜DœMØ#(Ø+0Ð(ð1 rH   c                 ó&   — | j                  d¬«      S )NF©Úend_tag)Úhandle_possible_tagr^   s    r   rú   z(EncodingParser.handle_possible_start_tag  s   € Ø×'Ñ'°Ð'Ó6Ð6rH   c                 óP   — t        | j                  «       | j                  d¬«      S )NTr  )Únextr|   r  r^   s    r   rø   z&EncodingParser.handle_possible_end_tag  s!   € ÜˆT�Y‰YŒØ×'Ñ'°Ð'Ó5Ð5rH   c                 ó  — | j                   }|j                  t        vr#|r |j                  «        | j	                  «        y|j                  t        «      }|dk(  r|j                  «        y	 | j                  «       €	 yŒ)NTr   )r|   râ   Úascii_letters_bytesrÚ   rù   rè   Úspaces_angle_bracketsr  )rS   r  r|   rr   s       r   r  z"EncodingParser.handle_possible_tag  s}   € Ø�y‰yˆØ×ÑÔ$7Ñ7ñ Ø—‘”Ø×!Ñ!Ô#Øà—O‘OÔ$9Ó:ˆ	Ø˜Òð �M‰MŒOð ð Ø×%Ñ%Ó'Ð/ØØð rH   c                 ó8   — | j                   j                  d«      S )Nr   r  r^   s    r   rù   zEncodingParser.handle_other5  s   € Ø�y‰y× Ñ  Ó&Ð&rH   c                 ó¦  — | j                   }|j                  t        t        dg«      z  «      }|�t	        |«      dk(  sJ ‚|dv ryg }g }	 |dk(  r|rnx|t        v r|j                  «       }n_|dv rdj                  |«      dfS |t        v r |j                  |j                  «       «       n|€y|j                  |«       t        |«      }Œ€|dk7  r#|j                  «        dj                  |«      dfS t        |«       |j                  «       }|x}dv rx	 t        |«      }||k(  r-t        |«       dj                  |«      dj                  |«      fS |t        v r |j                  |j                  «       «       n|j                  |«       Œw|d	k(  rdj                  |«      dfS |t        v r |j                  |j                  «       «       n|€y|j                  |«       	 t        |«      }|t        v r"dj                  |«      dj                  |«      fS |t        v r |j                  |j                  «       «       n|€y|j                  |«       Œr)
z{Return a (name, value) pair for the next attribute in the stream.

        If no attribute is found, return None.

        ó   /Nr   )r   Nó   =)r  r   rH   )ó   'ó   "r   )r|   ræ   rð   Ú	frozensetr?   r…   Úascii_uppercase_bytesrz   rÎ   r  rÚ   r  )rS   r|   rr   Úattribute_nameÚattribute_valueÚquotes         r   r  zEncodingParser.get_attribute8  sJ  € ð �y‰yˆà—I‘IÔ4´yÀ$ÀÓ7HÑHÓIˆ	ØÐ ¤C¨	£N°aÒ$7Ð7Ð7à˜Ñ$ØàˆØˆàØ˜DÒ ¡^ØØÔ4Ñ4à ŸI™I›K�	ØØ˜lÑ*Ø—x‘x Ó/°Ð4Ð4ØÔ3Ñ3Ø×%Ñ% i§o¡oÓ&7Õ8ØÐ"Øà×%Ñ% iÔ0ä˜T›
ˆIð! ð$ ˜ÒØ�M‰MŒOØ—8‘8˜NÓ+¨SÐ0Ð0äˆTŒ
à—I‘I“Kˆ	àÐˆE <Ñ/àä  ›J�	à Ò%Ü˜”JØŸ8™8 NÓ3°S·X±X¸oÓ5NÐNÐNàÔ"7Ñ7Ø#×*Ñ*¨9¯?©?Ó+<Õ=ð $×*Ñ*¨9Ô5ð ð ˜$ÒØ—8‘8˜NÓ+¨SÐ0Ð0ØÔ/Ñ/Ø×"Ñ" 9§?¡?Ó#4Õ5ØÐØà×"Ñ" 9Ô-àÜ˜T›
ˆIØÔ1Ñ1Ø—x‘x Ó/°·±¸/Ó1JÐJÐJØÔ3Ñ3Ø×&Ñ& y§¡Ó'8Õ9ØÐ"Øà×&Ñ& yÔ1ð rH   N)r’   r“   r”   r•   rT   rÆ   rö   r÷   rú   rø   r  rù   r  r–   rH   r   rÅ   rÅ   Ì  s4   „ ÙJòòò>)ò1òB7ò6òò.'óL2rH   rÅ   c                   ó   — e Zd Zd„ Zd„ Zy)r  c                 ó6   — t        |t        «      sJ ‚|| _        y r   )r=   rÀ   r|   ró   s     r   rT   zContentAttributeParser.__init__ˆ  s   € Ü˜$¤Ô&Ð&Ð&Øˆ�	rH   c                 ó¢  — 	 | j                   j                  d«       | j                   xj                  dz  c_        | j                   j                  «        | j                   j                  dk(  sy | j                   xj                  dz  c_        | j                   j                  «        | j                   j                  dv rŠ| j                   j                  }| j                   xj                  dz  c_        | j                   j                  }| j                   j                  |«      r#| j                   || j                   j                   S y | j                   j                  }	 | j                   j                  t        «       | j                   || j                   j                   S # t        $ r | j                   |d  cY S w xY w# t        $ r Y y w xY w)Nr  r   r  )r  r  )r|   rî   ro   ræ   râ   rè   rð   rÖ   )rS   r   Úold_positions      r   r  zContentAttributeParser.parseŒ  s`  € ð	à�I‰I×Ñ˜jÔ)Ø�I‰I×Ò !Ñ#ÕØ�I‰I�N‰NÔØ—9‘9×)Ñ)¨TÒ1àØ�I‰I×Ò !Ñ#ÕØ�I‰I�N‰NÔà�y‰y×%Ñ%¨Ñ5ØŸ	™	×.Ñ.�Ø—	‘	×"Ò" aÑ'Õ"Ø#Ÿy™y×1Ñ1�Ø—9‘9×$Ñ$ UÔ+ØŸ9™9 \°$·)±)×2DÑ2DÐEÐEàð  $Ÿy™y×1Ñ1�ð4Ø—I‘I×(Ñ(Ô)?Ô@ØŸ9™9 \°$·)±)×2DÑ2DÐEÐEøÜ$ò 4àŸ9™9 \ ]Ð3Ò3ð4ûô ò 	Ùð	ús>   ‚A-G Á0CG ÅG Å"AF$ Æ$F?Æ<G Æ>F?Æ?G Ç	GÇGN)r’   r“   r”   rT   r  r–   rH   r   r  r  ‡  s   „ òórH   r  c                 ó´   — t        | t        «      r	 | j                  d«      } | �	 t	        j
                  | «      S y# t        $ r Y yw xY w# t        $ r Y yw xY w)z‡Return the Python codec name corresponding to an encoding.

    Return None if the string doesn't correspond to a valid encoding.

    ÚasciiN)r=   rÀ   ÚdecodeÚUnicodeDecodeErrorÚwebencodingsÚlookupÚAttributeError)rO   s    r   rN   rN   ­  sk   € ô �(œEÔ"ð	Ø—‘ wÓ/ˆHð Ðð	Ü×&Ñ& xÓ0Ð0ð øô "ò 	Ùð	ûô ò 	Ùð	ús    ’< ¦A ¼	AÁAÁ	AÁA)!rº   r†   Úior   r   Úpathlibr   rÃ   r   r   r)  Ú	constantsr	   r
   r   r  rð   r  r  r  r‡   rx   Únon_bmp_invalid_codepointsÚascii_punctuation_rerƒ   rG   rA   rD   rÀ   rË   rÅ   r  rN   r–   rH   r   ú<module>r1     só   ðÛ Û 	ß  Ý ß 1ã ç :Ñ :ñ #Ñ"NÐ=MÔ"NÓNÐ ÙÑH¸-ÔHÓHÐ Ù!Ñ!L¸OÔ!LÓLÐ Ø.±¸DÀ$¸<Ó1HÑHÐ à�R—Z‘Zð=ó>Ð òNÐ ð "�r—z‘zØOóQÐ ð Ð ò7÷o=ñ o=ôdMÐ2ô Mô`V�Eô V÷rx2ñ x2÷v#ñ #óLrH   