
    <`0%                        d Z ddlmZmZmZ ddlmZ ddlmZ ddl	Z	ddl
Z
dZdZdZ	 	 ddlmZ n# e$ r ddlZY nw xY wd	Zn# e$ r dZY nw xY w G d
 de          Z G d de          Zd)dZd*dZdZdZd)dZd)dZd Zd Zd Zd)dZdZ  e
j!        de
j"                  Z#dZ$dZ%dZ& e
j!        d           Z'd! Z(d" Z)d# Z*d$ Z+ e
j!        d%          Z,d& Z-d' Z.d( Z/dS )+a  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'.
    )bytechrbyteord	bytesjoin)eexec)getMacCreatorAndTypeNjvrz1.0b2)Res   c                       e Zd ZdS )T1ErrorN)__name__
__module____qualname__     8lib/python3.11/site-packages/fontTools/t1Lib/__init__.pyr   r   (   s          r   r   c                   :    e Zd ZdZddZddZd Zd Zd	 Zd
 Z	dS )T1FontzkType 1 font class.

	Uses a minimal interpeter that supports just about enough PS to parse
	Type 1 fonts.
	asciiNc                    |t          |          \  | _        }n`|dk    rt          |          | _        nE|dk    rt          |          | _        n*|dk    rt	          |          | _        nt          |          || _        d S )NLWFNPFBOTHER)readdatareadLWFNreadPFB	readOther
ValueErrorencoding)selfpathr    kind_s        r   __init__zT1Font.__init__3   s{    	\t**<49aav~~~~499u}}t}}499w499	D		$---r   Fc                 N    t          ||                                 ||           d S N)writegetData)r!   r"   typedohexs       r   saveAszT1Font.saveAs@   s$    dllnndE*****r   c                     | j         S r'   )r   r!   s    r   r)   zT1Font.getDataC   s     
r   c                     | 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.   s    r   getGlyphSetzT1Font.getGlyphSetH   s     
m	r   c                 d    t          | d          s|                                  | j        |         S )Nfont)hasattrparser3   )r!   keys     r   __getitem__zT1Font.__getitem__S   s-    	v		 ::<<<	3r   c                 d   ddl m} ddl m} |                    | j        | j                  | _        | j        d         }| j        d                             dd          }|dk    sJ | j        d         d         }|                                D ]?\  }}t          j
        |d	          \  }}|                    ||d          |
          ||<   @t          t          |                    D ]B}	t          j
        ||	         d	          \  }}|                    ||d          |
          ||	<   C| `d S )Nr   )psLib)psCharStringsr0   PrivatelenIV   Subrsi  )subrs)fontTools.miscr9   r:   suckfontr   r    r3   getitemsr   decryptT1CharStringrangelen)
r!   r9   r:   charStringsr<   r?   	glyphName
charStringRis
             r   r5   zT1Font.parseX   sR   """"""******nnTY66$)	-(+
)I

"
"7A
.
.%	!
)I
w
'%*0022  i=T22=:q)66z%&&7I 7  ;yU J Ja=q400=:q((EFF);5(II588
iiir   )r   NF)
r   r   r   __doc__r%   r,   r)   r1   r7   r5   r   r   r   r   r   +   s            + + + +  
	 	 	  
    r   r   Fc                    t           j                            |           \  }}|                                }t	          |           \  }}|dk    rt          | |          dfS |dk    rt          | |          dfS t          |           dfS )z,reads any Type 1 font file, returns raw datar   z.pfbr   r   )osr"   splitextlowerr   r   r   r   )r"   
onlyHeaderr$   extcreatortyps         r   r   r   l   s    
'

4
 
 C
yy{{$T**#6MM	$
	#	#V	++6MM	z	"	"E	))	4'	!!r   r   c                    t          |           |                                }	 t          j        |            n# t          j        $ r Y nw xY wd}	 |dk    rt          | |           n(|dk    rt          | |           nt          | ||           d}|r4t          s/	 t          j        |            d S # t          j        $ r Y d S w xY wd S d S # |r2t          s,	 t          j        |            w # t          j        $ r Y w w xY ww w xY w)Nr
   r   r   r   )	assertType1upperrP   removeerror	writeLWFNwritePFB
writeOtherDEBUG)r"   r   r#   r+   errs        r   r(   r(   x   s[   T

)D////
   $		V^^T4u}}D$dD%   	# 	 		IdOOOOO
( 	 	 	DD		 	 	 	S 	 		IdOOOO
( 	 	 	D		 	sR   : AAAC B3 3CC
DC-,D-C?<D>C??Di  P   c                    ddl m}  ||           }	 g }|                    dg           D ]}t          |j        d                   }t          |j        d                   dk    rt          d          |dv r-|r|dk    r n|                    |j        dd                    z|d	v r n||d
k    rPt          | d          5 }|                    |                                           ddd           n# 1 swxY w Y   |dk    rt          dt          |          z             |
                                 n# |
                                 w xY wt          |          }t          |           |S )z)reads an LWFN font file, returns raw datar   )ResourceReaderPOSTr
   zcorrupt LWFN filer
      rf   N)      r=   rbbad chunk code: )fontTools.misc.macResrc   rB   r   r   r   appendopenr   reprcloser   rX   )r"   rS   rc   readerr   rescodefs           r   r   r      s   111111
.

	$ZZ## 3 3c
#(1+

4chqka
%
&
&&
fnn daii
UKK	E			dD		 Q	[[              		
$tDzz1
2
22,,....&,,....$Ts0   B.D< (C5)D< 5C9	9D< <C9	=*D< <Ec                 f   g }t          | d          5 }	 |                    d          t          d          k    rt          d          t	          |                    d                    }|dv rbt          |                    d                    }|                    |          }t          |          |k    sJ |                    |           n&|dk    rn#t          d	t          |          z             |rnd
d
d
           n# 1 swxY w Y   t          |          }t          |           |S )z'reads a PFB font file, returns raw datari   Tr
      zcorrupt PFB filere   r=   rg   rj   N)rm   r   r   r   r   stringToLongrG   rl   rn   r   rX   )r"   rS   r   rs   rr   chunklenchunks          r   r   r      sb   

4 
!
ffQii73<<
$
%
%%
!&&))

4
fnnAFF1II&&HFF8Eu::!!!!KK			
$tDzz1
2
22 
	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
  	$Ts   C)DDDc                    t          | d          5 }|                                }ddd           n# 1 swxY w Y   t          |           t          |          }g }|D ]V\  }}|r:t	          |dd                   r#|                    t          |                     A|                    |           Wt          |          S )z'reads any (font) file, returns raw datari   Nr=   )rm   r   rX   findEncryptedChunksisHexrl   deHexStringr   )r"   rs   r   chunksisEncryptedrx   s         r   r   r      s   
4 !	
$              T
d
#
#
!  [% U5!9%% ;;{5!!"""";;u$s   266c                 j   t          j        | ddd           t          j        | d          }	 t          j        |           d}t	          |          }|D ]u\  }}|rd}nd}|rgt          j        t          |          dz   |d t          dz
           z             }|                    d|d	           |t          dz
  d          }|dz   }|gvt          j        t          d
          dz             }|                    d|d	           t          j	        |           d S # t          j	        |           w xY w)Njustr   r   rf   i  r
    rd    rh   )
r	   FSpCreateResFileFSOpenResFile
UseResFilerz   Resourcer   LWFNCHUNKSIZEAddResourceCloseResFile)	r"   r   resRefresIDr}   r~   rx   rr   rq   s	            r   r\   r\      sP   dFFA...

D!
$
$.
%t$$&" 	 	k5 DDD	 
,wt}}t+e4F]Q5F4F.GG
H
HCOOFE2&&&-!#$$%EAIE	 
 
 	WQZZ$&''#//&%$$$6#6s   CD D2c           	         t          |          }t          | d          5 }|D ]\  }}|rd}nd}|                    t          d          t          |          z              |                    t	          t          |                               |                    |           |                    t          d          t          d          z              d d d            d S # 1 swxY w Y   d S )Nwbrf   r
   ru   rg   )rz   rm   r(   r   longToStringrG   )r"   r   r}   rs   r~   rx   rr   s          r   r]   r]      s   
d
#
#
4 	%!"  k5 DDD7773<<'$--'(((77<E

##$$$775>>>>'''#,,
#$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   B8C%%C),C)c           	         t          |          }t          | d          5 }t          dz  }|D ]|\  }}|rd}nd}|dk    rU|rS|rP|                    t	          j        |d |                              |                    d           ||d          }|Pg|                    |           }	 d d d            d S # 1 swxY w Y   d S )Nr   rf   r
      )rz   rm   HEXLINELENGTHr(   r   	hexString)	r"   r   r+   r}   rs   
hexlinelenr~   rx   rr   s	            r   r^   r^      s,   
d
#
#
4 !!*"  k5 DDD
aiiEi
  WWU_U;J;/00111WWU^^^:;;U   
 GGENNNN                 s   B
B88B<?B<   currentfile eexecs   (0[ 	
]*){512})flagss   currentfile closefiles   %-- eexec starts   %-- eexec ends   [0-9A-Fa-f]*$c                 :    t                               |           d uS r'   )_ishexREmatch)texts    r   r{   r{     s    tD((r   c                 $   t          |           }g } |D ]m\  }}|rt          |d d                   rt          |          }t          j        |d          \  }}|dd          }|t          t                     dz
  d         t          k    r8|t          t                     dz
  d         t          k    rt          d          |d t          t                     dz
           dz   }|                     t          |z   t          z              |t          t                     dz
  d         t          k    r5|                     |d t          t                     dz
                      X|                     |           ot          |           S )	Nr=   q  r
   rf   zinvalid end of eexec partr   )rz   r{   r|   r   rD   rG   EEXECINTERNALENDr   rl   EEXECBEGINMARKEREEXECENDMARKER
EEXECBEGINr   )r   r}   r~   rx   	decryptedrK   s         r   decryptType1r      s   
d
#
#
!  [% E"1"I E-u--<9a}9%&&&q(+,0@@@	C()))!+B.	/3C	C	C
-
.
..23/000223e;9;;)+n<====S__Qr!"j00KK)J'))*++++KK$r   c           	         g }	 |                      t                    }|dk     rn6|t          t                    z   dz   }t                              | |          }|t          d          |                                }| ||dz            }t          |d d                   rt          |          }t          j
        |d          \  }}|                     t                    }|dk     rt          d          |                    d| d |         f           |                    d|d |t          t                    z   dz            f           | |d          } X|                    d| f           |S )NTr   r
   zcan't find end of eexec partrf   r=   r   )findr   rG   EEXECENDsearchr   startr{   r|   r   rD   r   rl   )	r   r}   eBeginendMatcheEnd
cypherText	plainTextrK   	eEndLocals	            r   rz   rz   5  sn   
99Z  &aZZC
OO#a'&__T6**(	/	0	00			$F4!8O$*
:bqb> (J'':z511,)Qnn-..)]]	/	0	00--D&M"###--JE	C0@,A,A AA EEFGHHH	dee$%& 4yr   c                 h    t          j        t          |                                                     S r'   )r   r|   r   split)	hexstrings    r   r|   r|   M  s%    )IOO$5$566777r   s   /FontType\s+1\s+defc                 
   dD ]}| d t          |                   |k    r n t          d          t                              |           st          d          |                     d          dk     rt          d          | S )N)s   %!PS-AdobeFonts   %!FontType1znot a PostScript fontznot a Type 1 fontr   r   znot an encrypted Type 1 font)rG   r   _fontType1REr   r   )r   heads     r   rX   rX   U  s    0 ) )T	*3t99*5  	'(((D!! %#$$$II"##a''.///r   c                 p    d}t          d          D ]#}|t          | d|dz  z  z  |dz  z	            z  }$|S )Nr   r=         )rF   r   )longsrL   s      r   r   r   e  sK    
(( 4 4QwQ(QU2333!!	r   c                     t          |           dk    rt          d          d}t          d          D ] }|t          | |                   |dz  z  z  }!|S )Nr=   zstring must be 4 bytes longr   r   )rG   r   rF   r   )r   lrL   s      r   rv   rv   k  s^    FFaKK0111
((    Qwqt}}Q!!	r   rM   )r   F)0rN   fontTools.misc.py23r   r   r   r@   r   fontTools.misc.macCreatorTyper   rP   re
__author____version__r_   Carbonr	   ImportErrorhaveMacSupport	Exceptionr   objectr   r   r(   r   r   r   r   r   r\   r]   r^   r   compileMr   r   r   r   r   r{   r   rz   r|   r   rX   r   rv   r   r   r   <module>r      s   " < ; ; ; ; ; ; ; ; ;             > > > > > > 				 				
	   *****
          i   < < < < <V < < <B
" 
" 
" 
"	 	 	 	4    :   .     .% % %   ( "
 2:+24888+ ' #2:&'') ) )  *  08 8 8 rz122   
 
 

 
 
 
 
s'   0 A 	<A <A AA