
    jke,                        d Z ddlmZ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 dd	lmZ dd
lmZmZ  G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      ZdddZy)zGlyphSets returned by a TTFont.    )ABCabstractmethod)Mapping)contextmanager)copy)SimpleNamespace)otRound)deprecateFunction)	Transform)TransformPenTransformPointPenc                   t    e Zd ZdZdddZedefd       Zed        Zd Z	d	 Z
d
 Z ede      d        Zy)_TTGlyphSetzlGeneric dict-like GlyphSet class that pulls metrics from hmtx and
    glyph shape from TrueType or CFF.
    TrecalcBoundsc                p   || _         || _        d| j                  v r2| j                  d   j                  D ci c]  }|j                  d c}ni | _        ||ni | _        i | _        ||ni | _        d| _        g | _	        g | _
        || _        |d   j                  | _        t        |j                  d      dd       | _        d | _        |reddlm} t        |j                  d      dd       | _        | j"                  1 || j"                  j(                  |d   j                  |      | _        y y y c c}w )	Nfvarr   hmtxvmtxmetricsVarStoreInstancerHVARtable)r   fontaxesaxisTagdefaultLocationNormalizedlocationrawLocationoriginalLocationdepthlocationStackrawLocationStackglyphsMappingr   hMetricsgetattrgetvMetrics	hvarTablefontTools.varLib.varStorer   VarStorehvarInstancer)selfr   r   r%   r   axisr   s          </usr/lib/python3/dist-packages/fontTools/ttLib/ttGlyphSet.py__init__z_TTGlyphSet.__init__   s)   (	 " *.6):)?)?@T\\1_@ 	&
 %-$8b,4,@b
 "*V,, 0)TBC$TXXf%5wEDN~~)%6NN++T&\->->&" *	  As   D3resetc              #     K   | j                   j                  | j                         | j                  j                  | j                         |r?| j
                  j                         | _        | j                  j                         | _        n&| j                  j                         | _        i | _        | j                  j                  |       | j                  j                  |       	 d  | j                   j                         | _        | j                  j                         | _        y # | j                   j                         | _        | j                  j                         | _        w xY wwN)
r#   appendr   r$   r    r!   r   r   updatepop)r.   r   r2   s      r0   pushLocationz_TTGlyphSet.pushLocation0   s    !!$--0$$T%5%56 11668DM#==BBDD MM..0DM!DX&)	;J ..224DM#4488:D !..224DM#4488:Ds   C(E1+D. /?E1.A E..E1c              #      K   	 | j                   }| xj                   dz  c_         | | xj                   dz  c_         y # | xj                   dz  c_         w xY ww)N   )r"   )r.   r"   s     r0   	pushDepthz_TTGlyphSet.pushDepthC   s@     	JJEJJ!OJKJJ!OJDJJ!OJs   A%? AAAc                     || j                   v S r4   r%   r.   	glyphNames     r0   __contains__z_TTGlyphSet.__contains__L   s    D....    c                 H    t        | j                  j                               S r4   )iterr%   keysr.   s    r0   __iter__z_TTGlyphSet.__iter__O   s    D&&++-..rA   c                 ,    t        | j                        S r4   )lenr%   rE   s    r0   __len__z_TTGlyphSet.__len__R   s    4%%&&rA   z#use 'glyphName in glyphSet' instead)categoryc                     || j                   v S r4   r=   r>   s     r0   has_keyz_TTGlyphSet.has_keyU   s     D....rA   N)__name__
__module____qualname____doc__r1   r   boolr8   r;   r@   rF   rI   r
   DeprecationWarningrL    rA   r0   r   r      sp     GK 8 ;D ; ;$  //' -8J//rA   r   c                   &     e Zd Zd fd	Zd Z xZS )_TTGlyphSetGlyfc                     |d   | _         t        | 	  ||| j                   |       |j                  d      | _        y )Nglyfr   gvar)	glyfTablesuperr1   r(   	gvarTable)r.   r   r   r   	__class__s       r0   r1   z_TTGlyphSetGlyf.__init__]   s8    fxlS&)rA   c                 2    t        | || j                        S )Nr   )_TTGlyphGlyfr   r>   s     r0   __getitem__z_TTGlyphSetGlyf.__getitem__b   s    D)$:K:KLLrA   )TrM   rN   rO   r1   r_   __classcell__r\   s   @r0   rU   rU   \   s    *
MrA   rU   c                   $     e Zd Z fdZd Z xZS )_TTGlyphSetCFFc                 t   d|v rdnd}t        ||   j                  j                               d   j                  | _        t
        |   ||| j                         d | _        |rSddlm	} t        | j                  dd       }|3 ||j                  |d   j                  |      }|j                  | _        y y y )NCFF2zCFF r   r   varStorer   )listcffvaluesCharStringscharStringsrZ   r1   blenderr+   r   r'   
otVarStorer   interpolateFromDeltas)r.   r   r   tableTagr   rg   	instancerr\   s          r0   r1   z_TTGlyphSetCFF.__init__g   s    #t^6X 2 2 9 9 ;<Q?KKx)9)9:Ct//TBH#-''f):):H	  )>>	 $	 rA   c                     t        | |      S r4   )_TTGlyphCFFr>   s     r0   r_   z_TTGlyphSetCFF.__getitem__v   s    4++rA   r`   rb   s   @r0   rd   rd   f   s    ?,rA   rd   c                   2    e Zd ZdZdddZed        Zd Zy)_TTGlyphaS  Glyph object that supports the Pen protocol, meaning that it has
    .draw() and .drawPoints() methods that take a pen object as their only
    argument. Additionally there are 'width' and 'lsb' attributes, read from
    the 'hmtx' table.

    If the font contains a 'vmtx' table, there will also be 'height' and 'tsb'
    attributes.
    Tr   c                   || _         || _        || _        |j                  |   \  | _        | _        |j                  |j                  |   \  | _        | _        nd\  | _        | _        |j                  r|j                  w|j                  j                  |j                  j                  |      n"|j                  j                  j                  |   }| xj                  |j                  |   z  c_        y y y )NNN)glyphSetnamer   r&   widthlsbr)   heighttsbr   r*   AdvWidthMapr   
getGlyphIDmappingr-   )r.   rx   r?   r   varidxs        r0   r1   z_TTGlyph.__init__   s     	('00;
DH($,$5$5i$@!DK$.!DK!3!3!? %%119 ((3''33;;IF 
 JJ(0088J "@rA   c                     t         )dDraw the glyph onto ``pen``. See fontTools.pens.basePen for details
        how that works.
        )NotImplementedErrorr.   pens     r0   drawz_TTGlyph.draw   s
    
 "!rA   c                 >    ddl m} | j                   ||             y)eDraw the glyph onto ``pen``. See fontTools.pens.pointPen for details
        how that works.
        r   )SegmentToPointPenN)fontTools.pens.pointPenr   r   )r.   r   r   s      r0   
drawPointsz_TTGlyph.drawPoints   s     	>		#C()rA   N)rM   rN   rO   rP   r1   r   r   r   rS   rA   r0   ru   ru   z   s+     =A 9$ " "*rA   ru   c                   *    e Zd Zd Zd Zd Zd Zd Zy)r^   c                 8   | j                         \  }}| j                  j                         5 }|rd}|j                         r| j	                  ||d       	 ddd       y|j                  || j                  j                  |       ddd       y# 1 sw Y   yxY w)r   r   FN)_getGlyphAndOffsetrx   r;   isVarComposite_drawVarCompositer   rY   r.   r   glyphoffsetr"   s        r0   r   z_TTGlyphGlyf.draw   s     //1v]]$$& 	=%##%&&uc59	= 	= JJsDMM33V<	= 	= 	=   )B 'BBc                 8   | j                         \  }}| j                  j                         5 }|rd}|j                         r| j	                  ||d       	 ddd       y|j                  || j                  j                  |       ddd       y# 1 sw Y   yxY w)r   r   TN)r   rx   r;   r   r   r   rY   r   s        r0   r   z_TTGlyphGlyf.drawPoints   s     //1v]]$$& 	C%##%&&uc48	C 	C S$--"9"96B	C 	C 	Cr   c                 |   ddl m}m} |j                  D ]  }| j                  j                  |j                  |j                  |j                  z        5  	 |j                  |j                  |j                  | j                  j                         d d d         y # t        $ r |j                  j                         }|r5t        ||      }| j                  |j                     j!                  |       n4t#        ||      }| j                  |j                     j%                  |       Y w xY w# 1 sw Y   &xY w)Nr   )VarComponentFlagsVAR_COMPONENT_TRANSFORM_MAPPING)fontTools.ttLib.tables._g_l_y_fr   r   
componentsrx   r8   r   flagsRESET_UNSPECIFIED_AXESaddVarComponentr?   	transformr    AttributeErrortoTransformr   r   r   r   )	r.   r   r   
isPointPenr   r   compttPens	            r0   r   z_TTGlyphGlyf._drawVarComposite   s   	

 $$ 	AD++tzz,=,T,TT AA''8Q8Q	A A	A & A224A!0a8dnn5@@F+C3dnn5::4@AA As+   D1;BBD.+D1-D..D11D;	c                    | j                   j                  r'| j                   j                  | j                         }n#| j                   j                  | j
                     }t        |d      r| j                  |j                  z
  nd}||fS )NxMinr   )	rx   r   r[   _getGlyphInstancerY   ry   hasattrr{   r   )r.   r   r   s      r0   r   z_TTGlyphGlyf._getGlyphAndOffset   sk    ==!!dmm&=&=&I**,EMM++DII6E*1%*@EJJ&af}rA   c           	         ddl m} ddlm} ddlm} | j                  }|j                  }|j                  j                  | j                     }|j                  }|j                  }|j                  | j                  ||      \  }	}
d\  }}|D ]  } ||j                  |j                        }|s#|j                   }d |v rY|M|j                  | j                  ||      \  }}|d   dk\  r|d   nt#        t%        t'        |d                     } ||||      }|	 ||      |z  z  }	 t)        || j                           }t+        ||	|| j,                        \  }}}}|| _        || _        |j2                  || _        || _        |S )Nr   )	iup_delta)GlyphCoordinates)supportScalarrw   r:   r   )fontTools.varLib.iupr   r   r   fontTools.varLib.modelsr   rx   rY   r[   
variationsry   r&   r)   _getCoordinatesAndControlsr   r   coordinatesrh   rangerH   r   _setCoordinatesr   r{   r}   r*   rz   r|   )r.   r   r   r   rx   rY   r   r&   r)   r   _
origCoordsendPtsvarscalardeltacontrolr   rz   r{   r|   r}   s                         r0   r   z_TTGlyphGlyf._getGlyphInstance   s   2D9==&&	''22499=
$$$$"==IIx
Q (
F 	<C"8#4#4chh?FOOEu}%*3*N*N		8X+'J '.ajAo
4c'RS*o@V;W  "%V<+E2V;;K	<  Ytyy)*"1;	8I8I#
sFC %DJ DKrA   N)rM   rN   rO   r   r   r   r   r   rS   rA   r0   r^   r^      s    = C A.(rA   r^   c                       e Zd Zd Zy)rs   c                     | j                   j                  | j                     j                  || j                   j                         y)r   N)rx   rl   ry   r   rm   r   s     r0   r   z_TTGlyphCFF.draw  s1     	!!$)),11#t}}7L7LMrA   N)rM   rN   rO   r   rS   rA   r0   rs   rs     s    NrA   rs   Tr   c                   t        |      dk\  sJ |d   d   }|d   d   }|d   d   }|d   d   }t        d      D ]  }|d=  | j                         rt        |      t        | j                        k(  sJ | j                  D 	cg c]  }	t	        |	       c}	| _        t        || j                        D ]!  \  }
}	t        |	d      s|
\  |	_        |	_        # n| j                         rN| j                  D 	cg c]  }	t	        |	       c}	| _        | j                  D ]  }	|	j                  |      } |rKJ | j                  dk(  rt        |      dk(  s,J t        |      t        | j                        k(  sJ || _        |r| j                  |       t        ||z
        }t        ||z
        }t        | j                  |z
        }t        || j                   z
        }||||fS c c}	w c c}	w )	N   r   r:   x)rH   r   isCompositer   r   zipr   r   yr   setCoordinatesnumberOfContoursr   r   r	   r   yMax)r   coordrY   r   	leftSideX
rightSideXtopSideYbottomSideYr   r   phorizontalAdvanceWidthverticalAdvanceWidthleftSideBearingtopSideBearings                  r0   r   r     s   u:??b	!Ir1JRy|H)A,K1X "I 5zS!1!12222383C3CD4DJD5%"2"23 	#GAttS!!"	# 
			383C3CD4DJD$$ 	/D''.E	/y			1	$5zQ5zS!2!23333!9%$Z)%;<"8k#9:ejj945OX

23N	 - E
 Es   G&8G+N)rP   abcr   r   collections.abcr   
contextlibr   r   typesr   fontTools.misc.fixedToolsr	   fontTools.misc.loggingToolsr
   fontTools.misc.transformr   fontTools.pens.transformPenr   r   r   rU   rd   ru   r^   rs   r   rS   rA   r0   <module>r      s    % # # %  ! - 9 . GK/' K/\Mk M,[ ,(**s **Zi8 iXN( N >B (rA   