B
    ³è0\ù  ã               @   sŽ   d dl mZmZ d dlmZmZmZm	Z
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 )é   )ÚImageÚFontFile)Úi8Úi16leÚi32leÚi16beÚi32beifcpé   é   é   é   é    é@   é€   é   c             C   s   | d d? S )Né   é   © )Úbitsr   r   ú.lib/python3.7/site-packages/PIL/PcfFontFile.pyÚ<lambda>&   s    r   c             C   s   | d d? d@ S )Né   r   éþÿÿÿr   )r   r   r   r   r   '   s    c             C   s   | d d? d@ S )Né   r   éüÿÿÿr   )r   r   r   r   r   (   s    c             C   s   | d d? d@ S )Né?   r   iøÿÿÿr   )r   r   r   r   r   )   s    c             C   s   | ||   d|¡… S )Nó    )Úindex)ÚsÚor   r   r   Úsz-   s    r    c               @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚPcfFontFileÚnamec          	   C   s*  t | d¡ƒ}|tkrtdƒ‚tj | ¡ t | d¡ƒ}i | _xLt|ƒD ]@}t | d¡ƒ}t | d¡ƒt | d¡ƒt | d¡ƒf| j|< qHW || _|  	¡ | _
|  ¡ }|  |¡}|  ¡ }xntdƒD ]b}	||	 }
|
d k	rÀ||
 \}}}}}}}}|df||| || |fdd||f||
 f}|| j|	< qÀW d S )Nr
   znot a PCF filer   é    )Úl32ÚreadÚ	PCF_MAGICÚSyntaxErrorr   Ú__init__ÚtocÚrangeÚfpÚ_load_propertiesÚinfoÚ_load_metricsÚ_load_bitmapsÚ_load_encodingÚglyph)Úselfr+   ÚmagicÚcountÚiÚtypeÚmetricsÚbitmapsÚencodingZchZixÚxÚyÚlÚrÚwÚaÚdÚfr1   r   r   r   r(   8   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)r2   ÚtagÚformatÚsizeÚoffsetr+   Úi16Úi32r   r   r   Ú
_getformatX   s    

zPcfFontFile._getformatc          	   C   sÐ   i }|   t¡\}}}}|| d¡ƒ}g }x>t|ƒD ]2}| || d¡ƒt| d¡ƒ|| d¡ƒf¡ q2W |d@ r„| d|d@  d¡ | || d¡ƒ¡}	x2|D ]*\}
}}t|	|
ƒ}
|rÀt|	|ƒ}|||
< qžW |S )Nr
   r   r   )rL   ÚPCF_PROPERTIESr%   r*   Úappendr   rB   r    )r2   Z
propertiesr+   rG   rJ   rK   ZnpropsÚpr5   ÚdataÚkr   Úvr   r   r   r,   h   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
   )rL   ÚPCF_METRICSrN   r*   r%   r   )r2   r7   r+   rG   rJ   rK   rN   r5   ÚleftÚrightÚwidthZascentZdescentZxsizeZysizeZ
attributesr   r   r   r.   „   s8    

zPcfFontFile._load_metricsc             C   s:  g }|   t¡\}}}}|| d¡ƒ}|t|ƒkr8tdƒ‚g }x$t|ƒD ]}	| || d¡ƒ¡ qFW g }
x$tdƒD ]}	|
 || d¡ƒ¡ qpW |d@ }|d@ }|
| }| |¡ | |¡}t| }d}|rÌd}xht|ƒD ]\}	||	 \}}}}}}}}||	 ||	d   }}| t 	d||f|||… d|||ƒ¡¡ qÖW |S )	Nr
   zWrong number of bitmapsr   r   z1;RÚ1r   Úraw)
rL   ÚPCF_BITMAPSr%   ÚlenÚIOErrorr*   rN   ÚBYTES_PER_ROWr   Z	frombytes)r2   r7   r8   r+   rG   rJ   rK   ZnbitmapsZoffsetsr5   ZbitmapSizesZbitorderZpadindexZ
bitmapsizerP   ZpadÚmoder:   r;   r<   r=   r>   r?   r@   rA   ÚbÚer   r   r   r/   ²   s4    

*zPcfFontFile._load_bitmapsc          	   C   sÒ   d gd }|   t¡\}}}}|| d¡ƒ|| d¡ƒ }}|| d¡ƒ|| d¡ƒ }}	|| d¡ƒ || d |	| d  }
xNt|
ƒD ]B}|| d¡ƒ}|dkrˆy|||| < W qˆ tk
rÈ   P Y qˆX qˆW |S )Nr   r	   r   iÿÿ  )rL   ÚPCF_BDF_ENCODINGSr%   r*   Ú
IndexError)r2   r9   r+   rG   rJ   rK   ZfirstColZlastColZfirstRowZlastRowZ	nencodingr5   ZencodingOffsetr   r   r   r0   ß   s    
zPcfFontFile._load_encodingN)
Ú__name__Ú
__module__Ú__qualname__r"   r(   rL   r,   r.   r/   r0   r   r   r   r   r!   4   s    .-r!   N)Ú r   r   Z_binaryr   r   rE   r   r$   r   rC   r   rD   r&   rM   ZPCF_ACCELERATORSrS   rY   ZPCF_INK_METRICSr`   ZPCF_SWIDTHSZPCF_GLYPH_NAMESZPCF_BDF_ACCELERATORSr\   r    r!   r   r   r   r   Ú<module>   s"   
