§
    èƒñjæˆ  ã                  ó‚  — d Z ddlmZ ddl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mZ dd
lmZ ddlmZ dddddddddœZd„ e                     ¦   «         D ¦   «         Ze                     ddddddddœ¦  «          e	d¬¦  «         G d „ d!¦  «        ¦   «         Zej        d"fd#i fej        d$fd%i fej        d"fd#i fej        d$fd%ej        ej        ej         ej!        ifej        d"fd#i fej"        d$fd"ej#        ej$        ifej%        d$fd"ej&        ej'        ej(        ej)        ej*        ej+        ej,        ej-        ifej.        d$fd"ej&        ej'        ej(        ej)        ej/        ej0        ej1        ej2        ej3        ej4        ifej5        d$fd"ej&        ej'        ej(        ej)        ej6        ej7        ej8        ej9        ifej:        d$fd"i fi
Z;	 dvd'„Z<d(„ g d)„ d*D ¦   «         ¢d+„ d*D ¦   «         ¢d,„ d-D ¦   «         ¢d.„ d-D ¦   «         ¢R D ¦   «         Z=d/„ Z>d0„ Z?d1„ Z@d2„ ZAd3„ ZBd4„ ZCd5„ ZDd6„ ZEd7„ ZFd8„ ZGd9„ ZHd:„ ZId;„ ZJd<„ ZKd=„ ZLd>„ ZMd?„ ZNedd@œdA„¦   «         ZOdB„ ZPdC„ ZQdD„ ZRdE„ ZSdF„ ZTdG„ ZUi dH„ e                     ¦   «         D ¦   «         ¥ edeH¦  «         edeT¦  «         edeF¦  «         edeL¦  «         edeL¦  «         edeJ¦  «         edeQ¦  «        dIœ¥ZVi dJ„ e                     ¦   «         D ¦   «         ¥ edKeP¦  «         edeI¦  «         edeU¦  «         edeG¦  «         edeM¦  «         edeM¦  «         edeK¦  «         edeR¦  «        dLœ¥ZWdwdQ„ZXdxdU„ZYdydX„ZZdzdZ„Z[d{d[„Z\d|d^„Z]d}d`„Z^d~da„Z_dxdb„Z`dxdc„Zadxdd„Zbdxde„Zcdxdf„Zdddk„Zeddlœd€dp„Zfddd&ddqœd�dr„Zgddd&ddqœd�ds„Zhd‚dt„Ziejduk    r ei¦   «          dS dS )ƒa®  Convert between Open Font Format beyond-64k companion tables.

The Open Font Format beyond-64k specification adds uppercase companion tables and
extended Layout formats that can address glyph IDs above 65535. This module
provides helpers to convert a :class:`fontTools.ttLib.TTFont` in place between
the compact lowercase table family and the extended uppercase table family.

The high-level APIs are :func:`upper_tables` and :func:`lower_tables`. By
default they convert every known table present in the font and validate that
the result does not mix lowercase and uppercase companion tables. Both helpers
accept an optional ``tables`` iterable; each entry may use either the compact or
extended spelling, e.g. ``"glyf"`` and ``"GLYF"`` both identify the glyph table
family.

The module is also available as a command-line tool::

    fonttools ttLib.beyond64k upper input.ttf -o upper.ttf
    fonttools ttLib.beyond64k lower upper.ttf -o lower.ttf
    fonttools ttLib.beyond64k upper input.ttf GSUB GPOS glyf

Lowering validates lossy cases such as ``MAXP.numGlyphs`` values above 65535,
``GLYF`` glyphs with cubic outlines, and component glyph IDs that do not fit in
the compact ``glyf`` table.
é    )ÚannotationsN)ÚIterable)Úcontextmanager)Ú	dataclass)ÚCallable)ÚmakeOutputFileName)ÚTTFontÚ
TTLibErrorÚnewTable)ÚotTables)Údfs_base_tableÚGLYFÚLOCAÚMAXPÚHHEAÚHMTXÚVHEAÚVMTXÚGVAR)ÚglyfÚlocaÚmaxpÚhheaÚhmtxÚvheaÚvmtxÚgvarc                ó(   — i | ]\  }}||fD ]}||“ŒŒS © r   )Ú.0ÚlowerÚupperÚtags       úX/data/share/cad/hardware/.venv/lib/python3.11/site-packages/fontTools/ttLib/beyond64k.pyú
<dictcomp>r%   1   sC   € ð ð ð Ù�5˜%ÀEÈ5À>ðð Ø<?€Cˆðð ð ð ó    ÚBASEÚCOLRÚGDEFÚGPOSÚGSUBÚJSTFÚVORG)r'   r(   r)   r*   r+   r,   r-   T)Úfrozenc                  ó(   — e Zd ZU ded<   dZded<   dS )Ú_TableConversionÚstrÚdestinationNzCallable | NoneÚ	transform)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r3   r   r&   r$   r0   r0   A   s/   € € € € € € àÐÐÑØ!%€IÐ%Ð%Ð%Ñ%Ð%Ð%r&   r0   é   é   é   é   Fc                óD  — |rdnd|d d…         z   }|dk    }||rdndz   }||rdndz   }|rd	nd|rd
ndz   }|dz   }	|dz   }
|dz   }t          t          |¦  «        t          j        i fi}|
d|di}|dv r¥t          t          |	dz   ¦  «        |dz   |dz   ||if|t          t          |¦  «        <   |
d|di}|r|                     ddddœ¦  «         n	d||rdnd<   t          t          ||rdndz   ¦  «        |f|t          t          |¦  «        <   |dz   |	dz   ||	i}| ||dz   ||fS )NÚChainÚ r;   r8   Ú	ClassRuleÚRuleÚClassSetÚRuleSetÚChainedÚClassSeqRuleÚSeqRuleÚSetÚCountÚLookupRecordÚSeqLookupCountÚSeqLookupRecord©r:   r8   Ú2ÚBacktrackSequenceÚInputSequenceÚLookAheadSequence)Ú	BacktrackÚInputÚ	LookAheadÚClassrQ   )Úgetattrr   Ú	SeqLookupÚupdate)Ú
table_typeÚcompact_formatÚlookup_prefixÚchainingÚcompact_prefixÚclass_basedÚcompact_ruleÚcompact_rule_setÚextended_ruleÚextended_rule_setÚlookup_countÚlookup_recordÚreplacementsÚouter_renamesÚrule_renamess                  r$   Ú_contextual_layout_conversionrf   w   sâ  € ð "*Ð1�g�g¨r°]À2ÀAÀ2Ô5FÑF€NØ  AÒ%€KØ!°KÐ%K [ [ÀVÑL€LØ%°{Ð)Q¨¨È	ÑRÐØ"*Ð2�Y�Y°Ø%Ð4ˆˆ¨9ñ€Mð &¨Ñ-ÐØ  7Ñ*€LØ! NÑ2€MÝ�H mÑ4Ô4µxÔ7IÈ2Ð6NÐO€LàÐ&ØÐ(ð€Mð
 ˜ÐÐå•HÐ/°#Ñ5Ñ6Ô6à˜wÑ&¨¸Ñ(?Ø˜mðð=
ˆ•W�XÐ'7Ñ8Ô8Ñ9ð Ð*ØÐ,ð
ˆð ð 		PØ×Òà!4Ø,Ø!4ðð ñô ð ð ð APˆL KÐ<˜˜°WÑ=å•H˜m°[Ð/I¨r¨rÀcÑJÑKÔKØð9
ˆ•W�X |Ñ4Ô4Ñ5ð
 ˜wÑ&Ð(9¸GÑ(CØÐ/ð
ˆð
 �~ ~¸Ñ'9¸=È,ÐVÐVr&   c                ó*   — i | ]\  }}}}}||f|||f“ŒS r   r   ©r    rW   rX   Úextended_formatrd   rc   s         r$   r%   r%   ¬   sG   € ð ð ð ñ	ØØØØØð �Ð  ?°MÀ<Ð"Pðð ð r&   c              #  óL   K  — | ]}t          t          j        |d ¦  «        V — Œ dS )ÚSubstN)rf   r   ÚContextSubst©r    Úformats     r$   ú	<genexpr>ro   µ   sE   è è € ð 

ð 

àõ *­(Ô*?ÀÈÑQÔQð

ð 

ð 

ð 

ð 

ð 

r&   )r:   r8   r;   c              #  óL   K  — | ]}t          t          j        |d ¦  «        V — Œ dS )ÚPosN)rf   r   Ú
ContextPosrm   s     r$   ro   ro   ¹   sE   è è € ð 

ð 

àõ *­(Ô*=¸vÀuÑMÔMð

ð 

ð 

ð 

ð 

ð 

r&   c              #  óP   K  — | ]!}t          t          j        |d d¬¦  «        V — Œ"dS )rk   T©rZ   N)rf   r   ÚChainContextSubstrm   s     r$   ro   ro   ½   sS   è è € ð 

ð 

ð õ *ÝÔ*¨F°GÀdðñ ô ð

ð 

ð 

ð 

ð 

ð 

r&   rK   c              #  óP   K  — | ]!}t          t          j        |d d¬¦  «        V — Œ"dS )rq   Trt   N)rf   r   ÚChainContextPosrm   s     r$   ro   ro   Ã   sS   è è € ð 

ð 

ð õ *ÝÔ(¨&°%À$ðñ ô ð

ð 

ð 

ð 

ð 

ð 

r&   c           	     ó¸   — |                      ¦   «         D ]D\  }}t          | |¦  «        r/t          | |t          | |¦  «        ¦  «         t	          | |¦  «         ŒEd S ©N)ÚitemsÚhasattrÚsetattrrT   Údelattr)ÚtableÚrenamesÚsourcer2   s       r$   Ú_rename_layout_attributesr�   Í   sg   € Ø&Ÿ}š}™œð #ð #Ñˆ�Ý�5˜&Ñ!Ô!ð 	#Ý�E˜;­°°vÑ(>Ô(>Ñ?Ô?Ð?Ý�E˜6Ñ"Ô"Ð"øð#ð #r&   c                ó  — t          t          t          | ¦  «        ¦  «        ¦  «        D ]ß}|d         j        }|                     t          |¦  «        t          |¦  «        i f¦  «        \  }}t          ||¦  «         |t          |¦  «        u rŒf |¦   «         }|j                             |j        ¦  «         |d         j        }|d         }|j	        €t          ||j        |¦  «         ŒÂ|t          ||j        ¦  «        |j	        <   Œàd S ©Néÿÿÿÿéþÿÿÿ)ÚreversedÚlistr   ÚvalueÚgetÚtyper�   Ú__dict__rV   Úindexr|   ÚnamerT   )	r~   rc   ÚpathÚsubtableÚreplacement_typer   ÚreplacementÚparentÚentrys	            r$   Ú_replace_layout_subtreer”   Ô   s  € Ý��n¨UÑ3Ô3Ñ4Ô4Ñ5Ô5ð Cð CˆØ˜”8”>ˆØ$0×$4Ò$4Ý�‰NŒN�T (™^œ^¨RÐ0ñ%
ô %
Ñ!Ð˜'õ 	" (¨GÑ4Ô4Ð4Ø�t H™~œ~Ð-Ð-ØØ&Ð&Ñ(Ô(ˆØÔ×#Ò# HÔ$5Ñ6Ô6Ð6Ø�b””ˆØ�R”ˆØŒ;ÐÝ�F˜EœJ¨Ñ4Ô4Ð4Ð4à7B�G�F˜EœJÑ'Ô'¨¬Ñ4Ð4ðCð Cr&   c                ó´  — t          t          t          | ¦  «        ¦  «        ¦  «        D ]­}|d         j        }|                     t          |¦  «        ¦  «        }|€Œ4 |¦   «         }|j                             |j        ¦  «         |d         j        }|d         }|j        €t          ||j
        |¦  «         Œ�|t          ||j
        ¦  «        |j        <   Œ®d S rƒ   )r†   r‡   r   rˆ   r‰   rŠ   r‹   rV   rŒ   r|   r�   rT   )r~   rc   rŽ   r�   r�   r‘   r’   r“   s           r$   Ú_replace_layout_classesr–   ç   sÛ   € Ý��n¨UÑ3Ô3Ñ4Ô4Ñ5Ô5ð Cð CˆØ˜”8”>ˆØ'×+Ò+­D°©N¬NÑ;Ô;ÐØÐ#ØØ&Ð&Ñ(Ô(ˆØÔ×#Ò# HÔ$5Ñ6Ô6Ð6Ø�b””ˆØ�R”ˆØŒ;ÐÝ�F˜EœJ¨Ñ4Ô4Ð4Ð4à7B�G�F˜EœJÑ'Ô'¨¬Ñ4Ð4ðCð Cr&   c           	     ó`  — t           }|sd„ |                     ¦   «         D ¦   «         }d}t          | ¦  «        D ]t}|d         j        }|                     t          |¦  «        t          |dd ¦  «        f¦  «        }|€ŒE|\  }}}	t          ||	¦  «         t          ||¦  «         ||_	        d}Œu|S )Nc                ó¢   — i | ]L\  \  }}\  }}}||f|d „ |                      ¦   «         D ¦   «         d„ |                      ¦   «         D ¦   «         f“ŒMS )c                ó   — i | ]\  }}||“Œ	S r   r   ©r    r€   r2   s      r$   r%   zA_convert_contextual_layout_formats.<locals>.<dictcomp>.<dictcomp>ý   s   € ÐVÐVÐVÑ)<¨°�˜fÐVÐVÐVr&   c                ó\   — i | ])\  }\  }}||d „ |                      ¦   «         D ¦   «         f“Œ*S )c                ó   — i | ]\  }}||“Œ	S r   r   rš   s      r$   r%   zL_convert_contextual_layout_formats.<locals>.<dictcomp>.<dictcomp>.<dictcomp>  s.   € ð ð ð á 3 ¨ð (¨ðð ð r&   ©rz   )r    Úcompact_typeÚextended_typer   s       r$   r%   zA_convert_contextual_layout_formats.<locals>.<dictcomp>.<dictcomp>þ   s_   € ð 	ð 	ð 	ñ ?˜Ñ&> }°gð "Ø$ðð à7>·}²}±´ðñ ô ð$ð	ð 	ð 	r&   r�   rh   s         r$   r%   z6_convert_contextual_layout_formats.<locals>.<dictcomp>ú   s•   € ð 
ð 
ð 
ñÑ,�˜^ñ /ØØØð# ˜Ð)ØØVÐVÀ×@SÒ@SÑ@UÔ@UÐVÑVÔVð	ð 	ð CO×BTÒBTÑBVÔBVð	ñ 	ô 	ð,ð
ð 
ð 
r&   Fr„   ÚFormatT)
Ú_CONTEXTUAL_LAYOUT_FORMATSrz   r   rˆ   r‰   rŠ   rT   r”   r�   r    )
r~   ÚextendedÚconversionsÚchangedrŽ   r�   Ú
conversionrn   rd   rc   s
             r$   Ú"_convert_contextual_layout_formatsr¦   ÷   sÛ   € Ý,€KØð 
ð
ð 
ð& ×"Ò"Ñ$Ô$ð'
ñ 
ô 
ˆð, €GÝ˜uÑ%Ô%ð ð ˆØ˜”8”>ˆØ —_’_Ý�(‰^Œ^�W X¨x¸Ñ>Ô>Ð?ñ
ô 
ˆ
ð ÐØØ.8Ñ+ˆ�˜|Ý ¨,Ñ7Ô7Ð7Ý! (¨MÑ:Ô:Ð:Ø ˆŒØˆˆØ€Nr&   c           	     ó:  — t           }|sd„ |                     ¦   «         D ¦   «         }d}t          | ¦  «        D ]a}|d         j        }|                     t          |¦  «        t          |dd ¦  «        f¦  «        }|€ŒE|\  |_        }t          ||¦  «         d}Œb|S )Nc                óf   — i | ].\  \  }}\  }}||f|d „ |                      ¦   «         D ¦   «         f“Œ/S )c                ó   — i | ]\  }}||“Œ	S r   r   )r    Úcompactr¢   s      r$   r%   z?_convert_explicit_layout_formats.<locals>.<dictcomp>.<dictcomp>&  s   € ÐQÐQÐQÑ'8 w°�˜7ÐQÐQÐQr&   r�   )r    rW   rX   ri   rc   s        r$   r%   z4_convert_explicit_layout_formats.<locals>.<dictcomp>#  sf   € ð 	
ð 	
ð 	
ñ
Ñ,�˜^ñ /ØØð ˜Ð)ØØQÐQ¸L×<NÒ<NÑ<PÔ<PÐQÑQÔQð,ð	
ð 	
ð 	
r&   Fr„   r    T)	Ú_EXPLICIT_LAYOUT_FORMATSrz   r   rˆ   r‰   rŠ   rT   r    r–   )r~   r¢   r£   r¤   rŽ   r�   r¥   rc   s           r$   Ú _convert_explicit_layout_formatsr¬      sÄ   € Ý*€KØð 

ð	
ð 	
ð ×"Ò"Ñ$Ô$ð	
ñ 	
ô 	
ˆð €GÝ˜uÑ%Ô%ð 	ð 	ˆØ˜”8”>ˆØ —_’_Ý�(‰^Œ^�W X¨x¸Ñ>Ô>Ð?ñ
ô 
ˆ
ð ÐØØ(2Ñ%ˆŒ˜Ý ¨,Ñ7Ô7Ð7ØˆˆØ€Nr&   c                óJ   — t          | |¦  «        }t          | |¦  «        }|p|S ry   )r¦   r¬   )r~   r¢   Ú
contextualÚexplicits       r$   Ú_convert_layout_formatsr°   <  s+   € Ý3°E¸8ÑDÔD€JÝ/°°xÑ@Ô@€HØÐ!˜Ð!r&   c                ó€   — |                       ¦   «           |¦   «         }|j                             | j        ¦  «         |S ry   )ÚensureDecompiledr‹   rV   )r~   rW   Ú	converteds      r$   Ú_convert_table_objectr´   B  s>   € Ø	×ÒÑÔÐØ�
‘”€IØÔ×Ò˜eœnÑ-Ô-Ð-ØÐr&   c                óü   — |D ]x}|}|dz   }|r||fn||f\  }}t          | |d ¦  «        }	t          | |d ¦  «        }
|	�|
�|st          d|›d|›d�¦  «        ‚|	�"t          | ||	¦  «         t          | |d ¦  «         Œyd S )NrL   úBoth ú and ú5 exist; set overwrite=True to replace the destination)rT   Ú
ValueErrorr|   )r~   Únamesr¢   Ú	overwriter�   Úcompact_nameÚextended_nameÚsource_nameÚdestination_namer€   r2   s              r$   Ú_move_fieldsrÀ   I  sè   € Øð .ð .ˆØˆØ˜s™
ˆà-5ÐXˆ\˜=Ð)Ð)¸MÈ<Ð;Xñ 	&ˆÐ%õ ˜ ¨TÑ2Ô2ˆÝ˜eÐ%5°tÑ<Ô<ˆØÐ +Ð"9À)Ð"9Ýð@˜ð @ð @Ð,<ð @ð @ð @ñô ð ð ÐÝ�EÐ+¨VÑ4Ô4Ð4Ý�E˜;¨Ñ-Ô-Ð-øð.ð .r&   c                óö   — |j         }t          |dd|¦  «         t          |dd ¦  «        �$t          |j        t
          j        ¦  «        |_        t          |j        d¦  «        |_        t          |d¦  «         d S )N©ÚGlyphClassDefÚ
AttachListÚLigCaretListÚMarkAttachClassDefÚMarkGlyphSetsDefTÚLigCaretList2é  )	r~   rÀ   rT   r´   rÈ   r   ÚmaxÚVersionr°   ©Úfontr~   r»   s      r$   Ú_upper_gdefrÎ   \  s‡   € ØŒK€EÝØð	
ð 	Øñô ð õ ˆu�o tÑ,Ô,Ð8Ý3ØÔ¥Ô!7ñ
ô 
ˆÔõ ˜œ zÑ2Ô2€E„MÝ˜E 4Ñ(Ô(Ð(Ð(Ð(r&   c                ó4  — |j         }t          |dd|¦  «         t          |dd ¦  «        �$t          |j        t
          j        ¦  «        |_        t          |dd ¦  «        �d|_        n t          |dd ¦  «        �d|_        nd|_        t          |d¦  «         d S )	NrÂ   FrÅ   ÚVarStorei  rÇ   é  é   )r~   rÀ   rT   r´   rÅ   r   rË   r°   rÌ   s      r$   Ú_lower_gdefrÓ   r  s²   € ØŒK€EÝØð	
ð 	Øñô ð õ ˆu�n dÑ+Ô+Ð7Ý2ØÔ¥Ô 5ñ
ô 
ˆÔõ ˆu�j $Ñ'Ô'Ð3Ø"ˆŒˆÝ	�Ð*¨DÑ	1Ô	1Ð	=Ø"ˆŒˆà"ˆŒÝ˜E 5Ñ)Ô)Ð)Ð)Ð)r&   c                ó0   — t          |j        d¦  «         d S )NT©r°   r~   rÌ   s      r$   Ú_upper_layout_formatsrÖ   �  s   € Ý˜EœK¨Ñ.Ô.Ð.Ð.Ð.r&   c                ó0   — t          |j        d¦  «         d S )NFrÕ   rÌ   s      r$   Ú_lower_layout_formatsrØ   ‘  s   € Ý˜EœK¨Ñ/Ô/Ð/Ð/Ð/r&   c           
     ó  — |j         }t          |t          j        t          j        i ft          j        t          j        i ft          j        t          j        i fi¦  «         t          |dddœ¦  «         t          |j        d¦  «        |_        d S )NÚJstfScriptCount2ÚJstfScriptRecord2)ÚJstfScriptCountÚJstfScriptRecordé  )r~   r”   r   rÝ   rÛ   Ú
JstfScriptÚJstfScript2ÚExtenderGlyphÚExtenderGlyph2r�   rÊ   rË   rÌ   s      r$   Ú_upper_jstfrã   •  s“   € ØŒK€EÝØåÔ%­Ô(BÀBÐ'GÝÔ¥(Ô"6¸Ð!;ÝÔ"¥XÔ%<¸bÐ$Að	
ñô ð õ Øà1Ø 3ð	
ð 	
ñô ð õ ˜œ zÑ2Ô2€E„M€M€Mr&   c           
     óø   — |j         }t          |t          j        t          j        i ft          j        t          j        i ft          j        t          j        i fi¦  «         t          |dddœ¦  «         d|_
        d S )NrÜ   rÝ   )rÚ   rÛ   rÒ   )r~   r”   r   rÛ   rÝ   rà   rß   râ   rá   r�   rË   rÌ   s      r$   Ú_lower_jstfrå   ©  s‡   € ØŒK€EÝØåÔ&­Ô)BÀBÐ(GÝÔ ¥8Ô#6¸Ð";ÝÔ#¥hÔ&<¸bÐ%Að	
ñô ð õ Øà 1Ø!3ð	
ð 	
ñô ð ð €E„M€M€Mr&   c                óö   — |j         }t          |dd|¦  «         t          |dd ¦  «        �$t          |j        t
          j        ¦  «        |_        t          |j        d¦  «        |_        t          |d¦  «         d S )N©Ú
ScriptListÚFeatureListÚ
LookupListTÚLookupList2rÑ   )	r~   rÀ   rT   r´   rë   r   rÊ   rË   r°   rÌ   s      r$   Ú_upper_layout_headerrì   ½  sx   € ØŒK€EÝ�ÐCÀTÈ9ÑUÔUÐUÝˆu�m TÑ*Ô*Ð6Ý1ØÔ�xÔ3ñ
ô 
ˆÔõ ˜œ zÑ2Ô2€E„MÝ˜E 4Ñ(Ô(Ð(Ð(Ð(r&   c                óö   — |j         }t          |dd|¦  «         t          |dd ¦  «        �$t          |j        t
          j        ¦  «        |_        t          |dd ¦  «        rdnd|_        t          |d¦  «         d S )Nrç   Frê   ÚFeatureVariationsrÞ   rÒ   )r~   rÀ   rT   r´   rê   r   rË   r°   rÌ   s      r$   Ú_lower_layout_headerrï   È  s€   € ØŒK€EÝ�ÐCÀUÈIÑVÔVÐVÝˆu�l DÑ)Ô)Ð5Ý0°Ô1AÅ8ÔCVÑWÔWˆÔå˜eÐ%8¸$Ñ?Ô?ÐOˆ
ˆ
ÀZð 
„Mõ ˜E 5Ñ)Ô)Ð)Ð)Ð)r&   c                ó.  — t          | dd ¦  «        }|€dS d„ t          t          fD ¦   «         }|j        D ]_}|j        D ]U}t          |t          j        t          j        f¦  «        r|j	        }t          |¦  «        t          |dd ¦  «        f|v r  dS ŒVŒ`dS )Nrê   Fc                ó\   — h | ])}|                      ¦   «         D ]\  \  }}}||d          f’ŒŒ*S )r   r�   )r    r£   rW   Ú_r¥   s        r$   ú	<setcomp>z/_has_extended_layout_formats.<locals>.<setcomp>Ú  s\   € ð ð ð àØ+6×+<Ò+<Ñ+>Ô+>ðð ñ (‰OˆZ˜˜Zð 
�Z ”]Ð#ðð ð ð r&   r    T)rT   r¡   r«   ÚLookupÚSubTableÚ
isinstancer   ÚExtensionSubstÚExtensionPosÚExtSubTablerŠ   )r~   Úlookup_listÚextended_formatsÚlookupr�   s        r$   Ú_has_extended_layout_formatsrý   Ó  sÍ   € õ ˜% ¨tÑ4Ô4€KØÐØˆuðð å6Õ8PÐQðñ ô Ðð
 Ô$ð ð ˆØœð 	ð 	ˆHÝ˜(¥XÔ%<½hÔ>SÐ$TÑUÔUð 0Ø#Ô/�Ý�X‘”¥¨°(¸DÑ AÔ AÐBÐFVÐVÐVØ�t�t�tð Wð	ð
 ˆ5r&   )Úrestorec             #  óœ  K  — g }	 ddt           t          fddt          t          fddt          t          ffD ]‰\  }}}}|| vrŒ| |         }|j        j        |k    r%|                     ||f¦  «          || |d¦  «         ŒIt          |j        ¦  «        r,t          |j        d¦  «         |                     |d f¦  «         ŒŠd V — |r|ndD ];\  }}|| vrŒ
|� || | |         d¦  «         Œ t          | |         j        d¦  «         Œ<d S # |r|ndD ];\  }}|| vrŒ
|� || | |         d¦  «         Œ t          | |         j        d¦  «         Œ<w xY w)	Nr)   rÉ   r+   rÑ   r*   TFr   )	rÓ   rÎ   rï   rì   r~   rË   Úappendrý   r°   )rÍ   rþ   Úrestore_actionsr#   Úversionr!   r"   r~   s           r$   Ú_compact_layout_tablesr  è  sÆ  è è € ð €Oð?à�Z¥­kÐ:Ø�ZÕ!5Õ7KÐLØ�ZÕ!5Õ7KÐLð+
ð 	4ð 	4Ñ&ˆC�˜% ð
 ˜$ˆˆØØ˜”IˆEØŒ{Ô" gÒ-Ð-Ø×&Ò&¨¨U |Ñ4Ô4Ð4Ø��d˜E 4Ñ(Ô(Ð(Ð(Ý-¨e¬kÑ:Ô:ð 4Ý'¨¬°UÑ;Ô;Ð;Ø×&Ò&¨¨T {Ñ3Ô3Ð3øØˆˆˆà-4Ð<˜/˜/¸"ð 	?ð 	?‰JˆC�Ø˜$ˆˆØØÐ Ø��d˜D œI tÑ,Ô,Ð,Ð,å'¨¨S¬	¬¸Ñ>Ô>Ð>Ð>ð	?ð 	?ø¨WÐ<˜/˜/¸"ð 	?ð 	?‰JˆC�Ø˜$ˆˆØØÐ Ø��d˜D œI tÑ,Ô,Ð,Ð,å'¨¨S¬	¬¸Ñ>Ô>Ð>Ð>ð	?øøøs   †B=D ÄAEc                óÀ   — ddl m} |                      ¦   «         D ]B}||         }t          |d¦  «        r(t	          |j        ¦  «        D ]\  }}|| z  |j        |<   ŒŒCd S )Nr   )Ú	flagCubicÚflags)ÚfontTools.ttLib.tables._g_l_y_fr  ÚgetGlyphOrderr{   Ú	enumerater  )rÍ   r~   r»   r  Ú
glyph_nameÚglyphÚiÚflags           r$   Ú_lower_glyfr    s‰   € Ø9Ð9Ð9Ð9Ð9Ð9ð ×(Ò(Ñ*Ô*ð 3ð 3ˆ
Ø�jÔ!ˆÝ�5˜'Ñ"Ô"ð 	3Ý$ U¤[Ñ1Ô1ð 3ð 3‘��4Ø!%¨¨
Ñ!2�”˜A‘�øð	3ð 3r&   c                ó"   — d|_         d|_        d S )Nr8   r   ©ÚmajorVersionÚminorVersionrÌ   s      r$   Ú_upper_vorgr    ó   € Ø€EÔØ€EÔÐÐr&   c                ó"   — d|_         d|_        d S )Nr:   r   r  rÌ   s      r$   Ú_lower_vorgr    r  r&   c              #  ó²   K  — t          | d¦  «        sd S t          | j        ¦  «        D ]-}|d         j        }t	          |t
          j        ¦  «        r|V — Œ.d S )Nr~   r„   )r{   r   r~   rˆ   rö   r   ÚPaint)r~   rŽ   rˆ   s      r$   Ú_iter_colr_paintsr    si   è è € Ý�5˜'Ñ"Ô"ð ØˆÝ˜uœ{Ñ+Ô+ð ð ˆØ�R””ˆÝ�e�Xœ^Ñ,Ô,ð 	ØˆKˆKˆKøðð r&   c                óŠ   — t          |¦  «        D ]2}|j        t          j        j        k    rt          j        j        |_        Œ3d S ry   )r  r    r   ÚPaintFormatÚ
PaintGlyphÚPaintGlyph2©rÍ   r~   r»   Úpaints       r$   Ú_upper_colrr   &  sD   € Ý" 5Ñ)Ô)ð <ð <ˆØŒ<�8Ô/Ô:Ò:Ð:Ý#Ô/Ô;ˆEŒLøð<ð <r&   c                óŠ   — t          |¦  «        D ]2}|j        t          j        j        k    rt          j        j        |_        Œ3d S ry   )r  r    r   r  r  r  r  s       r$   Ú_lower_colrr"  ,  sD   € Ý" 5Ñ)Ô)ð ;ð ;ˆØŒ<�8Ô/Ô;Ò;Ð;Ý#Ô/Ô:ˆEŒLøð;ð ;r&   c                ó4   — i | ]\  }}|t          |¦  «        “ŒS r   ©r0   rš   s      r$   r%   r%   3  s7   € ð ð ð áˆF�Kð 	Õ  Ñ-Ô-ðð ð r&   )r'   r(   r)   r+   r*   r,   r-   c                ó4   — i | ]\  }}|t          |¦  «        “ŒS r   r$  )r    r!   r"   s      r$   r%   r%   @  s'   € ÐOÐOÐO©,¨%°€uÕ˜uÑ%Ô%ÐOÐOÐOr&   r   )r   r'   r(   r)   r+   r*   r,   r-   ÚtablesúIterable[str] | NoneÚreturnúset[str]c                ó   — | €&t          t                               ¦   «         ¦  «        S t          ¦   «         }| D ]D}	 |                     t          |         ¦  «         Œ$# t          $ r t          d|›�¦  «        d ‚w xY w|S )NzUnsupported beyond-64k table: )ÚsetÚ_TABLE_IDENTITIESÚvaluesÚaddÚKeyErrorr¹   )r&  Ú
normalizedr#   s      r$   Ú_normalize_tablesr1  L  s›   € Ø€~ÝÕ$×+Ò+Ñ-Ô-Ñ.Ô.Ð.å‘”€JØð Qð Qˆð	QØ�NŠNÕ,¨SÔ1Ñ2Ô2Ð2Ð2øÝð 	Qð 	Qð 	QÝÐE¸cÐEÐEÑFÔFÈDÐPð	QøøøàÐs   ¼ AÁA;rÍ   r	   ÚNonec                ó.  ‡ — t          ˆ fd„t          D ¦   «         ¦  «        }t          ˆ fd„t                               ¦   «         D ¦   «         ¦  «        }|r=|r=t          dd                     |¦  «        › dd                     |¦  «        › �¦  «        ‚d S d S )Nc              3  ó$   •K  — | ]
}|‰v ¯|V — Œd S ry   r   ©r    r#   rÍ   s     €r$   ro   z#_validate_family.<locals>.<genexpr>Z  s'   øè è € Ð>Ð>˜3°#¸°+°+�3°+°+°+°+Ð>Ð>r&   c              3  ó$   •K  — | ]
}|‰v ¯|V — Œd S ry   r   r5  s     €r$   ro   z#_validate_family.<locals>.<genexpr>[  s'   øè è € ÐGÐG˜3¸3À$¸;¸;�3¸;¸;¸;¸;ÐGÐGr&   z)Mixed beyond-64k table family: lowercase ú, ú; uppercase )ÚsortedÚ_TABLE_PAIRSr-  r¹   Újoin)rÍ   r!   r"   s   `  r$   Ú_validate_familyr<  Y  sÄ   ø€ ÝÐ>Ð>Ð>Ð>¥,Ð>Ñ>Ô>Ñ>Ô>€EÝÐGÐGÐGÐG¥,×"5Ò"5Ñ"7Ô"7ÐGÑGÔGÑGÔG€EØð 
�ð 
ÝðJØŸš 5Ñ)Ô)ðJð JØ7;·y²yÀÑ7GÔ7GðJð Jñ
ô 
ð 	
ð
ð 
ð 
ð 
r&   r£   údict[str, _TableConversion]c                óÒ  ‡
‡— d|v rüd| v røddl mŠ
mŠ | d         }|                      ¦   «         D ]Ó}||         }|                     ¦   «         rA|j        D ]8}|                      |j        ¦  «        dk    rt          d|j        ›d�¦  «        ‚Œ9Œ_ˆ
fd„t          |dd	¦  «        D ¦   «         }t          |d
d ¦  «        }|rDt          ˆfd„|D ¦   «         ¦  «        s|r'|                     ¦   «         rt          d|›d�¦  «        ‚ŒÔd|v r$d| v r | d         j        dk    rt          d¦  «        ‚d|v r$d| v r | d         j        dk    rt          d¦  «        ‚d|v r$d| v r | d         j        dk    rt          d¦  «        ‚d|v rid| v re| d         }t          |j        ¦  «        dk    rt          d¦  «        ‚|j        D ].}|                      |¦  «        dk    rt          d|›d�¦  «        ‚Œ/d|v rld| v rht#          | d         ¦  «        D ]R}	|	j        t&          j        j        k    r6|                      |	j        ¦  «        dk    rt          d|	j        ›d�¦  «        ‚ŒSt/          | ¦  «         d S )Nr   r   )r  ÚflagOnCurveéÿÿ  zGLYF component z does not fit in glyfc                ó   •— g | ]	}|‰z  ¯|‘Œ
S r   r   )r    r  r  s     €r$   ú
<listcomp>z&_validate_lowering.<locals>.<listcomp>q  s3   ø€ ð ð ð Ø!ÀDÈ9ÑDTðØðð ð r&   r  r   Úprogramc              3  ó$   •K  — | ]
}|‰z   V — Œd S ry   r   )r    r  r?  s     €r$   ro   z%_validate_lowering.<locals>.<genexpr>w  s+   øè è € ÐGÐG°4˜D ;Ñ.Ð.ÐGÐGÐGÐGÐGÐGr&   zGLYF glyph z) has cubic outlines or hinted CUBIC flagsr   z#MAXP.numGlyphs does not fit in maxpr   z*HHEA.numberOfHMetrics does not fit in hhear   z*VHEA.numberOfVMetrics does not fit in vhear-   z+VORG record count does not fit in version 1zVORG glyph z does not fit in version 1r(   zCOLR PaintGlyph2 glyph z does not fit in PaintGlyph)r  r  r?  r  ÚisCompositeÚ
componentsÚ
getGlyphIDÚ	glyphNamer¹   rT   ÚanyÚgetBytecodeÚ	numGlyphsÚnumberOfHMetricsÚnumberOfVMetricsÚlenÚVOriginRecordsr  r    r   r  r  ÚGlyphÚ_validate_cmap_uvs_lowering)rÍ   r£   r   r
  r  Ú	componentÚcubic_flagsrC  Úvorgr  r  r?  s             @@r$   Ú_validate_loweringrU  c  s9  øø€ Ø�ÐÐ ¨4  ØJÐJÐJÐJÐJÐJÐJÐJà�FŒ|ˆØ×,Ò,Ñ.Ô.ð 	ð 	ˆJØ˜Ô$ˆEØ× Ò Ñ"Ô"ð Ø!&Ô!1ð ð �IØ—’ yÔ':Ñ;Ô;¸fÒDÐDÝ(ØZ¨iÔ.AÐZÐZÐZñô ð ð Eððð ð ð Ý%,¨U°G¸RÑ%@Ô%@ðñ ô �õ " %¨°DÑ9Ô9�àð ÝÐGÐGÐGÐG¸;ÐGÑGÔGÑGÔGðàðà$+×$7Ò$7Ñ$9Ô$9ðõ %Ø] jÐ]Ð]Ð]ñô ð øð �ÐÐ ¨4  °D¸´LÔ4JÈVÒ4SÐ4SÝÐ>Ñ?Ô?Ð?Ø�ÐÐ ¨4  Ø�Œ<Ô(¨6Ò1Ð1ÝÐIÑJÔJÐJØ�ÐÐ ¨4  Ø�Œ<Ô(¨6Ò1Ð1ÝÐIÑJÔJÐJØ�ÐÐ ¨4  Ø�FŒ|ˆÝˆtÔ"Ñ#Ô# fÒ,Ð,ÝÐJÑKÔKÐKØÔ-ð 	Yð 	YˆJØ�Š˜zÑ*Ô*¨VÒ3Ð3Ý Ð!W¨zÐ!WÐ!WÐ!WÑXÔXÐXð 4à�ÐÐ ¨4  Ý& t¨F¤|Ñ4Ô4ð 	ð 	ˆEà”¥Ô 4Ô @Ò@Ð@Ø—O’O E¤KÑ0Ô0°6Ò9Ð9å ØX¨e¬kÐXÐXÐXñô ð øõ   Ñ%Ô%Ð%Ð%Ð%r&   útuple[int, int, int]c                ó*   — | j         | j        | j        fS ry   )Ú
platformIDÚ	platEncIDÚlanguage)r�   s    r$   Ú_cmap_subtable_keyr[  ˜  s   € ØÔ Ô 2°HÔ4EÐEÐEr&   c                óò   — |                      ¦   «         D ]a\  }}t          |                      |d¦  «        ¦  «        }|                     |¦  «         t	          |                      ¦   «         ¦  «        | |<   Œbd S )Nr   )rz   Údictr‰   rV   r9  )r2   r€   ÚselectorÚentriesÚmergeds        r$   Ú_merge_uvs_dictra  œ  sr   € Ø#Ÿ\š\™^œ^ð 7ð 7Ñˆ�'Ý�k—o’o h°Ñ3Ô3Ñ4Ô4ˆØ�Š�gÑÔÐÝ & v§|¢|¡~¤~Ñ 6Ô 6ˆ�HÑÐð7ð 7r&   rn   Úintc                óâ   — ddl m} |                     | ¦  «        }|j        |_        |j        |_        |j        |_        i |_        d„ |j                             ¦   «         D ¦   «         |_        |S )Nr   ©ÚCmapSubtablec                ó4   — i | ]\  }}|t          |¦  «        “ŒS r   )r‡   )r    r^  r_  s      r$   r%   z&_copy_uvs_subtable.<locals>.<dictcomp>«  s1   € ð ð ð Ù$5 H¨gˆ•$�w‘-”-ðð ð r&   )	ÚfontTools.ttLib.tables._c_m_a_pre  ÚnewSubtablerX  rY  rZ  ÚcmapÚuvsDictrz   )rn   r€   re  r�   s       r$   Ú_copy_uvs_subtablerk  £  s„   € Ø<Ð<Ð<Ð<Ð<Ð<à×'Ò'¨Ñ/Ô/€HØ Ô+€HÔØÔ)€HÔØœ€HÔØ€H„Mðð Ø9?¼×9MÒ9MÑ9OÔ9Oðñ ô €HÔð €Or&   Úboolc                ó´   — |                      ¦   «          |j                             ¦   «         D ])}|D ]$\  }}|�|                      |¦  «        dk    r  dS Œ%Œ*dS )Nr@  TF)r²   rj  r-  rG  )rÍ   r�   r_  rò   r
  s        r$   Ú_uvs_has_high_glyph_idrn  ±  sw   € Ø×ÒÑÔÐØÔ#×*Ò*Ñ,Ô,ð ð ˆØ$ð 	ð 	‰MˆAˆzØÐ%¨$¯/ª/¸*Ñ*EÔ*EÈÒ*NÐ*NØ�t�t�tøð	ð ˆ5r&   c              #  ó4   K  — dD ]}|| v r|| |         fV — Œd S )N©ri  ÚDMAPr   )rÍ   r#   s     r$   Ú_character_map_tablesrr  º  s=   è è € Øð !ð !ˆØ�$ˆ;ˆ;Ø�t˜C”y�.Ð Ð Ð øð!ð !r&   c                óž   — t          | ¦  «        D ]<\  }}|j        D ]/}|j        dk    r"t          | |¦  «        rt	          |› d�¦  «        ‚Œ0Œ=d S )Né   ú, format 15 glyph IDs do not fit in format 14)rr  r&  rn   rn  r¹   )rÍ   r#   Úcharacter_mapr�   s       r$   rQ  rQ  À  s{   € Ý3°DÑ9Ô9ð Wð WÑˆˆ]Ø%Ô,ð 	Wð 	WˆHØŒ "Ò$Ð$Õ)?ÀÀhÑ)OÔ)OÐ$Ý  CÐ!UÐ!UÐ!UÑVÔVÐVøð	WðWð Wr&   c                óØ  — t          | ¦  «        D ]Ù\  }}d„ |j        D ¦   «         }g }|j        D ]²}|j        dk    r�t          | |¦  «        r€t	          |¦  «        }|                     |¦  «        }|€+t          d|¦  «        }|||<   |                     |¦  «         n.|                     ¦   «          t          |j
        |j
        ¦  «         Œ�|                     |¦  «         Œ³||_        ŒÚd S )Nc                óD   — i | ]}|j         d k    ¯t          |¦  «        |“ŒS )rt  ©rn   r[  ©r    r�   s     r$   r%   z-_upper_beyond64k_cmap_uvs.<locals>.<dictcomp>É  ó9   € ð 
ð 
ð 
àØŒ "Ò$Ð$õ ˜xÑ(Ô(¨(à$Ð$Ð$r&   é   rt  )rr  r&  rn   rn  r[  r‰   rk  r   r²   ra  rj  )rÍ   rò   rv  Úformat15_by_keyr&  r�   ÚkeyÚformat15s           r$   Ú_upper_beyond64k_cmap_uvsr€  Ç  s  € Ý1°$Ñ7Ô7ð &ð &Ñˆˆ=ð
ð 
à)Ô0ð
ñ 
ô 
ˆð
 ˆØ%Ô,ð 	$ð 	$ˆHØŒ "Ò$Ð$Õ)?ÀÀhÑ)OÔ)OÐ$Ý(¨Ñ2Ô2�Ø*×.Ò.¨sÑ3Ô3�ØÐ#Ý1°"°hÑ?Ô?�HØ+3�O CÑ(Ø—M’M (Ñ+Ô+Ð+Ð+à×-Ò-Ñ/Ô/Ð/Ý# HÔ$4°hÔ6FÑGÔGÐGØØ�MŠM˜(Ñ#Ô#Ð#Ð#Ø%ˆÔÐð)&ð &r&   c                óü  — t          | ¦  «        D ]ë\  }}d„ |j        D ¦   «         }g }|j        D ]Ä}|j        dk    r¢t          | |¦  «        rt	          |› d�¦  «        ‚t          |¦  «        }|                     |¦  «        }|€+t          d|¦  «        }|||<   |                     |¦  «         n.| 	                    ¦   «          t          |j        |j        ¦  «         Œ¯|                     |¦  «         ŒÅ||_        Œìd S )Nc                óD   — i | ]}|j         d k    ¯t          |¦  «        |“ŒS )r|  ry  rz  s     r$   r%   z-_lower_beyond64k_cmap_uvs.<locals>.<dictcomp>á  r{  r&   rt  ru  r|  )rr  r&  rn   rn  r¹   r[  r‰   rk  r   r²   ra  rj  )rÍ   r#   rv  Úformat14_by_keyr&  r�   r~  Úformat14s           r$   Ú_lower_beyond64k_cmap_uvsr…  ß  s@  € Ý3°DÑ9Ô9ð &ð &Ñˆˆ]ð
ð 
à)Ô0ð
ñ 
ô 
ˆð
 ˆØ%Ô,ð 	$ð 	$ˆHØŒ "Ò$Ð$Ý)¨$°Ñ9Ô9ð Ý$ØÐLÐLÐLñô ð õ )¨Ñ2Ô2�Ø*×.Ò.¨sÑ3Ô3�ØÐ#Ý1°"°hÑ?Ô?�HØ+3�O CÑ(Ø—M’M (Ñ+Ô+Ð+Ð+à×-Ò-Ñ/Ô/Ð/Ý# HÔ$4°hÔ6FÑGÔGÐGØØ�MŠM˜(Ñ#Ô#Ð#Ð#Ø%ˆÔÐð1&ð &r&   c                ó4  ‡ ‡— t          ˆ fd„dD ¦   «         ¦  «        r%t          ‰                      ¦   «         ¦  «        dk    rd S t          ‰ ¦  «        D ]Ã\  }}d„ |j        D ¦   «         Š‰sŒt          d„ |j        D ¦   «         ¦  «        sti }‰D ]}|                     |j        ¦  «         Œ|rQddlm} | 	                    d¦  «        }d	|_
        d
|_        d|_        ||_        |j                             |¦  «         ˆfd„|j        D ¦   «         |_        ŒÄd S )Nc              3  ó    •K  — | ]}|‰v V — Œ	d S ry   r   r5  s     €r$   ro   z/_drop_beyond64k_cmap_format4.<locals>.<genexpr>ý  s'   øè è € Ð8Ð8 ��t�Ð8Ð8Ð8Ð8Ð8Ð8r&   rp  rÒ   c                óx   — g | ]7}|j         d k    ¯|                     ¦   «         ¯!|                     ¦   «         °5|‘Œ8S )r9   )rn   Ú	isUnicodeÚisSymbolrz  s     r$   rB  z0_drop_beyond64k_cmap_format4.<locals>.<listcomp>  sQ   € ð 
ð 
ð 
àØŒ !Ò#Ð#¨×(:Ò(:Ñ(<Ô(<Ð#ÀX×EVÒEVÑEXÔEXÐ#ð à#Ð#Ð#r&   c              3  ó,   K  — | ]}|j         d k    V — ŒdS )é   N)rn   rz  s     r$   ro   z/_drop_beyond64k_cmap_format4.<locals>.<genexpr>
  s)   è è € ÐNÐN¨X�8”? bÒ(ÐNÐNÐNÐNÐNÐNr&   r   rd  rŒ  r;   é
   c                ó   •— g | ]}|‰v¯|‘Œ	S r   r   )r    r�   Úunicode_bmp_tabless     €r$   rB  z0_drop_beyond64k_cmap_format4.<locals>.<listcomp>  s/   ø€ ð  
ð  
ð  
àØÐ1Ð1Ð1ð à1Ð1Ð1r&   )rI  rN  r  rr  r&  rV   ri  rg  re  rh  rX  rY  rZ  r   )rÍ   rò   rv  Úcmap12r�   re  r�  s   `     @r$   Ú_drop_beyond64k_cmap_format4r‘  û  s„  øø€ åÐ8Ð8Ð8Ð8Ð'7Ð8Ñ8Ô8Ñ8Ô8ðåˆt×!Ò!Ñ#Ô#Ñ$Ô$¨Ò/Ð/àˆå1°$Ñ7Ô7ð 
ð 
Ñˆˆ=ð
ð 
à)Ô0ð
ñ 
ô 
Ðð
 "ð 	ØÝÐNÐN¸Ô9MÐNÑNÔNÑNÔNð 	6ØˆFØ.ð -ð -�Ø—’˜hœmÑ,Ô,Ð,Ð,Øð 6ØHÐHÐHÐHÐHÐHà'×3Ò3°BÑ7Ô7�Ø&'�Ô#Ø%'�Ô"Ø$%�Ô!Ø &�”ØÔ$×+Ò+¨HÑ5Ô5Ð5ð 
ð  
ð  
ð  
à)Ô0ð 
ñ  
ô  
ˆÔÐð-
ð 
r&   c                ó°   — d| vs%t          |                      ¦   «         ¦  «        dk    rd S | d         }|j        dk    rd|_        g |_        i |_        d S d S )NÚpostr@  g       @g      @)rN  r  Ú
formatTypeÚ
extraNamesÚmapping)rÍ   r“  s     r$   Ú _drop_beyond64k_post_glyph_namesr—    sg   € à�TÐÐ�S ×!3Ò!3Ñ!5Ô!5Ñ6Ô6¸&Ò@Ð@Øˆà�Œ<€DØ„˜#ÒÐØˆŒØˆŒØˆŒˆˆð Ðr&   Ú
source_tagr1   r¥   r»   c                óè   — |j         }|j        �|                     | ||¦  «         ||k    rd S t          |¦  «        }|j        }|j                             |j        ¦  «         ||_        || |<   | |= d S ry   )r2   r3   r   ÚtableTagr‹   rV   )rÍ   r€   r˜  r¥   r»   Údestination_tagr2   Ú	table_tags           r$   Ú_convert_tabler�  +  s‹   € ð !Ô,€OØÔÐ'Ø×Ò˜T 6¨9Ñ5Ô5Ð5Ø�_Ò$Ð$ØˆÝ˜?Ñ+Ô+€KØÔ$€IØÔ×Ò ¤Ñ0Ô0Ð0Ø$€KÔØ'€DˆÑØˆZÐÐÐr&   )Úvalidate_conversionÚtable_conversionsÚvalidateÚignore_missingc               óØ  ‡ ‡‡— t          ‰¦  «        Šˆfd„|                     ¦   «         D ¦   «         }|� |‰ |¦  «         g }|                     ¦   «         D ]c\  }	}
|
j        }|	‰ v }|‰ v }|	|k    r|r|r|st          d|	›d|›d�¦  «        ‚|s|s|rŒ=t	          |	¦  «        ‚|                     |	|
f¦  «         Œd|rët          ‰                      ¦   «         ¦  «        Š|D ]6\  }	}
|
j        }‰                     |	¦  «         ‰ 	                    |¦  «         Œ7t          ˆfd„t          D ¦   «         ¦  «        }t          ˆfd„t                               ¦   «         D ¦   «         ¦  «        }|r=|r;t          dd                     |¦  «        › d	d                     |¦  «        › �¦  «        ‚ˆ fd
„|D ¦   «         }|D ]\  }	}
t          ‰ ||	         |	|
|¦  «         Œ|rt          ‰ ¦  «         d S d S )Nc                ó:   •— i | ]\  }}t           |         ‰v ¯||“ŒS r   )r,  )r    r€   r¥   r&  s      €r$   r%   z#_convert_tables.<locals>.<dictcomp>J  s9   ø€ ð ð ð áˆF�JÝ˜VÔ$¨Ð.Ð.ð 	�
à.Ð.Ð.r&   r¶   r·   r¸   c              3  ó$   •K  — | ]
}|‰v ¯|V — Œd S ry   r   ©r    r#   Úresult_tagss     €r$   ro   z"_convert_tables.<locals>.<genexpr>n  s-   øè è € ÐIÐI˜s°c¸[Ð6HÐ6H�sÐ6HÐ6HÐ6HÐ6HÐIÐIr&   c              3  ó$   •K  — | ]
}|‰v ¯|V — Œd S ry   r   r¥  s     €r$   ro   z"_convert_tables.<locals>.<genexpr>o  s-   øè è € ÐRÐR˜s¸sÀkÐ?QÐ?Q�sÐ?QÐ?QÐ?QÐ?QÐRÐRr&   zCConversion would create a mixed beyond-64k table family: lowercase r7  r8  c                ó(   •— i | ]\  }}|‰|         “ŒS r   r   )r    r˜  rò   rÍ   s      €r$   r%   z#_convert_tables.<locals>.<dictcomp>v  s$   ø€ ÐIÐIÐI±°
¸Aˆz˜4 
Ô+ÐIÐIÐIr&   )r1  rz   r2   r¹   r/  r   r+  ÚkeysÚdiscardr.  r9  r:  r-  r;  r�  r<  )rÍ   r&  rŸ  r   r»   r¡  rž  r£   Úpendingr˜  r¥   r›  Úsource_existsÚdestination_existsr!   r"   Úsourcesr¦  s   ``               @r$   Ú_convert_tablesr¯  ?  sÑ  øøø€ õ ˜vÑ&Ô&€Fðð ð ð à"3×"9Ò"9Ñ";Ô";ðñ ô €Kð
 Ð&ØÐ˜D +Ñ.Ô.Ð.à€GØ"-×"3Ò"3Ñ"5Ô"5ð 1ð 1Ñˆ
�JØ$Ô0ˆØ" dÐ*ˆØ,°Ð4Ðð ˜/Ò)Ð)Øð *à"ð *ð ð *õ
 ð@˜
ð @ð @¨?ð @ð @ð @ñô ð ð ð 	'Ø!ð  ^ð ØÝ˜:Ñ&Ô&Ð&Ø�Š˜
 JÐ/Ñ0Ô0Ð0Ð0àð Ý˜$Ÿ)š)™+œ+Ñ&Ô&ˆØ&-ð 	-ð 	-Ñ"ˆJ˜
Ø(Ô4ˆOØ×Ò 
Ñ+Ô+Ð+Ø�OŠO˜OÑ,Ô,Ð,Ð,ÝÐIÐIÐIÐI¥lÐIÑIÔIÑIÔIˆÝÐRÐRÐRÐR¥l×&9Ò&9Ñ&;Ô&;ÐRÑRÔRÑRÔRˆØð 	�Uð 	ÝðNØ!ŸYšY uÑ-Ô-ðNð NØ;?¿9º9ÀUÑ;KÔ;KðNð Nñô ð ð
 JÐIÐIÐIÀÐIÑIÔI€GØ")ð Uð UÑˆ
�JÝ�t˜W ZÔ0°*¸jÈ)ÑTÔTÐTÐTàð Ý˜ÑÔÐÐÐðð r&   ©r&  r   r»   r¡  c               ó”   — t          | |t          |||¬¦  «         t          | ¦  «         t          | ¦  «         t	          | ¦  «         dS )aU  Convert selected tables to their beyond-64k companion forms.

    Args:
        font: Font to modify in place.
        tables: Optional iterable of table tags to convert. If omitted, all
            supported tables present in ``font`` are converted. Tags may use
            either spelling of a companion table family, such as ``"glyf"`` or
            ``"GLYF"``.
        validate: If true, reject conversions that leave the font with a mixed
            lowercase/uppercase companion table family.
        overwrite: If true, replace an existing destination table. Otherwise an
            existing destination raises ``ValueError``.
        ignore_missing: If true, requested source tables that are not present
            are ignored unless their destination is already present. Otherwise
            missing source tables raise ``KeyError``.
    )r&  rŸ  r   r»   r¡  N)r¯  Ú_UPPER_TABLESr€  r‘  r—  ©rÍ   r&  r   r»   r¡  s        r$   Úupper_tablesr´  ~  s_   € õ0 ØØÝ'ØØØ%ðñ ô ð õ ˜dÑ#Ô#Ð#Ý  Ñ&Ô&Ð&Ý$ TÑ*Ô*Ð*Ð*Ð*r&   c          	     ód   — t          | |t          |||t          ¬¦  «         t          | ¦  «         dS )a]  Convert selected tables from their beyond-64k companion forms.

    Args are the same as :func:`upper_tables`. In addition to mixed-family
    validation, lowering rejects data that cannot be represented in compact
    tables, including glyph counts above 65535, cubic ``GLYF`` outlines, and
    component glyph IDs that do not fit in ``glyf``.
    )r&  rŸ  r   r»   r¡  rž  N)r¯  Ú_LOWER_TABLESrU  r…  r³  s        r$   Úlower_tablesr·  £  sF   € õ ØØÝ'ØØØ%Ý.ðñ ô ð õ ˜dÑ#Ô#Ð#Ð#Ð#r&   c                ó’  — t          j        dt          t           j        ¬¦  «        }|                     ddd¬¦  «         |                     ddd	¬
¦  «         |                     dddd¬¦  «         |                     dddd¬
¦  «         |                     ddd¬¦  «         |                     ddd¬¦  «         |                     dddd¬¦  «         |                     | ¦  «        }|j        pt          |j        dd |j	        › �¬!¦  «        }t          |j        ¦  «        5 }|j	        d"k    rt          nt          }	  |||j        pd |j         |j        |j        ¬#¦  «         n6# t"          t$          f$ r"}t'          t)          |¦  «        ¦  «        |‚d }~ww xY w|                     |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )$Nzfonttools ttLib.beyond64k)ÚdescriptionÚformatter_classÚ	direction)r"   r!   z@'upper' converts to beyond-64k companions; 'lower' converts back)ÚchoicesÚhelpÚinputÚINPUTzinput font path)Úmetavarr½  r&  ÚTABLEÚ*z3optional table tags to convert, e.g. GSUB GPOS glyf)rÀ  Únargsr½  z-oz--outputÚOUTPUTzoutput font pathz--no-validateÚ
store_truez/skip mixed-family and lossy-lowering validation)Úactionr½  z--overwritez0replace destination tables if they already existz--no-ignore-missingr¡  Ústore_falsez7raise an error when a requested source table is missing)ÚdestrÆ  r½  Tú-)Ú	overWriteÚsuffixr"   r°  )ÚargparseÚArgumentParserÚ__doc__ÚRawDescriptionHelpFormatterÚadd_argumentÚ
parse_argsÚoutputr   r¾  r»  r	   r´  r·  r&  Úno_validater»   r¡  r/  r¹   r
   r1   Úsave)ÚargsÚparserÚoptionsrÒ  rÍ   ÚconvertÚerrors          r$   ÚmainrÚ  ¾  s‘  € ÝÔ$Ø#ÝÝ Ô<ðñ ô €Fð
 ×ÒØØ"ØOð ñ ô ð ð
 ×Ò˜¨Ð7HÐÑIÔIÐIØ
×ÒØØØØBð	 ñ ô ð ð ×Ò˜˜j°(ÐASÐÑTÔTÐTØ
×ÒØØØ>ð ñ ô ð ð
 ×ÒØØØ?ð ñ ô ð ð
 ×ÒØØØØFð	 ñ ô ð ð ×Ò Ñ%Ô%€GàŒ^ð Õ1ØŒ Ð.E°'Ô2CÐ.EÐ.Eð ñ  ô  €Fõ 
�”Ñ	Ô	ð  $Ø")Ô"3°wÒ">Ð">•,�,ÅLˆð		4ØˆGØØ”~Ð-¨Ø$Ô0Ð0Ø!Ô+Ø&Ô5ðñ ô ð ð øõ �*Ð%ð 	4ð 	4ð 	4Ý�S ™ZœZÑ(Ô(¨eÐ3øøøøð	4øøøà�	Š	�&ÑÔÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s6   Ä!F<Ä<'E$Å#F<Å$FÅ5FÆFÆF<Æ<G ÇG Ú__main__)F)r&  r'  r(  r)  )rÍ   r	   r(  r2  )rÍ   r	   r£   r=  r(  r2  )r(  rV  )r(  r2  )rn   rb  )rÍ   r	   r(  rl  )rÍ   r	   )
rÍ   r	   r˜  r1   r¥   r0   r»   rl  r(  r2  )rÍ   r	   r&  r'  rŸ  r=  r   rl  r»   rl  r¡  rl  r(  r2  )rÍ   r	   r&  r'  r   rl  r»   rl  r¡  rl  r(  r2  ry   )krÎ  Ú
__future__r   rÌ  Úcollections.abcr   Ú
contextlibr   Údataclassesr   Útypingr   ÚfontTools.misc.cliToolsr   ÚfontTools.ttLibr	   r
   r   ÚfontTools.ttLib.tablesr   Ú!fontTools.ttLib.tables.otTraverser   r:  rz   r,  rV   r0   Ú	BaseCoordÚ	SinglePosÚPairPosÚPairSetÚPairSet2ÚPairValueRecordÚ
PairValue2Ú
CursivePosÚEntryExitRecordÚ
EntryExit2ÚMarkBasePosÚ	MarkArrayÚ
MarkArray2Ú
MarkRecordÚMarkRecord2Ú	BaseArrayÚ
BaseArray2Ú
BaseRecordÚBaseRecord2Ú
MarkLigPosÚLigatureArrayÚLigatureArray2ÚLigatureAttachÚLigatureAttach2ÚComponentRecordÚComponentRecord2ÚMarkMarkPosÚ
Mark2ArrayÚMark2Array2ÚMark2RecordÚMark2Record2ÚReverseChainSingleSubstr«   rf   r¡   r�   r”   r–   r¦   r¬   r°   r´   rÀ   rÎ   rÓ   rÖ   rØ   rã   rå   rì   rï   rý   r  r  r  r  r  r   r"  r²  r¶  r1  r<  rU  r[  ra  rk  rn  rr  rQ  r€  r…  r‘  r—  r�  r¯  r´  r·  rÚ  r4   r   r&   r$   ú<module>r     sÅ  ððð ð2 #Ð "Ð "Ð "Ð "Ð "à €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø %Ð %Ð %Ð %Ð %Ð %Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø +Ð +Ð +Ð +Ð +Ð +Ø <Ð <Ð <Ð <Ð <Ð <ð ØØØØØØØð	ð 	€ðð Ø#/×#5Ò#5Ñ#7Ô#7ðñ ô Ð ð × Ò àØØØØØØðð ñ
ô 
ð 
ð €�$ÐÑÔð&ð &ð &ð &ð &ñ &ô &ñ Ôð&ð Ô˜Ð˜a ˜WØÔ˜Ð˜a ˜WØÔ˜Ð˜a ˜WØÔ�qÐØ	àÔ˜hÔ/ØÔ$ hÔ&9ð	
ðð Ô�qÐ˜A˜r˜7ØÔ˜!ÐØ	Ø	Ô	! 8Ô#6Ð7ðð Ô˜1ÐØ	àÔ Ô 3ØÔ Ô!5ØÔ Ô 3ØÔ Ô!5ð		
ð ð Ô˜!ÐØ	àÔ Ô 3ØÔ Ô!5ØÔ" HÔ$;ØÔ# XÔ%=ØÔ$ hÔ&?ð	
ð	ð Ô˜1ÐØ	àÔ Ô 3ØÔ Ô!5ØÔ Ô!5ØÔ  (Ô"7ð		
ð ð Ô% qÐ)¨A¨r¨7ðY-Ð ðb 9>ð2Wð 2Wð 2Wð 2Wðjð ð
ð

ð 

à#ð

ñ 

ô 

ð
ð


ð 

à#ð

ñ 

ô 

ð
ð

ð 

ð !ð	

ñ 

ô 

ð
ð

ð 

ð !ð	

ñ 

ô 

ð
ð 
ðñ ô Ð ðB#ð #ð #ðCð Cð Cð&Cð Cð Cð &ð &ð &ðRð ð ð8"ð "ð "ðð ð ð.ð .ð .ð&)ð )ð )ð,*ð *ð *ð6/ð /ð /ð0ð 0ð 0ð3ð 3ð 3ð(ð ð ð()ð )ð )ð*ð *ð *ðð ð ð* Ø,0ð ?ð ?ð ?ð ?ñ „ð?ð<	3ð 	3ð 	3ðð ð ð
ð ð ð
ð ð ð<ð <ð <ð;ð ;ð ;ððð à#/×#5Ò#5Ñ#7Ô#7ðñ ô ðð
 Ð˜VÐ%:Ñ;Ô;ØÐ˜V [Ñ1Ô1ØÐ˜V [Ñ1Ô1ØÐ˜VÐ%9Ñ:Ô:ØÐ˜VÐ%9Ñ:Ô:ØÐ˜V [Ñ1Ô1ØÐ˜V [Ñ1Ô1ðð ð €ð
ØOÐO¸,×:LÒ:LÑ:NÔ:NÐOÑOÔOð
àÐ˜V [Ñ1Ô1ØÐ˜VÐ%:Ñ;Ô;ØÐ˜V [Ñ1Ô1ØÐ˜V [Ñ1Ô1ØÐ˜VÐ%9Ñ:Ô:ØÐ˜VÐ%9Ñ:Ô:ØÐ˜V [Ñ1Ô1ØÐ˜V [Ñ1Ô1ð
ð 
ð 
€ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð2&ð 2&ð 2&ð 2&ðjFð Fð Fð Fð7ð 7ð 7ð 7ðð ð ð ðð ð ð ð!ð !ð !ð !ðWð Wð Wð Wð&ð &ð &ð &ð0&ð &ð &ð &ð8!
ð !
ð !
ð !
ðH	ð 	ð 	ð 	ðð ð ð ð8 ð<ð <ð <ð <ð <ð <ðD $(ØØØð"+ð "+ð "+ð "+ð "+ð "+ðP $(ØØØð$ð $ð $ð $ð $ð $ð64ð 4ð 4ð 4ðn ˆzÒÐØ€D�F„F€F€F€Fð Ðr&   