L iDDdZddlmZmZddlmZddlmZddlmZm Z ddl m Z ddl m Z ddlmZmZdd lmZdd lmZmZdd lmZmZdd lmZmZmZGd deZGddeZGddeZ GddeZ!GddeZ"Gdde"Z#Gdde"Z$dZ%Gdde"Z&ddd Z'Gd!d"eZ(Gd#d$Z)y%)&zGlyphSets returned by a TTFont.)ABCabstractmethod)Mapping)contextmanager)copydeepcopy)SimpleNamespace)Vector)otRound fixedToFloat)deprecateFunction) TransformDecomposedTransform) TransformPenTransformPointPen)DecomposingRecordingPenlerpRecordingsreplayRecordingcteZdZdZdddZedefdZedZdZ d Z d Z e d e d Zy) _TTGlyphSetzlGeneric dict-like GlyphSet class that pulls metrics from hmtx and glyph shape from TrueType or CFF. T recalcBoundscp||_||_d|jvr2|jdjDcic]}|jdc}ni|_||ni|_i|_||ni|_d|_g|_ g|_ ||_ |dj|_ t|jddd|_d|_|reddlm}t|jddd|_|j"1||j"j(|dj||_yyycc}w) NfvarrhmtxvmtxmetricsVarStoreInstancerHVARtable)rfontaxesaxisTagdefaultLocationNormalizedlocation rawLocationoriginalLocationdepth locationStackrawLocationStack glyphsMappingrhMetricsgetattrgetvMetrics hvarTablefontTools.varLib.varStorerVarStore hvarInstancer)selfr"r&r,raxisrs `/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/fontTools/ttLib/ttGlyphSet.py__init__z_TTGlyphSet.__init__s)( "*.6):)?)? @T\\1_ @ & %-$8b ,4,@b  "*V ,,  0)TB   C$TXXf%5wEDN~~)%6NN++T&\->->&"*  AsD3resetc#K|jj|j|jj|j|r?|j j |_|jj |_n&|jj |_i|_|jj||jj| d|jj|_|jj|_y#|jj|_|jj|_wxYwwN) r*appendr&r+r'r(rr%updatepop)r5r&r9s r7 pushLocationz_TTGlyphSet.pushLocation5s !!$--0 $$T%5%56  11668DM#==BBDD  MM..0DM!D  X& ) ;J ..224DM#4488:D !..224DM#4488:D sC(E1+D./?E1.AE..E1c#K |j}|xjdz c_||xjdzc_y#|xjdzc_wxYww)N)r))r5r)s r7 pushDepthz_TTGlyphSet.pushDepthHs@ JJE JJ!OJK JJ!OJDJJ!OJsA%?AAAc||jvSr;r,r5 glyphNames r7 __contains__z_TTGlyphSet.__contains__QsD....cHt|jjSr;)iterr,keysr5s r7__iter__z_TTGlyphSet.__iter__TsD&&++-..rHc,t|jSr;)lenr,rLs r7__len__z_TTGlyphSet.__len__Ws4%%&&rHz#use 'glyphName in glyphSet' instead)categoryc||jvSr;rDrEs r7has_keyz_TTGlyphSet.has_keyZsD....rHN)__name__ __module__ __qualname____doc__r8rboolr?rBrGrMrPr DeprecationWarningrSrHr7rrspGK8;D;;$//'-8J//rHrc&eZdZdfd ZdZxZS)_TTGlyphSetGlyfc|d|_t| |||j||jd|_y)Nglyfrgvar) glyfTablesuperr8r/ gvarTable)r5r"r&r __class__s r7r8z_TTGlyphSetGlyf.__init__bs8f xlS&)rHc2t|||jS)Nr) _TTGlyphGlyfrrEs r7 __getitem__z_TTGlyphSetGlyf.__getitem__gsD)$:K:KLLrH)TrTrUrVr8rf __classcell__rcs@r7r\r\as* MrHr\c@eZdZfdZdZdZedefdZxZ S)_TTGlyphSetCFFcd|vrdnd}t||jjdj|_t ||||j|j|y)NCFF2zCFF r)listcffvalues CharStrings charStringsrar8 setLocation)r5r"r&tableTagrcs r7r8z_TTGlyphSetCFF.__init__ls`#t^6X 2 2 9 9 ;> $  DLrHr9c#K|j|tj|||5} ||j|j dddy#|j|jwxYw#1swYyxYwwr;)rsrr?r&)r5r&r9values r7r?z_TTGlyphSetCFF.pushLocationss "  % %dHe < 0 0   /  0 0  /  0 0s2)BA6AA6 BA33A66A?;B) rTrUrVr8rfrsrrXr?rhris@r7rkrkks-# , 0D00rHrkc$eZdZfdZdZxZS)_TTGlyphSetVARCc^||_t| ||||dj|_y)NVARC)glyphSetrar8r! varcTable)r5r"r&rrcs r7r8z_TTGlyphSetVARC.__init__s,   x2f++rHc|j}||jjvr|j|St ||Sr;)rCoverageglyphsr _TTGlyphVARC)r5rFvarcs r7rfz_TTGlyphSetVARC.__getitem__s9~~ DMM00 0==+ +D),,rHrgris@r7rrs , -rHrc2eZdZdZdddZedZdZy)_TTGlyphaSGlyph 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. Trc||_||_||_|j|\|_|_|j |j |\|_|_nd\|_|_|jr|jw|jj|jj|n"|jjj|}|xj|j|z c_yyy)NNN)rnamerr-widthlsbr0heighttsbr&r1 AdvWidthMapr" getGlyphIDmappingr4)r5rrFrvaridxs r7r8z_TTGlyph.__init__s   ('00; DH    ($,$5$5i$@ !DK$. !DK   !3!3!?%%119 ((3''33;;IF  JJ(008 8J "@ rHct)dDraw the glyph onto ``pen``. See fontTools.pens.basePen for details how that works. )NotImplementedErrorr5pens r7drawz _TTGlyph.draws "!rHc>ddlm}|j||y)eDraw the glyph onto ``pen``. See fontTools.pens.pointPen for details how that works. r)SegmentToPointPenN)fontTools.pens.pointPenrr)r5rrs r7 drawPointsz_TTGlyph.drawPointss > #C()rHN)rTrUrVrWr8rrrrZrHr7rrs+=A9$"" *rHrc$eZdZdZdZdZdZy)rec|j\}}|jj5}|rd}|j||jj|dddy#1swYyxYw)rrN)_getGlyphAndOffsetrrBrr`r5rglyphoffsetr)s r7rz_TTGlyphGlyf.draws_//1 v ]] $ $ & =% JJsDMM33V <  = = = ,A##A,c|j\}}|jj5}|rd}|j||jj|dddy#1swYyxYw)rrN)rrrBrr`rs r7rz_TTGlyphGlyf.drawPointsse//1 v ]] $ $ & C%   S$--"9"96 B  C C Crc|jjr'|jj|j}n#|jj|j }t |dr|j|jz nd}||fS)NxMinr) rr&rb_getGlyphInstancer`rhasattrrr)r5rrs r7rz_TTGlyphGlyf._getGlyphAndOffsetsk == ! !dmm&=&=&I**,EMM++DII6E*1%*@EJJ&af}rHc ddlm}ddlm}ddlm}|j }|j}|jj|j}|j}|j}|j|j||\} } d\} } |D]} ||j| j}|s#| j }d|vrY| M|j|j||\} }|ddk\r|dnt#t%t'|d} ||| | }| |||zz } t)||j}t+|| ||j,\}}}}||_||_|j2||_||_|S)Nr) iup_delta)GlyphCoordinates) supportScalarrrAr)fontTools.varLib.iuprfontTools.ttLib.tables._g_l_y_frfontTools.varLib.modelsrrr`rb variationsrr-r0_getCoordinatesAndControlsr&r# coordinatesrnrangerOr_setCoordinatesrrrr1rr)r5rrrrr`rr-r0r_ origCoordsendPtsvarscalardeltacontrolrrrrrs r7rz_TTGlyphGlyf._getGlyphInstances2D9==&& ''22499= $$$$"== IIx  Q( F |k7r|tA| | j>dz }tC|tC|k(sJtC|tC|ftE||Dcic]\}}| |jF|}}}| jH|k7r+| | jH}tK| } | jM|| jN}| j(|jPz}|jjjS||5|jjS||5|j| jTk(}|s2 |jW| jT||jjX|r|j]}| jT|jk7r |jn |j}|| jT}|rt_||}|ja|ntc||}|je|ddddddycc}}w#tZ$rd}YwxYw#1swY,xYw#1swYxYw) rr)VarComponentFlagsNO_VARIATION_INDEX)MultiVarStoreInstancerrrNT)3fontTools.ttLib.tables.otTablesrrrrrrindexrVarCompositeGlyphsVarCompositeGlyphfontTools.varLib.multiVarStorerr2rr"r# MultiVarStorer& componentsflagsHAVE_CONDITION ConditionListrconditionIndexraxisIndicesIndexAxisIndicesListItemr axisValuesaxisValuesVarIndexfi2flrOzipr$transformVarIndexrapplyTransformDeltas transformRESET_UNSPECIFIED_AXESr?rFaddVarComponentr'AttributeError toTransformrrrr)r5r isPointPenrrrridxrrrrr|comprr& axisIndicesrivdeltasrr9shouldDecomposet compGlyphSetgtPens r7_drawz_TTGlyphVARC._drawAsI ==!!mm""((3''99#>I?==(--*   $--*@*@ $$6 )Dzz-<<< ..==d>Q>QR )x)?)?H$$0"22778M8MN #DOO4 **.@@% $2I2I(JB"OOJ;'3z?: $ O=: 8;; 7S/3q!HQK''*%%);;"4#9#9:~))&1IJJ!2!I!IIE''44XuE )]]//%@)&*ii4>>&AO*3// $ 4==;T;T '%113 $~~:!MM!)!2!2% )8%#4S!#||jvxr||jvSr;)rrr$s r7rGzLerpGlyphSet.__contains__sDNN*JyDNN/JJrHct|j}t|j}t|j |Sr;)setrrrJ intersectionr5set1set2s r7rMzLerpGlyphSet.__iter__s44>>"4>>"D%%d+,,rHct|j}t|j}t|j |Sr;)r(rrrOr)r*s r7rPzLerpGlyphSet.__len__s44>>"4>>"4$$T*++rHN)g?) rTrUrVrWr8rfrGrMrPrZrHr7rrs! " K- ,rHrceZdZdZdZy)r"c ||_||_yr;)glyphsetr%)r5r%r0s r7r8zLerpGlyph.__init__s  "rHct|jj}|jj|jj |t|jj }|jj |jj ||jj }tt|j|j||yr;) rr0rr%rrr rrr~)r5r recording1 recording2r s r7rzLerpGlyph.draws,T]]-D-DE  /44Z@,T]]-D-DE  /44Z@%%z'7'79I9I6RTWXrHN)rTrUrVr8rrZrHr7r"r"s #YrHr"N)*rWabcrrcollections.abcr contextlibrrrtypesr fontTools.misc.vectorr fontTools.misc.fixedToolsr r rfontTools.misc.loggingToolsr fontTools.misc.transformrrfontTools.pens.transformPenrrfontTools.pens.recordingPenrrrrr\rkrrrervrrrrr"rZrHr7r>s%##%!(D9CGJ/'J/ZMkM!0[!0H -k -)*s)*XJ8JZN(N FS8Sl>B#L,7,B Y YrH