
    ]MhQ                        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	 	 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d8dZd9dZdZ dZ!d8dZ"d8dZ#d Z$d Z%d Z&d8dZ'dZ( ej)        dej*                  Z+dZ,d Z-d!Z. ej)        d"          Z/d# Z0d$ Z1d% Z2d& Z3 ej)        d'          Z4d( Z5d) Z6d* Z7 e8e          Z9e9:                    d+            e8e          Z;e;<                    d,d-g           g d.Z=d/Z>g d0Z?d1Z@d2ZAd3ZBd4d5gZCd6d7gZDdS ):a  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)StandardEncodingjvrz1.0b3)Res   c                       e Zd ZdS )T1ErrorN)__name__
__module____qualname__     X/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/fontTools/t1Lib/__init__.pyr   r   0   s        Dr   r   c                   T    e Zd ZdZddZddZd Zd Zd	 Zd
 Z	d Z
d Zd Z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                    |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__;   s{    <::LDIqqV^^ DIIU]]DIIW__!$DIIT""" r   Fc                 N    t          ||                                 ||           d S N)writegetData)r&   r'   typedohexs       r   saveAszT1Font.saveAsH   s$    dDLLNND%00000r   c                 b    t          | d          s|                                 | _        | j        S )Nr    )hasattr
createDatar    r&   s    r   r.   zT1Font.getDataK   s-    tV$$ 	*))DIy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   r5   s    r   getGlyphSetzT1Font.getGlyphSetP   s     M""r   c                 d    t          | d          s|                                  | j        |         S )Nfont)r3   parser:   )r&   keys     r   __getitem__zT1Font.__getitem__[   s-    tV$$ 	JJLLLy~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)psCharStringsr7   PrivatelenIV   Subrs  )subrs)fontTools.miscr?   r@   suckfontr    r%   r:   getitemsr   decryptT1CharStringrangelen)
r&   r?   r@   charStringsrB   rF   	glyphName
charStringRis
             r   r;   zT1Font.parse`   sU   ((((((000000NN49dm<<	i.	)$((!44zzzz	)$W-%0%6%6%8%8 	 	!Iz!M*d;;MJ%2%?%?566"% &@ & &K	"" s5zz"" 	S 	SA!M%(D99MJ$11*UVV2DE1RRE!HHIIIr   c           	      (   | j         }d}i }g }|                    |                     d|d                    |                     dt          j         d          |                     d|d                    g           d}|dz  }|d	z  }t
          D ]}|t          ||v           z  }|                    |                     | d
                     |                                D ]\  }}|r|||<   |dk    r|d         }d}t          D ]}	|t          |	|v           z  }|                    |                     d| d
                     |                                D ].\  }	}
|                    | 
                    |	|
                     /|                    d           |t          v r|||<   d}|                    | 
                    ||                     |                    d           |                     |          }|                    t          d|g                     t          d          D ]*}|                    |                     d                     +|                    g d           t          |d          }|S )NFz%!FontType1-1.1: FontNamez
%t1Font: ()z%%BeginResource: font    r       dict dup beginFontInfoz
/FontInfo s   end defT   ends   currentfile eexec    @0000000000000000000000000000000000000000000000000000000000000000)s   cleartomarks   %%EndResources   %%EOF
)r:   extend_tobytes	fontToolsversionfont_dictionary_keysintappendrJ   FontInfo_dictionary_keys_make_linesr   encode_eexecr   rM   )r&   sfeexec_began
eexec_dictlinessizer<   valuefisubkeysubvalueeexec_portionr)   r    s                 r   r4   zT1Font.createDatas   s   Y
B"Z.BBCC?9+<???@@Gr*~GGHH	
 	
 	
 	' 	# 	#CCr	NN"DDT]]d#;#;#;<<===((** 	; 	;JC "'
3j  
^6 . .FC"---DDT]]+M+M+M+MNNOOO(*

 E E$FHLL!1!1&(!C!CDDDDZ((((///"'
3"T--c599::::V))*55Y 5}EFFGGGq 	2 	2ALLx001111AAABBB%%r   c                    g }d\  }}}d}t           }t          |                                d           }|D ]\  }	}
|	dk    rU|d         }d}t          D ]}|t	          ||v           z  }|                    d           |                    |                     | d                     |                                D ]\  }}|s|t          k    r|}n|s|t          v r|}n|s|t          v r|}|d	k    r|}|d
k    r.|                    |                     t                               m|dk    r8|D ]}|                                 d |D             }|                    dt          |           d                    d                     t          |          D ]\  }}t          j        t#          t$          d |         |g          d          \  }}|                    t#          |                     d| dt          |           d| d          ||                     d|           g                     |                    d           |                    d           |                    |                     ||                     אb|	dk    r<|                    d           |                    |                     t          |d                    d                     |d                                         D ]\  }}|                                 t          j        t#          t$          d |         |j        g          d          \  }}|                    t#          |                     d| dt          |           d| d          ||                     d|           g                     |                    d           |                    |                     |	|
                     |                    g d           t#          |d          }t          j        t#          t,          |g          d          \  }}|S )N)NNNrC   c                     | d         dk    S )Nr   rA   r   )items    r   <lambda>z%T1Font.encode_eexec.<locals>.<lambda>   s    $q'YBV r   )r<   rA   rW   s   dup /PrivaterY   rB   
OtherSubrsrD   c                     g | ]	}|j         
S r   )bytecode).0subr_bins     r   
<listcomp>z'T1Font.encode_eexec.<locals>.<listcomp>   s     L L Lx!2 L L Lr   z/Subrs z arrayr   rE   dup     defs   putr7   s   dup /CharStrings/s   end put)r[   s%   dup /FontName get exch definefont pops   marks   currentfile closefile
r^   q  )	std_subrssortedrJ   Private_dictionary_keysrd   re   r`   RD_value	ND_values	PD_values
hintotherscompilerN   encode	enumerater   encryptr   char_IVr_   rg   ry   eexec_IV)r&   rk   rl   RD_keyND_keyNP_keyrB   rF   sortedItemsr<   rn   prrm   rp   rq   r{   rS   encrypted_subrrR   
glyph_namechar_binencrypted_charrr   encrypted_eexecs                           r   rh   zT1Font.encode_eexec   s    "2 Z--//5V5VWWW% G	; G	;JCi	*5 . .FC"---DD_---T]]d+C+C+CDDEEE(*

 &I &I$FH! (h(&:&:!'# (I(=(=!'# (I(=(=!'(( (--T]]:%>%>????7**(0 / /H$,,.... L L8 L L L%As5zz%A%A%A%H%H%Q%QRRR+4U+;+;  KAx05 )76E6?H*E F F1 1-NA "LL )(,,V1,V,Vs>7J7J,V,VV,V,V,V)* )* )7(,l&ll(C(C%&!" !"
 
 
 
 V,,,V,,,,T%5%5fh%G%GHHHHM&IN %%0111MMSM)B%C%C"T"T"TUU   -7},E,K,K,M,M  (J$$&&&(-!76E6?H4E"FGG) )%NA LL! $$T
$T$TS5H5H$T$T6$T$T$T!" !" !/ $l&ll ; ; 
 
 
 
 Z((((T--c599::::  	
 	
 	
 "%.."]9h5N+O+OQVWWr   c           
      R   |dk    r|                      d| d| d          gS |dv r!|                      d| d|rdnd d          gS |d	k    r|t          k    r|                      d| d
          gS g }|                    d           |                    d           t          d          D ]?}||         }|dk    r/|                    |                      d| d| d                     @|                    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          gS t	          |t                    r:|                      d| dd                    d |D                        d          gS |                      d| d| d          gS )NrU   r   z /z def)isFixedPitch	ForceBold	RndStemUpr~   truefalseEncodingz StandardEncoding defs   /Encoding 256 arrays'   0 1 255 {1 index exch /.notdef put} for   z.notdefr}   z putr   z (z) defz [c              3   4   K   | ]}t          |          V  d S r,   strrz   vs     r   	<genexpr>z%T1Font._make_lines.<locals>.<genexpr>"  s(      5L5Lc!ff5L5L5L5L5L5Lr   z] defz {c              3   4   K   | ]}t          |          V  d S r,   r   r   s     r   r   z%T1Font._make_lines.<locals>.<genexpr>$  s(      6M6M!s1vv6M6M6M6M6M6Mr   z} def)
r`   r   re   rM   
isinstancer   boollistjointuple)r&   r<   rn   rl   rS   names         r   rg   zT1Font._make_lines
  s   *MM"8c"8"8U"8"8"899::<<<MM"Nc"N"Ne,HFF"N"N"NOOPPJ(((&D#&D&D&DEEFF 3444GHHHs L LA 8Dy((T]]3I!3I3It3I3I3I%J%JKKKV$$$eS!! 		:MM"9c"9"9U"9"9"9::;;t$$ 	:MM"Nc"N"Ne,HFF"N"N"NOOPPt$$ 	:MM"Sc"S"SSXX5L5Le5L5L5L-L-L"S"S"STTUUu%% 	:MM"Uc"U"Uchh6M6Mu6M6M6M.M.M"U"U"UVVWWMM"7c"7"7E"7"7"78899r   strictc                 .    t          || j        |          S r,   )r   r%   )r&   serrorss      r   r`   zT1Font._tobytes(  s    q$-000r   )r   NF)r   )r   r   r   __doc__r*   r1   r.   r8   r=   r;   r4   rh   rg   r`   r   r   r   r   r   4   s         ! ! ! !1 1 1 1  
	# 	# 	#  
  &3 3 3j` ` `D: : :<1 1 1 1 1 1r   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   /  s    Wd##FAs
))++C'--LGS
f}}j))611
f}}tZ((%//''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upperr   removeerror	writeLWFNwritePFB
writeOtherDEBUG)r'   r    r(   r0   errs        r   r-   r-   <  s[   ::<<D
	$8   
C6>>dD!!!!U]]T4    tT5))) 	u 		$8   	 	 	 	3 	u 		$8   	 	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   rX   rX   N)rW      rC   rbbad chunk code: )fontTools.misc.macResr   rI   r   r    r   re   openr   reprcloser   r   )r'   r   r   readerr    rescodefs           r   r!   r!   Z  s   444444^D!!F::fb)) 	? 	?C38A;''Dsx{##q((1222v~~ $!))ECHQRRL))))$%% *KK)))* * * * * * * * * * * * * * *04::=>>>T??DKs0   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 datar   Tr      zcorrupt PFB filer   rC   rW   r   N)r   r   r   r   r   stringToLongrN   re   r   r   r   )r'   r   r    r   r   chunklenchunks          r   r"   r"   y  sb   D	dD		 Q	vvayyGCLL((0111166!99%%Dv~~'q		22x((5zzX----E""""04::=>>> 	                T??DKs   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 datar   NrC   )r   r   r   findEncryptedChunksisHexre   deHexStringr   )r'   r   r    chunksisEncryptedr   s         r   r#   r#     s   	dD		 Qvvxx               &&FD$  U 	5rr++ 	KKE**++++KKT??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   rX   i  r    r    r   )
r   FSpCreateResFileFSOpenResFile
UseResFiler   Resourcer   LWFNCHUNKSIZEAddResourceCloseResFile)	r'   r    resRefresIDr   r   r   r   r   s	            r   r   r     sQ   vvq111tQ''F!v$T**"( 		" 		"K  "l74==4#7%@S-RSBS@S:T#TUUr222ma/112		  "
 l71::,--r***         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wbrX   r   r   rW   )r   r   r-   r   longToStringrN   )r'   r    r   r   r   r   r   s          r   r   r     s    &&F	dD		 	+Q"( 	 	K GGGCLL74==0111GGLU,,---GGENNNN	wqzz)***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+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   rX   r      )r   r   HEXLINELENGTHr-   r   	hexString)	r'   r    r0   r   r   
hexlinelenr   r   r   s	            r   r   r     s,    &&F	dD		 Q"a'
"( 	 	K qyyUy /GGEOE+:+,>??@@@GGENNN!*++.E  /
 	                 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++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 )	NrC   r   r   rX   zinvalid end of eexec partr   )r   r   r   r   rK   rN   EEXECINTERNALENDr   re   EEXECBEGINMARKEREEXECENDMARKER
EEXECBEGINr   )r    r   r   r   	decryptedrR   s         r   decryptType1r    s    &&FD$ # #U 	#U2A2Y +#E** =66LIq!!""I3/00014r9:>NNNs#3444q82=>BRRR9:::!">S)9%:%:$:Q$>">?%GIKK(94~EFFFFc*oo%)B./:==E"8S__$4q$8"89::::E""""T??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 partrX   rC   r   )findr  rN   EEXECENDsearchr   startr   r   r   rK   r   re   )	r    r   eBeginendMatcheEnd
cypherText	plainTextrR   	eEndLocals	            r   r   r     so   F:&&A::#j//)A-??4008999~~&4!8+,
BQB   	1$Z00J}Z77	1NN#344	q==8999q$ww-()))q*%Ly37G3H3H'H1'L%LMNOOODEE{%& MM1d)Mr   c                 h    t          j        t          |                                                     S r,   )r   r   r   split)	hexstrings    r   r   r     s%    Yy'8'899:::r   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)rN   r   _fontType1REr  r  )r    heads     r   r   r   &  s    3 / /#d))$$E % -...t$$ +)***yy%&&**4555Kr   c                 p    d}t          d          D ]#}|t          | d|dz  z  z  |dz  z	            z  }$|S )Nr   rC      r\   )rM   r   )longr   rS   s      r   r   r   7  sK    A1XX : :	Wddq1uo.1q58999Hr   c                     t          |           dk    rt          d          d}t          d          D ] }|t          | |                   |dz  z  z  }!|S )NrC   zstring must be 4 bytes longr   r\   )rN   r$   rM   r   )r   lrS   s      r   r   r   >  s^    
1vv{{6777	A1XX & &	WQqT]]q1u%%Hr   
FontMatrixFSType	Copyright)rD   rw   UniqueID
BlueValues
OtherBluesFamilyBluesFamilyOtherBlues	BlueScale	BlueShiftBlueFuzzStdHWStdVW	StemSnapH	StemSnapVr   LanguageGrouppasswordrB   
MinFeaturer   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   )stringcurrentfileexch
readstringpop)def)noaccessr3  )put)r4  r5  r   )r   F)Er   ra   rG   r   fontTools.misc.macCreatorTyper   fontTools.misc.textToolsr   r   r   r   fontTools.misc.psOperatorsr	   r
   r   $fontTools.encodings.StandardEncodingr   r   re
__author____version__r   Carbonr   ImportErrorhaveMacSupport	Exceptionr   objectr   r   r-   r   r   r!   r"   r#   r   r   r   r  r   Mr  r   r   r  r   r   r  r   r   r  r   r   r   r   rc   r   rf   r_   r   r   r   r   r   r   r   r   r   r   r   <module>rC     s   $                 > > > > > > I I I I I I I I I I I I         
 B A A A A A 				 				
	   





 NN    NNN	 	 	 	 	i 	 	 	u1 u1 u1 u1 u1V u1 u1 u1v
( 
( 
( 
(   4    >   0  $! ! !0+ + +   ( "
 2:+24888+ ' #2:&'', , ,  0  2; ; ; rz122  "     t233    L ) ) )4 566         8P
  	 
A*+	*+			s/   A A 	AA AA A"!A"