U
    »mœd�O  ã                   @   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z2zdd
lmZ W n ek
r¦   ddlZY nX W n ek
rÂ   dZY nX dZG dd„ deƒZG dd„ deƒZd\dd„Zd]dd„ZdZ dZ!d^dd„Z"d_dd„Z#dd„ Z$dd„ Z%d d!„ Z&d`d"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¡ d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPgZ=dQZ>dRdSdTdUdVgZ?dWZ@dXZAdYZBdZZCd[ZDdS )aa¨  fontTools.t1Lib.py -- Tools for PostScript Type 1 fonts (Python2 only)

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/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/fontTools/t1Lib/__init__.pyr   /   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 k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sRt‚| 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ÚAssertionErrorÚ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||kƒ7 }qj| |  |› d
�¡¡ | ¡ D ]º\}}|r´|||< qž|dk�r.|d }d}t	D ]}	|t|	|kƒ7 }qÎ| |  d|› d
�¡¡ | ¡ D ]\}	}
| |  
|	|
¡¡ �q| d¡ qž|tk�rF|||< d}qž| |  
||¡¡ qž| d¡ |  |¡}| td|gƒ¡ tdƒD ]}| |  d¡¡ �qˆ| dddg¡ 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@0000000000000000000000000000000000000000000000000000000000000000s   cleartomarks   %%EndResources   %%EOFÚ
)r0   ÚextendÚ_tobytesÚ	fontToolsÚversionÚfont_dictionary_keysÚintÚappendr?   ÚFontInfo_dictionary_keysÚ_make_linesr
   Úencode_eexecr   rA   )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   sx  g }d\}}}|  ¡ D �]&\}}|dk�rv|d }d}	tD ]}
|	t|
|kƒ7 }	q:| d¡ | |  |	› d�¡¡ |  ¡ D ]ú\}
}|s’|tkr’|
}n"|s¤|tkr¤|
}n|s´|tkr´|
}|
dkrÎ| |  t¡¡ qx|
dk�r`| d¡ t	t
ƒD ]^\}}t tt|gƒd	¡\}}| t|  d
|› dt|ƒ› d|› d�¡||  d|› �¡gƒ¡ qê| d¡ | d¡ qx| |  |
|¡¡ qxq|dk�r,| d¡ | |  t|d ƒ› d�¡¡ |d   ¡ D ]j\}}| ¡  t tt|jgƒd	¡\}}| t|  d|› dt|ƒ› d|› d�¡||  d|› �¡gƒ¡ �q´| d¡ q| |  ||¡¡ q| ddddg¡ t|dƒ}t tt|gƒd¡\}}|S )N)NNNr6   rG   s   dup /PrivaterI   Ú
OtherSubrsr9   s   /Subrs 5 arrayr:   údup ú ó   defs   putr.   s   dup /CharStringsú/s   end putrJ   s%   dup /FontName get exch definefont pops   marks   currentfile closefile
rL   éqÙ  )r?   ÚPrivate_dictionary_keysrR   rS   rN   ÚRD_valueÚND_valueÚPD_valueÚ
hintothersÚ	enumerateÚ	std_subrsr   Zencryptr   Úchar_IVrB   rM   rU   ÚcompileÚbytecodeÚeexec_IV)r    rW   rX   ZRD_keyZND_keyZNP_keyr2   rZ   ÚprrY   r\   r]   rD   Zsubr_binZencrypted_subrrC   Z
glyph_nameZchar_binZencrypted_charr^   Zencrypted_eexecr   r   r   rV   ¨   s�    





 ÿÿûÿÿ


ÿ ÿÿûÿÿüÿ	
zT1Font.encode_eexecc              
   C   s°  |dkr"|   d|› d|› d�¡gS |dk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 )NrE   rc   z /z def)ZisFixedPitchÚ	ForceBoldÚ	RndStemUpra   ÚtrueÚfalseZEncodingz StandardEncoding defs   /Encoding 256 arrays'   0 1 255 {1 index exch /.notdef put} foré   z.notdefr`   z putrb   z (z) defz [c                 s   s   | ]}t |ƒV  qd S r%   ©Ústr©Ú.0Úvr   r   r   Ú	<genexpr>  s     z%T1Font._make_lines.<locals>.<genexpr>z] defz {c                 s   s   | ]}t |ƒV  qd S r%   rv   rx   r   r   r   r{     s     z} def)
rN   r   rS   rA   Ú
isinstancerw   ÚboolÚlistÚjoinÚtuple)r    r2   rZ   rX   rD   Únamer   r   r   rU      s2    "

 

$**zT1Font._make_linesÚstrictc                 C   s   t || j|ƒS r%   )r   r   )r    ÚsÚerrorsr   r   r   rN     s    zT1Font._tobytes)r   N)F)r‚   )r   r   r   Ú__doc__r$   r*   r'   r/   r3   r1   r,   rV   rU   rN   r   r   r   r   r   3   s   

5X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k
r4   Y nX d}z<|dkrPt| |ƒ n |dkrdt| |ƒ nt| ||ƒ d}W 5 |r¦ts¦zt | ¡ W n tjk
r¤   Y nX X d S )Nr   r   r   r   )	ÚassertType1Úupperr†   ÚremoveÚerrorÚDEBUGÚ	writeLWFNÚwritePFBÚ
writeOther)r!   r   r"   r)   Úerrr   r   r   r&   2  s&    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kr€|rj|dkrj qØ| |jdd… ¡ q&|d	krŽ qØq&|d
kr¼t| dƒ�}| | 	¡ ¡ W 5 Q R X q&|dkrÆq&tdt
|ƒ ƒ‚q&W 5 | ¡  X t|ƒ}t|ƒ |S )z)reads an LWFN font file, returns raw datar   )ÚResourceReaderÚPOSTr   zcorrupt LWFN file©r   rH   rH   N)rG   é   r8   Úrbúbad chunk code: )ZfontTools.misc.macResr–   Úcloser=   r   r   r   rS   Úopenr   Úreprr   rŒ   )r!   r‰   r–   Úreaderr   ÚresÚcodeÚfr   r   r   r   P  s0    
r   c              	   C   s¶   g }t | dƒ�Ž}| d¡tdƒkr*tdƒ‚t| d¡ƒ}|dkrtt| d¡ƒ}| |¡}t|ƒ|ksht‚| |¡ n|dkr€q˜ntdt	|ƒ ƒ‚|rq˜qW 5 Q R X t
|ƒ}t|ƒ |S )	z'reads a PFB font file, returns raw datarš   r   é€   zcorrupt PFB filer˜   r8   rG   r›   )r�   r   r   r   r   ÚstringToLongrB   r>   rS   rž   r   rŒ   )r!   r‰   r   r¢   r¡   ZchunklenÚchunkr   r   r   r   o  s$    
r   c              	   C   sv   t | dƒ�}| ¡ }W 5 Q R X t|ƒ t|ƒ}g }|D ]6\}}|rbt|dd… ƒrb| t|ƒ¡ q6| |¡ q6t|ƒS )z'reads any (font) file, returns raw datarš   Nr8   )r�   r   rŒ   ÚfindEncryptedChunksÚisHexrS   Ú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 5 t  |¡ X d S )NZjustr   r   rH   iõ  r   ú r—   Ú r™   )
r   ZFSpCreateResFileZFSOpenResFileZCloseResFileZ
UseResFiler¦   ÚResourcer   ÚLWFNCHUNKSIZEZAddResource)	r!   r   ZresRefZresIDr©   rª   r¥   r¡   r    r   r   r   r‘   ™  s$    
"r‘   c              	   C   s†   t |ƒ}t| dƒ�j}|D ]H\}}|r*d}nd}| tdƒt|ƒ ¡ | tt|ƒƒ¡ | |¡ q| tdƒtdƒ ¡ W 5 Q R X d S )NÚwbrH   r   r£   rG   )r¦   r�   r&   r   ÚlongToStringrB   )r!   r   r©   r¢   rª   r¥   r¡   r   r   r   r’   ±  s    r’   c           	   	   C   s’   t |ƒ}t| dƒ�v}td }|D ]b\}}|r2d}nd}|dkrx|rx|r‚| t |d |… ¡¡ | d¡ ||d … }qBq | |¡ q W 5 Q R X d S )Nr¯   rH   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 k	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   rd   r   éÿÿÿÿrH   éþÿÿÿzinvalid end of eexec partr±   )r¦   r§   r¨   r   r@   rB   ÚEEXECINTERNALENDr   rS   ÚEEXECBEGINMARKERÚEEXECENDMARKERÚ
EEXECBEGINr   )r   r©   rª   r¥   Z	decryptedrC   r   r   r   ÚdecryptType1â  s&    ÿþr¾   c           	      C   sö   g }|   t¡}|dk rqä|ttƒ d }t | |¡}|d k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 partrH   r8   rd   )Úfindr½   rB   ÚEEXECENDÚsearchr   Ústartr§   r¨   r   r@   rº   rS   )	r   r©   ZeBeginZendMatchZeEndZ
cypherTextZ	plainTextrC   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)rB   r   Ú_fontType1RErÁ   r¿   )r   Úheadr   r   r   rŒ     s    
rŒ   c                 C   s6   d}t dƒD ]$}|t| d|d > @ |d ? ƒ7 }q|S )Nó    r8   éÿ   rK   )rA   r   )Úlongrƒ   rD   r   r   r   r°   -  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   rK   )rB   r   rA   r   )rƒ   ÚlrD   r   r   r   r¤   4  s    r¤   Z
FontMatrixZFSTypeZ	Copyrightr9   r_   ZUniqueIDZ
BlueValuesZ
OtherBluesZFamilyBluesZFamilyOtherBluesZ	BlueScaleZ	BlueShiftZBlueFuzzZStdHWZStdVWZ	StemSnapHZ	StemSnapVrq   ZLanguageGroupÚpasswordr7   Z
MinFeaturerr   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]defs   Ž‹!s   ‹Œs   ‹�ó   s	   ŽŒŽ
s   ccccs   )ÚstringZcurrentfileZexchZ
readstringÚpop)Údef)Úput)F)r   F)F)F)F)Er…   rO   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½   rm   ÚMrÀ   rº   r»   r¼   rµ   r§   r¾   r¦   r¨   rÄ   rŒ   r°   r¤   r~   rQ   rŽ   rT   rM   re   ri   rk   ro   rl   rf   rg   rh   r   r   r   r   Ú<module>   s®   
 s







þÿèö