U
    imÿSÜ  ã                   @   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ÚyÚxloÚxhiÚyloÚyhiÚresloÚreshir   r   úI/home/ubuntu/graampay/app_env/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ÚdescentÚTTCFontsÚ
read_ulongÚversionr   ÚreadTableDirectoryÚextractInfoÚclose)r.   Úfiler?   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Ú
rangeShiftr9   r%   Úread_tagr>   )r.   r)   Úrecordr   r   r   r@   c   s    



zTTFontFile.readTableDirectoryc                 C   s$   | j | d }| j | d }||fS )NrG   rH   )r9   )r.   rE   rG   rH   r   r   r   Úget_table_posq   s    zTTFontFile.get_table_posc                 C   s   || _ | j | j ¡ d S ©N©r5   r4   Úseek)r.   Úposr   r   r   rS   v   s    zTTFontFile.seekc                 C   s   | j | | _ | j | j ¡ d S rQ   rR   )r.   Údeltar   r   r   Úskipz   s    zTTFontFile.skipr   c                 C   s,   |   |¡}|d | | _| j | j¡ | jS ©Nr   )rP   r5   r4   rS   )r.   rE   Úoffset_in_tableÚtposr   r   r   Ú
seek_table~   s    
zTTFontFile.seek_tablec                 C   s    |  j d7  _ | j d¡ d¡S )Nr   Úlatin1)r5   r4   ÚreadÚdecoder-   r   r   r   rN   „   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   ©r5   r4   r\   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   r^   r   )r   r`   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   r_   ©r.   ra   r   r   r   rI   –   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"   r_   rf   r   r   r   r>   ›   s    zTTFontFile.read_ulongc                 C   s4   | j  |¡ | j  d¡}t|d ƒd> t|d ƒ S re   ©r4   rS   r\   r   ©r.   rT   ra   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 rg   rh   ri   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 rW   )r   r
   )r.   ÚstreamrG   Úvaluer   r   r   Úsplice³   s    zTTFontFile.splicec                 C   s   t d|ƒ}|  |||¡S )Nrm   )r   rs   )r.   rq   rG   rr   Úupr   r   r   Ú_set_ushort¶   s    
zTTFontFile._set_ushortc                 C   s6   |dk rt |ƒ}| }|d7 }td|ƒ}|  |||¡S rl   )rn   r   rs   )r.   rq   rG   ro   rt   r   r   r   Ú
_set_shortº   s    
zTTFontFile._set_shortc                 C   s$   | j  |¡ |dk rdS | j  |¡S )Nr   Ú )r4   rS   r\   )r.   rT   rH   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: )rP   r   r2   r4   rS   r\   )r.   rE   rT   rH   r   r   r   Ú	get_tableÇ   s
    zTTFontFile.get_tablec                 C   s(   |dkr|   |dtdƒ¡}|| j|< d S )NÚheadr   z    )rs   r   r:   )r.   rE   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 rw   )r   r!   r"   r   é   r"   r   i	  r!   z0PostScript name is UTF-16BE string of odd lengthr[   r}   r   ú ú-z#Could not find PostScript font nameÚRegularrz   é   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))/ÚsFamilyClassÚsFamilySubClassrZ   rI   r   ÚlistÚkeysr$   r%   r5   rS   Úchrrx   r]   ÚreÚsubr|   Ú
familyNameÚ	styleNameÚfullNameÚuniqueFontIDrV   Ú
unitsPerEmÚfloatrc   Úbboxr9   r;   r<   r2   ÚrestrictedUser4   r\   Ú	capHeightÚintÚpowÚstemVÚitalicAngleÚunderlinePositionÚunderlineThicknessr>   ÚflagsÚmetricDataFormatrj   Ú	getCMAP12ÚgetCMAP4ÚgetHMTX)2r.   Úname_offsetÚformatÚ
numRecordsÚstring_data_offsetÚnamesÚKÚ	nameCountr)   Ú
platformIdÚ
encodingIdÚ
languageIdÚnameIdrH   rG   ÚNÚoposÚcharÚpsNamerš   ÚscaleÚxMinÚyMinÚxMaxÚyMaxÚindexToLocFormatÚglyphDataFormatÚhheaAscenderÚhheaDescenderr?   ÚusWeightClassÚfsTypeÚsFÚpanoseÚsTypoAscenderÚsTypoDescenderÚ
sCapHeightÚisFixedPitchr¦   ÚnumberOfHMetricsÚ	numGlyphsÚcmap_offsetÚcmapTableCountÚunicode_cmap_offsetÚunicode_cmap_offset12Ú
platformIDÚ
encodingIDÚsave_posÚglyphToCharr8   r   r   r   rA   Ø   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 )/Nr0   r   r   rz   rˆ   r‚   r   rŠ   r‹   r!   r"   r†   rŒ   r   r   rŽ   )r   r   Úglyf)ÚstartÚglyphSetÚsubsetglyphsr|   zcvt ÚfpgmÚprepÚgaspr‰   z   z                éþÿÿÿéÿÿÿÿr#   r   r   rw   rm   z>hzcmap value too big/small: %súmissing glyph %sr^   Ú
compGlyphszmissing glyph data %sr    Úhmtxz>LÚlocaé"   rƒ   )=r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   rV   ÚmaxUnir@   rZ   rI   r%   r>   rj   rS   r   r§   r¨   r©   ÚgetLOCAÚappendÚmaxrP   ÚsortÚsortedÚitemsÚcodeToGlyphÚ	getGlyphsr$   r{   ry   r   r   r   Úextendr   ÚwarningsÚwarnr,   Ú	glyphdataÚ
getHMetricÚ
IndexErrorrx   r   ÚGF_MOREÚ
setdefaultru   ÚKeyErrorÚGF_WORDSÚGF_SCALEÚ
GF_XYSCALEÚGF_TWOBYTWOr   rŸ   rB   Ú	endTTFile)\r.   rC   Úsubsetr¾   r¿   r¦   ÚorignHmetricsrÊ   rË   rÌ   rÍ   rÎ   rÏ   r)   rÐ   rÑ   rG   rÒ   r«   rÓ   r8   r¹   r×   ÚsubsetCharToGlyphÚcoderÕ   ÚdummyrÖ   ÚnÚfsLastCharIndexÚoriginalGlyphIdxÚuniré   Ú	nonlocalsÚtagsrE   Úopostr‰   ÚrangeidÚrange_ÚprevcidÚ	prevglidxÚcidÚglidxÚsegCountrK   rL   rM   rH   r‹   ÚsubrangeÚendCodeÚidDeltaÚcmapstrÚcmÚ
glyfOffsetÚ
glyfLengthÚ	glyphDataÚoffsetsrÔ   rT   ÚhmtxstrÚxMinTÚyMinTÚxMaxTÚyMaxTÚadvanceWidthMaxÚminLeftSideBearingÚminRightSideBearingÚ
xMaxExtentÚ	maxPointsÚmaxContoursÚmaxComponentPointsÚmaxComponentContoursÚmaxComponentElementsÚmaxComponentDepthÚhmr7   ÚglyphLenr&   rt   Úpos_in_glyphr¥   ÚnComponentElementsÚglyphIdxÚpaddingÚlocastrrz   r‚   rŠ   Ú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   ÚmaxdepthrÞ   Ú	nContoursr   ÚnPoints)rå   r$   rî   ÚgetGlyphData)r.   r   r  r(  ÚcontoursÚpointsr   r   r   r2  '  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!   )r7   rð   rì   rí   rS   rc   rV   rñ   rI   r$   rä   r4   Útellrê   rô   rõ   rö   r÷   )	r.   r   r  r7   r%  ÚnumberOfContoursr¥   r(  Ú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!   r^   r   gü©ñÒMbP?é   r   )rZ   r6   r,   rx   r   rŸ   r$   rS   r%   rI   ÚdefaultWidthÚround)r.   rÊ   rË   rÓ   r¹   rÕ   ÚawÚnCharWidthsr&   ÚarrÚglyphÚlsbr·   ÚwÚdiffrT   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!   )rZ   rS   r4   r\   )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!   r9  r   r   z>%dLzUnknown location table format )	rZ   r7   rx   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!   r}   r   r   r:  )Ú
maxUniCharrS   rI   rV   rŸ   r%   rä   rc   r5   rj   rå   rò   )r.   rÎ   rÓ   r8   rH   Úlimitr  ÚendCountr)   Ú
startCountr  ÚidRangeOffset_startÚidRangeOffsetrþ   ÚendpointÚunicharr@  rG   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:  )	rE  rS   rV   r>   r   r%   rå   rò   rä   )r.   rÎ   rÓ   r8   rH   ÚgrpCountrþ   ÚstartCharCodeÚendCharCoder@  rL  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 )Nrw   r   r   r!   r#   z>LHHHHr1   r   rŒ   rz   r[   z>HHz>LLr"   éüÿÿÿz   )i°±  iº¯  r   )r   r   r:   Ú_TTF_MAC_HEADERr   rç   rè   Úencoder*   r
   r   r   rs   )r.   r,  rJ   rK   rL   rM   r9   rG   Úsorted_tablesrE   r&   Ú
head_startrF   ÚpaddedLengthÚchkr   r   r   rø   ÿ  s@    



zTTFontFile.endTTFileN)r   )"Ú__name__Ú
__module__Ú__qualname__r/   rD   r@   rP   rS   rV   rZ   rN   rc   rd   rI   r>   rj   rk   rp   rs   ru   rv   rx   ry   r{   rA   r-  r2  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   Úpy3kr   r   rQ  rô   rõ   rñ   rö   r÷   r   r*   r+   r   r   r   r   Ú<module>   s    