B
    eAde  ã               @   s¶   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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d„ ZG dd„ dejƒZdS )é    Né   )ÚFontFileÚImage)Úi8)Úi16be)Úi16le)Úi32be)Úi32leifcpé   é   é   é   é    é@   é€   é   c             C   s   | d d? S )Né   é   © )Úbitsr   r   úA/var/www/html/venv/lib/python3.7/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   .   r   c             C   s   | d d? d@ S )Né?   r   iøÿÿÿr   )r   r   r   r   r   /   r   c             C   s   | ||   d|¡… S )Nó    )Úindex)ÚsÚor   r   r   Úsz3   s    r"   c                   sN   e Zd ZdZdZd‡ fdd„	Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
‡  ZS )ÚPcfFontFilez(Font file plugin for the X11 PCF format.Únameú	iso8859-1c          	      s*  || _ t| d¡ƒ}|tkr(d}t|ƒ‚tƒ  ¡  t| d¡ƒ}i | _xLt|ƒD ]@}t| d¡ƒ}t| d¡ƒt| d¡ƒt| d¡ƒf| j|< qPW || _	|  
¡ | _|  ¡ }|  |¡}	|  ¡ }
xft|
ƒD ]Z\}}|d k	rÈ|| \}}}}}}}}|df||| || |fdd||f|	| f| j|< qÈW d S )Nr   znot a PCF filer   )Úcharset_encodingÚl32ÚreadÚ	PCF_MAGICÚSyntaxErrorÚsuperÚ__init__ÚtocÚrangeÚfpÚ_load_propertiesÚinfoÚ_load_metricsÚ_load_bitmapsÚ_load_encodingÚ	enumerateZglyph)Úselfr/   r&   ÚmagicÚmsgÚcountÚiÚtypeÚmetricsÚbitmapsÚencodingÚchZixÚxsizeÚysizeÚleftÚrightÚwidthÚascentÚdescentÚ
attributes)Ú	__class__r   r   r,   <   s.    
2



zPcfFontFile.__init__c             C   sX   | j | \}}}| j}| |¡ t| d¡ƒ}|d@ rBtt }}n
tt }}||||fS )Nr   )r-   r/   Úseekr'   r(   Úb16Úb32Úl16)r6   ÚtagÚformatÚsizeÚoffsetr/   Úi16Úi32r   r   r   Ú
_getformatj   s    

zPcfFontFile._getformatc          	   C   sÒ   i }|   t¡\}}}}|| d¡ƒ}g }x>t|ƒD ]2}| || d¡ƒt| d¡ƒ|| d¡ƒf¡ q2W |d@ r†| d|d@  tj¡ | || d¡ƒ¡}	x2|D ]*\}
}}t	|	|
ƒ}
|rÂt	|	|ƒ}|||
< q W |S )Nr   r   r   )
rS   ÚPCF_PROPERTIESr(   r.   Úappendr   rI   ÚioÚSEEK_CURr"   )r6   Ú
propertiesr/   rN   rQ   rR   ZnpropsÚpr:   ÚdataÚkr    Úvr   r   r   r0   y   s    2

zPcfFontFile._load_propertiesc          
   C   sd  g }|   t¡\}}}}|j}|d@ dkrÈxœt|| d¡ƒƒD ]†}t| d¡ƒd }t| d¡ƒd }	t| d¡ƒd }
t| d¡ƒd }t| d¡ƒd }|	| }|| }|||||	|
||dfƒ q<W n˜x–t|| d¡ƒƒD ]€}|| d¡ƒ}|| d¡ƒ}	|| d¡ƒ}
|| d¡ƒ}|| d¡ƒ}|| d¡ƒ}|	| }|| }|||||	|
|||fƒ qÜW |S )Ni ÿ  r   r
   r   r   r   r   )rS   ÚPCF_METRICSrU   r.   r(   r   )r6   r<   r/   rN   rQ   rR   rU   r:   rB   rC   rD   rE   rF   r@   rA   rG   r   r   r   r2   ”   s0    zPcfFontFile._load_metricsc             C   s8  g }|   t¡\}}}}|| d¡ƒ}|t|ƒkr<d}t|ƒ‚g }	x$t|ƒD ]}
|	 || d¡ƒ¡ qJW g }x$tdƒD ]}
| || d¡ƒ¡ qtW |d@ }|d@ }|| }|	 |¡ | |¡}t| }d}|rÐd}xbt|ƒD ]V}
||
 d d… \}}|	|
|
d … \}}| t 	d||f|||… d|||ƒ¡¡ qÚW |S )	Nr   zWrong number of bitmapsr   r   z1;RÚ1r
   Úraw)
rS   ÚPCF_BITMAPSr(   ÚlenÚOSErrorr.   rU   ÚBYTES_PER_ROWr   Ú	frombytes)r6   r<   r=   r/   rN   rQ   rR   Znbitmapsr8   Úoffsetsr:   Zbitmap_sizesZbitorderZpadindexZ
bitmapsizerZ   ÚpadÚmoder@   rA   ÚbÚer   r   r   r3   ¹   s6    

*zPcfFontFile._load_bitmapsc          	      sü   |   t¡\‰ }‰}ˆˆ  d¡ƒˆˆ  d¡ƒ }}ˆˆ  d¡ƒˆˆ  d¡ƒ }}ˆˆ  d¡ƒ || d || d  }d gtd|ƒ }‡ ‡fdd„t|ƒD ƒ}	xZt|t|ƒƒD ]H}
y.|	tt|
gƒ | j	¡ƒ }|dkrÜ|||
< W q¬ t
k
rò   Y q¬X q¬W |S )Nr
   r   r   c                s   g | ]}ˆˆ   d ¡ƒ‘qS )r
   )r(   )Ú.0Ú_)r/   rQ   r   r   ú
<listcomp>ó   s    z.PcfFontFile._load_encoding.<locals>.<listcomp>iÿÿ  )rS   ÚPCF_BDF_ENCODINGSr(   Úminr.   ra   ÚordÚ	bytearrayÚdecoder&   ÚUnicodeDecodeError)r6   rN   rR   Z	first_colZlast_colÚ	first_rowÚlast_rowZ	nencodingr>   Zencoding_offsetsr:   Zencoding_offsetr   )r/   rQ   r   r4   æ   s     
zPcfFontFile._load_encoding)r%   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r$   r,   rS   r0   r2   r3   r4   Ú__classcell__r   r   )rH   r   r#   7   s   .%-r#   )rV   Ú r   r   Ú_binaryr   r   rJ   r   rL   r   rK   r	   r'   r)   rT   ZPCF_ACCELERATORSr]   r`   ZPCF_INK_METRICSrm   ZPCF_SWIDTHSZPCF_GLYPH_NAMESZPCF_BDF_ACCELERATORSrc   r"   r#   r   r   r   r   Ú<module>   s,   
