
    gC                         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y)    )SimpleT2DecompilerT2WidthExtractorcalcSubrBiasc                 *    t        t        |             S N)sortedset)ls    s/home/viktor/gitlab-persoonlijk/factuur-applicatie/venv/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                   D ]   }| |   }|j                  }|j                         D ]n  }|j                          t	        |j
                  dg       }t        ||j                  |j
                        }|j                  |       |j                  |_
        |`	p 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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   s#   MM (8} 	#AKKMAIIw3E6uammQYYWJq!**AI"	# 4#ll ,ZZ2w'bjj(

7+, Br7#H"**$JJw'/(2 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	   rg   )r   r   r   r    r_   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   rg   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   rg   ri   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   re   re   ~   s    $45r   re   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   Hintsrn      s    	 . 	r   rv   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}   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)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}   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 !bjjmS1#$EL! "&"'!) "QYr   c                 d    | j                   d   }|j                  }d|_        ||_        ||_        y )Nr#   T)r/   r}   rp   rq   rr   )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}   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 bjjmS1#$EL "'E<<1""!% $$)&+EO&+aiEO!#OO""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      sV     6 SW80&
&
    

'"#<r   rl   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   rg   r7   	_old_bias	_new_bias)
charstringr_   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}   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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   rQ   c              3   4   K   | ]  }|j                     y wr   )rW   .0ra   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)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\   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   rX   )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   rQ   c              3      K   | ]F  }t        |j                  d       r.|j                  j                  r|j                  j                   H yw)rP   N)r.   rW   rP   r   s     r   r   z,remove_unused_subroutines.<locals>.<genexpr>  s<      2::w/BJJ4D4D 

  s   AArg   r%   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   itemsr   r   r   )r[   r   r]   rJ   r^   r_   r`   	all_subrslocal_subrsr   rD   ra   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   rc   re   rl   r   r   boolr   r   r   r   r   r   <module>r      sz    	 	N?$6 N?b:5- 5 S<- S<l
%P 48 ?'D ?'DH>r   