o
    ë6WjH  ã                   @  sî   U d dl mZ d dl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erAd 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é   )ÚFontFileÚImage)Úi8)Úi16be)Úi16le)Úi32be)Úi32leF)ÚCallable)ÚBinaryIOifcpé   é   é   é   é    é@   é€   é   c                 C  s   | d d? S )Né   é   © ©Úbitsr   r   ú^/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/PIL/PcfFontFile.pyÚ<lambda>2   s    r   c                 C  ó   | d d? d@ S )Né   r   éþÿÿÿr   r   r   r   r   r   3   ó    c                 C  r   )Né   r   éüÿÿÿr   r   r   r   r   r   4   r   c                 C  r   )Né?   r   iøÿÿÿr   r   r   r   r   r   5   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   Úsz9   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Ú	enumerateÚglyph)Úselfr/   r0   ÚmagicÚmsgÚcountÚiÚtypeÚmetricsÚbitmapsÚencodingÚchÚixÚxsizeÚysizeÚleftÚrightÚwidthÚascentÚdescentÚ
attributes©Ú	__class__r   r   r7   B   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)rA   rV   ÚformatÚsizeÚoffsetr/   Úi16Úi32r   r   r   Ú
_getformatp   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   )ra   ÚPCF_PROPERTIESr3   r9   rX   ÚioÚSEEK_CURr+   )rA   Ú
propertiesr\   r_   ÚnpropsÚpÚdataÚkr$   ÚvÚproperty_valuer   rf   r   r:   �   s   zPcfFontFile._load_propertiesú3list[tuple[int, int, int, int, int, int, int, int]]c                   s¢   g ‰|   t¡\‰ }‰}	dd‡fdd„}|d@ dkr5tˆˆ  d¡ƒƒD ]}|‡ fdd„tdƒD ƒŽ  q#ˆS t|ˆ  d¡ƒƒD ]}|‡ ‡fdd„tdƒD ƒŽ  q>ˆS )Nr   rN   r'   rO   rP   rQ   rR   rS   r(   ÚNonec              
     s<   ||  }|| }t  ||f¡ ˆ  ||| |||||f¡ d S )N)r   Ú_decompression_bomb_checkÚappend)rN   rO   rP   rQ   rR   rS   rL   rM   )rG   r   r   ru   ¡   s   ÿz)PcfFontFile._load_metrics.<locals>.appendi ÿ  r   r   c                 3  s"   � | ]}t ˆ  d ¡ƒd V  qdS )r   r   N)r   r3   rc   )r/   r   r   Ú	<genexpr>³   s   €  z,PcfFontFile._load_metrics.<locals>.<genexpr>é   r   c                 3  s   � | ]
}ˆˆ   d ¡ƒV  qdS )r   N©r3   rc   ©r/   r_   r   r   rv   ¸   s   € é   )r   )rN   r'   rO   r'   rP   r'   rQ   r'   rR   r'   rS   r'   r(   rs   )ra   ÚPCF_METRICSr9   r3   )rA   r\   r`   ru   rE   r   )r/   r_   rG   r   r<   ™   s   úýzPcfFontFile._load_metricsrG   ú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   rx   rc   rf   r   r   rg   Ê   ó    z-PcfFontFile._load_bitmaps.<locals>.<listcomp>c                   r}   r~   rx   rc   rf   r   r   rg   Ì   r   r   r   z1;RÚ1r   Úraw)
ra   ÚPCF_BITMAPSr3   ÚlenÚOSErrorr9   ru   r#   r   Ú	frombytes)rA   rG   r\   r_   ÚnbitmapsrC   ÚoffsetsÚbitmap_sizesÚbitorderÚpadindexÚ
bitmapsizern   ÚpadÚmoderH   rE   rL   rM   ÚbÚer   rf   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                   r}   )r   rx   rc   ry   r   r   rg   ó   r   z.PcfFontFile._load_encoding.<locals>.<listcomp>iÿÿ  )ra   ÚPCF_BDF_ENCODINGSr3   Úminr9   rƒ   ÚordÚ	bytearrayÚdecoder0   ÚUnicodeDecodeError)rA   r\   r`   Ú	first_colÚlast_colÚ	first_rowÚlast_rowÚ	nencodingrI   Úencoding_offsetsrE   Úencoding_offsetr   ry   r   r>   æ   s&   ÿ€þzPcfFontFile._load_encoding)r.   )r/   r   r0   r1   )rV   r'   r(   rW   )r(   rb   )r(   rr   )rG   rr   r(   r|   )r(   r�   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r-   r7   ra   r:   r<   r=   r>   Ú__classcell__r   r   rT   r   r,   =   s    
.


#*r,   )r$   r%   r&   r'   r(   r%   )#Ú
__future__r   ri   Ú r   r   Ú_binaryr   r   rY   r   r[   r	   rZ   r
   r2   ÚTYPE_CHECKINGÚcollections.abcr   Útypingr   r4   rh   ÚPCF_ACCELERATORSr{   r‚   ÚPCF_INK_METRICSr‘   ÚPCF_SWIDTHSÚPCF_GLYPH_NAMESÚPCF_BDF_ACCELERATORSr#   Ú__annotations__r+   r,   r   r   r   r   Ú<module>   s:   ü
