§
    ¢”jƒ(  ã                   óú  — d Z d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mZmZmZ d
Zdeegef         dee         deee                  fd„Zdededefd„Z G d„ de	¦  «        Z ed¬¦  «         G d„ de¦  «        ¦   «         Z ed¬¦  «         G d„ de¦  «        ¦   «         Zi ej        df e¦   «         g“ej        df ed¬¦  «        g“ej         df ed¬¦  «        g“ej!        d f ed!d"¬#¦  «        g“ej         df e¦   «         g“ej"        df ed$¬¦  «        g“ej#        df ed%d&¬'¦  «         ed(d)¬'¦  «        g“ej$        df ed%d&¬'¦  «         ed*d+¬'¦  «        g“ej%        df ed,d-¬'¦  «         ed.d/¬'¦  «        g“ej&        df ed0¬¦  «        g“ej&        df e¦   «         g“ej&        d1f e¦   «         g“ej'        df ed2¬¦  «        g“ej'        df e¦   «         g“ej'        d1f ed3¬4¦  «         ed5¬4¦  «         ed6¬4¦  «        g“ej(        df ed7¬¦  «        g“ej(        df e¦   «         g“ej(        d1f e¦   «         gej)        df ed8¬¦  «        gej)        df e¦   «         gej)        d1f ed3¬4¦  «         ed5¬4¦  «         ed6¬4¦  «        gej*        df ed9¬¦  «         ed3¬4¦  «         ed6¬4¦  «        gej+        d f ed:¬¦  «        gej,        d f ed;¬¦  «        gej-        d f e¦   «         gej.        d f ed<¬4¦  «        gej/        d f ed=¬¦  «        gej0        d f ed>d?¬'¦  «        gej1        d f ed@dA¬'¦  «        gej2        d f edBdC¬'¦  «         edDdE¬'¦  «        gi¥Z3eej4        j5        dFf         Z6dGej4        dHedee6         fdI„Z7eee6         ee6         gd f         Z8dGej4        dHedJe8dee6         fdK„Z9dLej:        dMee         fdN„Z;d S )OzReorder glyphs in a font.zRod Sheeteré    )ÚttLib)ÚotBase)ÚotTables)ÚABCÚabstractmethod)Ú	dataclass)Údeque)ÚOptionalÚAnyÚCallableÚDequeÚIterableÚListÚTupleÚCoverageÚget_glyph_idÚglyphsÚparallel_listc                 óâ   ‡ — |rSt          d„ t          ||¦  «        D ¦   «         ˆ fd„¬¦  «        }t          t          t          |Ž ¦  «        \  }}||d d …<   nt          |‰ ¬¦  «        }||d d …<   d S )Nc              3   ó$   K  — | ]\  }}||fV — Œd S ©N© )Ú.0ÚgÚes      úl/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/fontTools/ttLib/reorderGlyphs.pyú	<genexpr>z_sort_by_gid.<locals>.<genexpr>$   s*   è è € Ð;Ð;™˜˜1ˆa�ˆVÐ;Ð;Ð;Ð;Ð;Ð;ó    c                 ó&   •—  ‰| d         ¦  «        S )Nr   r   )Útr   s    €r   ú<lambda>z_sort_by_gid.<locals>.<lambda>%   s   ø€ ˜,˜, q¨¤tÑ,Ô,€ r   ©Úkey)ÚsortedÚzipÚmapÚlist)r   r   r   Ú	reorderedÚsorted_glyphsÚsorted_parallel_lists   `     r   Ú_sort_by_gidr+      s—   ø€ ð
 ð 9ÝØ;Ð;¥ F¨MÑ :Ô :Ð;Ñ;Ô;Ø,Ð,Ð,Ð,ð
ñ 
ô 
ˆ	õ /2µ$½¸Y¸Ñ.HÔ.HÑ+ˆÐ+Ø/ˆ�a�a�aÑÐå˜v¨<Ð8Ñ8Ô8ˆà€Fˆ1ˆ1ˆ1�I€I€Ir   ÚvalueÚdotted_attrÚreturnc                 óŠ   — |                      d¦  «        }|sJ ‚|r'|                     d¦  «        }t          | |¦  «        } |°'| S )Nú.r   )ÚsplitÚpopÚgetattr)r,   r-   Ú
attr_namesÚ	attr_names       r   Ú_get_dotted_attrr6   /   sZ   € Ø×"Ò" 3Ñ'Ô'€JØÐÐÐà
ð *Ø—N’N 1Ñ%Ô%ˆ	Ý˜˜yÑ)Ô)ˆð ð *ð €Lr   c                   óJ   — e Zd ZdZedej        dej        ddfd„¦   «         Z	dS )ÚReorderRulezEA rule to reorder something in a font to match the fonts glyph order.Úfontr,   r.   Nc                 ó   — d S r   r   )Úselfr9   r,   s      r   ÚapplyzReorderRule.apply<   s   € ØJMÈ#r   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚTTFontr   Ú	BaseTabler<   r   r   r   r8   r8   9   s@   € € € € € ØOÐOàØM˜%œ,ÐM¨vÔ/?ÐMÀDÐMÐMÐMñ „^ØMÐMÐMr   r8   T)Úfrozenc                   ód   — e Zd ZU dZdZee         ed<   eZ	eed<   de
j        dej        ddfd„ZdS )	ÚReorderCoveragezNReorder a Coverage table, and optionally a list that is sorted parallel to it.NÚparallel_list_attrÚcoverage_attrr9   r,   r.   c                 óè  — t          || j        ¦  «        }t          |¦  «        t          ur’d }| j        rlt          || j        ¦  «        }t          |¦  «        t          u sJ | j        › d�¦   «         ‚t          |¦  «        t          |j        ¦  «        k    s
J d¦   «         ‚t          |j        |j        |¦  «         d S | j        rJ d| › �¦   «         ‚|D ]}t          |j        |j        d ¦  «         Œd S )Nú should be a listzNothing makes sensez2Can't have multiple coverage AND a parallel list; )	r6   rG   Útyper'   rF   Úlenr   r+   Ú
getGlyphID)r;   r9   r,   Úcoverager   Úcoverage_entrys         r   r<   zReorderCoverage.applyH   s*  € Ý# E¨4Ô+=Ñ>Ô>ˆå�‰>Œ>¥Ð%Ð%à ˆMØÔ&ð YÝ 0°¸Ô8OÑ PÔ P�å˜Ñ'Ô'­4Ð/Ð/Ð/ØÔ-Ð@Ð@Ð@ñ 0Ô/Ð/å˜=Ñ)Ô)­S°´Ñ-AÔ-AÒAÐAÐAÐCXÑAÔAÐAå˜œ¨(¬/¸=ÑIÔIÐIÐIÐIð
 Ô+ðKð KàJÀDÐJÐJñKô Kð Kð #+ð Kð K�Ý˜Tœ_¨nÔ.CÀTÑJÔJÐJÐJðKð Kr   )r=   r>   r?   r@   rF   r
   ÚstrÚ__annotations__Ú_COVERAGE_ATTRrG   r   rA   r   rB   r<   r   r   r   rE   rE   @   sz   € € € € € € àXÐXð )-Ð˜ œÐ,Ð,Ñ,Ø'€M�3Ð'Ð'Ñ'ðK˜%œ,ð K¨vÔ/?ð KÀDð Kð Kð Kð Kð Kð Kr   rE   c                   óP   — e Zd ZU dZeed<   eed<   dej        dej	        ddfd„Z
dS )	ÚReorderLista7  Reorder the items within a list to match the updated glyph order.

    Useful when a list ordered by coverage itself contains something ordered by a gid.
    For example, the PairSet table of https://docs.microsoft.com/en-us/typography/opentype/spec/gpos#lookup-type-2-pair-adjustment-positioning-subtable.
    Ú	list_attrr#   r9   r,   r.   Nc                 ó¶   ‡ ‡— t          |‰ j        ¦  «        }t          |t          ¦  «        sJ ‰ j        › d�¦   «         ‚|                     ˆˆ fd„¬¦  «         d S )NrI   c                 óT   •— ‰                      t          | ‰j        ¦  «        ¦  «        S r   )rL   r3   r#   )Úvr9   r;   s    €€r   r!   z#ReorderList.apply.<locals>.<lambda>n   s   ø€ ˜tŸš­w°q¸$¼(Ñ/CÔ/CÑDÔD€ r   r"   )r6   rT   Ú
isinstancer'   Úsort)r;   r9   r,   Úlsts   ``  r   r<   zReorderList.applyk   se   øø€ Ý˜u d¤nÑ5Ô5ˆÝ˜#�tÑ$Ô$ÐJÐJ¨¬Ð&JÐ&JÐ&JÑJÔJÐJØ�ŠÐDÐDÐDÐDÐDˆÑEÔEÐEÐEÐEr   )r=   r>   r?   r@   rO   rP   r   rA   r   rB   r<   r   r   r   rS   rS   `   sk   € € € € € € ðð ð €N€N�NØ	€H€H�HðF˜%œ,ð F¨vÔ/?ð FÀDð Fð Fð Fð Fð Fð Fr   rS   é   é   ÚValue)rF   ÚPairSetNÚPairValueRecordÚSecondGlyphr"   ÚEntryExitRecordÚMarkCoveragezMarkArray.MarkRecord)rG   rF   ÚBaseCoveragezBaseArray.BaseRecordÚLigatureCoveragezLigatureArray.LigatureAttachÚMark1CoveragezMark1Array.MarkRecordÚMark2CoveragezMark2Array.Mark2RecordÚ
PosRuleSeté   ÚChainPosRuleSetÚBacktrackCoverage)rG   ÚInputCoverageÚLookAheadCoverageÚ
SubRuleSetÚChainSubRuleSetÚ
SubstituteÚAttachPointÚLigGlyphÚExtendedShapeCoverageÚItalicsCorrectionÚTopAccentCoverageÚTopAccentAttachmentÚMathKernCoverageÚMathKernInfoRecordsÚVertGlyphCoverageÚVertGlyphConstructionÚHorizGlyphCoverageÚHorizGlyphConstruction.ÚrootÚroot_accessorc              #   ó:   K  — t          | |d„ ¦  «        E d {V —† d S )Nc                 ó,   — |                       |¦  «        S r   )Úextend)ÚfrontierÚnews     r   r!   z!_bfs_base_table.<locals>.<lambda>×   s   € °8·?²?À3Ñ3GÔ3G€ r   )Ú_traverse_ot_data)r|   r}   s     r   Ú_bfs_base_tabler„   Ó   sM   è è € õ !ØˆmÐGÐGñô ð ð ð ð ð ð ð ð ð r   Úadd_to_frontier_fnc              #   ó`  K  — t          ¦   «         }|                     t          j                             || ¦  «        f¦  «         |rg|                     ¦   «         }|d         j        }|V — g }|                     ¦   «         D ]}|                     ||fz   ¦  «         Œ |||¦  «         |°ed S d S )Néÿÿÿÿ)r	   Úappendr   rB   ÚSubTableEntryÚpopleftr,   ÚiterSubTables)r|   r}   r…   r�   ÚpathÚcurrentÚnew_entriesÚsubtable_entrys           r   rƒ   rƒ   ß   sÖ   è è € õ
 %*¡G¤G€HØ‡O‚O•VÔ%×3Ò3°MÀ4ÑHÔHÐJÑKÔKÐKØ
ð 2à×ÒÑ!Ô!ˆØ�r”(”.ˆàˆ
ˆ
ˆ
àˆØ%×3Ò3Ñ5Ô5ð 	9ð 	9ˆNØ×Ò˜t ~Ð&7Ñ7Ñ8Ô8Ð8Ð8àÐ˜8 [Ñ1Ô1Ð1ð ð 2ð 2ð 2ð 2ð 2r   r9   Únew_glyph_orderc           	      ó   ‡ ‡— ‰                       ¦   «         }t          |¦  «        t          |¦  «        k    r0t          dt          |¦  «        › dt          |¦  «        › d�¦  «        ‚t          |¦  «        t          |¦  «        k    rOt          dt          |¦  «        t          |¦  «        z
  › dt          |¦  «        t          |¦  «        z
  › �¦  «        ‚‰                      ¦   «          t          ˆ fd„‰                      ¦   «         D ¦   «         ¦  «        }|rt          d|› �¦  «        ‚‰                      |¦  «         h d£}|D ]›}|‰                      ¦   «         v rƒt          ‰ |         j	        d	|› d
�¦  «        D ]c}|d         j
        }t          |¦  «        t          |dd ¦  «        f}t                               |g ¦  «        D ]}	|	                     ‰ |¦  «         ŒŒdŒœdD ]i}|‰ v rc‰ |         }
|
j        j        d         j        j        Š||
j        j        d         _        ˆfd„|D ¦   «         |
j        j        d         j        _        Œjd S )NzNew glyph order contains z glyphs, but font has z glyphszTNew glyph order does not contain the same set of glyphs as the font:
* only in new: z
* only in old: c              3   óF   •K  — | ]}‰                      |¦  «        °|V — Œd S r   )ÚisLoaded)r   r    r9   s     €r   r   z reorderGlyphs.<locals>.<genexpr>  s4   øè è € ÐGÐG˜a°d·m²mÀAÑ6FÔ6FÐG˜ÐGÐGÐGÐGÐGÐGr   z/Everything should be loaded, following aren't: >   ÚGDEFÚGPOSÚGSUBÚMATHzfont["z"]r‡   ÚFormat)zCFF ÚCFF2r   c                 ó<   •— i | ]}|‰                      |¦  «        “ŒS r   )Úget)r   ÚkÚcharstringss     €r   ú
<dictcomp>z!reorderGlyphs.<locals>.<dictcomp>  s:   ø€ ð Eð Eð EØ*+��;—?’? 1Ñ%Ô%ðEð Eð Er   )ÚgetGlyphOrderrK   Ú
ValueErrorÚsetÚensureDecompiledr$   ÚkeysÚsetGlyphOrderr„   Útabler,   rJ   r3   Ú_REORDER_RULESr›   r<   ÚcffÚtopDictIndexÚCharStringsÚcharStringsÚcharset)r9   r�   Úold_glyph_orderÚ
not_loadedÚcoverage_containersÚtagrŒ   r,   Úreorder_keyÚreorderÚ	cff_tabler�   s   `          @r   ÚreorderGlyphsr³   ô   s´  øø€ Ø×(Ò(Ñ*Ô*€OÝ
ˆ?ÑÔ�s ?Ñ3Ô3Ò3Ð3Ýð:­¨OÑ(<Ô(<ð :ð :Ý Ñ0Ô0ð:ð :ð :ñ
ô 
ð 	
õ
 ˆ?ÑÔ�s ?Ñ3Ô3Ò3Ð3ÝðLÝ! /Ñ2Ô2µS¸Ñ5IÔ5IÑIðLð Lå! /Ñ2Ô2µS¸Ñ5IÔ5IÑIðLð Lñ
ô 
ð 	
ð 	×ÒÑÔÐÝÐGÐGÐGÐG 4§9¢9¡;¤;ÐGÑGÔGÑGÔG€JØð YÝÐWÈ:ÐWÐWÑXÔXÐXà×Ò�Ñ'Ô'Ð'à:Ð:Ð:ÐØ"ð /ð /ˆØ�$—)’)‘+”+ÐÐÝ'¨¨S¬	¬Ð9IÀ#Ð9IÐ9IÐ9IÑJÔJð /ð /�Ø˜Rœœ�Ý# E™{œ{­G°E¸8ÀTÑ,JÔ,JÐK�Ý-×1Ò1°+¸rÑBÔBð /ð /�GØ—M’M $¨Ñ.Ô.Ð.Ð.ð/øð  ð ð ˆØ�$ˆ;ˆ;Ø˜Sœ	ˆIØ#œ-Ô4°QÔ7ÔCÔOˆKØ4CˆIŒMÔ& qÔ)Ô1ðEð Eð Eð EØ/>ðEñ Eô EˆIŒMÔ& qÔ)Ô5ÔAøðð r   )<r@   Ú
__author__Ú	fontToolsr   ÚfontTools.ttLib.tablesr   r   ÚotÚabcr   r   Údataclassesr   Úcollectionsr	   Útypingr
   r   r   r   r   r   r   rQ   rO   Úintr+   r6   r8   rE   rS   Ú	SinglePosÚPairPosr^   Ú
CursivePosÚMarkBasePosÚ
MarkLigPosÚMarkMarkPosÚ
ContextPosÚChainContextPosÚContextSubstÚChainContextSubstÚReverseChainSingleSubstÚ
AttachListÚLigCaretListÚMarkGlyphSetsDefÚMathGlyphInfoÚMathItalicsCorrectionInfoÚMathTopAccentAttachmentÚMathKernInfoÚMathVariantsr¦   rB   r‰   ÚSubTablePathr„   ÚAddToFrontierFnrƒ   rA   r³   r   r   r   ú<module>rÒ      s  ðØ Ð à€
ð Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð €ðØ˜C˜5 #˜:Ô&ðà�ŒIðð ˜D œIÔ&ðð ð ð ð$˜Cð ¨cð °cð ð ð ð ðNð Nð Nð Nð N�#ñ Nô Nð Nð €�$ÐÑÔðKð Kð Kð Kð K�kñ Kô Kñ ÔðKð> €�$ÐÑÔðFð Fð Fð Fð F�+ñ Fô Fñ ÔðFð$Xà„\�1Ð˜˜Ñ)Ô)Ð*ðXð „\�1Ð˜˜¸7ÐCÑCÔCÐDðXð „Z�€O�o�o¸ÐCÑCÔCÐDð	Xð
 „Z�Ð˜˜Ð%6¸MÐJÑJÔJÐKðXð „Z�€O�o�oÑ'Ô'Ð(ðXð „]�AÐ˜˜Ð<MÐNÑNÔNÐOðXð „^�QÐØˆØ(Ð=Sð	
ñ 	
ô 	
ð 	ˆØ(Ð=Sð	
ñ 	
ô 	
ð	ðXð  „]�AÐØˆØ(Ð=Sð	
ñ 	
ô 	
ð 	ˆØ,Ø=ð	
ñ 	
ô 	
ð	ð!Xð2 „^�QÐØˆØ)Ð>Uð	
ñ 	
ô 	
ð 	ˆØ)Ð>Vð	
ñ 	
ô 	
ð	ð3XðB „]�AÐ˜˜¸LÐIÑIÔIÐJðCXðD „]�AÐ˜˜Ñ*Ô*Ð+ðEXðF „]�AÐ˜˜Ñ*Ô*Ð+ðGXðH Ô˜Ð˜o˜oÐARÐSÑSÔSÐTðIXðJ Ô˜Ð˜o˜oÑ/Ô/Ð0ðKXðL Ô˜ÐØˆÐ&9Ð:Ñ:Ô:Øˆ oÐ6Ñ6Ô6ØˆÐ&9Ð:Ñ:Ô:ððMXðX „_�aÐ˜?˜?¸lÐKÑKÔKÐLðYXðZ „_�aÐ˜?˜?Ñ,Ô,Ð-ð[Xð\ „_�aÐ˜?˜?Ñ,Ô,Ð-ØÔ˜1Ð  ÐCTÐ UÑ UÔ UÐVØÔ˜1Ð  Ñ 1Ô 1Ð2ØÔ˜1ÐØˆÐ&9Ð:Ñ:Ô:Øˆ oÐ6Ñ6Ô6ØˆÐ&9Ð:Ñ:Ô:ð ð
 Ô Ð#Øˆ¨<Ð8Ñ8Ô8ØˆÐ&9Ð:Ñ:Ô:ØˆÐ&9Ð:Ñ:Ô:ð&ð „]�DÐ˜O˜O¸}ÐMÑMÔMÐNØ„_�dÐ˜o˜oÀÐLÑLÔLÐMØÔ˜$Ð / /Ñ"3Ô"3Ð!4àÔ�tÐ˜˜Ð=TÐUÑUÔUÐVØÔ! 4Ð(ØˆÐ+>Ð?Ñ?Ô?ð+ð Ô Ð&ØˆØ-ÐBWð	
ñ 	
ô 	
ð)ð
 „_�dÐØˆØ,ÐAVð	
ñ 	
ô 	
ðð
 „_�dÐØˆØ-Ø6ð	
ñ 	
ô 	
ð 	ˆØ.Ø7ð	
ñ 	
ô 	
ð	ð]Xð X€ðz �VÔ%Ô3°SÐ8Ô9€ðØ
Ô
ðØ+.ðàˆlÔðð ð ð ð ˜E ,Ô/°°lÔ1CÐDÀdÐJÔK€ð2Ø
Ô
ð2Ø+.ð2ØDSð2àˆlÔð2ð 2ð 2ð 2ð*)˜œð )°t¸C´yð )ð )ð )ð )ð )ð )r   