
    Wh/D                         d dl mZmZmZ d Z G d de      Z G d de      Zd 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y)    )SimpleT2DecompilerT2WidthExtractorcalcSubrBiasc                 *    t        t        |             S N)sortedset)ls    U/var/www/html/jupyter_env/lib/python3.12/site-packages/fontTools/cffLib/transforms.py
_uniq_sortr      s    #a&>    c                       e Zd Zy)StopHintCountEventN)__name__
__module____qualname__ r   r   r   r      s    r   r   c                   <    e Zd ZdZd
dZd Zd Zd Zd Zd Z	d	 Z
y)_DesubroutinizingT2Decompiler)op_hintmaskop_cntrmask
op_rmoveto
op_hmoveto
op_vmovetoNc                 4    t        j                  | |||       y r   )r   __init__)self
localSubrsglobalSubrsprivates       r   r   z&_DesubroutinizingT2Decompiler.__init__   s    ##D*k7Kr   c                    d| _         | j                  D ]  }t        | || j                          t	        |d      r1| j                   r$| j
                  r	 t        j                  | |       y y g |_	        t        j                  | |       |j                  d d  }t        |j                        D ]R  \  }}|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
  | T | j                  j                  sd|v r|d |j!                  d      dz    }||_        |`	y # t        $ r | j
                  d= Y y w xY w)	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   ".. 	9GD'4#7#78	9 :12
 ""t'8'8.&..tZ@  
""44$,,Q/&z':':; 		7NC!8O8"37+ 0  ( sQw'(  a01S888}(%crN	-6OC!Gc*		7 ||##O+"1:o++I6:# '6
#3 * .))"-.s   D> >EEc                     | j                   | j                  d   | j                  z      }t        j                  | |       | j                  ||       y Nr#   )r   operandStack	localBiasr   op_callsubrprocessSubrr   r7   subrs      r   rA   z)_DesubroutinizingT2Decompiler.op_callsubrD   sD    t004t~~EF&&tU3%r   c                     | j                   | j                  d   | j                  z      }t        j                  | |       | j                  ||       y r>   )r   r?   
globalBiasr   op_callgsubrrB   rC   s      r   rG   z*_DesubroutinizingT2Decompiler.op_callgsubrI   sF     1 1" 5 GH''e4%r   c                     d| _         | j                  D ]  }t        | |d         | j                  d   }t	        |d      r
t               y )NFr#   r"   )r*   r+   r,   r/   r.   r   )r   argsr9   css       r   r-   z-_DesubroutinizingT2Decompiler.stop_hint_countN   sT    #.. 	)GD'4(	)r"2)*$&& +r   c                 j    t        j                  | |       | j                  r| j                          y y r   )r   r   r*   r-   r   r7   s     r   r   z)_DesubroutinizingT2Decompiler.op_hintmaskV   s,    &&tU3  " r   c                     | j                   d   }t        |d      s(|j                  j                  ||j                  f       y y )Nr#   r"   )r/   r.   r1   appendr"   )r   r7   rD   rJ   s       r   rB   z)_DesubroutinizingT2Decompiler.processSubr[   s?    r"r-.KKt'<'<=> /r   r   )r   r   r   r+   r   r0   rA   rG   r-   r   rB   r   r   r   r   r      s/    L& P&
&
'#
?r   r   c                     | j                          t        | j                  dg       }t        || j                  | j                        }|j                  |        | j                  | _        | `y)z%Desubroutinize a charstring in-place.SubrsN)	decompilegetattrr    r   r   r0   r"   r2   )rJ   subrs
decompilers      r   desubroutinizeCharStringrU   a   sT    LLNBJJ,E.ubnnbjjQJr$$BJ
r   c                    | j                   D ]  }| |   }|j                  }|j                         D ]  }t        |        t	        |d      rH|j
                  D ]8  }|j                  }t	        |d      r|`d|j                  v s,|j                  d= : |j                  }t	        |d      r|`d|j                  v s|j                  d=  | j                  j                          y )NFDArrayrP   )	fontNamesCharStringsvaluesrU   r.   rW   PrivaterP   rawDictGlobalSubrsclear)cfffontNamefontrJ   cfdpds          r   desubroutinizere   k   s    MM (8} 	(A$Q'	( 4#ll ,ZZ2w'bjj(

7+, Br7#H"**$JJw'%(( OOr   c                       e Zd Zd Zd Zd Zy)_MarkingT2Decompilerc                     t        j                  | |||       ||fD ]!  }|st        |d      rt               |_        # y )N_used)r   r   r.   r	   ri   )r   r   r   r    rS   s        r   r   z_MarkingT2Decompiler.__init__   s?    ##D*k7K +. 	$EWUG4!e	$r   c                     | j                   j                  j                  | j                  d   | j                  z          t        j                  | |       y r>   )r   ri   addr?   r@   r   rA   rL   s     r   rA   z _MarkingT2Decompiler.op_callsubr   s>    !!$"3"3B"7$.."HI&&tU3r   c                     | j                   j                  j                  | j                  d   | j                  z          t        j                  | |       y r>   )r   ri   rk   r?   rF   r   rG   rL   s     r   rG   z!_MarkingT2Decompiler.op_callgsubr   s@    ""4#4#4R#84??#JK''e4r   N)r   r   r   r   rA   rG   r   r   r   rg   rg      s    $45r   rg   c                   t    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y)_DehintingT2Decompilerc                       e Zd Zd Zy)_DehintingT2Decompiler.Hintsc                 X    d| _         d| _        d| _        d| _        d| _        g | _        y )NFr   )has_hint	last_hintlast_checkedstatushas_hintmask	deletions)r   s    r   r   z%_DehintingT2Decompiler.Hints.__init__   s4    
 "DMDN !"D DK %DDNr   N)r   r   r   r   r   r   r   Hintsrp      s    	 . 	r   rx   Nc                 R    || _         t        j                  | ||||       || _        y r   )_cssr   r   r    )r   cssr   r   nominalWidthXdefaultWidthXr    s          r   r   z_DehintingT2Decompiler.__init__   s-     	!!*k=-	
 r   c                 V   t        |d      r|j                  nd }| j                         |_        t        j                  | |       |j                  }|j
                  s|j                  r| j                  j                  |       |j                  dk7  rxt        |j                  t        |j                        dz
        D ]/  }t        |j                  |   t              r	d|_	         n	d|_	        1 t        |j                        |_        |r|j                   |j                   k(  sJ y y )N_hintsr$   r%   )r.   r   rx   r   r0   rr   rv   rz   rk   ru   rangert   lenr2   
isinstancestr__dict__)r   r8   	old_hintshintsis        r   r0   z_DehintingT2Decompiler.execute   s    )0X)FJ%%D	 JJL
  z2!!>>U//IIMM*%<<15--s:3E3E/F/JK %j003S9#$EL#$EL% "%Z%7%7!8E>>Y%7%7777 r   c                     | j                   | j                  d   | j                  z      }t        j                  | |       | j                  ||       y r>   )r   r?   r@   r   rA   rB   rC   s      r   rA   z"_DehintingT2Decompiler.op_callsubr   sD    t004t~~EF$$T51%r   c                     | j                   | j                  d   | j                  z      }t        j                  | |       | j                  ||       y r>   )r   r?   rF   r   rG   rB   rC   s      r   rG   z#_DehintingT2Decompiler.op_callgsubr   sF     1 1" 5 GH%%dE2%r   c                 R    t        j                  | |       | j                  |       y r   )r   op_hstemprocessHintrL   s     r   r   z_DehintingT2Decompiler.op_hstem        !!$.r   c                 R    t        j                  | |       | j                  |       y r   )r   op_vstemr   rL   s     r   r   z_DehintingT2Decompiler.op_vstem   r   r   c                 R    t        j                  | |       | j                  |       y r   )r   
op_hstemhmr   rL   s     r   r   z!_DehintingT2Decompiler.op_hstemhm        ##D%0r   c                 R    t        j                  | |       | j                  |       y r   )r   
op_vstemhmr   rL   s     r   r   z!_DehintingT2Decompiler.op_vstemhm   r   r   c                 T    t        j                  | |      }| j                  |       |S r   )r   r   processHintmaskr   r7   rvs      r   r   z"_DehintingT2Decompiler.op_hintmask   '    ))$6U#	r   c                 T    t        j                  | |      }| j                  |       |S r   )r   r   r   r   s      r   r   z"_DehintingT2Decompiler.op_cntrmask   r   r   c                 2   | j                   d   }|j                  }d|_        |j                  dk7  r\t	        |j
                  |dz
        D ](  }t        |j                  |   t              s!d|_         n d|_	        |dz   |_
        d|_        |dz   |_        y )Nr#   Tr$   r%   r   )r/   r   rv   ru   r   rt   r   r2   r   rr   rs   )r   r7   rJ   r   r   s        r   r   z&_DehintingT2Decompiler.processHintmask   s    r"		!<<15--uqy9 !bjjmS1#$EL! "&"'!) "QYr   c                 d    | j                   d   }|j                  }d|_        ||_        ||_        y )Nr#   T)r/   r   rr   rs   rt   )r   r7   rJ   r   s       r   r   z"_DehintingT2Decompiler.processHint  s1    r"		"r   c                 ,   | j                   d   }|j                  }|j                  }|j                  dk7  rKt        |j                  |dz
        D ](  }t        |j                  |   t              s!d|_         n ||_        |j                  dk7  r5|j                  rSd|_        |j                  dk(  r||_	        n5|dz
  |_	        n*|j                  dk(  r|j                  j                  |       t        |j                  |j                        |_        y )Nr#   r$   r%   Tr   )r/   r   ru   r   rt   r   r2   r   rr   rs   rw   rN   max)r   r7   rD   rJ   r   
subr_hintsr   s          r   rB   z"_DehintingT2Decompiler.processSubr  s    r"		[[
 <<15--uqy9 bjjmS1#$EL "'E<<1""!% $$)&+EO&+aiEO!#OO""5)5<<):):;r   r   )r   r   r   objectrx   r   r0   rA   rG   r   r   r   r   r   r   r   r   rB   r   r   r   rn   rn      sV     6 SW80&
&
    

'"#<r   rn   c                    | j                   }t        dt        |            D ]  }||   dk(  rZt        ||dz
     t              sJ |j
                  j                  ||dz
     |j                  z         |j                  z
  ||dz
  <   e||   dk(  snt        ||dz
     t              sJ |j
                  j                  ||dz
     |j                  z         |j                  z
  ||dz
  <    y )Nr%   r&   r'   )	r2   r   r   r   r5   ri   r7   	_old_bias	_new_bias)
charstringrS   gsubrspr   s        r   _cs_subset_subroutinesr   )  s    A1c!f Q4:aAh,,,{{((1q5EOO)CDuVAa!eHqT[ aAh,,,""1QU8f.>.>#>?&BRBR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                  j                  d       t        | d      r}| j                  | j                  j                  k7  rZ| j                  j                  J d       | j                  j                  d| j                  | j                  j                  z
         |j                  rSd}| j                  }|t        |      k  r7||   dv r|dz   t        |      k  sJ |||dz   = 1|dz  }|t        |      k  r7t        | j                        sJ | ` y )Nr$   r   r)   widthz5CFF2 CharStrings must not have an initial width value)hintmaskcntrmaskr%   )r   rw   r2   r3   rr   rs   rN   r.   r   r    r}   insertr|   rv   r   )r   r   r   r;   r   s        r   _cs_drop_hintsr   6  s   EEOO, 	!C#'C- 	! ~~??eoo9K&KKK'//0AB
!!%%i0:w':#5#5#C#CC &&44@KJK@""))z''**<*<*J*JJ #a&jt//1uA&a!a%iLFA #a&j z!!"""r   T)removeUnusedSubrsr   c          
         | j                         D ]O  }| |   }|j                  }t               }|j                         D ]  }|j	                          t        |j                  dg       }t        |||j                  |j                  j                  |j                  j                  |j                        }|j                  |       |j                  |_         |D ]  }	t        |	        ~g }
t        |d      r#|
j                  d |j                   D               n|
j#                  |j$                         |
D ]#  }dD ]  }t        ||      st'        ||d         % R |rt)        |        y y )NrP   rW   c              3   4   K   | ]  }|j                     y wr   )r[   .0rc   s     r   	<genexpr>zremove_hints.<locals>.<genexpr>  s     ?BRZZ?s   )
BlueValues
OtherBluesFamilyBluesFamilyOtherBlues	BlueScale	BlueShiftBlueFuzz	StemSnapH	StemSnapVStdHWStdVW	ForceBoldLanguageGroupExpansionFactor)keysrY   r	   rZ   rQ   rR   r    rn   r   r|   r}   r0   r   r   r.   extendrW   rN   r[   r,   remove_unused_subroutines)r_   r   fontnamera   rJ   r{   rb   rS   rT   r   	all_privsprivks                r   remove_hintsr   ^  s\   HHJ <+8}  e 	'AKKMAIIw3E/		''		''		J q! &&AG	'  	'J:&	' 	4#?$,,??T\\* 	+D +  4#D!T*#+	+U<+z !#& r   c                 r    t        | d      r+| j                  sd| j                  v r| j                  d= | `y y y )NrP   )r.   rP   r\   )private_dicts    r   _pd_delete_empty_subrsr     s?    |W%l.@.@l***$$W- /A%r   c                    | j                         D ]9  }| |   }|j                  }|j                         D ]K  }t        |j                  dg       }t        ||j                  |j                        }|j                  |       M |j                  g}t        |d      r#|j                  d |j                  D               nQt        |j                  d      r;|j                  j                  r%|j                  |j                  j                         t              }|D ]a  }t        |d      st               |_        t#        |j                         |_        t%        |      |_        t%        |j                         |_        c |j                         D ]0  }t        |j                  dd       }t+        |||j                         2 |D ]+  }||j                  k(  rt        |d      s-t        |j                  d      r|j                  j                  }npt        |d      r_t-        |j                        dk(  rGt        |j                  d   j                  d      r$|j                  d   j                  j                  }nd }n|}|j                   D 	cg c]  }	|j.                  |	    c}	|_        t        |d      r|`t        |d      r|`|j.                  D ]  }
t+        |
||j                          . t        |d      r'|j                  D ]  }t5        |j                          nt5        |j                         |D ]  }|`|`|`
 < y c c}	w )	NrP   rW   c              3      K   | ]F  }t        |j                  d       r.|j                  j                  r|j                  j                   H yw)rP   N)r.   r[   rP   r   s     r   r   z,remove_unused_subroutines.<locals>.<genexpr>  s<      2::w/BJJ4D4D 

  s   AAri   r%   r   fileoffsets)r   rY   rZ   rR   r    rg   r   r0   r]   r.   r   rW   r[   rP   rN   r	   ri   r   r   r   r   r   r   itemsr   r   r   )r_   r   ra   rJ   rb   rS   rT   	all_subrslocal_subrsr   rD   rc   s               r   r   r     s   HHJ G>8}  	"AAIIw3E-eQ]]AIINJq!	"
 %%&	4# ,, 
 T\\7+0B0BT\\//0E
  	8E5'*!e$U[[1EK*51EO*5;;7EO	8  	?AAIIw5E"1eT-=-=>	?
  	LE(((tY/GDLL'4R"&,,"4"4KD),DLL)Q.Q 7 7A #',,q/"9"9"?"?K"&K#38;;?a5;;q>?EKuf%Jui(M L&t[$:J:JKL-	L4 4#ll 3&rzz23 #4<<0  	>EU_eo	>MG>j @s   MN)fontTools.misc.psCharStringsr   r   r   r   	Exceptionr   r   rU   re   rg   rn   r   r   boolr   r   r   r   r   r   <module>r      s    	 	N?$6 N?b05- 5 S<- S<l
%P 48 ?'D ?'DH>r   