Ë
    ¨Œjj'  ã                   óX   — d Z ddlZddlmZmZ ddlmZ  G d„ de«      Z G d„ de«      Zy)	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_warningc                   óD   — e Zd ZdZededefd„«       Zededefd„«       Zy)ÚCodecz#Abstract base class for all codecs.ÚdataÚreturnc                  ó   — y)z†
        Encode the input data.

        Args:
            data: Data to encode.

        Returns:
            Encoded data.

        N© ©Úselfr   s     ú_/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/pypdf/_codecs/_codecs.pyÚencodezCodec.encode   ó   � ó    c                  ó   — y)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      sG   „ Ù-àð
˜5ð 
 Uò 
ó ð
ð ð
˜5ð 
 Uò 
ó ñ
r   r   c                   ó’   — e Zd ZdZdZdZdZ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y)ÚLzwCodecz2Lempel-Ziv-Welch (LZW) adaptive compression codec.é   i  é	   é   r	   Nc                 óØ   — t        d«      D �ci c]  }t        |g«      |“Œ c}| _        | j                  dz   | _        | j
                  | _        d| j                  z  dz
  | _        yc c}w )z>Initialize the encoding table and state to initial conditions.r   é   N)Úranger   Úencoding_tableÚ
EOD_MARKERÚ	next_codeÚINITIAL_BITS_PER_CODEÚbits_per_codeÚmax_code_value©r   Úis     r   Ú_initialize_encoding_tablez#LzwCodec._initialize_encoding_table4   sc   € äHMÈcÌ
Ó0SÉ
À1´¸°s³¸Q±È
Ñ0SˆÔØŸ™¨1Ñ,ˆŒØ!×7Ñ7ˆÔØ  D×$6Ñ$6Ñ6¸!Ñ;ˆÕùò 1Ts   ŽA'c                 óî   — | xj                   dz  c_         | j                   | j                  kD  rG| j                  | j                  k  r-| xj                  dz  c_        d| j                  z  dz
  | _        yyy)z5Update bits_per_code and max_code_value if necessary.r   N)r#   r&   r%   ÚMAX_BITS_PER_CODE)r   s    r   Ú_increase_next_codezLzwCodec._increase_next_code;   si   € à�Š˜!Ñ�à�N‰N˜T×0Ñ0Ò0Ø×"Ñ" T×%;Ñ%;Ò;à×Ò !Ñ#ÕØ#$¨×(:Ñ(:Ñ#:¸aÑ"?ˆDÕð <ð 1r   r   c                 ó‚  — g }|j                  | j                  «       | j                  «        d}|D ]À  }|t        |g«      z   }|| j                  v r|}Œ#|j                  | j                  |   «       | j
                  d| j                  z  dz
  k  r*| j
                  | j                  |<   | j                  «        n+|j                  | j                  «       | j                  «        t        |g«      }ŒÂ |r|j                  | j                  |   «       |j                  | 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_MARKERr)   r   r!   r#   r+   r,   r"   Ú_pack_codes_into_bytes)r   r   Úresult_codesÚcurrent_sequenceÚbyteÚnext_sequences         r   r   zLzwCodec.encodeE   s+  € ð #%ˆð 	×Ñ˜D×3Ñ3Ô4Ø×'Ñ'Ô)àÐÛˆDØ,¬u°d°V«}Ñ<ˆMà × 3Ñ 3Ñ3à#0Ñ ð ×#Ñ# D×$7Ñ$7Ð8HÑ$IÔJð —>‘> a¨4×+AÑ+AÑ&AÀQÑ%FÒFØ9=¿¹�D×'Ñ'¨Ñ6Ø×,Ñ,Õ.ð !×'Ñ'¨×(?Ñ(?Ô@Ø×3Ñ3Ô5ô $)¨$¨£=Ñ ð) ñ. Ø×Ñ × 3Ñ 3Ð4DÑ EÔFØ×Ñ˜DŸO™OÔ,à×*Ñ*¨<Ó8Ð8r   Úcodesc                 ó°  — | j                  «        d}d}t        «       }|D ]Š  }|| j                  z  |z  }|| j                  z  }|dk\  r"|dz  }|j                  ||z	  dz  «       |dk\  rŒ"|| j                  k(  r| j                  «        Œk|| j
                  k(  rŒ{| j                  «        ŒŒ |dkD  r|j                  |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   é   éÿ   )r)   Ú	bytearrayr%   r.   r/   r"   r,   r   )r   r5   ÚbufferÚbits_in_bufferÚoutputÚcodes         r   r0   zLzwCodec._pack_codes_into_byteso   sê   € ð
 	×'Ñ'Ô)ØˆØˆÜ“ˆãˆDØ × 2Ñ 2Ñ2°dÑ:ˆFØ˜d×0Ñ0Ñ0ˆNð
 ! AÒ%Ø !Ñ#�Ø—‘˜v¨Ñ7¸4Ñ?Ô@ð ! AÓ%ð �t×.Ñ.Ò.Ø×/Ñ/Õ1Ø˜Ÿ™Ò(Øà×(Ñ(Õ*ð! ð& ˜AÒØ�M‰M˜6 a¨.Ñ&8Ñ9¸TÑAÔBä�V‹}Ðr   c                 ó  — d| j                   z  dz
  | _        t        | j                  «      D �cg c]  }t	        |g«      ‘Œ c}dg| j                  | j                  z
  dz   z  z   | _        | j                  dz   | _        d| _        y c c}w )Nr   r   r   )	r+   r&   r    r/   r   Údecoding_tabler"   Ú_table_indexÚ_bits_to_getr'   s     r   Ú_initialize_decoding_tablez#LzwCodec._initialize_decoding_table‘   s”   € Ø  D×$:Ñ$:Ñ:¸aÑ?ˆÔÜ38¸×9PÑ9PÔ3QÓRÑ3Q¨aœu a S�zÐ3QÑRØðV
à× Ñ  4×#:Ñ#:Ñ:¸QÑ>ñV@ñ @ˆÔð !ŸO™O¨aÑ/ˆÔØˆÕùò	 Ss   ¯Bc                 ó0  — |  	 | j                   | j                  k  rh| j                  dz  || j                     z  | _        | xj                  dz  c_        | xj                   dz  c_         | j                   | j                  k  rŒh| 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)Nr7   r   r   iÿÿ )Ú
_next_bitsrA   Ú
_next_dataÚ_byte_pointerÚ
_and_tableÚ
IndexErrorr"   )r   r   r=   s      r   Ú_next_code_decodezLzwCodec._next_code_decode™   sõ   € Ùð	#Ø—/‘/ D×$5Ñ$5Ò5Ø#'§?¡?°aÑ#7Ø˜×+Ñ+Ñ,ñ#�”ð ×"Ò" aÑ'Õ"Ø—’ 1Ñ$•ð —/‘/ D×$5Ñ$5Ó5ð —‘ D§O¡O°d×6GÑ6GÑ$GÑHØ—‘ × 1Ñ 1°AÑ 5Ñ6ñ7ˆDð �OŠO˜t×0Ñ0Ñ0�Oð #Ÿo™o°Ñ7ˆDŒOàˆKøÜò 	#Ø—?‘?Ò"ð	#ús   „B C= ÂA7C= Ã=DÄDc                 ó¢  — g d¢| _         d| _        d| _        d| _        d| _        d| _        t        j                  «       }| j                  «        d| _        d| _        d| _        | j                  }	 | j                  |«      }|| j                  k(  r	 |j                  «       S || j                  k(  rb| j                  «        | j                  |«      }|| j                  k(  r	 |j                  «       S |j                  | j                  |   «       |}nº|| j                  k  rT| j                  |   }|j                  |«       || j                  k7  r"| j                  | j                  |   |d   «       |}nW| j                  |   | j                  |   dd z   }|j                  |«       | j                  | j                  |   |d   «       |}�Œ^)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   Nr   )rG   r@   rA   rF   rE   rD   ÚioÚBytesIOrB   r/   rI   r"   Úwriter?   Ú_add_entry_decodeÚgetvalue)r   r   Úoutput_streamÚold_coder=   Ústrings         r   r   zLzwCodec.decodeÏ   sÎ  € ò
 2ˆŒØˆÔØˆÔØˆÔØˆŒØˆŒäŸ
™
›ˆà×'Ñ'Ô)ØˆÔØˆŒØˆŒØ×*Ñ*ˆàØ×)Ñ)¨$Ó/ˆDØ�t—‘Ò&Øð0 ×%Ñ%Ó'Ð'ð- �t×.Ñ.Ò.Ø×/Ñ/Ô1Ø×-Ñ-¨dÓ3�Ø˜4Ÿ?™?Ò*Øð$ ×%Ñ%Ó'Ð'ð# ×#Ñ# D×$7Ñ$7¸Ñ$=Ô>Ø‘Ø˜×)Ñ)Ò)Ø×,Ñ,¨TÑ2�Ø×#Ñ# FÔ+Ø˜t×6Ñ6Ò6Ø×*Ñ*¨4×+>Ñ+>¸xÑ+HÈ&ÐQRÉ)ÔTØ‘ð ×'Ñ'¨Ñ1°D×4GÑ4GÈÑ4QÐRTÐSTÐ4UÑUð ð ×#Ñ# FÔ+Ø×&Ñ& t×':Ñ':¸8Ñ'DÀfÈQÁiÔPØ�ñ3 r   Ú
old_stringÚnew_charc                 ó\  — |t        |g«      z   }| j                  | j                  kD  rt        dt        «       y || j
                  | j                  <   | xj                  dz  c_        | j                  dk(  rd| _        y | j                  dk(  rd| _        y | j                  dk(  rd| _        y y )	Nz#Ignoring too large LZW table index.r   rK   é
   rL   é   rM   r   )r   r@   r&   r   r   r?   rA   )r   rV   rW   Ú
new_strings       r   rQ   zLzwCodec._add_entry_decode   s¥   € Ø¤%¨¨
Ó"3Ñ3ˆ
Ø×Ñ˜t×2Ñ2Ò2ÜÐ@Ä(ÔKØØ1;ˆ×Ñ˜D×-Ñ-Ñ.Ø×Ò˜QÑÕð ×Ñ Ò#Ø "ˆDÕØ×Ñ $Ò&Ø "ˆDÕØ×Ñ $Ò&Ø "ˆDÕð 'r   )r	   N)r   r   r   r   r/   r"   r$   r+   r)   r,   r   r   ÚlistÚintr0   rB   rI   r   rQ   r   r   r   r   r   ,   sš   „ Ù<àÐØ€JØÐØÐó<ó@ð(9˜5ð (9 Uó (9ðT ¨D°©Ið  ¸%ó  óDð# eð #°ó #ðl/(˜5ð /( Uó /(ðb#¨Eð #¸Sð #ÀTô #r   r   )	r   rN   Úabcr   r   Úpypdf._utilsr   r   r   r   r   r   Ú<module>r`      s/   ðñó 
ß #å 'ôˆCô ô<b#ˆuõ b#r   