a
    h                     @  s   d dl mZ d dlZddl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ddZG dd dejZeejee eejddg dS )    )annotationsN   )Image	ImageFileImagePalette)i16le)i32leo8)DeferredErrorbytesbool)prefixreturnc                 C  s(   t | dko&t| ddv o&t| ddv S )N      )  i     )r      )leni16)r    r   @/var/www/auris/lib/python3.9/site-packages/PIL/FliImagePlugin.py_accept   s
    r   c                   @  sf   e Zd ZdZdZdZddddZdd	dd
ddZd	ddddZd	ddddZ	d	dddZ
dS )FliImageFileZFLIzAutodesk FLI/FLC AnimationFNone)r   c           
      C  s  | j d}t|r$|dd dks0d}t|t|d| _| jdk| _d| _t|d	t|d
f| _t	|d}t|d}|dkr|d d }|| j
d< dd tdD }| j d}d| _t|ddkr| jt	| | _| j | j | j d}t|ddkrt|d}d }t|D ]x}|d ur:| j |d tj | j d}t|d}	|	dv rz| ||	dkrndnd  qt	|}|s qqtdddd |D | _d| _| j | _| j  | _| d d S )N         s     znot an FLI/FLC filer   r   P   
      r   r   i  F   durationc                 S  s   g | ]}|||fqS r   r   ).0ar   r   r   
<listcomp>H       z&FliImageFile._open.<locals>.<listcomp>   i   i  )r      r*      r   ZRGBr(   c                 s  s,   | ]$\}}}t |t | t | V  qd S Nr	   )r%   rgbr   r   r   	<genexpr>e   r(   z%FliImageFile._open.<locals>.<genexpr>)fpreadr   SyntaxErrorr   Zn_framesZis_animated_mode_sizei32inforange_FliImageFile__offsetseekosSEEK_CUR_paletter   rawjoinpalette_FliImageFile__frame_fptell_FliImageFile__rewind)
selfsmsgr$   magicrA   Znumber_of_subchunks
chunk_size_Z
chunk_typer   r   r   _open1   sR    







zFliImageFile._openzlist[tuple[int, int, int]]int)rA   shiftr   c           
      C  s   d}t t| jdD ]}| jd}||d  }|d }|dkrHd}| j|d }t dt|dD ]F}|| |> }||d  |> }||d  |> }	|||	f||< |d7 }qhqd S )Nr   r+   r   r)   r   )r9   r   r2   r3   r   )
rF   rA   rN   ierG   nr-   r.   r/   r   r   r   r>   n   s    zFliImageFile._palette)framer   c                 C  sJ   |  |sd S || jk r"| d t| jd |d D ]}| | q6d S )Nr   r   )Z_seek_checkrB   _seekr9   )rF   rR   fr   r   r   r;      s    


zFliImageFile.seekc                 C  s   t | jtr| jj|dkr8d| _| j| j d| _n|   || jd kr`d| }t	||| _| j| _
| j
| j | j
d}|sd}t|t|}|| _tdd	| j | jg| _|  j|7  _d S )
Nr   r1   r   r   zcannot seek to frame r   zmissing frame sizeZfli)r   r   )
isinstancerC   r   exrB   r;   rE   r:   load
ValueErrorr2   r3   EOFErrorr7   Zdecodermaxblockr   Z_TilesizeZtile)rF   rR   rH   rG   Z	framesizer   r   r   rS      s*    
zFliImageFile._seekc                 C  s   | j S r,   )rB   )rF   r   r   r   rD      s    zFliImageFile.tellN)__name__
__module____qualname__formatformat_descriptionZ!_close_exclusive_fp_after_loadingrL   r>   r;   rS   rD   r   r   r   r   r   ,   s   =	 r   z.fliz.flc)
__future__r   r<    r   r   r   _binaryr   r   r   r7   r
   Z_utilr   r   r   Zregister_openr^   Zregister_extensionsr   r   r   r   <module>   s    