Ë
    ¤2Úi,~  ã                   ó"  — d dl mZmZmZ d dlmZ d dlmZmZ d dl	Z	d dl
Z
d dlmZmZ d dlZddlmZmZmZmZ ddlmZ dd	lmZ  eeD � cg c]  } | j1                  d
«      ‘Œ c} «      Z eeD � cg c]  } | j1                  d
«      ‘Œ c} «      Z eeD � cg c]  } | j1                  d
«      ‘Œ c} «      Ze eddg«      z  ZdZej<                  r@ed   dk(  rej?                  d«      dk(  sJ ‚ e
j@                  edd  e!d«      z   dz   «      Z"n e
j@                  e«      Z"h d£Z# e
j@                  d«      Z$i Z% G d„ de&«      Z'd„ Z( G d„ de&«      Z) G d„ de)«      Z* G d„ de+«      Z, G d„ de&«      Z- G d„ de&«      Z.d „ Z/yc c} w c c} w c c} w )!é    )Úabsolute_importÚdivisionÚunicode_literals)Ú	text_type)Úhttp_clientÚurllibN)ÚBytesIOÚStringIOé   )ÚEOFÚspaceCharactersÚasciiLettersÚasciiUppercase)Ú_ReparseException)Ú_utilsÚasciió   >ó   <uš   [---ÂŸï·�-ï·¯ï¿¾ï¿¿ðŸ¿¾ðŸ¿¿ð¯¿¾ð¯¿¿ð¿¿¾ð¿¿¿ñ�¿¾ñ�¿¿ñŸ¿¾ñŸ¿¿ñ¯¿¾ñ¯¿¿ñ¿¿¾ñ¿¿¿ò�¿¾ò�¿¿òŸ¿¾òŸ¿¿ò¯¿¾ò¯¿¿ò¿¿¾ò¿¿¿ó�¿¾ó�¿¿óŸ¿¾óŸ¿¿ó¯¿¾ó¯¿¿ó¿¿¾ó¿¿¿ô�¿¾ô�¿¿]éÿÿÿÿú]z"\uD800-\uDFFF">    éþÿ éþÿ éþÿ éþÿ éþÿ éþÿ éþÿ éþÿ éþÿ	 éþÿ
 éþÿ éþÿ éþÿ éþÿ éþÿ éþÿ éÿÿ éÿÿ éÿÿ éÿÿ éÿÿ éÿÿ éÿÿ éÿÿ éÿÿ	 éÿÿ
 éÿÿ éÿÿ éÿÿ éÿÿ éÿÿ éÿÿ z[	- -/:-@\[-`{-~]c                   ó:   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)
ÚBufferedStreamzÆBuffering for streams that do not have buffering of their own

    The buffer is implemented as a list of chunks on the assumption that
    joining many strings will be slow since it is O(n**2)
    c                 ó2   — || _         g | _        ddg| _        y )Nr   r   )ÚstreamÚbufferÚposition)Úselfr:   s     úL/var/www/html/acx/venv/lib/python3.12/site-packages/html5lib/_inputstream.pyÚ__init__zBufferedStream.__init__:   s   € ØˆŒØˆŒØ˜Q˜ˆ�ó    c                 óŒ   — d}| j                   d | j                  d    D ]  }|t        |«      z  }Œ || j                  d   z  }|S ©Nr   r   )r;   r<   Úlen)r=   ÚposÚchunks      r>   ÚtellzBufferedStream.tell?   sQ   € ØˆØ—[‘[Ð!2 $§-¡-°Ñ"2Ð3ò 	ˆEØ”3�u“:Ñ‰Cð	àˆt�}‰}˜QÑÑˆØˆ
r@   c                 óö   — || j                  «       k  sJ ‚|}d}t        | j                  |   «      |k  r<|t        | j                  |   «      z  }|dz  }t        | j                  |   «      |k  rŒ<||g| _        y rB   )Ú_bufferedBytesrC   r;   r<   )r=   rD   ÚoffsetÚis       r>   ÚseekzBufferedStream.seekF   s|   € Ø�d×)Ñ)Ó+Ò+Ð+Ð+ØˆØˆÜ�$—+‘+˜a‘.Ó! FÒ*Ø”c˜$Ÿ+™+ a™.Ó)Ñ)ˆFØ�‰FˆAô �$—+‘+˜a‘.Ó! FÓ*ð ˜F˜ˆ�r@   c                 ó  — | j                   s| j                  |«      S | j                  d   t        | j                   «      k(  r9| j                  d   t        | j                   d   «      k(  r| j                  |«      S | j	                  |«      S )Nr   r   r   )r;   Ú_readStreamr<   rC   Ú_readFromBuffer©r=   Úbytess     r>   ÚreadzBufferedStream.readO   st   € Ø�{Š{Ø×#Ñ# EÓ*Ð*Ø�m‰m˜AÑ¤# d§k¡kÓ"2Ò2Ø�m‰m˜AÑ¤# d§k¡k°"¡oÓ"6Ò6Ø×#Ñ# EÓ*Ð*à×'Ñ'¨Ó.Ð.r@   c                 ód   — t        | j                  D �cg c]  }t        |«      ‘Œ c}«      S c c}w ©N)Úsumr;   rC   )r=   Úitems     r>   rH   zBufferedStream._bufferedBytesX   s#   € Ü¨$¯+©+Ö6 $”C˜•IÒ6Ó7Ð7ùÒ6s   ”-c                 óÐ   — | j                   j                  |«      }| j                  j                  |«       | j                  dxx   dz  cc<   t        |«      | j                  d<   |S rB   )r:   rQ   r;   Úappendr<   rC   )r=   rP   Údatas      r>   rM   zBufferedStream._readStream[   sS   € Ø�{‰{×Ñ Ó&ˆØ�‰×Ñ˜4Ô Ø�‰�aÓ˜AÑÓÜ˜t›9ˆ�‰�aÑØˆr@   c                 ó  — |}g }| j                   d   }| j                   d   }|t        | j                  «      k  rœ|dk7  r—|dkD  sJ ‚| j                  |   }|t        |«      |z
  k  r|}|||z   g| _         n%t        |«      |z
  }|t        |«      g| _         |dz  }|j                  ||||z    «       ||z  }d}|t        | j                  «      k  r|dk7  rŒ—|r |j                  | j	                  |«      «       dj                  |«      S )Nr   r   r@   )r<   rC   r;   rW   rM   Újoin)r=   rP   ÚremainingBytesÚrvÚbufferIndexÚbufferOffsetÚbufferedDataÚbytesToReads           r>   rN   zBufferedStream._readFromBufferb   s  € ØˆØˆØ—m‘m AÑ&ˆØ—}‘} QÑ'ˆØœC §¡Ó,Ò,°À1Ò1DØ! AÒ%Ð%Ð%ØŸ;™; {Ñ3ˆLà¤ \Ó!2°\Ñ!AÒAØ,�Ø!,¨l¸[Ñ.HÐ I�•ä! ,Ó/°,Ñ>�Ø!,¬c°,Ó.?Ð @�”Ø˜qÑ �Ø�I‰I�l <°¸{Ñ0JÐKÔLØ˜kÑ)ˆNàˆLð œC §¡Ó,Ò,°À1Ó1Dñ  Ø�I‰I�d×&Ñ& ~Ó6Ô7à�x‰x˜‹|Ðr@   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r?   rF   rK   rQ   rH   rM   rN   © r@   r>   r8   r8   3   s*   „ ñò ò
ò$ò/ò8òór@   r8   c                 óä  — t        | t        j                  «      sHt        | t        j                  j
                  «      r't        | j                  t        j                  «      rd}n<t        | d«      r t        | j                  d«      t        «      }nt        | t        «      }|r=|D �cg c]  }|j                  d«      sŒ|‘Œ }}|rt        d|z  «      ‚t        | fi |¤ŽS t        | fi |¤ŽS c c}w )NFrQ   r   Ú	_encodingz3Cannot set an encoding with a unicode input, set %r)Ú
isinstancer   ÚHTTPResponser   ÚresponseÚaddbaseÚfpÚhasattrrQ   r   ÚendswithÚ	TypeErrorÚHTMLUnicodeInputStreamÚHTMLBinaryInputStream)ÚsourceÚkwargsÚ	isUnicodeÚxÚ	encodingss        r>   ÚHTMLInputStreamrw   }   sÇ   € ô 	�6œ;×3Ñ3Ô4ä	�FœFŸO™O×3Ñ3Ô	4Ü	�F—I‘Iœ{×7Ñ7Ô	8Ø‰	Ü	�˜Ô	 Ü˜vŸ{™{¨1›~¬yÓ9‰	ä˜v¤yÓ1ˆ	áØ &ÖB˜1¨!¯*©*°[Õ*A’QÐBˆ	ÐBÙÜÐQÐT]Ñ]Ó^Ð^ä% fÑ7°Ñ7Ð7ä$ VÑ6¨vÑ6Ð6ùò Cs   Â(C-Â?C-c                   óZ   — 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d„ Zdd„Zd„ Zy	)rp   ú×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.

    i (  c                 ó  — t         j                  sd| _        n1t        d«      dk(  r| j                  | _        n| j
                  | _        dg| _        t        d«      df| _        | j                  |«      | _
        | j                  «        y)á¿  Initialises the HTMLInputStream.

        HTMLInputStream(source, [encoding]) -> Normalized stream from source
        for use by html5lib.

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

        The optional encoding parameter must be a string that indicates
        the encoding.  If specified, that encoding will be used,
        regardless of any BOM or later declaration (such as in a meta
        element)

        Nu   ô�¿¿r   r   úutf-8Úcertain)r   Úsupports_lone_surrogatesÚreportCharacterErrorsrC   ÚcharacterErrorsUCS4ÚcharacterErrorsUCS2ÚnewLinesÚlookupEncodingÚcharEncodingÚ
openStreamÚ
dataStreamÚreset)r=   rr   s     r>   r?   zHTMLUnicodeInputStream.__init__ž   sv   € ô ×.Ò.ð *.ˆDÕ&Ü�Ó !Ò#Ø)-×)AÑ)AˆDÕ&à)-×)AÑ)AˆDÔ&ð ˜ˆŒä+¨GÓ4°iÐ@ˆÔØŸ/™/¨&Ó1ˆŒà�
‰
�r@   c                 óf   — d| _         d| _        d| _        g | _        d| _        d| _        d | _        y )NÚ r   )rE   Ú	chunkSizeÚchunkOffsetÚerrorsÚprevNumLinesÚprevNumColsÚ_bufferedCharacter©r=   s    r>   r‡   zHTMLUnicodeInputStream.reset¾   s;   € ØˆŒ
ØˆŒØˆÔØˆŒð ˆÔàˆÔð #'ˆÕr@   c                 ó<   — t        |d«      r|}|S t        |«      }|S ©zvProduces a file object from source.

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

        rQ   )rm   r
   ©r=   rr   r:   s      r>   r…   z!HTMLUnicodeInputStream.openStreamÌ   s+   € ô �6˜6Ô"ØˆFð ˆô ˜fÓ%ˆFàˆr@   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   r   )rE   Úcountr�   ÚrfindrŽ   )r=   rI   rE   ÚnLinesÚpositionLineÚlastLinePosÚpositionColumns          r>   Ú	_positionz HTMLUnicodeInputStream._positionÚ   s   € Ø—
‘
ˆØ—‘˜T 1 fÓ-ˆØ×(Ñ(¨6Ñ1ˆØ—k‘k $¨¨6Ó2ˆØ˜"ÒØ!×-Ñ-°Ñ6ˆNð ˜nÐ-Ð-ð $ {°Q¡Ñ7ˆNØ˜nÐ-Ð-r@   c                 óL   — | j                  | j                  «      \  }}|dz   |fS )z:Returns (line, col) of the current position in the stream.r   )rœ   r‹   )r=   ÚlineÚcols      r>   r<   zHTMLUnicodeInputStream.positionå   s(   € à—N‘N 4×#3Ñ#3Ó4‰	ˆˆcØ�q‘˜#ˆÐr@   c                 ó®   — | j                   | j                  k\  r| j                  «       st        S | j                   }| j                  |   }|dz   | _         |S )zo Read one character from the stream or queue if available. Return
            EOF when EOF is reached.
        r   )r‹   rŠ   Ú	readChunkr   rE   )r=   r‹   Úchars      r>   r¢   zHTMLUnicodeInputStream.charê   sO   € ð
 ×Ñ˜tŸ~™~Ò-Ø—>‘>Ô#Ü�
à×&Ñ&ˆØ�z‰z˜+Ñ&ˆØ&¨™?ˆÔàˆr@   Nc                 óH  — |€| j                   }| j                  | j                  «      \  | _        | _        d| _        d| _        d| _        | j                  j                  |«      }| 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 }| j                  r| j                  |«       |j                  d	d
«      }|j                  dd
«      }|| _        t        |«      | _        y)Nr‰   r   Fr   r   é   é Ø  iÿÛ  z
r•   úT)Ú_defaultChunkSizerœ   rŠ   r�   rŽ   rE   r‹   r†   rQ   r�   rC   Úordr   Úreplace)r=   rŠ   rX   Úlastvs       r>   r¡   z HTMLUnicodeInputStream.readChunkù   s  € ØÐØ×.Ñ.ˆIà.2¯n©n¸T¿^¹^Ó.LÑ+ˆÔ˜4Ô+àˆŒ
ØˆŒØˆÔà�‰×#Ñ# IÓ.ˆð ×"Ò"Ø×*Ñ*¨TÑ1ˆDØ&*ˆDÕ#Ùàäˆt‹9�qŠ=Ü˜˜R™“MˆEØ˜Š} ¨%Ô 9°6Õ 9Ø*.¨r©(�Ô'Ø˜C˜R�y�à×%Ò%Ø×&Ñ& tÔ,ð �|‰|˜F DÓ)ˆØ�|‰|˜D $Ó'ˆàˆŒ
Ü˜T›ˆŒàr@   c                 ó’   — t        t        t        j                  |«      «      «      D ]  }| j                  j                  d«       Œ y )Núinvalid-codepoint)ÚrangerC   Úinvalid_unicode_reÚfindallrŒ   rW   )r=   rX   Ú_s      r>   r€   z*HTMLUnicodeInputStream.characterErrorsUCS4  s:   € Ü”sÔ-×5Ñ5°dÓ;Ó<Ó=ò 	4ˆAØ�K‰K×ÑÐ2Õ3ñ	4r@   c                 óô  — d}t         j                  |«      D ]Þ  }|rŒt        |j                  «       «      }|j	                  «       }t        j                  |||dz    «      rAt        j                  |||dz    «      }|t        v r| j                  j                  d«       d}Œ‹|dk\  r2|dk  r-|t        |«      dz
  k(  r| j                  j                  d«       ŒÂd}| j                  j                  d«       Œà y )NFé   r¬   Tr¥   iÿß  r   )r®   Úfinditerr¨   ÚgroupÚstartr   ÚisSurrogatePairÚsurrogatePairToCodepointÚnon_bmp_invalid_codepointsrŒ   rW   rC   )r=   rX   ÚskipÚmatchÚ	codepointrD   Úchar_vals          r>   r�   z*HTMLUnicodeInputStream.characterErrorsUCS2#  sã   € ð ˆÜ'×0Ñ0°Ó6ò 	8ˆEÙØÜ˜EŸK™K›MÓ*ˆIØ—+‘+“-ˆCä×%Ñ% d¨3¨s°Q©wÐ&7Ô8ä!×:Ñ:¸4ÀÀCÈ!ÁGÐ;LÓM�ØÔ9Ñ9Ø—K‘K×&Ñ&Ð':Ô;Ø‘Ø˜vÒ%¨)°vÒ*=Øœ˜T› Q™Ò&Ø—‘×"Ñ"Ð#6Õ7à�Ø—‘×"Ñ"Ð#6Õ7ñ#	8r@   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        $ rw 	 |D ]  }t        |«      dk  rŒJ ‚ dj                  |D �cg c]  }dt        |«      z  ‘Œ nc c}w c}«      }|sd|z  }t	        j
                  d|z  «      x}t         ||f<   Y �Œ`w xY w)zð Returns a string of characters from the stream up to but not
        including any character in 'characters' or EOF. 'characters' must be
        a container that supports the 'in' method and iteration over its
        characters.
        é€   r‰   z\x%02xz^%sz[%s]+N)ÚcharsUntilRegExÚKeyErrorr¨   rZ   ÚreÚcompilerº   rE   r‹   rŠ   ÚendrW   r¡   )
r=   Ú
charactersÚoppositeÚcharsÚcÚregexr\   ÚmrÃ   Úrs
             r>   Ú
charsUntilz!HTMLUnicodeInputStream.charsUntil:  sg  € ð		ZÜ# Z°Ð$:Ñ;ˆEð ˆàà—‘˜DŸJ™J¨×(8Ñ(8Ó9ˆAØˆyð ×#Ñ# t§~¡~Ò5Øà—e‘e“g�ð ˜$Ÿ.™.Ò(Ø—I‘I˜dŸj™j¨×)9Ñ)9¸#Ð>Ô?Ø'*�DÔ$Øð �I‰I�d—j‘j ×!1Ñ!1Ð!2Ð3Ô4Ø—>‘>Ô#àð+ ð. �G‰G�B‹KˆØˆøôG ò 	ZØØ#ò )�AÜ˜q›6 C›<Ð(˜<ð)à—G‘G¸ÖD°A˜Y¬¨Q«Ó/ÑDùÔDÓEˆEÙØ ™�Ü>@¿j¹jÈÐSXÉÓ>YÐYˆE”O Z°Ð$:Ô;ð	Zús#   ‚C. Ã.E.ÄE.ÄD4
Ä37E.Å-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 rB   )r   r‹   rE   rŠ   )r=   r¢   s     r>   ÚungetzHTMLUnicodeInputStream.ungeti  sl   € ð ”s‰?Ø×Ñ 1Ò$ð " D§J¡JÑ.�”
Ø—’ !Ñ#–à× Ò  AÑ%Õ Ø—z‘z $×"2Ñ"2Ñ3°tÒ;Ð;Ñ;ð r@   rS   )F)ra   rb   rc   rd   r§   r?   r‡   r…   rœ   r<   r¢   r¡   r€   r�   rË   rÍ   re   r@   r>   rp   rp   ”   sI   „ ñð Ðòò@'òò	.òò
ó$òL4ò8ó.-ó^<r@   rp   c                   óD   — e Zd ZdZ	 	 	 d
d„Zd„ Zd„ Zdd„Zd„ Zd„ Z	d	„ Z
y)rq   ry   Nc                 ó@  — | j                  |«      | _        t        j                  | | j                  «       d| _        d| _        || _        || _        || _        || _	        || _
        | j                  |«      | _        | j                  d   €J ‚| j                  «        y)r{   i   éd   r   N)r…   Ú	rawStreamrp   r?   ÚnumBytesMetaÚnumBytesChardetÚoverride_encodingÚtransport_encodingÚsame_origin_parent_encodingÚlikely_encodingÚdefault_encodingÚdetermineEncodingr„   r‡   )r=   rr   rÔ   rÕ   rÖ   r×   rØ   Ú
useChardets           r>   r?   zHTMLBinaryInputStream.__init__‚  s™   € ð$ Ÿ™¨Ó0ˆŒä×'Ñ'¨¨d¯n©nÔ=ð
 !ˆÔà"ˆÔà!2ˆÔØ"4ˆÔØ+FˆÔ(Ø.ˆÔØ 0ˆÔð !×2Ñ2°:Ó>ˆÔØ× Ñ  Ñ#Ð/Ð/Ð/ð 	�
‰
�r@   c                 óž   — | j                   d   j                  j                  | j                  d«      | _        t
        j                  | «       y )Nr   r©   )r„   Ú
codec_infoÚstreamreaderrÑ   r†   rp   r‡   r�   s    r>   r‡   zHTMLBinaryInputStream.reset¬  s:   € Ø×+Ñ+¨AÑ.×9Ñ9×FÑFÀtÇ~Á~ÐW`ÓaˆŒÜ×$Ñ$ TÕ*r@   c                 ó°   — t        |d«      r|}nt        |«      }	 |j                  |j                  «       «       |S # t        $ r t        |«      }Y |S w xY wr’   )rm   r	   rK   rF   Ú	Exceptionr8   r“   s      r>   r…   z HTMLBinaryInputStream.openStream°  sZ   € ô �6˜6Ô"Ø‰Fä˜V“_ˆFð	,Ø�K‰K˜Ÿ™›Ô&ð ˆøô ò 	,Ü# FÓ+‰Fàˆð	,ús   œ= ½AÁA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 |rÎ	 ddl	m
} g } |«       }|j                  si| j                  j                  | j                  «      }t        |t         «      sJ ‚|sn/|j#                  |«       |j%                  |«       |j                  sŒi|j'                  «        t        |j(                  d   «      }| j                  j+                  d«       |�|dfS t        | j.                  «      df}|d   �|S t        d«      dfS # t,        $ r Y Œ6w xY w)Nr}   r   Ú	tentativezutf-16)ÚUniversalDetectorÚencodingúwindows-1252)Ú	detectBOMrƒ   rÔ   rÕ   ÚdetectEncodingMetarÖ   ÚnameÚ
startswithr×   Úchardet.universaldetectorrâ   ÚdonerÑ   rQ   rÓ   rh   rP   rW   ÚfeedÚcloseÚresultrK   ÚImportErrorrØ   )r=   Úchardetr„   râ   ÚbuffersÚdetectorr;   rã   s           r>   rÙ   z'HTMLBinaryInputStream.determineEncodingÃ  s   € ð —~‘~Ó'¨Ð2ˆØ˜‰?Ð&ØÐô & d×&<Ñ&<Ó=¸yÐHˆØ˜‰?Ð&ØÐô & d×&=Ñ&=Ó>À	ÐIˆØ˜‰?Ð&ØÐð ×.Ñ.Ó0°+Ð=ˆØ˜‰?Ð&ØÐô & d×&FÑ&FÓGÈÐTˆØ˜‰?Ð&¨|¸A©×/CÑ/C×/NÑ/NÈxÔ/XØÐô & d×&:Ñ&:Ó;¸[ÐHˆØ˜‰?Ð&ØÐñ ð1ÝGð �Ù,Ó.�Ø"Ÿ-š-Ø!Ÿ^™^×0Ñ0°×1EÑ1EÓF�FÜ% f¬eÔ4Ð4Ð4Ù!ØØ—N‘N 6Ô*Ø—M‘M &Ô)ð #Ÿ-›-ð —‘Ô Ü)¨(¯/©/¸*Ñ*EÓF�Ø—‘×#Ñ# AÔ&ØÐ'Ø# [Ð0Ð0ô & d×&;Ñ&;Ó<¸kÐIˆØ˜‰?Ð&ØÐô ˜nÓ-¨{Ð:Ð:øô1 ò Ùðús   ÃG Ç	GÇGc                 óx  — | j                   d   dk7  sJ ‚t        |«      }|€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   r}   ©úutf-16beúutf-16ler|   r   zEncoding changed from z to )r„   rƒ   rç   rÑ   rK   r‡   r   )r=   ÚnewEncodings     r>   ÚchangeEncodingz$HTMLBinaryInputStream.changeEncoding  sÃ   € Ø× Ñ  Ñ# yÒ0Ð0Ð0Ü$ [Ó1ˆØÐØØ×ÑÐ7Ñ7Ü(¨Ó1ˆKØÐ*Ð*Ñ*Ø˜D×-Ñ-¨aÑ0Ò0Ø!%×!2Ñ!2°1Ñ!5°yÐ AˆDÕà�N‰N×Ñ Ô"Ø!,¨iÐ 8ˆDÔØ�J‰JŒLÝ#È×HYÑHYÐZ[ÓH\Ñ^iÐ$jÓkÐkr@   c           
      ó  — t         j                  dt         j                  dt         j                  dt         j                  dt         j
                  di}| j                  j                  d«      }t        |t        «      sJ ‚|j                  |dd «      }d}|s+|j                  |«      }d}|s|j                  |dd	 «      }d	}|r&| j                  j                  |«       t        |«      S | j                  j                  d
«       y)z©Attempts 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 Noner|   rõ   rô   zutf-32lezutf-32beé   Né   r²   r   )ÚcodecsÚBOM_UTF8ÚBOM_UTF16_LEÚBOM_UTF16_BEÚBOM_UTF32_LEÚBOM_UTF32_BErÑ   rQ   rh   rP   ÚgetrK   rƒ   )r=   ÚbomDictÚstringrã   rK   s        r>   rå   zHTMLBinaryInputStream.detectBOM  sè   € ô
 �O‰O˜WÜ×Ñ ¬V×-@Ñ-@À*Ü×Ñ ¬V×-@Ñ-@À*ð
ˆð —‘×$Ñ$ QÓ'ˆÜ˜&¤%Ô(Ð(Ð(ð —;‘;˜v b q˜zÓ*ˆØˆÙà—{‘{ 6Ó*ˆHØˆDÙØ"Ÿ;™; v¨b¨q zÓ2�Ø�ñ Ø�N‰N×Ñ Ô%Ü! (Ó+Ð+à�N‰N×Ñ Ô"Ør@   c                 ó  — | j                   j                  | j                  «      }t        |t        «      sJ ‚t        |«      }| j                   j                  d«       |j                  «       }|�|j                  dv rt        d«      }|S )z9Report the encoding declared by the meta element
        r   ró   r|   )
rÑ   rQ   rÒ   rh   rP   ÚEncodingParserrK   ÚgetEncodingrç   rƒ   )r=   r;   Úparserrã   s       r>   ræ   z(HTMLBinaryInputStream.detectEncodingMeta3  sy   € ð —‘×$Ñ$ T×%6Ñ%6Ó7ˆÜ˜&¤%Ô(Ð(Ð(Ü Ó'ˆØ�‰×Ñ˜AÔØ×%Ñ%Ó'ˆàÐ H§M¡MÐ5MÑ$MÜ% gÓ.ˆHàˆr@   )NNNNrä   T)T)ra   rb   rc   rd   r?   r‡   r…   rÙ   r÷   rå   ræ   re   r@   r>   rq   rq   z  s;   „ ñð KOØCGØ=Aó(òT+òó&<;ò|lò  óDr@   rq   c                   ó„   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Z eee
«      Zd
„ Z ee«      Zefd„Zd„ Zd„ Zd„ Zy)ÚEncodingBytesz£String-like object with an associated position and various extra methods
    If the position is ever greater than the string length then an exception is
    raisedc                 ón   — t        |t        «      sJ ‚t        j                  | |j                  «       «      S rS   )rh   rP   Ú__new__Úlower©r=   Úvalues     r>   r  zEncodingBytes.__new__F  s)   € Ü˜%¤Ô'Ð'Ð'Ü�}‰}˜T 5§;¡;£=Ó1Ð1r@   c                 ó   — d| _         y )Nr   )rœ   r  s     r>   r?   zEncodingBytes.__init__J  s	   € àˆ�r@   c                 ó   — | S rS   re   r�   s    r>   Ú__iter__zEncodingBytes.__iter__N  s   € Øˆr@   c                 ó|   — | j                   dz   x}| _         |t        | «      k\  rt        ‚|dk  rt        ‚| ||dz    S )Nr   r   ©rœ   rC   ÚStopIterationro   ©r=   Úps     r>   Ú__next__zEncodingBytes.__next__Q  sD   € Ø!Ÿ^™^¨aÑ/Ð/ˆˆDŒNØ”�D“	Š>ÜÐØ�ŠUÜˆOØ�A�a˜!‘eˆ}Ðr@   c                 ó"   — | j                  «       S rS   )r  r�   s    r>   ÚnextzEncodingBytes.nextY  s   € à�}‰}‹Ðr@   c                 ó€   — | j                   }|t        | «      k\  rt        ‚|dk  rt        ‚|dz
  x| _         }| ||dz    S rB   r  r  s     r>   ÚpreviouszEncodingBytes.previous]  sH   € Ø�N‰NˆØ”�D“	Š>ÜÐØ�ŠUÜˆOØ ™UÐ"ˆŒ˜Ø�A�a˜!‘eˆ}Ðr@   c                 óN   — | j                   t        | «      k\  rt        ‚|| _         y rS   ©rœ   rC   r  )r=   r<   s     r>   ÚsetPositionzEncodingBytes.setPositionf  s   € Ø�>‰>œS ›YÒ&ÜÐØ!ˆ�r@   c                 óv   — | j                   t        | «      k\  rt        ‚| j                   dk\  r| j                   S y )Nr   r  r�   s    r>   ÚgetPositionzEncodingBytes.getPositionk  s1   € Ø�>‰>œS ›YÒ&ÜÐØ�>‰>˜QÒØ—>‘>Ð!àr@   c                 ó:   — | | j                   | j                   dz    S ©Nr   )r<   r�   s    r>   ÚgetCurrentBytezEncodingBytes.getCurrentByteu  s   € Ø�D—M‘M $§-¡-°!Ñ"3Ð4Ð4r@   c                 ó˜   — | j                   }|t        | «      k  r)| ||dz    }||vr	|| _        |S |dz  }|t        | «      k  rŒ)|| _        y)zSkip past a list of charactersr   N©r<   rC   rœ   ©r=   rÆ   r  rÇ   s       r>   r¹   zEncodingBytes.skipz  sZ   € à�M‰MˆØ”#�d“)ŠmØ�Q�q˜1‘u�ˆAØ˜‰~Ø!"�”Ø�Ø�‰FˆAð ”#�d“)‹mð ˆŒØr@   c                 ó˜   — | j                   }|t        | «      k  r)| ||dz    }||v r	|| _        |S |dz  }|t        | «      k  rŒ)|| _        y r"  r%  r&  s       r>   Ú	skipUntilzEncodingBytes.skipUntil†  sZ   € Ø�M‰MˆØ”#�d“)ŠmØ�Q�q˜1‘u�ˆAØ�E‰zØ!"�”Ø�Ø�‰FˆAð ”#�d“)‹mð ˆŒØr@   c                 ó~   — | j                  || j                  «      }|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è   r<   rC   )r=   rP   r\   s      r>   Ú
matchByteszEncodingBytes.matchBytes‘  s2   € ð �_‰_˜U D§M¡MÓ2ˆÙØ�MŠMœS ›ZÑ'�MØˆ	r@   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 matchr   T)Úindexr<   rC   rœ   Ú
ValueErrorr  rO   s     r>   ÚjumpTozEncodingBytes.jumpToš  sG   € ð	 Ø!ŸZ™Z¨¨t¯}©}Ó=ÄÀEÃ
ÑJÈQÑNˆDŒNð øô ò 	 ÜÐð	 ús	   ‚03 ³AN)ra   rb   rc   rd   r  r?   r  r  r  r  r  r   Úpropertyr<   r#  ÚcurrentByteÚspaceCharactersBytesr¹   r(  r*  r.  re   r@   r>   r	  r	  B  se   „ ñò2òòòòòò"ò
ñ ˜ [Ó1€Hò5ñ ˜>Ó*€Kà-ó 
ò	òór@   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 elementsc                 ó2   — t        |«      | _        d| _        y)z3string - the data to work on for encoding detectionN)r	  rX   rã   ©r=   rX   s     r>   r?   zEncodingParser.__init__§  s   € ä! $Ó'ˆŒ	Øˆ�r@   c                 ó  — d| j                   vry d| j                  fd| j                  fd| j                  fd| j                  fd| j                  fd| j
                  ff}| j                   D ]^  }d}	 | j                   j                  d«       |D ]*  \  }}| j                   j                  |«      sŒ"	  |«       } n |rŒS | j                  S  | j                  S # t        $ r Y  | j                  S w xY w# t        $ r d}Y  ŒFw xY w)	Ns   <metas   <!--s   </s   <!s   <?r   TF)
rX   ÚhandleCommentÚ
handleMetaÚhandlePossibleEndTagÚhandleOtherÚhandlePossibleStartTagr.  r  r*  rã   )r=   ÚmethodDispatchr°   ÚkeepParsingÚkeyÚmethods         r>   r  zEncodingParser.getEncoding¬  s)  € Ø˜4Ÿ9™9Ñ$Øð �d×(Ñ(Ð)Ø�t—‘Ð'Ø�D×-Ñ-Ð.Ø�D×$Ñ$Ð%Ø�D×$Ñ$Ð%Ø�4×.Ñ.Ð/ð1ˆð —‘ò 	ˆAØˆKðØ—	‘	× Ñ  Ô&ð  .ò ‘��VØ—9‘9×'Ñ'¨Õ,ðÙ&,£h˜Ùð	ò Øà�}‰}Ðð#	ð" �}‰}Ðøô !ò Ùð �}‰}Ððûô )ò Ø&+˜Úðús$   Á2CÂ2C4Ã	C1Ã0C1Ã4DÄDc                 ó8   — | j                   j                  d«      S )zSkip over commentss   -->©rX   r.  r�   s    r>   r6  zEncodingParser.handleCommentÊ  s   € à�y‰y×Ñ Ó'Ð'r@   c                 ó~  — | j                   j                  t        vryd}d }	 | j                  «       }|€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                  «       }|�t        |«      }|�|r|| _        y|}Œœ)	NTFr   s
   http-equivr   s   content-typeó   charsets   content)	rX   r0  r1  ÚgetAttributerã   rƒ   ÚContentAttrParserr	  Úparse)r=   Ú	hasPragmaÚpendingEncodingÚattrÚtentativeEncodingÚcodecÚcontentParsers          r>   r7  zEncodingParser.handleMetaÎ  sô   € Ø�9‰9× Ñ Ô(<Ñ<ààˆ	ØˆØà×$Ñ$Ó&ˆDØˆ|Øà˜‘7˜mÒ+Ø $ Q¡¨?Ñ :�IÙ  _Ð%@Ø(7˜œØ$Ø˜!‘W 
Ò*Ø(,¨Q©Ð%Ü*Ð+<Ó=�EØÐ(Ø(-˜œØ$Ø˜!‘W 
Ò*Ü$5´mÀDÈÁGÓ6LÓ$M�MØ(5×(;Ñ(;Ó(=Ð%Ø(Ð4Ü .Ð/@Ó A˜Ø Ð,Ù(Ø05 ¤Ø',à27 ð7 r@   c                 ó$   — | j                  d«      S )NF)ÚhandlePossibleTagr�   s    r>   r:  z%EncodingParser.handlePossibleStartTagò  s   € Ø×%Ñ% eÓ,Ð,r@   c                 óN   — t        | j                  «       | j                  d«      S )NT)r  rX   rM  r�   s    r>   r8  z#EncodingParser.handlePossibleEndTagõ  s   € ÜˆT�Y‰YŒØ×%Ñ% dÓ+Ð+r@   c                 ó&  — | j                   }|j                  t        vr#|r |j                  «        | j	                  «        y|j                  t        «      }|dk(  r|j                  «        y| j                  «       }|�| j                  «       }|�Œy)NTr   )rX   r0  ÚasciiLettersBytesr  r9  r(  ÚspacesAngleBracketsrC  )r=   ÚendTagrX   rÇ   rH  s        r>   rM  z EncodingParser.handlePossibleTagù  sŒ   € Ø�y‰yˆØ×ÑÔ#4Ñ4ñ Ø—‘”Ø× Ñ Ô"Øà�N‰NÔ.Ó/ˆØ�Š9ð �M‰MŒOð ð ×$Ñ$Ó&ˆDØÐ"Ø×(Ñ(Ó*�ð Ñ"àr@   c                 ó8   — | j                   j                  d«      S )Nr   r@  r�   s    r>   r9  zEncodingParser.handleOther  s   € Ø�y‰y×Ñ Ó%Ð%r@   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                  «       }|dv rz|}	 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 one is found, or Noneó   /Nr   )r   Nó   =)rU  r   r@   )ó   'ó   "r   )rX   r¹   r1  Ú	frozensetrC   rZ   ÚasciiUppercaseBytesrW   r  r  r  rQ  )r=   rX   rÇ   ÚattrNameÚ	attrValueÚ	quoteChars         r>   rC  zEncodingParser.getAttribute  s9  € ð �y‰yˆà�I‰IÔ*¬Y¸°vÓ->Ñ>Ó?ˆØˆyœC ›F ašKÐ'Ð'à�ÑØàˆØˆ	àØ�DŠy™XØØÔ*Ñ*à—I‘I“K�ØØ�lÑ"Ø—x‘x Ó)¨3Ð.Ð.ØÔ)Ñ)Ø—‘ §¡£	Õ*Ø�Øà—‘ Ô"ä�T“
ˆAð! ð$ �Š9Ø�M‰MŒOØ—8‘8˜HÓ% sÐ*Ð*äˆTŒ
à�I‰I‹Kˆà�ÑàˆIØä˜“J�à˜	’>Ü˜”JØŸ8™8 HÓ-¨s¯x©x¸	Ó/BÐBÐBàÔ-Ñ-Ø×$Ñ$ Q§W¡W£YÕ/ð ×$Ñ$ QÔ'ð ð �$ŠYØ—8‘8˜HÓ% sÐ*Ð*ØÔ%Ñ%Ø×Ñ˜QŸW™W›YÕ'ØˆYØà×Ñ˜QÔàÜ�T“
ˆAØÔ'Ñ'Ø—x‘x Ó)¨3¯8©8°IÓ+>Ð>Ð>ØÔ)Ñ)Ø× Ñ  §¡£Õ+Ø�Øà× Ñ  Ô#ð r@   N)ra   rb   rc   rd   r?   r  r6  r7  r:  r8  rM  r9  rC  re   r@   r>   r  r  ¤  s4   „ ÙIòò
ò<(ò"8òH-ò,òò.&óJ$r@   r  c                   ó   — e Zd Zd„ Zd„ Zy)rD  c                 ó6   — t        |t        «      sJ ‚|| _        y rS   )rh   rP   rX   r4  s     r>   r?   zContentAttrParser.__init__a  s   € Ü˜$¤Ô&Ð&Ð&Øˆ�	r@   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)NrB  r   rV  )rX  rW  )rX   r.  r<   r¹   r0  r(  r1  r  )r=   Ú	quoteMarkÚoldPositions      r>   rE  zContentAttrParser.parsee  sb  € ð	ð �I‰I×Ñ˜ZÔ(Ø�I‰I×Ò !Ñ#ÕØ�I‰I�N‰NÔØ—9‘9×(Ñ(¨DÒ0àØ�I‰I×Ò !Ñ#ÕØ�I‰I�N‰NÔà�y‰y×$Ñ$¨Ñ4Ø ŸI™I×1Ñ1�	Ø—	‘	×"Ò" aÑ'Õ"Ø"Ÿi™i×0Ñ0�Ø—9‘9×#Ñ# IÔ.ØŸ9™9 [°·±×1CÑ1CÐDÐDàð #Ÿi™i×0Ñ0�ð3Ø—I‘I×'Ñ'Ô(<Ô=ØŸ9™9 [°·±×1CÑ1CÐDÐDøÜ$ò 3àŸ9™9 [ \Ð2Ò2ð3ûô ò 	Ùð	ús>   ‚A-G Á0CG ÅG Å"AF$ Æ$F?Æ<G Æ>F?Æ?G Ç	GÇGN)ra   rb   rc   r?   rE  re   r@   r>   rD  rD  `  s   „ òór@   rD  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 or None if the
    string doesn't correspond to a valid encoding.r   N)rh   rP   ÚdecodeÚUnicodeDecodeErrorÚwebencodingsÚlookupÚAttributeError)rã   s    r>   rƒ   rƒ   ‡  sk   € ô �(œEÔ"ð	Ø—‘ wÓ/ˆHð Ðð	Ü×&Ñ& xÓ0Ð0ð øô "ò 	Ùð	ûô ò 	Ùð	ús    ’< ¦A ¼	AÁAÁ	AÁA)0Ú
__future__r   r   r   Úsixr   Ú	six.movesr   r   rû   rÁ   Úior	   r
   rf  Ú	constantsr   r   r   r   r   r‰   r   rY  Úencoder1  rP  rZ  rQ  Úinvalid_unicode_no_surrogater~   r–   rÂ   Úevalr®   r¸   Úascii_punctuation_rer¿   Úobjectr8   rw   rp   rq   rP   r	  r  rD  rƒ   )rU   s   0r>   ú<module>rs     s°  ðß BÑ Bå ß )ã Û 	ß  ã ç IÓ IÝ (Ý ñ !À?Ö!S¸4 $§+¡+¨gÕ"6Ò!SÓTÐ ÙÀÖM¸˜tŸ{™{¨7Õ3ÒMÓNÐ ÙÀ.Ö Q¸$ §¡¨WÕ!5Ò QÓRÐ Ø*©Y¸¸d°|Ó-DÑDÐ ð  jÐ à	×"Ò"ð
 (¨Ñ+¨sÒ2Ð7S×7YÑ7YÐZ]Ó7^ÐbcÒ7cÐcÐcØ#˜Ÿ™Ð$@ÀÀ"Ð$EÙ$(Ð)<Ó$=ñ%>à$'ñ%(ó )Ñð $˜Ÿ™Ð$@ÓAÐò2Ð ð "�r—z‘zÐ"mÓnÐ ð €ôG�Vô GòT7ô.c<˜Vô c<ôLEÐ2ô EôP_�Eô _ôDy$�Vô y$ôx$˜ô $óNùòm "TùÚMùÚ Qs   ÁFÁ0FÂF