§
    |ØjÑ  ã            	       ót  — 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
Z
d dlZd dlZd dlZd dlmZ d d	lmZmZmZmZ  ej        e¦  «        Zd
Z	 d dlZdZn# e$ r Y nw xY wee› d�         Z G d„ de¦  «        Z G d„ de¦  «        Z  G d„ de	¦  «        Z! G d„ de¦  «        Z" e# ej$        dd ¦  «        ¦  «        dk    sJ ‚ ej        d¦  «        j%        dk    s
J d¦   «         ‚ G d„ de¦  «        Z& G d„ de¦  «        Z' G d„ de¦  «        Z( G d„ de¦  «        Z)d „ Z*d!„ Z+d"„ Z,d#„ Z- G d$„ d%e¦  «        Z. G d&„ d'e.¦  «        Z/ G d(„ d)e/¦  «        Z0e/e0d*œZ1d+„ Z2 e¦   «         d6d,e.d-ee3         d.ee4         fd/„¦   «         Z5g d0¢Z6d1„ Z7 e7¦   «         Z8 G d2„ d3e¦  «        Z9 G d4„ d5e¦  «        Z:dS )7é    )ÚOPTIONS)ÚLazyList)ÚTagÚ	bytesjoiné   )ÚDefaultTable)ÚIntEnumN)Ú	lru_cache)ÚIteratorÚ
NamedTupleÚOptionalÚTupleFTz:USE_HARFBUZZ_REPACKERc                   ó   — e Zd Zd„ Zd„ ZdS )ÚOverflowErrorRecordc                 óˆ   — |d         | _         |d         | _        |d         | _        |d         | _        |d         | _        d S )Nr   r   é   é   é   )Ú	tableTypeÚLookupListIndexÚSubTableIndexÚitemNameÚ	itemIndex)ÚselfÚoverflowTuples     ú’/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/fontTools/ttLib/tables/otBase.pyÚ__init__zOverflowErrorRecord.__init__   sD   € Ø& qÔ)ˆŒØ,¨QÔ/ˆÔØ*¨1Ô-ˆÔØ% aÔ(ˆŒØ& qÔ)ˆŒˆˆó    c                 ód   — t          | j        d| j        d| j        d| j        d| j        f	¦  «        S )NzLookupIndex:zSubTableIndex:z	ItemName:z
ItemIndex:)Ústrr   r   r   r   r   ©r   s    r   Ú__repr__zOverflowErrorRecord.__repr__"   s@   € Ýà”ØØÔ$Ø ØÔ"ØØ”ØØ”ð
ñ
ô 
ð 	
r   N)Ú__name__Ú
__module__Ú__qualname__r   r"   © r   r   r   r      s2   € € € € € ð*ð *ð *ð
ð 
ð 
ð 
ð 
r   r   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚOTLOffsetOverflowErrorc                 ó   — || _         d S ©N©Úvalue)r   ÚoverflowErrorRecords     r   r   zOTLOffsetOverflowError.__init__3   s   € Ø(ˆŒ
ˆ
ˆ
r   c                 ó*   — t          | j        ¦  «        S r*   )Úreprr,   r!   s    r   Ú__str__zOTLOffsetOverflowError.__str__6   s   € Ý�D”JÑÔÐr   N)r#   r$   r%   r   r0   r&   r   r   r(   r(   2   s2   € € € € € ð)ð )ð )ð ð  ð  ð  ð  r   r(   c                   ó   — e Zd ZdZdZdZdS )ÚRepackerStater   r   r   N)r#   r$   r%   ÚPURE_FTÚHB_FTÚFT_FALLBACKr&   r   r   r2   r2   :   s#   € € € € € ð €Gð €Eð €K€K€Kr   r2   c                   óD   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
dd
„ZdS )ÚBaseTTXConverterzÒGeneric base class for TTX table converters. It functions as an
    adapter between the TTX (ttLib actually) table model and the model
    we use for OpenType tables, which is necessarily subtly different.
    c                 ó¼   — ddl m} t          || j        ¬¦  «        }t	          || j        ¦  «        } |¦   «         | _        | j                             ||¦  «         dS )zFCreate an object from the binary data. Called automatically on access.r   ©ÚotTables©ÚtableTagN)Ú r:   ÚOTTableReaderr<   ÚgetattrÚtableÚ	decompile)r   ÚdataÚfontr:   ÚreaderÚ
tableClasss         r   rA   zBaseTTXConverter.decompileU   sd   € àÐÐÐÐÐå˜t¨d¬mÐ<Ñ<Ô<ˆÝ˜X t¤}Ñ5Ô5ˆ
Ø�Z‘\”\ˆŒ
ØŒ
×Ò˜V TÑ*Ô*Ð*Ð*Ð*r   c                 óâ  — d}|j         t                   }| j        dv rc|du r!t                               d| j        ¦  «         n>t
          s7|du rt          d¦  «        ‚|�J ‚t                               d| j        ¦  «         |dv rt
          r| j        dv rt          j        }nt          j	        }d}d}	 	 t          | j        ¬	¦  «        }| j                             ||¦  «         |t          j        k    r|                      ||¦  «        S |t          j	        k    r|                      |¦  «        S |t          j        k    r;|                      |¦  «         t                               d
¦  «         t          j        }nt# t           $ rg}d}|                      |||¦  «        }	|j        }|	rY d}~Œú|t          j        u r't                               d¦  «         t          j        }n‚ Y d}~nd}~ww xY w�Œ>)z=Compiles the table into binary. Called automatically on save.N)ÚGSUBÚGPOSFz>hb.repack disabled, compiling '%s' with pure-python serializerTzNo module named 'uharfbuzz'z?uharfbuzz not found, compiling '%s' with pure-python serializer)NTr;   zXRe-enabling sharing between extensions and switching back to harfbuzz+fontTools packing.zrHarfbuzz packing out of resolutions, disabling sharing between extensions and switching to fontTools only packing.)ÚcfgÚUSE_HARFBUZZ_REPACKERr<   ÚlogÚdebugÚhave_uharfbuzzÚImportErrorr2   r4   r3   ÚOTTableWriterr@   ÚcompileÚtryPackingHarfbuzzÚtryPackingFontToolsr5   r(   ÚtryResolveOverflowr,   )
r   rC   ÚoverflowRecordÚuse_hb_repackÚstateÚhb_first_error_loggedÚlastOverflowRecordÚwriterÚeÚoks
             r   rP   zBaseTTXConverter.compile^   sJ  € ð. ˆð œÕ!6Ô7ˆØŒ=Ð,Ð,Ð,Ø Ð%Ð%Ý—	’	ØTØ”Mñô ð ð õ $ð Ø  DÐ(Ð(Ý%Ð&CÑDÔDÐDà(Ð0Ð0Ð0Ý—I’IØYØœñô ð ð ˜\Ð)Ð)Ýð *à”Ð!1Ð1Ð1å!Ô'ˆEˆEå!Ô)ˆEà %ÐØ!Ðð"	ð!Ý&°´Ð>Ñ>Ô>�Ø”
×"Ò" 6¨4Ñ0Ô0Ð0Ø�MÔ/Ò/Ð/Ø×2Ò2°6Ð;PÑQÔQÐQØ�mÔ3Ò3Ð3Ø×3Ò3°FÑ;Ô;Ð;Ø�mÔ7Ò7Ð7ð ×,Ò,¨VÑ4Ô4Ð4Ý—I’Ið6ñô ð õ *Ô/�Eøøå)ð ð ð Ø(,Ð%Ø×,Ò,¨T°1Ð6HÑIÔI�Ø%&¤WÐ"àð Ø�H�H�H�Hà�MÔ/Ð/Ð/Ý—I’Ið?ñô ð õ *Ô5�E�Eàð �E�E�E�Eøøøøðøøøñ'"	s,   Â4AE; Ä
$E; Ä/AE; Å;
G,Æ"G'Æ,6G'Ç'G,c                 ó   — 	 t                                d| j        ¦  «         |                     | j        ¦  «        S # t          t
          t          j        f$ ru}|sSt          |¦  «        j	        › }t          |¦  «        dk    r|d|› �z  }t                                d| j        |¦  «         d}|                     d¬¦  «        cY d }~S d }~ww xY w)Nzserializing '%s' with hb.repackr=   z: z`hb.repack failed to serialize '%s', attempting fonttools resolutions ; the error message was: %sTF)Úremove_duplicate)rK   rL   r<   ÚgetAllDataUsingHarfbuzzÚ
ValueErrorÚMemoryErrorÚhbÚRepackerErrorÚtyper#   r    ÚwarningÚ
getAllData)r   rY   rW   rZ   Ú	error_msgs        r   rQ   z#BaseTTXConverter.tryPackingHarfbuzz¹   sè   € ð	=Ý�IŠIÐ7¸¼ÑGÔGÐGØ×1Ò1°$´-Ñ@Ô@Ð@øÝ�K­Ô)9Ð:ð 	=ð 	=ð 	=ð
 )ð 
-Ý# A™wœwÔ/Ð1�	Ý�q‘6”6˜R’<�<Ø  a  Ñ)�IÝ—’ð2à”MØñ	ô ð ð )-Ð%Ø×$Ò$°eÐ$Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<øøøøð!	=øøøs   ‚9< ¼CÁA*CÃCÃCc                 ó*   — |                      ¦   «         S r*   )re   ©r   rY   s     r   rR   z$BaseTTXConverter.tryPackingFontToolsÏ   s   € Ø× Ò Ñ"Ô"Ð"r   c                 óè   — d}||j         k    r|S |j         }t                               d|¦  «         |j        €ddlm}  |||¦  «        }nddlm}  |||¦  «        }|r|S ddlm}  |||¦  «        S )Nr   z+Attempting to fix OTLOffsetOverflowError %sr   )ÚfixLookupOverFlows)ÚfixSubTableOverFlows)r,   rK   Úinfor   r:   rj   rk   )r   rC   rZ   rX   r[   rT   rj   rk   s           r   rS   z#BaseTTXConverter.tryResolveOverflowÒ   s¼   € ØˆØ ¤Ò(Ð(àˆIàœˆÝ�ŠÐ>ÀÑBÔBÐBàÔ"Ð*Ø4Ð4Ð4Ð4Ð4Ð4à#Ð# D¨.Ñ9Ô9ˆBˆBà6Ð6Ð6Ð6Ð6Ð6à%Ð% d¨NÑ;Ô;ˆBàð 	ØˆIð
 	1Ð0Ð0Ð0Ð0Ð0à!Ð! $¨Ñ7Ô7Ð7r   c                 ó<   — | j                              ||¦  «         d S r*   )r@   ÚtoXML2)r   rY   rC   s      r   ÚtoXMLzBaseTTXConverter.toXMLî   s    € ØŒ
×Ò˜& $Ñ'Ô'Ð'Ð'Ð'r   c                 óæ   — ddl m} t          | d¦  «        s$t          || j        ¦  «        } |¦   «         | _        | j                             ||||¦  «         | j                             ¦   «          d S )Nr   r9   r@   )r=   r:   Úhasattrr?   r<   r@   ÚfromXMLÚpopulateDefaults)r   ÚnameÚattrsÚcontentrC   r:   rE   s          r   rr   zBaseTTXConverter.fromXMLñ   sz   € ØÐÐÐÐÐå�t˜WÑ%Ô%ð 	&Ý  ¨4¬=Ñ9Ô9ˆJØ#˜™œˆDŒJØŒ
×Ò˜4 ¨°Ñ6Ô6Ð6ØŒ
×#Ò#Ñ%Ô%Ð%Ð%Ð%r   Tc                 ó<   — | j                              |¬¦  «         d S )N)Úrecurse)r@   ÚensureDecompiled)r   rx   s     r   ry   z!BaseTTXConverter.ensureDecompiledú   s!   € ØŒ
×#Ò#¨GÐ#Ñ4Ô4Ð4Ð4Ð4r   N©T)r#   r$   r%   Ú__doc__rA   rP   rQ   rR   rS   ro   rr   ry   r&   r   r   r7   r7   O   sŸ   € € € € € ðð ð
+ð +ð +ðYð Yð Yðv=ð =ð =ð,#ð #ð #ð8ð 8ð 8ð8(ð (ð (ð&ð &ð &ð5ð 5ð 5ð 5ð 5ð 5r   r7   Úir   z#Oops, file a bug against fonttools.c                   óº   — e Zd ZdZdZd 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„ Z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„ Zd„ ZdS )!r>   z5Helper class to retrieve data from an OpenType table.©rB   ÚoffsetÚposÚ
localStater<   Nr   c                 óL   — || _         || _        || _        || _        || _        d S r*   r~   )r   rB   r�   r   r<   s        r   r   zOTTableReader.__init__  s)   € ØˆŒ	ØˆŒØˆŒØ$ˆŒØ ˆŒˆˆr   c                 ó&   — | xj         |z  c_         d S r*   ©r€   ©r   Úcounts     r   ÚadvancezOTTableReader.advance  s   € ØˆŒ�EÑˆŒˆˆr   c                 ó   — || _         d S r*   r„   )r   r€   s     r   ÚseekzOTTableReader.seek  s   € ØˆŒˆˆr   c                 óv   — |                       | j        | j        | j        | j        ¦  «        }| j        |_        |S r*   )Ú	__class__rB   r�   r   r<   r€   ©r   Úothers     r   ÚcopyzOTTableReader.copy  s/   € Ø—’˜tœy¨$¬/¸4¼;ÈÌÑVÔVˆØ”HˆŒ	Øˆr   c                 ód   — | j         |z   }|                      | j        | j        || j        ¦  «        S r*   )r   r‹   rB   r�   r<   )r   r   s     r   ÚgetSubReaderzOTTableReader.getSubReader  s,   € Ø”˜vÑ%ˆØ�~Š~˜dœi¨¬¸&À$Ä-ÑPÔPÐPr   c                 óz   — | j         }||z   }t          j        d|› �| j        ||…         ¦  «        \  }|| _         |S ©Nú>©r€   ÚstructÚunpackrB   )r   ÚtypecodeÚ
staticSizer€   Únewposr,   s         r   Ú	readValuezOTTableReader.readValue  sC   € ØŒhˆØ�zÑ!ˆÝ”=  X  °´¸3¸v¸:Ô1FÑGÔG‰ˆØˆŒØˆr   c                 óâ   — | j         }|||z  z   }t          j        || j        ||…         ¦  «        }t          j        dk    r|                     ¦   «          || _         |                     ¦   «         S ©NÚbig)r€   ÚarrayrB   ÚsysÚ	byteorderÚbyteswapÚtolist)r   r—   r˜   r†   r€   r™   r,   s          r   Ú	readArrayzOTTableReader.readArray%  sf   € ØŒhˆØ�u˜zÑ)Ñ)ˆÝ”˜H d¤i°°F°
Ô&;Ñ<Ô<ˆÝŒ=˜EÒ!Ð!Ø�NŠNÑÔÐØˆŒØ�|Š|‰~Œ~Ðr   c                 ó0   — |                       dd¬¦  «        S )NÚbr   ©r˜   ©rš   r!   s    r   ÚreadInt8zOTTableReader.readInt8.  ó   € Ø�~Š~˜c¨aˆ~Ñ0Ô0Ð0r   c                 ó2   — |                       dd|¬¦  «        S )Nr¥   r   ©r˜   r†   ©r£   r…   s     r   ÚreadInt8ArrayzOTTableReader.readInt8Array1  ó   € Ø�~Š~˜c¨a°uˆ~Ñ=Ô=Ð=r   c                 ó0   — |                       dd¬¦  «        S )NÚhr   r¦   r§   r!   s    r   Ú	readShortzOTTableReader.readShort4  r©   r   c                 ó2   — |                       dd|¬¦  «        S )Nr°   r   r«   r¬   r…   s     r   ÚreadShortArrayzOTTableReader.readShortArray7  r®   r   c                 ó0   — |                       dd¬¦  «        S )Nr|   r   r¦   r§   r!   s    r   ÚreadLongzOTTableReader.readLong:  r©   r   c                 ó2   — |                       dd|¬¦  «        S )Nr|   r   r«   r¬   r…   s     r   ÚreadLongArrayzOTTableReader.readLongArray=  r®   r   c                 ó0   — |                       dd¬¦  «        S )NÚBr   r¦   r§   r!   s    r   Ú	readUInt8zOTTableReader.readUInt8@  r©   r   c                 ó2   — |                       dd|¬¦  «        S )Nr¹   r   r«   r¬   r…   s     r   ÚreadUInt8ArrayzOTTableReader.readUInt8ArrayC  r®   r   c                 ó0   — |                       dd¬¦  «        S )NÚHr   r¦   r§   r!   s    r   Ú
readUShortzOTTableReader.readUShortF  r©   r   c                 ó2   — |                       dd|¬¦  «        S )Nr¾   r   r«   r¬   r…   s     r   ÚreadUShortArrayzOTTableReader.readUShortArrayI  r®   r   c                 ó0   — |                       dd¬¦  «        S )NÚIr   r¦   r§   r!   s    r   Ú	readULongzOTTableReader.readULongL  r©   r   c                 ó2   — |                       dd|¬¦  «        S )NrÃ   r   r«   r¬   r…   s     r   ÚreadULongArrayzOTTableReader.readULongArrayO  r®   r   c                 óz   — | j         }|dz   }t          j        dd| j        ||…         z   ¦  «        \  }|| _         |S )Nr   ú>ló    r”   ©r   r€   r™   r,   s       r   Ú
readUInt24zOTTableReader.readUInt24R  sA   € ØŒhˆØ�q‘ˆÝ”=  u¨t¬y¸¸V¸Ô/DÑ'DÑEÔE‰ˆØˆŒØˆr   c                 óœ   — | j         }|dz   }| j        ||…         }|d         dz  rdnd}t          j        d||z   ¦  «        \  }|| _         |S )Nr   r   é€   ó   ÿrÉ   rÈ   )r€   rB   r•   r–   )r   r€   r™   r¥   Úpadr,   s         r   Ú	readInt24zOTTableReader.readInt24Y  s[   € ØŒhˆØ�q‘ˆØŒI�c˜&�jÔ!ˆØ˜1œ ™Ð/ˆgˆg¨%ˆÝ”=  s¨Q¡wÑ/Ô/‰ˆØˆŒØˆr   c                 ó:   ‡ — ˆ fd„t          |¦  «        D ¦   «         S )Nc                 ó8   •— g | ]}‰                      ¦   «         ‘ŒS r&   )rË   )Ú.0Ú_r   s     €r   ú
<listcomp>z1OTTableReader.readUInt24Array.<locals>.<listcomp>c  s#   ø€ Ð8Ð8Ð8 a�—’Ñ!Ô!Ð8Ð8Ð8r   )Úranger…   s   ` r   ÚreadUInt24ArrayzOTTableReader.readUInt24Arrayb  s#   ø€ Ø8Ð8Ð8Ð8­5°©<¬<Ð8Ñ8Ô8Ð8r   c                 óž   — | j         }|dz   }t          | j        ||…         ¦  «        }t          |¦  «        dk    s
J |¦   «         ‚|| _         |S ©Nr   )r€   r   rB   ÚlenrÊ   s       r   ÚreadTagzOTTableReader.readTage  sO   € ØŒhˆØ�q‘ˆÝ�D”I˜c &˜jÔ)Ñ*Ô*ˆÝ�5‰zŒz˜QŠˆˆ ‰ŒˆØˆŒØˆr   c                 óJ   — | j         }||z   }| j        ||…         }|| _         |S r*   )r€   rB   )r   r†   r€   r™   r,   s        r   ÚreadDatazOTTableReader.readDatam  s.   € ØŒhˆØ�u‘ˆØ”	˜#˜f˜*Ô%ˆØˆŒØˆr   c                 óz   — | j         r| j                              ¦   «         nt          ¦   «         }|||<   || _         d S r*   ©r�   rŽ   Údict©r   rt   r,   rV   s       r   Ú__setitem__zOTTableReader.__setitem__t  ó9   € Ø*.¬/ÐE�”×$Ò$Ñ&Ô&Ð&½t¹v¼vˆØˆˆd‰ØˆŒˆˆr   c                 ó*   — | j         o| j         |         S r*   ©r�   ©r   rt   s     r   Ú__getitem__zOTTableReader.__getitem__y  s   € ØŒÐ8 4¤?°4Ô#8Ð8r   c                 ó"   — | j         o|| j         v S r*   rå   ræ   s     r   Ú__contains__zOTTableReader.__contains__|  s   € ØŒÐ: 4¨4¬?Ð#:Ð:r   )Nr   N) r#   r$   r%   r{   Ú	__slots__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é   r&   r   r   r>   r>     s¼  € € € € € Ø?Ð?àC€Ið!ð !ð !ð !ðð ð ðð ð ðð ð ð
Qð Qð Qðð ð ðð ð ð1ð 1ð 1ð>ð >ð >ð1ð 1ð 1ð>ð >ð >ð1ð 1ð 1ð>ð >ð >ð1ð 1ð 1ð>ð >ð >ð1ð 1ð 1ð>ð >ð >ð1ð 1ð 1ð>ð >ð >ðð ð ðð ð ð9ð 9ð 9ðð ð ðð ð ð ð  ð  ð
9ð 9ð 9ð;ð ;ð ;ð ;ð ;r   r>   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚOffsetToWriterc                 ó"   — || _         || _        d S r*   )Ú	subWriterÚ
offsetSize©r   rî   rï   s      r   r   zOffsetToWriter.__init__�  s   € Ø"ˆŒØ$ˆŒˆˆr   c                 ó�   — t          | ¦  «        t          |¦  «        k    rt          S | j        |j        k    o| j        |j        k    S r*   )rc   ÚNotImplementedrî   rï   rŒ   s     r   Ú__eq__zOffsetToWriter.__eq__…  s=   € Ý�‰:Œ:�˜e™œÒ$Ð$Ý!Ð!ØŒ~ ¤Ò0ÐX°T´_ÈÔHXÒ5XÐXr   c                 ó8   — t          | j        | j        f¦  «        S r*   )Úhashrî   rï   r!   s    r   Ú__hash__zOffsetToWriter.__hash__Š  s   € å�T”^ T¤_Ð5Ñ6Ô6Ð6r   N)r#   r$   r%   r   ró   rö   r&   r   r   rì   rì   €  sD   € € € € € ð%ð %ð %ðYð Yð Yð
7ð 7ð 7ð 7ð 7r   rì   c                   óþ   — e Zd ZdZd,d„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd-d„Zd„ Zd„ Zd„ Zd.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„ Zd „ Zd!„ Z d"„ Z!d#„ Z"d$„ Z#d%„ Z$d&„ Z%d/d(„Z&d)„ Z'd*„ Z(d+„ Z)dS )0rO   z=Helper class to gather and assemble data for OpenType tables.Nc                 óZ   — g | _         d | _        || _        || _        d | _        d| _        d S )Nú<none>)Úitemsr€   r�   r<   Úparentrt   )r   r�   r<   s      r   r   zOTTableWriter.__init__’  s0   € ØˆŒ
ØˆŒØ$ˆŒØ ˆŒØˆŒØˆŒ	ˆ	ˆ	r   c                 óz   — | j         r| j                              ¦   «         nt          ¦   «         }|||<   || _         d S r*   rß   rá   s       r   râ   zOTTableWriter.__setitem__š  rã   r   c                 ó   — | j         |         S r*   rå   ræ   s     r   rç   zOTTableWriter.__getitem__Ÿ  s   € ØŒ˜tÔ$Ð$r   c                 ó   — | j         |= d S r*   rå   ræ   s     r   Ú__delitem__zOTTableWriter.__delitem__¢  s   € ØŒO˜DÐ!Ð!Ð!r   c                 ó®   — d}| j         D ]J}t          |d¦  «        r||j        z  }Œt          |d¦  «        r||j        z  }Œ8|t	          |¦  «        z   }ŒK|S )z<Return the length of this table in bytes, without subtables.r   ÚgetCountDatarî   )rú   rq   Úsizerï   rÚ   )r   ÚlÚitems      r   ÚgetDataLengthzOTTableWriter.getDataLength§  sm   € àˆØ”Jð 	"ð 	"ˆDÝ�t˜^Ñ,Ô,ð "Ø�T”Y‘��Ý˜˜{Ñ+Ô+ð "Ø�T”_Ñ$��à�˜D™	œ	‘M��Øˆr   c                 ól  — t          | j        ¦  «        }| j        }t          |¦  «        }t	          |¦  «        D ]ì}||         }t          |d¦  «        rÒ|j        dk    r t          |j        j        |z
  ¦  «        ||<   ŒE|j        dk    r]	 t          |j        j        |z
  ¦  «        ||<   Œq# t          j        $ r* |                      |j        ¦  «        }t          |¦  «        ‚w xY w|j        dk    r t          |j        j        |z
  ¦  «        ||<   ŒØt          |j        ¦  «        ‚Œít!          |¦  «        S )z;Assemble the data for this writer/table, without subtables.rî   r   r   r   )Úlistrú   r€   rÚ   rÖ   rq   rï   Ú	packULongrî   Ú
packUShortr•   ÚerrorÚgetOverflowErrorRecordr(   Ú
packUInt24r_   r   )r   rú   r€   ÚnumItemsr|   r  r-   s          r   ÚgetDatazOTTableWriter.getData³  sK  € å�T”ZÑ Ô ˆØŒhˆÝ�u‘:”:ˆÝ�x‘”ð 	6ð 	6ˆAØ˜”8ˆDå�t˜[Ñ)Ô)ð 6Ø”? aÒ'Ð'Ý(¨¬Ô);¸cÑ)AÑBÔB�E˜!‘H�HØ”_¨Ò)Ð)ðJÝ#-¨d¬nÔ.@À3Ñ.FÑ#GÔ#G˜˜a™˜øÝ!œ<ð Jð Jð Jà.2×.IÒ.IØ œNñ/ô /Ð+õ 5Ð5HÑIÔIÐIðJøøøð ”_¨Ò)Ð)Ý)¨$¬.Ô*<¸sÑ*BÑCÔC�E˜!‘H�Hå$ T¤_Ñ5Ô5Ð5ð!6õ$ ˜ÑÔÐs   ÂB+Â+9C$c                 ó*  — t          | j        ¦  «        }t          t          t          dœ}t          |¦  «        D ]L\  }}t          |d¦  «        r7|j        |v r ||j                 d¦  «        ||<   Œ8t          |j        ¦  «        ‚ŒMt          |¦  «        S )zFAssemble the data for this writer/table with all offset field set to 0)r   r   r   rî   r   )
r  rú   r	  r  r  Ú	enumeraterq   rï   r_   r   )r   rú   Ú	packFuncsr|   r  s        r   ÚgetDataForHarfbuzzz OTTableWriter.getDataForHarfbuzzÏ  s›   € å�T”ZÑ Ô ˆÝ"¥zµiÐ@Ð@ˆ	Ý  Ñ'Ô'ð 	6ð 	6‰GˆAˆtÝ�t˜[Ñ)Ô)ð 6à”? iÐ/Ð/Ø9˜y¨¬Ô9¸!Ñ<Ô<�E˜!‘H�Hå$ T¤_Ñ5Ô5Ð5ð6õ ˜ÑÔÐr   c                 ó*   — t          | j        ¦  «        S r*   )rõ   rú   r!   s    r   rö   zOTTableWriter.__hash__Ý  s   € å�D”JÑÔÐr   c                 óH   — |                       |¦  «        }|t          u r|n| S r*   ©ró   rò   ©r   r�   Úresults      r   Ú__ne__zOTTableWriter.__ne__á  ó)   € Ø—’˜UÑ#Ô#ˆØ¥>Ð1Ð1ˆvˆv¸6°zÐAr   c                 óp   — t          | ¦  «        t          |¦  «        k    rt          S | j        |j        k    S r*   )rc   rò   rú   rŒ   s     r   ró   zOTTableWriter.__eq__å  s.   € Ý�‰:Œ:�˜e™œÒ$Ð$Ý!Ð!ØŒz˜Uœ[Ò(Ð(r   Fc                 ó´  — t          | d¦  «        }t          | d¦  «        }|r|si }| j        }t          |¦  «        D ]†\  }}t          |d¦  «        r|                     ¦   «         ||<   Œ-t          |d¦  «        rI|j                             ||¬¦  «         |s+|                     |j        |j        ¦  «        ||         _        Œ‡t          |¦  «        | _        d S )NÚ	ExtensionÚ	DontSharer  rî   ©ÚshareExtension)rq   rú   r  r  rî   Ú_doneWritingÚ
setdefaultÚtuple)r   ÚinternedTablesr  ÚisExtensionÚ	dontSharerú   r|   r  s           r   r   zOTTableWriter._doneWritingê  sü   € õ ˜d KÑ0Ô0ˆõ ˜D +Ñ.Ô.ˆ	àð 	 ˜~ð 	 ØˆNà”
ˆÝ  Ñ'Ô'ð 	ð 	‰GˆAˆtÝ�t˜^Ñ,Ô,ð Ø×,Ò,Ñ.Ô.��a‘�Ý˜˜{Ñ+Ô+ð Ø”×+Ò+Ø"°>ð ,ñ ô ð ð !ð Ø)7×)BÒ)BØœ¨¬ñ*ô *�E˜!”HÔ&øõ ˜5‘\”\ˆŒ
ˆ
ˆ
r   c                 ó@  — d|t          | ¦  «        <   t          | j        ¦  «        }t          t	          |¦  «        ¦  «        }|                     ¦   «          t          | d¦  «        }|}|r|€
J d¦   «         ‚|d i }}}d}t          | d¦  «        r�t	          |¦  «        D ]=}	| j        |	         }
t          |
d¦  «        rt          |
j        dd ¦  «        dk    rd} nŒ>t          |
j        ¦  «        |vr|
j         	                    |||¦  «         n	 |D ]v}	| j        |	         }
t          |
d¦  «        sŒ |r!|	d	k    rt          |
j        dd ¦  «        dk    rŒCt          |
j        ¦  «        |vr|
j         	                    |||¦  «         ŒvŒw| 
                    | ¦  «         d S )
NTr  zUProgram or XML editing error. Extension subtables cannot contain extensions subtablesFÚsortCoverageLastrî   rt   ÚCoverager   )ÚidrÚ   rú   r  rÖ   Úreverserq   r?   rî   Ú_gatherTablesÚappend)r   ÚtablesÚ	extTablesÚdoner  ÚiRanger$  Ú
selfTablesr'  r|   r  s              r   r+  zOTTableWriter._gatherTables  sÝ  € ð ˆ�R�‰XŒX‰å�t”z‘?”?ˆÝ•e˜H‘o”oÑ&Ô&ˆØ�ŠÑÔÐå˜d KÑ0Ô0ˆàˆ
àð 	:àÐ%Ð%Øfñ &Ô%Ð%à&/°°r˜t�IˆFð !ÐÝ�4Ð+Ñ,Ô,ð 	å˜8‘_”_ð ð �Ø”z !”}�å˜D +Ñ.Ô.ðå ¤°¸Ñ=Ô=ÀÒKÐKà'+Ð$Ø�EøÝ�$”.Ñ!Ô!¨Ð-Ð-Ø”×,Ò,¨V°YÀÑEÔEÐEÐEð àð 	ð 	ˆAØ”:˜a”=ˆDÝ˜4 Ñ-Ô-ð Øð !ðà˜!’V�VÝ˜DœN¨F°DÑ9Ô9¸ZÒGÐGð å�$”.Ñ!Ô!¨Ð-Ð-Ø”×,Ò,¨V°YÀÑEÔEÐEÐEð à×Ò˜$ÑÔÐÐÐr   c                 óì  — g }g }|}|D ]}	|                      dd|	f¦  «         Œd}
d}t          | d¦  «        rŠt          | j        ¦  «        D ]u\  }}t	          |dd ¦  «        dk    r[d}
t          |¦  «        |vr|                     |||||¦  «        x}}n|t          |¦  «                 }|                      |¦  «          nŒvd}d}t          | j        ¦  «        D ]À\  }}t          |d¦  «        r|}n.t          |d¦  «        r||j        z  }Œ3|t          |¦  «        z   }ŒFt          |j	        ¦  «        |vr!|j	                             |||||¦  «        x}}n|t          |j	        ¦  «                 }||j
        |f}|                      |¦  «         ||j
        z  }ŒÁ|                      | ¦  «         |                      ||f¦  «         |d	z  }||t          | ¦  «        <   |
r|                     ¦   «          |S )
Nr   Fr'  rt   r(  Trî   r  r   )r,  rq   r  rú   r?   r)  Ú_gatherGraphForHarfbuzzr  rÚ   rî   rï   Úpop)r   r-  Úobj_listr/  ÚobjidxÚvirtual_edgesÚ
real_linksÚvirtual_linksÚitem_idxÚidxr'  Úcoverage_idxr|   r  Ú	child_idxÚ
offset_posr€   Ú	real_edges                     r   r3  z%OTTableWriter._gatherGraphForHarfbuzzQ  s\  € Øˆ
ØˆØˆð !ð 	.ð 	.ˆCØ× Ò  ! Q¨ Ñ-Ô-Ð-Ð-à ÐØˆÝ�4Ð+Ñ,Ô,ð 	å$ T¤ZÑ0Ô0ð 
ð 
‘��4Ý˜4 ¨Ñ.Ô.°*Ò<Ð<Ø'+Ð$Ý˜$‘x”x tÐ+Ð+Ø26×2NÒ2NØ" H¨d°H¸mñ3ô 3ð ˜ x xð (,­B¨t©H¬H¤~˜Ø!×(Ò(¨Ñ6Ô6Ð6Ø�Eð =ð ˆ	Øˆ
Ý  ¤Ñ,Ô,ð 	*ð 	*‰GˆAˆtÝ�t˜[Ñ)Ô)ð Ø ��Ý˜˜~Ñ.Ô.ð Ø˜dœiÑ'�
Øà'­#¨d©)¬)Ñ3�
Øå�$”.Ñ!Ô!¨Ð-Ð-Ø'+¤~×'MÒ'MØ˜H d¨H°mñ(ô (ð �	˜H˜Hð !¥ D¤NÑ!3Ô!3Ô4�	à˜dœo¨yÐ9ˆIØ×Ò˜iÑ(Ô(Ð(Ø˜$œ/Ñ)ˆJˆJà�Š�dÑÔÐØ�Š˜ ]Ð3Ñ4Ô4Ð4Ø�A‰ˆØ!ˆ�R�‰XŒX‰Øð 	 Ø×ÒÑÔÐàˆr   c                 ój  — i }|                       |d¬¦  «         g }g }i }d}g }|                      |||||¦  «         d}|D ] }	||	_        ||	                     ¦   «         z   }Œ!g }
|D ]+}	|	                     ¦   «         }|
                     |¦  «         Œ,t          j        t          |¦  «        |
|¦  «        S )aÂ  The Whole table is represented as a Graph.
        Assemble graph data and call Harfbuzz repacker to pack the table.
        Harfbuzz repacker is faster and retain as much sub-table sharing as possible, see also:
        https://github.com/harfbuzz/harfbuzz/blob/main/docs/repacker.md
        The input format for hb.repack() method is explained here:
        https://github.com/harfbuzz/uharfbuzz/blob/main/src/uharfbuzz/_harfbuzz.pyx#L1149
        Tr  r   )	r   r3  r€   r  r  r,  ra   Úserialize_with_tagr    )r   r<   r#  r-  r5  r/  r6  r7  r€   r@   rB   Ú	tableDatas               r   r^   z%OTTableWriter.getAllDataUsingHarfbuzzŠ  sá   € ð ˆØ×Ò˜.¸ÐÑ>Ô>Ð>ØˆØˆØˆØˆØˆØ×$Ò$ V¨X°t¸VÀ]ÑSÔSÐSð ˆØð 	.ð 	.ˆEØˆEŒIØ˜×+Ò+Ñ-Ô-Ñ-ˆCˆCàˆØð 	#ð 	#ˆEØ×0Ò0Ñ2Ô2ˆIØ�KŠK˜	Ñ"Ô"Ð"Ð"åÔ$¥S¨¡]¤]°D¸(ÑCÔCÐCr   Tc                 ó(  — |ri }|                       |¦  «         g }g }i }|                      |||¦  «         |                     ¦   «          |                     ¦   «          d}|D ] }||_        ||                     ¦   «         z   }Œ!|D ] }||_        ||                     ¦   «         z   }Œ!g }|D ]+}|                     ¦   «         }	|                     |	¦  «         Œ,|D ]+}|                     ¦   «         }	|                     |	¦  «         Œ,t          |¦  «        S )z+Assemble all data, including all subtables.r   )r   r+  r*  r€   r  r  r,  r   )
r   r]   r#  r-  r.  r/  r€   r@   rB   rB  s
             r   re   zOTTableWriter.getAllData¨  sB  € àð 	.ØˆNØ×Ò˜nÑ-Ô-Ð-ØˆØˆ	ØˆØ×Ò˜6 9¨dÑ3Ô3Ð3Ø�ŠÑÔÐØ×ÒÑÔÐð ˆØð 	.ð 	.ˆEØˆEŒIØ˜×+Ò+Ñ-Ô-Ñ-ˆCˆCàð 	.ð 	.ˆEØˆEŒIØ˜×+Ò+Ñ-Ô-Ñ-ˆCˆCàˆØð 	#ð 	#ˆEØŸš™œˆIØ�KŠK˜	Ñ"Ô"Ð"Ð"àð 	#ð 	#ˆEØŸš™œˆIØ�KŠK˜	Ñ"Ô"Ð"Ð"å˜‰ŒÐr   c                 óT   — |                       | j        | j        ¦  «        }| |_        |S r*   )r‹   r�   r<   rû   )r   Ú	subwriters     r   ÚgetSubWriterzOTTableWriter.getSubWriterË  s,   € Ø—N’N 4¤?°D´MÑBÔBˆ	àð 	Ôð Ðr   c                 óf   — | j                              t          j        d|› �|¦  «        ¦  «         d S r’   ©rú   r,  r•   Úpack)r   r—   r,   s      r   Ú
writeValuezOTTableWriter.writeValueÕ  s0   € ØŒ
×Ò�&œ+ n¨( n n°eÑ<Ô<Ñ=Ô=Ð=Ð=Ð=r   c                 óÐ   — t          j         ||¦  «        }t          j        dk    r|                     ¦   «          | j                             |                     ¦   «         ¦  «         d S rœ   )rž   rŸ   r    r¡   rú   r,  Útobytes)r   r—   ÚvaluesÚas       r   Ú
writeArrayzOTTableWriter.writeArrayØ  sQ   € ÝŒK˜ &Ñ)Ô)ˆÝŒ=˜EÒ!Ð!Ø�JŠJ‰LŒLˆLØŒ
×Ò˜!Ÿ)š)™+œ+Ñ&Ô&Ð&Ð&Ð&r   c                 ó’   — d|cxk    rdk     sn J |¦   «         ‚| j                              t          j        d|¦  «        ¦  «         d S )Ni€ÿÿÿrÍ   z>brH  ©r   r,   s     r   Ú	writeInt8zOTTableWriter.writeInt8Þ  sW   € Ø�uÐ"Ð"Ò"Ð"˜sÒ"Ð"Ð"Ð"Ð" EÑ"Ô"Ð"ØŒ
×Ò�&œ+ d¨EÑ2Ô2Ñ3Ô3Ð3Ð3Ð3r   c                 ó2   — |                       d|¦  «         d S )Nr¥   ©rO  ©r   rM  s     r   ÚwriteInt8ArrayzOTTableWriter.writeInt8Arrayâ  ó   € Ø�Š˜˜VÑ$Ô$Ð$Ð$Ð$r   c                 ó’   — d|cxk    rdk     sn J |¦   «         ‚| j                              t          j        d|¦  «        ¦  «         d S )Ni €ÿÿé €  z>hrH  rQ  s     r   Ú
writeShortzOTTableWriter.writeShortå  sW   € Ø˜Ð&Ð&Ò&Ð& Ò&Ð&Ð&Ð&Ð&¨Ñ&Ô&Ð&ØŒ
×Ò�&œ+ d¨EÑ2Ô2Ñ3Ô3Ð3Ð3Ð3r   c                 ó2   — |                       d|¦  «         d S )Nr°   rT  rU  s     r   ÚwriteShortArrayzOTTableWriter.writeShortArrayé  rW  r   c                 ó`   — | j                              t          j        d|¦  «        ¦  «         d S )Nz>irH  rQ  s     r   Ú	writeLongzOTTableWriter.writeLongì  ó*   € ØŒ
×Ò�&œ+ d¨EÑ2Ô2Ñ3Ô3Ð3Ð3Ð3r   c                 ó2   — |                       d|¦  «         d S )Nr|   rT  rU  s     r   ÚwriteLongArrayzOTTableWriter.writeLongArrayï  rW  r   c                 ó’   — d|cxk    rdk     sn J |¦   «         ‚| j                              t          j        d|¦  «        ¦  «         d S )Nr   é   ú>BrH  rQ  s     r   Ú
writeUInt8zOTTableWriter.writeUInt8ò  sW   € Ø�EÐÐÒÐ˜CÒÐÐÐÐ ÑÔÐØŒ
×Ò�&œ+ d¨EÑ2Ô2Ñ3Ô3Ð3Ð3Ð3r   c                 ó2   — |                       d|¦  «         d S )Nr¹   rT  rU  s     r   ÚwriteUInt8ArrayzOTTableWriter.writeUInt8Arrayö  rW  r   c                 ó’   — d|cxk    rdk     sn J |¦   «         ‚| j                              t          j        d|¦  «        ¦  «         d S )Nr   i   ú>HrH  rQ  s     r   ÚwriteUShortzOTTableWriter.writeUShortù  sW   € Ø�EÐ#Ð#Ò#Ð#˜GÒ#Ð#Ð#Ð#Ð# UÑ#Ô#Ð#ØŒ
×Ò�&œ+ d¨EÑ2Ô2Ñ3Ô3Ð3Ð3Ð3r   c                 ó2   — |                       d|¦  «         d S )Nr¾   rT  rU  s     r   ÚwriteUShortArrayzOTTableWriter.writeUShortArrayý  rW  r   c                 ó`   — | j                              t          j        d|¦  «        ¦  «         d S )Nú>IrH  rQ  s     r   Ú
writeULongzOTTableWriter.writeULong   r_  r   c                 ó2   — |                       d|¦  «         d S )NrÃ   rT  rU  s     r   ÚwriteULongArrayzOTTableWriter.writeULongArray  rW  r   c                 ó¦   — d|cxk    rdk     sn J |¦   «         ‚t          j        d|¦  «        }| j                             |dd …         ¦  «         d S )Nr   é   z>Lr   ©r•   rI  rú   r,  )r   r,   r¥   s      r   ÚwriteUInt24zOTTableWriter.writeUInt24  sd   € Ø�EÐ%Ð%Ò%Ð%˜IÒ%Ð%Ð%Ð%Ð% uÑ%Ô%Ð%ÝŒK˜˜eÑ$Ô$ˆØŒ
×Ò˜!˜A˜B˜Bœ%Ñ Ô Ð Ð Ð r   c                 ó:   — |D ]}|                       |¦  «         Œd S r*   )ru  )r   rM  r,   s      r   ÚwriteUInt24ArrayzOTTableWriter.writeUInt24Array  s2   € Øð 	$ð 	$ˆEØ×Ò˜UÑ#Ô#Ð#Ð#ð	$ð 	$r   c                 ó¶   — t          |¦  «                             ¦   «         }t          |¦  «        dk    s
J |¦   «         ‚| j                             |¦  «         d S rÙ   )r   rL  rÚ   rú   r,  )r   Útags     r   ÚwriteTagzOTTableWriter.writeTag  sN   € Ý�#‰hŒh×ÒÑ Ô ˆÝ�3‰xŒx˜1Š}ˆ}ˆ}˜c‰}Œ}ˆ}ØŒ
×Ò˜#ÑÔÐÐÐr   c                 óV   — | j                              t          ||¦  «        ¦  «         d S r*   )rú   r,  rì   rð   s      r   ÚwriteSubTablezOTTableWriter.writeSubTable  s(   € ØŒ
×Ò�.¨°JÑ?Ô?Ñ@Ô@Ð@Ð@Ð@r   r   c                 ó`   — t          ||||¬¦  «        }| j                             |¦  «         |S )N)r  r,   )ÚCountReferencerú   r,  )r   r@   rt   r  r,   Úrefs         r   ÚwriteCountReferencez!OTTableWriter.writeCountReference  s3   € Ý˜U D¨t¸5ÐAÑAÔAˆØŒ
×Ò˜#ÑÔÐØˆ
r   c                 ó^   — t          j        |f|z   Ž }| j                             |¦  «         d S r*   rt  )r   ÚformatrM  rB   s       r   ÚwriteStructzOTTableWriter.writeStruct  s1   € ÝŒ{˜V˜I¨Ñ.Ð/ˆØŒ
×Ò˜$ÑÔÐÐÐr   c                 ó:   — | j                              |¦  «         d S r*   )rú   r,  )r   rB   s     r   Ú	writeDatazOTTableWriter.writeData   s   € ØŒ
×Ò˜$ÑÔÐÐÐr   c                 ó¶  — d x}x}x}}| j         dk    r	|j        }�n%| j         dk    r| j        }|j        }�n
t          |dd¦  «        }t          |d¦  «        r|j        }| j         dk    r| j        j        }| j        }nÃ| j         dk    r| j        j        j        }| j        j        }nšd                     | j         |g¦  «        }| j        }|r7|j         d	vr.d                     |j         |g¦  «        }|j        }|r	|j         d	v°.|r<|j         dk    r|j        j        j        }|j        j        }n|j        j        }|j        }t          | j        ||||f¦  «        S )
NÚ
LookupListÚLookuprt   rù   ÚrepeatIndexÚSubTableÚExtSubTableú.)r‹  rŠ  )rt   r‰  r?   rq   rû   Újoinr   r<   )r   r  r   r   r   r   Úp1s          r   r  z$OTTableWriter.getOverflowErrorRecord#  s‹  € ØAEÐEˆÐE˜-ÐE¨(°YØŒ9˜Ò$Ð$Ø"Ô.ˆO‰OØŒY˜(Ò"Ð"Ø"Ô.ˆOØ Ô,ˆM‰Må˜t V¨XÑ6Ô6ˆHÝ�t˜]Ñ+Ô+ð -Ø Ô,�	ØŒy˜JÒ&Ð&Ø"&¤+Ô"9�Ø $Ô 0��Ø”˜mÒ+Ð+Ø"&¤+Ô"4Ô"@�Ø $¤Ô 7��àŸ8š8 T¤Y°Ð$9Ñ:Ô:�Ø”[�Øð #˜RœWÐ,GÐGÐGØ"Ÿxšx¨¬°(Ð(;Ñ<Ô<�HØœ�Bð ð #˜RœWÐ,GÐGÐGð ð 7Ø”w -Ò/Ð/Ø*,¬)Ô*:Ô*F˜Ø(*¬	Ô(=˜˜à*,¬)Ô*?˜Ø(*¬˜å"ØŒ]˜O¨]¸HÀiÐPñ
ô 
ð 	
r   ©NN©Frz   )r   N)*r#   r$   r%   r{   r   râ   rç   rÿ   r  r  r  rö   r  ró   r   r+  r3  r^   re   rF  rJ  rO  rR  rV  rZ  r\  r^  ra  re  rg  rj  rl  ro  rq  ru  rw  rz  r|  r€  rƒ  r…  r  r&   r   r   rO   rO   �  su  € € € € € ØGÐGðð ð ð ð ð  ð  ð
%ð %ð %ð"ð "ð "ð

ð 
ð 
ð ð  ð  ð8 ð  ð  ð ð  ð  ðBð Bð Bð)ð )ð )ð
%"ð %"ð %"ð %"ðN> ð > ð > ð@7ð 7ð 7ðrDð Dð Dð<ð ð ð ðFð ð ð>ð >ð >ð'ð 'ð 'ð4ð 4ð 4ð%ð %ð %ð4ð 4ð 4ð%ð %ð %ð4ð 4ð 4ð%ð %ð %ð4ð 4ð 4ð%ð %ð %ð4ð 4ð 4ð%ð %ð %ð4ð 4ð 4ð%ð %ð %ð!ð !ð !ð
$ð $ð $ðð ð ð
Að Að Aðð ð ð ð
 ð  ð  ð ð  ð  ð!
ð !
ð !
ð !
ð !
r   rO   c                   ó,   — e Zd ZdZdd„Zd„ Zd„ Zd„ ZdS )r~  z8A reference to a Count value, not a count of references.Nc                 ób   — || _         || _        || _        |�|                      |¦  «         d S d S r*   )r@   rt   r  ÚsetValue)r   r@   rt   r  r,   s        r   r   zCountReference.__init__J  s=   € ØˆŒ
ØˆŒ	ØˆŒ	ØÐØ�MŠM˜%Ñ Ô Ð Ð Ð ð Ðr   c                 ó~   — | j         }| j        }||         €|||<   d S ||         |k    sJ |||         |f¦   «         ‚d S r*   ©r@   rt   )r   r,   r@   rt   s       r   r“  zCountReference.setValueQ  sU   € Ø”
ˆØŒyˆØ�Œ;ÐØˆE�$‰KˆKˆKà˜”; %Ò'Ð'Ð'¨$°°d´¸UÐ)CÑ'Ô'Ð'Ð'Ð'r   c                 ó&   — | j         | j                 S r*   r•  r!   s    r   ÚgetValuezCountReference.getValueY  s   € ØŒz˜$œ)Ô$Ð$r   c                 ó~   — | j         | j                 }|€d}t          t          t          dœ| j                 |¦  «        S )Nr   )r   r   r   )r@   rt   Ú	packUInt8r	  r  r  )r   Úvs     r   r  zCountReference.getCountData\  s9   € ØŒJ�t”yÔ!ˆØˆ9ØˆAÝ¥µ	Ð:Ð:¸4¼9ÔEÀaÑHÔHÐHr   r�  )r#   r$   r%   r{   r   r“  r—  r  r&   r   r   r~  r~  G  sc   € € € € € ØBÐBð!ð !ð !ð !ðDð Dð Dð%ð %ð %ðIð Ið Ið Ið Ir   r~  c                 ó,   — t          j        d| ¦  «        S )Nrd  ©r•   rI  r+   s    r   r™  r™  c  ó   € ÝŒ;�t˜UÑ#Ô#Ð#r   c                 ó,   — t          j        d| ¦  «        S )Nri  rœ  r+   s    r   r	  r	  g  r�  r   c                 ó^   — d| cxk    rdk     sn J | ¦   «         ‚t          j        d| ¦  «        S )Nr   l        rn  rœ  r+   s    r   r  r  k  sA   € Ø�Ð#Ð#Ò#Ð#˜Ò#Ð#Ð#Ð#Ð# UÑ#Ô#Ð#ÝŒ;�t˜UÑ#Ô#Ð#r   c                 ón   — d| cxk    rdk     sn J | ¦   «         ‚t          j        d| ¦  «        dd …         S )Nr   rs  rn  r   rœ  r+   s    r   r  r  p  sJ   € Ø�Ð!Ð!Ò!Ð!˜	Ò!Ð!Ð!Ð!Ð! 5Ñ!Ô!Ð!ÝŒ;�t˜UÑ#Ô# A B BÔ'Ð'r   c                   óÂ   — e Zd ZdZd„ Zdd„Zd„ Zed„ ¦   «         Zd„ Z	d„ Z
dd
„Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Z G d„ de¦  «        Zdee         fd„Zd„ Zd	S )Ú	BaseTablez0Generic base class for all OpenType (sub)tables.c                 óº   — | j                              d¦  «        }|r1| `| j        }| `|                      ||¦  «         t          | |¦  «        S t          |¦  «        ‚©NrD   )Ú__dict__ÚgetrD   rC   rA   r?   ÚAttributeError)r   ÚattrrD   rC   s       r   Ú__getattr__zBaseTable.__getattr__x  sb   € Ø”×"Ò" 8Ñ,Ô,ˆØð 	'Ø�Ø”9ˆDØ�	Ø�NŠN˜6 4Ñ(Ô(Ð(Ý˜4 Ñ&Ô&Ð&å˜TÑ"Ô"Ð"r   Fc                 óŽ  — | j                              d¦  «        }|r!| `| j        }| `|                      ||¦  «         |rƒ| j                              ¦   «         D ]8\  }}t          |t          ¦  «        rt          | |t          |¦  «        ¦  «         Œ9|  
                    ¦   «         D ]}|j                             |¦  «         Œd S d S r¤  )r¥  r¦  rD   rC   rA   rú   Ú
isinstancer   Úsetattrr  ÚiterSubTablesr,   ry   )r   rx   rD   rC   rt   r,   Úsubtables          r   ry   zBaseTable.ensureDecompiledƒ  sà   € Ø”×"Ò" 8Ñ,Ô,ˆØð 	)Ø�Ø”9ˆDØ�	Ø�NŠN˜6 4Ñ(Ô(Ð(Øð 	9à#œ}×2Ò2Ñ4Ô4ð 5ð 5‘��eÝ˜e¥XÑ.Ô.ð 5Ý˜D $­¨U©¬Ñ4Ô4Ð4øØ ×.Ò.Ñ0Ô0ð 9ð 9�Ø”×/Ò/°Ñ8Ô8Ð8Ð8ð	9ð 	9ð
9ð 9r   c                 óœ   — d| j         v r=| j                              ¦   «         }| j         d                              ¦   «         |d<   |S | j         S r¤  )r¥  rŽ   )r   rV   s     r   Ú__getstate__zBaseTable.__getstate__’  sM   € ð �t”}Ð$Ð$Ø”M×&Ò&Ñ(Ô(ˆEØ"œm¨HÔ5×:Ò:Ñ<Ô<ˆE�(‰OØˆLØŒ}Ðr   c                 óÞ   — d}| j         D ]b}|                     |¦  «        }|t          u r	t          c S d}|j        r(|j        |v r||j                 |j        z   }n	t          c S |||z  z  }Œc|S )Nr   r   )Ú
convertersÚgetRecordSizerò   ÚrepeatÚaux)ÚclsrD   Ú	totalSizeÚconvr  Ú
countValues         r   r³  zBaseTable.getRecordSize›  s–   € àˆ	Ø”Nð 
	+ð 
	+ˆDØ×%Ò% fÑ-Ô-ˆDØ•~Ð%Ð%Ý%Ð%Ð%Ð%ØˆJØŒ{ð *Ø”; &Ð(Ð(Ø!'¨¬Ô!4°t´xÑ!?�J�Jå)Ð)Ð)Ð)Ø˜ 
Ñ*Ñ*ˆIˆIØÐr   c                 ó   — | j         S r*   )r²  r!   s    r   ÚgetConverterszBaseTable.getConverters«  s
   € ØŒÐr   c                 ó   — | j         |         S r*   )ÚconvertersByNameræ   s     r   ÚgetConverterByNamezBaseTable.getConverterByName®  s   € ØÔ$ TÔ*Ð*r   Nc                 óà  — |                       ¦   «         D �]W}|j        rÂt          | |j        ¦  «        st	          | |j        g ¦  «         t          t          | |j        ¦  «        ¦  «        |j        z
  }	 |                      |j        ¦  «        }t	          | |j        |¦  «         Œ‘# t          $ r. |r)|j        |v r ||j                  
                    |¦  «         Y ŒÈw xY w|j        rt          |j        d | j        ¦  «        sŒït          | |j        ¦  «        r�Œt          |d¦  «        rt	          | |j        d ¦  «         t          |d¦  «        rt	          | |j        |j        ¦  «         �ŒYd S )NÚwriteNullOffsetÚDEFAULT)r»  r´  rq   rt   r¬  rÚ   r?   rµ  r¾  ÚKeyErrorr“  Úevalr¥  rÁ  )r   Ú
propagatorr¸  r¹  Ú
count_convs        r   rs   zBaseTable.populateDefaults±  s‹  € Ø×&Ò&Ñ(Ô(ð 	;ñ 	;ˆDØŒ{ð ;Ý˜t T¤YÑ/Ô/ð 1Ý˜D $¤)¨RÑ0Ô0Ð0Ý ¥¨¨t¬yÑ!9Ô!9Ñ:Ô:¸T¼XÑE�
ðEØ!%×!8Ò!8¸¼Ñ!EÔ!E�JÝ˜D $¤+¨zÑ:Ô:Ð:Ð:øÝð Eð Eð Eà!ð E d¤k°ZÐ&?Ð&?Ø" 4¤;Ô/×8Ò8¸ÑDÔDÐDøøðEøøøð
 ”8ð ¥D¨¬°4¸¼Ñ$GÔ$Gð ØÝ˜4 ¤Ñ+Ô+ð ÙÝ˜4Ð!2Ñ3Ô3ð 3Ý˜D $¤)¨TÑ2Ô2Ð2õ ˜4 Ñ+Ô+ð ;å˜D $¤)¨T¬\Ñ:Ô:Ð:ùð1	;ð 	;s   Á50B&Â&5CÃCc                 óH  — |                       |¦  «         i }|| _        |                      ¦   «         D �]ª}|j        dk    r!|                     |j        |d         ¦  «        }|j        dk    r!|                     |j        |d         ¦  «        }|j        dk    r|                     |d         ¦  «        }|j        dk    r!|                     |j        |d         ¦  «        }	 |j        rqt          |j        t          ¦  «        r|j        }n$|j        |v r||j                 }n||j                 }||j	        z  }| 
                    ||||¦  «        ||j        <   nZ|j	        rt          |j	        d |¦  «        s�ŒE|                     |||¦  «        ||j        <   |j        r||j                 ||j        <   �Œ‚# t          $ r}|j        }|j        |fz   |_        ‚ d }~ww xY wt!          | d	¦  «        r|                      ||¦  «         n| j                             |¦  «         | `d S )
NrŠ  Ú
LookupTyper‹  ÚExtensionLookupTypeÚFeatureParamsÚ
FeatureTagÚ	SubStructÚ	MorphTypeÚpostRead)Ú
readFormatÚ_BaseTable__rawTabler»  rt   ÚgetConverterr<   r´  r«  Úintrµ  r£   rÃ  ÚreadÚisPropagatedÚ	ExceptionÚargsrq   rÍ  r¥  Úupdate)r   rD   rC   r@   r¸  r¹  rZ   rt   s           r   rA   zBaseTable.decompileÌ  s>  € Ø�Š˜ÑÔÐØˆØˆŒØ×&Ò&Ñ(Ô(ð 	ñ 	ˆDØŒy˜JÒ&Ð&Ø×(Ò(¨¬¸%ÀÔ:MÑNÔN�ØŒy˜MÒ)Ð)Ø×(Ò(¨¬¸%Ð@UÔ:VÑWÔW�ØŒy˜OÒ+Ð+Ø×(Ò(¨°Ô)=Ñ>Ô>�ØŒy˜KÒ'Ð'Ø×(Ò(¨¬¸%ÀÔ:LÑMÔM�ðØ”;ð =Ý! $¤+­sÑ3Ô3ð 9Ø%)¤[˜
˜
Øœ¨Ð-Ð-Ø%*¨4¬;Ô%7˜
˜
ð &,¨D¬KÔ%8˜
Ø $¤(Ñ*�JØ'+§~¢~°f¸dÀEÈ:Ñ'VÔ'V�E˜$œ)Ñ$Ð$à”xð !­¨T¬X°t¸UÑ(CÔ(Cð !Ù Ø'+§y¢y°¸¸uÑ'EÔ'E�E˜$œ)Ñ$ØÔ(ð =Ø,1°$´)Ô,<˜˜tœyÑ)ùøÝð ð ð Ø”y�Øœ 4 'Ñ)�”Øøøøøðøøøõ
 �4˜Ñ$Ô$ð 	(Ø�MŠM˜% Ñ&Ô&Ð&Ð&àŒM× Ò  Ñ'Ô'Ð'àˆOˆOˆOs   Ã!BF5Å8;F5Æ5
GÆ?GÇGc                 óê  — |                       ¦   «          t          | d¦  «        r9t          | d¦  «         }|                      |¦  «        }|ot          | d¦  «        }nd}| j                             ¦   «         }|                      ¦   «         D ]I}|j        r@|j        r9|                     |j	        ¦  «        }t          |t          ¦  «        r
|||j	        <   ŒJt          | d¦  «        rd|_        t          | d¦  «        rd|_        t          | j        d¦  «        r%|d                              | j        j        ¦  «         |                      |¦  «         |                      ¦   «         D �]ƒ}|                     |j	        ¦  «        }|j        rõ|€g }t'          |¦  «        |j        z
  }t          |j        t*          ¦  «        r:t'          |¦  «        |j        k    s!J d	|j        t'          |¦  «        fz  ¦   «         ‚nA|j        |v rt          ||j        |¬
¦  «         n ||j                                      |¦  «         	 |                     ||||¦  «         Œî# t.          $ r}|j        |j	        dz   fz   |_        ‚ d }~ww xY w|j        r“t          |t          ¦  «        r@|}	|j        |	_        |                     |	¦  «         |	                     ¦   «         ||j	        <   n+|                     ||j	        |j        ¦  «        }	d ||j	        <   |j        r
|	||j	        <   �Œ³|j        rG|j	        |vr
d ||j	        <   |                     ||j	        |j        ||j	                 ¦  «        }	|	|d<   �Œ|j        rt?          |j        d |¦  «        s�Œ 	 |                      ||||¦  «         n8# t.          $ r+}|�|j        j!        n|j	        }
|j        |
fz   |_        ‚ d }~ww xY w|j        r
|||j	        <   �Œ…|r| `"d S d S )NÚpreWriteÚFormatFr'  r   r  TrÇ  zexpected %d values, got %dr+   z[])#ry   rq   rØ  r¥  rŽ   r»  ÚisCountrÓ  r¦  rt   r«  r~  r'  r  r‹   r“  rÇ  ÚwriteFormatr´  rÚ   rµ  rÑ  rO  rÔ  rÕ  r˜   r  r…  r—  r€  ÚisLookupTyperÃ  Úwriter#   rÙ  )r   rY   rC   ÚdeleteFormatr@   r¸  r,   r¹  rZ   r  rt   s              r   rP   zBaseTable.compileö  sZ  € Ø×ÒÑÔÐõ �4˜Ñ$Ô$ð 	)Ý& t¨XÑ6Ô6Ð6ˆLØ—M’M $Ñ'Ô'ˆEØ'ÐC­G°D¸(Ñ,CÔ,CˆLˆLà ˆLØ”M×&Ò&Ñ(Ô(ˆEð ×&Ò&Ñ(Ô(ð 	.ð 	.ˆDØŒ|ð . Ô 1ð .ØŸ	š	 $¤)Ñ,Ô,�Ý˜e¥^Ñ4Ô4ð .Ø(-�F˜4œ9Ñ%øå�4Ð+Ñ,Ô,ð 	(Ø&'ˆFÔ#å�4˜Ñ%Ô%ð 	$Ø#ˆFÔå�4”> <Ñ0Ô0ð 	EØ�<Ô ×)Ò)¨$¬.Ô*CÑDÔDÐDà×Ò˜Ñ Ô Ð Ø×&Ò&Ñ(Ô(ð ?	.ñ ?	.ˆDØ—I’IØ”	ñô ˆEð Œ{ð ;.Ø�=Ø�EÝ  ™ZœZ¨$¬(Ñ2�
Ý˜dœk­3Ñ/Ô/ð 	=Ý˜u™:œ:¨¬Ò4Ð4Ð4Ð6RØœÝ˜E™
œ
ðVñ 7Ñ4Ô4Ð4Ð4ð ”[ EÐ)Ð)Ý" 5¨$¬+¸ZÐHÑHÔHÐHÐHð ˜4œ;Ô'×0Ò0°Ñ<Ô<Ð<ðØ—O’O F¨D°%¸Ñ?Ô?Ð?Ð?øÝ ð ð ð ØœV t¤y°4Ñ'7Ð&9Ñ9�A”FØøøøøðøøøð ”ð (.õ ˜e¥^Ñ4Ô4ð ,Ø�CØ#œ�C”HØ×$Ò$ SÑ)Ô)Ð)Ø'*§|¢|¡~¤~�E˜$œ)Ñ$Ð$à ×4Ò4°U¸D¼IÀtÄÑWÔW�CØ'+�E˜$œ)Ñ$ØÔ$ð ,Ø(+�F˜4œ9Ñ%ùØÔ"ð .ð ”9 EÐ)Ð)Ø'+�E˜$œ)Ñ$Ø×0Ò0Ø˜4œ9 d¤o°u¸T¼YÔ7Gñô �ð (+��|Ñ$Ñ$à”8ð ¥D¨¬°4¸Ñ$?Ô$?ð ÙðØ—J’J˜v t¨U°EÑ:Ô:Ð:Ð:øÝ ð ð ð Ø7<Ð7H˜5œ?Ô3Ð3ÈdÌi�DØœV t gÑ-�A”FØøøøøðøøøð Ô$ð .Ø(-�F˜4œ9Ñ%ùàð 	Ø���ð	ð 	s0   È=IÉ
I>É I9É9I>Î	N"Î"
OÎ,&OÏOc                 ó   — d S r*   r&   ©r   rD   s     r   rÎ  zBaseTable.readFormat[  ó   € Øˆr   c                 ó   — d S r*   r&   rh   s     r   rÛ  zBaseTable.writeFormat^  rá  r   c                 ó:  — |r|n| j         j        }|€g }t          | d¦  «        r|d| j        fgz   }|                     ||¦  «         |                     ¦   «          |                      ||¦  «         |                     |¦  «         |                     ¦   «          d S )NrÙ  )r‹   r#   rq   rÙ  ÚbegintagÚnewlinern   Úendtag)r   Ú	xmlWriterrC   ru   rt   Ú	tableNames         r   ro   zBaseTable.toXMLa  s­   € Ø Ð=�D�D d¤nÔ&=ˆ	Øˆ=ØˆEÝ�4˜Ñ"Ô"ð 	6Ø˜h¨¬Ð4Ð5Ñ5ˆEØ×Ò˜9 eÑ,Ô,Ð,Ø×ÒÑÔÐØ�Š�I˜tÑ$Ô$Ð$Ø×Ò˜Ñ#Ô#Ð#Ø×ÒÑÔÐÐÐr   c           
      óš  — |                       ¦   «         D ]µ}|j        rMt          | |j        g ¦  «        }t	          |¦  «        D ]&\  }}|                     ||||j        d|fg¦  «         Œ'ŒV|j        r$t          |j        d t          | ¦  «        ¦  «        sŒ�t          | |j        d ¦  «        }|                     ||||j        g ¦  «         Œ¶d S )NÚindex)	r»  r´  r?   rt   r  ÚxmlWriterµ  rÃ  Úvars)r   rç  rC   r¸  r,   r|   r  s          r   rn   zBaseTable.toXML2m  sö   € ð ×&Ò&Ñ(Ô(ð 	Eð 	EˆDØŒ{ð 
EÝ  d¤i°Ñ4Ô4�Ý(¨Ñ/Ô/ð Tð T‘G�A�tØ—M’M )¨T°4¸¼ÀgÈqÀ\ÀNÑSÔSÐSÐSðTð ”8ð ¥D¨¬°4½¸d¹¼Ñ$DÔ$Dð ØÝØ˜$œ) Tñô �ð —’˜i¨¨u°d´iÀÑDÔDÐDÐDð	Eð 	Er   c                 óH  — 	 |                       |¦  «        }n# t          $ r ‚ w xY w|                     |||¦  «        }|j        �Gt	          | |j        d ¦  «        }|€g }t          | |j        |¦  «         |                     |¦  «         d S t          | |j        |¦  «         d S r*   )r¾  rÂ  ÚxmlReadr´  r?   rt   r¬  r,  )r   rt   ru   rv   rC   r¸  r,   Úseqs           r   rr   zBaseTable.fromXML~  s¼   € ð	Ø×*Ò*¨4Ñ0Ô0ˆDˆDøÝð 	ð 	ð 	Øð	øøøà—’˜U G¨TÑ2Ô2ˆð Œ;Ð"Ý˜$ ¤	¨4Ñ0Ô0ˆCØˆ{Ø�Ý˜˜dœi¨Ñ-Ô-Ð-Ø�JŠJ�uÑÔÐÐÐå�D˜$œ) UÑ+Ô+Ð+Ð+Ð+s   ‚ ˜$c                 óH   — |                       |¦  «        }|t          u r|n| S r*   r  r  s      r   r  zBaseTable.__ne__�  r  r   c                 óÀ   — t          | ¦  «        t          |¦  «        k    rt          S |                      ¦   «          |                     ¦   «          | j        |j        k    S r*   )rc   rò   ry   r¥  rŒ   s     r   ró   zBaseTable.__eq__”  sR   € Ý�‰:Œ:�˜e™œÒ$Ð$Ý!Ð!à×ÒÑÔÐØ×ÒÑ Ô Ð àŒ} ¤Ò.Ð.r   c                   óB   — e Zd ZU dZeed<   ded<   dZee         ed<   dS )úBaseTable.SubTableEntryzSee BaseTable.iterSubTables()rt   r¢  r,   Nrê  )	r#   r$   r%   r{   r    Ú__annotations__rê  r   rÑ  r&   r   r   ÚSubTableEntryró  �  sA   € € € € € € Ø+Ð+àˆ	ˆ	‰	ØÐÐÑØ#ˆˆx˜Œ}Ð#Ð#Ñ#Ð#Ð#r   rõ  Úreturnc              #   ó<  ‡ ‡K  — ‰                       ¦   «         D ]‚}|j        Št          ‰ ‰d¦  «        }|€Œt          |t          ¦  «        r‰                      ‰|¦  «        V — ŒKt          |t          ¦  «        r"ˆˆ fd„t          |¦  «        D ¦   «         E d{V —† ŒƒdS )a7  Yield (name, value, index) namedtuples for all subtables of current table.

        A sub-table is an instance of BaseTable (or subclass thereof) that is a child
        of self, the current parent table.
        The tuples also contain the attribute name (str) of the of parent table to get
        a subtable, and optionally, for lists of subtables (i.e. attributes associated
        with a converter that has a 'repeat'), an index into the list containing the
        given subtable value.
        This method can be useful to traverse trees of otTables.
        Nc              3   óx   •K  — | ]4\  }}t          |t          ¦  «        ¯‰                     ‰||¬ ¦  «        V — Œ5dS ))rê  N)r«  r¢  rõ  )rÓ   r|   rš  rt   r   s      €€r   ú	<genexpr>z*BaseTable.iterSubTables.<locals>.<genexpr>·  s`   øè è € ð ð á˜˜1Ý! !¥YÑ/Ô/ðØ×&Ò& t¨Q°aÐ&Ñ8Ô8ðð ð ð ð ð r   )r»  rt   r?   r«  r¢  rõ  r  r  )r   r¸  r,   rt   s   `  @r   r­  zBaseTable.iterSubTables¤  sé   øøè è € ð ×&Ò&Ñ(Ô(ð 	ð 	ˆDØ”9ˆDÝ˜D $¨Ñ-Ô-ˆEØˆ}ØÝ˜%¥Ñ+Ô+ð Ø×(Ò(¨¨uÑ5Ô5Ð5Ð5Ð5Ð5Ý˜E¥4Ñ(Ô(ð ðð ð ð ð å )¨%Ñ 0Ô 0ðñ ô ð ð ð ð ð ð ð øð	ð 	r   c                 ó*   — t          | j        ¦  «        S r*   )ÚgetVariableAttrsr‹   r!   s    r   rû  zBaseTable.getVariableAttrs¾  s   € Ý ¤Ñ/Ô/Ð/r   r�  r*   r�  )r#   r$   r%   r{   r©  ry   r°  Úclassmethodr³  r»  r¾  rs   rA   rP   rÎ  rÛ  ro   rn   rr   r  ró   r   rõ  r   r­  rû  r&   r   r   r¢  r¢  u  s‰  € € € € € Ø:Ð:ð	#ð 	#ð 	#ð9ð 9ð 9ð 9ðð ð ð ðð ñ „[ððð ð ð+ð +ð +ð;ð ;ð ;ð ;ð6(ð (ð (ðTcð cð cðJð ð ðð ð ð
ð 
ð 
ð 
ðEð Eð Eð",ð ,ð ,ð$Bð Bð Bð/ð /ð /ð$ð $ð $ð $ð $˜
ñ $ô $ð $ð˜x¨Ô6ð ð ð ð ð40ð 0ð 0ð 0ð 0r   r¢  c                   óN   — e Zd ZdZed„ ¦   «         Zd„ Zd„ Zd„ Zd„ Z	d
d„Z
d	„ ZdS )ÚFormatSwitchingBaseTablezvMinor specialization of BaseTable, for tables that have multiple
    formats, eg. CoverageFormat1 vs. CoverageFormat2.c                 ó   — t           S r*   )rò   )r¶  rD   s     r   r³  z&FormatSwitchingBaseTable.getRecordSizeÆ  s   € åÐr   c                 óx   — 	 | j         }n# t          $ r g cY S w xY w| j                             | j         g ¦  «        S r*   )rÙ  r§  r²  r¦  )r   Úfmts     r   r»  z&FormatSwitchingBaseTable.getConvertersÊ  sR   € ð	Ø”+ˆCˆCøÝð 	ð 	ð 	ð ˆIˆIˆIð	øøøð Œ×"Ò" 4¤;°Ñ3Ô3Ð3s   ‚
 Š˜c                 ó2   — | j         | j                 |         S r*   )r½  rÙ  ræ   s     r   r¾  z+FormatSwitchingBaseTable.getConverterByNameÖ  s   € ØÔ$ T¤[Ô1°$Ô7Ð7r   c                 ó8   — |                      ¦   «         | _        d S r*   )r¿   rÙ  rà  s     r   rÎ  z#FormatSwitchingBaseTable.readFormatÙ  s   € Ø×'Ò'Ñ)Ô)ˆŒˆˆr   c                 ó:   — |                      | j        ¦  «         d S r*   )rj  rÙ  rh   s     r   rÛ  z$FormatSwitchingBaseTable.writeFormatÜ  s   € Ø×Ò˜4œ;Ñ'Ô'Ð'Ð'Ð'r   Nc                 óB   — t                                | ||||¦  «         d S r*   )r¢  ro   )r   rç  rC   ru   rt   s        r   ro   zFormatSwitchingBaseTable.toXMLß  s"   € Ý�Š˜˜i¨¨u°dÑ;Ô;Ð;Ð;Ð;r   c                 ó6   — t          | j        | j        ¦  «        S r*   )rû  r‹   rÙ  r!   s    r   rû  z)FormatSwitchingBaseTable.getVariableAttrsâ  s   € Ý ¤°´Ñ<Ô<Ð<r   r�  )r#   r$   r%   r{   rü  r³  r»  r¾  rÎ  rÛ  ro   rû  r&   r   r   rþ  rþ  Â  s˜   € € € € € ð9ð 9ð ðð ñ „[ðð
4ð 
4ð 
4ð8ð 8ð 8ð*ð *ð *ð(ð (ð (ð<ð <ð <ð <ð=ð =ð =ð =ð =r   rþ  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚUInt8FormatSwitchingBaseTablec                 ó8   — |                      ¦   «         | _        d S r*   )rº   rÙ  rà  s     r   rÎ  z(UInt8FormatSwitchingBaseTable.readFormatç  s   € Ø×&Ò&Ñ(Ô(ˆŒˆˆr   c                 ó:   — |                      | j        ¦  «         d S r*   )re  rÙ  rh   s     r   rÛ  z)UInt8FormatSwitchingBaseTable.writeFormatê  s   € Ø×Ò˜$œ+Ñ&Ô&Ð&Ð&Ð&r   N)r#   r$   r%   rÎ  rÛ  r&   r   r   r  r  æ  s2   € € € € € ð)ð )ð )ð'ð 'ð 'ð 'ð 'r   r  )Úuint16Úuint8c                 ó^   — 	 t           |          S # t          $ r t          d| ›�¦  «        ‚w xY w)NzUnsupported format type: )ÚformatSwitchingBaseTablesrÂ  Ú	TypeError)Ú
formatTypes    r   Ú getFormatSwitchingBaseTableClassr  ô  sI   € ðDÝ(¨Ô4Ð4øÝð Dð Dð DÝÐB°JÐBÐBÑCÔCÐCðDøøøs   ‚ �,r¶  r  rö  c                 ó�  — t          | t          ¦  «        st          | ¦  «        ‚t          | t          ¦  «        r'|€t          d| j        › �¦  «        ‚| j        |         }n| j        }d|vrdS i }|                     ¦   «         D ] \  }}|                     ¦   «         }|�|||<   Œ!t          t          ||j
        ¬¦  «        ¦  «        S )zÐReturn sequence of variable table field names (can be empty).

    Attributes are deemed "variable" when their otData.py's description contain
    'VarIndexBase + {offset}', e.g. COLRv1 PaintVar* tables.
    Nz''fmt' is required for format-switching ÚVarIndexBaser&   )Úkey)Ú
issubclassr¢  r  rþ  r#   r½  rú   ÚgetVarIndexOffsetr"  Úsortedrç   )r¶  r  r²  ÚvarAttrsrt   r¸  r   s          r   rû  rû  ü  sÝ   € õ �c�9Ñ%Ô%ð Ý˜‰nŒnÐÝ�#Õ/Ñ0Ô0ð *Øˆ;ÝÐTÀcÄlÐTÐTÑUÔUÐUØÔ)¨#Ô.ˆ
ˆ
àÔ)ˆ
à˜ZÐ'Ð'ØˆrØ€HØ ×&Ò&Ñ(Ô(ð $ð $‰
ˆˆdØ×'Ò'Ñ)Ô)ˆØÐØ#ˆH�T‰NøÝ•˜ hÔ&:Ð;Ñ;Ô;Ñ<Ô<Ð<r   ))r   Ú
XPlacementr   r   )r   Ú
YPlacementr   r   )r   ÚXAdvancer   r   )é   ÚYAdvancer   r   )é   Ú
XPlaDevicer   r   )é    Ú
YPlaDevicer   r   )é@   Ú
XAdvDevicer   r   )rÍ   Ú
YAdvDevicer   r   )rc  Ú	Reserved1r   r   )i   Ú	Reserved2r   r   )i   Ú	Reserved3r   r   )i   Ú	Reserved4r   r   )i   Ú	Reserved5r   r   )i    Ú	Reserved6r   r   )i @  Ú	Reserved7r   r   )rY  Ú	Reserved8r   r   c                  ó8   — i } t           D ]\  }}}}|||f| |<   Œ| S r*   )ÚvalueRecordFormat)ÚdÚmaskrt   ÚisDeviceÚsigneds        r   Ú
_buildDictr3  4  s6   € Ø
€AÝ(9ð )ð )Ñ$ˆˆd�H˜fØ˜ &Ð(ˆˆ$‰ˆØ€Hr   c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚValueRecordFactoryz6Given a format code, this object convert ValueRecords.c                 óp   — g }t           D ]$\  }}}}||z  r|                     |||f¦  «         Œ%|| _        d S r*   )r.  r,  r‚  )r   ÚvalueFormatr‚  r0  rt   r1  r2  s          r   r   zValueRecordFactory.__init__A  sQ   € ØˆÝ,=ð 	8ð 	8Ñ(ˆD�$˜ &Ø˜TÑ!ð 8Ø—’˜t X¨vÐ6Ñ7Ô7Ð7øØˆŒˆˆr   c                 ó*   — t          | j        ¦  «        S r*   )rÚ   r‚  r!   s    r   Ú__len__zValueRecordFactory.__len__H  s   € Ý�4”;ÑÔÐr   c                 ób  — | j         }|sd S t          ¦   «         }|D ]’\  }}}|r|                     ¦   «         }n|                     ¦   «         }|rN|rJddlm}	 |                     |¦  «        }
 t          |	|¦  «        ¦   «         }|                     |
|¦  «         nd }t          |||¦  «         Œ“|S ©Nr   r9   )
r‚  ÚValueRecordr±   r¿   r=   r:   r�   r?   rA   r¬  )r   rD   rC   r‚  ÚvalueRecordrt   r1  r2  r,   r:   Ú	subReaders              r   ÚreadValueRecordz"ValueRecordFactory.readValueRecordK  sä   € Ø”ˆØð 	Ø�4Ý!‘m”mˆØ&,ð 	.ð 	.Ñ"ˆD�(˜FØð ,Ø×(Ò(Ñ*Ô*��à×)Ò)Ñ+Ô+�Øð !Øð !Ø*Ð*Ð*Ð*Ð*Ð*à &× 3Ò 3°EÑ :Ô :�IØ3�G H¨dÑ3Ô3Ñ5Ô5�EØ—O’O I¨tÑ4Ô4Ð4Ð4à �EÝ�K  uÑ-Ô-Ð-Ð-ØÐr   c                 óV  — | j         D ] \  }}}t          ||d¦  «        }|rZ|rB|                     ¦   «         }|                     |d¬¦  «         |                     ||¦  «         Œ]|                     d¦  «         Œs|r|                     |¦  «         Œ‹|                     |¦  «         Œ¡d S )Nr   r   )rï   )r‚  r?   rF  r|  rP   rj  rZ  )	r   rY   rC   r=  rt   r1  r2  r,   rî   s	            r   ÚwriteValueRecordz#ValueRecordFactory.writeValueRecorda  sÓ   € Ø&*¤kð 	*ð 	*Ñ"ˆD�(˜FÝ˜K¨¨qÑ1Ô1ˆEØð 
*Øð *Ø &× 3Ò 3Ñ 5Ô 5�IØ×(Ò(¨¸qÐ(ÑAÔAÐAØ—M’M )¨TÑ2Ô2Ð2Ð2à×&Ò& qÑ)Ô)Ð)Ð)Øð *Ø×!Ò! %Ñ(Ô(Ð(Ð(à×"Ò" 5Ñ)Ô)Ð)Ð)ð	*ð 	*r   N)r#   r$   r%   r{   r   r9  r?  rA  r&   r   r   r5  r5  >  sV   € € € € € Ø@Ð@ðð ð ð ð  ð  ðð ð ð,*ð *ð *ð *ð *r   r5  c                   ó<   — e Zd Zd	d„Zd„ Zd„ Zd
d„Zd„ Zd„ Zd„ Z	dS )r<  Nc                 ó.  — |�pt           D ]!\  }}}}||z  rt          | ||rd nd¦  «         Œ"|�A|j                             ¦   «         D ])\  }}t	          | |¦  «        sŒt          | ||¦  «         Œ(d S d S |� |j                             ¦   «         | _        d S d S ©Nr   )r.  r¬  r¥  rú   rq   rŽ   )	r   r7  Úsrcr0  rt   r1  r2  r  Úvals	            r   r   zValueRecord.__init__t  sÔ   € ØÐ"Ý0Að Að AÑ,��d˜H fØ Ñ%ð AÝ˜D $°Ð(?¨¨¸aÑ@Ô@Ð@øØˆØ #¤× 2Ò 2Ñ 4Ô 4ð ,ð ,‘H�C˜Ý" 4¨Ñ-Ô-ð !Ø Ý˜D # sÑ+Ô+Ð+Ð+ð	 ˆð,ð ,ð ˆ_ØœL×-Ò-Ñ/Ô/ˆDŒMˆMˆMð ˆ_r   c                 ón   — d}| j                              ¦   «         D ]}|t          |         d         z  }Œ|S rD  )r¥  ÚkeysÚvalueRecordFormatDict)r   r‚  rt   s      r   Ú	getFormatzValueRecord.getFormat�  s@   € ØˆØ”M×&Ò&Ñ(Ô(ð 	=ð 	=ˆDØÕ3°DÔ9¸!Ô<Ñ<ˆFˆFØˆr   c                 óx   — d}| j                              ¦   «         D ]\  }}|r|t          |         d         z  }Œ|S rD  )r¥  rú   rI  )r   r‚  rt   r,   s       r   ÚgetEffectiveFormatzValueRecord.getEffectiveFormat‡  sN   € ØˆØœ=×.Ò.Ñ0Ô0ð 	Að 	A‰KˆD�%Øð AØÕ"7¸Ô"=¸aÔ"@Ñ@�øØˆr   c                 ó°  — |€g }nt          |¦  «        }t          d d…         D ]<\  }}}}	t          | |¦  «        r%|                     |t	          | |¦  «        f¦  «         Œ=g }
t          dd…         D ]@\  }}}}	t          | |¦  «        r)t	          | |¦  «        }|�|
                     ||f¦  «         ŒA|
rw|                     ||¦  «         |                     ¦   «          |
D ]\  }}|�|                     |||¬¦  «         Œ |                     |¦  «         |                     ¦   «          d S | 	                    ||¦  «         |                     ¦   «          d S )Nr   r  )rt   )
r  r.  rq   r,  r?   rä  rå  ro   ræ  Ú	simpletag)r   rç  rC   Ú	valueNameru   ÚsimpleItemsr0  rt   r1  r‚  ÚdeviceItemsÚdeviceÚdeviceRecords                r   ro   zValueRecord.toXMLŽ  s›  € Øˆ=ØˆKˆKå˜u™+œ+ˆKÝ,=¸b¸q¸bÔ,Að 	@ð 	@Ñ(ˆD�$˜ &Ý�t˜TÑ"Ô"ð @Ø×"Ò" D­'°$¸Ñ*=Ô*=Ð#>Ñ?Ô?Ð?øØˆÝ,=¸aÀ¸cÔ,Bð 	7ð 	7Ñ(ˆD�$˜ &Ý�t˜TÑ"Ô"ð 7Ý   tÑ,Ô,�ØÐ%Ø×&Ò&¨¨f ~Ñ6Ô6Ð6øØð 
	 Ø×Ò˜y¨+Ñ6Ô6Ð6Ø×ÒÑÔÐØ&1ð Cð CÑ"��lØÐ+Ø ×&Ò& y°$¸TÐ&ÑBÔBÐBøØ×Ò˜YÑ'Ô'Ð'Ø×ÒÑÔÐÐÐà×Ò 	¨;Ñ7Ô7Ð7Ø×ÒÑÔÐÐÐr   c                 óˆ  — ddl m} |                     ¦   «         D ]#\  }}t          | |t	          |¦  «        ¦  «         Œ$|D ]€}t          |t          ¦  «        sŒ|\  }}} t          ||¦  «        ¦   «         }	|D ]6}
t          |
t          ¦  «        sŒ|
\  }}}|	                     ||||¦  «         Œ7t          | ||	¦  «         Œ�d S r;  )	r=   r:   rú   r¬  rÑ  r«  r"  r?   rr   )r   rt   ru   rv   rC   r:   Úkrš  Úelementr,   Úelem2Úname2Úattrs2Úcontent2s                 r   rr   zValueRecord.fromXML¨  sû   € ØÐÐÐÐÐà—K’K‘M”Mð 	%ð 	%‰DˆAˆqÝ�D˜!�S ™VœVÑ$Ô$Ð$Ð$Øð 
	'ð 
	'ˆGÝ˜g¥uÑ-Ô-ð ØØ#*Ñ ˆD�%˜Ø+•G˜H dÑ+Ô+Ñ-Ô-ˆEØ ð =ð =�Ý! %­Ñ/Ô/ð ØØ*/Ñ'��v˜xØ—’˜e V¨X°tÑ<Ô<Ð<Ð<Ý�D˜$ Ñ&Ô&Ð&Ð&ð
	'ð 
	'r   c                 óH   — |                       |¦  «        }|t          u r|n| S r*   r  r  s      r   r  zValueRecord.__ne__¹  r  r   c                 óp   — t          | ¦  «        t          |¦  «        k    rt          S | j        |j        k    S r*   )rc   rò   r¥  rŒ   s     r   ró   zValueRecord.__eq__½  s.   € Ý�‰:Œ:�˜e™œÒ$Ð$Ý!Ð!ØŒ} ¤Ò.Ð.r   r�  r*   )
r#   r$   r%   r   rJ  rL  ro   rr   r  ró   r&   r   r   r<  r<  q  sŠ   € € € € € ð0ð 0ð 0ð 0ðð ð ðð ð ð ð  ð  ð  ð4'ð 'ð 'ð"Bð Bð Bð/ð /ð /ð /ð /r   r<  r*   );ÚfontTools.configr   ÚfontTools.misc.lazyToolsr   ÚfontTools.misc.textToolsr   r   r   Úenumr	   rŸ   rž   r•   ÚloggingÚ	functoolsr
   Útypingr   r   r   r   Ú	getLoggerr#   rK   rM   Ú	uharfbuzzra   rN   rJ   Úobjectr   rÔ  r(   r2   r7   rÚ   rI  Úitemsizer>   rì   rO   r~  r™  r	  r  r  r¢  rþ  r  r  r  rÑ  r    rû  r.  r3  rI  r5  r<  r&   r   r   ú<module>rh     s¸  ðØ $Ð $Ð $Ð $Ð $Ð $Ø -Ð -Ð -Ð -Ð -Ð -Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð Ð Ð Ø 
€
€
€
Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8à€gÔ˜Ñ!Ô!€à€ð	ØÐÐÐà€N€NøØð 	ð 	ð 	Ø€Dð	øøøð   8Ð CÐ CÐ CÔDÐ ð
ð 
ð 
ð 
ð 
˜&ñ 
ô 
ð 
ð0 ð  ð  ð  ð  ˜Yñ  ô  ð  ðð ð ð ð �Gñ ô ð ð*l5ð l5ð l5ð l5ð l5�|ñ l5ô l5ð l5ð` €sˆ;ˆ6Œ;�s˜AÑÔÑÔ 1Ò$Ð$Ð$Ð$Ø€u„{�3ÑÔÔ  AÒ%Ð%Ð%Ð'LÑ%Ô%Ð%ðz;ð z;ð z;ð z;ð z;�Fñ z;ô z;ð z;ðz7ð 7ð 7ð 7ð 7�Vñ 7ô 7ð 7ðu
ð u
ð u
ð u
ð u
�Fñ u
ô u
ð u
ðpIð Ið Ið Ið I�Vñ Iô Ið Ið8$ð $ð $ð$ð $ð $ð$ð $ð $ð
(ð (ð (ð
J0ð J0ð J0ð J0ð J0�ñ J0ô J0ð J0ðZ
!=ð !=ð !=ð !=ð !=˜yñ !=ô !=ð !=ðH'ð 'ð 'ð 'ð 'Ð$<ñ 'ô 'ð 'ð 'Ø*ðð Ð ðDð Dð Dð €�„ð=ð =˜)ð =¨(°3¬-ð =À5ÈÄ:ð =ð =ð =ñ „ð=ðBð ð Ð ð,ð ð ð #˜
™œÐ ð0*ð 0*ð 0*ð 0*ð 0*˜ñ 0*ô 0*ð 0*ðfO/ð O/ð O/ð O/ð O/�&ñ O/ô O/ð O/ð O/ð O/s   ÁA ÁA%Á$A%