§
    èƒñ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     ú\/data/share/cad/hardware/.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 r�|€t          | j        dd¦  «        dk    rd}|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ÚGPOSÚVersionr   i  Fz>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<   r?   r@   ÚlogÚdebugÚhave_uharfbuzzÚImportErrorr2   r4   r3   ÚOTTableWriterÚcompileÚtryPackingHarfbuzzÚtryPackingFontToolsr5   r(   ÚtryResolveOverflowr,   )
r   rC   ÚoverflowRecordÚuse_hb_repackÚstateÚhb_first_error_loggedÚlastOverflowRecordÚwriterÚeÚoks
             r   rQ   zBaseTTXConverter.compile^   sn  € ð. ˆð œÕ!6Ô7ˆØŒ=Ð,Ð,Ð,àÐ%Ý˜DœJ¨	°1Ñ5Ô5¸ÒCÐCà %�Ø Ð%Ð%Ý—	’	Ø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,   ÃAF Ä($F ÅAF Æ
H
Æ#"HÇ
6HÈH
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)rL   rM   r<   ÚgetAllDataUsingHarfbuzzÚ
ValueErrorÚMemoryErrorÚhbÚRepackerErrorÚtyper#   r    ÚwarningÚ
getAllData)r   rZ   rX   r[   Ú	error_msgs        r   rR   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*   )rf   ©r   rZ   s     r   rS   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,   rL   Úinfor   r:   rk   rl   )r   rC   r[   rY   r\   rU   rk   rl   s           r   rT   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   rZ   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   rs   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   ry   s     r   rz   z!BaseTTXConverter.ensureDecompiledÿ   s!   € ØŒ
×#Ò#¨GÐ#Ñ4Ô4Ð4Ð4Ð4r   N©T)r#   r$   r%   Ú__doc__rA   rQ   rR   rS   rT   rp   rs   rz   r&   r   r   r7   r7   O   sŸ   € € € € € ðð ð
+ð +ð +ð^ð ^ð ^ð@=ð =ð =ð,#ð #ð #ð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.readInt83  ó   € Ø�~Š~˜c¨aˆ~Ñ0Ô0Ð0r   c                 ó2   — |                       dd|¬¦  «        S )Nr¦   r   ©r™   r‡   ©r¤   r†   s     r   ÚreadInt8ArrayzOTTableReader.readInt8Array6  ó   € Ø�~Š~˜c¨a°uˆ~Ñ=Ô=Ð=r   c                 ó0   — |                       dd¬¦  «        S )NÚhr   r§   r¨   r!   s    r   Ú	readShortzOTTableReader.readShort9  rª   r   c                 ó2   — |                       dd|¬¦  «        S )Nr±   r   r¬   r­   r†   s     r   ÚreadShortArrayzOTTableReader.readShortArray<  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.readLongArrayB  r¯   r   c                 ó0   — |                       dd¬¦  «        S )NÚBr   r§   r¨   r!   s    r   Ú	readUInt8zOTTableReader.readUInt8E  rª   r   c                 ó2   — |                       dd|¬¦  «        S )Nrº   r   r¬   r­   r†   s     r   ÚreadUInt8ArrayzOTTableReader.readUInt8ArrayH  r¯   r   c                 ó0   — |                       dd¬¦  «        S )NÚHr   r§   r¨   r!   s    r   Ú
readUShortzOTTableReader.readUShortK  rª   r   c                 ó2   — |                       dd|¬¦  «        S )Nr¿   r   r¬   r­   r†   s     r   ÚreadUShortArrayzOTTableReader.readUShortArrayN  r¯   r   c                 ó0   — |                       dd¬¦  «        S )NÚIr   r§   r¨   r!   s    r   Ú	readULongzOTTableReader.readULongQ  rª   r   c                 ó2   — |                       dd|¬¦  «        S )NrÄ   r   r¬   r­   r†   s     r   ÚreadULongArrayzOTTableReader.readULongArrayT  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.readUInt24W  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.readInt24^  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>h  s#   ø€ Ð8Ð8Ð8 a�—’Ñ!Ô!Ð8Ð8Ð8r   )Úranger†   s   ` r   ÚreadUInt24ArrayzOTTableReader.readUInt24Arrayg  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.readTagj  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.readDatar  s.   € ØŒhˆØ�u‘ˆØ”	˜#˜f˜*Ô%ˆØˆŒØˆr   c                 óz   — | j         r| j                              ¦   «         nt          ¦   «         }|||<   || _         d S r*   ©r‚   r�   Údict©r   ru   r,   rW   s       r   Ú__setitem__zOTTableReader.__setitem__y  ó9   € Ø*.¬/ÐE�”×$Ò$Ñ&Ô&Ð&½t¹v¼vˆØˆˆd‰ØˆŒˆˆr   c                 ó*   — | j         o| j         |         S r*   ©r‚   ©r   ru   s     r   Ú__getitem__zOTTableReader.__getitem__~  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*   )rd   Ú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 )0rP   z=Helper class to gather and assemble data for OpenType tables.Nc                 óZ   — g | _         d | _        || _        || _        d | _        d| _        d S )Nú<none>)Úitemsr�   r‚   r<   Úparentru   )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û   rr   Ú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×   rr   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	  Ú	enumeraterr   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*   )rd   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)rr   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ï   ru   ÚCoverager   )ÚidrÛ   rû   r  r×   Úreverserr   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(  ru   r)  Trï   r  r   )r-  rr   r  rû   r?   r*  Ú_gatherGraphForHarfbuzzr  rÛ   rï   rð   Úpop)r   r.  Úobj_listr0  ÚobjidxÚvirtual_edgesÚ
real_linksÚvirtual_linksÚitem_idxÚidxr(  Úcoverage_idxr}   r  Ú	child_idxÚ
offset_posr�   Ú	real_edges                     r   r4  z%OTTableWriter._gatherGraphForHarfbuzzV  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!  r4  r�   r  r  r-  rb   Úserialize_with_tagr    )r   r<   r$  r.  r6  r0  r7  r8  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/  r0  r�   r@   rB   rC  s
             r   rf   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>brI  ©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¦   ©rP  ©r   rN  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>hrI  rR  s     r   Ú
writeShortzOTTableWriter.writeShortê  sW   € Ø˜Ð&Ð&Ò&Ð& Ò&Ð&Ð&Ð&Ð&¨Ñ&Ô&Ð&ØŒ
×Ò�&œ+ d¨EÑ2Ô2Ñ3Ô3Ð3Ð3Ð3r   c                 ó2   — |                       d|¦  «         d S )Nr±   rU  rV  s     r   ÚwriteShortArrayzOTTableWriter.writeShortArrayî  rX  r   c                 ó`   — | j                              t          j        d|¦  «        ¦  «         d S )Nz>irI  rR  s     r   Ú	writeLongzOTTableWriter.writeLongñ  ó*   € ØŒ
×Ò�&œ+ d¨EÑ2Ô2Ñ3Ô3Ð3Ð3Ð3r   c                 ó2   — |                       d|¦  «         d S )Nr}   rU  rV  s     r   ÚwriteLongArrayzOTTableWriter.writeLongArrayô  rX  r   c                 ó’   — d|cxk    rdk     sn J |¦   «         ‚| j                              t          j        d|¦  «        ¦  «         d S )Nr   é   ú>BrI  rR  s     r   Ú
writeUInt8zOTTableWriter.writeUInt8÷  sW   € Ø�EÐÐÒÐ˜CÒÐÐÐÐ ÑÔÐØŒ
×Ò�&œ+ d¨EÑ2Ô2Ñ3Ô3Ð3Ð3Ð3r   c                 ó2   — |                       d|¦  «         d S )Nrº   rU  rV  s     r   ÚwriteUInt8ArrayzOTTableWriter.writeUInt8Arrayû  rX  r   c                 ó’   — d|cxk    rdk     sn J |¦   «         ‚| j                              t          j        d|¦  «        ¦  «         d S )Nr   i   ú>HrI  rR  s     r   ÚwriteUShortzOTTableWriter.writeUShortþ  sW   € Ø�EÐ#Ð#Ò#Ð#˜GÒ#Ð#Ð#Ð#Ð# UÑ#Ô#Ð#ØŒ
×Ò�&œ+ d¨EÑ2Ô2Ñ3Ô3Ð3Ð3Ð3r   c                 ó2   — |                       d|¦  «         d S )Nr¿   rU  rV  s     r   ÚwriteUShortArrayzOTTableWriter.writeUShortArray  rX  r   c                 ó`   — | j                              t          j        d|¦  «        ¦  «         d S )Nú>IrI  rR  s     r   Ú
writeULongzOTTableWriter.writeULong  r`  r   c                 ó2   — |                       d|¦  «         d S )NrÄ   rU  rV  s     r   ÚwriteULongArrayzOTTableWriter.writeULongArray  rX  r   c                 ó¦   — d|cxk    rdk     sn J |¦   «         ‚t          j        d|¦  «        }| j                             |dd …         ¦  «         d S )Nr   é   z>Lr   ©r–   rJ  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*   )rv  )r   rN  r,   s      r   ÚwriteUInt24ArrayzOTTableWriter.writeUInt24Array  s2   € Øð 	$ð 	$ˆEØ×Ò˜UÑ#Ô#Ð#Ð#ð	$ð 	$r   c                 ó¶   — t          |¦  «                             ¦   «         }t          |¦  «        dk    s
J |¦   «         ‚| j                             |¦  «         d S rÚ   )r   rM  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@   ru   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*   ru  )r   ÚformatrN  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v 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ÚLookupList2ÚLookupru   rú   ÚrepeatIndexÚSubTableÚExtSubTableú.)r�  rŒ  )ru   r‹  r?   rr   rü   Újoinr   r<   )r   r  r   r   r   r   Úp1s          r   r  z$OTTableWriter.getOverflowErrorRecord(  sŒ  € ØAEÐEˆÐE˜-ÐE¨(°YØŒ9Ð5Ð5Ð5Ø"Ô.ˆ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©Fr{   )r   N)*r#   r$   r%   r|   r   rã   rè   r   r  r  r  r÷   r  rô   r!  r,  r4  r_   rf   rG  rK  rP  rS  rW  r[  r]  r_  rb  rf  rh  rk  rm  rp  rr  rv  rx  r{  r}  r�  r„  r†  r  r&   r   r   rP   rP   ”  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   rP   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@   ru   r  ÚsetValue)r   r@   ru   r  r,   s        r   r   zCountReference.__init__O  s=   € ØˆŒ
ØˆŒ	ØˆŒ	ØÐØ�MŠM˜%Ñ Ô Ð Ð Ð ð Ðr   c                 ó~   — | j         }| j        }||         €|||<   d S ||         |k    sJ |||         |f¦   «         ‚d S r*   ©r@   ru   )r   r,   r@   ru   s       r   r•  zCountReference.setValueV  sU   € Ø”
ˆØŒyˆØ�Œ;ÐØˆE�$‰KˆKˆKà˜”; %Ò'Ð'Ð'¨$°°d´¸UÐ)CÑ'Ô'Ð'Ð'Ð'r   c                 ó&   — | j         | j                 S r*   r—  r!   s    r   ÚgetValuezCountReference.getValue^  s   € ØŒz˜$œ)Ô$Ð$r   c                 óŠ   — | j         | j                 }|€d}t          t          t          t
          dœ| j                 |¦  «        S )Nr   )r   r   r   r   )r@   ru   Ú	packUInt8r
  r  r	  r  )r   Úvs     r   r  zCountReference.getCountDataa  s<   € ØŒJ�t”yÔ!ˆØˆ9ØˆAÝ¥µ
½yÐIÐIÈ$Ì)ÔTÐUVÑWÔWÐWr   r‘  )r#   r$   r%   r|   r   r•  r™  r  r&   r   r   r  r  L  sc   € € € € € ØBÐBð!ð !ð !ð !ðDð Dð Dð%ð %ð %ðXð Xð Xð Xð Xr   r  c                 ó,   — t          j        d| ¦  «        S )Nre  ©r–   rJ  r+   s    r   r›  r›  h  ó   € ÝŒ;�t˜UÑ#Ô#Ð#r   c                 ó,   — t          j        d| ¦  «        S )Nrj  rž  r+   s    r   r
  r
  l  rŸ  r   c                 ó^   — d| cxk    rdk     sn J | ¦   «         ‚t          j        d| ¦  «        S )Nr   l        ro  rž  r+   s    r   r	  r	  p  sA   € Ø�Ð#Ð#Ò#Ð#˜Ò#Ð#Ð#Ð#Ð# UÑ#Ô#Ð#ÝŒ;�t˜UÑ#Ô#Ð#r   c                 ón   — d| cxk    rdk     sn J | ¦   «         ‚t          j        d| ¦  «        dd …         S )Nr   rt  ro  r   rž  r+   s    r   r  r  u  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__}  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,   rz   )r   ry   rD   rC   ru   r,   Úsubtables          r   rz   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   rW   s     r   Ú__getstate__zBaseTable.__getstate__—  sM   € ð �t”}Ð$Ð$Ø”M×&Ò&Ñ(Ô(ˆEØ"œm¨HÔ5×:Ò:Ñ<Ô<ˆE�(‰OØˆLØŒ}Ðr   c                 ó
  — d}| j         D ]x}|                     |¦  «        sŒ|                     |¦  «        }|t          u r	t          c S d}|j        r(|j        |v r||j                 |j        z   }n	t          c S |||z  z  }Œy|S )Nr   r   )Ú
convertersÚ	isEnabledÚ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 �]s}|                     | j        ¦  «        sŒ|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        ¦  «         �Œud S )NÚwriteNullOffsetÚDEFAULT)r¾  rµ  r§  r·  rr   ru   r®  rÛ   r?   r¸  rÁ  ÚKeyErrorr•  ÚevalrÄ  )r   Ú
propagatorr»  r¼  Ú
count_convs        r   rt   zBaseTable.populateDefaults¸  s¤  € Ø×&Ò&Ñ(Ô(ð 	;ñ 	;ˆDØ—>’> $¤-Ñ0Ô0ð ØØŒ{ð ;Ý˜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¬\Ñ:Ô:Ð:ùð5	;ð 	;s   Â0CÃ5C9Ã8C9c                 ót  — |                       |¦  «         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         ¦  «        }	 |                     |¦  «        sŒÄ|j        rqt          |j        t          ¦  «        r|j        }n$|j        |v r||j                 }n||j                 }||j
        z  }|                     ||||¦  «        ||j        <   nZ|j
        rt          |j
        d |¦  «        s�Œ[|                     |||¦  «        ||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¾  ru   ÚgetConverterr<   rµ  r·  r­  Úintr¸  r¤   rÆ  ÚreadÚisPropagatedÚ	ExceptionÚargsrr   rÐ  r§  Úupdate)r   rD   rC   r@   r»  r¼  r[   ru   s           r   rA   zBaseTable.decompileÕ  sU  € Ø�Š˜ÑÔÐØˆØˆŒØ×&Ò&Ñ(Ô(ð 	ñ 	ˆDØŒy˜JÒ&Ð&Ø×(Ò(¨¬¸%ÀÔ:MÑNÔN�ØŒy˜MÒ)Ð)Ø×(Ò(¨¬¸%Ð@UÔ:VÑWÔW�ØŒy˜OÒ+Ð+Ø×(Ò(¨°Ô)=Ñ>Ô>�ØŒy˜KÒ'Ð'Ø×(Ò(¨¬¸%ÀÔ:LÑMÔM�ðØ—~’~ eÑ,Ô,ð ØØ”;ð =Ý! $¤+­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%   Ã!GÃ7BGÆ;GÇ
G2ÇG-Ç-G2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 �]š}|                     |¦  «        sŒ|                     |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                                      |¦  «         	 |                     ||||¦  «         �Œ# t0          $ 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tA          |j        d |¦  «        s�Œ7	 | !                    ||||¦  «         n8# t0          $ 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[])$rz   rr   rÛ  r§  r�   r¾  ÚisCountrÖ  r¨  ru   r­  r  r(  r  rŒ   r•  rÊ  ÚwriteFormatrµ  r·  rÛ   r¸  rÔ  rP  r×  rØ  r™   r  r†  r™  r�  ÚisLookupTyperÆ  Úwriter#   rÜ  )r   rZ   rC   ÚdeleteFormatr@   r»  r,   r¼  r[   r€  ru   s              r   rQ   zBaseTable.compile  ss  € Ø×ÒÑÔÐõ �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à×Ò˜Ñ Ô Ð Ø×&Ò&Ñ(Ô(ð A	.ñ A	.ˆ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-É-
JÉ7JÊJÎ N9Î9
O.Ï&O)Ï)O.c                 ó   — d S r*   r&   ©r   rD   s     r   rÑ  zBaseTable.readFormath  ó   € Øˆr   c                 ó   — d S r*   r&   ri   s     r   rÞ  zBaseTable.writeFormatk  rä  r   c                 ó:  — |r|n| j         j        }|€g }t          | d¦  «        r|d| j        fgz   }|                     ||¦  «         |                     ¦   «          |                      ||¦  «         |                     |¦  «         |                     ¦   «          d S )NrÜ  )rŒ   r#   rr   rÜ  ÚbegintagÚnewlinero   Úendtag)r   Ú	xmlWriterrC   rv   ru   Ú	tableNames         r   rp   zBaseTable.toXMLn  s­   € Ø Ð=�D�D d¤nÔ&=ˆ	Øˆ=ØˆEÝ�4˜Ñ"Ô"ð 	6Ø˜h¨¬Ð4Ð5Ñ5ˆEØ×Ò˜9 eÑ,Ô,Ð,Ø×ÒÑÔÐØ�Š�I˜tÑ$Ô$Ð$Ø×Ò˜Ñ#Ô#Ð#Ø×ÒÑÔÐÐÐr   c           
      óà  — |                       ¦   «         D ]Ø}|                     t          | ¦  «        ¦  «        sŒ%|j        rMt	          | |j        g ¦  «        }t          |¦  «        D ]&\  }}|                     ||||j        d|fg¦  «         Œ'Œy|j        r$t          |j        d t          | ¦  «        ¦  «        sŒ¤t	          | |j        d ¦  «        }|                     ||||j        g ¦  «         ŒÙd S )NÚindex)
r¾  rµ  Úvarsr·  r?   ru   r  ÚxmlWriter¸  rÆ  )r   rê  rC   r»  r,   r}   r  s          r   ro   zBaseTable.toXML2z  s  € ð ×&Ò&Ñ(Ô(ð 	Eð 	EˆDØ—>’>¥$ t¡*¤*Ñ-Ô-ð ØØŒ{ð 
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?   ru   r®  r-  )r   ru   rv   rw   rC   r»  r,   Úseqs           r   rs   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*   )rd   ró   rz   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()ru   r¤  r,   Nrí  )	r#   r$   r%   r|   r    Ú__annotations__rí  r   rÔ  r&   r   r   ÚSubTableEntryrö  ¬  sA   € € € € € € Ø+Ð+àˆ	ˆ	‰	ØÐÐÑØ#ˆˆx˜Œ}Ð#Ð#Ñ#Ð#Ð#r   rø  Úreturnc              #   ó‚  ‡ ‡K  — ‰                       ¦   «         D ]¥}|                     t          ‰ ¦  «        ¦  «        sŒ%|j        Št	          ‰ ‰d¦  «        }|€Œ@t          |t          ¦  «        r‰                      ‰|¦  «        V — Œnt          |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œ  ru   r   s      €€r   ú	<genexpr>z*BaseTable.iterSubTables.<locals>.<genexpr>È  s`   øè è € ð ð á˜˜1Ý! !¥YÑ/Ô/ðØ×&Ò& t¨Q°aÐ&Ñ8Ô8ðð ð ð ð ð r   )
r¾  rµ  rî  ru   r?   r­  r¤  rø  r  r  )r   r»  r,   ru   s   `  @r   r¯  zBaseTable.iterSubTables³  s  øøè è € ð ×&Ò&Ñ(Ô(ð 	ð 	ˆDØ—>’>¥$ t¡*¤*Ñ-Ô-ð ØØ”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«  rz   r²  Úclassmethodr¶  r¾  rÁ  rt   rA   rQ   rÑ  rÞ  rp   ro   rs   r  rô   r   rø  r   r¯  rþ  r&   r   r   r¤  r¤  z  s‰  € € € € € Ø:Ð:ð	#ð 	#ð 	#ð9ð 9ð 9ð 9ðð ð ð ðð ñ „[ðð"ð ð ð+ð +ð +ð;ð ;ð ;ð ;ð:*ð *ð *ðXeð eð eðNð ð ðð ð ð
ð 
ð 
ð 
ðEð Eð Eð&,ð ,ð ,ð$Bð Bð Bð/ð /ð /ð$ð $ð $ð $ð $˜
ñ $ô $ð $ð˜x¨Ô6ð ð ð ð ð8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*   )rk  rÜ  ri   s     r   rÞ  z$FormatSwitchingBaseTable.writeFormatí  s   € Ø×Ò˜4œ;Ñ'Ô'Ð'Ð'Ð'r   Nc                 óB   — t                                | ||||¦  «         d S r*   )r¤  rp   )r   rê  rC   rv   ru   s        r   rp   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Þ  rp   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*   )rf  rÜ  ri   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´  ÚvarAttrsru   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   )rd  Ú	Reserved1r   r   )i   Ú	Reserved2r   r   )i   Ú	Reserved3r   r   )i   Ú	Reserved4r   r   )i   Ú	Reserved5r   r   )i    Ú	Reserved6r   r   )i @  Ú	Reserved7r   r   )rZ  Ú	Reserved8r   r   c                  ó8   — i } t           D ]\  }}}}|||f| |<   Œ| S r*   )ÚvalueRecordFormat)ÚdÚmaskru   ÚisDeviceÚsigneds        r   Ú
_buildDictr6  E  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*   )r1  r-  rƒ  )r   ÚvalueFormatrƒ  r3  ru   r4  r5  s          r   r   zValueRecordFactory.__init__R  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__Y  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ƒ  ÚvalueRecordru   r4  r5  r,   r:   Ú	subReaders              r   ÚreadValueRecordz"ValueRecordFactory.readValueRecord\  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?   rG  r}  rQ   rk  r[  )	r   rZ   rC   r@  ru   r4  r5  r,   rï   s	            r   ÚwriteValueRecordz#ValueRecordFactory.writeValueRecordr  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   r<  rB  rD  r&   r   r   r8  r8  O  sV   € € € € € Ø@Ð@ðð ð ð ð  ð  ðð ð ð,*ð *ð *ð *ð *r   r8  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   )r1  r®  r§  rû   rr   r�   )	r   r:  Úsrcr3  ru   r4  r5  r  Úvals	            r   r   zValueRecord.__init__…  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 rG  )r§  ÚkeysÚvalueRecordFormatDict)r   rƒ  ru   s      r   Ú	getFormatzValueRecord.getFormat’  s@   € ØˆØ”M×&Ò&Ñ(Ô(ð 	=ð 	=ˆDØÕ3°DÔ9¸!Ô<Ñ<ˆFˆFØˆr   c                 óx   — d}| j                              ¦   «         D ]\  }}|r|t          |         d         z  }Œ|S rG  )r§  rû   rL  )r   rƒ  ru   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  )ru   )
r  r1  rr   r-  r?   rç  rè  rp   ré  Ú	simpletag)r   rê  rC   Ú	valueNamerv   ÚsimpleItemsr3  ru   r4  rƒ  ÚdeviceItemsÚdeviceÚdeviceRecords                r   rp   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?   rs   )r   ru   rv   rw   rC   r:   Úkrœ  Úelementr,   Úelem2Úname2Úattrs2Úcontent2s                 r   rs   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*   )rd   ró   r§  r�   s     r   rô   zValueRecord.__eq__Î  s.   € Ý�‰:Œ:�˜e™œÒ$Ð$Ý!Ð!ØŒ} ¤Ò.Ð.r   r‘  r*   )
r#   r$   r%   r   rM  rO  rp   rs   r  rô   r&   r   r   r?  r?  ‚  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#   rL   rN   Ú	uharfbuzzrb   rO   rK   Úobjectr   r×  r(   r2   r7   rÛ   rJ  Úitemsizer>   rí   rP   r  r›  r
  r	  r  r¤  r  r  r  r  rÔ  r    rþ  r1  r6  rL  r8  r?  r&   r   r   ú<module>rk     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ñ ô ð ð*q5ð q5ð q5ð q5ð q5�|ñ q5ô q5ð q5ðj €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Xð Xð Xð Xð X�Vñ Xô Xð Xð8$ð $ð $ð$ð $ð $ð$ð $ð $ð
(ð (ð (ð
V0ð V0ð V0ð V0ð V0�ñ V0ô V0ð V0ðr
!=ð !=ð !=ð !=ð !=˜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%