U
    ?h                     @  s   U d dl mZ d dlZd dlmZmZ ddl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
l	mZ dZdZdZdZdZdZdZdZdZdZdd dd dd dd gZded< ddddddZG d d! d!ejZ dS )"    )annotationsN)BinaryIOCallable   )FontFileImage)i8)i16be)i16le)i32be)i32leifcp                @         c                 C  s   | d d? S )N       bitsr   r   A/var/www/html/venv/lib/python3.8/site-packages/PIL/PcfFontFile.py<lambda>.       r   c                 C  s   | d d? d@ S )N   r   r   r   r   r   r   r   /   r   c                 C  s   | d d? d@ S )N   r   r   r   r   r   r   r   0   r   c                 C  s   | d d? d@ S )N?   r   ir   r   r   r   r   r   1   r   zlist[Callable[[int], int]]BYTES_PER_ROWbytesint)soreturnc                 C  s   | ||  d| S )N    )index)r%   r&   r   r   r   sz5   s    r*   c                      sx   e Zd ZdZdZdddd fddZd	d
dddZddddZddddZdddddZ	ddddZ
  ZS )PcfFontFilez(Font file plugin for the X11 PCF format.name	iso8859-1r   str)fpcharset_encodingc              	     s"  || _ t|d}|tkr(d}t|t   t|d}i | _t|D ]@}t|d}t|dt|dt|df| j|< qN|| _	| 
 | _|  }| |}	|  }
t|
D ]Z\}}|d k	r|| \}}}}}}}}|df||| || |fdd||f|	| f| j|< qd S )Nr   znot a PCF filer   )r0   l32read	PCF_MAGICSyntaxErrorsuper__init__tocranger/   _load_propertiesinfo_load_metrics_load_bitmaps_load_encoding	enumerateZglyph)selfr/   r0   magicmsgcountitypemetricsbitmapsencodingchZixxsizeysizeleftrightwidthascentdescent
attributes	__class__r   r   r6   >   sB    
0



zPcfFontFile.__init__r$   zDtuple[BinaryIO, int, Callable[[bytes], int], Callable[[bytes], int]])tagr'   c                 C  sX   | j | \}}}| j}|| t|d}|d@ rBtt }}n
tt }}||||fS )Nr   )r7   r/   seekr1   r2   b16b32l16)r?   rS   formatsizeoffsetr/   i16i32r   r   r   
_getformatl   s    

zPcfFontFile._getformatzdict[bytes, bytes | int])r'   c                   s   i }|  t\ }} d} fddt|D }|d@ rZ d|d@  tj   d}|D ]*\}}}	|rt||	n|	}
|
|t||< qr|S )Nr   c                   s4   g | ],}  d t  d  d fqS )r   r   )r2   r   .0_r/   r\   r   r   
<listcomp>   s     z0PcfFontFile._load_properties.<locals>.<listcomp>r   )r]   PCF_PROPERTIESr2   r8   rT   ioSEEK_CURr*   )r?   
propertiesrX   r[   Znpropspdatakr%   vZproperty_valuer   ra   r   r9   }   s    zPcfFontFile._load_propertiesz3list[tuple[int, int, int, int, int, int, int, int]]c              
   C  s\  g }|  t\}}}}|j}|d@ dkrt||dD ]}t|dd }t|dd }	t|dd }
t|dd }t|dd }|	| }|| }|||||	|
||df q:nt||dD ]}||d}||d}	||d}
||d}||d}||d}|	| }|| }|||||	|
|||f q|S )Ni   r   r   r   r   r   r   )r]   PCF_METRICSappendr8   r2   r   )r?   rE   r/   rX   r[   r\   rl   rC   rK   rL   rM   rN   rO   rI   rJ   rP   r   r   r   r;      s0    zPcfFontFile._load_metricszlist[Image.Image])rE   r'   c                   s  |  t\ }} d}|t|kr8d}t| fddt|D } fddtdD }|d@ }|d@ }	||	 }
||
  |
}t|	 }d}|rd	}g }t|D ]V}|| d d
 \}}|||d
  \}}|t	d	||f||| d||| q|S )Nr   zWrong number of bitmapsc                   s   g | ]}  d qS r   r2   r^   ra   r   r   rb      s     z-PcfFontFile._load_bitmaps.<locals>.<listcomp>c                   s   g | ]}  d qS rm   rn   r^   ra   r   r   rb      s     r   r   z1;R1r   raw)
r]   PCF_BITMAPSr2   lenOSErrorr8   rl   r"   r   	frombytes)r?   rE   rX   r[   ZnbitmapsrA   offsetsZbitmap_sizesZbitorderZpadindexZ
bitmapsizerh   padmoderF   rC   rI   rJ   ber   ra   r   r<      s0    

"zPcfFontFile._load_bitmapszlist[int | None]c              	     s   |  t\ }} d d }} d d }} d || d || d  }d gtd| } fddt|D }	t|t|D ]H}
z.|	tt|
g| j	 }|dkr|||
< W q t
k
r   Y qX q|S )Nr   r   r   c                   s   g | ]}  d qS )r   rn   r^   r/   r[   r   r   rb      s     z.PcfFontFile._load_encoding.<locals>.<listcomp>i  )r]   PCF_BDF_ENCODINGSr2   minr8   rr   ord	bytearraydecoder0   UnicodeDecodeError)r?   rX   r\   Z	first_colZlast_col	first_rowlast_rowZ	nencodingrG   Zencoding_offsetsrC   Zencoding_offsetr   rz   r   r=      s"    zPcfFontFile._load_encoding)r-   )__name__
__module____qualname____doc__r,   r6   r]   r9   r;   r<   r=   __classcell__r   r   rQ   r   r+   9   s   .%*r+   )!
__future__r   rd   typingr   r    r   r   _binaryr   r	   rU   r
   rW   r   rV   r   r1   r3   rc   ZPCF_ACCELERATORSrk   rq   ZPCF_INK_METRICSr{   ZPCF_SWIDTHSZPCF_GLYPH_NAMESZPCF_BDF_ACCELERATORSr"   __annotations__r*   r+   r   r   r   r   <module>   s4    