U
    L»{jÜ�  ã                   @   sŽ   d dl mZmZmZ d dlZd dlZddlmZmZm	Z	m
Z
mZmZ ddlmZmZ dZdZdZdZd	Zd
Zdd„ Zdd„ ZG dd„ dƒZdS )é    )ÚpackÚunpackÚunpack_fromNé   )ÚdieÚsubstrÚ
str_repeatÚstr_padÚstrlenÚcount)ÚbÚordFé   é    é@   é€   c                 C   sh   | d }| d }|d }|d }||kr8|d7 }|d7 }|| }||krP|d7 }|| }|d@ }||fS )Nr   r   é   éÿÿ  © )ÚxÚyZxloZxhiZyloZyhiZresloZreshir   r   úK/var/www/html/bwave/python/venv/lib/python3.8/site-packages/fpdf/ttfonts.pyÚsub32*   s    r   c                 C   s¸   t | ƒd r*| ttdƒdt| ƒd  ƒ7 } d}d}tdt| ƒdƒD ]l}|t| | ƒd> t| |d  ƒ 7 }|t| |d  ƒd> t| |d  ƒ 7 }||d? 7 }|d	@ }|d	@ }qB||fS )
Né   ú r   r   r   é   é   é   r   )r
   r   r   ÚlenÚranger   )ÚdataÚhiÚloÚir   r   r   ÚcalcChecksum9   s    $(
r$   c                   @   s  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdAdd„Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Z d>d?„ Z!d@S )BÚ
TTFontFilec                 C   s
   d| _ d S )Ni@ )ÚmaxStrLenRead©Úselfr   r   r   Ú__init__I   s    zTTFontFile.__init__c                 C   s¨   || _ t|dƒ| _d| _g | _i | _i | _i | _i | _d| _	d| _
i | _|  ¡  | _}|dkrftdƒ |dkrvtdƒ |dkrŠtd| ƒ |  ¡  |  ¡  | j ¡  d S )	NÚrbr   iOTTOz%Postscript outlines are not supportedifcttz0ERROR - TrueType Fonts Collections not supported)r   éeurtzNot a TrueType font: version=)ÚfilenameÚopenÚfhÚ_posÚ
charWidthsÚglyphPosÚcharToGlyphÚtablesÚotablesÚascentÚdescentZTTCFontsÚ
read_ulongÚversionr   ÚreadTableDirectoryÚextractInfoÚclose)r(   Úfiler8   r   r   r   Ú
getMetricsL   s*    zTTFontFile.getMetricsc                 C   sŒ   |   ¡ | _|   ¡ | _|   ¡ | _|   ¡ | _i | _t| jƒD ]N}i }|  ¡ |d< |   ¡ |   ¡ f|d< |  ¡ |d< |  ¡ |d< || j|d < q8d S )NÚtagÚchecksumÚoffsetÚlength)	Úread_ushortÚ	numTablesÚsearchRangeÚentrySelectorÚ
rangeShiftr3   r   Úread_tagr7   )r(   r#   Úrecordr   r   r   r9   c   s    



zTTFontFile.readTableDirectoryc                 C   s$   | j | d }| j | d }||fS )Nr@   rA   )r3   )r(   r>   r@   rA   r   r   r   Úget_table_posq   s    zTTFontFile.get_table_posc                 C   s   || _ | j | j ¡ d S ©N©r/   r.   Úseek)r(   Úposr   r   r   rL   v   s    zTTFontFile.seekc                 C   s   | j | | _ | j | j ¡ d S rJ   rK   )r(   Údeltar   r   r   Úskipz   s    zTTFontFile.skipr   c                 C   s,   |   |¡}|d | | _| j | j¡ | jS ©Nr   )rI   r/   r.   rL   )r(   r>   Zoffset_in_tableZtposr   r   r   Ú
seek_table~   s    
zTTFontFile.seek_tablec                 C   s    |  j d7  _ | j d¡ d¡S )Nr   Úlatin1)r/   r.   ÚreadÚdecoder'   r   r   r   rG   „   s    zTTFontFile.read_tagc                 C   sJ   |  j d7  _ | j d¡}t|d ƒd> t|d ƒ }|d@ rF|d }|S )Nr   r   r   r   é €  r   ©r/   r.   rS   r   ©r(   ÚsÚar   r   r   Ú
read_shortˆ   s    zTTFontFile.read_shortc                 C   s0   t |d ƒd> t |d ƒ }|d@ r,|d }|S )Nr   r   r   rU   r   )r   rW   r   r   r   Úunpack_short�   s    zTTFontFile.unpack_shortc                 C   s6   |  j d7  _ | j d¡}t|d ƒd> t|d ƒ S ©Nr   r   r   r   rV   ©r(   rX   r   r   r   rB   –   s    zTTFontFile.read_ushortc                 C   sV   |  j d7  _ | j d¡}t|d ƒd t|d ƒd>  t|d ƒd>  t|d ƒ S ©	Nr   r   i   r   r   r   r   r   rV   r]   r   r   r   r7   ›   s    zTTFontFile.read_ulongc                 C   s4   | j  |¡ | j  d¡}t|d ƒd> t|d ƒ S r\   ©r.   rL   rS   r   ©r(   rM   rX   r   r   r   Ú
get_ushort¡   s    zTTFontFile.get_ushortc                 C   sT   | j  |¡ | j  d¡}t|d ƒd t|d ƒd>  t|d ƒd>  t|d ƒ S r^   r_   r`   r   r   r   Ú	get_ulong¦   s    zTTFontFile.get_ulongc                 C   s(   |dk rt |ƒ}| }|d7 }td|ƒS ©Nr   r   ú>H)Úabsr   )r(   Úvalr   r   r   Ú
pack_short¬   s
    zTTFontFile.pack_shortc                 C   s"   t |d|ƒ| t ||t|ƒ ƒ S rP   )r   r
   )r(   Ústreamr@   Úvaluer   r   r   Úsplice³   s    zTTFontFile.splicec                 C   s   t d|ƒ}|  |||¡S )Nrd   )r   rj   )r(   rh   r@   ri   Úupr   r   r   Ú_set_ushort¶   s    
zTTFontFile._set_ushortc                 C   s6   |dk rt |ƒ}| }|d7 }td|ƒ}|  |||¡S rc   )re   r   rj   )r(   rh   r@   rf   rk   r   r   r   Ú
_set_shortº   s    
zTTFontFile._set_shortc                 C   s$   | j  |¡ |dk rdS | j  |¡S )Nr   Ú )r.   rL   rS   )r(   rM   rA   r   r   r   Ú	get_chunkÂ   s     zTTFontFile.get_chunkc                 C   sD   |   |¡\}}|dkr,td| j d | ƒ | j |¡ | j |¡S )Nr   zTruetype font (z): error reading table: )rI   r   r,   r.   rL   rS   )r(   r>   rM   rA   r   r   r   Ú	get_tableÇ   s
    zTTFontFile.get_tablec                 C   s(   |dkr|   |dtdƒ¡}|| j|< d S )NÚheadr   z    )rj   r   r4   )r(   r>   r    r   r   r   ÚaddÎ   s    zTTFontFile.addc           2      C   s<  d| _ d| _|  d¡}|  ¡ }|dkr2td| ƒ |  ¡ }||  ¡  }ddddddœ}t| ¡ ƒ}t|ƒ}t|ƒD �]H}|  ¡ }	|  ¡ }
|  ¡ }|  ¡ }|  ¡ }|  ¡ }||kr²qrd}|	dk�rD|
dk�rD|dk�rD| j	}|  
|| ¡ |d	 dkrütd
ƒ |d	 }d}|dk�r2|  ¡ }|t|ƒ7 }|d8 }�q|| _	|  
|¡ nJ|	dk�rŽ|
dk�rŽ|dk�rŽ| j	}|  || |¡ d¡}|| _	|  
|¡ |rr|| dkrr|||< |d8 }|dkrr �q¾qr|d �rÒ|d }n@|d �rðt dd|d ¡}n"|d �rt dd|d ¡}nd}|�s tdƒ || _|d �r<|d | _n|| _|d	 �rX|d	 | _nd| _|d �rt|d | _n|| _|d �r�|d | _n|| _|d �rª|d | _|  d¡ |  d¡ |  ¡  | _}dt|ƒ }|  d¡ |  ¡ }|  ¡ }|  ¡ }|  ¡ }|| || || || g| _|  d¡ |  ¡ }|  ¡ }|dk�rPtd| ƒ d| jk�r”|  d¡ |  d¡ |  ¡ }|  ¡ }|| | _|| | _d| jk�r¶|  d¡ |  ¡ }|  d	¡ |  ¡ }|  d	¡ |  ¡ }|d	k�sî|d@ dk�rtd| j d ƒ d| _|  d¡ |  ¡ } | d? | _ | d@ | _|  j	d 7  _	| j  d ¡}!|  d!¡ |  ¡ }"|  ¡ }#| j�sr|"| | _| j�s„|#| | _|dk�r¬|  d¡ |  ¡ }$|$| | _!n| j| _!n0d"}| j�sÌ|| | _| j�sÞ|| | _| j| _!d#t"t#|d$ d	ƒƒ | _$|  d%¡ |  d¡ |  ¡ |  ¡ d&  | _%|  ¡ | | _&|  ¡ | | _'|  (¡ }%d| _)| j%dk�rj| j)d'B | _)|d(k�r€| j)d)B | _)|%�r’| j)dB | _)|  d¡ |  d*¡ |  ¡ }&|&dk�rÂtd+j*ƒ |  ¡ }'|'dk�rÜtd,ƒ |  d-¡ |  d¡ |  ¡ }(|  d.¡})|  d	¡ |  ¡ }*d}+d},t|*ƒD ]¸}|  ¡ }-|  ¡ }.|  (¡ }| j	}/|-dk�r†|.d k�r†|  +|)| ¡}|d/k�r†|,�s€|)| }, �qÞ|-dk�rš|.dk�s¤|-dk�rÐ|  +|)| ¡}|dk�rÐ|+�sÊ|)| }+ �qÞ|  
|/¡ �q$|+�sü|,�sütd0| j d1 ƒ i }0i }1|,�r|  ,|,|0|1¡ n|  -|+|0|1¡ |  .|'|(|0|¡ d S )2Nr   ÚnamezUnknown name table format rn   )r   r   r   r   é   r   r   i	  r   z0PostScript name is UTF-16BE string of odd lengthrR   rt   r   ú ú-z#Could not find PostScript font nameZRegularrq   é   iè  r   zUnknown glyph data format ÚhheaúOS/2i   zERROR - Font file z2 cannot be embedded due to copyright restrictions.Té   r   éÿ   é
   é   iô  é2   g     @P@Úpostg      ð@r   iX  i   r   z&Unknown horizontal metric data format z!Number of horizontal metrics is 0ÚmaxpÚcmapé   úFont (ú‘) does not have cmap for Unicode (platform 3, encoding 1, format 4, or platform 3, encoding 10, format 12, or platform 0, any encoding, format 4))/ZsFamilyClassZsFamilySubClassrQ   rB   r   ÚlistÚkeysr   r   r/   rL   Úchrro   rT   ÚreÚsubrs   Z
familyNameZ	styleNameZfullNameZuniqueFontIDrO   Ú
unitsPerEmÚfloatrZ   Zbboxr3   r5   r6   r,   ZrestrictedUser.   rS   Z	capHeightÚintÚpowZstemVZitalicAngleZunderlinePositionZunderlineThicknessr7   ÚflagsÚmetricDataFormatra   Ú	getCMAP12ÚgetCMAP4ÚgetHMTX)2r(   Zname_offsetÚformatZ
numRecordsZstring_data_offsetÚnamesÚKZ	nameCountr#   Z
platformIdZ
encodingIdZ
languageIdZnameIdrA   r@   ÚNZoposÚcharZpsNamerŠ   ÚscaleZxMinZyMinZxMaxZyMaxÚindexToLocFormatÚglyphDataFormatZhheaAscenderZhheaDescenderr8   ZusWeightClassZfsTypeZsFZpanoseZsTypoAscenderZsTypoDescenderZ
sCapHeightZisFixedPitchr�   ÚnumberOfHMetricsÚ	numGlyphsÚcmap_offsetÚcmapTableCountÚunicode_cmap_offsetÚunicode_cmap_offset12Ú
platformIDÚ
encodingIDÚsave_posÚglyphToCharr2   r   r   r   r:   Ø   sh   
 

 






























 
 














zTTFontFile.extractInfoc           \      C   s
  || _ t|dƒ| _d| _g | _i | _i | _i | _i | _d| _	d| _
|  d¡ d| _|  ¡  |  d¡ |  d¡ |  ¡ }|  ¡ }|  d¡ |  d¡ |  ¡ }|  ¡  }}|  d¡ |  d¡ |  ¡ }|  d	¡}	|  d
¡ |  ¡ }
d}d}t|
ƒD ]°}|  ¡ }|  ¡ }|  ¡ }| j}|dk�rP|dk�rP|  |	| ¡}|dk�rP|�sJ|	| } �q |dk�rd|dk�sn|dk�r”|  |	| ¡}|dk�r”|	| } �q |  |¡ qî|�s¾|�s¾td| j  d ƒ i }i }|�rÜ|  |||¡ n|  |||¡ || _d}|  ||||¡ |  ||¡ dg}i }|D ]V}|| jk�rd| j| |f|k�rV| | j| |f¡ | j| ||< t| j|ƒ| _�q|  d¡\}}| ¡  i }d}d}|D ]$\}}t||ƒ}|||< |d7 }�qœi } t| ¡ ƒD ]\}}|| | |< �qÒ| | _|D ]"\}}|||dœ}!|   ||!¡ �qôt!|ƒ }}dg}"|"D ]}#|  "|#|  #|#¡¡ �q.ddddg}"|"D ]$}#|#| jk�rX|  "|#|  #|#¡¡ �qX|  #d¡}$t$dƒt%|$ddƒ t$dƒ }%|  "d|%¡ d| k�rÀ| d= d}&i }'d}(d})t|  ¡ ƒD ]X\}*}+|*|(d k�r|+|)d k�r|'|&  |+¡ n|*}&g |'|&< |'|&  |+¡ |*}(|+})�qÜt!|'ƒd },d}-d}.|-d
 |,k�rl|-d
 }-|.d }.�qJ|-d
 }-|,d
 |- }/dd|,  |d  }0ddddddd|0d|,d
 |-|.|/g}1t|' ¡ ƒ}'|'D ]$\}}2|t!|2ƒd  }3|1 |3¡ �qÆ|1 d ¡ |1 d¡ |'D ]\}}2|1 |¡ �q|1 d ¡ |'D ].\}}2||2d   }4|t&|2ƒ7 }|1 |4¡ �q(|1 d¡ |'D ]}2|1 d¡ �qf|1 d¡ |'D ]\}2}+|1 '|+¡ �q†|1 d¡ t$d!ƒ}5|1D ]^}6|6dk�rÐ|5t(d"|6ƒ7 }5n>z|5t(d#|6ƒ7 }5W n*   t) *d$|6 ¡ |5t(d"|6 ƒ7 }5Y nX �q²|  "d	|5¡ |  d¡\}7}8|8| j+k �rB|  #d¡}9g }:t$d!ƒ};d}<t$d!ƒ}=d}>d}?d}@d}Ad}Bd}Cd}Dd}Ed}Fd}Gd}Hd}Id}Jd}Ki | _,|D �]J\}}|  -||¡}L|=|L7 }=|: |<¡ z | j| }M| j|d  |M }NW n( t.k
�r   t) *d%| ¡ d}NY nX |8| j+k �r(t%|9|M|Nƒ}On$|Ndk�rD|  /|7|M |N¡}Ont$d!ƒ}O|Ndk�rlt0d"t%|Odd
ƒƒd }P|Nd
k�r¢|Pd&@ �r¢d}Qt1}Rd}S|Rt1@ �r˜|Sd7 }St0d"t%|O|Qd
ƒƒ}P|Pd }Rt0d"t%|O|Qd
 d
ƒƒ}P|Pd }T| j, 2|i ¡ 2d'g ¡ |T¡ z|  3|O|Qd
 ||T ¡}OW n( t4k
�r4   d}Ot) *d(|T ¡ Y nX |Qd7 }Q|Rt5@ �rR|Qd7 }Qn|Qd
7 }Q|Rt6@ �rn|Qd
7 }Qn&|Rt7@ �r‚|Qd7 }Qn|Rt8@ �rŒ|Qd7 }Q�qŒt|J|Sƒ}J|;|O7 };|<|N7 }<|<d dk�rœd|<d  }U|;t9t$d)ƒ|Uƒ7 };|<|U7 }<�qœ|: |<¡ |  "d|;¡ |  "d*|=¡ t$d!ƒ}V|<d d? d k�	rFd}|:D ]}|Vt(d+|ƒ7 }V�	q.n&d}|:D ]}|Vt(d"t:|d
 ƒƒ7 }V�	qN|  "d,|V¡ |  #d¡}W|  3|Wd|¡}W|  "d|W¡ |  #d¡}X|  3|Xd-|¡}X|  "d|X¡ |  #d¡}Y|  3|Yd|¡}Y|  "d|Y¡ |  #d.¡}Z|  "d.|Z¡ | j ;¡  |  <d!¡}[|[S )/Nr*   r   r   rq   r~   rx   r   r€   r�   r   r   r|   r‚   r   rƒ   r„   )r   r   Úglyf)ÚstartÚglyphSetÚsubsetglyphsrs   zcvt ZfpgmÚprepZgaspr   z   z                éþÿÿÿéÿÿÿÿr   r   r   rn   rd   z>hzcmap value too big/small: %súmissing glyph %srU   Ú
compGlyphszmissing glyph data %sr   Úhmtxz>LÚlocaé"   ry   )=r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   rO   ZmaxUnir9   rQ   rB   r   r7   ra   rL   r   r�   r‘   r’   ÚgetLOCAÚappendÚmaxrI   ÚsortÚsortedÚitemsÚcodeToGlyphÚ	getGlyphsr   rr   rp   r   r   r   Úextendr   ÚwarningsÚwarnr&   Ú	glyphdataÚ
getHMetricÚ
IndexErrorro   r   ÚGF_MOREÚ
setdefaultrl   ÚKeyErrorÚGF_WORDSÚGF_SCALEÚ
GF_XYSCALEÚGF_TWOBYTWOr   rŒ   r;   Ú	endTTFile)\r(   r<   Zsubsetr™   rš   r�   ZorignHmetricsr›   rœ   r�   rž   rŸ   r    r#   r¡   r¢   r@   r£   r“   r¤   r2   r˜   r¨   ZsubsetCharToGlyphÚcoder¦   Údummyr§   ÚnZfsLastCharIndexÚoriginalGlyphIdxÚunir·   Ú	nonlocalsÚtagsr>   Zopostr   ZrangeidZrange_ZprevcidZ	prevglidxZcidZglidxÚsegCountrD   rE   rF   rA   r�   ZsubrangeZendCodeÚidDeltaZcmapstrÚcmZ
glyfOffsetZ
glyfLengthZ	glyphDataÚoffsetsr¥   rM   ZhmtxstrZxMinTZyMinTZxMaxTZyMaxTZadvanceWidthMaxZminLeftSideBearingZminRightSideBearingZ
xMaxExtentZ	maxPointsZmaxContoursZmaxComponentPointsZmaxComponentContoursZmaxComponentElementsZmaxComponentDepthÚhmr1   ÚglyphLenr    rk   Zpos_in_glyphrŽ   ZnComponentElementsÚglyphIdxÚpaddingZlocastrrq   rx   r€   Zos2Ústmr   r   r   Ú
makeSubsetÉ  s   











ÿ

    ù	




























zTTFontFile.makeSubsetc                 C   s°   |d  d7  < t |d |d ƒ|d< t| j| d ƒrZ| j| d D ]}|  ||¡ qFnB| j| d dkrœ|d dkrœ|| j| d 7 }|| j| d 7 }|d  d8  < d S )NÚdepthr   Zmaxdepthr­   Z	nContoursr   ZnPoints)r³   r   r¼   ÚgetGlyphData)r(   rÊ   rÌ   rÔ   ZcontoursZpointsr   r   r   rÙ   '  s    zTTFontFile.getGlyphDatac           	      C   sP  z | j | }| j |d  | }W n$ tk
rD   t d| ¡ Y d S X |sNd S |  |d | ¡ |  ¡ }|dk �rL|  d¡ t}|t@ �rL|  ¡ }|  ¡ }||d krÌt	|d ƒ|d |< |d  
|df¡ | j ¡ }|  ||¡ |  |¡ |t@ �r|  d¡ n
|  d	¡ |t@ �r"|  d	¡ q€|t@ �r8|  d¡ q€|t@ r€|  d¡ q€d S )
Nr   r¬   r¦   r   r   r§   r¨   r   r   )r1   r¾   rº   r»   rL   rZ   rO   r¿   rB   r   r²   r.   Útellr¸   rÂ   rÃ   rÄ   rÅ   )	r(   rÊ   rÌ   r1   rÓ   ZnumberOfContoursrŽ   rÔ   Zsaveposr   r   r   r¸   8  s>    









zTTFontFile.getGlyphsc                 C   sö  |   d¡}d}dgd d | _d}|d | jk r\|  ||d ¡}tdtt|ƒd ƒ |ƒ}	n
|  |¡ t|ƒD ]º}
|d | jk rŽ|	|
d  }n|  	¡ }|  	¡ }|
|ks®|
dkrn|dkrºd}|
dkrÎ|| | _
qn||
 D ]P}|dkrÖ|dkrÖtt|| d	 ƒƒ}|dk�rd}|d
k rÖ|| j|< |d7 }qÖqn|  ||d  |d ¡}tdtt|ƒd ƒ |ƒ}	|| }t|ƒD ]z}|| }
|
|k�rl||
 D ]X}|dk�rŠ|dk�rŠtt|| d	 ƒƒ}|dk�rÄd}|d
k �rŠ|| j|< |d7 }�qŠ�ql|| jd< d S )Nr®   r   é   r   ú>%dHr   rU   r   gü©ñÒMbP?é   r   )rQ   r0   r&   ro   r   rŒ   r   rL   r   rB   ZdefaultWidthÚround)r(   r›   rœ   r¤   r˜   r¦   ZawZnCharWidthsr    ÚarrÚglyphZlsbr—   ÚwÚdiffrM   r   r   r   r’   a  sT    



 


 

zTTFontFile.getHMTXc                 C   s‚   |   d¡}||k r2|  ||d  ¡ | j d¡}nL|  ||d d  ¡ | j d¡}|  ||d  |d  ¡ || j d¡7 }|S )Nr®   r   r   r   )rQ   rL   r.   rS   )r(   r›   Úgidr¦   rÒ   r   r   r   r½   —  s    
zTTFontFile.getHMetricc                 C   sÐ   |   d¡}g | _|dkrj|  ||d d ¡}tdtt|ƒd ƒ |ƒ}t|ƒD ]}| j || d ¡ qNnb|dkrÀ|  ||d d ¡}tdtt|ƒd ƒ |ƒ}t|ƒD ]}| j || ¡ q¨ntd| ƒ d S )	Nr¯   r   r   rÜ   r   r   z>%dLzUnknown location table format )	rQ   r1   ro   r   rŒ   r   r   r²   r   )r(   r™   rœ   r¦   r    rß   rÉ   r   r   r   r±   ¤  s    
zTTFontFile.getLOCAc                 C   s¼  d| _ |  |d ¡ |  ¡ }|| }|  d¡ t|  ¡ d ƒ}|  d¡ g }t|ƒD ]}| |  ¡ ¡ qT|  d¡ g }	t|ƒD ]}|	 |  ¡ ¡ q~g }
t|ƒD ]}|
 |  ¡ ¡ qž| j}g }t|ƒD ]}| |  ¡ ¡ qÄt|ƒD ]Ö}|| d }t|	| |dƒD ]´}|| dk�r$||
|  d@ }n\||	|  d ||  }|d|  | }||k�r\d}n$|  	|¡}|dk�r€||
|  d@ }|||< |dk �r t
|| j ƒ| _ | |g ¡ |¡ �q qàd S )Nr   r   rt   r   r   rÝ   )Ú
maxUniCharrL   rB   rO   rŒ   r   r²   rZ   r/   ra   r³   rÀ   )r(   rŸ   r¤   r2   rA   ÚlimitrÎ   ZendCountr#   Z
startCountrÏ   ZidRangeOffset_startZidRangeOffsetrÉ   ZendpointÚunicharrà   r@   r   r   r   r‘   µ  sJ    






zTTFontFile.getCMAP4c                 C   sÊ   d| _ |  |d ¡ |  d¡ |  ¡ }|  d¡ |  ¡ }d|d d  |krTtdƒ t|ƒD ]h}|  ¡ }|  ¡ }|  ¡ }	t||d ƒD ]<}
|	||
< |
dk r¨t|
| j ƒ| _ | |	g ¡ |
¡ |	d7 }	q†q\d S )	Nr   r   r   r   r   z"TTF format 12 cmap table too smallr   rÝ   )	rä   rL   rO   r7   r   r   r³   rÀ   r²   )r(   rŸ   r¤   r2   rA   ZgrpCountrÉ   ZstartCharCodeZendCharCoderà   ræ   r   r   r   r�   â  s$    

zTTFontFile.getCMAP12c                 C   s€  t dƒ}t| jƒ}d}d}|d |kr8|d }|d }q|d }|d | }trh|tdd||||ƒ7 }n|tdd||||ƒ7 }| j}d	|d  }t| ¡ ƒ}|D ]n\}	}
|	d
kr´|}||	 d¡7 }t|
ƒ}|td|d |d ƒ7 }|td|t	|
ƒƒ7 }t	|
ƒd d@ }|| }q |D ].\}	}
|
t dƒ7 }
|t
|
dt	|
ƒd@ ƒ7 }�qt|ƒ}td|ƒ}td|d |d ƒ}|  ||d |¡}|S )Nrn   r   r   r   r   z>LHHHHr+   r   r‚   rq   rR   z>HHz>LLr   éüÿÿÿz   )i°±  iº¯  r   )r   r   r4   Ú_TTF_MAC_HEADERr   rµ   r¶   Úencoder$   r
   r   r   rj   )r(   rÖ   rC   rD   rE   rF   r3   r@   Zsorted_tablesr>   r    Z
head_startr?   ZpaddedLengthZchkr   r   r   rÆ   ÿ  s@    



zTTFontFile.endTTFileN)r   )"Ú__name__Ú
__module__Ú__qualname__r)   r=   r9   rI   rL   rO   rQ   rG   rZ   r[   rB   r7   ra   rb   rg   rj   rl   rm   ro   rp   rr   r:   r×   rÙ   r¸   r’   r½   r±   r‘   r�   rÆ   r   r   r   r   r%   G   sD   

 r  `)6-r%   )Ústructr   r   r   rˆ   rº   Úphpr   r   r   r	   r
   r   Zpy3kr   r   rè   rÂ   rÃ   r¿   rÄ   rÅ   r   r$   r%   r   r   r   r   Ú<module>   s    