
    jkeI                        d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZmZ  G d dej                        Z e ej                  d	            d
        ZddZ e ej                  d	            d        Z e ej                  d	            d        Z eej(                        d        Z eej(                        d        Z G d dej                        Z G d dej0                        Z e ej                  d	            d        Zd Z e	de       e ej                  d	            d               Z e ej                  d	            d        Z e ej                  d	            d        Zy)    )psCharStrings)ttLib)NullPen)otRound)deprecateFunction)_add_method
_uniq_sortc                       e Zd Zd Zd Zy)_ClosureGlyphsT2Decompilerc                 T    t         j                  j                  | ||       || _        y N)r   SimpleT2Decompiler__init__
components)selfr   
localSubrsglobalSubrss       6/usr/lib/python3/dist-packages/fontTools/subset/cff.pyr   z#_ClosureGlyphsT2Decompiler.__init__
   s!    ((11$
KP$    c                     | j                         }t        |      dk\  rQddlm} |dd  \  }}}}||   }||   }	| j                  j                  |       | j                  j                  |	       y y )N   r   )StandardEncoding)popalllen$fontTools.encodings.StandardEncodingr   r   add)
r   indexargsr   adxadybcharachar	baseGlyphaccentGlyphs
             r   
op_endcharz%_ClosureGlyphsT2Decompiler.op_endchar   sn    {{}t9>M &*"#Y"CeU(/I*51KOO	*OO, r   N)__name__
__module____qualname__r   r&    r   r   r   r   	   s    %-r   r   zCFF c                    | j                   }t        |      dk(  sJ ||j                         d      }|j                  }|j                  }|rt               }|D ]K  }||vr||   }t        |j                  dg       }	t        ||	|j                        }
|
j                  |       M ||j                  z  }|j                  j                  |       |}|ry y )N   r   Subrs)cffr   keysCharStringsglyphssetgetattrprivater   r   executeupdate)r   sr.   fontglyphSet	decomposer   gglsubrs
decompilers              r   closure_glyphsr?      s    
((Cs8q==sxxz!}DHI
U
 	#A !BBJJ4E3Jr~~VJr"	# 	ahh
	
#	 r   c                    | j                   j                  |      \  }}|s|r|j                  |rg        y dg       y t        | d      r&| j                  | j                  |   j
                  }n| j
                  }|j                  }|j                  }t               }	|j                  |	       |j                  |k7  r|j                  |z
  dg|_        y dg|_        y )NendcharFDArray)r0   getItemAndSelector
setProgramhasattrrB   PrivatedefaultWidthXnominalWidthXr   drawwidthprogram)
r8   	glyphNameisCFF2ignoreWidthcfdSelectIndexr4   dfltWdXnmnlWdXpens
             r   _empty_charstringrT   3   s    ''::9EA}	6R3	{34#(@ll=199GllG''''i	s77g7*I6AI"AIr   c                 $   | j                   }|j                  d d |_        |j                  rC|j                  s7|j                  dkD  }|j                         D ]  }||   }t        |d|        |j                         D ]  }||   }d|_         y)Nr,   z.notdef)rM   r   T)r.   	fontNamesnotdef_glyphnotdef_outlinemajorr/   rT   Encoding)r   r8   optionsr.   rM   fontnames         r   prune_pre_subsetr]   G   s    
((CMM"1%CMG$:$:Q
 	>Hx=DdIf=	>
 HHJ +8}*+
 r   c                    | j                   }|j                         D ]  }||   }|j                  }|j                  j	                  |j
                        }|j                  D ]  }||vr|j                  |      \  }}	 |j                  rt        |j                        D 
cg c]  \  }
}||v s|
 }}
}|j                  }|D 
cg c]  }
|j                  |
    c}
|_        |`|`t        |d      r5|j                  }d |_        |D 
cg c]  }
|j"                  |
    c}
|_        i }t        |      D ](  \  }}|j                  |   }||j$                  v s$|||<   * ||_        n8|j$                  j                         D ci c]  \  }}||v s|| c}}|_        |j                  D cg c]	  }||v s| c}|_        t'        |j                        |_        |j*                  j,                  s|j.                  dkD  }|j
                  D ]  }t1        |||d         yc c}}
w c c}
w c c}
w c c}}w c c}w )NFDSelectr,   T)rM   rN   )r.   r/   r0   r1   unionglyphs_emptiedcharsetrC   charStringsAreIndexed	enumeratecharStringsIndexitemsfileoffsetsrE   r_   formatgidArraycharStringsr   	numGlyphsr[   retain_gidsrY   rT   )r   r7   r.   r\   r8   csr1   r;   rO   _iindicescsiselnewCharStrings
indicesIdx
charsetIdxvrM   s                      r   subset_glyphsrx   \   s   
((CHHJ #L8} 0 01  	,A((+DAq	,
 ##%.t||%<LTQVqLGL%%C/67!17CI#+tZ(mm!
9@AAQAN*3G*< 3&
JLL,&(2N1%3 ,BN/1~~/C/C/EUtq!fadUBN#'<<?a1;?T\\*99  YY]F%% L!$&dKLE#LJ 1 M7
  B V?s0   %H-2H-	H3H8	H=H=2	I<I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,   callsubr	callgsubr)	rK   ranger   
isinstanceint_usedr   	_old_bias	_new_bias)r   r=   gsubrsprp   s        r   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 )N   r   rA   rJ   z5CFF2 CharStrings must not have an initial width value)hintmaskcntrmaskr,   )_hints	deletionsrK   reversedhas_hint	last_hintappendrE   rJ   r4   rG   insertrH   has_hintmaskr   )r   hintsr   idxrp   s        r   
drop_hintsr      s   KKELLEOO, 	!C#'C- 	! ~~??eoo9K&KKK||EOO$56||LL	*4!zzT\\777 LL..:KJK:##AtzzDLL4N4N'NOLL#a&jt//1uA&a!a%iLFA #a&j t||r   c                       e Zd Zd Zd Zd Zy)_MarkingT2Decompilerc                     t         j                  j                  | |||       ||fD ]!  }|st        |d      rt	               |_        # y )Nr   )r   r   r   rE   r2   r   )r   r   r   r4   r=   s        r   r   z_MarkingT2Decompiler.__init__   sJ    ((11*k7	
 !+. 	$EWUG4!e	$r   c                     | j                   j                  j                  | j                  d   | j                  z          t
        j                  j                  | |       y N)r   r   r   operandStack	localBiasr   r   op_callsubrr   r   s     r   r   z _MarkingT2Decompiler.op_callsubr   sD    !!$"3"3B"7$.."HI((44T5Ar   c                     | j                   j                  j                  | j                  d   | j                  z          t
        j                  j                  | |       y r   )r   r   r   r   
globalBiasr   r   op_callgsubrr   s     r   r   z!_MarkingT2Decompiler.op_callgsubr   sF    ""4#4#4R#84??#JK((55dEBr   N)r'   r(   r)   r   r   r   r*   r   r   r   r      s    $BCr   r   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   )r   r   last_checkedstatusr   r   r   s    r   r   z%_DehintingT2Decompiler.Hints.__init__   s4    
 "DMDN !"D DK %DDNr   N)r'   r(   r)   r   r*   r   r   Hintsr      s    	 . 	r   r   Nc                 f    || _         t        j                  j                  | ||||       || _        y r   )_cssr   T2WidthExtractorr   r4   )r   cssr   r   rH   rG   r4   s          r   r   z_DehintingT2Decompiler.__init__   s3     	&&//*k=-	
 r   c                 j   t        |d      r|j                  nd }| j                         |_        t        j                  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 )Nr   r   r,   )rE   r   r   r   r   r5   r   r   r   r   r   r|   r   r   rK   r}   str__dict__)r   
charString	old_hintsr   rp   s        r   r5   z_DehintingT2Decompiler.execute   s    )0X)FJ%%D	 JJL
&&..tZ@!!>>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                  | |       | j                  ||       y r   )r   r   r   r   r   r   processSubrr   r   subrs      r   r   z"_DehintingT2Decompiler.op_callsubr
  sJ    t004t~~EF&&224?%r   c                     | j                   | j                  d   | j                  z      }t        j                  j                  | |       | j                  ||       y r   )r   r   r   r   r   r   r   r   s      r   r   z#_DehintingT2Decompiler.op_callgsubr  sL     1 1" 5 GH&&33D%@%r   c                 f    t         j                  j                  | |       | j                  |       y r   )r   r   op_hstemprocessHintr   s     r   r   z_DehintingT2Decompiler.op_hstem  &    &&//e<r   c                 f    t         j                  j                  | |       | j                  |       y r   )r   r   op_vstemr   r   s     r   r   z_DehintingT2Decompiler.op_vstem  r   r   c                 f    t         j                  j                  | |       | j                  |       y r   )r   r   
op_hstemhmr   r   s     r   r   z!_DehintingT2Decompiler.op_hstemhm  &    &&11$>r   c                 f    t         j                  j                  | |       | j                  |       y r   )r   r   
op_vstemhmr   r   s     r   r   z!_DehintingT2Decompiler.op_vstemhm   r   r   c                 h    t         j                  j                  | |      }| j                  |       |S r   )r   r   op_hintmaskprocessHintmaskr   r   rvs      r   r   z"_DehintingT2Decompiler.op_hintmask$  -    ++77eDU#	r   c                 h    t         j                  j                  | |      }| j                  |       |S r   )r   r   op_cntrmaskr   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   )callingStackr   r   r   r|   r   r}   rK   r   r   r   )r   r   rn   r   rp   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   r   r   r   )r   r   rn   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   r   r|   r   r}   rK   r   r   r   r   r   max)r   r   r   rn   r   
subr_hintsrp   s          r   r   z"_DehintingT2Decompiler.processSubrF  s    r"		[[
 <<15--uqy9 bjjmS1#$EL "'E<<1""!% $$)&+EO&+aiEO!#OO""5)5<<):):;r   r   )r'   r(   r)   objectr   r   r5   r   r   r   r   r   r   r   r   r   r   r   r*   r   r   r   r      sV     6 SW80&
&
    

'"#<r   r   c                 .   | j                   }|j                         D ]  }||   }|j                  }t        |d      s!|j                  }t        |j                        }|j                  D 	cg c]  }	|j                  |	       c}	|_        |j                  }
|D cg c]  }|
|   	 c}|
_	        |
`
|
` |j                  r|j                          |j                  s| j                          y|j                  s| j                          yc c}	w c c}w )Nr_   T)r.   r/   r0   rE   r_   r	   rj   r   rB   rf   rg   rh   desubroutinizehintingremove_hintsremove_unused_subroutines)r   ttfFontr[   r.   r\   r8   rn   rs   rq   ssarrrp   s               r   prune_post_subsetr   d  s    
((CHHJ &8} 4$--C .G8;E"GMM"-ECL,,C)01AQ1CI#+&  ??  ##&&( F1s   -DDc                 r    t        | d      r+| j                  sd| j                  v r| j                  d= | `y y y )Nr-   )rE   r-   rawDict)private_dicts    r   _delete_empty_subrsr     s?    |W%l.@.@l***$$W- /A%r   z)use 'CFFFontSet.desubroutinize()' instead)categoryc                 8    | j                   j                          y r   )r.   r   r   s    r   r   r     s    
 	HHr   c           
      ,   | j                   }|j                         D ]d  }||   }|j                  }t               }|j                  D ]  }|j                  |      \  }}|j                          t        |j                  dg       }	t        ||	|j                  |j                  j                  |j                  j                  |j                        }
|
j                  |       |
j                  |_         |D ]  }|j                           ~g }t!        |d      r#|j#                  d |j$                  D               n|j'                  |j(                         |D ]#  }dD ]  }t!        ||      st+        ||d         % g | j-                          y )Nr-   rB   c              3   4   K   | ]  }|j                     y wr   )rF   .0fds     r   	<genexpr>zremove_hints.<locals>.<genexpr>  s     ?BRZZ?s   )
BlueValues
OtherBluesFamilyBluesFamilyOtherBlues	BlueScale	BlueShiftBlueFuzz	StemSnapH	StemSnapVStdHWStdVW	ForceBoldLanguageGroupExpansionFactor)r.   r/   r0   r2   rb   rC   	decompiler3   r4   r   r   rH   rG   r5   rJ   r   rE   extendrB   r   rF   setattrr   )r   r.   r\   r8   rn   r   r;   rO   ro   r=   r>   
charstring	all_privsprivks                  r   r   r     sw   
((CHHJ =+8}  e 	'A((+DAqKKMAIIw3E/		''		''		J q! &&AG	'  	$J!!#	$ 	4#?$,,??T\\* 	+D +  4#D!T*#+	+W=+| 	""$r   c                 b   | j                   }|j                         D ]
  }||   }|j                  }|j                  D ]_  }|j	                  |      \  }}t        |j                  dg       }t        ||j                  |j                        }	|	j                  |       a |j                  g}
t        |d      r#|
j                  d |j                  D               nQt        |j                  d      r;|j                  j                  r%|
j!                  |j                  j                         t#              }|
D ]u  }t        |d      st#               |_        t'        |j$                        |_        t)        j*                  |      |_        t)        j*                  |j$                        |_        w |j                  D ]I  }|j	                  |      \  }}t        |j                  dd       }|j1                  ||j                         K |
D ]  }||j                  k(  r<t        |d      s-t        |j                  d      r|j                  j                  }nd }n|}|j$                  D cg c]  }|j2                  |    c}|_        t        |d      r|`t        |d      r|`|j2                  D ]  }|j1                  ||j                            t        |d      r'|j                  D ]  }t9        |j                          nt9        |j                         |
D ]  }|`|`|`
  y c c}w )Nr-   rB   c              3      K   | ]F  }t        |j                  d       r.|j                  j                  r|j                  j                   H yw)r-   N)rE   rF   r-   r   s     r   r   z,remove_unused_subroutines.<locals>.<genexpr>  s<      2::w/BJJ4D4D 

  s   AAr   rg   rh   )r.   r/   r0   rb   rC   r3   r4   r   r   r5   GlobalSubrsrE   r   rB   rF   r-   r   r2   r   r	   r   calcSubrBiasr   r   r   rf   rg   rh   r   )r   r.   r\   r8   rn   r;   rO   ro   r=   r>   	all_subrslocal_subrsrp   r   r   s                  r   r   r     s   
((CHHJ B>8}  	"A((+DAqAIIw3E-eQ]]AIINJq!		" %%&	4# ,, 
 T\\7+0B0BT\\//0E
  	FE5'*!e$U[[1EK+88?EO+88EEO	F  	:A((+DAqAIIw5E  (8(89	:  	GE(((tY/GDLL'4R"&,,"4"4K"&K#38;;?a5;;q>?EKuf%Jui(M G''T5E5EFG	G& 4#ll 0#BJJ/0  -  	>EU_eo	>CB>` @s   *L,N)F) fontTools.miscr   	fontToolsr   fontTools.pens.basePenr   fontTools.misc.roundToolsr   fontTools.misc.loggingToolsr   fontTools.subset.utilr   r	   r   r   getTableClassr?   rT   r]   rx   T2CharStringr   r   r   r   r   r   r   DeprecationWarningr   r   r   r*   r   r   <module>r     s   (  * - 9 9-!A!A -&  U  () *,$(  U  () *(  U  ()' *'T ]''(
 )
 ]''(# )#LC=;; C$S<];; S<l  U  () *6 /:L  U  () *  U  ()@% *@%F  U  ()D> *D>r   