
    hC/                     T   S SK JrJrJrJrJr  S SKJr  SSKJ	r	J
r
JrJrJrJrJrJrJrJrJrJrJrJr  S SKrS SKJr  S SKJr  S SKr\R:                  " \5      rSr \RB                  " \" S	\S
/5      5      r"\" S\S
/5      r#\RB                  " \#5      r$\RB                  " S5      r%Sr&SRO                  \&RQ                  5       5      r&\RB                  " \&5      r)\RB                  " \" S\S/5      5      r* " S S\+5      r, " S S\+5      r- " S S\.5      r/ " S S\	5      r0S r1SS jr2g)    )bytechrbyteord	bytesjointobytestostr)eexec   )PSOperatorsps_StandardEncodingps_array
ps_booleanps_dict
ps_integer
ps_literalps_markps_nameps_operatorps_procedureps_procmarkps_real	ps_stringN)Callable)
whitespaces	   ()<>[]{}%   [s   ]*s   [^][(){}<>/%s   %[^
]*sf   
	\(
		(
			(
				[^()]*   \   [()]
			)
			|
			(
				[^()]*  \(   [^()]*  \)
			)
		)*
		[^()]*
	\)
    s   <[s   0-9A-Fa-f]*>c                       \ rS rSrSrg)PSTokenError7    N__name__
__module____qualname____firstlineno____static_attributes__r   r   F/var/www/html/env/lib/python3.13/site-packages/fontTools/misc/psLib.pyr   r   7       r   r   c                       \ rS rSrSrg)PSError;   r   Nr    r   r   r&   r)   r)   ;   r'   r   r)   c                       \ rS rSrSS jrSS jrS r\\\	R                  \R                  \R                  \R                  4S jr\R                  4S jrS rS rS	rg
)PSTokenizer?   c                 n    [        U5      nXl        [        U5      U l        SU l        SU l        X l        g )Nr   F)r   buflenposclosedencoding)selfr/   r3   s      r&   __init__PSTokenizer.__init__@   s.    cls8 r   c                     U R                   (       a  [        S5      eUb  US:  a  U R                  nO#[        U R                  U-   U R                  5      nU R
                  U R                  U nX l        U$ )zRead at most 'n' bytes from the buffer, or less if the read
hits EOF before obtaining 'n' bytes.
If 'n' is negative or omitted, read all data until EOF is reached.
zI/O operation on closed filer   )r2   
ValueErrorr0   minr1   r/   )r4   nnewposrs       r&   readPSTokenizer.readI   sa    
 ;;;<<9AXXFAtxx0FHHTXX'r   c                 >    U R                   (       d  SU l         U ?U ?g g )NT)r2   r/   r1   r4   s    r&   closePSTokenizer.closeX   s    {{DK$( r   c                    U R                  5         U R                  U R                  :  a  gU R                  nU R                  n[	        [        X   5      5      n	X;   a  U	S;   a  Sn
U	nOU	S:X  a  Sn
U" X5      R                  5       u  pXU nOU	S:X  a2  Sn
U" X5      nUc  [        SU-  5      eUR                  5       u  pXU nOU	S	:X  a2  S
n
U" X5      nUc  [        SU-  5      eUR                  5       u  pXU nOS[        SU-  5      eU	S:X  a  Sn
U" XS-   5      nO
Sn
U" X5      nUc  [        SU-  5      eUR                  5       u  pXU nXq" U5      -   U l        [        XR                  S9nX4$ )N)NNs   {}[]
do_special   %
do_comment   (	do_stringzbad string at character %d   <do_hexstringzbad hexstring at character %dzbad token at character %d   /
do_literalr	    r3   )
	skipwhiter1   r0   r/   r   r   spanr   r   r3   )r4   r0   
ps_specialstringmatchhexstringmatchcommentmatchendmatchr1   r/   char	tokentypetoken_nextposms                  r&   getnexttokenPSTokenizer.getnexttoken]   s    	88txxhhhhwsx()w(	(	)#388:
('	)9&'Cc'IJJVVX
(*	"3,9&'F'LMMVVX
("#>#DEEt|(	S'*	S&y"#>#DEEJAG$EU#emm4r   c                 j    U" U R                   U R                  5      R                  5       u  p#X0l        g N)r/   r1   rP   )r4   
whitematchrY   rZ   s       r&   rO   PSTokenizer.skipwhite   s&    $((388:
r   c                     U R                   S-   U l         U R                  U R                   S  U l        [        R                  " U R                  S5      u  U l        n[        U R                  5      U l        SU l         g )Nr	   iq     )r1   r/   dirtybufr   decryptr0   )r4   Rs     r&   
starteexecPSTokenizer.starteexec   sW    88a<,mmDMM59!txx=r   c                 N    [        U S5      (       d  g U R                  U l        U ?g )Nrd   )hasattrrd   r/   r@   s    r&   	stopeexecPSTokenizer.stopeexec   s"    tZ((==Mr   )r/   r2   rd   r3   r0   r1   N)r   ascii))r!   r"   r#   r$   r5   r=   rA   r0   rQ   stringREmatchhexstringRE	commentREendofthingREr\   skipwhiteRErO   rg   rk   r%   r   r   r&   r,   r,   ?   sY    !# NN"((__##5 n $/#4#4 r   r,   c                       \ rS rSrSS jrS rS r\4S jrS r	S r
S r\\\\\4S	 jrS
 rS rS rS rS rS rS rS rS rSrg)PSInterpreter   c                     0 n0 nXl         X#/U l        / U l        SU l        [	        5       U l        U R                  5         g )Nr   )r3   	dictstackstack	proclevelr   procmarkfillsystemdict)r4   r3   
systemdictuserdicts       r&   r5   PSInterpreter.__init__   s>    
 $/
#r   c                 4   U R                   S   n[        5       =US'   =US'   U l        [        SU R                  5      US'   [        S5      US'   [        S5      US'   [        [        5      US'   [        0 5      US	'   U R                  XR                  5        g )
Nr   [mark]r	   truefalseStandardEncodingFontDirectory)ry   r   r   r   do_makearrayr   r   r   r   suckoperators	__class__)r4   r~   s     r&   r}   PSInterpreter.fillsystemdict   s    ^^A&
;B9D
3D*V,ty%c4+<+<=
3']
6(m
7)12E)F
%&&-bk
?#:~~6r   c                     [        U5       HB  n[        X5      n[        U[        5      (       d  M%  US S S:X  d  M0  USS  n[	        X45      X'   MD     UR
                   H  nU R                  X5        M     g )N   ps_)dirgetattr
isinstancer   r   	__bases__r   )r4   r~   klassnameattr	baseclasss         r&   r   PSInterpreter.suckoperators   sj    JD4&D$))d2Ah%.?ABx#.t#:
 	 
 Iz5 )r   c           	         [        XR                  5      =o0l        UR                  nU R                  nU R
                  n  U" 5       u  pxU(       d  O-U(       a  U" X5      n	U	" U5      n
OU" U5      n
U
b  U" U
5        M>  UR                  5         S U l        g !   U R                  b  [        R                  SU R                  R                  U R                  R                  S-
  U R                  R                   U R                  R                  U R                  R                  U R                  R                  S-    5        e = f)Nz/ps error:
- - - - - - -
%s
>>>
%s
- - - - - - -2   )r,   r3   	tokenizerr\   do_tokenhandle_objectrA   logdebugr/   r1   )r4   datar   r   r\   r   r   rW   rX   handlerobjects              r&   	interpretPSInterpreter.interpret   s   %0}}%EE	N --==**	#/> 	%d6G$U^F%e_F%!&)  OO!DN	~~)		$ NN&&t~~'9'9B'>ASASTNN&&t~~'9'9DNN<N<NQS<ST	 s   AB B+Ec                    U R                   (       d  UR                  (       d  UR                  S:X  d  UR                  S:w  a  U R                  UR                  5      nUR                  (       a  U R                  U5        g UR                  S:X  a  U R                  U5        g UR                  5         g U R                  U5        g )Nproceduretypeoperatortype)r{   literaltyperesolve_namevaluepushcall_procedurefunctionr4   r   s     r&   r   PSInterpreter.handle_object   s}    &..FKK?4R{{n,**6<<8~~		&!;;/1''/OO%IIfr   c                 R    U R                   nUR                   H  nU" U5        M     g r_   )r   r   )r4   procr   items       r&   r   PSInterpreter.call_procedure   s#    **JJD$ r   c                     U R                   n[        [        U5      S-
  SS5       H  nXU   ;   d  M  X#   U   s  $    [        S[	        U5      -   5      e)Nr	   rn   zname error: )ry   ranger0   r)   str)r4   r   ry   is       r&   r   PSInterpreter.resolve_name   sT    NN	s9~)2r2A|# |D)) 3 ns4y011r   c                 p    U" U5      nU" U5      $ ! [         [        4 a     U" U5      nU" U5      s $ ! [         [        4 al    SU;   aY  UR                  S5      n U" US U 5      n	U" XS-   S  U	5      nU" U5      s s $ ! [         [        4 a    U" U5      s s s $ f = fU" U5      s s $ f = ff = f)N#r	   )r8   OverflowErrorfind)
r4   rX   intfloatr   r   r   numhashposbases
             r&   r   PSInterpreter.do_token   s    	#e*C& c?"% M* 	$$El s|# . *%<#jjoG/"5'?3!%!"6=  *#. '6 .&u~-.
 #5>)*	$sY    B55B5'B1B6B1>B5B!B1B5 B!!B1,B50B11B5c                     g r_   r   r4   rX   s     r&   rF   PSInterpreter.do_comment  s    r   c                     [        USS  5      $ )Nr	   )r   r   s     r&   rL   PSInterpreter.do_literal!  s    %)$$r   c                     [        USS 5      $ )Nr	   rn   )r   r   s     r&   rH   PSInterpreter.do_string$  s    q%%r   c                 >   SR                  USS R                  5       5      n[        U5      S-  (       a  US-   n/ n[        S[        U5      S5       H,  nUR	                  [        [        X$US-    S5      5      5        M.     SR                  U5      n[        U5      $ )NrM   r	   rn      0r      )joinsplitr0   r   appendchrr   r   )r4   rX   hexStrcleanstrr   s        r&   rJ   PSInterpreter.do_hexstring'  s    q**,-v;?c\Fq#f+q)AOOCFq1u$5r :;< *778$""r   c                    US:X  a   U R                   S-   U l         U R                  $ US:X  ae  / n U R                  5       nX0R                  :X  a  OUR                  U5        M3  U R                   S-
  U l         UR	                  5         [        U5      $ US:X  a  U R                  $ US:X  a  [        S5      $ [        S5      e)N{r	   }r   r   zhuh?)	r{   r|   popr   reverser   r   r   r   )r4   rX   r   	topobjects       r&   rD   PSInterpreter.do_special1  s    C<!^^a/DN== c\D HHJ	-I&	 
 "^^a/DNLLN%%c\99c\3<v&&r   c                 :    U R                   R                  U5        g r_   )rz   r   r   s     r&   r   PSInterpreter.pushF  s    

&!r   c                     U R                   nU(       d  [        S5      eUS   nU(       a6  UR                  U;  a&  [        S[        U5      < SUR                  < 35      eUS	 U$ )Nzstack underflowrn   ztypecheck, expected z, found )rz   r)   r   repr)r4   typesrz   r   s       r&   r   PSInterpreter.popI  s]    

+,,r{{%':>u+v{{S  "Ir   c                     / n U R                  5       nX R                  :X  a  OUR                  U5        M3  UR                  5         U R	                  [        U5      5        g r_   )r   r   r   r   r   r   )r4   arrayr   s      r&   r   PSInterpreter.do_makearrayV  sN    
III%LL#	 
 			(5/"r   c                     U ? U ?g)zRemove circular references.N)rz   ry   r@   s    r&   rA   PSInterpreter.close`  s    JNr   )ry   r3   r   r{   r|   rz   r   Nrm   )r!   r"   r#   r$   r5   r}   r   r   r   r   r   r   r   r   r   r   r   r   rF   rL   rH   rJ   rD   r   r   r   rA   r%   r   r   r&   rv   rv      sn    76 '. B 
2 #>%&#'*"#r   rv   c                    [        U R                  5      nU[        :X  a4  0 nU R                  R                  5        H  u  p4[	        U5      X#'   M     U$ U[
        :X  au  S /[        U R                  5      -  n[        [        U R                  5      5       H  n[	        U R                  U   5      X%'   M     U R                   S:X  a  [        U5      nU$ U R                  nU$ )Nr   )	r   r   dictitemsunpack_itemlistr0   r   tuple)r   tpnewitemkeyr   r   s         r&   r   r   f  s    	djj	B	Tz****,JC&u-GL - N 
t&3tzz?*s4::'A$TZZ]3GJ (99'GnG N **Nr   c                    [         R                  " SU 5      nU(       a"  UR                  S5      nUR                  5       nOS n[	        US9nUR                  S5        UR                  U 5        UR                  S   S   R                  nX5;   a  XS   nOP[        UR                  5       5      n[        U5      S:  a  UR                  S5        UR                  5         XWS      nUR                  5         [        U5      $ )Ns    /FontName\s+/([^ \t\n\r]+)\s+defr	   rN   sC   /Helvetica 4 dict dup /Encoding StandardEncoding put definefont popr   r   	Helvetica)researchgroupdecoderv   r   ry   r   r   keysr0   removesortrA   r   )r   r3   r[   fontNameinterpreterfontdirrawfont	fontNamess           r&   suckfontr   w  s    
		6=A771:??$2KN $##A&7==G# (	y>A[)A,'wr   r   )3fontTools.misc.textToolsr   r   r   r   r   fontTools.miscr   psOperatorsr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   collections.abcr   stringr   logging	getLoggerr!   r   rQ   compilert   endofthingPatrs   rr   	stringPatr   r   ro   rq   	Exceptionr   r)   r   r,   rv   r   r   r   r   r&   <module>r     s   P P       
 $   !
jjD*e#<=>?J>?zz-(JJ|$		 HHY__&'	::i jjE:#GHI	9 		i 	d& dN}K }@" r   