
    imSܝ                         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dS )    )packunpackunpack_fromN   )diesubstr
str_repeatstr_padstrlencount)bordF       @      c                     | d         }| d         }|d         }|d         }||k    r
|dz  }|dz  }||z
  }||k    r|dz  }||z
  }|dz  }||fS )Nr   r         )xyxloxhiyloyhiresloreshis           \/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/fpdf/ttfonts.pysub32r    *   sx    
A$C
A$C
A$C
A$Cc		wqGEc		wGEFNE5>    c                    t          |           dz  r3| t          t          d          dt          |           dz  z
            z  } d}d}t	          dt          |           d          D ]}|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  }||fS )
N    r   r   r            r   )r   r	   r   lenranger   )datahilois       r   calcChecksumr.   9   s    tq 9
1T77QD		A%6888BB1c$ii##  
s47||Q#d1Q3i..00
s4!9~~q CQqS	NN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!d!S )#
TTFontFilec                     d| _         d S )Ni@ )maxStrLenReadselfs    r   __init__zTTFontFile.__init__I   s    #r!   c                    || _         t          |d          | _        d| _        g | _        i | _        i | _        i | _        i | _        d| _	        d| _
        i | _        |                                 x| _        }|dk    rt          d           |dk    rt          d           |dvrt          d|z              |                                  |                                  | 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)r4   filerF   s      r   
getMetricszTTFontFile.getMetricsL   s    tD//	!%!2!22wZ7888ZBCCC222/'9:::!!!r!   c                    |                                  | _        |                                  | _        |                                  | _        |                                  | _        i | _        t          | j                  D ]}i }|                                 |d<   |                                  |                                  f|d<   |                                 |d<   |                                 |d<   || j        |d         <   d S )Ntagchecksumoffsetlength)	read_ushort	numTablessearchRangeentrySelector
rangeShiftr@   r)   read_tagrE   )r4   r-   records      r   rG   zTTFontFile.readTableDirectoryc   s    ))++++--!--//**,,t~&& 	0 	0AF MMOOF5M"&"2"2"4"4T5E5E5G5G!HF:#00F8#00F8)/DKu&&	0 	0r!   c                 V    | j         |         d         }| j         |         d         }||fS )NrO   rP   )r@   )r4   rM   rO   rP   s       r   get_table_poszTTFontFile.get_table_posq   s/    S!(+S!(+r!   c                 R    || _         | j                            | j                    d S Nr<   r;   seek)r4   poss     r   r]   zTTFontFile.seekv   s%    	TYr!   c                 b    | j         |z   | _         | j                            | j                    d S r[   r\   )r4   deltas     r   skipzTTFontFile.skipz   s,    I%	TYr!   r   c                     |                      |          }|d         |z   | _        | j                            | j                   | j        S Nr   )rY   r<   r;   r]   )r4   rM   offset_in_tabletposs       r   
seek_tablezTTFontFile.seek_table~   sC    !!#&&Go-	TYyr!   c                 |    | xj         dz  c_         | j                            d                              d          S )Nr#   latin1)r<   r;   readdecoder3   s    r   rV   zTTFontFile.read_tag   s1    		Q		w||A%%h///r!   c                     | xj         dz  c_         | 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   s^    		Q		GLLOO1YY\S1YY&M 	 gAr!   c                 v    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   s>    1YY\S1YY&M 	 gAr!   c                     | xj         dz  c_         | j                            d          }t          |d                   dz  t          |d                   z   S Nr%   r   r   r   rm   r4   ro   s     r   rQ   zTTFontFile.read_ushort   sE    		Q		GLLOOAaD		1AaD		))r!   c                    | xj         dz  c_         | 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   sl    		Q		GLLOOAaD		("s1Q4yy"}5QqTAFQqTRRr!   c                     | 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   sJ    SGLLOOAaD		1AaD		))r!   c                 *   | 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   sq    SGLLOOAaD		("s1Q4yy"}5QqTAFQqTRRr!   c                 \    |dk     rt          |          }| }|dz  }t          d|          S Nr   r   >H)absr   )r4   vals     r   
pack_shortzTTFontFile.pack_short   s4    EEc((C$C1HCD~~r!   c                 l    t          |d|          |z   t          ||t          |          z             z   S rc   )r   r   )r4   streamrO   values       r   splicezTTFontFile.splice   s3    fQv&&.vfUmm?S1T1TTTr!   c                 P    t          d|          }|                     |||          S )Nr   )r   r   )r4   r   rO   r   ups        r   _set_ushortzTTFontFile._set_ushort   s'    ${{662...r!   c                     |dk     rt          |          }| }|dz  }t          d|          }|                     |||          S r   )r   r   r   )r4   r   rO   r   r   s        r   
_set_shortzTTFontFile._set_short   sI    EEc((C$C1HC$s^^{{662...r!   c                 z    | j                             |           |dk     rdS | j                             |          S )Nr    )r;   r]   ri   )r4   r^   rP   s      r   	get_chunkzTTFontFile.get_chunk   s7    SAIIV$$%r!   c                     |                      |          \  }}|dk    rt          d| j        z   dz   |z              | 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   sl    **3//faKK!DM14NNQTTUUUSV$$%r!   c                 n    |dk    r$|                      |dt          d                    }|| j        |<   d S )Nheadr   z    )r   r   rA   )r4   rM   r*   s      r   addzTTFontFile.add   s8    6MM;;tQ*66D Sr!   c                    d| _         d| _        |                     d          }|                                 }|dk    rt	          d|z              |                                 }||                                 z   }dddddd}t          |                                          }t          |          }t          |          D ]}|                                 }	|                                 }
|                                 }|                                 }|                                 }|                                 }||vrd}|	dk    r|
dk    r|dk    r| j	        }| 
                    ||z              |d	z  dk    rt	          d
           |d	z  }d}|dk    r1|                                 }|t          |          z  }|dz  }|dk    1|| _	        | 
                    |           na|	dk    r[|
dk    rU|dk    rO| j	        }|                     ||z   |                              d          }|| _	        | 
                    |           |r||         dk    r|||<   |dz  }|dk    r n|d         r	|d         }nL|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         | _        |                     d           |                     d           |                                 x| _        }dt/          |          z  }|                     d           |                                 }|                                 }|                                 }|                                 }||z  ||z  ||z  ||z  g| _        |                     d           |                                 }|                                 }|dk    rt	          d|z              d| j        v rf|                     d           |                     d           |                                 }|                                 }||z  | _        ||z  | _        d| j        v r|                     d           |                                 }|                     d	           |                                 }|                     d	           |                                 }|d	k    s	|dz  dk    r!t	          d| j        z   dz              d| _        |                     d           |                                 } | dz	  | _         | dz  | _        | xj	        d z  c_	        | j                             d           }!|                     d!           |                                 }"|                                 }#| j        s
|"|z  | _        | j        s
|#|z  | _        |dk    r4|                     d           |                                 }$|$|z  | _!        n=| j        | _!        n0d"}| j        s
||z  | _        | j        s
||z  | _        | j        | _!        d#tE          tG          |d$z  d	                    z   | _$        |                     d%           |                     d           |                                 |                                 d&z  z   | _%        |                                 |z  | _&        |                                 |z  | _'        | (                                }%d| _)        | j%        dk    r| j)        d'z  | _)        |d(k    r| j)        d)z  | _)        |%r| j)        dz  | _)        |                     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'| +                    |)|z             }|d/k    r	|,s|)|z   }, nO|-dk    r|.dk    s|-dk    r'| +                    |)|z             }|dk    r	|+s|)|z   }+ n| 
                    |/           |+s|,st	          d0| j        z   d1z              i }0i }1|,r| ,                    |,|0|1           n| -                    |+|0|1           | .                    |'|(|0|           d S )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   sz
     oof--!!##aKK,v5666%%''
(4+;+;+=+==R"r**JJ	z""  	)  	)A))++J))++J))++J%%''F%%''F%%''Fa(AaJ!OO
e8K8Ky		,v5666QJ!OOJKKK!zz++--D#d))$AaKF zz !			$//jAoo*//yNN#5#>GGNNxXX 			$ )eFmR'' !fQ	qLL55 !H 	1XFFAh 	VCE!H--FFAh 	VCE!H--FFF 	75666	!H 	%#AhDOO$DO!H 	'"1XDNN&DN!H 	#!!HDMM"DM!H 	' %aD &D!H 	%!!HDM
 			"'+'7'7'9'99*uZ(((		"        5jDJ$u*U
L			#++--**,,q  ,>??? dk!!OOF###IIaLLL??,,L OO--M'.DK)50DL dk!!OOF###&&((GIIaLLL ,,..MIIaLLL%%''F&  Vf_$:$:(4=8;ooppp%)"IIbMMM""B!#qD$&ID IIOIIW\\"%%FIIbMMM OO--M!__..NK 4,U2L 6 .u 4!		"!__..
",U"2!%  MK<e$+L>4:4<![DN#c=4#7;;<<<

 			!??,,t/?/?/A/AG/KK!%!2!2U!:"&//"3"3e";((
q  bDJS  f,DJ 	(aDJ
 			"++--!!8IJJJ++--!!3444
 			!$$&&	
 oof--		!))++ !~&& 	  	 A))++J))++J__&&FyHQ:#3#3v)=>>bLL0 E0;f0D-EqZ1__qv)=>>aKK/ C.9F.B+EIIh" 	@+@ 	@4=(  ,    @  @  @  	INN0+{KKKKMM-{KHHH
 	%y+uEEEEEr!   c                    || _         t          |d          | _        d| _        g | _        i | _        i | _        i | _        i | _        d| _	        d| _
        |                     d           d| _        |                                  |                     d           |                     d           |                                 }|                                 }|                     d           |                     d           |                                 }|                                 x}}|                     d           |                     d           |                                 }|                     d	          }	|                     d
           |                                 }
d}d}t!          |
          D ]}|                                 }|                                 }|                                 }| j        }|dk    r-|dk    r'|                     |	|z             }|dk    r	|s|	|z   } nM|dk    r|dk    s|dk    r%|                     |	|z             }|dk    r|	|z   } n|                     |           |s|st)          d| j         z   dz              i }i }|r|                     |||           n|                     |||           || _        d}|                     ||||           |                     ||           dg}i }|D ]h}|| j        v rC| j        |         |f|vr"|                    | j        |         |f           | j        |         ||<   t5          | j        |          | _        i|                     d          \  }}|                                 i }d}d}|D ]\  }}t5          ||          }|||<   |dz  } i } t;          |                                          D ]\  }}||         | |<   | | _        |D ]!\  }}|||d}!|                      ||!           "tC          |          x}}dg}"|"D ]+}#| "                    |#| #                    |#                     ,g d}"|"D ]4}#|#| j        v r)| "                    |#| #                    |#                     5| #                    d          }$tI          d          tK          |$dd          z   tI          d          z   }%| "                    d|%           d| v r| d= d}&i }'d}(d})t;          |                                           D ]Y\  }*}+|*|(dz   k    r%|+|)dz   k    r|'|&                             |+           n"|*}&g |'|&<   |'|&                             |+           |*}(|+})ZtC          |'          dz   },d}-d}.|-d
z  |,k    r|-d
z  }-|.dz   }.|-d
z  |,k    |-d
z  }-|,d
z  |-z
  }/dd|,z  z   |dz   z   }0ddddddd|0d|,d
z  |-|.|/g}1t;          |'                                          }'|'D ]/\  }}2|tC          |2          dz
  z   }3|1                    |3           0|1                    d           |1                    d           |'D ]\  }}2|1                    |           |1                    d           |'D ]8\  }}2||2d         z
   }4|tM          |2          z  }|1                    |4           9|1                    d           |'D ]}2|1                    d           |1                    d           |'D ]\  }2}+|1'                    |+           |1                    d           tI          d          }5|1D ]b}6|6dk    r|5tQ          d|6          z  }5	 |5tQ          d |6          z  }51#  tS          j*        d!|6z             |5tQ          d|6           z  }5Y `xY w| "                    d	|5           |                     d          \  }7}8|8| j+        k     r| #                    d          }9g }:tI          d          };d}<tI          d          }=d}>d}?d}@d}Ad}Bd}Cd}Dd}Ed}Fd}Gd}Hd}Id}Jd}Ki | _,        |D ]\  }}| -                    ||          }L|=|Lz  }=|:                    |<           	 | j        |         }M| j        |dz            |Mz
  }Nn)# t\          $ r tS          j*        d"|z             d}NY nw xY w|8| j+        k     rtK          |9|M|N          }On/|Ndk    r| /                    |7|Mz   |N          }OntI          d          }O|Ndk    r%ta          dtK          |Odd
                    d         }P|Nd
k    rc|Pd#z  r]d}Qtb          }Rd}S|Rtb          z  r7|Sdz  }Sta          dtK          |O|Qd
                    }P|Pd         }Rta          dtK          |O|Qd
z   d
                    }P|Pd         }T| j,        2                    |i           2                    d$g                               |T           	 | 3                    |O|Qd
z   ||T                   }On)# th          $ r d}OtS          j*        d%|Tz             Y nw xY w|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  7t5          |J|S          }J|;|Oz  };|<|Nz  }<|<dz  dk    r-d|<dz  z
  }U|;ts          tI          d&          |U          z  };|<|Uz  }<|:                    |<           | "                    d|;           | "                    d'|=           tI          d          }V|<dz   dz	  dk    rd}|:D ]}|VtQ          d(|          z  }Vn*d}|:D ]%}|VtQ          dtu          |d
z                      z  }V&| "                    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 ),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  s   tT""			!!!!
 			"++--**,,
 			"++--+/+;+;+=+==(
 			!$$&&	
 oof--		!))++ !~&& 	! 	!A))++J))++J__&&FyHQ:#3#3v)=>>bLL0 E0;f0D-EqZ1__qv)=>>aKK*5*>'EIIh    " 	@+@ 	@4=(  ,    @  @  @  	INN0+{KKKKMM-{KHHH&
 %y+uEEE
 	%y111x 	1 	1D((($T*D1EE '')9$)?(FGGG*.*:4*@!$'dk400DKK**622u%1 	 	!c!/C88O)*H%&FAA%+,=,C,C,E,E%F%F 	: 	:!C!'(89K&%1 	8 	8!c"'X)57 7INN+Y7777'*<'8'88	$ x 	/ 	/CHHS$..--..../// 	3 	3Ct{""dnnS11222 v&&#$$veAb'9'99A  ?A  =B  =B  B A	 !2!2!4!455 		 		JC!$$9q=)A)Aw&&u---- "$ww&&u---GII 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NNNNA% 	 	OHeKKAB%% 	/ 	/BQww4b>>)/tD"~~-GG/M"@2"EFFFtD2#.GGG!!! #'"4"4V"<"<J+++v..IuuB%%
	  %1 :	 :	!c0@AABrMGNN3=)9:=)9A)=>I   04DEFFF T///i::qLL>>*X*=hGGDDR55D1D&a"2"233A61".!%&"w *&!+&fT,q&A&ABBBqEEfT,q.&C&CDDB!!uHN--.>CCNN|]_``gghpqqqJ#//lQ6FQYHZ[[# J J J  &=&HIIIIIJ !A%L( *$)$)( *$)*, *$)+- *$)- w *0 (++?AS'T'T$DLD8OCa1sQw-
1T777333ws 	!!! B%%Ag!^v%% ! - -4V,,,-  !! 4 44S]]333!!! ~~f%%b*:;; ~~f%%b*:;; ~~f%%a33 nnV$$ nnR  
s0   <^-^? b//#cc h,,#iic                    |dxx         dz  cc<   t          |d         |d                   |d<   t          | j        |         d                   r-| j        |         d         D ]}|                     ||           nO| j        |         d         dk    r8|d         dk    r,|| j        |         d         z  }|| j        |         d         z  }|dxx         dz  cc<   d S )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 N	*/0>?? 	B N+;<\J 7 7!!(I66667 ~./<q@@iPWFX[\F\F\'78EEHdn%56yAAF'ar!   c                 
   	 | j         |         }| j         |dz            |z
  }n(# t          $ r t          j        d|z             Y d S w xY w|sd S |                     |d         |z              |                                 }|dk     ry|                     d           t          }|t          z  rT|                                 }|                                 }||d         vr;t          |d                   |d         |<   |d         
                    |df           | j                                        }|                     ||           |                     |           |t          z  r|                     d           n|                     d	           |t          z  r|                     d	           n?|t           z  r|                     d           n|t"          z  r|                     d           |t          z  Pd S d S d S )
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EHH 	 	 	M,0@ABBBFF	  	F		)G$x/000??,,q  IIaLLLE7? !((**++--Ij$99969)N:S6T6TIj)(3n-44h]CCC',,..x333		'"""H$ !IIaLLLLIIaLLLH$ !IIaLLLLj( !IIaLLLLk) !IIaLLL' 7? ! ! ! ! ! !s    # !AAc                 f   |                      d          }d}dgdz  dz  | _        d}|dz  | j        k     rJ|                     ||dz            }t	          dt          t          |          dz            z  |          }	n|                     |           t          |          D ]}
|dz  | j        k     r|	|
dz           }n(| 	                                }| 	                                }|
|v s|
dk    ro|dk    rd}|
dk    r||z  | _
        g||
         D ]M}|dk    rE|dk    r?t          t          ||z  d	z                       }|dk    rd}|d
k     r|| j        |<   |dz  }N|                     ||dz  z   |dz            }t	          dt          t          |          dz            z  |          }	||z
  }t          |          D ]a}||z   }
|
|v rV||
         D ]M}|dk    rE|dk    r?t          t          ||z  d	z                       }|dk    rd}|d
k     r|| j        |<   |dz  }Nb|| j        d<   d S )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  s   ''#)C-a4#555>>%)9!);==D3s4yy{#3#34d;;CCIIe+,, 	- 	-E!!#t'999%'^%%''&&(($$

7OOBQJJ(-bD%'. - -D		demmeBhun 5 566FF%a 6MM45DOD1'1,K ~~u%5a%77)A+GGVs3t99Q;//0$77));; 		- 		-C**E$$'. - -D		demmeBhun 5 566FF%a 6MM45DOD1'1,K
 )r!   c                    |                      d          }||k     r6|                     ||dz  z              | j                            d          }nv|                     ||dz
  dz  z              | j                            d          }|                     ||dz  z   |dz  z              || 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BBIIe.q0!34555aBIIe-a/0#a%8999$',,q//!B	r!   c                    |                      d          }g | _        |dk    r|                     ||dz  dz             }t          dt	          t          |          dz            z  |          }t          |          D ]%}| j                            ||         dz             &d S |dk    r|                     ||dz  dz             }t          dt	          t          |          dz            z  |          }t          |          D ]"}| j                            ||                    #d S t          d|z              d S )	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  sO   ''!!>>%1a88D3s4yy{#3#34d;;C9%% 3 3$$c!fqj22223 3!##>>%1a88D3s4yy{#3#34d;;C9%% / /$$c!f..../ / 03CCDDDDDr!   c                 
   d| _         |                     |dz              |                                 }||z   }|                     d           t	          |                                 dz            }|                     d           g }t          |          D ])}|                    |                                            *|                     d           g }	t          |          D ])}|	                    |                                            *g }
t          |          D ])}|
                    |                                            *| j        }g }t          |          D ])}|                    |                                            *t          |          D ]}||         dz   }t          |	|         |d          D ]}||         dk    r||
|         z   dz  }nT||	|         z
  dz  ||         z   }|d|z  z   |z   }||k    rd}n)| 	                    |          }|dk    r||
|         z   dz  }|||<   |dk     rt          || j                   | _         |                    |g                               |           d S )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  s   		%)***!!###f,		!t''))A-..		!x 	0 	0AOOD,,..////		!
x 	2 	2Ad..001111x 	. 	.ANN4??,,----"ix 	5 	5A  !1!1!3!34444x 	B 	BA aH A!<< B B!!$))$wqz1V;EE%
15:]1=MMF01q586AF% ! $ 7 7!QJJ$)GAJ$6&#@5',G$f$$&)'$/&B&BDO&&ub1188AAAA!B	B 	Br!   c                    d| _         |                     |dz              |                     d           |                                 }|                     d           |                                 }d|dz  dz  z   |k    rt	          d           t          |          D ]}|                                 }|                                 }|                                 }	t          ||dz             D ]U}
|	||
<   |
dk     rt          |
| j                   | _         |                    |	g                               |
           |	dz  }	Vd S )	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  sJ   		%)***		!""		!??$$x!|a//&884555x 		 		A OO--M//++KOO%%E a@@  ',G$f$$&)'4?&C&CDO&&ub1188AAA
			 		r!   c           	         t          d          }t          | j                  }d}d}|dz  |k    r|dz  }|dz   }|dz  |k    |dz  }|dz  |z
  }t          r|t	          dd||||          z  }n|t	          dd||||          z  }| j        }d	|dz  z   }t          |                                          }|D ]\  }	}
|	d
k    r|}||	                    d          z  }t          |
          }|t	          d|d         |d                   z  }|t	          d|t          |
                    z  }t          |
          dz   dz  }||z   }|D ];\  }	}
|
t          d          z  }
|t          |
dt          |
          dz            z  }<t          |          }t          d|          }t	          d|d         |d                   }|                     ||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   ee$,''	Q)++%/K)A-M Q)++ "B&^k1
  	dD:y+}V`aabCCD:	;WabbcC i"n$v||~~..& 	+ 	+ICv#
3::h'''C#D))H4x{8A;777C4vvd||444C"4LLNB.Ll*FF ' 	4 	4ICAhKKD6$q&,,r/333CC$$(335(1+hqk22kk#zA~s3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 0     
             0 0 0    * * *
S S S* * *
S S S  U U U/ / // / /& & &
& & &! ! !kF kF kFbY Y Y|
     "%! %! %!R3) 3) 3)l
 
 
E E E"*B *B *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     s   & - , , , , , , , , , 				  @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @          
    c c c c c c c c c cr!   