
    gQ                        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 dZ G d de      Z G d de      Zd6dZd7dZdZ dZ!d6dZ"d6dZ#d Z$d Z%d Z&d6dZ'dZ( ejR                  dejT                        Z+dZ,dZ-dZ. ejR                  d       Z/d! Z0d" Z1d# Z2d$ Z3 ejR                  d%      Z4d& Z5d' Z6d( Z7 e8e      Z9e9ju                  d)        e8e      Z;e;jy                  d*d+g       g d,Z=d-Z>g d.Z?d/Z@d0ZAd1ZBd2d3gZCd4d5gZDy# e$ r ddlZY w xY w# e$ r dZY w xY w)8a  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y)T1ErrorN)__name__
__module____qualname__     p/home/viktor/gitlab-persoonlijk/factuur-applicatie/venv/lib/python3.12/site-packages/fontTools/t1Lib/__init__.pyr   r   0   s    r   r   c                   R    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y)T1FontztType 1 font class.

    Uses a minimal interpeter that supports just about enough PS to parse
    Type 1 fonts.
    Nc                     |t        |      \  | _        }|| _        y |dk(  rt        |      | _        || _        y |dk(  rt        |      | _        || _        y |dk(  rt	        |      | _        || _        y t        |      )NLWFNPFBOTHER)readdatareadLWFNreadPFB	readOther
ValueErrorencoding)selfpathr$   kind_s        r   __init__zT1Font.__init__;   s    <:LDIq ! V^ DI ! U]DI
 !	 W_!$DI ! T""r   c                 <    t        || j                         ||       y N)writegetData)r%   r&   typedohexs       r   saveAszT1Font.saveAsH   s    dDLLND%0r   c                 \    t        | d      s| j                         | _        | j                  S )Nr   )hasattr
createDatar   r%   s    r   r-   zT1Font.getDataK   s$    tV$)DIyy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   r4   s    r   getGlyphSetzT1Font.getGlyphSetP   s     M""r   c                 X    t        | d      s| j                          | j                  |   S )Nfont)r2   parser9   )r%   keys     r   __getitem__zT1Font.__getitem__[   s#    tV$JJLyy~r   c                 4   ddl m} ddl m} |j                  | j                  | j
                        | _        | j                  d   }| j                  d   j                  dd      }|dk\  sJ | j                  d   d   }|j                         D ]7  \  }}t        j                  |d	      \  }}|j                  ||d  |
      ||<   9 t        t        |            D ]7  }	t        j                  ||	   d	      \  }}|j                  ||d  |
      ||	<   9 | `y )Nr   )psLib)psCharStringsr6   PrivatelenIV   Subrs  )subrs)fontTools.miscr>   r?   suckfontr   r$   r9   getitemsr   decryptT1CharStringrangelen)
r%   r>   r?   charStringsrA   rE   	glyphName
charStringRis
             r   r:   zT1Font.parse`   s   (0NN499dmm<	ii.		)$((!4zz		)$W-%0%6%6%8 	!Iz!MM*d;MJ%2%?%?56"% &@ &K	"	
 s5z" 	SA!MM%(D9MJ$11*UV2DE1RE!H	S Ir   c           	      d   | j                   }d}i }g }|j                  | j                  d|d          | j                  dt        j                   d      | j                  d|d          g       d}|dz  }|d	z  }t
        D ]  }|t        ||v       z  } |j                  | j                  | d
             |j                         D ]  \  }}|r|||<   |dk(  r|d   }d}t        D ]  }	|t        |	|v       z  } |j                  | j                  d| d
             |j                         D ]&  \  }	}
|j                  | j                  |	|
             ( |j                  d       |t        v r|||<   d}|j                  | j                  ||              |j                  d       | j                  |      }|j                  t        d|g             t        d      D ]"  }|j                  | j                  d             $ |j                  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
)r9   extend_tobytes	fontToolsversionfont_dictionary_keysintappendrI   FontInfo_dictionary_keys_make_linesr   encode_eexecr   rL   )r%   sfeexec_began
eexec_dictlinessizer;   valuefisubkeysubvalueeexec_portionr(   r   s                 r   r3   zT1Font.createDatas   s9   YY
 1"Z.1ABC
9+<+<*=Q?@ 6r*~6FGH	
 	' 	#CCr	N"D	#T]]dV?#;<=((* 	;JC"'
3j 
^6 .FC"--D.T]]Zv_+MNO(*
 E$FHLL!1!1&(!CDEZ(//"'
3"T--c59:)	;* 	V))*5Y 5}EFGq 	2ALLx01	2AB%r   c                 r   g }d\  }}}d}t         }t        |j                         d       }|D ]8  \  }	}
|	dk(  r|d   }d}t        D ]  }|t	        ||v       z  } |j                  d       |j                  | j                  | d             |j                         D ]  \  }}|s|t        k(  r|}n|s|t        v r|}n|s
|t        v r|}|d	k(  r|}|d
k(  r%|j                  | j                  t                     _|dk(  r|D ]  }|j                           |D cg c]  }|j                   }}|j                  dt        |       dj                  d             t        |      D ]  \  }}t!        j"                  t%        t&        d | |g      d      \  }}|j                  t%        | j                  d| dt        |       d| d      || j                  d|       g              |j                  d       |j                  d       u|j)                  | j+                  ||              |	dk(  r|j                  d       |j                  | j                  t        |d          d             |d   j                         D ]  \  }}|j                          t!        j"                  t%        t&        d | |j                  g      d      \  }}|j                  t%        | j                  d| dt        |       d| d      || j                  d|       g              |j                  d       |j)                  | j+                  |	|
             ; |j)                  g d       t%        |d      }t!        j"                  t%        t,        |g      d      \  }}|S c c}w )N)NNNrB   c                     | d   dk7  S )Nr   r@   r   )items    r   <lambda>z%T1Font.encode_eexec.<locals>.<lambda>   s    $q'YBV r   )r;   r@   rV   s   dup /PrivaterX   rA   
OtherSubrsrC   z/Subrs z arrayasciirD   dup     defs   putr6   s   dup /CharStrings/s   end put)rZ   s%   dup /FontName get exch definefont pops   marks   currentfile closefile
r]   q  )	std_subrssortedrI   Private_dictionary_keysrc   rd   r_   RD_value	ND_values	PD_values
hintotherscompilebytecoderM   encode	enumerater   encryptr   char_IVr^   rf   eexec_IV)r%   rj   rk   RD_keyND_keyNP_keyrA   rE   sortedItemsr;   rm   prrl   ro   rp   subr_binrR   encrypted_subrrQ   
glyph_namechar_binencrypted_charrq   encrypted_eexecs                           r   rg   zT1Font.encode_eexec   s    "2 Z--/5VW% G	;JCi	*5 .FC"--D._-T]]dV?+CDE(*
 &I$FH!h(&:!'#I(=!'#I(=!'( (-T]]:%>?7*(0 /H$,,./CK Lx!2!2 L Lws5zl&%A%H%H%QR+4U+; KAx05 )76E?H*E F1-NA "LL )(,.21#Qs>7J6K1VHTU,V)* )7(,&l(C%&!"
	 V,V,T%5%5fh%GHM&IN %01MMSM)B%C$DO"TU -7},E,K,K,M (J$$&(-!76E?H4E4E"FG)%NA LL! $&'
|1S5H4I6(RS$T!" !/ $&l ;
  Z(T--c59:OG	;R 		
 "%."]]9h5N+OQVWw !Ms   "N4c           
         |dk(  r| j                  d| d| d      gS |dv r| j                  d| d|rdnd d      gS |d	k(  r|t        k(  r| j                  d| d
      gS g }|j                  d       |j                  d       t        d      D ]4  }||   }|dk7  s|j                  | j                  d| d| d             6 |j                  d       |S t	        |t
              r| j                  d| d| d      gS t	        |t              r| j                  d| d|rdnd d      gS t	        |t              r/| j                  d| ddj                  d |D               d      gS t	        |t              r/| j                  d| ddj                  d |D               d      gS | j                  d| d| d      gS )NrT   r{   z /z def)isFixedPitch	ForceBold	RndStemUpry   truefalseEncodingz StandardEncoding defs   /Encoding 256 arrays'   0 1 255 {1 index exch /.notdef put} for   z.notdefrx   z putrz   z (z) defz [c              3   2   K   | ]  }t        |        y wr+   str.0vs     r   	<genexpr>z%T1Font._make_lines.<locals>.<genexpr>"  s     5Lc!f5L   z] defz {c              3   2   K   | ]  }t        |        y wr+   r   r   s     r   r   z%T1Font._make_lines.<locals>.<genexpr>$  s     6M!s1v6Mr   z} def)
r_   r   rd   rL   
isinstancer   boollistjointuple)r%   r;   rm   rk   rR   names         r   rf   zT1Font._make_lines
  s   *MMAcU"UG4"89::<<MMAcU!eF+I"NOPPJ((#.C&DEFF 34GHs LA 8Dy(T]]T!BtfD3I%JKL V$eS!MMAcU"UG5"9:;;t$MMAcU!eF+I"NOPPt$MMAcU"SXX5Le5L-L,MU"STUUu%MMAcU#chh6Mu6M.M-Nf"UVWWMMAcU!E7$"7899r   c                 0    t        || j                  |      S r+   )r   r$   )r%   serrorss      r   r_   zT1Font._tobytes(  s    q$--00r   )rw   NF)strict)r   r   r   __doc__r)   r0   r-   r7   r<   r:   r3   rg   rf   r_   r   r   r   r   r   4   s<    !1
	#
&3j`D:<1r   r   c                     t         j                  j                  |       \  }}|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   /  st    WWd#FAs
))+C'-LGS
f}j)611
f}tZ(%//''r   c                    t        |       |j                         }	 t        j                  |        d}	 |dk(  rt        | |       n|dk(  rt        | |       nt        | ||       d}|rt        s	 t        j                  |        y y y # t        j                  $ r Y lw xY w# t        j                  $ r Y y w xY w# |r7t        s0	 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'   r/   errs        r   r,   r,   <  s    ::<D
		$ C6>dD!U]T4 tT5)u		$ 3 88  88  u		$88  3sR   B	 3B; 1B" 	BB"B87B8;	C6CC6C1.C60C11C6i  P   c                 p   ddl m}  ||       }	 g }|j                  dg       D ]  }t        |j                  d         }t        |j                  d         dk7  rt        d      |dv r(|r|dk(  r n}|j                  |j                  dd        m|d	v r nX|d
k(  r5t        | d      5 }|j                  |j                                ddd       |dk(  rt        dt        |      z          |j                          t        |      }t        |       |S # 1 sw Y   xY w# |j                          w xY w)z)reads an LWFN font file, returns raw datar   )ResourceReaderPOSTr   zcorrupt LWFN filer   rW   rW   N)rV      rB   rbbad chunk code: )fontTools.misc.macResr   rH   r   r   r   rd   openr   reprcloser   r   )r&   r   r   readerr   rescodefs           r   r    r    Z  s$   4D!F::fb) 	?C388A;'Dsxx{#q(122v~$!)CHHQRL)$% *KK)* *04:=>>!	?$ 	T?DK* * 	s$   BD# ( D'D# D 	D# #D5c                    g }t        | d      5 }	 |j                  d      t        d      k7  rt        d      t	        |j                  d            }|dv rMt        |j                  d            }|j                  |      }t        |      |k(  sJ |j                  |       n|dk(  rnt        dt        |      z         |rnd	d	d	       t        |      }t        |       |S # 1 sw Y   !xY w)
z'reads a PFB font file, returns raw datar   r      zcorrupt PFB filer   rB   rV   r   N)r   r   r   r   r   stringToLongrM   rd   r   r   r   )r&   r   r   r   r   chunklenchunks          r   r!   r!   y  s    D	dD	 QvvayGCL(011166!9%Dv~'q	2x(5zX---E"04:=>>   T?DK% s   B6C%%C.c                 6   t        | d      5 }|j                         }ddd       t               t        |      }g }|D ]A  \  }}|r)t	        |dd       r|j                  t        |             1|j                  |       C t        |      S # 1 sw Y   rxY w)z'reads any (font) file, returns raw datar   NrB   )r   r   r   findEncryptedChunksisHexrd   deHexStringr   )r&   r   r   chunksisEncryptedr   s         r   r"   r"     s    	dD	 Qvvx &FD$ U5r+KKE*+KK	
 T? s   BBc                 >   t        j                  | ddd       t        j                  | d      }	 t        j                  |       d}t	        |      }|D ]d  \  }}|rd}nd}|st        j
                  t        |      dz   |d t        dz
   z         }|j                  d|d	       |t        dz
  d  }|dz   }|rUf t        j
                  t        d
      dz         }|j                  d|d	       t        j                  |       y # t        j                  |       w xY w)Njustr   r   rW   i  r    r    r   )
r   FSpCreateResFileFSOpenResFile
UseResFiler   Resourcer   LWFNCHUNKSIZEAddResourceCloseResFile)	r&   r   resRefresIDr   r   r   r   r   s	            r   r   r     s   vvq1tQ'F!v$T*"( 		"Kll74=4#7%@S-RSBS:T#TUr2ma/12		 		" ll71:,-r*  s   3D $AD 96D Dc           	      ~   t        |      }t        | d      5 }|D ]f  \  }}|rd}nd}|j                  t        d      t        |      z          |j                  t	        t        |                   |j                  |       h |j                  t        d      t        d      z          d d d        y # 1 sw Y   y xY w)NwbrW   r   r   rV   )r   r   r,   r   longToStringrM   )r&   r   r   r   r   r   r   s          r   r   r     s     &F	dD	 	+Q"( 	KGGGCL74=01GGLU,-GGEN	 	
wqz)*	+ 	+ 	+s   BB33B<c           	      J   t        |      }t        | d      5 }t        dz  }|D ]h  \  }}|rd}nd}|dk(  rF|rD|s|j                  t	        j
                  |d |              |j                  d       ||d  }|r@X|j                  |       j 	 d d d        y # 1 sw Y   y xY w)Nr   rW   r      )r   r   HEXLINELENGTHr,   r   	hexString)	r&   r   r/   r   r   
hexlinelenr   r   r   s	            r   r   r     s     &F	dD	 Q"a'
"( 	KqyUGGEOOE+:,>?@GGEN!*+.E 
 	  s   "B?B;BB"   currentfile eexecs   (0[ 	
]*){512})flagss   currentfile closefiles   %-- eexec starts   %-- eexec ends   [0-9A-Fa-f]*$c                 0    t         j                  |       d uS r+   )_ishexREmatch)texts    r   r   r     s    >>$t++r   c                 b   t        |       }g } |D ]  \  }}|rt        |d d       rt        |      }t        j                  |d      \  }}|dd  }|t        t               dz
  d t        k7  r(|t        t               dz
  d t        k7  rt        d      |d t        t               dz
   dz   }| j                  t        |z   t        z          |t        t               dz
  d t        k(  r'| j                  |d t        t               dz
          | j                  |        t        |       S )	NrB   r|   r   rW   zinvalid end of eexec partr   )r   r   r   r   rJ   rM   EEXECINTERNALENDr   rd   EEXECBEGINMARKEREEXECENDMARKER
EEXECBEGINr   )r   r   r   r   	decryptedrQ   s         r   decryptType1r    s1    &FD$ #UU2AY#E* ==6LIq!!"I3/0014r:>NNs#344q82>BRR9::!">S)9%:$:Q$>?%GIKK(94~EFc*o%)B/:=E"8S_$4q$89:E"##$ T?r   c           	      B   g }	 | j                  t              }|dk  rn|t        t              z   dz   }t        j	                  | |      }|t        d      |j                         }| ||dz    }t        |d d       rt        |      }t        j                  |d      \  }}|j                  t              }|dk  rt        d      |j                  d| d | f       |j                  d|d |t        t              z   dz    f       | |d  } |j                  d| f       |S )Nr   r   zcan't find end of eexec partrW   rB   r|   )findr  rM   EEXECENDsearchr   startr   r   r   rJ   r   rd   )	r   r   eBeginendMatcheEnd
cypherText	plainTextrQ   	eEndLocals	            r   r   r     s(   F
:&A:#j/)A-??40899~~&4!8,
BQ $Z0J}}Z7	1NN#34	q=899q$w-()q*%Ly37G3H'H1'LMNODE{% & MM1d)Mr   c                 Z    t        j                  t        | j                                     S r+   )r   r   r   split)	hexstrings    r   r   r     s    Yy'89::r   s   /FontType\s+1\s+defc                     dD ]  }| d t        |       |k(  s n t        d      t        j                  |       st        d      | j	                  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)rM   r   _fontType1REr  r  )r   heads     r   r   r   &  sr    3 /#d)$/ -..t$)**yy%&*455Kr   c                 d    d}t        d      D ]  }|t        | d|dz  z  z  |dz  z	        z  }! |S )Nr   rB      r[   )rL   r   )longr   rR   s      r   r   r   7  sD    A1X :	Wddq1uo.1q5899:Hr   c                     t        |       dk7  rt        d      d}t        d      D ]  }|t        | |         |dz  z  z  } |S )NrB   zstring must be 4 bytes longr   r[   )rM   r#   rL   r   )r   lrR   s      r   r   r   >  sQ    
1v{677	A1X &	WQqT]q1u%%&Hr   
FontMatrixFSType	Copyright)rC   rv   UniqueID
BlueValues
OtherBluesFamilyBluesFamilyOtherBlues	BlueScale	BlueShiftBlueFuzzStdHWStdVW	StemSnapH	StemSnapVr   LanguageGrouppasswordrA   
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)noaccessr2  )put)r3  r4  r   )r   F)Er   r`   rF   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   rb   r   re   r^   r   r   r}   r   r   r   r   r   r   r   r   <module>rB     s  $    > I I 
 B 	 	
	 N	i 	u1V u1v
(4 >0$!0+( "
 2::+2448+ ' #2::&',02; rzz12" 23    L ) 56     8P
	 
A*+	*+	A   Ns)   D* *	D63D9 5D66D9 9EE