§
    òŽ’jž  ã                   ó4   — d dl Z d dlmZ  G d„ d¦  «        ZdS )é    N)ÚTextIOc                   ó´   — e Zd Zdededdfd„Zdedefd„Zdeez  defd„Z	defd	„Z
dedeeeef         fd
„Zdededefd„Zdeez  deddfd„Zdeddfd„ZdS )ÚStringFileWrapperÚfdÚchunk_lengthÚreturnNc                 óž   — || _         i | _        |r|dk     rd}|| _        |                     ¦   «         | _        | j        g| _        d| _        dS )a  
        Initialize the StringFileWrapper with a file descriptor and chunk length.

        Args:
            fd (TextIO): The file descriptor to wrap.
            CHUNK_LENGTH (int): The length of each chunk to read from the file.

        Attributes:
            fd (TextIO): The wrapped file descriptor.
            length (int): The total length of the file content.
            buffers (dict[int, str]): Dictionary to store chunks of file content.
            buffer_length (int): The length of each buffer chunk.
        é   i@B N)r   ÚbuffersÚbuffer_lengthÚtellÚ_initial_positionÚ_chunk_positionsÚlength)Úselfr   r   s      úSC:\Projects\DSCons\.venv\Lib\site-packages\json_repair\utils\string_file_wrapper.pyÚ__init__zStringFileWrapper.__init__   s\   € ð ˆŒà')ˆŒØð 	%˜|¨aÒ/Ð/Ø$ˆLà)ˆÔð "$§¢¡¤ˆÔØ,0Ô,BÐ+CˆÔØ"&ˆŒˆˆó    Úindexc                 ó^  — |dk     rt          d¦  «        ‚| j                             |¦  «        }|�|S |                      |¦  «         | j        |         }| j                             |¦  «         | j                             | j        ¦  «        }|st          d¦  «        ‚| j         	                    ¦   «         }t          | j        ¦  «        |dz   k    r| j                             |¦  «         t          |¦  «        | j        k     r|| j        z  t          |¦  «        z   | _        || j        |<   t          dt          d| j        z  ¦  «        ¦  «        }t          | j        ¦  «        |k    rAt          t!          | j        ¦  «        ¦  «        }||k    r| j                             |¦  «         |S )zß
        Retrieve or load a buffer chunk from the file.

        Args:
            index (int): The index of the buffer chunk to retrieve.

        Returns:
            str: The buffer chunk at the specified index.
        r   z"Negative indexing is not supportedNúChunk index out of rangeé   r
   i€„ )Ú
IndexErrorr   ÚgetÚ_ensure_chunk_positionr   r   ÚseekÚreadr   r   ÚlenÚappendr   ÚmaxÚintÚnextÚiterÚpop)r   r   ÚcachedÚ	start_posÚchunkÚend_posÚmax_buffersÚ
oldest_keys           r   Ú
get_bufferzStringFileWrapper.get_buffer"   s‰  € ð �1Š9ˆ9ÝÐAÑBÔBÐBà”×!Ò! %Ñ(Ô(ˆØÐØˆMà×#Ò# EÑ*Ô*Ð*ØÔ)¨%Ô0ˆ	ØŒ�Š�YÑÔÐØ”—’˜TÔ/Ñ0Ô0ˆØð 	9ÝÐ7Ñ8Ô8Ð8Ø”'—,’,‘.”.ˆÝˆtÔ$Ñ%Ô%¨°©Ò2Ð2ØÔ!×(Ò(¨Ñ1Ô1Ð1Ýˆu‰:Œ:˜Ô*Ò*Ð*Ø $Ô"4Ñ4µs¸5±z´zÑAˆDŒKà#ˆŒ�UÑå˜!�S ¨TÔ-?Ñ!?Ñ@Ô@ÑAÔAˆÝˆtŒ|ÑÔ˜{Ò*Ð*Ý�d 4¤<Ñ0Ô0Ñ1Ô1ˆJØ˜UÒ"Ð"Ø”× Ò  Ñ,Ô,Ð,Øˆr   c                 óê  ‡ — t          |t          ¦  «        r‚‰                      |¦  «        \  }}}|dk    rt          d¦  «        ‚|dk    r0d                     ˆ fd„t          |||¦  «        D ¦   «         ¦  «        S ||k    rdS ‰                      ||¦  «        S |dk     r|t          ‰ ¦  «        z  }|dk     rt          d¦  «        ‚|‰ j	        z  }‰  
                    |¦  «        }||‰ j	        z           S )a  
        Retrieve a character or a slice of characters from the file.

        Args:
            index (Union[int, slice]): The index or slice of characters to retrieve.

        Returns:
            str: The character(s) at the specified index or slice.
        r   zslice step cannot be zeror   Ú c              3   ó(   •K  — | ]}‰|         V — Œd S )N© ©Ú.0Úir   s     €r   ú	<genexpr>z0StringFileWrapper.__getitem__.<locals>.<genexpr>[   s'   øè è € ÐIÐI¨1˜t AœwÐIÐIÐIÐIÐIÐIr   zstring index out of range)Ú
isinstanceÚsliceÚ_normalize_sliceÚ
ValueErrorÚjoinÚrangeÚ_slice_from_buffersr   r   r   r+   )r   r   ÚstartÚstopÚstepÚbuffer_indexÚbuffers   `      r   Ú__getitem__zStringFileWrapper.__getitem__H   s  ø€ õ �e�UÑ#Ô#ð 
	9Ø $× 5Ò 5°eÑ <Ô <ÑˆE�4˜à�qŠyˆyÝ Ð!<Ñ=Ô=Ð=Ø�qŠyˆyØ—w’wÐIÐIÐIÐIµ°e¸TÀ4Ñ0HÔ0HÐIÑIÔIÑIÔIÐIà˜Š}ˆ}Ø�rØ×+Ò+¨E°4Ñ8Ô8Ð8Ø�1Š9ˆ9Ø•S˜‘Y”YÑˆEØ�1Š9ˆ9ÝÐ8Ñ9Ô9Ð9Ø Ô 2Ñ2ˆØ—’ Ñ.Ô.ˆØ�e˜dÔ0Ñ0Ô1Ð1r   c                 óž   — | j         €7| j         €0t          | j        ¦  «        }|                      |¦  «         | j         ®0| j         €J ‚| j         S )z‚
        Get the total length of the file.

        Returns:
            int: The total number of characters in the file.
        )r   r   r   r   )r   Úchunk_indexs     r   Ú__len__zStringFileWrapper.__len__h   sZ   € ð Œ;ÐØ”+Ð%Ý! $Ô"7Ñ8Ô8�Ø×+Ò+¨KÑ8Ô8Ð8ð ”+Ð%ð Œ{Ð&Ð&Ð&ØŒ{Ðr   c                 óö   — t          | ¦  «        }|j        €dn|j        }|j        €|n|j        }|j        €dn|j        }|dk     r||z  }|dk     r||z  }t	          |d¦  «        }t          ||¦  «        }|||fS )Nr   r   )r   r;   r<   r=   r    Úmin)r   r   Ú	total_lenr;   r<   r=   s         r   r6   z"StringFileWrapper._normalize_slicev   s’   € Ý˜‘I”Iˆ	Ø”[Ð(��¨e¬kˆØ!œJÐ.ˆyˆy°E´JˆØ”JÐ&ˆqˆq¨E¬Jˆà�1Š9ˆ9Ø�YÑˆEØ�!Š8ˆ8Ø�IÑˆDå�E˜1‘”ˆÝ�4˜Ñ#Ô#ˆØ�d˜DÐ Ð r   r;   r<   c                 ó²  ‡ — |‰ j         z  }|dz
  ‰ j         z  }|‰ j         z  }|‰ j         z  }|dk    r||k    r‰ j         }||k    r‰                      |¦  «        }|||…         S ‰                      |¦  «        |d …         }‰                      |¦  «        d |…         }	ˆ fd„t          |dz   |¦  «        D ¦   «         }
|d                     |
¦  «        z   |	z   S )Nr   r   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r/   )r+   r0   s     €r   ú
<listcomp>z9StringFileWrapper._slice_from_buffers.<locals>.<listcomp>’   s%   ø€ ÐYÐYÐY°˜Ÿš¨Ñ+Ô+ÐYÐYÐYr   r-   )r   r+   r9   r8   )r   r;   r<   r>   Ú
buffer_endÚ	start_modÚstop_modr?   Ústart_sliceÚ	end_sliceÚmiddle_slicess   `          r   r:   z%StringFileWrapper._slice_from_buffers…   sø   ø€ Ø Ô 2Ñ2ˆØ˜Q‘h 4Ô#5Ñ5ˆ
Ø˜DÔ.Ñ.ˆ	Ø˜$Ô,Ñ,ˆØ�qŠ=ˆ=˜T Eš\˜\ØÔ)ˆHØ˜:Ò%Ð%Ø—_’_ \Ñ2Ô2ˆFØ˜) HÐ,Ô-Ð-à—o’o lÑ3Ô3°I°J°JÔ?ˆØ—O’O JÑ/Ô/°	°°	Ô:ˆ	ØYÐYÐYÐYµU¸<È!Ñ;KÈZÑ5XÔ5XÐYÑYÔYˆØ˜RŸWšW ]Ñ3Ô3Ñ3°iÑ?Ð?r   Úvaluec                 óX  — t          |t          ¦  «        r	|j        pdn|pd}|dk     r|t          | ¦  «        z  }| j                             ¦   «         }| j                             | j        |z   ¦  «         | j                             |¦  «         | j                             |¦  «         dS )zÜ
        Set a character or a slice of characters in the file.

        Args:
            index (slice): The slice of characters to set.
            value (str): The value to set at the specified index or slice.
        r   N)	r4   r5   r;   r   r   r   r   r   Úwrite)r   r   rP   r;   Úcurrent_positions        r   Ú__setitem__zStringFileWrapper.__setitem__•   sš   € õ %/¨uµeÑ$<Ô$<ÐL�”Ð ˜qøÀ%À*È1ˆà�1Š9ˆ9Ø•S˜‘Y”YÑˆEàœ7Ÿ<š<™>œ>ÐØŒ�Š�TÔ+¨eÑ3Ñ4Ô4Ð4ØŒ�Š�eÑÔÐØŒ�ŠÐ%Ñ&Ô&Ð&Ð&Ð&r   rB   c                 ó^  — t          | j        ¦  «        |k    rít          | j        ¦  «        dz
  }| j        d         }| j                             |t          j        ¦  «         | j                             | j        ¦  «        }| j                             ¦   «         }t          |¦  «        | j        k     r|| j        z  t          |¦  «        z   | _	        | j         
                    |¦  «         |snt          | j        ¦  «        |k    °ít          | j        ¦  «        |k    rt          d¦  «        ‚dS )z[
        Ensure that we know the starting file position for the given chunk index.
        r   éÿÿÿÿr   N)r   r   r   r   ÚosÚSEEK_SETr   r   r   r   r   r   )r   rB   Ú
prev_indexr&   r'   r(   s         r   r   z(StringFileWrapper._ensure_chunk_position§   s  € õ �$Ô'Ñ(Ô(¨KÒ7Ð7Ý˜TÔ2Ñ3Ô3°aÑ7ˆJØÔ-¨bÔ1ˆIØŒG�LŠL˜¥B¤KÑ0Ô0Ð0Ø”G—L’L Ô!3Ñ4Ô4ˆEØ”g—l’l‘n”nˆGÝ�5‰zŒz˜DÔ.Ò.Ð.Ø(¨4Ô+=Ñ=ÅÀEÁ
Ä
ÑJ�”ØÔ!×(Ò(¨Ñ1Ô1Ð1Øð Øõ �$Ô'Ñ(Ô(¨KÒ7Ð7õ ˆtÔ$Ñ%Ô%¨Ò4Ð4ÝÐ7Ñ8Ô8Ð8ð 5Ð4r   )Ú__name__Ú
__module__Ú__qualname__r   r!   r   Ústrr+   r5   r@   rC   Útupler6   r:   rT   r   r/   r   r   r   r      sN  € € € € € ð'˜6ð '°ð '¸ð 'ð 'ð 'ð 'ð6$ ð $¨ð $ð $ð $ð $ðL2  u¡ð 2°ð 2ð 2ð 2ð 2ð@˜ð ð ð ð ð! eð !°°c¸3À°mÔ0Dð !ð !ð !ð !ð@¨ð @°Cð @¸Cð @ð @ð @ð @ð '  u¡ð '°Sð '¸Tð 'ð 'ð 'ð 'ð$9°#ð 9¸$ð 9ð 9ð 9ð 9ð 9ð 9r   r   )rW   Útypingr   r   r/   r   r   ú<module>r`      s\   ðØ 	€	€	€	Ø Ð Ð Ð Ð Ð ðr9ð r9ð r9ð r9ð r9ñ r9ô r9ð r9ð r9ð r9r   