3
`¢JZø  ã               @   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 )Nr   r   © )Úbitsr   r   ú1/usr/lib/python3/dist-packages/PIL/PcfFontFile.pyÚ<lambda>&   s    r   c             C   s   | d d? d@ S )Né   r   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   r   iøÿÿÿr   )r   r   r   r   r   )   s    c             C   s   | || j 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 |jdƒƒ}|tkrtdƒ‚tjj| ƒ t |jdƒƒ}i | _xLt|ƒD ]@}t |jdƒƒ}t |jdƒƒt |jdƒƒt |jdƒƒf| j|< qHW || _| j	ƒ | _
| jƒ }| j|ƒ}| jƒ }xntdƒD ]b}	||	 }
|
d k	rÀ||
 \}}}}}}}}|df||| || |fdd||f||
 f}|| j|	< qÀW d S )Nr   znot a PCF fileé   r	   )Ú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Úfr/   r   r   r   r&   8   s(    2

,zPcfFontFile.__init__c             C   sX   | j | \}}}| j}|j|ƒ t|jdƒƒ}|d@ rBtt }}n
tt }}||||fS )Nr   )r'   r)   Úseekr"   r#   Úb16Úb32Úl16)r0   ÚtagÚformatÚsizeÚoffsetr)   Úi16Úi32r   r   r   Ú
_getformatX   s    

zPcfFontFile._getformatc             C   sÐ   i }| j tƒ\}}}}||jdƒƒ}g }x>t|ƒD ]2}|j||jdƒƒt|jdƒƒ||jdƒƒfƒ q2W |d@ r„|jd|d@  dƒ |j||jdƒƒƒ}	x2|D ]*\}
}}t|	|
ƒ}
|rÀt|	|ƒ}|||
< qžW |S )Nr   r   r   )rJ   ÚPCF_PROPERTIESr#   r(   Úappendr   r@   r   )r0   Z
propertiesr)   rE   rH   rI   ZnpropsÚpr3   ÚdataÚkr   Úvr   r   r   r*   h   s    2

zPcfFontFile._load_propertiesc          
   C   sd  g }| j tƒ\}}}}|j}|d@ dkrÈxœt||jdƒƒƒD ]†}t|jdƒƒd }t|jdƒƒd }	t|jdƒƒd }
t|jdƒƒd }t|jdƒƒd }|	| }|| }|||||	|
||dfƒ q<W n˜x–t||jdƒƒƒD ]€}||jdƒƒ}||jdƒƒ}	||jdƒƒ}
||jdƒƒ}||jdƒƒ}||jdƒƒ}|	| }|| }|||||	|
|||fƒ qÜW |S )Ni ÿ  r!   r
   r   é€   r	   r   )rJ   ÚPCF_METRICSrL   r(   r#   r   )r0   r5   r)   rE   rH   rI   rL   r3   ÚleftÚrightÚwidthZascentZdescentZxsizeZysizeZ
attributesr   r   r   r,   „   s8    

zPcfFontFile._load_metricsc          
   C   s:  g }| j tƒ\}}}}||jdƒƒ}|t|ƒkr8tdƒ‚g }x$t|ƒD ]}	|j||jdƒƒƒ qFW g }
x$tdƒD ]}	|
j||jdƒƒƒ qpW |d@ }|d@ }|
| }|j|ƒ |j|ƒ}t| }d}|rÌd}xht|ƒD ]\}	||	 \}}}}}}}}||	 ||	d   }}|jtj	d||f|||… d|||ƒƒƒ qÖW |S )	Nr   zWrong number of bitmapsr   r   z1;RÚ1r   Úraw)
rJ   ÚPCF_BITMAPSr#   ÚlenÚIOErrorr(   rL   ÚBYTES_PER_ROWr   Z	frombytes)r0   r5   r6   r)   rE   rH   rI   ZnbitmapsZoffsetsr3   ZbitmapSizesZbitorderZpadindexZ
bitmapsizerN   ZpadÚmoder8   r9   r:   r;   r<   r=   r>   r?   ÚbÚer   r   r   r-   ²   s4    

*zPcfFontFile._load_bitmapsc             C   sÒ   d gd }| j tƒ\}}}}||jdƒƒ||jdƒƒ }}||jdƒƒ||jdƒƒ }}	||jdƒƒ}
|| d |	| d  }xNt|ƒD ]B}||jdƒƒ}|dkrˆy|||| < W qˆ tk
rÈ   P Y qˆX qˆW |S )Nr!   r
   r   iÿÿ  )rJ   ÚPCF_BDF_ENCODINGSr#   r(   Ú
IndexError)r0   r7   r)   rE   rH   rI   ZfirstColZlastColZfirstRowZlastRowÚdefaultZ	nencodingr3   ZencodingOffsetr   r   r   r.   ß   s    
zPcfFontFile._load_encodingN)
Ú__name__Ú
__module__Ú__qualname__r    r&   rJ   r*   r,   r-   r.   r   r   r   r   r   4   s    .-r   Nr   r
   r   r   é   é    é@   rQ   r!   )Ú r   r   Z_binaryr   r   rC   r   r"   r   rA   r   rB   r$   rK   ZPCF_ACCELERATORSrR   rX   ZPCF_INK_METRICSr_   ZPCF_SWIDTHSZPCF_GLYPH_NAMESZPCF_BDF_ACCELERATORSr[   r   r   r   r   r   r   Ú<module>   s"   
