o
    *ήc#                     @   s8  d dl mZ ddlmZ ddlmZ G dd deZG dd deZG d	d
 d
eZG dd deZ	G dd deZ
G dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd  d eZG d!d" d"eZG d#d$ d$eZG d%d& d&eZd'S )(    )absolute_import   )Type)IsoBmffc                       0   e Zd ZdZdZdZ fddZdd Z  ZS )Jpegz1
    Implements the JPEG image type matcher.
    z
image/jpegjpgc                       t t| jtjtjd d S N)mime	extension)superr   __init__MIME	EXTENSIONself	__class__ ;/tmp/pip-target-vg8gfxp4/lib/python/filetype/types/image.pyr         

zJpeg.__init__c                 C   s0   t |dko|d dko|d dko|d dkS )N   r      r      lenr   bufr   r   r   match      


z
Jpeg.match	__name__
__module____qualname____doc__r   r   r   r   __classcell__r   r   r   r   r   	       r   c                       r   )Jpxz5
    Implements the JPEG2000 image type matcher.
    z	image/jpxjpxc                    r	   r
   )r   r(   r   r   r   r   r   r   r   r   %   s   zJpx.__init__c                 C   sL   t |dko%|d dko%|d dko%|d dko%|d dko%|dd d	kS )
N2   r   r   r               s   ftypjp2 r   r   r   r   r   r   (   s   



z	Jpx.matchr!   r   r   r   r   r(      s    r(   c                       r   )Apngz1
    Implements the APNG image type matcher.
    z
image/apngapngc                    r	   r
   )r   r/   r   r   r   r   r   r   r   r   :   r   zApng.__init__c                 C   s   t |dkrX|d d tg dkrXd}t ||krXtj|||d  dd}|d7 }|||d  jddd}|d7 }|d	ksD|d
krFdS |dkrLdS ||d 7 }t ||ksdS )N   )   P   N   G      
      r7      big)	byteorderasciiignore)errorsIDATIENDFacTLT)r   	bytearrayint
from_bytesdecode)r   r   idata_length
chunk_typer   r   r   r   @   s    z
Apng.matchr!   r   r   r   r   r/   3   r'   r/   c                       r   )Pngz0
    Implements the PNG image type matcher.
    z	image/pngpngc                    r	   r
   )r   rI   r   r   r   r   r   r   r   r   a   r   zPng.__init__c                 C   <   t |dko|d dko|d dko|d dko|d dkS )	Nr+   r   r2   r   r3   r   r4   r5   r   r   r   r   r   r   g      



z	Png.matchr!   r   r   r   r   rI   Z   r'   rI   c                       r   )Gifz0
    Implements the GIF image type matcher.
    z	image/gifgifc                    r	   r
   )r   rM   r   r   r   r   r   r   r   r   v   r   zGif.__init__c                 C   s0   t |dko|d dko|d dko|d dkS )Nr   r   r5   r   I   F   r   r   r   r   r   r   |   r    z	Gif.matchr!   r   r   r   r   rM   o   r'   rM   c                       r   )Webpz1
    Implements the WEBP image type matcher.
    z
image/webpwebpc                    r	   r
   )r   rQ   r   r   r   r   r   r   r   r      r   zWebp.__init__c                 C   s   t |dkoA|d dkoA|d dkoA|d dkoA|d dkoA|d	 d
koA|d dkoA|d dkoA|d dkoA|d dkoA|d dkS )Nr6   r   R   r   rO   r   rP   r+   r1   W   	   E   r7   B      r3   r,   V   r   r   r   r   r   r      s*   








	

z
Webp.matchr!   r   r   r   r   rQ      r'   rQ   c                       r   )Cr2z0
    Implements the CR2 image type matcher.
    zimage/x-canon-cr2cr2c                    r	   r
   )r   rZ   r   r   r   r   r   r   r   r      r   zCr2.__init__c                 C   s   t |dkoA|d dkr|d dkr|d dkr|d dkp5|d dko5|d dko5|d dko5|d dkoA|d	 d
koA|d dkS NrU   r   rO   r   r   *   r+   M   r1   C   rS   r   r   r   r   r   r      s   





z	Cr2.matchr!   r   r   r   r   rZ      r'   rZ   c                       r   )Tiffz1
    Implements the TIFF image type matcher.
    z
image/tifftifc                    r	   r
   )r   r`   r   r   r   r   r   r   r   r      r   zTiff.__init__c                 C   s   t |dkoB|d dkr|d dkr|d dkr|d dkp5|d dko5|d dko5|d dko5|d dkoB|d	 d
koA|d dk S r\   r   r   r   r   r   r      s   



z
Tiff.matchr!   r   r   r   r   r`      r'   r`   c                       r   )Bmpz0
    Implements the BMP image type matcher.
    z	image/bmpbmpc                    r	   r
   )r   rb   r   r   r   r   r   r   r   r      r   zBmp.__init__c                 C   s$   t |dko|d dko|d dkS )Nr   r   rW   r^   r   r   r   r   r   r      s
   

z	Bmp.matchr!   r   r   r   r   rb      r'   rb   c                       r   )Jxrz0
    Implements the JXR image type matcher.
    zimage/vnd.ms-photojxrc                    r	   r
   )r   rd   r   r   r   r   r   r   r   r      r   zJxr.__init__c                 C   s0   t |dko|d dko|d dko|d dkS )Nr   r   rO   r      r   r   r   r   r   r      r    z	Jxr.matchr!   r   r   r   r   rd      r'   rd   c                       r   )Psdz0
    Implements the PSD image type matcher.
    zimage/vnd.adobe.photoshoppsdc                    r	   r
   )r   rg   r   r   r   r   r   r   r   r      r   zPsd.__init__c                 C   rK   )	Nr+   r   8   r   rW   r   r3   S   r   r   r   r   r   r      rL   z	Psd.matchr!   r   r   r   r   rg      r'   rg   c                       r   )Icoz0
    Implements the ICO image type matcher.
    zimage/x-iconicoc                    r	   r
   )r   rk   r   r   r   r   r   r   r   r     r   zIco.__init__c                 C   s<   t |dko|d dko|d dko|d dko|d dkS )Nr+   r   r   r   r   r   r   r   r   r     rL   z	Ico.matchr!   r   r   r   r   rk     r'   rk   c                       r   )Heicz1
    Implements the HEIC image type matcher.
    z
image/heicheicc                    r	   r
   )r   rm   r   r   r   r   r   r   r   r   "  r   zHeic.__init__c                 C   B   |  |sdS | |\}}}|dkrdS |dv rd|v rdS dS )NFrn   Tmif1msf1_is_isobmff	_get_ftypr   r   major_brandminor_versioncompatible_brandsr   r   r   r   (     
z
Heic.matchr!   r   r   r   r   rm     r'   rm   c                       r   )Dcmzapplication/dicomdcm   c                    r	   r
   )r   r{   r   r   r   r   r   r   r   r   :  r   zDcm.__init__c                 C   sZ   t |tjd ko,|tjd  dko,|tjd  dko,|tjd  dko,|tjd  d	kS )
Nr9   r   D   r   rO   r   r_   r+   r^   )r   r{   OFFSETr   r   r   r   r   @  s   z	Dcm.match)	r"   r#   r$   r   r   r   r   r   r&   r   r   r   r   r{   4  s    r{   c                       r   )Dwgz&Implements the Dwg image type matcher.zimage/vnd.dwgdwgc                    r	   r
   )r   r   r   r   r   r   r   r   r   r   N  r   zDwg.__init__c                 C      |d d t g dkS )Nr9   )A   r_   1   0   rB   r   r   r   r   r   T     z	Dwg.matchr!   r   r   r   r   r   H      r   c                       r   )Xcfz&Implements the Xcf image type matcher.zimage/x-xcfxcfc                    r	   r
   )r   r   r   r   r   r   r   r   r   r   ^  r   zXcf.__init__c                 C   r   )Nr7   )
g   i   m   p       x   c   f   r   v   r   r   r   r   r   r   d  r   z	Xcf.matchr!   r   r   r   r   r   X  r   r   c                       r   )Avifz1
    Implements the AVIF image type matcher.
    z
image/avifavifc                    r	   r
   )r   r   r   r   r   r   r   r   r   r   p  r   zAvif.__init__c                 C   ro   )NFr   Trp   rs   rv   r   r   r   r   v  rz   z
Avif.matchr!   r   r   r   r   r   i  r'   r   N)
__future__r   baser   isobmffr   r   r(   r/   rI   rM   rQ   rZ   r`   rb   rd   rg   rk   rm   r{   r   r   r   r   r   r   r   <module>   s(   '