Ë
    £ehuY  ã                   ó’  — d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
mZmZ d dlm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mZ d dlm Z  d dl!m"Z" ddl#m$Z$m%Z%m&Z&m'Z' e$Z(e%Z)d„ Z* ed«      d„ «       Z+d„ Z,dZ-d„ Z.d„ Z/d„ Z0d„ Z1 edd«      Z2d„ Z3d%d„Z4d„ Z5d„ Z6 G d„ de«      Z7 G d „ d!e7«      Z8 G d"„ d#e «      Z9y$)&é    )Ú
namedtuple)
ÚmaxStackLimitÚTopDictIndexÚ
buildOrderÚtopDictOperatorsÚtopDictOperators2ÚprivateDictOperatorsÚprivateDictOperators2ÚFDArrayIndexÚFontDictÚVarStoreData)ÚBytesIO)ÚspecializeCommandsÚcommandsToProgram)ÚnewTable)ÚvarLib)ÚallEqual)ÚdeprecateFunction)Ú	roundFunc)ÚT2CharStringÚT2OutlineExtractor)ÚT2CharStringPen)Úpartialé   )ÚVarLibCFFDictMergeErrorÚVarLibCFFPointTypeMergeErrorÚVarLibCFFHintTypeMergeErrorÚVarLibMergeErrorc                 óâ  — | d   }|j                   D �cg c]  }|j                  ‘Œ }}t        j                  j	                  ||«      }t        j                  j                  ||«      }| d   j                  j                  d   }	t        |¬«      |	_	        |	j                  d   j                  €<|	j                  }
|
D ]*  }t        |d«      sŒ|	j                  |j                  _        Œ, y y c c}w )NÚfvarÚCFF2r   )Ú
otVarStoreÚPrivate)ÚaxesÚaxisTagr   ÚbuilderÚbuildVarRegionListÚbuildVarStoreÚcffÚtopDictIndexr   ÚVarStoreÚFDArrayÚvstoreÚhasattrr#   )ÚvarFontÚvarModelÚvarDataListÚmasterSupportsÚ	fvarTableÚaxisÚaxisKeysÚvarTupleListÚvarStoreCFFVÚtopDictÚfdArrayÚfontDicts               úR/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/fontTools/varLib/cff.pyÚaddCFFVarStorer<   &   sÎ   € Ø˜‘€IØ)2¯©Ö8 �—“Ð8€HÐ8Ü—>‘>×4Ñ4°^ÀXÓN€LÜ—>‘>×/Ñ/°¸kÓJ€Là�f‰o×!Ñ!×.Ñ.¨qÑ1€GÜ#¨|Ô<€GÔØ‡��qÑ× Ñ Ð(Ø—/‘/ˆØò 	;ˆHÜ�x Õ+Ø*1×*:Ñ*:�× Ñ Õ'ñ	;ð )ùò 9s   ”C,z8Use fontTools.cffLib.CFFToCFF2.convertCFFToCFF2 instead.c                 ó   — ddl m}  || «      S )Nr   )ÚconvertCFFToCFF2)ÚfontTools.cffLib.CFFToCFF2r>   )r/   r>   s     r;   ÚconvertCFFtoCFF2r@   5   s   € å;á˜GÓ$Ð$ó    c                 ó\   — t        | t        «      r| j                  «       rt        | «      S | S ©N)Ú
isinstanceÚfloatÚ
is_integerÚint)Únums    r;   Úconv_to_intrI   <   s#   € Ü�#”uÔ #§.¡.Ô"2Ü�3‹xˆØ€JrA   )Ú
BlueValuesÚ
OtherBluesÚFamilyBluesÚFamilyOtherBluesÚ	BlueScaleÚ	BlueShiftÚBlueFuzzÚStdHWÚStdVWÚ	StemSnapHÚ	StemSnapVc                 óR   — | |   }||   }||v r||   }||   j                   }|S d }|S rC   )r#   )ÚregionFDArraysÚfd_indexÚriÚfd_mapÚregion_fdArrayÚregion_fd_mapÚregion_fdIndexÚprivates           r;   Úget_privater^   Q   sK   € Ø# BÑ'€NØ˜8Ñ$€MØ	ˆ]ÑØ& rÑ*ˆØ  Ñ0×8Ñ8ˆð €Nð ˆØ€NrA   c           
      ó$  — | d   }| dd }t        |d   d«      r|D �cg c]  }|j                  ‘Œ }}n|D �cg c]  }|g‘Œ }}t        |j                  «      D �]P  \  }}	|	j                  }
t	        |
dd«      }||   \  }}g }|j
                  dd D ]1  }|j
                  j                  |«      dz
  }|j                  |«       Œ3 |
g}|
}|D ](  }t        ||||«      }|€|}n|}|j                  |«       Œ* t        |«      }|
j                  j                  «       D �]‰  \  }}g }|t        vrŒt        |t        «      r©	 |D �cg c]  }|j                  |   ‘Œ }}	 t%        |Ž }	 dg|z  }d}|D ]`  }t        |«      D ��cg c]  \  }}|||   z
  ‘Œ }}}|st+        |«      sd	}|}|j-                  |«      }|d   |d<   |j                  |«       Œb |sQ|D � cg c]  } | d   ‘Œ	 }} n>|D �cg c]  }|j                  |   ‘Œ }}t+        |«      s|j-                  |«      }n|d   }t        |t        «      rWt        |«      D ]H  \  }}!t        |!t        «      r%t        |!«      D ]  \  }"}#t/        |#«      ||   |"<   Œ Œ;t/        |!«      ||<   ŒJ nt/        |«      }||
j                  |<   �ŒŒ �ŒS yc c}w c c}w c c}w # t        $ r t!        dj#                  |¬«      «       Y �ŒÇw xY w# t&        $ r t)        |||«      ‚w xY wc c}}w c c} w c c}w )
a›  
    I step through the FontDicts in the FDArray of the varfont TopDict.
    For each varfont FontDict:

    * step through each key in FontDict.Private.
    * For each key, step through each relevant source font Private dict, and
      build a list of values to blend.

    The 'relevant' source fonts are selected by first getting the right
    submodel using ``vsindex_dict[vsindex]``. The indices of the
    ``subModel.locations`` are mapped to source font list indices by
    assuming the latter order is the same as the order of the
    ``var_model.locations``. I can then get the index of each subModel
    location in the list of ``var_model.locations``.
    r   r   Nr,   Úvsindexz\Warning: {key} in default font Private dict is missing from another font, and was discarded.)ÚkeyFT)r.   r,   Ú	enumerater#   ÚgetattrÚ	locationsÚindexÚappendr^   ÚlenÚrawDictÚitemsÚpd_blend_fieldsrD   ÚlistÚKeyErrorÚprintÚformatÚzipÚ
IndexErrorr   r   Ú	getDeltasrI   )$Ú	top_dictsÚvsindex_dictÚ	var_modelrY   r8   Úregion_top_dictsÚ	fdTopDictrV   rW   Ú	font_dictÚprivate_dictr`   Ú	sub_modelÚ_Úmaster_indicesÚlocÚiÚpdsÚlast_pdrX   ÚpdÚnum_mastersra   ÚvalueÚdataListÚvaluesÚprev_val_listÚany_points_differÚval_listÚvalÚrel_listÚdeltasÚdataÚitemÚjÚjtems$                                       r;   Úmerge_PrivateDictsr�   \   s„  € ð" ˜‰l€GØ   �}ÐÜÐ Ñ" IÔ.Ø=MÖN°	˜)×+Ó+ÐNˆÑNà7GÖH¨)˜9š+ÐHˆÐHÜ(¨¯©Ó9ó Z1Ñˆ�)Ø ×(Ñ(ˆÜ˜,¨	°1Ó5ˆð $ GÑ,‰ˆ	�1ØˆØ×&Ñ& q rÐ*ò 	%ˆCØ×#Ñ#×)Ñ)¨#Ó.°Ñ2ˆAØ×!Ñ! !Õ$ð	%ð ˆnˆØˆØ ò 	ˆBÜ˜^¨X°r¸6ÓBˆBð ˆzØ‘à�Ø�J‰J�r�Nð	ô ˜#“hˆØ&×.Ñ.×4Ñ4Ó6ó C	1‰JˆC�ØˆHØœ/Ñ)ØÜ˜%¤Ô&ðØ8;Ö<°"˜bŸj™j¨›oÐ<�FÐ<ðFÜ  &˜\�Fðð "#  kÑ 1�Ø$)Ð!Ø &ò ,�HäAJÈ8ÓAT÷ Ù5=°a¸˜˜}¨QÑ/Ó/ð �Hñ  ñ .´xÀÔ7IØ,0Ð)Ø$,�MØ&×0Ñ0°Ó:�Fð !)¨¡�F˜1‘IØ—O‘O FÕ+ð,ñ )Ø4<Ö=¨D  Q£Ð=�HÑ=à47Ö8¨b˜"Ÿ*™* S›/Ð8�Ð8Ü Ô'Ø(×2Ñ2°6Ó:‘Hà% a™y�Hô ˜(¤DÔ)Ü(¨Ó2ò 8‘G�A�tÜ! $¬Ô-Ü'0°£ò ?™G˜A˜tÜ-8¸Ó->˜H Q™K¨šNñ?ô '2°$Ó&7˜ šñ8ô ' xÓ0�à(0ˆL× Ñ  Ó%òGC	1ñ/Z1ùò OùâHùò< =øÜò Üð%ç%+¡V° V£_ôò
 ðûô "ò FÜ1°#°u¸fÓEÐEðFüó$ ùò  >ùâ8sL   žJ.¸
J3Å J=ÅJ8ÅJ=ÅK(ÆLÇLÇ,LÊ8J=Ê=$K%Ë$K%Ë(K?c                 ó   — d| v r| d   S | d   S )NzCFF r!   © )Úfonts    r;   Ú_cff_or_cff2r“   Ð   s   € Ø��~Ø�F‰|ÐØ�‰<ÐrA   c                 óŽ  — i }|d   }|dd }t        |«      }t        |«      j                  j                  d   }t	        |d«      st        |«      D �ci c]  }|d“Œ c}|d<   |S i }|j                  }	|j                  «       }
t        |	«      D ]  \  }}|||
|   <   ||vsŒi ||<   Œ t        |«      D ]Š  \  }}|j                  «       }t        |«      j                  j                  d   }t	        |d«      s||d      }d||   |<   ŒU|j                  }t        |«      D ]  \  }}|||      }||   }||vsŒ|||<   Œ ŒŒ |S c c}w )a×  Since a subset source font may have fewer FontDicts in their
    FDArray than the default font, we have to match up the FontDicts in
    the different fonts . We do this with the FDSelect array, and by
    assuming that the same glyph will reference  matching FontDicts in
    each source font. We return a mapping from fdIndex in the default
    font to a dictionary which maps each master list index of each
    region font to the equivalent fdIndex in the region font.r   r   NÚFDSelect)	rg   r“   r)   r*   r.   Úranger•   ÚgetGlyphOrderrb   )r/   Ú
fonts_listrY   Údefault_fontÚregion_fontsÚnum_regionsr8   rX   Úgname_mappingÚdefault_fdSelectÚ
glyphOrderÚgidÚfdIndexÚregion_fontÚregion_glyphOrderÚregion_topDictÚdefault_fdIndexÚregion_fdSelectÚ
region_maps                      r;   Ú	getfd_mapr§   Ö   sŽ  € ð €FØ˜a‘=€LØ˜a˜b�>€LÜ�lÓ#€KÜ˜<Ó(×,Ñ,×9Ñ9¸!Ñ<€GÜ�7˜JÔ'ô &+¨;Ó%7Ö8˜r�R˜‘UÒ8ˆˆq‰	Øˆà€MØ×'Ñ'ÐØ×+Ñ+Ó-€JÜ!Ð"2Ó3ò !‰ˆˆWØ)0ˆ�j ‘oÑ&Ø˜&Ò Ø ˆF�7ŠOð!ô % \Ó2ò -‰ˆˆKØ'×5Ñ5Ó7ÐÜ% kÓ2×6Ñ6×CÑCÀAÑFˆÜ�~ zÔ2à+Ð,=¸aÑ,@ÑAˆOØ*+ˆF�?Ñ# BÒ'à,×5Ñ5ˆOÜ )¨/Ó :ò -‘��WØ"/Ð0AÀ#Ñ0FÑ"G�Ø# OÑ4�
Ø˜ZÒ'Ø%,�J˜r’Nñ	-ð-ð €Mùò1 9s   Á
EÚCVarDataz'varDataList masterSupports vsindex_dictc                 ó†  — | d   j                   j                  d   }|g|dd  D �cg c]$  }t        |«      j                   j                  d   ‘Œ& c}z   }t        |j                  «      }t        ||||«      }t        | |«      }	t        ||j                  ||	«       t        | ||j                  |j                  «       y c c}w )Nr!   r   r   )r)   r*   r“   rg   ÚmappingÚmerge_charstringsr§   r�   rs   r<   r1   r2   )
r/   ÚmodelÚordered_fonts_listrž   r8   ÚttFontrr   r�   ÚcvDatarY   s
             r;   Úmerge_region_fontsr°     sº   € Ø�f‰o×!Ñ!×.Ñ.¨qÑ1€GØ�	Ø?QÐRSÐRTÐ?UöØ5;Œ�VÓ× Ñ ×-Ñ-¨aÓ0òñ €Iô �e—m‘mÓ$€KÜ˜z¨;¸	À5ÓI€FÜ�wÐ 2Ó3€FÜ�y &×"5Ñ"5°u¸fÔEÜ�7˜E 6×#5Ñ#5°v×7LÑ7LÕMùòs   ¦)B>c                 ó,  — || vry | |   }|r‡|j                  «        |j                  g k(  ry t        |j                  «      dk  rO|j                  d   dk(  r=t        |j                  «      dk(  s$t        |j                  d   «      t        t
        fv ry |S )Né   éÿÿÿÿÚendcharr   r   )Ú	decompileÚprogramrg   ÚtyperG   rE   )ÚcharstringsÚ	glyphNameÚfilterEmptyÚcss       r;   Ú_get_csr¼     s‚   € Ø˜Ñ#ØØ	�YÑ	€BáØ
�‰ŒØ�:‰:˜ÒØä�—
‘
‹O˜qÒ Ø—
‘
˜2‘ )Ò+Ü�R—Z‘Z“ AÒ%¬¨b¯j©j¸©mÓ)<ÄÄeÀÑ)Làà€IrA   c                 ó0  — g }| j                   dd  D ]7  }||vr|j                  |«       |j                  |j                  |«      «       Œ9 t        j                  j                  |d d«      }t        |«      }	|	||<   | |gf||	<   |j                  |«       |	S )Nr   F)Úsupportsrf   re   r   r&   ÚbuildVarDatarg   )
r¬   ra   r2   rs   Úvsindex_by_keyr1   ÚvarTupleIndexesÚsupportÚvar_datar`   s
             r;   Ú_add_new_vsindexrÄ   #  s£   € ð €OØ—>‘> ! "Ð%ò >ˆØ˜.Ñ(Ø×!Ñ! 'Ô*Ø×Ñ˜~×3Ñ3°GÓ<Õ=ð>ô �~‰~×*Ñ*¨?¸DÀ%ÓH€HÜ�,Ó€GØ!€N�3ÑØ" S E˜N€L�ÑØ×Ñ�xÔ Ø€NrA   c                 ój  — i }i }g }g }|d   j                   }t        | «      D �]B  \  }	}
t        |«      D ��cg c]  \  }}t        |j                   |
|dk7  «      ‘Œ! }}}|j                  |«      \  }}|d   }t	        g |
|d«      }t
        |_        |j                  |«       |dd  }t        |d¬«      D ]2  \  }}|j                  |«       t
        |_        |j                  |«       Œ4 |j                  |j                  |j                  |d¬«      }|||
<   |sŒ÷|j                  rd|j                  vr�Œt        d„ |D «       «      }	 ||   }|dk7  s�Œ2|dg|j                  d d �ŒE |sd	|z  }t!        ||||||«       t#        |||¬
«      }|S c c}}w # t        $ r t!        ||||||«      }Y Œcw xY w)Nr   r   )ÚstartT)r]   ÚglobalSubrsrt   ÚoptimizeÚblendc              3   ó$   K  — | ]  }|d u–— Œ
 y ­wrC   r‘   )Ú.0Úvs     r;   ú	<genexpr>z$merge_charstrings.<locals>.<genexpr>e  s   è ø€ Ò2 a�A˜T”MÑ2ùs   ‚r`   )T)r1   r2   rs   )ÚCharStringsrb   r¼   ÚgetSubModelÚCFF2CharStringMergePenÚMergeOutlineExtractorÚoutlineExtractorÚdrawÚrestartÚgetCharStringr]   rÇ   Úseen_movetor¶   Útuplerl   rÄ   r¨   )rž   r�   rr   ÚmasterModelrs   rÀ   r1   r2   Údefault_charstringsrŸ   Úgnamer}   ÚtdÚall_csr¬   Úmodel_csÚdefault_charstringÚvar_penÚ	region_csÚ
region_idxÚregion_charstringÚnew_csra   r`   r¯   s                            r;   r«   r«   3  s  € Ø€LØ€NØ€KØ€NØ# A™,×2Ñ2ÐÜ 
Ó+ó 66‰
ˆˆUô AJÈ)Ó@T÷
Ù7<°q¸"ŒG�B—N‘N E¨1°©6Õ2ð
ˆñ 
ð &×1Ñ1°&Ó9‰ˆˆxð & a™[ÐÜ(¨¨U°KÀÓCˆô /DÐÔ+Ø×Ñ Ô(ð ˜Q˜R�Lˆ	Ü-6°yÈÔ-Jò 	,Ñ)ˆJÐ)Ø�O‰O˜JÔ'Ü1FÐÔ.Ø×"Ñ" 7Õ+ð	,ð ×&Ñ&Ø&×.Ñ.Ø*×6Ñ6ØØð	 'ó 
ˆð &,Ð˜EÑ"áØà×#Ò#¨¸¿¹Ñ)Fñ ô Ñ2¨6Ô2Ó2ˆð	Ø$ SÑ)ˆGð �aŒ<Ø")¨9Ð!5ˆF�N‰N˜2˜AÒðm66ñv Ø˜Ñ#ˆÜØ˜˜n¨l¸NÈKô	
ô ØØ%Ø!ô€Fð €MùóK
øôZ ò 	Ü&Ø�s˜N¨L¸.È+óŠGð	ús   ¸$FÅ	FÆF2Æ1F2c                   ó   — e Zd ZdZdd„Zy)ÚCFFToCFF2OutlineExtractorz”This class is used to remove the initial width from the CFF
    charstring without trying to add the width to self.nominalWidthX,
    which is None.c                 óš   — | j                  «       }| j                  s.|t        |«      dz  z  r|dd  }| j                  | _        d| _        |S )Nr²   r   )ÚpopallÚgotWidthrg   ÚdefaultWidthXÚwidth)ÚselfÚevenOddÚargss      r;   ÚpopallWidthz%CFFToCFF2OutlineExtractor.popallWidthˆ  sH   € Ø�{‰{‹}ˆØ�}Š}Øœ#˜d›) a™-Ò(Ø˜A˜B�x�Ø×+Ñ+ˆDŒJØˆDŒMØˆrA   N)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rî   r‘   rA   r;   rå   rå   ƒ  s   „ ñôrA   rå   c                   ó^   ‡ — e Zd ZdZ	 	 dˆ fd„	Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zˆ xZS )rÑ   z²Used to extract the charstring commands - including hints - from a
    CFF charstring in order to merge it as another set of region data
    into a CFF2 variable font charstring.c           	      ó0   •— t         ‰| �  |||||||«       y rC   )ÚsuperÚ__init__)	rë   ÚpenÚ
localSubrsrÇ   ÚnominalWidthXré   r]   ÚblenderÚ	__class__s	           €r;   rö   zMergeOutlineExtractor.__init__—  s"   ø€ ô 	‰ÑØ�˜[¨-¸ÈÐQXõ	
rA   c                 óf   — | j                  «       }| j                  t        |«      dz  z   | _        |S )Nr²   )rî   Ú	hintCountrg   )rë   rí   s     r;   Ú
countHintsz MergeOutlineExtractor.countHints¥  s-   € Ø×ÑÓ!ˆØŸ™¬#¨d«)°q©.Ñ8ˆŒØˆrA   c                 ó<   — | j                   j                  ||«       y rC   )r÷   Úadd_hint)rë   r·   rí   s      r;   Ú_hint_opzMergeOutlineExtractor._hint_opª  s   € Ø�‰×Ñ˜$ Õ%rA   c                 óH   — | j                  «       }| j                  d|«       y )NÚhstem©rþ   r  ©rë   re   rí   s      r;   Úop_hstemzMergeOutlineExtractor.op_hstem­  ó   € Ø�‰Ó ˆØ�‰�g˜tÕ$rA   c                 óH   — | j                  «       }| j                  d|«       y )NÚvstemr  r  s      r;   Úop_vstemzMergeOutlineExtractor.op_vstem±  r  rA   c                 óH   — | j                  «       }| j                  d|«       y )NÚhstemhmr  r  s      r;   Ú
op_hstemhmz MergeOutlineExtractor.op_hstemhmµ  ó   € Ø�‰Ó ˆØ�‰�i Õ&rA   c                 óH   — | j                  «       }| j                  d|«       y )NÚvstemhmr  r  s      r;   Ú
op_vstemhmz MergeOutlineExtractor.op_vstemhm¹  r  rA   c                 óð   — | j                   s;| j                  «       }|r| j                  d|«       | j                  dz   dz  | _         | j                  d   j                  || j                   «      \  }}||fS )Nr  é   é   r³   )ÚhintMaskBytesrþ   r  rý   ÚcallingStackÚgetBytes)rë   re   rí   r  s       r;   Ú_get_hintmaskz#MergeOutlineExtractor._get_hintmask½  sq   € Ø×!Ò!Ø—?‘?Ó$ˆDÙØ—‘˜i¨Ô.Ø"&§.¡.°1Ñ"4¸Ñ!:ˆDÔØ#×0Ñ0°Ñ4×=Ñ=¸eÀT×EWÑEWÓXÑˆ�uØ�mÐ#Ð#rA   c                 ól   — | j                  |«      \  }}| j                  j                  d|g«       ||fS )NÚhintmask©r  r÷   Úadd_hintmask©rë   re   r  s      r;   Úop_hintmaskz!MergeOutlineExtractor.op_hintmaskÆ  ó8   € Ø#×1Ñ1°%Ó8Ñˆˆ}Ø�‰×Ñ˜j¨=¨/Ô:Ø˜eÐ#Ð#rA   c                 ól   — | j                  |«      \  }}| j                  j                  d|g«       ||fS )NÚcntrmaskr  r  s      r;   Úop_cntrmaskz!MergeOutlineExtractor.op_cntrmaskË  r  rA   )NN)rï   rð   rñ   rò   rö   rþ   r  r  r
  r  r  r  r  r"  Ú__classcell__©rû   s   @r;   rÑ   rÑ   ’  sB   ø„ ñ-ð Øõ
òò
&ò%ò%ò'ò'ò$ò$ö
$rA   rÑ   c                   ór   ‡ — e Zd ZdZ	 dˆ f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d„Zˆ xZS )rÐ   z Pen to merge Type 2 CharStrings.c                 óº   •— t         ‰| �  d d d|¬«       d| _        || _        || _        || _        d| _        d| _        || _        t        |t        ¬«      | _
        y )NT)rê   ÚglyphSetr!   ÚroundTolerancer   F©Úround)rõ   rö   Úpt_indexÚ	_commandsÚm_indexr�   Úprev_move_idxrÖ   r¹   r   r*  )rë   Údefault_commandsr¹   r�   Ú
master_idxr(  rû   s         €r;   rö   zCFF2CharStringMergePen.__init__Ô  sd   ø€ ô 	‰ÑØ ¨DÀð 	ô 	
ð ˆŒØ)ˆŒØ!ˆŒØ&ˆÔØˆÔØ ˆÔØ"ˆŒÜ˜~´UÔ;ˆ�
rA   c                 óX  — | j                   dk(  r| j                  j                  ||gg«       ng| j                  | j                     }|d   |k7  r2t	        || j                  t        |d   «      |d   | j                  «      ‚|d   j                  |«       | xj                  dz  c_        y ©Nr   r   )r-  r,  rf   r+  r   rg   r¹   )rë   Ú
point_typeÚ	pt_coordsÚcmds       r;   Ú	add_pointz CFF2CharStringMergePen.add_pointä  s‘   € Ø�<‰<˜1ÒØ�N‰N×!Ñ! :°	¨{Ð";Õ<à—.‘. §¡Ñ/ˆCØ�1‰v˜Ò#Ü2Ø §¡¬s°3°q±6«{¸CÀ¹FÀDÇNÁNóð ð �‰F�M‰M˜)Ô$Ø�Š˜ÑŽrA   c                 óX  — | j                   dk(  r| j                  j                  ||gg«       ng| j                  | j                     }|d   |k7  r2t	        || j                  t        |d   «      |d   | j                  «      ‚|d   j                  |«       | xj                  dz  c_        y r2  ©r-  r,  rf   r+  r   rg   r¹   )rë   Ú	hint_typerí   r5  s       r;   r   zCFF2CharStringMergePen.add_hintð  s‘   € Ø�<‰<˜1ÒØ�N‰N×!Ñ! 9¨t¨fÐ"5Õ6à—.‘. §¡Ñ/ˆCØ�1‰v˜Ò"Ü1Ø˜tŸ}™}¬c°#°a±&«k¸3¸q¹6À4Ç>Á>óð ð �‰F�M‰M˜$ÔØ�Š˜ÑŽrA   c                 óî  — | j                   dk(  r<| j                  j                  |g g«       | j                  j                  d|gg«       n•| j                  | j                     }|d   |k7  r2t	        || j                  t        |d   «      |d   | j                  «      ‚| xj                  dz  c_        | j                  | j                     }|d   j                  |«       | xj                  dz  c_        y )Nr   Ú r   r8  )rë   r9  Úabs_argsr5  s       r;   r  z#CFF2CharStringMergePen.add_hintmaskü  sÉ   € ð
 �<‰<˜1ÒØ�N‰N×!Ñ! 9¨b /Ô2Ø�N‰N×!Ñ! 2¨ zÐ"2Õ3à—.‘. §¡Ñ/ˆCØ�1‰v˜Ò"Ü1Ø˜tŸ}™}¬c°#°a±&«k¸3¸q¹6À4Ç>Á>óð ð �MŠM˜QÑ�MØ—.‘. §¡Ñ/ˆCØ�‰F�M‰M˜(Ô#Ø�Š˜ÑŽrA   c                 ó˜   — | j                   sd| _         | j                  |«      }| j                  d|«       | j                  dz
  | _        y )NTÚrmovetor   )rÖ   Ú_pr6  r+  r.  ©rë   Úptr4  s      r;   Ú_moveTozCFF2CharStringMergePen._moveTo  sA   € Ø×ÒØ#ˆDÔØ—G‘G˜B“Kˆ	Ø�‰�y )Ô,ð "Ÿ]™]¨QÑ.ˆÕrA   c                 óJ   — | j                  |«      }| j                  d|«       y )NÚrlineto©r?  r6  r@  s      r;   Ú_lineTozCFF2CharStringMergePen._lineTo  s   € Ø—G‘G˜B“Kˆ	Ø�‰�y )Õ,rA   c                 ót   — | j                   } ||«       ||«      z    ||«      z   }| j                  d|«       y )NÚ	rrcurvetorE  )rë   Úpt1Úpt2Úpt3r?  r4  s         r;   Ú_curveToOnez"CFF2CharStringMergePen._curveToOne  s4   € Ø�W‰WˆÙ�s“G™b ›gÑ%©¨3«Ñ/ˆ	Ø�‰�{ IÕ.rA   c                  ó   — y rC   r‘   ©rë   s    r;   Ú
_closePathz!CFF2CharStringMergePen._closePath!  ó   € ØrA   c                  ó   — y rC   r‘   rN  s    r;   Ú_endPathzCFF2CharStringMergePen._endPath$  rP  rA   c                 ó.   — d| _         || _        d| _        y )Nr   )r   r   )r+  r-  Ú_p0)rë   rá   s     r;   rÔ   zCFF2CharStringMergePen.restart'  s   € ØˆŒØ!ˆŒØˆ�rA   c                 ó   — | j                   S rC   )r,  rN  s    r;   ÚgetCommandsz"CFF2CharStringMergePen.getCommands,  s   € Ø�~‰~ÐrA   c                 ó¦  — |D ]  }|d   }t        |Ž }t        |«      |d<   Œ d}|D ]§  }|d   }|dv r1t        |d   «      }t        |«      st        d«      ‚|d   d   g|d<   ni|d   }	g }
|	D ]X  }t        |«      r|
j	                  |d   «       Œ# ||«      dd }|d   g|z   }|j	                  d«       |
j	                  |«       ŒZ |
|d<   |}Œ© |S )a˜  
        We first re-order the master coordinate values.
        For a moveto to lineto, the args are now arranged as::

                [ [master_0 x,y], [master_1 x,y], [master_2 x,y] ]

        We re-arrange this to::

                [	[master_0 x, master_1 x, master_2 x],
                        [master_0 y, master_1 y, master_2 y]
                ]

        If the master values are all the same, we collapse the list to
        as single value instead of a list.

        We then convert this to::

                [ [master_0 x] + [x delta tuple] + [numBlends=1]
                  [master_0 y] + [y delta tuple] + [numBlends=1]
                ]
        r   Nr   )r  r!  z3Hintmask values cannot differ between source fonts.)ro   rk   r   r   rf   )rë   ÚcommandsÚget_delta_funcr5  rí   Úm_argsÚlastOpÚopÚcoordÚcoordsÚ
new_coordsrŠ   s               r;   Úreorder_blend_argsz)CFF2CharStringMergePen.reorder_blend_args/  s   € ð, ò 	"ˆCà�q‘6ˆDÜ˜$�ZˆFô ˜&“\ˆC�ŠFð	"ð ˆØò 	ˆCØ�Q‘ˆBð Ð1Ñ1Ü˜S ™V›�Ü ”Ü*ØMóð ð   ™( 1™+˜��A’à˜Q™�Ø�
Ø#ò 1�EÜ ”Ø"×)Ñ)¨%°©(Õ3ñ "0°Ó!6°q°rÐ!:˜Ø!& q¡ 
¨VÑ 3˜ØŸ™ QœØ"×)Ñ)¨%Õ0ð1ð $��A‘Ø‰Fð1	ð2 ˆrA   c                 óÚ   — | j                   }| j                  |t        |j                  | j                  ¬«      «      }|rt        |dt        ¬«      }t        |«      }t        |||¬«      }|S )Nr)  F)ÚgeneralizeFirstÚmaxstack)r¶   r]   rÇ   )	r,  r`  r   rq   r*  r   r   r   r   )rë   r]   rÇ   rt   rÈ   rX  r¶   Ú
charStrings           r;   rÕ   z$CFF2CharStringMergePen.getCharStringh  sn   € ð —>‘>ˆØ×*Ñ*Ø”g˜i×1Ñ1¸¿¹ÔDó
ˆñ Ü)Ø¨%¼-ôˆHô $ HÓ-ˆÜ!Ø W¸+ô
ˆ
ð ÐrA   )g{®Gáz„?)NNNT)rï   rð   rñ   rò   rö   r6  r   r  rB  rF  rL  rO  rR  rÔ   rV  r`  rÕ   r#  r$  s   @r;   rÐ   rÐ   Ñ  sV   ø„ Ù*ð TXõ<ò 
ò
òò&/ò-ò/ò
òòò
ò7ðt HL÷rA   rÐ   N)F):Úcollectionsr   ÚfontTools.cffLibr   r   r   r   r   r	   r
   r   r   r   Úior   ÚfontTools.cffLib.specializerr   r   ÚfontTools.ttLibr   Ú	fontToolsr   ÚfontTools.varLib.modelsr   ÚfontTools.misc.loggingToolsr   ÚfontTools.misc.roundToolsr   ÚfontTools.misc.psCharStringsr   r   ÚfontTools.pens.t2CharStringPenr   Ú	functoolsr   Úerrorsr   r   r   r   ÚMergeDictErrorÚMergeTypeErrorr<   r@   rI   rj   r^   r�   r“   r§   r¨   r°   r¼   rÄ   r«   rå   rÑ   rÐ   r‘   rA   r;   ú<module>rt     sß   ðÝ "÷÷ ÷ õ ß NÝ $Ý Ý ,Ý 9Ý /ß IÝ :Ý ÷ó ð )€Ø-€ò;ñ ÐMÓNñ%ó Oð%òð€òòq1òhò(ñV �jÐ"KÓL€ò	Nóò&ò Mô`Ð 2ô ô<$Ð5ô <$ô~f˜_õ frA   