o
    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!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   Q/var/www/html/optinet_system/venv/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	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   >   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   
_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   )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_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   )ra   PCF_METRICSappendr9   r3   r   )rA   rG   r/   r\   r_   r`   rt   rE   rN   rO   rP   rQ   rR   rL   rM   rS   r   r   r   r<      s2   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   r3   rc   rf   r   r   rg          z-PcfFontFile._load_bitmaps.<locals>.<listcomp>c                   rv   rw   rx   rc   rf   r   r   rg      ry   r   r   z1;R1r   raw)
ra   PCF_BITMAPSr3   lenOSErrorr9   rt   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                   rv   )r   rx   rc   r/   r_   r   r   rg      ry   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   r   r   r>      s&   zPcfFontFile._load_encoding)r.   )r/   r   r0   r1   )rV   r'   r(   rW   )r(   rb   )r(   rr   )rG   rr   r(   ru   )r(   r   )__name__
__module____qualname____doc__r-   r7   ra   r:   r<   r=   r>   __classcell__r   r   rT   r   r,   9   s    
.


%*r,   )r$   r%   r&   r'   r(   r%   )!
__future__r   ri   typingr   r    r   r   _binaryr   r	   rY   r
   r[   r   rZ   r   r2   r4   rh   PCF_ACCELERATORSrs   r|   PCF_INK_METRICSr   PCF_SWIDTHSPCF_GLYPH_NAMESPCF_BDF_ACCELERATORSr#   __annotations__r+   r,   r   r   r   r   <module>   s4   
