§
    ¢”juY  ã                   ó¸  — 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 ¦  «        Z9d%S )'é    )Ú
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         }d„ |j         D ¦   «         }t          j                             ||¦  «        }t          j                             ||¦  «        }| d         j        j        d         }t          |¬¦  «        |_        |j	        d         j
        €-|j	        }	|	D ]%}
t          |
d¦  «        r|j        |
j        _
        Œ$d S d S )NÚfvarc                 ó   — g | ]	}|j         ‘Œ
S © )ÚaxisTag)Ú.0Úaxiss     úc/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/fontTools/varLib/cff.pyú
<listcomp>z"addCFFVarStore.<locals>.<listcomp>(   s   € Ð8Ð8Ð8 �”Ð8Ð8Ð8ó    ÚCFF2r   )Ú
otVarStoreÚPrivate)Úaxesr   ÚbuilderÚbuildVarRegionListÚbuildVarStoreÚcffÚtopDictIndexr   ÚVarStoreÚFDArrayÚvstoreÚhasattrr+   )ÚvarFontÚvarModelÚvarDataListÚmasterSupportsÚ	fvarTableÚaxisKeysÚvarTupleListÚvarStoreCFFVÚtopDictÚfdArrayÚfontDicts              r&   ÚaddCFFVarStorerA   &   sÎ   € Ø˜”€IØ8Ð8¨¬Ð8Ñ8Ô8€HÝ”>×4Ò4°^ÀXÑNÔN€LÝ”>×/Ò/°¸kÑJÔJ€Là�fŒoÔ!Ô.¨qÔ1€GÝ#¨|Ð<Ñ<Ô<€GÔØ„�qÔÔ Ð(Ø”/ˆØð 	;ð 	;ˆHÝ�x Ñ+Ô+ð ;Ø*1Ô*:�Ô Ô'øð	 )Ð(ð	;ð 	;r(   z8Use fontTools.cffLib.CFFToCFF2.convertCFFToCFF2 instead.c                 ó$   — ddl m}  || ¦  «        S )Nr   )ÚconvertCFFToCFF2)ÚfontTools.cffLib.CFFToCFF2rC   )r6   rC   s     r&   ÚconvertCFFtoCFF2rE   5   s%   € à;Ð;Ð;Ð;Ð;Ð;àÐ˜GÑ$Ô$Ð$r(   c                 óv   — t          | t          ¦  «        r#|                      ¦   «         rt          | ¦  «        S | S ©N)Ú
isinstanceÚfloatÚ
is_integerÚint)Únums    r&   Úconv_to_intrM   <   s5   € Ý�#•uÑÔð  #§.¢.Ñ"2Ô"2ð Ý�3‰xŒxˆØ€Jr(   )Ú
BlueValuesÚ
OtherBluesÚFamilyBluesÚFamilyOtherBluesÚ	BlueScaleÚ	BlueShiftÚBlueFuzzÚStdHWÚStdVWÚ	StemSnapHÚ	StemSnapVc                 ó^   — | |         }||         }||v r||         }||         j         }nd }|S rG   )r+   )ÚregionFDArraysÚfd_indexÚriÚfd_mapÚregion_fdArrayÚregion_fd_mapÚregion_fdIndexÚprivates           r&   Úget_privaterb   Q   sD   € Ø# BÔ'€NØ˜8Ô$€MØ	ˆ]ÐÐØ& rÔ*ˆØ  Ô0Ô8ˆˆàˆØ€Nr(   c                 ó.  ‡‡ — | d         }| dd…         }t          |d         d¦  «        rd„ |D ¦   «         }nd„ |D ¦   «         }t          |j        ¦  «        D �]»\  }}|j        }	t	          |	dd¦  «        }
||
         \  }}g }|j        dd…         D ]4}|j                             |¦  «        dz
  }|                     |¦  «         Œ5|	g}|	}|D ]0}t          ||||¦  «        }|€|}n|}|                     |¦  «         Œ1t          |¦  «        }|	j
                             ¦   «         D �]ê\  Š}g }‰t          vrŒt          |t          ¦  «        rï	 ˆfd„|D ¦   «         }n3# t          $ r& t!          d	                     ‰¬
¦  «        ¦  «         Y Œfw xY w	 t%          |Ž }n# t&          $ r t)          ‰||¦  «        ‚w xY w	 dg|z  Š d}|D ]g}ˆ fd„t          |¦  «        D ¦   «         }|st+          |¦  «        sd}|Š |                     |¦  «        }|d         |d<   |                     |¦  «         Œh|sd„ |D ¦   «         }n;ˆfd„|D ¦   «         }t+          |¦  «        s|                     |¦  «        }n|d         }t          |t          ¦  «        rkt          |¦  «        D ]Z\  }}t          |t          ¦  «        r.t          |¦  «        D ]\  }}t/          |¦  «        ||         |<   ŒŒHt/          |¦  «        ||<   Œ[nt/          |¦  «        }||	j
        ‰<   �Œì�Œ½dS )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   Nr3   c                 ó   — g | ]	}|j         ‘Œ
S r"   )r3   ©r$   Ú	fdTopDicts     r&   r'   z&merge_PrivateDicts.<locals>.<listcomp>p   s   € ÐNÐNÐN°	˜)Ô+ÐNÐNÐNr(   c                 ó   — g | ]}|g‘ŒS r"   r"   re   s     r&   r'   z&merge_PrivateDicts.<locals>.<listcomp>r   s   € ÐHÐHÐH¨)˜9˜+ÐHÐHÐHr(   Úvsindexc                 ó*   •— g | ]}|j         ‰         ‘ŒS r"   ©ÚrawDict©r$   ÚpdÚkeys     €r&   r'   z&merge_PrivateDicts.<locals>.<listcomp>�   s   ø€ Ð<Ð<Ð<°"˜bœj¨œoÐ<Ð<Ð<r(   z\Warning: {key} in default font Private dict is missing from another font, and was discarded.)rn   Fc                 ó,   •— g | ]\  }}|‰|         z
  ‘ŒS r"   r"   )r$   ÚiÚvalÚprev_val_lists      €r&   r'   z&merge_PrivateDicts.<locals>.<listcomp>¬   s4   ø€ ð  ð  ð  Ù5=°a¸˜˜}¨QÔ/Ñ/ð ð  ð  r(   Tc                 ó   — g | ]
}|d          ‘ŒS ©r   r"   )r$   Údatas     r&   r'   z&merge_PrivateDicts.<locals>.<listcomp>º   s   € Ð=Ð=Ð=¨D  Q¤Ð=Ð=Ð=r(   c                 ó*   •— g | ]}|j         ‰         ‘ŒS r"   rj   rl   s     €r&   r'   z&merge_PrivateDicts.<locals>.<listcomp>¼   s   ø€ Ð8Ð8Ð8¨b˜"œ* Sœ/Ð8Ð8Ð8r(   )r5   Ú	enumerater3   r+   ÚgetattrÚ	locationsÚindexÚappendrb   Úlenrk   ÚitemsÚpd_blend_fieldsrH   ÚlistÚKeyErrorÚprintÚformatÚzipÚ
IndexErrorr   r   Ú	getDeltasrM   )!Ú	top_dictsÚvsindex_dictÚ	var_modelr]   r>   Úregion_top_dictsrZ   r[   Ú	font_dictÚprivate_dictrh   Ú	sub_modelÚ_Úmaster_indicesÚlocrp   ÚpdsÚlast_pdr\   rm   Únum_mastersÚvalueÚdataListÚvaluesÚany_points_differÚval_listÚrel_listÚdeltasÚitemÚjÚjtemrn   rr   s!                                  @@r&   Úmerge_PrivateDictsr�   \   s#  øø€ ð" ˜Œl€GØ    ”}ÐÝÐ Ô" IÑ.Ô.ð IØNÐNÐ=MÐNÑNÔNˆˆàHÐHÐ7GÐHÑHÔHˆÝ(¨¬Ñ9Ô9ð Z1ñ Z1Ñˆ�)Ø Ô(ˆÝ˜,¨	°1Ñ5Ô5ˆð $ GÔ,‰ˆ	�1ØˆØÔ& q r rÔ*ð 	%ð 	%ˆCØÔ#×)Ò)¨#Ñ.Ô.°Ñ2ˆAØ×!Ò! !Ñ$Ô$Ð$Ð$ØˆnˆØˆØ ð 	ð 	ˆBÝ˜^¨X°r¸6ÑBÔBˆBð ˆzØ��à�Ø�JŠJ�r‰NŒNˆNˆNÝ˜#‘h”hˆØ&Ô.×4Ò4Ñ6Ô6ð C	1ñ C	1‰JˆC�ØˆHØ�/Ð)Ð)ØÝ˜%¥Ñ&Ô&ð 2)ðØ<Ð<Ð<Ð<¸Ð<Ñ<Ô<�F�FøÝð ð ð Ýð%ç%+¢V° V¡_¤_ñô ð ð
 �HðøøøðFÝ  &˜\�F�FøÝ!ð Fð Fð FÝ1°#°u¸fÑEÔEÐEðFøøøðð "#  kÑ 1�Ø$)Ð!Ø &ð ,ð ,�Hð ð  ð  ð  ÝAJÈ8ÑATÔATð ñ  ô  �Hð .ð 1µxÀÑ7IÔ7Ið 1Ø,0Ð)Ø$,�MØ&×0Ò0°Ñ:Ô:�Fð !)¨¤�F˜1‘IØ—O’O FÑ+Ô+Ð+Ð+ð )ð >Ø=Ð=°HÐ=Ñ=Ô=�Høà8Ð8Ð8Ð8°CÐ8Ñ8Ô8�Ý Ñ'Ô'ð )Ø(×2Ò2°6Ñ:Ô:�H�Hà% aœy�Hõ ˜(¥DÑ)Ô)ð 1Ý(¨Ñ2Ô2ð 8ð 8‘G�A�tÝ! $­Ñ-Ô-ð 8Ý'0°¡¤ð ?ð ?™G˜A˜tÝ-8¸Ñ->Ô->˜H QœK¨™N˜Nð?õ '2°$Ñ&7Ô&7˜ ™˜ð8õ ' xÑ0Ô0�à(0ˆLÔ  Ñ%Ñ%ñGC	1ð/Z1ð Z1s   ÅEÅ-FÆFÆ	FÆF8c                 ó*   — d| v r| d         S | d         S )NzCFF r)   r"   )Úfonts    r&   Ú_cff_or_cff2r    Ð   s   € Ø�€~€~Ø�FŒ|ÐØ�Œ<Ðr(   c                 óÌ  — i }|d         }|dd…         }t          |¦  «        }t          |¦  «        j        j        d         }t	          |d¦  «        sd„ t          |¦  «        D ¦   «         |d<   |S i }|j        }|                     ¦   «         }	t          |¦  «        D ]\  }
}|||	|
         <   ||vri ||<   Œt          |¦  «        D ]�\  }}|                     ¦   «         }t          |¦  «        j        j        d         }t	          |d¦  «        s||d                  }d||         |<   Œb|j        }t          |¦  «        D ]$\  }
}|||
                  }||         }||vr|||<   Œ%Œž|S )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ÚFDSelectc                 ó   — i | ]}|d “ŒS rt   r"   )r$   r\   s     r&   ú
<dictcomp>zgetfd_map.<locals>.<dictcomp>æ   s   € Ð8Ð8Ð8˜r�R˜Ð8Ð8Ð8r(   )	r|   r    r0   r1   r5   Úranger¢   ÚgetGlyphOrderrw   )r6   Ú
fonts_listr]   Údefault_fontÚregion_fontsÚnum_regionsr>   Úgname_mappingÚdefault_fdSelectÚ
glyphOrderÚgidÚfdIndexr\   Úregion_fontÚregion_glyphOrderÚregion_topDictÚdefault_fdIndexÚregion_fdSelectÚ
region_maps                      r&   Ú	getfd_mapr¶   Ö   s±  € ð €FØ˜a”=€LØ˜a˜b˜b”>€LÝ�lÑ#Ô#€KÝ˜<Ñ(Ô(Ô,Ô9¸!Ô<€GÝ�7˜JÑ'Ô'ð ð 9Ð8¥U¨;Ñ%7Ô%7Ð8Ñ8Ô8ˆˆq‰	Øˆà€MØÔ'ÐØ×+Ò+Ñ-Ô-€JÝ!Ð"2Ñ3Ô3ð !ð !‰ˆˆWØ)0ˆ�j ”oÑ&Ø˜&Ð Ð Ø ˆF�7‰OøÝ$ \Ñ2Ô2ð -ð -‰ˆˆKØ'×5Ò5Ñ7Ô7ÐÝ% kÑ2Ô2Ô6ÔCÀAÔFˆÝ�~ zÑ2Ô2ð 
	-à+Ð,=¸aÔ,@ÔAˆOØ*+ˆF�?Ô# BÑ'Ð'à,Ô5ˆOÝ )¨/Ñ :Ô :ð -ð -‘��WØ"/Ð0AÀ#Ô0FÔ"G�Ø# OÔ4�
Ø˜ZÐ'Ð'Ø%,�J˜r‘Nøð	-ð
 €Mr(   ÚCVarDataz'varDataList masterSupports vsindex_dictc                 ó8  — | d         j         j        d         }|gd„ |dd …         D ¦   «         z   }t          |j        ¦  «        }t	          ||||¦  «        }t          | |¦  «        }t          ||j        ||¦  «         t          | ||j	        |j
        ¦  «         d S )Nr)   r   c                 óL   — g | ]!}t          |¦  «        j        j        d          ‘Œ"S rt   )r    r0   r1   )r$   ÚttFonts     r&   r'   z&merge_region_fonts.<locals>.<listcomp>  s8   € ð ð ð Ø5;��VÑÔÔ Ô-¨aÔ0ðð ð r(   r   )r0   r1   r|   ÚmappingÚmerge_charstringsr¶   r�   r‡   rA   r8   r9   )	r6   ÚmodelÚordered_fonts_listr­   r>   r†   r’   ÚcvDatar]   s	            r&   Úmerge_region_fontsrÀ     sµ   € Ø�fŒoÔ!Ô.¨qÔ1€GØ�	ð ð Ø?QÐRSÐRTÐRTÔ?Uðñ ô ñ €Iõ �e”mÑ$Ô$€KÝ˜z¨;¸	À5ÑIÔI€FÝ�wÐ 2Ñ3Ô3€FÝ�y &Ô"5°u¸fÑEÔEÐEÝ�7˜E 6Ô#5°vÔ7LÑMÔMÐMÐMÐMr(   Fc                 ó>  — || vrd S | |         }|rŒ|                      ¦   «          |j        g k    rd S t          |j        ¦  «        dk    rS|j        d         dk    rBt          |j        ¦  «        dk    s(t          |j        d         ¦  «        t          t
          fv rd S |S )Né   éÿÿÿÿÚendcharr   r   )Ú	decompileÚprogramr|   ÚtyperK   rI   )ÚcharstringsÚ	glyphNameÚfilterEmptyÚcss       r&   Ú_get_csrÌ     s    € Ø˜Ð#Ð#ØˆtØ	�YÔ	€Bàð 	Ø
�Š‰ŒˆØŒ:˜ÒÐØ�4å�”
‰OŒO˜qÒ Ð Ø”
˜2” )Ò+Ð+Ý�R”Z‘” AÒ%Ð%­¨b¬j¸¬mÑ)<Ô)<ÅÅeÀÐ)LÐ)Là�4à€Ir(   c                 óT  — g }| j         dd …         D ]C}||vr|                     |¦  «         |                     |                     |¦  «        ¦  «         ŒDt          j                             |d d¦  «        }t          |¦  «        }	|	||<   | |gf||	<   |                     |¦  «         |	S )Nr   F)Úsupportsr{   rz   r   r-   ÚbuildVarDatar|   )
r½   rn   r9   r‡   Úvsindex_by_keyr8   ÚvarTupleIndexesÚsupportÚvar_datarh   s
             r&   Ú_add_new_vsindexrÔ   #  sÀ   € ð €OØ”> ! " "Ô%ð >ð >ˆØ˜.Ð(Ð(Ø×!Ò! 'Ñ*Ô*Ð*Ø×Ò˜~×3Ò3°GÑ<Ô<Ñ=Ô=Ð=Ð=ÝŒ~×*Ò*¨?¸DÀ%ÑHÔH€HÝ�,ÑÔ€GØ!€N�3ÑØ" S E˜N€L�ÑØ×Ò�xÑ Ô Ð Ø€Nr(   c           
      ót  ‡— i }i }g }g }|d         j         }t          | ¦  «        D �]c\  }	Šˆfd„t          |¦  «        D ¦   «         }
|                     |
¦  «        \  }}|d         }t          g ‰|d¦  «        }t          |_        |                     |¦  «         |dd …         }t          |d¬¦  «        D ];\  }}|                     |¦  «         t          |_        |                     |¦  «         Œ<|                     |j	        |j
        |d¬¦  «        }||‰<   |sŒö|j        r	d|j        vr�Œt          d„ |
D ¦   «         ¦  «        }	 ||         }n$# t          $ r t          ||||||¦  «        }Y nw xY w|dk    r|d	g|j        d d…<   �Œe|sd
|z  }t          ||||||¦  «         t!          |||¬¦  «        }|S )Nr   c                 óJ   •— g | ]\  }}t          |j        ‰|d k    ¦  «        ‘Œ S rt   )rÌ   ÚCharStrings)r$   rp   ÚtdÚgnames      €r&   r'   z%merge_charstrings.<locals>.<listcomp>;  s<   ø€ ð 
ð 
ð 
Ù7<°q¸"�G�B”N E¨1°ª6Ñ2Ô2ð
ð 
ð 
r(   r   )ÚstartT)ra   ÚglobalSubrsrˆ   ÚoptimizeÚblendc              3   ó   K  — | ]}|d uV — Œ	d S rG   r"   )r$   Úvs     r&   ú	<genexpr>z$merge_charstrings.<locals>.<genexpr>e  s&   è è € Ð2Ð2 a�A˜T�MÐ2Ð2Ð2Ð2Ð2Ð2r(   rh   )T)r8   r9   r‡   )r×   rw   ÚgetSubModelÚCFF2CharStringMergePenÚMergeOutlineExtractorÚoutlineExtractorÚdrawÚrestartÚgetCharStringra   rÛ   Úseen_movetorÆ   Útupler€   rÔ   r·   )r­   r’   r†   ÚmasterModelr‡   rÐ   r8   r9   Údefault_charstringsr®   Úall_csr½   Úmodel_csÚdefault_charstringÚvar_penÚ	region_csÚ
region_idxÚregion_charstringÚnew_csrn   rh   r¿   rÙ   s                         @r&   r¼   r¼   3  sp  ø€ Ø€LØ€NØ€KØ€NØ# Aœ,Ô2ÐÝ 
Ñ+Ô+ð 66ñ 66‰
ˆˆUð
ð 
ð 
ð 
Ý@IÈ)Ñ@TÔ@Tð
ñ 
ô 
ˆð &×1Ò1°&Ñ9Ô9‰ˆˆxð & aœ[ÐÝ(¨¨U°KÀÑCÔCˆõ /DÐÔ+Ø×Ò Ñ(Ô(Ð(ð ˜Q˜R˜R”Lˆ	Ý-6°yÈÐ-JÑ-JÔ-Jð 	,ð 	,Ñ)ˆJÐ)Ø�OŠO˜JÑ'Ô'Ð'Ý1FÐÔ.Ø×"Ò" 7Ñ+Ô+Ð+Ð+ð ×&Ò&Ø&Ô.Ø*Ô6ØØð	 'ñ 
ô 
ˆð &,Ð˜EÑ"àð 	ØàÔ#ð 	¨¸¼Ð)FÐ)Fñ õ Ð2Ð2¨6Ð2Ñ2Ô2Ñ2Ô2ˆð	Ø$ SÔ)ˆGˆGøÝð 	ð 	ð 	Ý&Ø�s˜N¨L¸.È+ñô ˆGˆGˆGð	øøøð �aŠ<ˆ<Ø")¨9Ð!5ˆFŒN˜2˜A˜2Ñùð
 ð 
Ø˜Ñ#ˆÝØ˜˜n¨l¸NÈKñ	
ô 	
ð 	
õ ØØ%Ø!ðñ ô €Fð €Ms   ÅEÅE2Å1E2c                   ó   — e Zd ZdZdd„ZdS )Ú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.r   c                 ó    — |                       ¦   «         }| j        s2|t          |¦  «        dz  z  r
|dd …         }| j        | _        d| _        |S )NrÂ   r   )ÚpopallÚgotWidthr|   ÚdefaultWidthXÚwidth)ÚselfÚevenOddÚargss      r&   ÚpopallWidthz%CFFToCFF2OutlineExtractor.popallWidthˆ  sS   € Ø�{Š{‰}Œ}ˆØŒ}ð 	Ø�#˜d™)œ) a™-Ñ(ð  Ø˜A˜B˜B”x�ØÔ+ˆDŒJØˆDŒMØˆr(   Nrt   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rþ   r"   r(   r&   rõ   rõ   ƒ  s2   € € € € € ðð ðð ð ð ð ð r(   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.Nc           	      óV   •— t          ¦   «                              |||||||¦  «         d S rG   )ÚsuperÚ__init__)	rû   ÚpenÚ
localSubrsrÛ   ÚnominalWidthXrù   ra   ÚblenderÚ	__class__s	           €r&   r  zMergeOutlineExtractor.__init__—  s;   ø€ õ 	‰Œ×ÒØ�˜[¨-¸ÈÐQXñ	
ô 	
ð 	
ð 	
ð 	
r(   c                 ól   — |                       ¦   «         }| j        t          |¦  «        dz  z   | _        |S )NrÂ   )rþ   Ú	hintCountr|   )rû   rý   s     r&   Ú
countHintsz MergeOutlineExtractor.countHints¥  s0   € Ø×ÒÑ!Ô!ˆØœ­#¨d©)¬)°q©.Ñ8ˆŒØˆr(   c                 ó<   — | j                              ||¦  «         d S rG   )r  Úadd_hint)rû   rÇ   rý   s      r&   Ú_hint_opzMergeOutlineExtractor._hint_opª  s    € ØŒ×Ò˜$ Ñ%Ô%Ð%Ð%Ð%r(   c                 óZ   — |                       ¦   «         }|                      d|¦  «         d S )NÚhstem©r  r  ©rû   rz   rý   s      r&   Úop_hstemzMergeOutlineExtractor.op_hstem­  ó+   € Ø�ŠÑ Ô ˆØ�Š�g˜tÑ$Ô$Ð$Ð$Ð$r(   c                 óZ   — |                       ¦   «         }|                      d|¦  «         d S )NÚvstemr  r  s      r&   Úop_vstemzMergeOutlineExtractor.op_vstem±  r  r(   c                 óZ   — |                       ¦   «         }|                      d|¦  «         d S )NÚhstemhmr  r  s      r&   Ú
op_hstemhmz MergeOutlineExtractor.op_hstemhmµ  ó+   € Ø�ŠÑ Ô ˆØ�Š�i Ñ&Ô&Ð&Ð&Ð&r(   c                 óZ   — |                       ¦   «         }|                      d|¦  «         d S )NÚvstemhmr  r  s      r&   Ú
op_vstemhmz MergeOutlineExtractor.op_vstemhm¹  r  r(   c                 óæ   — | j         s>|                      ¦   «         }|r|                      d|¦  «         | j        dz   dz  | _         | j        d                              || j         ¦  «        \  }}||fS )Nr   é   é   rÃ   )ÚhintMaskBytesr  r  r  ÚcallingStackÚgetBytes)rû   rz   rý   r%  s       r&   Ú_get_hintmaskz#MergeOutlineExtractor._get_hintmask½  s|   € ØÔ!ð 	;Ø—?’?Ñ$Ô$ˆDØð /Ø—’˜i¨Ñ.Ô.Ð.Ø"&¤.°1Ñ"4¸Ñ!:ˆDÔØ#Ô0°Ô4×=Ò=¸eÀTÔEWÑXÔXÑˆ�uØ�mÐ#Ð#r(   c                 ór   — |                       |¦  «        \  }}| j                             d|g¦  «         ||fS )NÚhintmask©r(  r  Úadd_hintmask©rû   rz   r%  s      r&   Úop_hintmaskz!MergeOutlineExtractor.op_hintmaskÆ  ó?   € Ø#×1Ò1°%Ñ8Ô8Ñˆˆ}ØŒ×Ò˜j¨=¨/Ñ:Ô:Ð:Ø˜eÐ#Ð#r(   c                 ór   — |                       |¦  «        \  }}| j                             d|g¦  «         ||fS )NÚcntrmaskr+  r-  s      r&   Úop_cntrmaskz!MergeOutlineExtractor.op_cntrmaskË  r/  r(   )NN)rÿ   r   r  r  r  r  r  r  r  r  r!  r(  r.  r2  Ú__classcell__©r  s   @r&   rã   rã   ’  sÖ   ø€ € € € € ð-ð -ð Øð
ð 
ð 
ð 
ð 
ð 
ðð ð ð
&ð &ð &ð%ð %ð %ð%ð %ð %ð'ð 'ð 'ð'ð 'ð 'ð$ð $ð $ð$ð $ð $ð
$ð $ð $ð $ð $ð $ð $r(   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.ç{®Gáz„?c                 óê   •— t          ¦   «                              d d d|¬¦  «         d| _        || _        || _        || _        d| _        d| _        || _        t          |t          ¬¦  «        | _
        d S )NT)rú   ÚglyphSetr)   ÚroundTolerancer   F©Úround)r  r  Úpt_indexÚ	_commandsÚm_indexr’   Úprev_move_idxrè   rÉ   r   r;  )rû   Údefault_commandsrÉ   r’   Ú
master_idxr9  r  s         €r&   r  zCFF2CharStringMergePen.__init__Ô  s}   ø€ õ 	‰Œ×ÒØ ¨DÀð 	ñ 	
ô 	
ð 	
ð ˆŒØ)ˆŒØ!ˆŒØ&ˆÔØˆÔØ ˆÔØ"ˆŒÝ˜~µUÐ;Ñ;Ô;ˆŒ
ˆ
ˆ
r(   c                 óV  — | j         dk    r| j                             ||gg¦  «         no| j        | j                 }|d         |k    r6t	          || j        t          |d         ¦  «        |d         | j        ¦  «        ‚|d                              |¦  «         | xj        dz  c_        d S ©Nr   r   )r>  r=  r{   r<  r   r|   rÉ   )rû   Ú
point_typeÚ	pt_coordsÚcmds       r&   Ú	add_pointz CFF2CharStringMergePen.add_pointä  s§   € ØŒ<˜1ÒÐØŒN×!Ò! :°	¨{Ð";Ñ<Ô<Ð<Ð<à”. ¤Ô/ˆCØ�1Œv˜Ò#Ð#Ý2Ø ¤­s°3°q´6©{¬{¸CÀ¼FÀDÄNñô ð ð �ŒF�MŠM˜)Ñ$Ô$Ð$ØˆŒ˜ÑˆŒˆˆr(   c                 óV  — | j         dk    r| j                             ||gg¦  «         no| j        | j                 }|d         |k    r6t	          || j        t          |d         ¦  «        |d         | j        ¦  «        ‚|d                              |¦  «         | xj        dz  c_        d S rC  ©r>  r=  r{   r<  r   r|   rÉ   )rû   Ú	hint_typerý   rF  s       r&   r  zCFF2CharStringMergePen.add_hintð  s§   € ØŒ<˜1ÒÐØŒN×!Ò! 9¨t¨fÐ"5Ñ6Ô6Ð6Ð6à”. ¤Ô/ˆCØ�1Œv˜Ò"Ð"Ý1Ø˜tœ}­c°#°a´&©k¬k¸3¸q¼6À4Ä>ñô ð ð �ŒF�MŠM˜$ÑÔÐØˆŒ˜ÑˆŒˆˆr(   c                 óÒ  — | j         dk    r:| j                             |g g¦  «         | j                             d|gg¦  «         n‘| j        | j                 }|d         |k    r6t	          || j        t          |d         ¦  «        |d         | j        ¦  «        ‚| xj        dz  c_        | j        | j                 }|d                              |¦  «         | xj        dz  c_        d S )Nr   Ú r   rI  )rû   rJ  Úabs_argsrF  s       r&   r,  z#CFF2CharStringMergePen.add_hintmaskü  sá   € ð
 Œ<˜1ÒÐØŒN×!Ò! 9¨b /Ñ2Ô2Ð2ØŒN×!Ò! 2¨ zÐ"2Ñ3Ô3Ð3Ð3à”. ¤Ô/ˆCØ�1Œv˜Ò"Ð"Ý1Ø˜tœ}­c°#°a´&©k¬k¸3¸q¼6À4Ä>ñô ð ð ˆMŒM˜QÑˆMŒMØ”. ¤Ô/ˆCØ�ŒF�MŠM˜(Ñ#Ô#Ð#ØˆŒ˜ÑˆŒˆˆr(   c                 ó–   — | j         sd| _         |                      |¦  «        }|                      d|¦  «         | j        dz
  | _        d S )NTÚrmovetor   )rè   Ú_prG  r<  r?  ©rû   ÚptrE  s      r&   Ú_moveTozCFF2CharStringMergePen._moveTo  sO   € ØÔð 	$Ø#ˆDÔØ—G’G˜B‘K”Kˆ	Ø�Š�y )Ñ,Ô,Ð,ð "œ]¨QÑ.ˆÔÐÐr(   c                 ó\   — |                       |¦  «        }|                      d|¦  «         d S )NÚrlineto©rP  rG  rQ  s      r&   Ú_lineTozCFF2CharStringMergePen._lineTo  s+   € Ø—G’G˜B‘K”Kˆ	Ø�Š�y )Ñ,Ô,Ð,Ð,Ð,r(   c                 ó†   — | j         } ||¦  «         ||¦  «        z    ||¦  «        z   }|                      d|¦  «         d S )NÚ	rrcurvetorV  )rû   Úpt1Úpt2Úpt3rP  rE  s         r&   Ú_curveToOnez"CFF2CharStringMergePen._curveToOne  sJ   € ØŒWˆØ�B�s‘G”G˜b˜b ™gœgÑ%¨¨¨3©¬Ñ/ˆ	Ø�Š�{ IÑ.Ô.Ð.Ð.Ð.r(   c                 ó   — d S rG   r"   ©rû   s    r&   Ú
_closePathz!CFF2CharStringMergePen._closePath!  ó   € Øˆr(   c                 ó   — d S rG   r"   r_  s    r&   Ú_endPathzCFF2CharStringMergePen._endPath$  ra  r(   c                 ó0   — d| _         || _        d| _        d S )Nr   )r   r   )r<  r>  Ú_p0)rû   rñ   s     r&   ræ   zCFF2CharStringMergePen.restart'  s   € ØˆŒØ!ˆŒØˆŒˆˆr(   c                 ó   — | j         S rG   )r=  r_  s    r&   ÚgetCommandsz"CFF2CharStringMergePen.getCommands,  s
   € ØŒ~Ðr(   c                 ó  — |D ]%}|d         }t          |Ž }t          |¦  «        |d<   Œ&d}|D ]Þ}|d         }|dv rFt          |d         ¦  «        }t          |¦  «        st          d¦  «        ‚|d         d         g|d<   nˆ|d         }	g }
|	D ]v}t          |¦  «        r|
                     |d         ¦  «         Œ- ||¦  «        dd…         }|d         g|z   }|                     d¦  «         |
                     |¦  «         Œw|
|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*  r1  z3Hintmask values cannot differ between source fonts.)rƒ   r   r   r   r{   )rû   ÚcommandsÚget_delta_funcrF  rý   Úm_argsÚlastOpÚopÚcoordÚcoordsÚ
new_coordsr™   s               r&   Úreorder_blend_argsz)CFF2CharStringMergePen.reorder_blend_args/  sW  € ð, ð 	"ð 	"ˆCà�q”6ˆDÝ˜$�ZˆFõ ˜&‘\”\ˆC�‰FˆFØˆØð 	ð 	ˆCØ�Q”ˆBð Ð1Ð1Ð1Ý˜S œV™œ�Ý ‘”ð Ý*ØMñô ð ð   œ( 1œ+˜��A‘�à˜Qœ�Ø�
Ø#ð 1ð 1�EÝ ‘”ð 1Ø"×)Ò)¨%°¬(Ñ3Ô3Ð3Ð3ð "0 °Ñ!6Ô!6°q°r°rÔ!:˜Ø!& q¤ 
¨VÑ 3˜ØŸš Q™œ˜Ø"×)Ò)¨%Ñ0Ô0Ð0Ð0Ø#��A‘ØˆFˆFØˆr(   NTc                 óæ   — | j         }|                      |t          |j        | j        ¬¦  «        ¦  «        }|rt          |dt          ¬¦  «        }t          |¦  «        }t          |||¬¦  «        }|S )Nr:  F)ÚgeneralizeFirstÚmaxstack)rÆ   ra   rÛ   )	r=  rq  r   r…   r;  r   r   r   r   )rû   ra   rÛ   rˆ   rÜ   ri  rÆ   Ú
charStrings           r&   rç   z$CFF2CharStringMergePen.getCharStringh  sŽ   € ð ”>ˆØ×*Ò*Ø•g˜iÔ1¸¼ÐDÑDÔDñ
ô 
ˆð ð 	Ý)Ø¨%½-ðñ ô ˆHõ $ HÑ-Ô-ˆÝ!Ø W¸+ð
ñ 
ô 
ˆ
ð Ðr(   )r6  )NNNT)rÿ   r   r  r  r  rG  r  r,  rS  rW  r]  r`  rc  ræ   rg  rq  rç   r3  r4  s   @r&   râ   râ   Ñ  s  ø€ € € € € Ø*Ð*ð TXð<ð <ð <ð <ð <ð <ð 
ð 
ð 
ð
ð 
ð 
ðð ð ð&/ð /ð /ð-ð -ð -ð/ð /ð /ð
ð ð ðð ð ðð ð ð
ð ð ð7ð 7ð 7ðt HLðð ð ð ð ð ð ð r(   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ÚMergeTypeErrorrA   rE   rM   r~   rb   r�   r    r¶   r·   rÀ   rÌ   rÔ   r¼   rõ   rã   râ   r"   r(   r&   ú<module>r…     s  ðØ "Ð "Ð "Ð "Ð "Ð "ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ð Ð Ø NÐ NÐ NÐ NÐ NÐ NÐ NÐ NØ $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø /Ð /Ð /Ð /Ð /Ð /Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ :Ð :Ð :Ð :Ð :Ð :Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð )€Ø-€ð;ð ;ð ;ð ÐÐMÑNÔNð%ð %ñ OÔNð%ðð ð ð€ðð ð ðq1ð q1ð q1ðhð ð ð(ð (ð (ðV ˆ:�jÐ"KÑLÔL€ð	Nð 	Nð 	Nðð ð ð ð&ð ð ð Mð Mð Mð`ð ð ð ð Ð 2ñ ô ð ð<$ð <$ð <$ð <$ð <$Ð5ñ <$ô <$ð <$ð~fð fð fð fð f˜_ñ fô fð fð fð fr(   