§
    ¢”jõÏ  ã            	       óh  — 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-¦  «        Z.e-e.d)œZ/d*„ Z0 e¦   «         d5d+e,d,ee1         d-ee2         fd.„¦   «         Z3g d/¢Z4d0„ Z5 e5¦   «         Z6 G d1„ d2e¦  «        Z7 G d3„ d4e¦  «        Z8dS )6é    )ÚOPTIONS)Ú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     úl/var/www/finuniver-perm.ru/html/portfolio/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__2   s   € Ø(ˆŒ
ˆ
ˆ
r   c                 ó*   — t          | j        ¦  «        S r)   )Úreprr+   r    s    r   Ú__str__zOTLOffsetOverflowError.__str__5   s   € Ý�D”JÑÔÐr   N)r"   r#   r$   r   r/   r%   r   r   r'   r'   1   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   r1   r1   9   s#   € € € € € ð €Gð €Eð €K€K€Kr   r1   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)Ú r9   ÚOTTableReaderr;   ÚgetattrÚtableÚ	decompile)r   ÚdataÚfontr9   ÚreaderÚ
tableClasss         r   r@   zBaseTTXConverter.decompileT   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ÚImportErrorr1   r3   r2   ÚOTTableWriterr?   ÚcompileÚtryPackingHarfbuzzÚtryPackingFontToolsr4   r'   ÚtryResolveOverflowr+   )
r   rB   ÚoverflowRecordÚuse_hb_repackÚstateÚhb_first_error_loggedÚlastOverflowRecordÚwriterÚeÚoks
             r   rO   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)rJ   rK   r;   ÚgetAllDataUsingHarfbuzzÚ
ValueErrorÚMemoryErrorÚhbÚRepackerErrorÚtyper"   r   ÚwarningÚ
getAllData)r   rX   rV   rY   Ú	error_msgs        r   rP   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)   )rd   ©r   rX   s     r   rQ   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+   rJ   Úinfor   r9   ri   rj   )r   rB   rY   rW   rZ   rS   ri   rj   s           r   rR   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   rX   rB   s      r   ÚtoXMLzBaseTTXConverter.toXMLí   s    € ØŒ
×Ò˜& $Ñ'Ô'Ð'Ð'Ð'r   c                 óæ   — ddl m} t          | d¦  «        s$t          || j        ¦  «        } |¦   «         | _        | j                             ||||¦  «         | j                             ¦   «          d S )Nr   r8   r?   )r<   r9   Úhasattrr>   r;   r?   ÚfromXMLÚpopulateDefaults)r   ÚnameÚattrsÚcontentrB   r9   rD   s          r   rq   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   rw   s     r   rx   z!BaseTTXConverter.ensureDecompiledù   s!   € ØŒ
×#Ò#¨GÐ#Ñ4Ô4Ð4Ð4Ð4r   N©T)r"   r#   r$   Ú__doc__r@   rO   rP   rQ   rR   rn   rq   rx   r%   r   r   r6   r6   N   sŸ   € € € € € ðð ð
+ð +ð +ðYð Yð Yðv=ð =ð =ð,#ð #ð #ð8ð 8ð 8ð8(ð (ð (ð&ð &ð &ð5ð 5ð 5ð 5ð 5ð 5r   r6   Ú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.©rA   ÚoffsetÚposÚ
localStater;   Nr   c                 óL   — || _         || _        || _        || _        || _        d S r)   r}   )r   rA   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__rA   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Š   rA   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ÚunpackrA   )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   ÚarrayrA   Ú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.readInt8Array0  ó   € Ø�~Š~˜c¨a°uˆ~Ñ=Ô=Ð=r   c                 ó0   — |                       dd¬¦  «        S )NÚhr   r¥   r¦   r    s    r   Ú	readShortzOTTableReader.readShort3  r¨   r   c                 ó2   — |                       dd|¬¦  «        S )Nr¯   r   rª   r«   r„   s     r   ÚreadShortArrayzOTTableReader.readShortArray6  r­   r   c                 ó0   — |                       dd¬¦  «        S )Nr{   r   r¥   r¦   r    s    r   ÚreadLongzOTTableReader.readLong9  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.readUInt8ArrayB  r­   r   c                 ó0   — |                       dd¬¦  «        S )NÚHr   r¥   r¦   r    s    r   Ú
readUShortzOTTableReader.readUShortE  r¨   r   c                 ó2   — |                       dd|¬¦  «        S )Nr½   r   rª   r«   r„   s     r   ÚreadUShortArrayzOTTableReader.readUShortArrayH  r­   r   c                 ó0   — |                       dd¬¦  «        S )NÚIr   r¥   r¦   r    s    r   Ú	readULongzOTTableReader.readULongK  r¨   r   c                 ó2   — |                       dd|¬¦  «        S )NrÂ   r   rª   r«   r„   s     r   ÚreadULongArrayzOTTableReader.readULongArrayN  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.readUInt24Q  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   rA   r”   r•   )r   r   r˜   r¤   Úpadr+   s         r   Ú	readInt24zOTTableReader.readInt24X  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>b  s#   ø€ Ð8Ð8Ð8 a�—’Ñ!Ô!Ð8Ð8Ð8r   )Úranger„   s   ` r   ÚreadUInt24ArrayzOTTableReader.readUInt24Arraya  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   rA   ÚlenrÉ   s       r   ÚreadTagzOTTableReader.readTagd  sO   € ØŒhˆØ�q‘ˆÝ�D”I˜c &˜jÔ)Ñ*Ô*ˆÝ�5‰zŒz˜QŠˆˆ ‰ŒˆØˆŒØˆr   c                 óJ   — | j         }||z   }| j        ||…         }|| _         |S r)   )r   rA   )r   r…   r   r˜   r+   s        r   ÚreadDatazOTTableReader.readDatal  s.   € ØŒhˆØ�u‘ˆØ”	˜#˜f˜*Ô%ˆØˆŒØˆr   c                 óz   — | j         r| j                              ¦   «         nt          ¦   «         }|||<   || _         d S r)   ©r€   r�   Údict©r   rs   r+   rU   s       r   Ú__setitem__zOTTableReader.__setitem__s  ó9   € Ø*.¬/ÐE�”×$Ò$Ñ&Ô&Ð&½t¹v¼vˆØˆˆd‰ØˆŒˆˆr   c                 ó*   — | j         o| j         |         S r)   ©r€   ©r   rs   s     r   Ú__getitem__zOTTableReader.__getitem__x  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$   rz   Ú	__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)   )rb   Ú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 )0rN   z=Helper class to gather and assemble data for OpenType tables.Nc                 óZ   — g | _         d | _        || _        || _        d | _        d| _        d S )Nú<none>)Úitemsr   r€   r;   Úparentrs   )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ù   rp   Ú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Õ   rp   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  Ú	enumeraterp   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)   )rb   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)rp   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í   rs   ÚCoverager   )ÚidrÙ   rù   r  rÕ   Úreverserp   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&  rs   r'  Trí   r   r   )r+  rp   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   r2  z%OTTableWriter._gatherGraphForHarfbuzzP  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  r2  r   r  r  r+  r`   Úserialize_with_tagr   )r   r;   r"  r,  r4  r.  r5  r6  r   r?   rA   Ú	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?   rA   rA  s
             r   rd   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>brG  ©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¤   ©rN  ©r   rL  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>hrG  rP  s     r   Ú
writeShortzOTTableWriter.writeShortä  sW   € Ø˜Ð&Ð&Ò&Ð& Ò&Ð&Ð&Ð&Ð&¨Ñ&Ô&Ð&ØŒ
×Ò�&œ+ d¨EÑ2Ô2Ñ3Ô3Ð3Ð3Ð3r   c                 ó2   — |                       d|¦  «         d S )Nr¯   rS  rT  s     r   ÚwriteShortArrayzOTTableWriter.writeShortArrayè  rV  r   c                 ó`   — | j                              t          j        d|¦  «        ¦  «         d S )Nz>irG  rP  s     r   Ú	writeLongzOTTableWriter.writeLongë  ó*   € ØŒ
×Ò�&œ+ d¨EÑ2Ô2Ñ3Ô3Ð3Ð3Ð3r   c                 ó2   — |                       d|¦  «         d S )Nr{   rS  rT  s     r   ÚwriteLongArrayzOTTableWriter.writeLongArrayî  rV  r   c                 ó’   — d|cxk    rdk     sn J |¦   «         ‚| j                              t          j        d|¦  «        ¦  «         d S )Nr   é   ú>BrG  rP  s     r   Ú
writeUInt8zOTTableWriter.writeUInt8ñ  sW   € Ø�EÐÐÒÐ˜CÒÐÐÐÐ ÑÔÐØŒ
×Ò�&œ+ d¨EÑ2Ô2Ñ3Ô3Ð3Ð3Ð3r   c                 ó2   — |                       d|¦  «         d S )Nr¸   rS  rT  s     r   ÚwriteUInt8ArrayzOTTableWriter.writeUInt8Arrayõ  rV  r   c                 ó’   — d|cxk    rdk     sn J |¦   «         ‚| j                              t          j        d|¦  «        ¦  «         d S )Nr   i   ú>HrG  rP  s     r   ÚwriteUShortzOTTableWriter.writeUShortø  sW   € Ø�EÐ#Ð#Ò#Ð#˜GÒ#Ð#Ð#Ð#Ð# UÑ#Ô#Ð#ØŒ
×Ò�&œ+ d¨EÑ2Ô2Ñ3Ô3Ð3Ð3Ð3r   c                 ó2   — |                       d|¦  «         d S )Nr½   rS  rT  s     r   ÚwriteUShortArrayzOTTableWriter.writeUShortArrayü  rV  r   c                 ó`   — | j                              t          j        d|¦  «        ¦  «         d S )Nú>IrG  rP  s     r   Ú
writeULongzOTTableWriter.writeULongÿ  r^  r   c                 ó2   — |                       d|¦  «         d S )NrÂ   rS  rT  s     r   ÚwriteULongArrayzOTTableWriter.writeULongArray  rV  r   c                 ó¦   — d|cxk    rdk     sn J |¦   «         ‚t          j        d|¦  «        }| j                             |dd …         ¦  «         d S )Nr   é   z>Lr   ©r”   rH  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)   )rt  )r   rL  r+   s      r   ÚwriteUInt24ArrayzOTTableWriter.writeUInt24Array
  s2   € Øð 	$ð 	$ˆEØ×Ò˜UÑ#Ô#Ð#Ð#ð	$ð 	$r   c                 ó¶   — t          |¦  «                             ¦   «         }t          |¦  «        dk    s
J |¦   «         ‚| j                             |¦  «         d S rØ   )r   rK  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?   rs   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)   rs  )r   ÚformatrL  rA   s       r   ÚwriteStructzOTTableWriter.writeStruct  s1   € ÝŒ{˜V˜I¨Ñ.Ð/ˆØŒ
×Ò˜$ÑÔÐÐÐr   c                 ó:   — | j                              |¦  «         d S r)   )rù   r+  )r   rA   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ÚLookuprs   rø   ÚrepeatIndexÚSubTableÚExtSubTableú.)rŠ  r‰  )rs   rˆ  r>   rp   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©Fry   )r   N)*r"   r#   r$   rz   r   rá   ræ   rþ   r  r  r  rõ   r  rò   r  r*  r2  r]   rd   rE  rI  rN  rQ  rU  rY  r[  r]  r`  rd  rf  ri  rk  rn  rp  rt  rv  ry  r{  r  r‚  r„  r
  r%   r   r   rN   rN   Ž  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   rN   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?   rs   r  ÚsetValue)r   r?   rs   r  r+   s        r   r   zCountReference.__init__I  s=   € ØˆŒ
ØˆŒ	ØˆŒ	ØÐØ�MŠM˜%Ñ Ô Ð Ð Ð ð Ðr   c                 ó~   — | j         }| j        }||         €|||<   d S ||         |k    sJ |||         |f¦   «         ‚d S r)   ©r?   rs   )r   r+   r?   rs   s       r   r’  zCountReference.setValueP  sU   € Ø”
ˆØŒyˆØ�Œ;ÐØˆE�$‰KˆKˆKà˜”; %Ò'Ð'Ð'¨$°°d´¸UÐ)CÑ'Ô'Ð'Ð'Ð'r   c                 ó&   — | j         | j                 S r)   r”  r    s    r   ÚgetValuezCountReference.getValueX  s   € ØŒz˜$œ)Ô$Ð$r   c                 ó~   — | j         | j                 }|€d}t          t          t          dœ| j                 |¦  «        S )Nr   )r   r   r   )r?   rs   Ú	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$   rz   r   r’  r–  r   r%   r   r   r}  r}  F  sc   € € € € € ØBÐBð!ð !ð !ð !ðDð Dð Dð%ð %ð %ðIð Ið Ið Ið Ir   r}  c                 ó,   — t          j        d| ¦  «        S )Nrc  ©r”   rH  r*   s    r   r˜  r˜  b  ó   € ÝŒ;�t˜UÑ#Ô#Ð#r   c                 ó,   — t          j        d| ¦  «        S )Nrh  r›  r*   s    r   r  r  f  rœ  r   c                 ó^   — d| cxk    rdk     sn J | ¦   «         ‚t          j        d| ¦  «        S )Nr   l        rm  r›  r*   s    r   r  r  j  sA   € Ø�Ð#Ð#Ò#Ð#˜Ò#Ð#Ð#Ð#Ð# UÑ#Ô#Ð#ÝŒ;�t˜UÑ#Ô#Ð#r   c                 ón   — d| cxk    rdk     sn J | ¦   «         ‚t          j        d| ¦  «        dd …         S )Nr   rr  rm  r   r›  r*   s    r   r  r  o  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          |¦  «        ‚©NrC   )Ú__dict__ÚgetrC   rB   r@   r>   ÚAttributeError)r   ÚattrrC   rB   s       r   Ú__getattr__zBaseTable.__getattr__w  sb   € Ø”×"Ò" 8Ñ,Ô,ˆØð 	'Ø�Ø”9ˆDØ�	Ø�NŠN˜6 4Ñ(Ô(Ð(Ý˜4 Ñ&Ô&Ð&å˜TÑ"Ô"Ð"r   Fc                 óê   — | j                              d¦  «        }|r!| `| j        }| `|                      ||¦  «         |r1|                      ¦   «         D ]}|j                             |¦  «         Œd S d S r£  )r¤  r¥  rC   rB   r@   ÚiterSubTablesr+   rx   )r   rw   rC   rB   Úsubtables        r   rx   zBaseTable.ensureDecompiled‚  s”   € Ø”×"Ò" 8Ñ,Ô,ˆØð 	)Ø�Ø”9ˆDØ�	Ø�NŠN˜6 4Ñ(Ô(Ð(Øð 	9Ø ×.Ò.Ñ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   rU   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)ÚclsrC   Ú	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±  rp   rs   ÚsetattrrÙ   r>   r²  r»  ÚKeyErrorr’  Úevalr¤  r¾  )r   Ú
propagatorrµ  r¶  Ú
count_convs        r   rr   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¸  rs   ÚgetConverterr;   r±  Ú
isinstanceÚintr²  r¢   rÁ  ÚreadÚisPropagatedÚ	ExceptionÚargsrp   rË  r¤  Úupdate)r   rC   rB   r?   rµ  r¶  rY   rs   s           r   r@   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[])#rx   rp   r×  r¤  r�   r¸  ÚisCountrÒ  r¥  rs   rÏ  r}  r&  r  rŠ   r’  rÅ  ÚwriteFormatr±  rÙ   r²  rÐ  rN  rÓ  rÔ  r—   r  r„  r–  r  ÚisLookupTyperÁ  Úwriter"   rØ  )r   rX   rB   ÚdeleteFormatr?   rµ  r+   r¶  rY   r~  rs   s              r   rO   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   rC   s     r   rÌ  zBaseTable.readFormatV  ó   € Øˆr   c                 ó   — d S r)   r%   rg   s     r   rÚ  zBaseTable.writeFormatY  rà  r   c                 ó:  — |r|n| j         j        }|€g }t          | d¦  «        r|d| j        fgz   }|                     ||¦  «         |                     ¦   «          |                      ||¦  «         |                     |¦  «         |                     ¦   «          d S )NrØ  )rŠ   r"   rp   rØ  ÚbegintagÚnewlinerm   Úendtag)r   Ú	xmlWriterrB   rt   rs   Ú	tableNames         r   rn   zBaseTable.toXML\  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>   rs   r  ÚxmlWriter²  rÁ  Úvars)r   ræ  rB   rµ  r+   r{   r  s          r   rm   zBaseTable.toXML2h  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>   rs   r¿  r+  )r   rs   rt   ru   rB   rµ  r+   Úseqs           r   rq   zBaseTable.fromXMLy  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)   )rb   rñ   rx   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()rs   r¡  r+   Nré  )	r"   r#   r$   rz   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™  rs   r   s      €€r   ú	<genexpr>z*BaseTable.iterSubTables.<locals>.<genexpr>²  s`   øè è € ð ð á˜˜1Ý! !¥YÑ/Ô/ðØ×&Ò& t¨Q°aÐ&Ñ8Ô8ðð ð ð ð ð r   )r¸  rs   r>   rÏ  r¡  rô  r  r  )r   rµ  r+   rs   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$   rz   r¨  rx   r­  Úclassmethodr°  r¸  r»  rr   r@   rO   rÌ  rÚ  rn   rm   rq   r  rò   r   rô  r
   rª  rú  r%   r   r   r¡  r¡  t  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³  rC   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)   )ri  rØ  rg   s     r   rÚ  z$FormatSwitchingBaseTable.writeFormat×  s   € Ø×Ò˜4œ;Ñ'Ô'Ð'Ð'Ð'r   Nc                 óB   — t                                | ||||¦  «         d S r)   )r¡  rn   )r   ræ  rB   rt   rs   s        r   rn   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$   rz   rû  r°  r¸  r»  rÌ  rÚ  rn   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)   )rd  rØ  rg   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¯  ÚvarAttrsrs   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   )rb  Ú	Reserved1r   r   )i   Ú	Reserved2r   r   )i   Ú	Reserved3r   r   )i   Ú	Reserved4r   r   )i   Ú	Reserved5r   r   )i    Ú	Reserved6r   r   )i @  Ú	Reserved7r   r   )rX  Ú	Reserved8r   r   c                  ó8   — i } t           D ]\  }}}}|||f| |<   Œ| S r)   )ÚvalueRecordFormat)ÚdÚmaskrs   ÚisDeviceÚsigneds        r   Ú
_buildDictr2  /  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�  r/  rs   r0  r1  s          r   r   zValueRecordFactory.__init__<  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__C  s   € Ý�4”;ÑÔÐr   c                 ób  — | j         }|sd S t          ¦   «         }|D ]’\  }}}|r|                     ¦   «         }n|                     ¦   «         }|rN|rJddlm}	 |                     |¦  «        }
 t          |	|¦  «        ¦   «         }|                     |
|¦  «         nd }t          |||¦  «         Œ“|S ©Nr   r8   )
r�  ÚValueRecordr°   r¾   r<   r9   r�   r>   r@   r¿  )r   rC   rB   r�  ÚvalueRecordrs   r0  r1  r+   r9   Ú	subReaders              r   ÚreadValueRecordz"ValueRecordFactory.readValueRecordF  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>   rE  r{  rO   ri  rY  )	r   rX   rB   r<  rs   r0  r1  r+   rí   s	            r   ÚwriteValueRecordz#ValueRecordFactory.writeValueRecord\  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$   rz   r   r8  r>  r@  r%   r   r   r4  r4  9  sV   € € € € € Ø@Ð@ðð ð ð ð  ð  ðð ð ð,*ð *ð *ð *ð *r   r4  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ù   rp   r�   )	r   r6  Úsrcr/  rs   r0  r1  r  Úvals	            r   r   zValueRecord.__init__o  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 rC  )r¤  ÚkeysÚvalueRecordFormatDict)r   r�  rs   s      r   Ú	getFormatzValueRecord.getFormat|  s@   € ØˆØ”M×&Ò&Ñ(Ô(ð 	=ð 	=ˆDØÕ3°DÔ9¸!Ô<Ñ<ˆFˆFØˆr   c                 óx   — d}| j                              ¦   «         D ]\  }}|r|t          |         d         z  }Œ|S rC  )r¤  rù   rH  )r   r�  rs   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  )rs   )
r  r-  rp   r+  r>   rã  rä  rn   rå  Ú	simpletag)r   ræ  rB   Ú	valueNamert   ÚsimpleItemsr/  rs   r0  r�  ÚdeviceItemsÚdeviceÚdeviceRecords                r   rn   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<   r9   rù   r¿  rÐ  rÏ  r!  r>   rq   )r   rs   rt   ru   rB   r9   Úkr™  Úelementr+   Úelem2Úname2Úattrs2Úcontent2s                 r   rq   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)   )rb   rñ   r¤  r‹   s     r   rò   zValueRecord.__eq__¸  s.   € Ý�‰:Œ:�˜e™œÒ$Ð$Ý!Ð!ØŒ} ¤Ò.Ð.r   rŽ  r)   )
r"   r#   r$   r   rI  rK  rn   rq   r  rò   r%   r   r   r;  r;  l  sŠ   € € € € € ð0ð 0ð 0ð 0ðð ð ðð ð ð ð  ð  ð  ð4'ð 'ð 'ð"Bð Bð Bð/ð /ð /ð /ð /r   r;  r)   )9ÚfontTools.configr   ÚfontTools.misc.textToolsr   r   r   Úenumr   rž   r�   r”   ÚloggingÚ	functoolsr	   Útypingr
   r   r   r   Ú	getLoggerr"   rJ   rL   Ú	uharfbuzzr`   rM   rI   Úobjectr   rÓ  r'   r1   r6   rÙ   rH  Úitemsizer=   rë   rN   r}  r˜  r  r  r  r¡  rý  r  r  r  rÐ  r   rú  r-  r2  rH  r4  r;  r%   r   r   ú<module>rf     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$ð $ð $ð$ð $ð $ð$ð $ð $ð
(ð (ð (ð
F0ð F0ð F0ð F0ð F0�ñ F0ô F0ð F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