o
    e                     @  s   d Z ddlmZ ddlZddlmZ ddlmZmZ e	e
edde
edd	 g d
 g d e
edd e
edd Zd2ddZd3d4ddZd3d5d d!ZG d"d# d#ejZG d$d% d%eejZG d&d' d'eejZG d(d) d)ejZG d*d+ d+ejZd6d.d/Zee d0d1gZdS )7zImplement pdfdoc codec.    )annotationsN)	Container   )pdf_doc_to_utf8utf8_to_pdf_doc          ) i"   i    i!   i&   i   i   i  iD   i9   i:   i"  i0   i   i   i   i   i   i   i"!  i  i  iA  iR  i`  ix  i}  i1  iB  iS  ia  i~  i   )i  i  i  i  i  i  i  i              sstrordinalsContainer[int]returnintc                 C  s.   t | D ]\}}t||vr|  S qtd)Nz'couldn't find the unencodable character)	enumerateord
ValueError)r   r   nchar r   =D:\Projects\ConvertPro\env\Lib\site-packages\pikepdf/codec.py_find_first_index@   s
   r   strictinputerrorstuple[bytes, int]c                 C  s   |dkrdnd}t | |\}}|r|t| fS |dkr'|dd}|t| fS |dkr1|t| fS |dkrV| ds?| drGtd	| d
ddt| t}td	| ||d dt|)Nreplace   ?   ignore    r   u   þÿu   ÿþpdfdocr      zCstrings beginning with byte order marks cannot be encoded in pdfdocr   z2character cannot be represented in pdfdoc encoding)r   lenr    
startswithUnicodeEncodeErrorr   PDFDOC_ENCODABLELookupError)r   r   Zerror_markersuccessr%   Zoffending_indexr   r   r   pdfdoc_encodeG   s6   
r-   bytestuple[str, int]c                 C  sT   t | tr	|  } t| }|dkr$|d}|dkr$td| ||d d|t| fS )Nr   u   �r   r%   r   z0no Unicode mapping is defined for this character)
isinstance
memoryviewtobytesr   findUnicodeDecodeErrorr'   )r   r   r   idxr   r   r   pdfdoc_decodej   s   

r6   c                   @  s(   e Zd ZdZdddd	ZddddZdS )PdfDocCodecz9Implements PdfDocEncoding character map used inside PDFs.r   r   r   r   r   r   c                 C  
   t ||S Nr-   selfr   r   r   r   r   encode      
zPdfDocCodec.encoder.   r/   c                 C  r8   r9   r6   r;   r   r   r   decode   r>   zPdfDocCodec.decodeNr   r   r   r   r   r   r   r   r.   r   r   r   r/   )__name__
__module____qualname____doc__r=   r@   r   r   r   r   r7   |   s    r7   c                   @  s   e Zd ZdS )PdfDocStreamWriterN)rD   rE   rF   r   r   r   r   rH      s    rH   c                   @     e Zd Zdddd	Zd
S )PdfDocStreamReaderr   r   r.   r   r   r   r/   c                 C  s   t | ||S r9   )r7   r@   r;   r   r   r   r@         zPdfDocStreamReader.decodeNrA   rC   rD   rE   rF   r@   r   r   r   r   rJ          rJ   c                   @  rI   )PdfDocIncrementalEncoderFr   r   finalboolr   r.   c                 C     t |dd S Nr   r   r:   r<   r   rO   r   r   r   r=      rK   zPdfDocIncrementalEncoder.encodeNF)r   r   rO   rP   r   r.   )rD   rE   rF   r=   r   r   r   r   rN      rM   rN   c                   @  rI   )PdfDocIncrementalDecoderFr   r.   rO   rP   r   r   c                 C  rQ   rR   r?   rS   r   r   r   r@      rK   zPdfDocIncrementalDecoder.decodeNrT   )r   r.   rO   rP   r   r   rL   r   r   r   r   rU      rM   rU   encodingcodecs.CodecInfo | Nonec              	   C  s.   | dv rt  }tj| |j|jttttdS d S )N)r%   Zpdfdoc_pikepdf)namer=   r@   streamwriterstreamreaderincrementalencoderincrementaldecoder)	r7   codecs	CodecInfor=   r@   rH   rJ   rN   rU   )rV   codecr   r   r   find_pdfdoc   s   	r`   r   r   )r   r   r   r   r   r   rA   rB   rC   )rV   r   r   rW   )rG   
__future__r   r]   typingr   Z_qpdfr   r   	frozensetlistranger*   r   r-   r6   Codecr7   StreamWriterrH   StreamReaderrJ   IncrementalEncoderrN   IncrementalDecoderrU   r`   register__all__r   r   r   r   <module>   s:   
$%&
+#


