§
    ¡”j;)  ã                   ór   — d Z ddlZddlmZmZ ddlmZ ddlmZ  G d„ de¦  «        Z	 G d„ d	e	¦  «        Z
dS )
z™
This module is for codecs only.

While the codec implementation can contain details of the PDF specification,
the module should not do any PDF parsing.
é    N)ÚABCÚabstractmethod)Úlogger_warning)ÚLimitReachedErrorc                   óR   — e Zd ZdZededefd„¦   «         Zededefd„¦   «         ZdS )ÚCodecz#Abstract base class for all codecs.ÚdataÚreturnc                 ó   — dS )z†
        Encode the input data.

        Args:
            data: Data to encode.

        Returns:
            Encoded data.

        N© ©Úselfr	   s     úd/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/pypdf/_codecs/_codecs.pyÚencodezCodec.encode   ó   € € € ó    c                 ó   — dS )z†
        Decode the input data.

        Args:
            data: Data to decode.

        Returns:
            Decoded data.

        Nr   r   s     r   ÚdecodezCodec.decode   r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úbytesr   r   r   r   r   r   r      st   € € € € € Ø-Ð-àð
˜5ð 
 Uð 
ð 
ð 
ñ „^ð
ð ð
˜5ð 
 Uð 
ð 
ð 
ñ „^ð
ð 
ð 
r   r   c                   ó¬   — e Zd ZdZdZdZdZdZddedd	fd
„Z	dd„Z
dd„Zdedefd„Zdee         defd„Zdd„Zdedefd„Zdedefd„Zdededd	fd„Zd	S )ÚLzwCodecz2Lempel-Ziv-Welch (LZW) adaptive compression codec.é   i  é	   é   éÀhxÚmax_output_lengthr
   Nc                 ó   — || _         d S )N)r    )r   r    s     r   Ú__init__zLzwCodec.__init__5   s   € Ø!2ˆÔÐÐr   c                 óœ   — d„ t          d¦  «        D ¦   «         | _        | j        dz   | _        | j        | _        d| j        z  dz
  | _        dS )z>Initialize the encoding table and state to initial conditions.c                 ó0   — i | ]}t          |g¦  «        |“ŒS r   ©r   ©Ú.0Úis     r   ú
<dictcomp>z7LzwCodec._initialize_encoding_table.<locals>.<dictcomp>:   s"   € Ð0SÐ0SÐ0SÀ1µ¸°s±´¸QÐ0SÐ0SÐ0Sr   r   é   N)ÚrangeÚencoding_tableÚ
EOD_MARKERÚ	next_codeÚINITIAL_BITS_PER_CODEÚbits_per_codeÚmax_code_value©r   s    r   Ú_initialize_encoding_tablez#LzwCodec._initialize_encoding_table8   sR   € à0SÐ0SÍÈcÉ
Ì
Ð0SÑ0SÔ0SˆÔØœ¨1Ñ,ˆŒØ!Ô7ˆÔØ  DÔ$6Ñ6¸!Ñ;ˆÔÐÐr   c                 ó²   — | xj         dz  c_         | j         | j        k    r4| j        | j        k     r&| xj        dz  c_        d| j        z  dz
  | _        dS dS dS )z5Update bits_per_code and max_code_value if necessary.r*   N)r.   r1   r0   ÚMAX_BITS_PER_CODEr2   s    r   Ú_increase_next_codezLzwCodec._increase_next_code?   sp   € àˆŒ˜!ÑˆŒàŒN˜TÔ0Ò0Ð0ØÔ" TÔ%;Ò;Ð;àÐÔ !Ñ#ÐÔØ#$¨Ô(:Ñ#:¸aÑ"?ˆDÔÐÐð	 1Ð0Ø;Ð;r   r	   c                 ó€  — g }|                      | j        ¦  «         |                      ¦   «          d}|D ]¹}|t          |g¦  «        z   }|| j        v r|}Œ!|                      | j        |         ¦  «         | j        d| j        z  dz
  k    r$| j        | j        |<   |                      ¦   «          n.|                      | j        ¦  «         |                      ¦   «          t          |g¦  «        }Œº|r |                      | j        |         ¦  «         |                      | j        ¦  «         |  	                    |¦  «        S )zˆ
        Encode data using the LZW compression algorithm.

        Taken from PDF 1.7 specs, "7.4.4.2 Details of LZW Encoding".
        r   r*   )
ÚappendÚCLEAR_TABLE_MARKERr3   r   r,   r.   r5   r6   r-   Ú_pack_codes_into_bytes)r   r	   Úresult_codesÚcurrent_sequenceÚbyteÚnext_sequences         r   r   zLzwCodec.encodeI   sa  € ð #%ˆð 	×Ò˜DÔ3Ñ4Ô4Ð4Ø×'Ò'Ñ)Ô)Ð)àÐØð 	1ð 	1ˆDØ,­u°d°V©}¬}Ñ<ˆMà Ô 3Ð3Ð3à#0Ð Ð ð ×#Ò# DÔ$7Ð8HÔ$IÑJÔJÐJð ”> a¨4Ô+AÑ&AÀQÑ%FÒFÐFØ9=¼�DÔ'¨Ñ6Ø×,Ò,Ñ.Ô.Ð.Ð.ð !×'Ò'¨Ô(?Ñ@Ô@Ð@Ø×3Ò3Ñ5Ô5Ð5õ $)¨$¨¡=¤=Ð Ð ð ð 	GØ×Ò Ô 3Ð4DÔ EÑFÔFÐFØ×Ò˜DœOÑ,Ô,Ð,à×*Ò*¨<Ñ8Ô8Ð8r   Úcodesc                 óÄ  — |                       ¦   «          d}d}t          ¦   «         }|D ]…}|| j        z  |z  }|| j        z  }|dk    r&|dz  }|                     ||z	  dz  ¦  «         |dk    °&|| j        k    r|                       ¦   «          Œe|| j        k    rŒq|                      ¦   «          Œ†|dk    r|                     |d|z
  z  dz  ¦  «         t          |¦  «        S )z¼
        Convert the list of result codes into a continuous byte stream, with codes packed as per the code bit-width.
        The bit-width starts at 9 bits and expands as needed.
        r   é   éÿ   )r3   Ú	bytearrayr0   r8   r9   r-   r6   r   )r   r?   ÚbufferÚbits_in_bufferÚoutputÚcodes         r   r:   zLzwCodec._pack_codes_into_bytess   s  € ð
 	×'Ò'Ñ)Ô)Ð)ØˆØˆÝ‘”ˆàð 	+ð 	+ˆDØ Ô 2Ñ2°dÑ:ˆFØ˜dÔ0Ñ0ˆNð
 ! AÒ%Ð%Ø !Ñ#�Ø—’˜v¨Ñ7¸4Ñ?Ñ@Ô@Ð@ð ! AÒ%Ð%ð �tÔ.Ò.Ð.Ø×/Ò/Ñ1Ô1Ð1Ð1Ø˜œÒ(Ð(Øà×(Ò(Ñ*Ô*Ð*Ð*ð ˜AÒÐØ�MŠM˜6 a¨.Ñ&8Ñ9¸TÑAÑBÔBÐBå�V‰}Œ}Ðr   c                 óÊ   — d| j         z  dz
  | _        d„ t          | j        ¦  «        D ¦   «         dg| j        | j        z
  dz   z  z   | _        | j        dz   | _        d| _        d S )Nr*   c                 ó.   — g | ]}t          |g¦  «        ‘ŒS r   r%   r&   s     r   ú
<listcomp>z7LzwCodec._initialize_decoding_table.<locals>.<listcomp>—   s    € ÐRÐRÐR¨a�u a S™zœzÐRÐRÐRr   r   r   )r5   r1   r+   r9   Údecoding_tabler-   Ú_table_indexÚ_bits_to_getr2   s    r   Ú_initialize_decoding_tablez#LzwCodec._initialize_decoding_table•   s€   € Ø  DÔ$:Ñ:¸aÑ?ˆÔØRÐRµ5¸Ô9PÑ3QÔ3QÐRÑRÔRØðV
àÔ  4Ô#:Ñ:¸QÑ>ñV@ñ @ˆÔð !œO¨aÑ/ˆÔØˆÔÐÐr   c                 ó–  — |  	 | j         | j        k     rM| j        dz  || j                 z  | _        | xj        dz  c_        | xj         dz  c_         | j         | j        k     °M| j        | j         | j        z
  z	  | j        | j        dz
           z  }| xj         | j        z  c_         | j        dz  | _        |S # t
          $ r
 | j        cY S w xY w)NrA   r*   r   iÿÿ )Ú
_next_bitsrM   Ú
_next_dataÚ_byte_pointerÚ
_and_tableÚ
IndexErrorr-   )r   r	   rG   s      r   Ú_next_code_decodezLzwCodec._next_code_decode�   sõ   € ØÐð	#Ø”/ DÔ$5Ò5Ð5Ø#'¤?°aÑ#7Ø˜Ô+Ô,ñ#�”ð Ð"Ô" aÑ'Ð"Ô"Ø�” 1Ñ$�”ð ”/ DÔ$5Ò5Ð5ð ” D¤O°dÔ6GÑ$GÑHØ” Ô 1°AÑ 5Ô6ñ7ˆDð ˆOŒO˜tÔ0Ñ0ˆOŒOð #œo°Ñ7ˆDŒOàˆKøÝð 	#ð 	#ð 	#Ø”?Ð"Ð"Ð"ð	#øøøs   „B/B4 Â4CÃCc                 ó  — g d¢| _         d| _        d| _        d| _        d| _        d| _        t          j        ¦   «         }d}|                      ¦   «          d| _        d| _        d| _        | j	        }	 |  
                    |¦  «        }|| j        k    r�nb|| j	        k    r[|                      ¦   «          |  
                    |¦  «        }|| j        k    r�n!|                     | j        |         x}¦  «         |}nÃ|| j        k     rW| j        |         }|                     |¦  «         || j	        k    r'|                      | j        |         |d         ¦  «         |}na| j        |         | j        |         dd…         z   }|                     |¦  «         |                      | j        |         |d         ¦  «         |}|t          |¦  «        z  }|| j        k    rt#          d|› d| j        › �¦  «        ‚�Œ„|                     ¦   «         S )	zÎ
        The following code was converted to Python from the following code:
        https://github.com/empira/PDFsharp/blob/master/src/foundation/src/PDFsharp/src/PdfSharp/Pdf.Filters/LzwDecode.cs
        )éÿ  éÿ  éÿ  iÿ  r   r   TNr*   z#Limit reached while decompressing: z > )rS   rL   rM   rR   rQ   rP   ÚioÚBytesIOrN   r9   rU   r-   ÚwriterK   Ú_add_entry_decodeÚlenr    r   Úgetvalue)r   r	   Úoutput_streamÚoutput_lengthÚold_coderG   Údecodeds          r   r   zLzwCodec.decodeÓ   s9  € ð
 2Ð1Ð1ˆŒØˆÔØˆÔØˆÔØˆŒØˆŒåœ
™œˆØˆà×'Ò'Ñ)Ô)Ð)ØˆÔØˆŒØˆŒØÔ*ˆð	Ø×)Ò)¨$Ñ/Ô/ˆDØ�t”Ò&Ð&Ùà�tÔ.Ò.Ð.Ø×/Ò/Ñ1Ô1Ð1Ø×-Ò-¨dÑ3Ô3�Ø˜4œ?Ò*Ð*ÙØ×#Ò#¨tÔ/BÀ4Ô/HÐ$H GÑIÔIÐIØ��Ø˜Ô)Ò)Ð)ØÔ-¨dÔ3�Ø×#Ò# GÑ,Ô,Ð,Ø˜tÔ6Ò6Ð6Ø×*Ò*¨4Ô+>¸xÔ+HÈ'ÐRSÌ*ÑUÔUÐUØ��ð Ô'¨Ô1°DÔ4GÈÔ4QÐRTÐSTÐRTÔ4UÑUð ð ×#Ò# GÑ,Ô,Ð,Ø×&Ò& tÔ':¸8Ô'DÀgÈaÄjÑQÔQÐQØ�à�S ™\œ\Ñ)ˆMØ˜tÔ5Ò5Ð5Ý'Ød¸-ÐdÐdÈDÔLbÐdÐdñô ð ñ;	ðB ×%Ò%Ñ'Ô'Ð'r   Ú
old_stringÚnew_charc                 ó0  — |t          |g¦  «        z   }| j        | j        k    rt          dt          ¦  «         d S || j        | j        <   | xj        dz  c_        | j        dk    r	d| _        d S | j        dk    r	d| _        d S | j        dk    r	d| _        d S d S )	Nz#Ignoring too large LZW table index.r*   rW   é
   rX   é   rY   r   )r   rL   r1   r   r   rK   rM   )r   rd   re   Ú
new_strings       r   r]   zLzwCodec._add_entry_decode  s¿   € Ø¥%¨¨
Ñ"3Ô"3Ñ3ˆ
ØÔ˜tÔ2Ò2Ð2ÝÐ@Å(ÑKÔKÐKØˆFØ1;ˆÔ˜DÔ-Ñ.ØÐÔ˜QÑÐÔð Ô Ò#Ð#Ø "ˆDÔÐÐØÔ $Ò&Ð&Ø "ˆDÔÐÐØÔ $Ò&Ð&Ø "ˆDÔÐÐð 'Ð&r   )r   )r
   N)r   r   r   r   r9   r-   r/   r5   Úintr"   r3   r6   r   r   Úlistr:   rN   rU   r   r]   r   r   r   r   r   -   sQ  € € € € € Ø<Ð<àÐØ€JØÐØÐð3ð 3¨#ð 3¸tð 3ð 3ð 3ð 3ð<ð <ð <ð <ð@ð @ð @ð @ð(9˜5ð (9 Uð (9ð (9ð (9ð (9ðT ¨D°¬Ið  ¸%ð  ð  ð  ð  ðDð ð ð ð# eð #°ð #ð #ð #ð #ðl6(˜5ð 6( Uð 6(ð 6(ð 6(ð 6(ðp#¨Eð #¸Sð #ÀTð #ð #ð #ð #ð #ð #r   r   )r   rZ   Úabcr   r   Úpypdf._utilsr   Úpypdf.errorsr   r   r   r   r   r   ú<module>ro      s¾   ððð ð 
€	€	€	Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø *Ð *Ð *Ð *Ð *Ð *ðð ð ð ð ˆCñ ô ð ð<l#ð l#ð l#ð l#ð l#ˆuñ l#ô l#ð l#ð l#ð l#r   