o
    Zh                     @  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!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   F/var/www/html/lang_env/lib/python3.10/site-packages/PIL/PcfFontFile.py<lambda>.   s    r   c                 C     | d d? d@ S )N   r   r   r   r   r   r   r   /       c                 C  r   )N   r   r   r   r   r   r   r   0   r   c                 C  r   )N?   r   ir   r   r   r   r   r   1   r   zlist[Callable[[int], int]]BYTES_PER_ROWsbytesointreturnc                 C  s   | ||  d| S )N    )index)r$   r&   r   r   r   sz5   s   r+   c                      sZ   e Zd ZdZdZdd fdd	ZdddZd ddZd!ddZd"ddZ	d#ddZ
  ZS )$PcfFontFilez(Font file plugin for the X11 PCF format.name	iso8859-1fpr   charset_encodingstrc              	     s"  || _ t|d}|tkrd}t|t   t|d}i | _t|D ] }t|d}t|dt|dt|df| j|< q'|| _	| 
 | _|  }| |}	|  }
t|
D ]-\}}|d ur|| \}}}}}}}}|df||| || |fdd||f|	| f| j|< qad 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   r7   >   sF   
0




zPcfFontFile.__init__tagr'   r(   Dtuple[BinaryIO, int, Callable[[bytes], int], Callable[[bytes], int]]c                 C  sX   | j | \}}}| j}|| t|d}|d@ r!tt}}ntt}}||||fS )Nr   )r8   r/   seekr2   r3   b16b32l16)r@   rT   formatsizeoffsetr/   i16i32r   r   r   
_getformatl   s   

zPcfFontFile._getformatdict[bytes, bytes | int]c                   s   i }|  t\ }} d} fddt|D }|d@ r- d|d@  tj   d}|D ]\}}}	|rEt||	n|	}
|
|t||< q9|S )Nr   c                   s4   g | ]}  d t  d  d fqS )r   r   )r3   r   .0_r/   r^   r   r   
<listcomp>   s   4 z0PcfFontFile._load_properties.<locals>.<listcomp>r   )r_   PCF_PROPERTIESr3   r9   rV   ioSEEK_CURr+   )r@   
propertiesrZ   r]   Znpropspdatakr$   vZproperty_valuer   rd   r   r:   }   s   zPcfFontFile._load_properties3list[tuple[int, int, int, int, int, int, int, int]]c              
   C  s^  g }|  t\}}}}|j}|d@ dkrct||dD ]C}t|dd }t|dd }	t|dd }
t|dd }t|dd }|	| }|| }|||||	|
||df q|S t||dD ]@}||d}||d}	||d}
||d}||d}||d}|	| }|| }|||||	|
|||f ql|S )Ni   r   r   r   r   r   r   )r_   PCF_METRICSappendr9   r3   r   )r@   rF   r/   rZ   r]   r^   rp   rD   rL   rM   rN   rO   rP   rJ   rK   rQ   r   r   r   r<      s2   zPcfFontFile._load_metricsrF   list[Image.Image]c                   s  |  t\ }} d}|t|krd}t| fddt|D } fddtdD }|d@ }|d@ }	||	 }
||
  |
}t|	 }d}|rTd	}g }t|D ]+}|| d d
 \}}|||d
  \}}|t	d	||f||| d||| qZ|S )Nr   zWrong number of bitmapsc                      g | ]	}  d qS r   r3   ra   rd   r   r   re          z-PcfFontFile._load_bitmaps.<locals>.<listcomp>c                   rr   rs   rt   ra   rd   r   r   re      ru   r   r   z1;R1r   raw)
r_   PCF_BITMAPSr3   lenOSErrorr9   rp   r#   r   	frombytes)r@   rF   rZ   r]   ZnbitmapsrB   offsetsZbitmap_sizesZbitorderZpadindexZ
bitmapsizerk   padmoderG   rD   rJ   rK   ber   rd   r   r=      s0   

"zPcfFontFile._load_bitmaps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 ]"}
z|	tt|
g| j	 }|dkrm|||
< W qU t
yw   Y qUw |S )Nr   r   r   c                   rr   )r   rt   ra   r/   r]   r   r   re      ru   z.PcfFontFile._load_encoding.<locals>.<listcomp>i  )r_   PCF_BDF_ENCODINGSr3   minr9   ry   ord	bytearraydecoder0   UnicodeDecodeError)r@   rZ   r^   Z	first_colZlast_col	first_rowlast_rowZ	nencodingrH   Zencoding_offsetsrD   Zencoding_offsetr   r   r   r>      s&   zPcfFontFile._load_encoding)r.   )r/   r   r0   r1   )rT   r'   r(   rU   )r(   r`   )r(   rn   )rF   rn   r(   rq   )r(   r   )__name__
__module____qualname____doc__r-   r7   r_   r:   r<   r=   r>   __classcell__r   r   rR   r   r,   9   s    
.


%*r,   )r$   r%   r&   r'   r(   r%   )!
__future__r   rg   typingr   r    r   r   _binaryr   r	   rW   r
   rY   r   rX   r   r2   r4   rf   ZPCF_ACCELERATORSro   rx   ZPCF_INK_METRICSr   ZPCF_SWIDTHSZPCF_GLYPH_NAMESZPCF_BDF_ACCELERATORSr#   __annotations__r+   r,   r   r   r   r   <module>   s4   
