o
    tBh>                     @   sn  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 d dlmZmZ G dd	 d	ejZeed
dd Zd)ddZeed
dd Zeed
dd Zeejdd Zeejdd ZG dd dejZG dd dejZeed
dd Zdd Ze	d ed!eed
d"d# Zeed
d$d% Z eed
d&d' Z!d(S )*    )psCharStrings)ttLib)NullPen)otRound)deprecateFunction)VarStoreInstancer)_add_method
_uniq_sortc                   @   s   e Zd Zdd Zdd ZdS )_ClosureGlyphsT2Decompilerc                 C   s   t j| || || _d S N)r   SimpleT2Decompiler__init__
components)selfr   
localSubrsglobalSubrs r   k/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/fontTools/subset/cff.pyr      s
   
z#_ClosureGlyphsT2Decompiler.__init__c           
      C   sd   |   }t|dkr0ddlm} |dd  \}}}}|| }|| }	| j| | j|	 d S d S )N   r   )StandardEncoding)popalllen$fontTools.encodings.StandardEncodingr   r   add)
r   indexargsr   adxadybcharachar	baseGlyphaccentGlyphr   r   r   
op_endchar   s   z%_ClosureGlyphsT2Decompiler.op_endcharN)__name__
__module____qualname__r   r#   r   r   r   r   r
   
   s    r
   zCFF c                 C   s   | j }t|dksJ || d  }|j}|j}|rPt }|D ]}||vr'q || }t|jdg }	t||	|j	}
|

| q ||j8 }|j| |}|sd S d S )N   r   Subrs)cffr   keysCharStringsglyphssetgetattrprivater
   r   executeupdate)r   sr)   fontglyphSet	decomposer   gglsubrs
decompilerr   r   r   closure_glyphs   s$   
r:   Fc           
      C   s   | j |\}}|s|r||rg  d S dg d S t| dr,| jd ur,| j| j}n| j}|j}|j}t }	|	|	 |j
|krL|j
| dg|_d S dg|_d S )NendcharFDArray)r+   getItemAndSelector
setProgramhasattrr<   PrivatedefaultWidthXnominalWidthXr   drawwidthprogram)
r3   	glyphNameisCFF2ignoreWidthcfdSelectIndexr/   dfltWdXnmnlWdXpenr   r   r   _empty_charstring4   s   

rN   c                 C   sp   | j }|jd d |_|jr(|js(|jdk}| D ]}|| }t|d|d q| D ]	}|| }d|_q,dS )Nr'   z.notdef)rG   r   T)r)   	fontNamesnotdef_glyphnotdef_outlinemajorr*   rN   Encoding)r   r3   optionsr)   rG   fontnamer   r   r   prune_pre_subsetG   s   
rV   c                    sf  | j }| D ]}|| }|j}|j|j|jD ]}|vr!q||\}}q|jr{fddt	|jD }	|j
  fdd|	D  _ ` `t|dr^|jd_fdd|	D _i }
t	|	D ]\}}|j| }||jv rv||
|< qd|
|_nfdd|j D |_fd	d|jD |_t|j|_|jjr|jd
k}|jD ]
}t|||dd qqdS )Nc                    s   g | ]
\}}| v r|qS r   r   ).0ir6   r,   r   r   
<listcomp>j   s    z!subset_glyphs.<locals>.<listcomp>c                       g | ]} j | qS r   itemsrW   rX   )csir   r   rZ   l       FDSelect   c                    r[   r   )gidArrayr^   )selr   r   rZ   y   r`   c                    s   i | ]\}}| v r||qS r   r   )rW   r6   vrY   r   r   
<dictcomp>   s
    z!subset_glyphs.<locals>.<dictcomp>c                    s   g | ]}| v r|qS r   r   )rW   r6   rY   r   r   rZ      s    r'   T)rG   rH   )r)   r*   r+   r,   unionglyphs_emptiedcharsetr=   charStringsAreIndexed	enumeratecharStringsIndexr]   fileoffsetsr?   ra   formatrc   charStringsr   	numGlyphsrT   retain_gidsrR   rN   )r   r2   r)   rU   r3   csr6   rI   _indicesnewCharStrings
indicesIdx
charsetIdxrG   r   )r_   r,   rd   r   subset_glyphs[   sF   


	




ry   c                 C   s   | j }tdt|D ]M}|| dkr2t||d  tsJ |j||d  |j |j ||d < q
|| dkrWt||d  tsCJ |j||d  |j |j ||d < q
d S )Nr'   callsubr	callgsubr)	rE   ranger   
isinstanceint_usedr   	_old_bias	_new_bias)r   r8   gsubrsprX   r   r   r   subset_subroutines   s   *(r   c                 C   s.  | j }|jr| j}t|jD ]	}||d |= q|jr\|jr(|j|jd ks(J | j|jd  | _| js:| jd t| dr\| j| j	j
kr\| j	j
d usPJ d| jd| j| j	j  |jrd}| j}|t|k r|| dv r|d t|kszJ |||d = qd|d7 }|t|k sjt| jsJ | ` d S )N   r   r;   rD   z5CFF2 CharStrings must not have an initial width value)hintmaskcntrmaskr'   )_hints	deletionsrE   reversedhas_hint	last_hintappendr?   rD   r/   rA   insertrB   has_hintmaskr   )r   hintsr   idxrX   r   r   r   
drop_hints   s4   
r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )_MarkingT2Decompilerc                 C   s:   t j| ||| ||fD ]}|rt|dst |_qd S )Nr   )r   r   r   r?   r-   r   )r   r   r   r/   r8   r   r   r   r      s   z_MarkingT2Decompiler.__init__c                 C   ,   | j j| jd | j  tj| | d S N)r   r   r   operandStack	localBiasr   r   op_callsubrr   r   r   r   r   r         z _MarkingT2Decompiler.op_callsubrc                 C   r   r   )r   r   r   r   
globalBiasr   r   op_callgsubrr   r   r   r   r      r   z!_MarkingT2Decompiler.op_callgsubrN)r$   r%   r&   r   r   r   r   r   r   r   r      s    	r   c                   @   s   e Zd ZG dd deZdddZdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )_DehintingT2Decompilerc                   @   s   e Zd Zdd ZdS )z_DehintingT2Decompiler.Hintsc                 C   s(   d| _ d| _d| _d| _d| _g | _d S )NFr   )r   r   last_checkedstatusr   r   r   r   r   r   r      s   
z%_DehintingT2Decompiler.Hints.__init__N)r$   r%   r&   r   r   r   r   r   Hints   s    r   Nc                 C   s$   || _ tj| |||| || _d S r   )_cssr   T2WidthExtractorr   r/   )r   cssr   r   rB   rA   r/   r   r   r   r      s
   

z_DehintingT2Decompiler.__init__c                 C   s   t |dr|jnd }|  |_tj| | |j}|js|jr%| j	| |j
dkrNt|jt|jd D ]}t|j| trDd|_
 nd|_
q5t|j|_|rX|j|jksZJ d S d S )Nr   r   r'   )r?   r   r   r   r   r0   r   r   r   r   r   r|   r   r   rE   r}   str__dict__)r   
charString	old_hintsr   rX   r   r   r   r0      s"   

z_DehintingT2Decompiler.executec                 C   4   | j | jd | j  }tj| | | || d S r   )r   r   r   r   r   r   processSubrr   r   subrr   r   r   r        z"_DehintingT2Decompiler.op_callsubrc                 C   r   r   )r   r   r   r   r   r   r   r   r   r   r   r     r   z#_DehintingT2Decompiler.op_callgsubrc                 C      t j| | | | d S r   )r   r   op_hstemprocessHintr   r   r   r   r        z_DehintingT2Decompiler.op_hstemc                 C   r   r   )r   r   op_vstemr   r   r   r   r   r     r   z_DehintingT2Decompiler.op_vstemc                 C   r   r   )r   r   
op_hstemhmr   r   r   r   r   r     r   z!_DehintingT2Decompiler.op_hstemhmc                 C   r   r   )r   r   
op_vstemhmr   r   r   r   r   r     r   z!_DehintingT2Decompiler.op_vstemhmc                 C      t j| |}| | |S r   )r   r   op_hintmaskprocessHintmaskr   r   rvr   r   r   r   !     
z"_DehintingT2Decompiler.op_hintmaskc                 C   r   r   )r   r   op_cntrmaskr   r   r   r   r   r   %  r   z"_DehintingT2Decompiler.op_cntrmaskc                 C   st   | j d }|j}d|_|jdkr3t|j|d D ]}t|j| tr'd|_ nqd|_	|d |_
d|_|d |_d S )Nr   Tr   r'   r   )callingStackr   r   r   r|   r   r}   rE   r   r   r   )r   r   rs   r   rX   r   r   r   r   *  s   


z&_DehintingT2Decompiler.processHintmaskc                 C   s&   | j d }|j}d|_||_||_d S )Nr   T)r   r   r   r   r   )r   r   rs   r   r   r   r   r   ;  s
   

z"_DehintingT2Decompiler.processHintc                 C   s   | j d }|j}|j}|jdkr+t|j|d D ]}t|j| tr'd|_ nq||_|jdkrE|jrDd|_|jdkr?||_	n|d |_	n|jdkrP|j
| t|j|j|_d S )Nr   r   r'   Tr   )r   r   r   r|   r   r}   rE   r   r   r   r   r   max)r   r   r   rs   r   
subr_hintsrX   r   r   r   r   B  s(   





z"_DehintingT2Decompiler.processSubrr   )r$   r%   r&   objectr   r   r0   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s    
r   c                    s   | j }| D ]2}|| }|j}t|dr9|j}t|jfdd|jD |_|j  fddD  _ `	 `
q|jrA|  |jsJ|   dS |jsQ|   dS )Nra   c                    s   g | ]}  |qS r   )r   )rW   ss)ru   r   r   rZ   k  r`   z%prune_post_subset.<locals>.<listcomp>c                    s   g | ]} | qS r   r   r^   )arrr   r   rZ   m  s    T)r)   r*   r+   r?   ra   r	   rc   r<   r]   rm   rn   desubroutinizehintingremove_hintsremove_unused_subroutines)r   ttfFontrT   r)   rU   r3   rs   rd   r   )r   ru   r   prune_post_subset`  s(   

r   c                 C   s2   t | dr| jsd| jv r| jd= | `d S d S d S )Nr(   )r?   r(   rawDict)private_dictr   r   r   _delete_empty_subrs|  s
   
r   z)use 'CFFFontSet.desubroutinize()' instead)categoryc                 C   s   | j   d S r   )r)   r   r   r   r   r   r     s   r   c              	   C   s  | j }| D ]t}|| }|j}t }|jD ],}||\}}|  t|jdg }	t	||	|j
|jj|jj|j}
|
| |
j|_q|D ]}|  qE~g }t|dr`|dd |jD  n||j |D ]}dD ]}t||ryt||d  qlqhq|   d S )Nr(   r<   c                 s   s    | ]}|j V  qd S r   )r@   rW   fdr   r   r   	<genexpr>  s    zremove_hints.<locals>.<genexpr>)
BlueValues
OtherBluesFamilyBluesFamilyOtherBlues	BlueScale	BlueShiftBlueFuzz	StemSnapH	StemSnapVStdHWStdVW	ForceBoldLanguageGroupExpansionFactor)r)   r*   r+   r-   ri   r=   	decompiler.   r/   r   r   rB   rA   r0   rD   r   r?   extendr<   r   r@   setattrr   )r   r)   rU   r3   rs   r   r6   rI   rt   r8   r9   
charstring	all_privsprivkr   r   r   r     s>   






r   c                    s   | j }| D ]}|| }|j}|jD ]}||\}}t|jdg  t |j|j}|	| q|j
g}	t|drF|	dd |jD  nt|jdrW|jjrW|	|jj t  |	D ] t dsht  _t j _t  _t j _q]|jD ]}||\}}t|jdg  | |j
 q|	D ]B  |j
krt|dst|jdr|jj}
ng }
n }
 fdd jD  _t drǈ `t d	rΈ ` jD ]	}||
|j
 qqt|dr|jD ]}t|j qnt|j |	D ]  ` ` `qqd S )
Nr(   r<   c                 s   s,    | ]}t |jd r|jjr|jjV  qdS )r(   N)r?   r@   r(   r   r   r   r   r     s   * z,remove_unused_subroutines.<locals>.<genexpr>r   c                    r[   r   r\   r^   r8   r   r   rZ     r`   z-remove_unused_subroutines.<locals>.<listcomp>rm   rn   )r)   r*   r+   ri   r=   r.   r/   r   r   r0   GlobalSubrsr?   r   r<   r@   r(   r   r-   r   r	   r   calcSubrBiasr   r   r   r]   rm   rn   r   )r   r)   rU   r3   rs   r6   rI   rt   r9   	all_subrslocal_subrsr   r   r   r   r   r     s`   











r   N)F)"fontTools.miscr   	fontToolsr   fontTools.pens.basePenr   fontTools.misc.roundToolsr   fontTools.misc.loggingToolsr   fontTools.varLib.varStorer   fontTools.subset.utilr   r	   r   r
   getTableClassr:   rN   rV   ry   T2CharStringr   r   r   r   r   r   r   DeprecationWarningr   r   r   r   r   r   r   <module>   s@    



4


# 


4