o
    e                     @  s   d Z ddlmZ ddlZddlmZmZ ddlmZ ddl	m
Z
mZmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ dddZG dd deZG dd deZe ZdddZdS )zwIntegrate JBIG2 image decoding.

Requires third-party JBIG2 decoder in the form of an external program, like
jbig2dec.
    )annotationsN)ABCabstractmethod)Path)DEVNULLPIPECalledProcessErrorrun)TemporaryDirectory)Version)Image)DependencyErrorjbig2bytesjbig2_globalsreturnc              	   C  s   t dddm}t|d }t|d }t|d }ddd	d
dt|g}||  t|dkr<|| |t| |t| t|tdd t	
|}| W  d    W  d    S 1 sfw   Y  W d    d S 1 svw   Y  d S )Nzpikepdf-z.jbig2)prefixsuffiximageglobaloutfilejbig2decz
--embeddedz--formatZpngz--outputr   T)stdoutcheck)r
   r   osfspathwrite_byteslenappendr	   r   r   opentobytes)r   r   ZtmpdirZ
image_pathZglobal_pathZoutput_pathargsZim r"   =D:\Projects\ConvertPro\env\Lib\site-packages\pikepdf/jbig2.py_extract_jbig2_bytes   s.   

"r$   c                   @  s6   e Zd ZdZedddZedd	d
ZdddZdS )JBIG2DecoderInterfacezFpikepdf's C++ expects this Python interface to be available for JBIG2.r   Nonec                 C     dS )z=Check if decoder is available. Throws DependencyError if not.Nr"   selfr"   r"   r#   check_available9       z%JBIG2DecoderInterface.check_availabler   r   r   c                 C  r'   )z=Decode JBIG2 from jbig2 and globals, returning decoded bytes.Nr"   r)   r   r   r"   r"   r#   decode_jbig2=   r+   z"JBIG2DecoderInterface.decode_jbig2boolc                 C  s$   z|    W dS  ty   Y dS w )z$Return True if decoder is available.FT)r*   r   r(   r"   r"   r#   	availableA   s   
zJBIG2DecoderInterface.availableNr   r&   r   r   r   r   r   r   )r   r.   )__name__
__module____qualname____doc__r   r*   r-   r/   r"   r"   r"   r#   r%   6   s    r%   c                   @  s.   e Zd ZdZdddZdd	d
ZdddZdS )JBIG2DecoderzJBIG2 decoder implementation.r   r&   c                 C  s    |   }|tdk rtddS )z*Check if jbig2dec is installed and usable.z0.15z-jbig2dec is too old (older than version 0.15)N)_versionr   r   )r)   versionr"   r"   r#   r*   N   s   zJBIG2Decoder.check_availabler   r   r   c                 C  s
   t ||S )z6Decode JBIG2 from binary data, returning decode bytes.)r$   r,   r"   r"   r#   r-   T   s   
zJBIG2Decoder.decode_jbig2r   c              
   C  s^   zt ddgtddd}W n ttfy } ztd|d }~ww |j}|dd }t|S )Nr   z	--versionTascii)r   r   encodingz%jbig2dec - not installed or not found )	r	   r   r   FileNotFoundErrorr   r   replacestripr   )r)   proceresultversion_strr"   r"   r#   r7   X   s   

zJBIG2Decoder._versionNr0   r1   )r   r   )r2   r3   r4   r5   r*   r-   r7   r"   r"   r"   r#   r6   K   s
    

r6   c                   C  s   t S )z&Return an instance of a JBIG2 decoder.)_jbig2_decoderr"   r"   r"   r#   get_decoderj   s   rD   r1   )r   r%   )r5   
__future__r   r   abcr   r   pathlibr   
subprocessr   r   r   r	   tempfiler
   Zpackaging.versionr   ZPILr   Zpikepdf._exceptionsr   r$   r%   r6   rC   rD   r"   r"   r"   r#   <module>   s   
