a
    —Æàg�Q  ã                   @   sþ  d Z ddlZddlmZ ddlmZ ddlmZmZm	Z	m
Z
 ddlmZmZmZ ddlmZ ddlZddlZdZd	ZdZz0zdd
lmZ W n ey¤   ddlZY n0 W n ey¾   dZY n0 dZG dd„ deƒZG dd„ deƒZdGdd„ZdHdd„ZdZ dZ!dIdd„Z"dJdd„Z#dd„ Z$dd„ Z%d d!„ Z&dKd"d#„Z'd$Z(ej)d%ej*d&�Z+d'Z,d(Z-d)Z.e )d*¡Z/d+d,„ Z0d-d.„ Z1d/d0„ Z2d1d2„ Z3e )d3¡Z4d4d5„ Z5d6d7„ Z6d8d9„ Z7e8eƒZ9e9 :d:¡ e8eƒZ;e; <d;d<g¡ g d=¢Z=d>Z>g d?¢Z?d@Z@dAZAdBZBdCdDgZCdEdFgZDdS )Laš  fontTools.t1Lib.py -- Tools for PostScript Type 1 fonts.

Functions for reading and writing raw Type 1 data:

read(path)
	reads any Type 1 font file, returns the raw data and a type indicator:
	'LWFN', 'PFB' or 'OTHER', depending on the format of the file pointed
	to by 'path'.
	Raises an error when the file does not contain valid Type 1 data.

write(path, data, kind='OTHER', dohex=False)
	writes raw Type 1 data to the file pointed to by 'path'.
	'kind' can be one of 'LWFN', 'PFB' or 'OTHER'; it defaults to 'OTHER'.
	'dohex' is a flag which determines whether the eexec encrypted
	part should be written as hexadecimal or binary, but only if kind
	is 'OTHER'.
é    N)Úeexec)ÚgetMacCreatorAndType)ÚbytechrÚbyteordÚ	bytesjoinÚtobytes)Ú_type1_pre_eexec_orderÚ_type1_fontinfo_orderÚ_type1_post_eexec_order)ÚStandardEncodingZjvrz1.0b3)ÚResé   c                   @   s   e Zd ZdS )ÚT1ErrorN)Ú__name__Ú
__module__Ú__qualname__© r   r   úQ/var/www/sistema_ama/venv/lib/python3.9/site-packages/fontTools/t1Lib/__init__.pyr   0   s   r   c                   @   sf   e Zd ZdZddd„Zd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d„ZdS )ÚT1FontztType 1 font class.

    Uses a minimal interpeter that supports just about enough PS to parse
    Type 1 fonts.
    ÚasciiNc                 C   sf   |d u rt |ƒ\| _}nD|dkr,t|ƒ| _n0|dkr@t|ƒ| _n|dkrTt|ƒ| _nt|ƒ‚|| _d S )NÚLWFNÚPFBÚOTHER)ÚreadÚdataÚreadLWFNÚreadPFBÚ	readOtherÚ
ValueErrorÚencoding)ÚselfÚpathr   ÚkindÚ_r   r   r   Ú__init__;   s    zT1Font.__init__Fc                 C   s   t ||  ¡ ||ƒ d S ©N)ÚwriteÚgetData)r    r!   ÚtypeÚdohexr   r   r   ÚsaveAsH   s    zT1Font.saveAsc                 C   s   t | dƒs|  ¡ | _| jS )Nr   )ÚhasattrÚ
createDatar   ©r    r   r   r   r'   K   s    

zT1Font.getDatac                 C   s   | d S )a‚  Return a generic GlyphSet, which is a dict-like object
        mapping glyph names to glyph objects. The returned glyph objects
        have a .draw() method that supports the Pen protocol, and will
        have an attribute named 'width', but only *after* the .draw() method
        has been called.

        In the case of Type 1, the GlyphSet is simply the CharStrings dict.
        ÚCharStringsr   r-   r   r   r   ÚgetGlyphSetP   s    	zT1Font.getGlyphSetc                 C   s   t | dƒs|  ¡  | j| S )NÚfont)r+   Úparser0   )r    Úkeyr   r   r   Ú__getitem__[   s    
zT1Font.__getitem__c           
      C   sä   ddl m} ddl m} | | j| j¡| _| jd }| jd  dd¡}|dksRJ ‚| jd d }| ¡ D ]2\}}t	 
|d	¡\}}|j||d … |d
�||< qhtt|ƒƒD ]2}	t	 
||	 d	¡\}}|j||d … |d
�||	< q¨| `d S )Nr   )ÚpsLib)ÚpsCharStringsr.   ÚPrivateÚlenIVé   ÚSubrséê  )Úsubrs)ÚfontTools.miscr4   r5   Zsuckfontr   r   r0   ÚgetÚitemsr   ÚdecryptZT1CharStringÚrangeÚlen)
r    r4   r5   ZcharStringsr7   r;   Z	glyphNameZ
charStringÚRÚir   r   r   r1   `   s     
ÿzT1Font.parsec              	   C   s¼  | j }d}i }g }| |  d|d › �¡|  dtj› d�¡|  d|d › �¡g¡ d}|d7 }|d	7 }tD ]}|t||v ƒ7 }qj| |  |› d
�¡¡ | ¡ D ]º\}}|r´|||< qž|dk�r.|d }d}t	D ]}	|t|	|v ƒ7 }qÎ| |  d|› d
�¡¡ | ¡ D ]\}	}
| |  
|	|
¡¡ �q| d¡ qž|tv �rF|||< d}qž| |  
||¡¡ qž| d¡ |  |¡}| td|gƒ¡ tdƒD ]}| |  d¡¡ �qˆ| g d¢¡ t|dƒ}|S )NFz%!FontType1-1.1: ÚFontNamez
%t1Font: (ú)z%%BeginResource: font é   r   é   ú dict dup beginZFontInfoz
/FontInfo s   end defTó   ends   currentfile eexec é   Z@0000000000000000000000000000000000000000000000000000000000000000)s   cleartomarks   %%EndResources   %%EOFÚ
)r0   ÚextendÚ_tobytesÚ	fontToolsÚversionÚfont_dictionary_keysÚintÚappendr>   ÚFontInfo_dictionary_keysÚ_make_linesr
   Úencode_eexecr   r@   )r    ZsfZeexec_beganÚ
eexec_dictÚlinesÚsizer2   ÚvalueÚfiÚsubkeyÚsubvalueÚeexec_portionr#   r   r   r   r   r,   s   sR    ýÿ




zT1Font.createDatac                 C   sà  g }d\}}}d}t }t| ¡ dd„ d�}|D �]z\}	}
|	dk�rÚ|d }d}tD ]}|t||v ƒ7 }qR| d¡ | |  |› d	�¡¡ | ¡ D �]D\}}|s¬|tkr¬|}n"|s¾|tv r¾|}n|sÎ|t	v rÎ|}|d
krÚ|}|dkrô| |  t
¡¡ q�|dk�rÄ|D ]}| ¡  �qdd„ |D ƒ}| dt|ƒ› d� d¡¡ t|ƒD ]h\}}t ttd |… |gƒd¡\}}| t|  d|› dt|ƒ› d|› d�¡||  d|› �¡gƒ¡ �qD| d¡ | d¡ q�| |  ||¡¡ q�q.|	dk�r˜| d¡ | |  t|d ƒ› d	�¡¡ |d  ¡ D ]r\}}| ¡  t ttd |… |jgƒd¡\}}| t|  d|› dt|ƒ› d|› d�¡||  d|› �¡gƒ¡ �q| d¡ q.| |  |	|
¡¡ q.| g d¢¡ t|dƒ}t tt|gƒd¡\}}|S )N)NNNr8   c                 S   s   | d dkS )Nr   r6   r   )Úitemr   r   r   Ú<lambda>±   ó    z%T1Font.encode_eexec.<locals>.<lambda>)r2   r6   rF   s   dup /PrivaterH   r7   Ú
OtherSubrsr9   c                 S   s   g | ]
}|j ‘qS r   )Úbytecode)Ú.0Úsubr_binr   r   r   Ú
<listcomp>Í   r`   z'T1Font.encode_eexec.<locals>.<listcomp>z/Subrs z arrayr   r:   údup ú ó   defs   putr.   s   dup /CharStringsú/s   end put)rI   s%   dup /FontName get exch definefont pops   marks   currentfile closefile
rK   éqÙ  )Ú	std_subrsÚsortedr>   ÚPrivate_dictionary_keysrQ   rR   rM   ÚRD_valueÚ	ND_valuesÚ	PD_valuesÚ
hintothersÚcompilerA   ÚencodeÚ	enumerater   Zencryptr   Úchar_IVrL   rT   rb   Úeexec_IV)r    rV   rW   ZRD_keyZND_keyZNP_keyr7   r;   ZsortedItemsr2   rY   ÚprrX   r[   r\   rd   rC   Zencrypted_subrrB   Z
glyph_nameZchar_binZencrypted_charr]   Zencrypted_eexecr   r   r   rU   ¨   s”    



ÿÿûÿÿ


ÿÿÿûÿÿÿ	
zT1Font.encode_eexecc              
   C   s°  |dkr"|   d|› d|› d�¡gS |dv rL|   d|› d|r>dnd› d�¡gS |d	krÒ|tkrp|   d|› d
�¡gS g }| d¡ | d¡ tdƒD ]2}|| }|dkr�| |   d|› d|› d�¡¡ q�| d¡ |S t|tƒrö|   d|› d|› d�¡gS t|tƒ�r&|   d|› d|�rdnd› d�¡gS t|tƒ�r\|   d|› dd dd„ |D ƒ¡› d�¡gS t|t	ƒ�r’|   d|› dd dd„ |D ƒ¡› d�¡gS |   d|› d|› d�¡gS d S )NrD   ri   z /z def)ZisFixedPitchÚ	ForceBoldÚ	RndStemUprg   ÚtrueÚfalseÚEncodingz StandardEncoding defs   /Encoding 256 arrays'   0 1 255 {1 index exch /.notdef put} foré   z.notdefrf   z putrh   z (z) defz [c                 s   s   | ]}t |ƒV  qd S r%   ©Ústr©rc   Úvr   r   r   Ú	<genexpr>"  r`   z%T1Font._make_lines.<locals>.<genexpr>z] defz {c                 s   s   | ]}t |ƒV  qd S r%   r~   r€   r   r   r   r‚   $  r`   z} def)
rM   r   rR   r@   Ú
isinstancer   ÚboolÚlistÚjoinÚtuple)r    r2   rY   rW   rC   Únamer   r   r   rT   
  s2    "

 

$**zT1Font._make_linesÚstrictc                 C   s   t || j|ƒS r%   )r   r   )r    ÚsÚerrorsr   r   r   rM   (  s    zT1Font._tobytes)r   N)F)r‰   )r   r   r   Ú__doc__r$   r*   r'   r/   r3   r1   r,   rU   rT   rM   r   r   r   r   r   4   s   

5br   Fc                 C   s`   t j | ¡\}}| ¡ }t| ƒ\}}|dkr:t| |ƒdfS |dkrPt| |ƒdfS t| ƒdfS dS )z,reads any Type 1 font file, returns raw datar   z.pfbr   r   N)Úosr!   ÚsplitextÚlowerr   r   r   r   )r!   Ú
onlyHeaderr#   ÚextZcreatorÚtypr   r   r   r   /  s    r   r   c                 C   sÔ   t |ƒ | ¡ }zt | ¡ W n tjy2   Y n0 d}zh|dkrNt| |ƒ n |dkrbt| |ƒ nt| ||ƒ d}W |rÐtsÐzt | ¡ W qÐ tjyž   Y qÐ0 n.|rÎtsÎzt | ¡ W n tjyÌ   Y n0 0 d S )Nr   r   r   r   )	ÚassertType1Úupperr�   ÚremoveÚerrorÚ	writeLWFNÚwritePFBÚ
writeOtherÚDEBUG)r!   r   r"   r)   Úerrr   r   r   r&   <  s0    ür&   iÐ  éP   c              	   C   s  ddl m} || ƒ}zâg }| dg ¡D ]Ä}t|jd ƒ}t|jd ƒdkrRtdƒ‚|dv r€|rj|dkrj qì| |jdd… ¡ q&|d	v rŽ qìq&|d
krÐt| dƒ�}| | ¡ ¡ W d  ƒ qê1 sÄ0    Y  q&|dkrÚq&tdt	|ƒ ƒ‚q&W | 
¡  n
| 
¡  0 t|ƒ}t|ƒ |S )z)reads an LWFN font file, returns raw datar   )ÚResourceReaderÚPOSTr   zcorrupt LWFN file©r   rG   rG   N)rF   é   r8   Úrbúbad chunk code: )ZfontTools.misc.macResr�   r=   r   r   r   rR   Úopenr   ÚreprÚcloser   r“   )r!   r�   r�   Úreaderr   ÚresÚcodeÚfr   r   r   r   Z  s0    .r   c                 C   sÊ   g }t | dƒ�˜}| d¡tdƒkr*tdƒ‚t| d¡ƒ}|dv rtt| d¡ƒ}| |¡}t|ƒ|kshJ ‚| |¡ n|dkr€q˜ntdt|ƒ ƒ‚|rq˜qW d	  ƒ n1 s¬0    Y  t	|ƒ}t
|ƒ |S )
z'reads a PFB font file, returns raw datar¡   r   é€   zcorrupt PFB filerŸ   r8   rF   r¢   N)r£   r   r   r   r   ÚstringToLongrA   rR   r¤   r   r“   )r!   r�   r   r©   r¨   ZchunklenÚchunkr   r   r   r   y  s$    
"r   c                 C   sŠ   t | dƒ�}| ¡ }W d  ƒ n1 s(0    Y  t|ƒ t|ƒ}g }|D ]6\}}|rvt|dd… ƒrv| t|ƒ¡ qJ| |¡ qJt|ƒS )z'reads any (font) file, returns raw datar¡   Nr8   )r£   r   r“   ÚfindEncryptedChunksÚisHexrR   ÚdeHexStringr   )r!   r©   r   ÚchunksÚisEncryptedr¬   r   r   r   r   ‘  s    &r   c           	   	   C   sÜ   t  | ddd¡ t  | d¡}z®t  |¡ d}t|ƒ}|D ]d\}}|rJd}nd}|r8t  t|ƒd |d td …  ¡}| d|d	¡ |td d … }|d }qNq8t  td
ƒd ¡}| d|d	¡ W t  	|¡ nt  	|¡ 0 d S )NZjustr   r   rG   iõ  r   ú rž   Ú r    )
r   ZFSpCreateResFileZFSOpenResFileZ
UseResFiler­   ÚResourcer   ÚLWFNCHUNKSIZEZAddResourceZCloseResFile)	r!   r   ZresRefZresIDr°   r±   r¬   r¨   r§   r   r   r   r—   £  s$    
"r—   c                 C   sš   t |ƒ}t| dƒ�t}|D ]H\}}|r*d}nd}| tdƒt|ƒ ¡ | tt|ƒƒ¡ | |¡ q| tdƒtdƒ ¡ W d   ƒ n1 sŒ0    Y  d S )NÚwbrG   r   rª   rF   )r­   r£   r&   r   ÚlongToStringrA   )r!   r   r°   r©   r±   r¬   r¨   r   r   r   r˜   »  s    r˜   c           	   	   C   s¦   t |ƒ}t| dƒ�€}td }|D ]b\}}|r2d}nd}|dkrx|rx|r‚| t |d |… ¡¡ | d¡ ||d … }qBq | |¡ q W d   ƒ n1 s˜0    Y  d S )Nr¶   rG   r   ó   )r­   r£   ÚHEXLINELENGTHr&   r   Z	hexString)	r!   r   r)   r°   r©   Z
hexlinelenr±   r¬   r¨   r   r   r   r™   É  s    
r™   ó   currentfile eexecs   (0[ 	
]*){512})Úflagss   currentfile closefiles   %-- eexec starts   %-- eexec ends   [0-9A-Fa-f]*$c                 C   s   t  | ¡d uS r%   )Ú_ishexREÚmatch)Útextr   r   r   r®   è  s    r®   c                 C   s  t | ƒ}g } |D ]ì\}}|rºt|d d… ƒr4t|ƒ}t |d¡\}}|dd … }|ttƒ d d… tkrŒ|ttƒ d d… tkrŒtdƒ‚|d ttƒ d … d }|  t	| t
 ¡ q|ttƒ d d… tkrò|  |d ttƒ d … ¡ q|  |¡ qt| ƒS )	Nr8   rj   r   éÿÿÿÿrG   éþÿÿÿzinvalid end of eexec partr¸   )r­   r®   r¯   r   r?   rA   ÚEEXECINTERNALENDr   rR   ÚEEXECBEGINMARKERÚEEXECENDMARKERÚ
EEXECBEGINr   )r   r°   r±   r¬   Z	decryptedrB   r   r   r   ÚdecryptType1ì  s&    ÿþrÅ   c           	      C   sö   g }|   t¡}|dk rqä|ttƒ d }t | |¡}|d u rDtdƒ‚| ¡ }| ||d … }t|d d… ƒrtt|ƒ}t	 
|d¡\}}|  t¡}|dk ržtdƒ‚| d| d |… f¡ | d|d |ttƒ d … f¡ | |d … } q| d| f¡ |S )Nr   r   zcan't find end of eexec partrG   r8   rj   )ÚfindrÄ   rA   ÚEEXECENDÚsearchr   Ústartr®   r¯   r   r?   rÁ   rR   )	r   r°   ZeBeginZendMatchZeEndZ
cypherTextZ	plainTextrB   Z	eEndLocalr   r   r   r­     s*    

"r­   c                 C   s   t  t|  ¡ ƒ¡S r%   )r   r¯   r   Úsplit)Z	hexstringr   r   r   r¯     s    r¯   s   /FontType\s+1\s+defc                 C   sV   dD ]}| d t |ƒ… |kr q*qtdƒ‚t | ¡s<tdƒ‚|  d¡dk rRtdƒ‚| S )N)s   %!PS-AdobeFonts   %!FontType1znot a PostScript fontznot a Type 1 fontrº   r   znot an encrypted Type 1 font)rA   r   Ú_fontType1RErÈ   rÆ   )r   Úheadr   r   r   r“   &  s    
r“   c                 C   s6   d}t dƒD ]$}|t| d|d > @ |d ? ƒ7 }q|S )Nr`   r8   éÿ   rJ   )r@   r   )ÚlongrŠ   rC   r   r   r   r·   7  s    "r·   c                 C   sB   t | ƒdkrtdƒ‚d}tdƒD ]}|t| | ƒ|d > 7 }q |S )Nr8   zstring must be 4 bytes longr   rJ   )rA   r   r@   r   )rŠ   ÚlrC   r   r   r   r«   >  s    r«   Z
FontMatrixZFSTypeZ	Copyright)r9   ra   ZUniqueIDZ
BlueValuesZ
OtherBluesZFamilyBluesZFamilyOtherBluesZ	BlueScaleZ	BlueShiftZBlueFuzzZStdHWZStdVWZ	StemSnapHZ	StemSnapVrx   ZLanguageGroupÚpasswordr7   Z
MinFeaturery   zá/OtherSubrs[{}{}{}{systemdict/internaldict known not{pop 3}{1183615869
systemdict/internaldict get exec dup/startlock known{/startlock get exec}{dup
/strtlck known{/strtlck get exec}{pop 3}ifelse}ifelse}ifelse}executeonly]def)s   Ž‹!s   ‹Œs   ‹�ó   s	   ŽŒŽ
s   ccccs   )ÚstringZcurrentfileZexchZ
readstringÚpop)Údef)ÚnoaccessrÔ   )Úput)rÕ   rÖ   )F)r   F)F)F)F)ErŒ   rN   r<   r   ZfontTools.misc.macCreatorTyper   ZfontTools.misc.textToolsr   r   r   r   ZfontTools.misc.psOperatorsr   r	   r
   Z$fontTools.encodings.StandardEncodingr   r�   ÚreÚ
__author__Ú__version__rš   ZCarbonr   ÚImportErrorZhaveMacSupportÚ	Exceptionr   Úobjectr   r   r&   rµ   r¹   r   r   r   r—   r˜   r™   rÄ   rr   ÚMrÇ   rÁ   rÂ   rÃ   r¼   r®   rÅ   r­   r¯   rË   r“   r·   r«   r…   rP   r•   rS   rL   rm   rq   rk   rv   ru   rn   ro   rp   r   r   r   r   Ú<module>   s|   
 |







þÿ