a
    èÝEbA?  ã                   @   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   úX/home/ja/django-apps/lartica_env/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ÚfalseÚ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&   rw   ry   r   r   r   r|   ó   r   z} def)
rN   r   rS   rA   Ú
isinstancerx   Ú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 |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   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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™   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¡}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   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 sŒ0    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 s˜0    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 ]ì\}}|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 )	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 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   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







þ