
    gܝ                         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 Zd Z G d d      Zy)    )packunpackunpack_fromN   )diesubstr
str_repeatstr_padstrlencount)bordF       @      c                     | d   }| d   }|d   }|d   }||kD  r
|dz  }|dz  }||z
  }||kD  r|dz  }||z
  }|dz  }||fS )Nr   r         )xyxloxhiyloyhiresloreshis           d/home/viktor/gitlab-persoonlijk/factuur-applicatie/venv/lib/python3.12/site-packages/fpdf/ttfonts.pysub32r    *   st    
A$C
A$C
A$C
A$Cc	wqGEc	wGEFNE5>    c                 t   t        |       dz  r'| t        t        d      dt        |       dz  z
        z  } d}d}t	        dt        |       d      D ]c  }|t        | |         dz  t        | |dz            z   z  }|t        | |dz            dz  t        | |dz            z   z  }||dz	  z  }|d	z  }|d	z  }e ||fS )
N    r   r   r            r   )r   r	   r   lenranger   )datahilois       r   calcChecksumr.   9   s    tq
1T7QD	A%688BB1c$i# 
s47|Q#d1Q3i.00
s4!9~q CQqS	N22
bBh&[&[ 8Or!   c                       e Zd Zd Zd Zd Zd Zd Zd Zd!dZ	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!y )"
TTFontFilec                     d| _         y )Ni@ )maxStrLenReadselfs    r   __init__zTTFontFile.__init__I   s
    #r!   c                    || _         t        |d      | _        d| _        g | _        i | _        i | _        i | _        i | _        d| _	        d| _
        i | _        | j                         x| _        }|dk(  rt        d       |dk(  rt        d       |dvrt        d|z          | j                          | j!                          | j                  j#                          y )	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)r4   filerF   s      r   
getMetricszTTFontFile.getMetricsL   s    tD/	!%!22wZ78ZBC22/'9:!r!   c                    | j                         | _        | j                         | _        | j                         | _        | j                         | _        i | _        t        | j                        D ]r  }i }| j                         |d<   | j                         | j                         f|d<   | j                         |d<   | j                         |d<   || j
                  |d   <   t y )Ntagchecksumoffsetlength)	read_ushort	numTablessearchRangeentrySelector
rangeShiftr@   r)   read_tagrE   )r4   r-   records      r   rG   zTTFontFile.readTableDirectoryc   s    ))+++-!--/**,t~~& 	0AF MMOF5M"&"2"2"4T5E5E5G!HF:#0F8#0F8)/DKKu&	0r!   c                 R    | j                   |   d   }| j                   |   d   }||fS )NrO   rP   )r@   )r4   rM   rO   rP   s       r   get_table_poszTTFontFile.get_table_posq   s3    S!(+S!(+r!   c                 \    || _         | j                  j                  | j                          y Nr<   r;   seek)r4   poss     r   r]   zTTFontFile.seekv   s    	TYYr!   c                 v    | j                   |z   | _         | j                  j                  | j                          y r[   r\   )r4   deltas     r   skipzTTFontFile.skipz   s&    II%	TYYr!   c                     | j                  |      }|d   |z   | _        | j                  j                  | j                         | j                  S Nr   )rY   r<   r;   r]   )r4   rM   offset_in_tabletposs       r   
seek_tablezTTFontFile.seek_table~   s@    !!#&Go-	TYYyyr!   c                     | xj                   dz  c_         | j                  j                  d      j                  d      S )Nr#   latin1)r<   r;   readdecoder3   s    r   rV   zTTFontFile.read_tag   s,    		Q	ww||A%%h//r!   c                     | xj                   dz  c_         | j                  j                  d      }t        |d         dz  t        |d         z   }|dz  r|dz
  }|S )Nr%   r   r   r      r   r<   r;   ri   r   r4   sas      r   
read_shortzTTFontFile.read_short   sS    		Q	GGLLO1Y\S1Y&MgAr!   c                 Z    t        |d         dz  t        |d         z   }|dz  r|dz
  }|S )Nr   r   r   rl   r   )r   rn   s      r   unpack_shortzTTFontFile.unpack_short   s5    1Y\S1Y&MgAr!   c                     | xj                   dz  c_         | j                  j                  d      }t        |d         dz  t        |d         z   S Nr%   r   r   r   rm   r4   ro   s     r   rQ   zTTFontFile.read_ushort   s?    		Q	GGLLOAaD	1AaD	))r!   c                     | xj                   dz  c_         | j                  j                  d      }t        |d         dz  t        |d         dz  z   t        |d         dz  z   t        |d         z   S 	Nr#   r   i   r   r'   r%   r   r&   rm   rv   s     r   rE   zTTFontFile.read_ulong   sb    		Q	GGLLOAaD	("s1Q4y"}5QqTAFQqTRRr!   c                     | j                   j                  |       | j                   j                  d      }t        |d         dz  t        |d         z   S ru   r;   r]   ri   r   r4   r^   ro   s      r   
get_ushortzTTFontFile.get_ushort   sB    SGGLLOAaD	1AaD	))r!   c                     | j                   j                  |       | j                   j                  d      }t        |d         dz  t        |d         dz  z   t        |d         dz  z   t        |d         z   S rx   rz   r{   s      r   	get_ulongzTTFontFile.get_ulong   se    SGGLLOAaD	("s1Q4y"}5QqTAFQqTRRr!   c                 J    |dk  rt        |      }| }|dz  }t        d|      S Nr   r   >H)absr   )r4   vals     r   
pack_shortzTTFontFile.pack_short   s.    Ec(C$C1HCD~r!   c                 T    t        |d|      |z   t        ||t        |      z         z   S rc   )r   r   )r4   streamrO   values       r   splicezTTFontFile.splice   s+    fQv&.vfUm?S1TTTr!   c                 @    t        d|      }| j                  |||      S )Nr   )r   r   )r4   r   rO   r   ups        r   _set_ushortzTTFontFile._set_ushort   s!    ${{662..r!   c                 p    |dk  rt        |      }| }|dz  }t        d|      }| j                  |||      S r   )r   r   r   )r4   r   rO   r   r   s        r   
_set_shortzTTFontFile._set_short   s@    Ec(C$C1HC$s^{{662..r!   c                 z    | j                   j                  |       |dk  ry| j                   j                  |      S )Nr    )r;   r]   ri   )r4   r^   rP   s      r   	get_chunkzTTFontFile.get_chunk   s.    SAIV$%r!   c                     | j                  |      \  }}|dk(  rt        d| j                  z   dz   |z          | j                  j	                  |       | j                  j                  |      S )Nr   zTruetype font (z): error reading table: )rY   r   r9   r;   r]   ri   )r4   rM   r^   rP   s       r   	get_tablezTTFontFile.get_table   s^    **3/faK!DMM14NNQTTUSV$%r!   c                 d    |dk(  r| j                  |dt        d            }|| j                  |<   y )Nheadr   z    )r   r   rA   )r4   rM   r*   s      r   addzTTFontFile.add   s-    6M;;tQ*6D Sr!   c                    d| _         d| _        | j                  d      }| j                         }|dk7  rt	        d|z          | j                         }|| j                         z   }dddddd}t        |j                               }t        |      }t        |      D ]p  }| j                         }	| j                         }
| j                         }| j                         }| j                         }| j                         }||vrid}|	dk(  r|
dk(  r|dk(  r| j                  }| j                  ||z          |d	z  dk7  rt	        d
       |d	z  }d}|dkD  r)| j                         }|t        |      z  }|dz  }|dkD  r)|| _	        | j                  |       nW|	dk(  rR|
dk(  rM|dk(  rH| j                  }| j                  ||z   |      j                  d      }|| _	        | j                  |       |sV||   dk(  s`|||<   |dz  }|dk(  sq n |d   r|d   }nB|d   rt        j                  dd|d         }n"|d   rt        j                  dd|d         }nd}|st	        d       || _        |d   r|d   | _        n|| _        |d	   r|d	   | _        nd| _        |d   r|d   | _        n|| _        |d   r|d   | _        n|| _        |d   r
|d   | _        | j                  d       | j+                  d       | j                         x| _        }dt/        |      z  }| j+                  d       | j1                         }| j1                         }| j1                         }| j1                         }||z  ||z  ||z  ||z  g| _        | j+                  d       | j                         }| j                         }|dk7  rt	        d|z          d| j4                  v rV| j                  d       | j+                  d       | j1                         }| j1                         }||z  | _        ||z  | _        d| j4                  v r| j                  d       | j                         }| j+                  d	       | j                         }| j+                  d	       | j                         }|d	k(  s|dz  dk7  r"t	        d| j:                  z   dz          d| _        | j+                  d       | j1                         } | dz	  | _         | dz  | _        | xj                  d z  c_	        | j>                  jA                  d       }!| j+                  d!       | j1                         }"| j1                         }#| j6                  s
|"|z  | _        | j8                  s
|#|z  | _        |dkD  r,| j+                  d       | j1                         }$|$|z  | _!        nQ| j6                  | _!        n?d"}| j6                  s
||z  | _        | j8                  s
||z  | _        | j6                  | _!        d#tE        tG        |d$z  d	            z   | _$        | j                  d%       | j+                  d       | j1                         | j                         d&z  z   | _%        | j1                         |z  | _&        | j1                         |z  | _'        | jQ                         }%d| _)        | jJ                  dk7  r| jR                  d'z  | _)        |d(k\  r| jR                  d)z  | _)        |%r| jR                  dz  | _)        | j                  d       | j+                  d*       | j                         }&|&dk7  rt	        d+jT                         | j                         }'|'dk(  rt	        d,       | j                  d-       | j+                  d       | j                         }(| j                  d.      })| j+                  d	       | j                         }*d}+d},t        |*      D ]  }| j                         }-| j                         }.| jQ                         }| j                  }/|-dk(  r'|.d k(  r"| jW                  |)|z         }|d/k(  r	|,s|)|z   }, nD|-dk(  r|.dk(  s|-dk(  r"| jW                  |)|z         }|dk(  r	|+s|)|z   }+ n| j                  |/        |+s|,st	        d0| j:                  z   d1z          i }0i }1|,r| jY                  |,|0|1       n| j[                  |+|0|1       | j]                  |'|(|0|       y )2Nr   namezUnknown name table format r   )r   r%   r&   r#      r&   r   i	  r%   z0PostScript name is UTF-16BE string of odd lengthrh   r   r#    -z#Could not find PostScript font nameRegularr      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sFamilySubClassrf   rQ   r   listkeysr(   r)   r<   r]   chrr   rj   resubr   
familyName	styleNamefullNameuniqueFontIDra   
unitsPerEmfloatrq   bboxr@   rB   rC   r9   restrictedUser;   ri   	capHeightintpowstemVitalicAngleunderlinePositionunderlineThicknessrE   flagsmetricDataFormatr|   	getCMAP12getCMAP4getHMTX)2r4   name_offsetformat
numRecordsstring_data_offsetnamesK	nameCountr-   
platformId
encodingId
languageIdnameIdrP   rO   NoposcharpsNamer   scalexMinyMinxMaxyMaxindexToLocFormatglyphDataFormathheaAscenderhheaDescenderrF   usWeightClassfsTypesFpanosesTypoAscendersTypoDescender
sCapHeightisFixedPitchr   numberOfHMetrics	numGlyphscmap_offsetcmapTableCountunicode_cmap_offsetunicode_cmap_offset12
platformID
encodingIDsave_posglyphToCharr?   s2                                                     r   rH   zTTFontFile.extractInfo   sw     oof-!!#aK,v56%%'
(4+;+;+==R"r*J	z"  	)A))+J))+J))+J%%'F%%'F%%'Fa(AaJ!O
e8Kyy		,v56QJ!OJK!z++-D#d)$AaKF z !			$/jAo*/yyNN#5#>GNNxX 			$eFmR' !fQ	qL5A 	)F !H1XFAhVVCE!H-FAhVVCE!H-FF56	!H#AhDO$DO!H"1XDN&DN!H!!HDM"DM!H %aD &D!H!!HDM
 			"'+'7'7'99*uZ((		"    5jDJ$u*U
L			#++-**,q ,>? dkk!OOF#IIaL??,L OO-M'.DK)50DL dkk!OOF#&&(GIIaL ,,.MIIaL%%'F& Vf_$:(4==8;oop%)"IIbM"B!#qD$&ID IIOIWW\\"%FIIbM OO-M!__.NKK,U2LL .u 4!		"!__.
",U"2!%  MKKe$+LL4:4<![[DN#c=4#7;<<

 			!??,t/?/?/AG/KK!%!2U!:"&//"3e";(
q bDJS f,DJaDJ
 			"++-!8IIJ++-!34
 			!$$&	
 oof-		!))+ !~& 	 A))+J))+J__&FyyHQ:#3v)=>bL00;f0D-qZ1_qv)=>aK/.9F.B+IIh%	 ( #+@4==(  ,    @ NN0+{KMM-{KH
 	%y+uEr!   c                 f   || _         t        |d      | _        d| _        g | _        i | _        i | _        i | _        i | _        d| _	        d| _
        | j                  d       d| _        | j                          | j                  d       | j                  d       | j                         }| j                         }| j                  d       | j                  d       | j                         }| j                         x}}| j                  d       | j                  d       | j                         }| j                  d	      }	| j                  d
       | j                         }
d}d}t!        |
      D ]  }| j                         }| j                         }| j#                         }| j                  }|dk(  r'|dk(  r"| j%                  |	|z         }|dk(  r	|s|	|z   } nB|dk(  r|dk(  s|dk(  r | j%                  |	|z         }|dk(  r|	|z   } n| j'                  |        |s|st)        d| j                   z   dz          i }i }|r| j+                  |||       n| j-                  |||       || _        d}| j/                  ||||       | j1                  ||       dg}i }|D ]p  }|| j                  v rE| j                  |   |f|vr |j3                  | j                  |   |f       | j                  |   ||<   t5        | j                  |      | _        r | j7                  d      \  }}|j9                          i }d}d}|D ]  \  }}t5        ||      }|||<   |dz  } i } t;        |j=                               D ]  \  }}||   | |<    | | _        |D ]  \  }}|||d}!| jA                  ||!        tC        |      x}}dg}"|"D ]#  }#| jE                  |#| jG                  |#             % g d}"|"D ]2  }#|#| j                  v s| jE                  |#| jG                  |#             4 | jG                  d      }$tI        d      tK        |$dd      z   tI        d      z   }%| jE                  d|%       d| v r| d= d}&i }'d}(d})t;        | j=                               D ]I  \  }*}+|*|(dz   k(  r|+|)dz   k(  r|'|&   j3                  |+       n|*}&g |'|&<   |'|&   j3                  |+       |*}(|+})K tC        |'      dz   },d}-d}.|-d
z  |,k  r|-d
z  }-|.dz   }.|-d
z  |,k  r|-d
z  }-|,d
z  |-z
  }/dd|,z  z   |dz   z   }0ddddddd|0d|,d
z  |-|.|/g}1t;        |'j=                               }'|'D ]'  \  }}2|tC        |2      dz
  z   }3|1j3                  |3       ) |1j3                  d       |1j3                  d       |'D ]  \  }}2|1j3                  |        |1j3                  d       |'D ]-  \  }}2||2d   z
   }4|tM        |2      z  }|1j3                  |4       / |1j3                  d       |'D ]  }2|1j3                  d        |1j3                  d       |'D ]  \  }2}+|1jO                  |+        |1j3                  d       tI        d      }5|1D ]'  }6|6dk\  r|5tQ        d|6      z  }5	 |5tQ        d |6      z  }5) | jE                  d	|5       | j7                  d      \  }7}8|8| jV                  k  r| jG                  d      }9g }:tI        d      };d}<tI        d      }=d}>d}?d}@d}Ad}Bd}Cd}Dd}Ed}Fd}Gd}Hd}Id}Jd}Ki | _,        |D ]  \  }}| j[                  ||      }L|=|Lz  }=|:j3                  |<       	 | j
                  |   }M| j
                  |dz      |Mz
  }N|8| jV                  k  rtK        9MN      }On&NdkD  r| j_                  |7Mz   N      }OntI        d      }ONdkD  rta        dtK        Odd
            d   }PNd
kD  r	Pd#z  rd}Qtb        }Rd}SRtb        z  rSdz  }Sta        dtK        OQd
            }P|Pd   }Rta        dtK        |O|Qd
z   d
            }P|Pd   }T| jX                  je                  |i       je                  d$g       j3                  |T       	 | jg                  OQd
z   |T         }OQdz  }QRtj        z  rQdz  }QnQd
z  }QRtl        z  rQd
z  }QnRtn        z  rQdz  }QnRtp        z  rQdz  }QRtb        z  rt5        JS      }J|;Oz  };|<Nz  }<|<dz  dk7  sd|<dz  z
  }U|;ts        tI        d&      |U      z  };|<|Uz  }<  |:j3                  |<       | jE                  d|;       | jE                  d'|=       tI        d      }V|<dz   dz	  dkD  rd}|:D ]  }VtQ        d(|      z  }V n$d}|:D ]  }VtQ        dtu        |d
z              z  }V | jE                  d)V       | jG                  d      }W| jg                  |Wd|      }W| jE                  d|W       | jG                  d      }X| jg                  |Xd*|      }X| jE                  d|X       | jG                  d      }Y| jg                  |Yd|      }Y| jE                  d|Y       | jG                  d+      }Z| jE                  d+|Z       | j                  jw                          | jy                  d      }[|[S #  tS        jT                  d!|6z         |5tQ        d|6       z  }5Y ixY w# t\        $ r tS        jT                  d"|z         d}NY w xY w# th        $ r d}OtS        jT                  d%Tz         Y w xY w),Nr7   r   r#   r   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   r   r   z>hzcmap value too big/small: %smissing glyph %srl   
compGlyphszmissing glyph data %sr$   hmtxz>Lloca"   r   )=r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   ra   maxUnirG   rf   rQ   r)   rE   r|   r]   r   r   r   r   getLOCAappendmaxrY   sortsorteditemscodeToGlyph	getGlyphsr(   r   r   r   r   r   extendr   warningswarnr2   	glyphdata
getHMetric
IndexErrorr   r   GF_MORE
setdefaultr   KeyErrorGF_WORDSGF_SCALE
GF_XYSCALEGF_TWOBYTWOr	   r   rI   	endTTFile)\r4   rJ   subsetr   r   r   orignHmetricsr   r   r   r   r   r   r-   r   r   rO   r   r   r   r?   r   r   subsetCharToGlyphcoder   dummyr   nfsLastCharIndexoriginalGlyphIdxunir  	nonlocalstagsrM   opostr   rangeidrange_prevcid	prevglidxcidglidxsegCountrS   rT   rU   rP   r   subrangeendCodeidDeltacmapstrcm
glyfOffset
glyfLength	glyphDataoffsetsr   r^   hmtxstrxMinTyMinTxMaxTyMaxTadvanceWidthMaxminLeftSideBearingminRightSideBearing
xMaxExtent	maxPointsmaxContoursmaxComponentPointsmaxComponentContoursmaxComponentElementsmaxComponentDepthhmr>   glyphLenr*   r   pos_in_glyphr   nComponentElementsglyphIdxpaddinglocastrr   r   r   os2stms\                                                                                               r   
makeSubsetzTTFontFile.makeSubset  sg   tT"			!!
 			"++-**,
 			"++-+/+;+;+==(
 			!$$&	
 oof-		!))+ !~& 	!A))+J))+J__&FyyHQ:#3v)=>bL00;f0D-qZ1_qv)=>aK*5*>'IIh #	!& #+@4==(  ,    @ NN0+{KMM-{KH&
 %y+uE
 	%y1x 	1D((($$T*D1E '')9)9$)?(FG*.*:*:4*@!$'dkk40DK	1 **62u%1 	!c!/C8O)*H%&FA	
 %+,=,C,C,E%F 	:!C!'(89K	: '%1 	8!c"'X)57INN+Y7	8
 (+<'88	$ x 	/CHHS$..-.	// 	3Ct{{"dnnS12	3
 v&#$veAb'99A  ?A  =B  B A	 !2!2!45 		JC!$9q=)Aw&&u- "$ww&&u-GI		 v;?Q(*%/K)A-M Q(* "Ao\K/
qz#y{31qrvqQJ '  & 	!OE8s8}Q/GKK 	! 	FA  & 	OE8KK	 	F% 	!OE8hqk)*Gx AKK 	!
 	A 	HKKN	 	A% 	OHeKK	 	AB% 	/BQw4b>)/tD"~-G	/ 	! #'"4"4V"<J+++v.IuB%
	  %1 :	!c0@ABrMGNN3==)9:==)9A)=>I
 T///i:qL>>*X*=hGDR5D1D&a"23A61".!%&"w&!+&fT,q&ABBqEEfT,q.&CDB!!uHNN--.>CNN|]_`gghpqJ#//lQ6FQYHZ[ !A%L($)$)($)*,$)+-$)- w0 (++?AS'T$DLD8OCa1sQw-
1T7733wu:	x 	s 	! B%Ag!^v% ! -4V,,-  !! 44S]334 	! ~~f%b*:; ~~f%b*:; ~~f%a3 nnV$ nnR 
K/MM"@2"EFtD2#.GL  04DEF6 $ J  &=&HIJs0   j/$k3l	/*k#ll	#l0/l0c                 z   |dxx   dz  cc<   t        |d   |d         |d<   t        | j                  |   d         r*| j                  |   d   D ]  }| j                  ||        nG| j                  |   d   dkD  r2|d   dkD  r*| j                  |   d   z  }| j                  |   d   z  }|dxx   dz  cc<   y )Ndepthr   maxdepthr   	nContoursr   nPoints)r  r(   r
  getGlyphData)r4   r  r  rD  contourspointss         r   rO  zTTFontFile.getGlyphData'  s    'a #Ij$99W;M N	*/0>? NN+;<\J 7!!(I67 ~~./<q@iPWFX[\F\'78EEHdnn%56yAAF'ar!   c                 l   	 | j                   |   }| j                   |dz      |z
  }|sy | j	                  |d   |z          | j                         }|dk  r8| j                  d       t        }|t        z  r| j                         }| j                         }||d   vr*t        |d         |d   |<   |d   j                  |df       | j                  j                         }| j                  ||       | j	                  |       |t        z  r| j                  d       n| j                  d	       |t        z  r| j                  d	       n5|t         z  r| j                  d       n|t"        z  r| j                  d       |t        z  ry y y # t        $ r t        j                  d|z         Y y w xY w)
Nr   r   r   r   r   r   r   r#   r%   )r>   r  r  r	  r]   rq   ra   r  rQ   r(   r   r;   tellr  r  r  r  r  )	r4   r  r  r>   rA  numberOfContoursr   rD  saveposs	            r   r  zTTFontFile.getGlyphs8  s   	}}%56H}}%5%9:XEH
 		)G$x/0??,q IIaLE7?((*++-Ij$9969)N:S6TIj)(3n-44h]C'',,.x3		'"H$IIaLIIaLH$IIaLj(IIaLk)IIaL' 7? !  	MM,0@AB	s   $F !F32F3c                    | j                  d      }d}dgdz  dz  | _        d}|dz  | j                  k  r:| j                  ||dz        }t	        dt        t        |      dz        z  |      }	n| j                  |       t        |      D ]  }
|dz  | j                  k  r		|
dz     }n | j                         }| j                         }|
|v s|
dk(  sH|dk\  rd}|
dk(  r||z  | _
        _||
   D ]I  }|dk7  s	|dk7  st        t        ||z  d	z               }|dk(  rd}|d
k  s6|| j                  |<   |dz  }K  | j                  ||dz  z   |dz        }t	        dt        t        |      dz        z  |      }	||z
  }t        |      D ]]  }||z   }
|
|v s||
   D ]I  }|dk7  s	|dk7  st        t        ||z  d	z               }|dk(  rd}|d
k  s6|| j                  |<   |dz  }K _ || j                  d<   y )Nr   r      r#   >%dHr%   rl   r   gMbP?   r   )rf   r=   r2   r   r   r   r(   r]   r)   rQ   defaultWidthround)r4   r   r   r   r   r   awnCharWidthsr*   arrglyphlsbr   wdiffr^   s                   r   r   zTTFontFile.getHMTXa  sC   '#)C-a4#5#55>>%)9!);=D3s4y{#34d;CIIe+, 	-E!!#t'9'99%'^%%'&&($
7OBQJ(-bD%'. -D	demeBhun 56F%a 6M45DOOD1'1,K-	-0 ~~u%5a%77)A+GVs3t9Q;/0$7)); 		-C**E$'. -D	demeBhun 56F%a 6M45DOOD1'1,K-		- )r!   c                 z   | j                  d      }||k  r4| j                  ||dz  z          | j                  j                  d      }|S | j                  ||dz
  dz  z          | j                  j                  d      }| j                  ||dz  z   |dz  z          || j                  j                  d      z  }|S )Nr   r#   r   r%   )rf   r]   r;   ri   )r4   r   gidr   r@  s        r   r  zTTFontFile.getHMetric  s    '""IIeSUm$aB 		 IIe.q0!345aBIIe-a/0#a%89$'',,q/!B	r!   c                    | j                  d      }g | _        |dk(  rn| j                  ||dz  dz         }t        dt	        t        |      dz        z  |      }t        |      D ]#  }| j                  j                  ||   dz         % y |dk(  rk| j                  ||dz  dz         }t        dt	        t        |      dz        z  |      }t        |      D ]   }| j                  j                  ||          " y t        d|z          y )	Nr   r   r%   rX  r   r#   z>%dLzUnknown location table format )	rf   r>   r   r   r   r(   r)   r   r   )r4   r   r   r   r*   r^  r  s          r   r   zTTFontFile.getLOCA  s    '!>>%1a8D3s4y{#34d;C9% 3$$c!fqj23!#>>%1a8D3s4y{#34d;C9% /$$c!f./ 03CCDr!   c                 :   d| _         | j                  |dz          | j                         }||z   }| j                  d       t	        | j                         dz        }| j                  d       g }t        |      D ]!  }|j                  | j                                # | j                  d       g }	t        |      D ]!  }|	j                  | j                                # g }
t        |      D ]!  }|
j                  | j                                # | j                  }g }t        |      D ]!  }|j                  | j                                # t        |      D ]  }||   dz   }t        |	|   |d      D ]  }||   dk(  r||
|   z   dz  }nE||	|   z
  dz  ||   z   }|d|z  z   |z   }||k\  rd}n!| j                  |      }|dk7  r||
|   z   dz  }|||<   |dk  rt        || j                         | _         |j                  |g       j                  |         y )Nr   r%   r   r   r   rY  )
maxUniCharr]   rQ   ra   r   r)   r   rq   r<   r|   r  r  )r4   r   r   r?   rP   limitr'  endCountr-   
startCountr*  idRangeOffset_startidRangeOffsetr  endpointunicharr_  rO   s                     r   r   zTTFontFile.getCMAP4  s1   		%)*!!##f,		!t'')A-.		!x 	0AOOD,,./	0		!
x 	2Ad..01	2x 	.ANN4??,-	."iix 	5A  !1!1!34	5 x 	BA aH A!< B!!$)$wqz1V;E%
15:]1=MMF01q586AF% ! $ 7!QJ$)GAJ$6&#@5',G$f$&)'$//&BDO&&ub188A!B	Br!   c                 .   d| _         | j                  |dz          | j                  d       | j                         }| j                  d       | j                         }d|dz  dz  z   |kD  rt	        d       t        |      D ]  }| j                         }| j                         }| j                         }	t        ||dz         D ]M  }
|	||
<   |
dk  rt        |
| j                         | _         |j                  |	g       j                  |
       |	dz  }	O  y )	Nr   r%   r#   r'   r&   z"TTF format 12 cmap table too smallr   rY  )	rg  r]   ra   rE   r   r)   r  r  r   )r4   r   r   r?   rP   grpCountr  startCharCodeendCharCoder_  rn  s              r   r   zTTFontFile.getCMAP12  s   		%)*		!"		!??$x!|a//&845x 		A OO-M//+KOO%E a@ ',G$f$&)'4??&CDO&&ub188A
			r!   c           	      $   t        d      }t        | j                        }d}d}|dz  |k  r|dz  }|dz   }|dz  |k  r|dz  }|dz  |z
  }t        r|t	        dd||||      z  }n|t	        dd||||      z  }| j                  }d	|dz  z   }t        |j                               }|D ]p  \  }	}
|	d
k(  r|}||	j                  d      z  }t        |
      }|t	        d|d   |d         z  }|t	        d|t        |
            z  }t        |
      dz   dz  }||z   }r |D ]/  \  }	}
|
t        d      z  }
|t        |
dt        |
      dz        z  }1 t        |      }t        d|      }t	        d|d   |d         }| j                  |dz   |      }|S )Nr   r   r   r%   r'   z>LHHHHr8   r   r   r   rh   z>HHz>LLr&   z   )i  i  r   )r   r   rA   _TTF_MAC_HEADERr   r  r  encoder.   r   r   r    r   )r4   rH  rR   rS   rT   rU   r@   rO   sorted_tablesrM   r*   
head_startrN   paddedLengthchks                  r   r  zTTFontFile.endTTFile  s   e$,,'	Q)+%/K)A-M Q)+ "B&^k1
 D:y+}V`abCD:	;WabcC i"n$v||~.& 	+ICv#
3::h''C#D)H4x{8A;77C4vvd|44C"4LNB.Ll*F	+ ' 	4ICAhKD6$q&,r/33C	4  $(35(1+hqk2kk#zA~s3
r!   N)r   )"__name__
__module____qualname__r5   rK   rG   rY   r]   ra   rf   rV   rq   rs   rQ   rE   r|   r~   r   r   r   r   r   r   r   rH   rI  rO  r  r   r  r   r   r   r  r   r!   r   r0   r0   G   s    $.0 
  0*
S*
SU//&
&!kFbY|
 "%!R3)l
E"*BZ:+r!   r0   )structr   r   r   r   r  phpr   r   r	   r
   r   r   py3kr   r   ru  r  r  r  r  r  r    r.   r0   r   r!   r   <module>r     sT   & - , 	  @ @   
c cr!   