a
    w=icA?                     @   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dEddZdFddZdZ dZ!dGddZ"dHddZ#dd Z$dd Z%d d! Z&dId"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@dAZAdBZBdCZCdDZDdS )Ja  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   i/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/fontTools/t1Lib/__init__.pyr   +       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 )T1FontzkType 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__6   s    zT1Font.__init__Fc                 C   s   t ||  || d S N)writegetData)r!   r"   typedohexr   r   r   saveAsC   s    zT1Font.saveAsc                 C   s   t | ds|  | _| jS )Nr   )hasattr
createDatar   r!   r   r   r   r(   F   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   getGlyphSetK   s    	zT1Font.getGlyphSetc                 C   s   t | ds|   | j| S )Nfont)r,   parser1   )r!   keyr   r   r   __getitem__V   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.miscr5   r6   Zsuckfontr   r    r1   getitemsr   decryptZT1CharStringrangelen)
r!   r5   r6   ZcharStringsr8   r<   Z	glyphNameZ
charStringRir   r   r   r2   [   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
)r1   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sizer3   valuefisubkeysubvalueeexec_portionr$   r   r   r   r   r-   l   sN    




zT1Font.createDatac                 C   st  g }d\}}}|  D ]&\}}|dkrv|d }d}	tD ]}
|	t|
|v 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|g d t|d}ttt|gd\}}|S )N)NNNr7   rG   s   dup /PrivaterI   
OtherSubrsr:   s   /Subrs 5 arrayr;   dup     defs   putr/   s   dup /CharStrings/s   end put)rJ   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_keyr3   rZ   prrY   r\   r]   rD   Zsubr_binZencrypted_subrrC   Z
glyph_nameZchar_binZencrypted_charr^   Zencrypted_eexecr   r   r   rV      sP    




@


B
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 )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>   r   z%T1Font._make_lines.<locals>.<genexpr>z] defz {c                 s   s   | ]}t |V  qd S r&   rv   rx   r   r   r   r{      r   z} def)
rN   r   rS   rA   
isinstancerw   boollistjointuple)r!   r3   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(   r0   r4   r2   r-   rV   rU   rN   r   r   r   r   r   .   s   

3: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 |rtszt|  W q tjy   Y q0 n.|rtsz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} || }zg }|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 qq&|d
krt| d}||  W d   q1 s0    Y  q&|dkrq&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   rH   rH   N)rG      r9   rbbad chunk code: )ZfontTools.misc.macResr   r>   r   r   r   rS   openr   reprcloser   r   )r"   r   r   readerr   rescodefr   r   r   r   '  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rqntdt| |rqqW d	   n1 s0    Y  t	|}t
| |S )
z'reads a PFB font file, returns raw datar   r      zcorrupt PFB filer   r9   rG   r   N)r   r   r   r   r   stringToLongrB   rS   r   r   r   )r"   r   r   r   r   Zchunklenchunkr   r   r   r   D  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   Nr9   )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}zt | 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   rH   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   k  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 s0    Y  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}td }|D ]b\}}|r2d}nd}|dkrx|rx|r|t|d |  |d ||d  }qBq || q W d    n1 s0    Y  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 uS r&   )_ishexREmatch)textr   r   r   r     s    r   c                 C   s  t | }g } |D ]\}}|rt|d d r4t|}t|d\}}|dd  }|tt d d tkr|tt d d tkrtd|d tt d  d }| t	| t
  q|tt d d tkr| |d tt d   q| | qt| S )	Nr9   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 u rDtd| }| ||d  }t|d d rtt|}t	
|d\}}| t}|dk rt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   r9   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 )Nr   r9      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 )Nr9   zstring must be 4 bytes longr   rK   )rB   r   rA   r   )r   lrD   r   r   r   r     s    r   Z
FontMatrixZFSTypeZ	Copyright)r:   r_   ZUniqueIDZ
BlueValuesZ
OtherBluesZFamilyBluesZFamilyOtherBluesZ	BlueScaleZ	BlueShiftZBlueFuzzZStdHWZStdVWZ	StemSnapHZ	StemSnapVrq   ZLanguageGrouppasswordr8   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]def)s   !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>   sz   
 P







