
    ]MhC                         d dl mZmZmZ d Z G d de          Z G d de          Zd Z G d d	e          Z	 G d
 de          Z
d Zd ZdddefdZd Zd ZdS )    )SimpleT2DecompilerT2WidthExtractorcalcSubrBiasc                 :    t          t          |                     S N)sortedset)ls    [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/fontTools/cffLib/transforms.py
_uniq_sortr      s    #a&&>>    c                       e Zd ZdS )StopHintCountEventN)__name__
__module____qualname__ r   r   r   r      s        Dr   r   c                   >    e Zd ZdZd
dZd Zd Zd Zd Zd Z	d	 Z
dS )_DesubroutinizingT2Decompiler)op_hintmaskop_cntrmask
op_rmoveto
op_hmoveto
op_vmovetoNc                 4    t          j        | |||           d S r   )r   __init__)self
localSubrsglobalSubrsprivates       r   r   z&_DesubroutinizingT2Decompiler.__init__   s    #D*k7KKKKKr   c                    d| _         | j        D ]}t          | || j                   t	          |d          r?| j         r6| j        r/	 t          j        | |           n# t          $ r | j        d= Y nw xY wd S g |_	        t          j        | |           |j
        d d          }t          |j	                  D ]p\  }}|dk    sJ ||dz
           dv sJ ||dz
                       t          ||dz
                     t          k    sJ |d         dk    r
|d d         }|||dz
  |<   q| j        j        s$d|v r |d |                    d          dz            }||_        |`	d S )	NT_desubroutinized      )callsubr	callgsubrreturnendchar)need_hintcountstop_hintcount_opssetattrstop_hint_counthasattrcallingStackr   executer   _patchesprogramreversedtypeintr    in_cff2indexr"   )r   
charStringop_namedesubroutinizedidx	expansions         r   r0   z%_DesubroutinizingT2Decompiler.execute   s   ". 	9 	9GD'4#78888:122 
	
 " .t'8 ..&.tZ@@@@) . . .)"---.F 
"4444$,QQQ/&z':;; 		7 		7NC!8888"37+ 0    sQw'   a011S8888}((%crcN	-6OC!GcM**|# 	O++"1:o++I66::# '6
#s   A A21A2c                     | j         | j        d         | j        z            }t          j        | |           |                     ||           d S Nr#   )r   operandStack	localBiasr   op_callsubrprocessSubrr   r7   subrs      r   rA   z)_DesubroutinizingT2Decompiler.op_callsubrD   sL    t04t~EF&tU333%%%%%r   c                     | j         | j        d         | j        z            }t          j        | |           |                     ||           d S r>   )r   r?   
globalBiasr   op_callgsubrrB   rC   s      r   rG   z*_DesubroutinizingT2Decompiler.op_callgsubrI   sM     1" 5 GH'e444%%%%%r   c                     d| _         | j        D ]}t          | |d            | j        d         }t	          |d          rt                      d S )NFr#   r"   )r*   r+   r,   r/   r.   r   )r   argsr9   css       r   r-   z-_DesubroutinizingT2Decompiler.stop_hint_countN   sg    #. 	) 	)GD'4((((r"2)** 	'$&&&	' 	'r   c                 j    t          j        | |           | j        r|                                  d S d S r   )r   r   r*   r-   r   r7   s     r   r   z)_DesubroutinizingT2Decompiler.op_hintmaskV   sB    &tU333 	#  """""	# 	#r   c                     | j         d         }t          |d          s#|j                            ||j        f           d S d S )Nr#   r"   )r/   r.   r1   appendr"   )r   r7   rD   rJ   s       r   rB   z)_DesubroutinizingT2Decompiler.processSubr[   sP    r"r-.. 	?Kt'<=>>>>>	? 	?r   r   )r   r   r   r+   r   r0   rA   rG   r-   r   rB   r   r   r   r   r      s        L L L L&  &  & P& & &
& & &
' ' '# # #
? ? ? ? ?r   r   c                 J   | j         D ] }| |         }|j        }|                                D ]j}|                                 t	          |j        dg           }t          ||j        |j                  }|                    |           |j	        |_
        |`	kt          |d          r5|j        D ],}|j        }t          |d          r|`d|j        v r|j        d= -|j        }t          |d          r|`d|j        v r|j        d= | j                                         d S )NSubrsFDArray)	fontNamesCharStringsvalues	decompilegetattrr    r   r   r0   r"   r2   r.   rQ   PrivaterP   rawDictGlobalSubrsclear)	cfffontNamefontrJ   csubrs
decompilerfdpds	            r   desubroutinizerc   a   sG   M ( (8} 	# 	#AKKMMMAIw33E6uamQYWWJq!!!*AI""4## 	(l , ,Z2w'' !bj((
7+, Br7## H"*$$Jw'Or   c                        e Zd Zd Zd Zd ZdS )_MarkingT2Decompilerc                     t          j        | |||           ||fD ]'}|r#t          |d          st                      |_        (d S )N_used)r   r   r.   r	   rg   )r   r   r   r    r_   s        r   r   z_MarkingT2Decompiler.__init__   s\    #D*k7KKK +. 	$ 	$E $WUG44 $!ee	$ 	$r   c                     | j         j                            | j        d         | j        z              t          j        | |           d S r>   )r   rg   addr?   r@   r   rA   rL   s     r   rA   z _MarkingT2Decompiler.op_callsubr   sC    !!$"3B"7$."HIII&tU33333r   c                     | j         j                            | j        d         | j        z              t          j        | |           d S r>   )r   rg   ri   r?   rF   r   rG   rL   s     r   rG   z!_MarkingT2Decompiler.op_callgsubr   sD    ""4#4R#84?#JKKK'e44444r   N)r   r   r   r   rA   rG   r   r   r   re   re   ~   sA        $ $ $4 4 45 5 5 5 5r   re   c                   |    e Zd Z G d de          Z	 ddZd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd ZdS )_DehintingT2Decompilerc                       e Zd Zd ZdS )_DehintingT2Decompiler.Hintsc                 Z    d| _         d| _        d| _        d| _        d| _        g | _        d S )NFr   )has_hint	last_hintlast_checkedstatushas_hintmask	deletions)r   s    r   r   z%_DehintingT2Decompiler.Hints.__init__   s8    
 "DMDN !"D DK %DDNNNr   N)r   r   r   r   r   r   r   Hintsrn      s         	  	  	 . 	r   rv   Nc                 R    || _         t          j        | ||||           || _        d S r   )_cssr   r   r    )r   cssr   r   nominalWidthXdefaultWidthXr    s          r   r   z_DehintingT2Decompiler.__init__   s8     	!*k=-	
 	
 	
 r   c                     t          |d          r|j        nd }|                                 |_        t          j        | |           |j        }|j        s|j        r| j                            |           |j	        dk    rvt          |j        t          |j                  dz
            D ]2}t          |j        |         t                    r	d|_	         nd|_	        3t          |j                  |_        |r|j        |j        k    sJ d S d S )N_hintsr$   r%   )r.   r}   rv   r   r0   rp   rt   rx   ri   rs   rangerr   lenr2   
isinstancestr__dict__)r   r8   	old_hintshintsis        r   r0   z_DehintingT2Decompiler.execute   s   )0X)F)FPJ%%D	 JJLL
 z222!> 	&U/ 	&IMM*%%%<15-s:3E/F/F/JKK % %j03S99 %#$ELE#$ELL!$Z%7!8!8E 	8>Y%77777	8 	877r   c                     | j         | j        d         | j        z            }t          j        | |           |                     ||           d S r>   )r   r?   r@   r   rA   rB   rC   s      r   rA   z"_DehintingT2Decompiler.op_callsubr   sL    t04t~EF$T5111%%%%%r   c                     | j         | j        d         | j        z            }t          j        | |           |                     ||           d S r>   )r   r?   rF   r   rG   rB   rC   s      r   rG   z#_DehintingT2Decompiler.op_callgsubr   sM     1" 5 GH%dE222%%%%%r   c                 Z    t          j        | |           |                     |           d S r   )r   op_hstemprocessHintrL   s     r   r   z_DehintingT2Decompiler.op_hstem   /    !$...r   c                 Z    t          j        | |           |                     |           d S r   )r   op_vstemr   rL   s     r   r   z_DehintingT2Decompiler.op_vstem   r   r   c                 Z    t          j        | |           |                     |           d S r   )r   
op_hstemhmr   rL   s     r   r   z!_DehintingT2Decompiler.op_hstemhm   /    #D%000r   c                 Z    t          j        | |           |                     |           d S r   )r   
op_vstemhmr   rL   s     r   r   z!_DehintingT2Decompiler.op_vstemhm   r   r   c                 Z    t          j        | |          }|                     |           |S r   )r   r   processHintmaskr   r7   rvs      r   r   z"_DehintingT2Decompiler.op_hintmask   -    )$66U###	r   c                 Z    t          j        | |          }|                     |           |S r   )r   r   r   r   s      r   r   z"_DehintingT2Decompiler.op_cntrmask   r   r   c                    | j         d         }|j        }d|_        |j        dk    r\t	          |j        |dz
            D ]+}t          |j        |         t                    r	d|_         n,d|_	        |dz   |_
        d|_        |dz   |_        d S )Nr#   Tr$   r%   r   )r/   r}   rt   rs   r~   rr   r   r2   r   rp   rq   )r   r7   rJ   r   r   s        r   r   z&_DehintingT2Decompiler.processHintmask   s    r"	!<15-uqy99 ! !bjmS11 #$ELE
 "&"'!) "QYr   c                 X    | j         d         }|j        }d|_        ||_        ||_        d S )Nr#   T)r/   r}   rp   rq   rr   )r   r7   rJ   r   s       r   r   z"_DehintingT2Decompiler.processHint   s2    r"	"r   c                    | j         d         }|j        }|j        }|j        dk    rKt          |j        |dz
            D ]+}t          |j        |         t                    r	d|_         n,||_        |j        dk    r,|j        r$d|_        |j        dk    r||_	        n0|dz
  |_	        n%|j        dk    r|j
                            |           t          |j        |j                  |_        d S )Nr#   r$   r%   Tr   )r/   r}   rs   r~   rr   r   r2   r   rp   rq   ru   rN   max)r   r7   rD   rJ   r   
subr_hintsr   s          r   rB   z"_DehintingT2Decompiler.processSubr  s   r"	[
 <15-uqy99  bjmS11 #$ELE "'E<1" 0!% $))&+EOO&+aiEO!##O""5)))5<):;;r   r   )r   r   r   objectrv   r   r0   rA   rG   r   r   r   r   r   r   r   r   rB   r   r   r   rl   rl      s              6 SW   8 8 80& & &
& & &
                      
  
' ' '"# # #< < < < <r   rl   c                    | j         }t          dt          |                    D ]}||         dk    rZt          ||dz
           t                    sJ |j                            ||dz
           |j        z             |j        z
  ||dz
  <   h||         dk    rYt          ||dz
           t                    sJ |j                            ||dz
           |j        z             |j        z
  ||dz
  <   d S )Nr%   r&   r'   )	r2   r~   r   r   r5   rg   r7   	_old_bias	_new_bias)
charstringr_   gsubrspr   s        r   _cs_subset_subroutinesr   $  s    A1c!ff  Q4:aAh,,,,,{((1q5EO)CDDuVAa!eHHqT[  aAh,,,,,""1QU8f.>#>??&BRR a!eH r   c                    | j         }|j        r&| j        }t          |j                  D ]
}||dz
  |= |j        r|j        r|j        |j        d         k    sJ | j        |j        d          | _        | j        s| j                            d           t          | d          rX| j        | j	        j
        k    rC| j	        j
        
J d            | j                            d| j        | j	        j        z
             |j        r_d}| j        }|t          |          k     rC||         dv r!|dz   t          |          k    sJ |||dz   = >|dz  }|t          |          k     Ct          | j                  sJ | ` d S )Nr$   r   r)   widthz5CFF2 CharStrings must not have an initial width value)hintmaskcntrmaskr%   )r}   ru   r2   r3   rp   rq   rN   r.   r   r    r{   insertrz   rt   r   )r   r   r   r;   r   s        r   _cs_drop_hintsr   1  s   E !EO,, 	! 	!C#'C-  ~ ?Keo9K&K&K&K&K'/0A0AB
! 	1%%i000:w'' 		:#5#CCC &4@@J A@@"))z'**<*JJ    #a&&jjt///1uAa!a%iLFA #a&&jj z!"""""r   T)removeUnusedSubrsr   c          
         |                                  D ]E}| |         }|j        }t                      }|                                D ]}|                                 t          |j        dg           }t          |||j        |j        j	        |j        j
        |j                  }|                    |           |j        |_        |D ]}	t          |	           ~g }
t          |d          r%|
                    d |j        D                        n|
                    |j                   |
D ](}dD ]#}t          ||          rt'          ||d            $)G|rt)          |            d S d S )NrP   rQ   c              3   $   K   | ]}|j         V  d S r   )rW   .0ra   s     r   	<genexpr>zremove_hints.<locals>.<genexpr>  s$      ??BRZ??????r   )
BlueValues
OtherBluesFamilyBluesFamilyOtherBlues	BlueScale	BlueShiftBlueFuzz	StemSnapH	StemSnapVStdHWStdVW	ForceBoldLanguageGroupExpansionFactor)keysrS   r	   rT   rU   rV   r    rl   r   rz   r{   r0   r   r   r.   extendrQ   rN   rW   r,   remove_unused_subroutines)r[   r   fontnamer]   rJ   ry   r^   r_   r`   r   	all_privsprivks                r   remove_hintsr   Y  s   HHJJ <+ <+8}  ee 	' 	'AKKMMMAIw33E/	'	'	 J q!!! &AGG 	' 	'J:&&&& 	4## 	+??$,???????T\*** 	+ 	+D + +  4## +D!T***#+	+&  '!#&&&&&' 'r   c                 b    t          | d          r| j        sd| j        v r| j        d= | `d S d S d S )NrP   )r.   rP   rX   )private_dicts    r   _pd_delete_empty_subrsr     sW    |W%% l.@ l***$W-   r   c                 2  
 |                                  D ]}| |         }|j        }|                                D ]H}t          |j        dg           
t          
|j        |j                  }|                    |           I|j        g}t          |d          r%|
                    d |j        D                        n@t          |j        d          r+|j        j        r|                    |j        j                   t          
          
|D ]k
t          
d          st                      
_        t#          
j                  
_        t%          
          
_        t%          
j                  
_        l|                                D ].}t          |j        dd           
t+          |
|j                   /|D ]

|j        k    rt          |d          s"t          |j        d          r|j        j        }net          |d          rPt-          |j                  dk    r8t          |j        d         j        d          r|j        d         j        j        }nd }n
}
fd
j        D             
_        t          
d          r
`t          
d	          r
`
j        D ]}t+          |||j                   t          |d          r|j        D ]}	t5          |	j                   nt5          |j                   |D ]

`
`
`	d S )
NrP   rQ   c              3   p   K   | ]1}t          |j        d           |j        j        #|j        j        V  2dS )rP   N)r.   rW   rP   r   s     r   r   z,remove_unused_subroutines.<locals>.<genexpr>  s\        2:w// 57J4D
      r   rg   r%   r   c                 *    g | ]}j         |         S r   )items)r   r   r_   s     r   
<listcomp>z-remove_unused_subroutines.<locals>.<listcomp>  s    ???a5;q>???r   fileoffsets)r   rS   rT   rV   r    re   r   r0   rY   r.   r   rQ   rW   rP   rN   r	   rg   r   r   r   r   r   r   r   r   r   r   )r[   r   r]   rJ   r^   r`   	all_subrslocal_subrsrD   ra   r_   s             @r   r   r     sz   HHJJ G> G>8}  	" 	"AAIw33E-eQ]AINNJq!!!!%&	4## 	1  ,      
 T\7++ 	10B 	1T\/000E

  	8 	8E5'** $!ee$U[11EK*511EO*5;77EOO  	? 	?AAIw55E"1eT-=>>>>  	L 	LE(((tY// 
'GDL'4R4R 
'"&,"4KKD),,'DL))Q..Q 7AA / #',q/"9"?KK"&KK#????5;???EKuf%% Jui(( "M L L&t[$:JKKKKL 4## 	1l 3 3&rz22223 #4<000  	> 	>EU_eoo	>MG> G>r   N)fontTools.misc.psCharStringsr   r   r   r   	Exceptionr   r   rc   re   rl   r   r   boolr   r   r   r   r   r   <module>r      s             	 	 	 	 	 	 	 	N? N? N? N? N?$6 N? N? N?b  :5 5 5 5 5- 5 5 5 S< S< S< S< S<- S< S< S<l
 
 
% % %P 48 ?' ?' ?'D ?' ?' ?' ?'D  H> H> H> H> H>r   