
    #Vf+                        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 Zy)zGlyphSets returned by a TTFont.    )ABCabstractmethod)Mapping)contextmanager)copy)SimpleNamespace)otRound)deprecateFunction)	Transform)TransformPenTransformPointPenc                   n    e Zd ZdZ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.
    c                 b   || _         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)fontaxesaxisTagdefaultLocationNormalizedlocationrawLocationoriginalLocationdepthlocationStackrawLocationStackglyphsMappingr   hMetricsgetattrgetvMetrics	hvarTablefontTools.varLib.varStorer   VarStorehvarInstancer)selfr   r   r#   axisr   s         c/var/www/html/software/conda/envs/catlas/lib/python3.12/site-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   D,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   r0   s      r.   pushLocationz_TTGlyphSet.pushLocation/   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     r.   	pushDepthz_TTGlyphSet.pushDepthB   s@     	JJEJJ!OJKJJ!OJDJJ!OJs   A%? AAAc                     || j                   v S r2   r#   r,   	glyphNames     r.   __contains__z_TTGlyphSet.__contains__K   s    D....    c                 H    t        | j                  j                               S r2   )iterr#   keysr,   s    r.   __iter__z_TTGlyphSet.__iter__N   s    D&&++-..r?   c                 ,    t        | j                        S r2   )lenr#   rC   s    r.   __len__z_TTGlyphSet.__len__Q   s    4%%&&r?   z#use 'glyphName in glyphSet' instead)categoryc                     || j                   v S r2   r;   r<   s     r.   has_keyz_TTGlyphSet.has_keyT   s     D....r?   N)__name__
__module____qualname____doc__r/   r   boolr6   r9   r>   rD   rG   r
   DeprecationWarningrJ    r?   r.   r   r      si    6 ;D ; ;$  //' -8J//r?   r   c                   $     e Zd Z fdZd Z xZS )_TTGlyphSetGlyfc                 |    |d   | _         t        | 	  ||| j                          |j                  d      | _        y )Nglyfgvar)	glyfTablesuperr/   r&   	gvarTable)r,   r   r   	__class__s      r.   r/   z_TTGlyphSetGlyf.__init__\   s3    fx8&)r?   c                     t        | |      S r2   )_TTGlyphGlyfr<   s     r.   __getitem__z_TTGlyphSetGlyf.__getitem__a   s    D),,r?   rK   rL   rM   r/   r]   __classcell__rZ   s   @r.   rS   rS   [   s    *
-r?   rS   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charStringsrX   r/   blenderr)   r   r%   
otVarStorer   interpolateFromDeltas)r,   r   r   tableTagr   re   	instancerrZ   s          r.   r/   z_TTGlyphSetCFF.__init__f   s    #t^6X 2 2 9 9 ;<Q?KKx)9)9:Ct//TBH#-''f):):H	  )>>	 $	 r?   c                     t        | |      S r2   )_TTGlyphCFFr<   s     r.   r]   z_TTGlyphSetCFF.__getitem__u   s    4++r?   r^   r`   s   @r.   rb   rb   e   s    ?,r?   rb   c                   ,    e Zd ZdZ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.
    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$   widthlsbr'   heighttsbr   r(   AdvWidthMapr   
getGlyphIDmappingr+   )r,   rv   r=   varidxs       r.   r/   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 "@r?   c                     t         )dDraw the glyph onto ``pen``. See fontTools.pens.basePen for details
        how that works.
        )NotImplementedErrorr,   pens     r.   drawz_TTGlyph.draw   s
    
 "!r?   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      r.   
drawPointsz_TTGlyph.drawPoints   s     	>		#C()r?   N)rK   rL   rM   rN   r/   r   r   r   rQ   r?   r.   rs   rs   y   s%    9" " "*r?   rs   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)_getGlyphAndOffsetrv   r9   isVarComposite_drawVarCompositer   rW   r,   r   glyphoffsetr    s        r.   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   rv   r9   r   r   r   rW   r   s        r.   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   
componentsrv   r6   r   flagsRESET_UNSPECIFIED_AXESaddVarComponentr=   	transformr   AttributeErrortoTransformr   r   r   r   )	r,   r   r   
isPointPenr   r   compttPens	            r.   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   )	rv   r   rY   _getGlyphInstancerW   rw   hasattrry   r   )r,   r   r   s      r.   r   z_TTGlyphGlyf._getGlyphAndOffset   sk    ==!!dmm&=&=&I**,EMM++DII6E*1%*@EJJ&af}r?   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+        ||	|      \  }}}}|| _        || _        |j0                  || _        || _        |S )Nr   )	iup_delta)GlyphCoordinates)supportScalarru   r8   )fontTools.varLib.iupr   r   r   fontTools.varLib.modelsr   rv   rW   rY   
variationsrw   r$   r'   _getCoordinatesAndControlsr   r   coordinatesrf   rangerF   r   _setCoordinatesry   r{   r(   rx   rz   )r,   r   r   r   rv   rW   r   r$   r'   r   _
origCoordsendPtsvarscalardeltacontrolr   rx   ry   rz   r{   s                         r.   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%i"PsFC%DJ DKr?   N)rK   rL   rM   r   r   r   r   r   rQ   r?   r.   r\   r\      s    = C A.&r?   r\   c                       e Zd Zd Zy)rq   c                     | j                   j                  | j                     j                  || j                   j                         y)r   N)rv   rj   rw   r   rk   r   s     r.   r   z_TTGlyphCFF.draw  s1     	!!$)),11#t}}7L7LMr?   N)rK   rL   rM   r   rQ   r?   r.   rq   rq     s    Nr?   rq   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 || _        | j                  |       t        ||z
        }
t        ||z
        }t        | j                  |z
        }t        || j                   z
        }|
|||fS c c}w c c}w )	N   r   r8   x)rF   r   isCompositer   r   zipr   r   yr   setCoordinatesnumberOfContoursr   recalcBoundsr	   r   yMax)r   coordrW   	leftSideX
rightSideXtopSideYbottomSideYr   r   phorizontalAdvanceWidthverticalAdvanceWidthleftSideBearingtopSideBearings                 r.   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!	y!$Z)%;<"8k#9:ejj945OX

23N	 + E
 Es   G$8G)N)rN   abcr   r   collections.abcr   
contextlibr   r   typesr   fontTools.misc.fixedToolsr	   fontTools.misc.loggingToolsr
   fontTools.misc.transformr   fontTools.pens.transformPenr   r   r   rS   rb   rs   r\   rq   r   rQ   r?   r.   <module>r      sy    % # # %  ! - 9 . GJ/' J/Z-k -,[ ,()*s )*Xg8 gTN( N'r?   