a
    &g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   ú_/mounts/lovelace/software/anaconda3/envs/metaDMG/lib/python3.9/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   iøÿÿÿr   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 urÂ|| \}}}}}}}}|df||| || |fdd||f|	| f| j|< qÂd 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 ]*\}}}	|rŠt||	ƒ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>ˆ   r   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rÄt|| d¡ƒƒD ]†}t| d¡ƒd }t| d¡ƒd }	t| d¡ƒd }
t| d¡ƒd }t| d¡ƒd }|	| }|| }|||||	|
||dfƒ q:n”t|| 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}|r¨d	}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   È   r   z-PcfFontFile._load_bitmaps.<locals>.<listcomp>c                   s   g | ]}ˆˆ   d ¡ƒ‘qS rm   rn   r^   ra   r   r   rb   Ê   r   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 ]F}
z.|	tt|
gƒ | j	¡ƒ }|dkrÚ|||
< W qª t
yî   Y qª0 qª|S )Nr   r   r   c                   s   g | ]}ˆˆ   d ¡ƒ‘qS )r   rn   r^   ©r/   r[   r   r   rb   ñ   r   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>   s2   ü