Ë
    ÚÍ:jõÏ  ã            	       óú  — 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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
jD                  dd «      «      dk(  sJ ‚ e	j                  d«      jF                  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«      Z8y# e$ r Y �Œ!w xY w)6é    )ÚOPTIONS)ÚTagÚ	bytesjoiné   )ÚDefaultTable)ÚIntEnumN)Ú	lru_cache)ÚIteratorÚ
NamedTupleÚOptionalÚTupleFTz:USE_HARFBUZZ_REPACKERc                   ó   — e Zd Zd„ Zd„ Zy)ÚOverflowErrorRecordc                 óh   — |d   | _         |d   | _        |d   | _        |d   | _        |d   | _        y )Nr   r   é   é   é   )Ú	tableTypeÚLookupListIndexÚSubTableIndexÚitemNameÚ	itemIndex)ÚselfÚoverflowTuples     úr/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/fontTools/ttLib/tables/otBase.pyÚ__init__zOverflowErrorRecord.__init__   s@   € Ø& qÑ)ˆŒØ,¨QÑ/ˆÔØ*¨1Ñ-ˆÔØ% aÑ(ˆŒØ& qÑ)ˆ�ó    c                 óŽ   — 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__!   sG   € Üà—‘ØØ×$Ñ$Ø Ø×"Ñ"ØØ—‘ØØ—‘ð
ó
ð 	
r   N)Ú__name__Ú
__module__Ú__qualname__r   r!   © r   r   r   r      s   „ ò*ó
r   r   c                   ó   — e Zd Zd„ Zd„ Zy)ÚOTLOffsetOverflowErrorc                 ó   — || _         y ©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‘JÓÐr   N)r"   r#   r$   r   r/   r%   r   r   r'   r'   1   s   „ ò)ó r   r'   c                   ó   — e Zd ZdZdZdZy)ÚRepackerStater   r   r   N)r"   r#   r$   ÚPURE_FTÚHB_FTÚFT_FALLBACKr%   r   r   r1   r1   9   s   „ ð €Gð €Eð �Kr   r1   c                   óB   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
dd	„Zy
)Ú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
                  j                  ||«       y)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   sB   € åä˜t¨d¯m©mÔ<ˆÜ˜X t§}¡}Ó5ˆ
Ù“\ˆŒ
Ø�
‰
×Ñ˜V TÕ*r   c                 óú  — d}|j                   t           }| j                  dv r^|du r!t        j	                  d| j                  «       n9t
        s3|du rt        d«      ‚|�J ‚t        j	                  d| j                  «       |dv r%t
        r| j                  dv rt        j                  }nt        j                  }d}d}	 	 t        | j                  ¬	«      }| j                  j                  ||«       |t        j                  k(  r| j                  ||«      S |t        j                  k(  r| j                  |«      S |t        j                  k(  r6| j                  |«       t        j	                  d
«       t        j                  }ŒÆ# t         $ rk}d}| j#                  |||«      }	|j$                  }|	rY d}~Œø|t        j                  u r&t        j	                  d«       t        j                  }n‚ Y d}~Œpd}~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]   sÙ  € ð. ˆð Ÿ™Ô!6Ñ7ˆØ�=‰=Ð,Ñ,Ø Ñ%Ü—	‘	ØTØ—M‘Mõõ $Ø  DÑ(Ü%Ð&CÓDÐDà(Ð0Ð0Ð0Ü—I‘IØYØŸ™ôð ˜\Ñ)ÝØ—‘Ð!1Ñ1ä!×'Ñ'‰Eä!×)Ñ)ˆEà %ÐØ!ÐØð!Ü&°·±Ô>�Ø—
‘
×"Ñ" 6¨4Ô0ØœM×/Ñ/Ò/Ø×2Ñ2°6Ð;PÓQÐQØœm×3Ñ3Ò3Ø×3Ñ3°FÓ;Ð;Øœm×7Ñ7Ò7ð ×,Ñ,¨VÔ4Ü—I‘Ið6ôô *×/Ñ/�Eð# øô& *ò Ø(,Ð%Ø×,Ñ,¨T°1Ð6HÓI�Ø%&§W¡WÐ"áÜàœM×/Ñ/Ñ/Ü—I‘Ið?ôô *×5Ñ5‘Eàô ûðús,   ÃAF Ä#F Ä<A	F Æ	G:Æ#G5Æ79G5Ç5G:c                 ó–  — 	 t         j                  d| j                  «       |j                  | j                  «      S # t        t
        t        j                  f$ rm}|sOt        |«      j                  › }t        |«      dk7  r|d|› �z  }t         j                  d| j                  |«       d}|j                  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Ø×1Ñ1°$·-±-Ó@Ð@øÜœK¬×)9Ñ)9Ð:ò 	=ñ
 )Ü# A›w×/Ñ/Ð0�	Ü�q“6˜R’<Ø 2 a S Ñ)�IÜ—‘ð2à—M‘MØô	ð )-Ð%Ø×$Ñ$°eÐ$Ó<Õ<ûð!	=ús   ‚:= ½CÁA"CÂ=CÃCc                 ó"   — |j                  «       S r)   )rd   ©r   rX   s     r   rQ   z$BaseTTXConverter.tryPackingFontToolsÎ   s   € Ø× Ñ Ó"Ð"r   c                 óè   — d}||j                   k(  r|S |j                   }t        j                  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Ñ   st   € ØˆØ §¡Ò(àˆIàŸ™ˆÜ�‰Ð>ÀÔBà×"Ñ"Ð*Ý4á# D¨.Ó9‰Bå6á% d¨NÓ;ˆBáØˆIõ
 	1á! $¨Ó7Ð7r   c                 ó<   — | j                   j                  ||«       y 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                  ||||«       | j
                  j                  «        y )Nr   r8   r?   )r<   r9   Úhasattrr>   r;   r?   ÚfromXMLÚpopulateDefaults)r   ÚnameÚattrsÚcontentrB   r9   rD   s          r   rq   zBaseTTXConverter.fromXMLð   sP   € Ýä�t˜WÔ%Ü  ¨4¯=©=Ó9ˆJÙ#›ˆDŒJØ�
‰
×Ñ˜4 ¨°Ô6Ø�
‰
×#Ñ#Õ%r   c                 ó<   — | j                   j                  |¬«       y )N)Úrecurse)r?   ÚensureDecompiled)r   rw   s     r   rx   z!BaseTTXConverter.ensureDecompiledù   s   € Ø�
‰
×#Ñ#¨GÐ#Õ4r   N©T)r"   r#   r$   Ú__doc__r@   rO   rP   rQ   rR   rn   rq   rx   r%   r   r   r6   r6   N   s1   „ ñò
+òYòv=ò,#ò8ò8(ò&ô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y) r=   z5Helper class to retrieve data from an OpenType table.©rA   ÚoffsetÚposÚ
localStater;   Nc                 óJ   — || _         || _        || _        || _        || _        y r)   r}   )r   rA   r€   r~   r;   s        r   r   zOTTableReader.__init__  s%   € ØˆŒ	ØˆŒØˆŒØ$ˆŒØ ˆ�r   c                 ó.   — | xj                   |z  c_         y r)   ©r   ©r   Úcounts     r   ÚadvancezOTTableReader.advance  s   € Ø�Š�EÑŽr   c                 ó   — || _         y r)   rƒ   )r   r   s     r   ÚseekzOTTableReader.seek  s	   € Øˆ�r   c                 ó    — | j                  | j                  | j                  | j                  | j                  «      }| j
                  |_        |S r)   )Ú	__class__rA   r€   r~   r;   r   ©r   Úothers     r   ÚcopyzOTTableReader.copy  s6   € Ø—‘˜tŸy™y¨$¯/©/¸4¿;¹;ÈÏÉÓVˆØ—H‘HˆŒ	Øˆr   c                 ó„   — | j                   |z   }| j                  | j                  | j                  || j                  «      S r)   )r~   rŠ   rA   r€   r;   )r   r~   s     r   ÚgetSubReaderzOTTableReader.getSubReader  s1   € Ø—‘˜vÑ%ˆØ�~‰~˜dŸi™i¨¯©¸&À$Ç-Á-ÓPÐPr   c                 ó†   — | j                   }||z   }t        j                  d|› �| j                  || «      \  }|| _         |S ©Nú>©r   ÚstructÚunpackrA   )r   ÚtypecodeÚ
staticSizer   Únewposr+   s         r   Ú	readValuezOTTableReader.readValue  sD   € Ø�h‰hˆØ�zÑ!ˆÜ—=‘= 1 X J °·±¸3¸vÐ1FÓG‰ˆØˆŒØˆr   c                 óä   — | j                   }|||z  z   }t        j                  || j                  || «      }t        j                  dk7  r|j                  «        || _         |j                  «       S ©NÚbig)r   ÚarrayrA   ÚsysÚ	byteorderÚbyteswapÚtolist)r   r–   r—   r…   r   r˜   r+   s          r   Ú	readArrayzOTTableReader.readArray$  s^   € Ø�h‰hˆØ�u˜zÑ)Ñ)ˆÜ—‘˜H d§i¡i°°FÐ&;Ó<ˆÜ�=‰=˜EÒ!Ø�N‰NÔØˆŒØ�|‰|‹~Ðr   c                 ó(   — | j                  dd¬«      S )NÚbr   ©r—   ©r™   r    s    r   ÚreadInt8zOTTableReader.readInt8-  ó   € Ø�~‰~˜c¨aˆ~Ó0Ð0r   c                 ó*   — | j                  dd|¬«      S )Nr¤   r   ©r—   r…   ©r¢   r„   s     r   ÚreadInt8ArrayzOTTableReader.readInt8Array0  ó   € Ø�~‰~˜c¨a°uˆ~Ó=Ð=r   c                 ó(   — | j                  dd¬«      S )NÚhr   r¥   r¦   r    s    r   Ú	readShortzOTTableReader.readShort3  r¨   r   c                 ó*   — | j                  dd|¬«      S )Nr¯   r   rª   r«   r„   s     r   ÚreadShortArrayzOTTableReader.readShortArray6  r­   r   c                 ó(   — | j                  dd¬«      S )Nr{   r   r¥   r¦   r    s    r   ÚreadLongzOTTableReader.readLong9  r¨   r   c                 ó*   — | j                  dd|¬«      S )Nr{   r   rª   r«   r„   s     r   ÚreadLongArrayzOTTableReader.readLongArray<  r­   r   c                 ó(   — | j                  dd¬«      S )NÚBr   r¥   r¦   r    s    r   Ú	readUInt8zOTTableReader.readUInt8?  r¨   r   c                 ó*   — | j                  dd|¬«      S )Nr¸   r   rª   r«   r„   s     r   ÚreadUInt8ArrayzOTTableReader.readUInt8ArrayB  r­   r   c                 ó(   — | j                  dd¬«      S )NÚHr   r¥   r¦   r    s    r   Ú
readUShortzOTTableReader.readUShortE  r¨   r   c                 ó*   — | j                  dd|¬«      S )Nr½   r   rª   r«   r„   s     r   ÚreadUShortArrayzOTTableReader.readUShortArrayH  r­   r   c                 ó(   — | j                  dd¬«      S )NÚIr   r¥   r¦   r    s    r   Ú	readULongzOTTableReader.readULongK  r¨   r   c                 ó*   — | j                  dd|¬«      S )NrÂ   r   rª   r«   r„   s     r   ÚreadULongArrayzOTTableReader.readULongArrayN  r­   r   c                 ó†   — | j                   }|dz   }t        j                  dd| j                  || z   «      \  }|| _         |S )Nr   ú>ló    r“   ©r   r   r˜   r+   s       r   Ú
readUInt24zOTTableReader.readUInt24Q  sB   € Ø�h‰hˆØ�q‘ˆÜ—=‘=  u¨t¯y©y¸¸VÐ/DÑ'DÓ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  sW   € Ø�h‰hˆØ�q‘ˆØ�I‰I�c˜&Ð!ˆØ˜1™ š‰g¨%ˆÜ—=‘=  s¨Q¡wÓ/‰ˆØˆŒØˆr   c                 óZ   — t        |«      D �cg c]  }| j                  «       ‘Œ c}S c c}w r)   )ÚrangerÊ   )r   r…   Ú_s      r   ÚreadUInt24ArrayzOTTableReader.readUInt24Arraya  s!   € Ü+0°«<Ö8 a�—‘Õ!Ò8Ð8ùÒ8s   Ž(c                 ó�   — | j                   }|dz   }t        | j                  || «      }t        |«      dk(  sJ |«       ‚|| _         |S ©Nr   )r   r   rA   ÚlenrÉ   s       r   ÚreadTagzOTTableReader.readTagd  sJ   € Ø�h‰hˆØ�q‘ˆÜ�D—I‘I˜c &Ð)Ó*ˆÜ�5‹z˜QŠÐ% Ó%ˆØˆŒØˆr   c                 óT   — | j                   }||z   }| j                  || }|| _         |S r)   )r   rA   )r   r…   r   r˜   r+   s        r   ÚreadDatazOTTableReader.readDatal  s0   € Ø�h‰hˆØ�u‘ˆØ—	‘	˜#˜fÐ%ˆØˆŒØˆr   c                 ó|   — | j                   r| j                   j                  «       n	t        «       }|||<   || _         y r)   ©r€   r�   Údict©r   rs   r+   rU   s       r   Ú__setitem__zOTTableReader.__setitem__s  ó.   € Ø*.¯/ª/�—‘×$Ñ$Ô&¼t»vˆØˆˆd‰Øˆ�r   c                 ó<   — | j                   xr | j                   |   S r)   ©r€   ©r   rs   s     r   Ú__getitem__zOTTableReader.__getitem__x  s   € Ø�‰Ò8 4§?¡?°4Ñ#8Ð8r   c                 ó:   — | j                   xr || 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òòò1ò>ò1ò>ò1ò>ò1ò>ò1ò>ò1ò>òòò9òòò ò
9ó;r   r=   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚOffsetToWriterc                 ó    — || _         || _        y r)   )Ú	subWriterÚ
offsetSize©r   rê   rë   s      r   r   zOffsetToWriter.__init__€  s   € Ø"ˆŒØ$ˆ�r   c                 ó¤   — t        | «      t        |«      k7  rt        S | j                  |j                  k(  xr | j                  |j                  k(  S r)   )rb   ÚNotImplementedrê   rë   r‹   s     r   Ú__eq__zOffsetToWriter.__eq__„  s?   € Ü�‹:œ˜e›Ò$Ü!Ð!Ø�~‰~ §¡Ñ0ÒX°T·_±_È×HXÑHXÑ5XÐXr   c                 óD   — t        | j                  | j                  f«      S r)   )Úhashrê   rë   r    s    r   Ú__hash__zOffsetToWriter.__hash__‰  s   € ä�T—^‘^ T§_¡_Ð5Ó6Ð6r   N)r"   r#   r$   r   rï   rò   r%   r   r   rè   rè     s   „ ò%òYó
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)y)-rN   z=Helper class to gather and assemble data for OpenType tables.Nc                 óX   — g | _         d | _        || _        || _        d | _        d| _        y )Nú<none>)Úitemsr   r€   r;   Úparentrs   )r   r€   r;   s      r   r   zOTTableWriter.__init__‘  s,   € ØˆŒ
ØˆŒØ$ˆŒØ ˆŒØˆŒØˆ�	r   c                 ó|   — | j                   r| j                   j                  «       n	t        «       }|||<   || _         y 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                   |= y r)   rá   râ   s     r   Ú__delitem__zOTTableWriter.__delitem__¡  s   € Ø�O‰O˜DÑ!r   c                 ó¸   — d}| j                   D ]H  }t        |d«      r||j                  z  }Œt        |d«      r||j                  z  }Œ;|t	        |«      z   }ŒJ |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¦  s]   € àˆØ—J‘Jò 	"ˆDÜ�t˜^Ô,Ø�T—Y‘Y‘‘Ü˜˜{Ô+Ø�T—_‘_Ñ$‘àœ˜D›	‘M‘ð	"ð ˆr   c                 ó–  — t        | j                  «      }| j                  }t        |«      }t	        |«      D ]È  }||   }t        |d«      sŒ|j                  dk(  r&t        |j                  j                  |z
  «      ||<   ŒJ|j                  dk(  r'	 t        |j                  j                  |z
  «      ||<   Œ€|j                  dk(  r&t        |j                  j                  |z
  «      ||<   Œµt        |j                  «      ‚ t!        |«      S # t        j                  $ r' | j                  |j                  «      }t        |«      ‚w xY w)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²  s$  € ä�T—Z‘ZÓ ˆØ�h‰hˆÜ�u“:ˆÜ�x“ò 	6ˆAØ˜‘8ˆDä�t˜[Õ)Ø—?‘? aÒ'Ü(¨¯©×);Ñ);¸cÑ)AÓB�E˜!’HØ—_‘_¨Ò)ðJÜ#-¨d¯n©n×.@Ñ.@À3Ñ.FÓ#G˜˜ašð —_‘_¨Ò)Ü)¨$¯.©.×*<Ñ*<¸sÑ*BÓC�E˜!’Hä$ T§_¡_Ó5Ð5ð'	6ô* ˜ÓÐøô "Ÿ<™<ò Jà.2×.IÑ.IØ ŸN™Nó/Ð+ô 5Ð5HÓIÐIðJús   Â%DÄ:Ec                 ó  — t        | j                  «      }t        t        t        dœ}t        |«      D ]M  \  }}t        |d«      sŒ|j                  |v r ||j                     d«      ||<   Œ:t        |j                  «      ‚ t        |«      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Ó ˆÜ"¤z´iÑ@ˆ	Ü  Ó'ò 	6‰GˆAˆtÜ�t˜[Õ)à—?‘? iÑ/Ø9˜y¨¯©Ñ9¸!Ó<�E˜!’Hä$ T§_¡_Ó5Ð5ð	6ô ˜ÓÐr   c                 ó,   — t        | j                  «      S r)   )rñ   rö   r    s    r   rò   zOTTableWriter.__hash__Ü  s   € ä�D—J‘JÓÐr   c                 ó>   — | j                  |«      }|t        u r|S | S r)   ©rï   rî   ©r   rŒ   Úresults      r   Ú__ne__zOTTableWriter.__ne__à  ó$   € Ø—‘˜UÓ#ˆØ¤>Ñ1ˆvÐA¸6°zÐAr   c                 ón   — t        | «      t        |«      k7  rt        S | j                  |j                  k(  S r)   )rb   rî   rö   r‹   s     r   rï   zOTTableWriter.__eq__ä  s+   € Ü�‹:œ˜e›Ò$Ü!Ð!Ø�z‰z˜UŸ[™[Ñ(Ð(r   c                 ó”  — t        | d«      }t        | d«      }|r|si }| j                  }t        |«      D ]€  \  }}t        |d«      r|j                  «       ||<   Œ&t        |d«      sŒ3|j                  j                  ||¬«       |rŒS|j                  |j                  |j                  «      ||   _        Œ‚ t        |«      | _        y )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ˆô ˜D +Ó.ˆ	á™~ØˆNà—
‘
ˆÜ  Ó'ò 	‰GˆAˆtÜ�t˜^Ô,Ø×,Ñ,Ó.��a’Ü˜˜{Õ+Ø—‘×+Ñ+Ø"°>ð ,ô ò !Ø)7×)BÑ)BØŸ™¨¯©ó*�E˜!‘HÕ&ð	ô" ˜5“\ˆ�
r   c                 ó  — d|t        | «      <   t        | j                  «      }t        t	        |«      «      }|j                  «        t        | d«      }|}|r|€J d«       ‚|d i }}}d}t        | d«      r€t	        |«      D ]<  }	| j                  |	   }
t        |
d«      sŒt        |
j                  dd «      dk(  sŒ:d} n t        
j                  «      |vr|
j                  j                  |||«       n	 |D ]u  }	| j                  |	   }
t        |
d«      sŒ|r |	d	k(  rt        |
j                  dd «      dk(  rŒAt        |
j                  «      |vr|
j                  j                  |||«       ŒvŒw |j                  | «       y )
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‰ä�t—z‘z“?ˆÜ”e˜H“oÓ&ˆØ�‰Ôä˜d KÓ0ˆàˆ
áàÐ%ðgàfógØ%à&/°°r˜t�IˆFð !ÐÜ�4Ð+Ô,ä˜8“_ò �Ø—z‘z !‘}�ä˜D +Õ.Ü §¡°¸Ó=ÀÓKà'+Ð$Ùðô �$—.‘.Ó!¨Ñ-Ø—‘×,Ñ,¨V°YÀÕEð àò 	ˆAØ—:‘:˜a‘=ˆDÜ˜4 Ô-Øñ !Ø˜!’VÜ˜DŸN™N¨F°DÓ9¸ZÒGð ä�$—.‘.Ó!¨Ñ-Ø—‘×,Ñ,¨V°YÀÕEð ð#	ð& 	×Ñ˜$Õr   c                 óš  — g }g }|}|D ]  }	|j                  dd|	f«       Œ d}
d}t        | d«      rut        | j                  «      D ]]  \  }}t	        |dd «      dk(  sŒd}
t        |«      |vr|j                  |||||«      x}}n|t        |«         }|j                  |«        n d}d}t        | j                  «      D ]¿  \  }}t        |d«      r|}n+t        |d«      r||j                  z  }Œ1|t        |«      z   }Œ@t        |j                  «      |vr"|j                  j                  |||||«      x}}n|t        |j                  «         }||j                  |f}|j                  |«       ||j                  z  }ŒÁ |j                  | «       |j                  ||f«       |d	z  }||t        | «      <   |
r|j                  «        |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   r/  z%OTTableWriter._gatherGraphForHarfbuzzP  só  € Øˆ
ØˆØˆð !ò 	.ˆCØ× Ñ  ! Q¨ Õ-ð	.ð !ÐØˆÜ�4Ð+Ô,ä$ T§Z¡ZÓ0ò 
‘��4Ü˜4 ¨Ó.°*Ó<Ø'+Ð$Ü˜$“x tÑ+Ø26×2NÑ2NØ" H¨d°H¸mó3ð ˜¡xð (,¬B¨t«H¡~˜Ø!×(Ñ(¨Ô6Ùð
ð ˆ	Øˆ
Ü  §¡Ó,ò 	*‰GˆAˆtÜ�t˜[Ô)Ø ‘Ü˜˜~Ô.Ø˜dŸi™iÑ'�
Øà'¬#¨d«)Ñ3�
Øä�$—.‘.Ó!¨Ñ-Ø'+§~¡~×'MÑ'MØ˜H d¨H°mó(ð �	™Hð !¤ D§N¡NÓ!3Ñ4�	à˜dŸo™o¨yÐ9ˆIØ×Ñ˜iÔ(Ø˜$Ÿ/™/Ñ)‰Jð'	*ð* 	�‰�dÔØ�‰˜ ]Ð3Ô4Ø�A‰ˆØ!ˆŒR�‹X‰ÙØ×ÑÔàˆr   c                 óD  — i }| j                  |d¬«       g }g }i }d}g }| j                  |||||«       d}|D ]  }	||	_        ||	j                  «       z   }Œ g }
|D ]#  }	|	j	                  «       }|
j                  |«       Œ% 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  r/  r   r  r  r(  r`   Úserialize_with_tagr   )r   r;   r  r)  r1  r+  r2  r3  r   r?   rA   Ú	tableDatas               r   r]   z%OTTableWriter.getAllDataUsingHarfbuzz‰  sÆ   € ð ˆØ×Ñ˜.¸ÐÔ>ØˆØˆØˆØˆØˆØ×$Ñ$ V¨X°t¸VÀ]ÔSð ˆØò 	.ˆEØˆEŒIØ˜×+Ñ+Ó-Ñ-‰Cð	.ð ˆØò 	#ˆEØ×0Ñ0Ó2ˆIØ�K‰K˜	Õ"ð	#ô ×$Ñ$¤S¨£]°D¸(ÓCÐCr   c                 óà  — |ri }| j                  |«       g }g }i }| j                  |||«       |j                  «        |j                  «        d}|D ]  }||_        ||j	                  «       z   }Œ |D ]  }||_        ||j	                  «       z   }Œ g }|D ]#  }|j                  «       }	|j                  |	«       Œ% |D ]#  }|j                  «       }	|j                  |	«       Œ% 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   r>  s
             r   rd   zOTTableWriter.getAllData§  s  € áØˆNØ×Ñ˜nÔ-ØˆØˆ	ØˆØ×Ñ˜6 9¨dÔ3Ø�‰ÔØ×ÑÔð ˆØò 	.ˆEØˆEŒIØ˜×+Ñ+Ó-Ñ-‰Cð	.ð ò 	.ˆEØˆEŒIØ˜×+Ñ+Ó-Ñ-‰Cð	.ð ˆØò 	#ˆEØŸ™›ˆIØ�K‰K˜	Õ"ð	#ð ò 	#ˆEØŸ™›ˆIØ�K‰K˜	Õ"ð	#ô ˜‹Ðr   c                 ó`   — | j                  | j                  | j                  «      }| |_        |S r)   )rŠ   r€   r;   r÷   )r   Ú	subwriters     r   ÚgetSubWriterzOTTableWriter.getSubWriterÊ  s-   € Ø—N‘N 4§?¡?°D·M±MÓBˆ	àð 	Ôð Ðr   c                 óh   — | j                   j                  t        j                  d|› �|«      «       y r‘   ©rö   r(  r”   Úpack)r   r–   r+   s      r   Ú
writeValuezOTTableWriter.writeValueÔ  s%   € Ø�
‰
×Ñœ&Ÿ+™+¨¨(¨ n°eÓ<Õ=r   c                 óÈ   — t        j                   ||«      }t        j                  dk7  r|j                  «        | j                  j                  |j                  «       «       y r›   )r�   rž   rŸ   r    rö   r(  Útobytes)r   r–   ÚvaluesÚas       r   Ú
writeArrayzOTTableWriter.writeArray×  s?   € Ü�K‰K˜ &Ó)ˆÜ�=‰=˜EÒ!Ø�J‰JŒLØ�
‰
×Ñ˜!Ÿ)™)›+Õ&r   c                 ó–   — d|cxk  rdk  sJ |«       ‚ J |«       ‚| j                   j                  t        j                  d|«      «       y )Ni€ÿÿÿrÌ   z>brD  ©r   r+   s     r   Ú	writeInt8zOTTableWriter.writeInt8Ý  sB   € Ø�uÔ"˜sÒ"Ð) EÓ)Ñ"Ð) EÓ)Ð"Ø�
‰
×Ñœ&Ÿ+™+ d¨EÓ2Õ3r   c                 ó(   — | j                  d|«       y )Nr¤   ©rK  ©r   rI  s     r   ÚwriteInt8ArrayzOTTableWriter.writeInt8Arrayá  ó   € Ø�‰˜˜VÕ$r   c                 ó–   — d|cxk  rdk  sJ |«       ‚ J |«       ‚| j                   j                  t        j                  d|«      «       y )Ni €ÿÿé €  z>hrD  rM  s     r   Ú
writeShortzOTTableWriter.writeShortä  sB   € Ø˜Ô& Ò&Ð-¨Ó-Ñ&Ð-¨Ó-Ð&Ø�
‰
×Ñœ&Ÿ+™+ d¨EÓ2Õ3r   c                 ó(   — | j                  d|«       y )Nr¯   rP  rQ  s     r   ÚwriteShortArrayzOTTableWriter.writeShortArrayè  rS  r   c                 ób   — | j                   j                  t        j                  d|«      «       y )Nz>irD  rM  s     r   Ú	writeLongzOTTableWriter.writeLongë  ó   € Ø�
‰
×Ñœ&Ÿ+™+ d¨EÓ2Õ3r   c                 ó(   — | j                  d|«       y )Nr{   rP  rQ  s     r   ÚwriteLongArrayzOTTableWriter.writeLongArrayî  rS  r   c                 ó–   — d|cxk  rdk  sJ |«       ‚ J |«       ‚| j                   j                  t        j                  d|«      «       y )Nr   é   ú>BrD  rM  s     r   Ú
writeUInt8zOTTableWriter.writeUInt8ñ  sB   € Ø�EÔ˜CÒÐ& Ó&ÑÐ& Ó&ÐØ�
‰
×Ñœ&Ÿ+™+ d¨EÓ2Õ3r   c                 ó(   — | j                  d|«       y )Nr¸   rP  rQ  s     r   ÚwriteUInt8ArrayzOTTableWriter.writeUInt8Arrayõ  rS  r   c                 ó–   — d|cxk  rdk  sJ |«       ‚ J |«       ‚| j                   j                  t        j                  d|«      «       y )Nr   i   ú>HrD  rM  s     r   ÚwriteUShortzOTTableWriter.writeUShortø  sB   € Ø�EÔ#˜GÒ#Ð* UÓ*Ñ#Ð* UÓ*Ð#Ø�
‰
×Ñœ&Ÿ+™+ d¨EÓ2Õ3r   c                 ó(   — | j                  d|«       y )Nr½   rP  rQ  s     r   ÚwriteUShortArrayzOTTableWriter.writeUShortArrayü  rS  r   c                 ób   — | j                   j                  t        j                  d|«      «       y )Nú>IrD  rM  s     r   Ú
writeULongzOTTableWriter.writeULongÿ  r[  r   c                 ó(   — | j                  d|«       y )NrÂ   rP  rQ  s     r   ÚwriteULongArrayzOTTableWriter.writeULongArray  rS  r   c                 ó    — d|cxk  rdk  sJ |«       ‚ J |«       ‚t        j                  d|«      }| j                  j                  |dd  «       y )Nr   é   z>Lr   ©r”   rE  rö   r(  )r   r+   r¤   s      r   ÚwriteUInt24zOTTableWriter.writeUInt24  sM   € Ø�EÔ%˜IÒ%Ð, uÓ,Ñ%Ð, uÓ,Ð%Ü�K‰K˜˜eÓ$ˆØ�
‰
×Ñ˜!˜A˜B˜%Õ r   c                 ó4   — |D ]  }| j                  |«       Œ y r)   )rq  )r   rI  r+   s      r   ÚwriteUInt24ArrayzOTTableWriter.writeUInt24Array
  s   € Øò 	$ˆEØ×Ñ˜UÕ#ñ	$r   c                 ó–   — t        |«      j                  «       }t        |«      dk(  sJ |«       ‚| j                  j	                  |«       y rÕ   )r   rH  rÖ   rö   r(  )r   Útags     r   ÚwriteTagzOTTableWriter.writeTag  s;   € Ü�#‹h×ÑÓ ˆÜ�3‹x˜1Š}Ð!˜cÓ!ˆ}Ø�
‰
×Ñ˜#Õr   c                 óN   — | j                   j                  t        ||«      «       y r)   )rö   r(  rè   rì   s      r   ÚwriteSubTablezOTTableWriter.writeSubTable  s   € Ø�
‰
×Ñœ.¨°JÓ?Õ@r   c                 óZ   — t        ||||¬«      }| j                  j                  |«       |S )N)rþ   r+   )ÚCountReferencerö   r(  )r   r?   rs   rþ   r+   Úrefs         r   ÚwriteCountReferencez!OTTableWriter.writeCountReference  s)   € Ü˜U D¨t¸5ÔAˆØ�
‰
×Ñ˜#ÔØˆ
r   c                 óf   — t        j                  |f|z   Ž }| j                  j                  |«       y r)   rp  )r   ÚformatrI  rA   s       r   ÚwriteStructzOTTableWriter.writeStruct  s)   € Ü�{‰{˜V˜I¨Ñ.Ð/ˆØ�
‰
×Ñ˜$Õr   c                 ó:   — | j                   j                  |«       y 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(  r7| j                  j                  j                  }| j                  j                  }nÝdj                  | j                   |g«      }| j                  }|rH|j                   d	vr:dj                  |j                   |g«      }|j                  }|r|j                   d	vrŒ:|rh|j                   dk(  r7|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‰9˜Ò$Ø"×.Ñ.ŠOØ�Y‰Y˜(Ò"Ø"×.Ñ.ˆOØ ×,Ñ,ŠMä˜t V¨XÓ6ˆHÜ�t˜]Ô+Ø ×,Ñ,�	Ø�y‰y˜JÒ&Ø"&§+¡+×"9Ñ"9�Ø $× 0Ñ 0’Ø—‘˜mÒ+Ø"&§+¡+×"4Ñ"4×"@Ñ"@�Ø $§¡× 7Ñ 7‘àŸ8™8 T§Y¡Y°Ð$9Ó:�Ø—[‘[�Ù˜RŸW™WÐ,GÑGØ"Ÿx™x¨¯©°(Ð(;Ó<�HØŸ™�Bñ ˜RŸW™WÐ,GÒGñ Ø—w‘w -Ò/Ø*,¯)©)×*:Ñ*:×*FÑ*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'  r/  r]   rd   rB  rF  rK  rN  rR  rV  rX  rZ  r]  ra  rc  rf  rh  rk  rm  rq  rs  rv  rx  r|  r  r�  r  r%   r   r   rN   rN   Ž  sÊ   „ ÙGóò ò
%ò"ò

ò ò8 ò òBò)ó
%"òN> ò@7òrDó<òFò>ò'ò4ò%ò4ò%ò4ò%ò4ò%ò4ò%ò4ò%ò!ò
$òò
Aóò
 ò ó!
r   rN   c                   ó*   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zy)rz  z8A reference to a Count value, not a count of references.Nc                 óV   — || _         || _        || _        |�| j                  |«       y y r)   )r?   rs   rþ   ÚsetValue)r   r?   rs   rþ   r+   s        r   r   zCountReference.__init__I  s.   € ØˆŒ
ØˆŒ	ØˆŒ	ØÐØ�M‰M˜%Õ ð r   c                 ót   — | j                   }| j                  }||   €|||<   y ||   |k(  sJ |||   |f«       ‚y r)   ©r?   rs   )r   r+   r?   rs   s       r   r�  zCountReference.setValueP  sI   € Ø—
‘
ˆØ�y‰yˆØ�‰;ÐØˆE�$ŠKà˜‘; %Ò'ÐC¨$°°d±¸UÐ)CÓCÑ'r   c                 ó4   — | j                   | j                     S r)   r‘  r    s    r   ÚgetValuezCountReference.getValueX  s   € Ø�z‰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‰J�t—y‘yÑ!ˆØˆ9ØˆAÜ¤´	Ñ:¸4¿9¹9ÑEÀaÓHÐHr   r‹  )r"   r#   r$   rz   r   r�  r“  rý   r%   r   r   rz  rz  F  s   „ ÙBó!òDò%óIr   rz  c                 ó.   — t        j                  d| «      S )Nr`  ©r”   rE  r*   s    r   r•  r•  b  ó   € Ü�;‰;�t˜UÓ#Ð#r   c                 ó.   — t        j                  d| «      S )Nre  r˜  r*   s    r   r  r  f  r™  r   c                 ób   — d| cxk  rdk  sJ | «       ‚ J | «       ‚t        j                  d| «      S )Nr   l        rj  r˜  r*   s    r   r  r  j  s6   € Ø�Ô#˜Ò#Ð* UÓ*Ñ#Ð* UÓ*Ð#Ü�;‰;�t˜UÓ#Ð#r   c                 óh   — d| cxk  rdk  sJ | «       ‚ J | «       ‚t        j                  d| «      dd  S )Nr   ro  rj  r   r˜  r*   s    r   r  r  o  s=   € Ø�Ô!˜	Ò!Ð( 5Ó(Ñ!Ð( 5Ó(Ð!Ü�;‰;�t˜UÓ# A 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y)Ú	BaseTablez0Generic base class for all OpenType (sub)tables.c                 ó®   — | j                   j                  d«      }|r.| `| j                  }| `| j	                  ||«       t        | |«      S t        |«      ‚©NrC   )Ú__dict__ÚgetrC   rB   r@   r>   ÚAttributeError)r   ÚattrrC   rB   s       r   Ú__getattr__zBaseTable.__getattr__w  sR   € Ø—‘×"Ñ" 8Ó,ˆÙØ�Ø—9‘9ˆDØ�	Ø�N‰N˜6 4Ô(Ü˜4 Ó&Ð&ä˜TÓ"Ð"r   c                 óè   — | j                   j                  d«      }|r"| `| j                  }| `| j	                  ||«       |r1| j                  «       D ]  }|j                  j                  |«       Œ y y r   )r¡  r¢  rC   rB   r@   ÚiterSubTablesr+   rx   )r   rw   rC   rB   Úsubtables        r   rx   zBaseTable.ensureDecompiled‚  sl   € Ø—‘×"Ñ" 8Ó,ˆÙØ�Ø—9‘9ˆDØ�	Ø�N‰N˜6 4Ô(ÙØ ×.Ñ.Ó0ò 9�Ø—‘×/Ñ/°Õ8ñ9ð r   c                 ó®   — d| j                   v r<| j                   j                  «       }| j                   d   j                  «       |d<   |S | j                   S r   )r¡  r�   )r   rU   s     r   Ú__getstate__zBaseTable.__getstate__�  sL   € ð �t—}‘}Ñ$Ø—M‘M×&Ñ&Ó(ˆEØ"Ÿm™m¨HÑ5×:Ñ:Ó<ˆE�(‰OØˆLØ�}‰}Ðr   c                 ó   — d}| j                   D ]l  }|j                  |«      }|t        u rt        c S d}|j                  r3|j                  |v r||j                     |j                  z   }nt        c S |||z  z  }Œn |S )Nr   r   )Ú
convertersÚgetRecordSizerî   ÚrepeatÚaux)ÚclsrC   Ú	totalSizeÚconvrþ   Ú
countValues         r   r­  zBaseTable.getRecordSize–  s„   € àˆ	Ø—N‘Nò 
	+ˆDØ×%Ñ% fÓ-ˆDØ”~Ñ%Ü%Ò%ØˆJØ�{Š{Ø—;‘; &Ñ(Ø!'¨¯©Ñ!4°t·x±xÑ!?‘Jä)Ò)Ø˜ 
Ñ*Ñ*‰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                 ó  — | j                  «       D �]3  }|j                  r�t        | |j                  «      st	        | |j                  g «       t        t        | |j                  «      «      |j                  z
  }	 | j                  |j                  «      }t	        | |j                  |«       Œ�|j                  r"t        |j                  d | j                  «      sŒËt        | |j                  «      rŒât        |d«      rt	        | |j                  d «       t        |d«      s�Œt	        | |j                  |j                  «       �Œ6 y # t        $ r2 |r,|j                  |v r||j                     j                  |«       Y �Œrw xY w)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¡YÔ/Ü˜D $§)¡)¨RÔ0Ü ¤¨¨t¯y©yÓ!9Ó:¸T¿X¹XÑE�
ðEØ!%×!8Ñ!8¸¿¹Ó!E�JÜ˜D $§+¡+¨zÕ:ð —8’8¤D¨¯©°4¸¿¹Ô$GØÜ˜4 §¡Ô+ØÜ˜4Ð!2Ô3Ü˜D $§)¡)¨TÔ2ô ˜4 Ö+ä˜D $§)¡)¨T¯\©\Ö:ñ1	;øô  ò Eá! d§k¡k°ZÑ&?Ø" 4§;¡;Ñ/×8Ñ8¸ÔDúðEús   Á;2E	Å	7FÆFc                 ó   — | j                  |«       i }|| _        | j                  «       D �]¯  }|j                  dk(  r|j	                  |j
                  |d   «      }|j                  dk(  r|j	                  |j
                  |d   «      }|j                  dk(  r|j	                  |d   «      }|j                  dk(  r|j	                  |j
                  |d   «      }	 |j                  r…t        |j                  t        «      r|j                  }n-|j                  |v r||j                     }n||j                     }||j                  z  }|j                  ||||«      ||j                  <   nm|j                  rt        |j                  d |«      s�Œh|j                  |||«      ||j                  <   |j                  r||j                     ||j                  <   �Œ² t!        | d	«      r| j#                  ||«       | `y | j$                  j'                  |«       | `y # t        $ r'}|j                  }|j                  |fz   |_        ‚ d }~ww xY w)
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‰y˜JÒ&Ø×(Ñ(¨¯©¸%ÀÑ:MÓN�Ø�y‰y˜MÒ)Ø×(Ñ(¨¯©¸%Ð@UÑ:VÓW�Ø�y‰y˜OÒ+Ø×(Ñ(¨°Ñ)=Ó>�Ø�y‰y˜KÒ'Ø×(Ñ(¨¯©¸%ÀÑ:LÓM�ðØ—;’;Ü! $§+¡+¬sÔ3Ø%)§[¡[™
ØŸ™¨Ñ-Ø%*¨4¯;©;Ñ%7™
ð &,¨D¯K©KÑ%8˜
Ø $§(¡(Ñ*�JØ'+§~¡~°f¸dÀEÈ:Ó'V�E˜$Ÿ)™)Ò$à—x’x¬¨T¯X©X°t¸UÔ(CÙ Ø'+§y¡y°¸¸uÓ'E�E˜$Ÿ)™)Ñ$Ø×(Ò(Ø,1°$·)±)Ñ,<˜˜tŸy™yÑ)ùð3	ô> �4˜Ô$Ø�M‰M˜% Ô&ð ‰Oð �M‰M× Ñ  Ô'à‰Oøô ò Ø—y‘y�ØŸ™ 4 'Ñ)�”Øûðús    ÃB4HÆAHÈ	IÈ&"IÉIc                 ó‚  — | j                  «        t        | d«      r/t        | d«       }| j                  |«      }|xr t        | d«      }nd}| j                  j	                  «       }| j                  «       D ]W  }|j                  sŒ|j                  sŒ|j                  |j                  «      }t        |t        «      sŒI|||j                  <   ŒY t        | d«      rd|_        t        | d«      rd|_        t        | j                  d«      r(|d   j                  | j                  j                   «       | j#                  |«       | j                  «       D �]a  }|j                  |j                  «      }|j$                  rÈ|€g }t'        |«      |j(                  z
  }t        |j$                  t*        «      r7t'        |«      |j$                  k(  sdJ d	|j$                  t'        |«      fz  «       ‚|j$                  |v rt        ||j$                  |¬
«       n||j$                     j                  |«       	 |j-                  ||||«       Œó|j                  r§t        |t        «      rB|}	|j2                  |	_        |j7                  |	«       |	j9                  «       ||j                  <   n6|j;                  ||j                  |j2                  «      }	d ||j                  <   |j                  s�Œ•|	||j                  <   �Œ¦|j<                  rY|j                  |vrd ||j                  <   |j;                  ||j                  |j2                  ||j                     «      }	|	|d<   �Œ|j(                  rt?        |j(                  d |«      s�Œ0	 |jA                  ||||«       |j                  s�ŒS|||j                  <   �Œd |r| `"y y # t.        $ r(}|j0                  |j                  dz   fz   |_        ‚ d }~ww xY w# t.        $ r?}|�|j                  jB                  n|j                  }
|j0                  |
fz   |_        ‚ d }~ww xY w)NÚpreWriteÚFormatFr#  r   r  TrÂ  zexpected %d values, got %dr*   z[])#rx   rp   rÔ  r¡  r�   rµ  ÚisCountrÏ  r¢  rs   rÌ  rz  r#  r  rŠ   r�  rÂ  ÚwriteFormatr®  rÖ   r¯  rÍ  rK  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ñ  s©  € Ø×ÑÔô �4˜Ô$Ü& t¨XÓ6Ð6ˆLØ—M‘M $Ó'ˆEØ'ÒC¬G°D¸(Ó,C‰Là ˆLØ—M‘M×&Ñ&Ó(ˆEð ×&Ñ&Ó(ò 	.ˆDØ�|‹| × 1Ó 1ØŸ	™	 $§)¡)Ó,�Ü˜e¤^Õ4Ø(-�F˜4Ÿ9™9Ò%ð		.ô �4Ð+Ô,Ø&'ˆFÔ#ä�4˜Ô%Ø#ˆFÔä�4—>‘> <Ô0Ø�<Ñ ×)Ñ)¨$¯.©.×*CÑ*CÔDà×Ñ˜Ô Ø×&Ñ&Ó(ó ?	.ˆDØ—I‘IØ—	‘	óˆEð �{Š{Ø�=Ø�EÜ  ›Z¨$¯(©(Ñ2�
Ü˜dŸk™k¬3Ô/Ü˜u›:¨¯©Ò4ð Ð6RØŸ™Ü˜E›
ðVñ 7ó Ð4ð —[‘[ EÑ)Ü" 5¨$¯+©+¸ZÖHð ˜4Ÿ;™;Ñ'×0Ñ0°Ô<ðØ—O‘O F¨D°%¸Õ?ð —’ô ˜e¤^Ô4Ø�CØ#Ÿ™�C”HØ×$Ñ$ SÔ)Ø'*§|¡|£~�E˜$Ÿ)™)Ò$à ×4Ñ4°U¸D¿I¹IÀtÇÁÓW�CØ'+�E˜$Ÿ)™)Ñ$Ø×$Ô$Ø(+�F˜4Ÿ9™9Ó%Ø×"Ò"ð —9‘9 EÑ)Ø'+�E˜$Ÿ)™)Ñ$Ø×0Ñ0Ø˜4Ÿ9™9 d§o¡o°u¸T¿Y¹YÑ7Gó�ð (+��|Ó$à—8’8¤D¨¯©°4¸Ô$?ÙðØ—J‘J˜v t¨U°EÔ:ð
 ×$Ô$Ø(-�F˜4Ÿ9™9Ó%ð?	.ñB Ø‘ð øô[ !ò ØŸV™V t§y¡y°4Ñ'7Ð&9Ñ9�A”FØûðûôL !ò Ø7<Ð7H˜5Ÿ?™?×3Ò3ÈdÏiÉi�DØŸV™V t gÑ-�A”FØûðús0   È5OÎO6Ï	O3Ï#O.Ï.O3Ï6	P>Ï?:P9Ð9P>c                  ó   — y r)   r%   ©r   rC   s     r   rÉ  zBaseTable.readFormatV  ó   € Ør   c                  ó   — y 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   }|j	                  ||«       |j                  «        | j                  ||«       |j                  |«       |j                  «        y )NrÕ  )rŠ   r"   rp   rÕ  ÚbegintagÚnewlinerm   Úendtag)r   Ú	xmlWriterrB   rt   rs   Ú	tableNames         r   rn   zBaseTable.toXML\  sƒ   € Ù ‘D d§n¡n×&=Ñ&=ˆ	Øˆ=ØˆEÜ�4˜Ô"Ø˜h¨¯©Ð4Ð5Ñ5ˆEØ×Ñ˜9 eÔ,Ø×ÑÔØ�‰�I˜tÔ$Ø×Ñ˜Ô#Ø×ÑÕr   c           
      ó¦  — | j                  «       D ]¾  }|j                  rMt        | |j                  g «      }t	        |«      D ]'  \  }}|j                  ||||j                  d|fg«       Œ) Œ\|j                  r!t        |j                  d t        | «      «      sŒ‰t        | |j                  d «      }|j                  ||||j                  g «       ŒÀ y )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ˆDØ�{Š{Ü  d§i¡i°Ó4�Ü(¨Ó/ò T‘G�A�tØ—M‘M )¨T°4¸¿¹ÀgÈqÀ\ÀNÕSñTð —8’8¤D¨¯©°4¼¸d»Ô$DØÜØ˜$Ÿ)™) Tó�ð —‘˜i¨¨u°d·i±iÀÕDñ	Er   c                 ó8  — 	 | j                  |«      }|j                  |||«      }|j                  �Dt	        | |j
                  d «      }|€g }t        | |j
                  |«       |j                  |«       y t        | |j
                  |«       y # t        $ r ‚ w xY wr)   )r¸  r½  ÚxmlReadr®  r>   rs   r¼  r(  )r   rs   rt   ru   rB   r²  r+   Úseqs           r   rq   zBaseTable.fromXMLy  s“   € ð	Ø×*Ñ*¨4Ó0ˆDð —‘˜U G¨TÓ2ˆð �;‰;Ð"Ü˜$ §	¡	¨4Ó0ˆCØˆ{Ø�Ü˜˜dŸi™i¨Ô-Ø�J‰J�uÕä�D˜$Ÿ)™) UÕ+øô ò 	Øð	ús   ‚B ÂBc                 ó>   — | j                  |«      }|t        u r|S | S r)   r  r  s      r   r  zBaseTable.__ne__‹  r  r   c                 ó®   — t        | «      t        |«      k7  rt        S | j                  «        |j                  «        | j                  |j                  k(  S r)   )rb   rî   rx   r¡  r‹   s     r   rï   zBaseTable.__eq__�  sC   € Ü�‹:œ˜e›Ò$Ü!Ð!à×ÑÔØ×ÑÔ à�}‰} §¡Ñ.Ð.r   c                   ó:   — e Zd ZU dZeed<   ded<   dZee   ed<   y)úBaseTable.SubTableEntryzSee BaseTable.iterSubTables()rs   rž  r+   Nræ  )	r"   r#   r$   rz   r   Ú__annotations__ræ  r   rÍ  r%   r   r   ÚSubTableEntryrï  ˜  s   … Ù+à‹	ØÓØ#ˆˆx˜‰}Ô#r   rñ  Úreturnc              #   ó  ‡ ‡K  — ‰ j                  «       D ]q  }|j                  Št        ‰ ‰d«      }|€Œt        |t        «      r‰ j                  ‰|«      –— ŒDt        |t        «      sŒUˆˆ fd„t        |«      D «       E d{  –—†  Œs y7 Œ­w)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   ól   •K  — | ]+  \  }}t        |t        «      r‰j                  ‰||¬ «      –— Œ- y­w))ræ  N)rÌ  rž  rñ  )Ú.0r{   r–  rs   r   s      €€r   ú	<genexpr>z*BaseTable.iterSubTables.<locals>.<genexpr>²  s9   øè ø€ ò á˜˜1Ü! !¤YÔ/ð ×&Ñ& t¨Q°aÐ&×8ñùs   ƒ14)rµ  rs   r>   rÌ  rž  rñ  r  r  )r   r²  r+   rs   s   `  @r   r§  zBaseTable.iterSubTablesŸ  sˆ   ùè ø€ ð ×&Ñ&Ó(ò 	ˆDØ—9‘9ˆDÜ˜D $¨Ó-ˆEØˆ}ØÜ˜%¤Ô+Ø×(Ñ(¨¨uÓ5Ó5Ü˜E¤4Õ(ôä )¨%Ó 0ô÷ ñ ñ	ðús   „A%BÁ*BÂB
ÂB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òð ñó ðòò+ó;ò6(òTcòJòó
òEò",ò$Bò/ô$˜
ô $ð˜x¨Ñ6ó ó40r   rž  c                   óF   — e Zd ZdZed„ «       Zd„ Zd„ Zd„ Zd„ Z	d
d„Z
d	„ Zy)Ú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                 óŠ   — 	 | j                   }| j                  j                  | j                   g «      S # t        $ r g cY S w xY wr)   )rÕ  r£  r¬  r¢  )r   Úfmts     r   rµ  z&FormatSwitchingBaseTable.getConvertersÅ  sE   € ð	Ø—+‘+ˆCð �‰×"Ñ" 4§;¡;°Ó3Ð3øô ò 	ð ŠIð	ús   ‚4 ´AÁAc                 ó:   — | j                   | j                     |   S r)   )r·  rÕ  râ   s     r   r¸  z+FormatSwitchingBaseTable.getConverterByNameÑ  s   € Ø×$Ñ$ T§[¡[Ñ1°$Ñ7Ð7r   c                 ó.   — |j                  «       | _        y r)   )r¾   rÕ  rÜ  s     r   rÉ  z#FormatSwitchingBaseTable.readFormatÔ  s   € Ø×'Ñ'Ó)ˆ�r   c                 ó:   — |j                  | j                  «       y r)   )rf  rÕ  rg   s     r   r×  z$FormatSwitchingBaseTable.writeFormat×  s   € Ø×Ñ˜4Ÿ;™;Õ'r   Nc                 ó6   — t         j                  | ||||«       y r)   )rž  rn   )r   rã  rB   rt   rs   s        r   rn   zFormatSwitchingBaseTable.toXMLÚ  s   € Ü�‰˜˜i¨¨u°dÕ;r   c                 óB   — 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û  ½  s9   „ ñ9ð ñó ðò
4ò8ò*ò(ó<ó=r   rû  c                   ó   — e Zd Zd„ Zd„ Zy)ÚUInt8FormatSwitchingBaseTablec                 ó.   — |j                  «       | _        y r)   )r¹   rÕ  rÜ  s     r   rÉ  z(UInt8FormatSwitchingBaseTable.readFormatâ  s   € Ø×&Ñ&Ó(ˆ�r   c                 ó:   — |j                  | j                  «       y r)   )ra  rÕ  rg   s     r   r×  z)UInt8FormatSwitchingBaseTable.writeFormatå  s   € Ø×Ñ˜$Ÿ+™+Õ&r   N)r"   r#   r$   rÉ  r×  r%   r   r   r  r  á  s   „ ò)ó'r   r  )Úuint16Úuint8c                 óL   — 	 t         |    S # t        $ r t        d| ›�«      ‚w xY w)NzUnsupported format type: )ÚformatSwitchingBaseTablesr½  Ú	TypeError)Ú
formatTypes    r   Ú getFormatSwitchingBaseTableClassr  ï  s7   € ðDÜ(¨Ñ4Ð4øÜò DÜÐ3°J°>ÐBÓCÐCðDús   ‚ ‹#r°  rþ  rò  c                 ór  — t        | t        «      st        | «      ‚t        | t        «      r*|€t        d| j                  › �«      ‚| j
                  |   }n| j
                  }d|vryi }|j                  «       D ]  \  }}|j                  «       }|€Œ|||<   Œ 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.
    z''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ÐÜ�#Ô/Ô0Øˆ;ÜÐEÀcÇlÁlÀ^ÐTÓUÐUØ×)Ñ)¨#Ñ.‰
à×)Ñ)ˆ
à˜ZÑ'ØØ€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   )r_  Ú	Reserved1r   r   )i   Ú	Reserved2r   r   )i   Ú	Reserved3r   r   )i   Ú	Reserved4r   r   )i   Ú	Reserved5r   r   )i    Ú	Reserved6r   r   )i @  Ú	Reserved7r   r   )rU  Ú	Reserved8r   r   c                  ó:   — i } t         D ]  \  }}}}|||f| |<   Œ | S r)   )ÚvalueRecordFormat)ÚdÚmaskrs   ÚisDeviceÚsigneds        r   Ú
_buildDictr0  /  s4   € Ø
€AÜ(9ò )Ñ$ˆˆd�H˜fØ˜ &Ð(ˆˆ$Šð)à€Hr   c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚValueRecordFactoryz6Given a format code, this object convert ValueRecords.c                 ój   — g }t         D ]!  \  }}}}||z  sŒ|j                  |||f«       Œ# || _        y r)   )r+  r(  r~  )r   ÚvalueFormatr~  r-  rs   r.  r/  s          r   r   zValueRecordFactory.__init__<  sC   € ØˆÜ,=ò 	8Ñ(ˆD�$˜ &Ø˜TÓ!Ø—‘˜t X¨vÐ6Õ7ð	8ð ˆ�r   c                 ó,   — t        | j                  «      S r)   )rÖ   r~  r    s    r   Ú__len__zValueRecordFactory.__len__C  s   € Ü�4—;‘;ÓÐr   c                 ó0  — | j                   }|sy t        «       }|D ]w  \  }}}|r|j                  «       }n|j                  «       }|r?|r;ddlm}	 |j                  |«      }
 t        |	|«      «       }|j                  |
|«       nd }t        |||«       Œy |S ©Nr   r8   )
r~  ÚValueRecordr°   r¾   r<   r9   r�   r>   r@   r¼  )r   rC   rB   r~  ÚvalueRecordrs   r.  r/  r+   r9   Ú	subReaders              r   ÚreadValueRecordz"ValueRecordFactory.readValueRecordF  sž   € Ø—‘ˆÙØÜ!“mˆØ&,ò 	.Ñ"ˆD�(˜FÙØ×(Ñ(Ó*‘à×)Ñ)Ó+�ÙÙÝ*à &× 3Ñ 3°EÓ :�IØ3œG H¨dÓ3Ó5�EØ—O‘O I¨tÕ4à �EÜ�K  uÕ-ð	.ð Ðr   c                 ó*  — | j                   D ]„  \  }}}t        ||d«      }|rJ|r6|j                  «       }|j                  |d¬«       |j	                  ||«       ŒN|j                  d«       Œ`|r|j                  |«       Œt|j                  |«       Œ† y )Nr   r   )rë   )r~  r>   rB  rx  rO   rf  rV  )	r   rX   rB   r:  rs   r.  r/  r+   rê   s	            r   ÚwriteValueRecordz#ValueRecordFactory.writeValueRecord\  sŒ   € Ø&*§k¡kò 	*Ñ"ˆD�(˜FÜ˜K¨¨qÓ1ˆEÙÙØ &× 3Ñ 3Ó 5�IØ×(Ñ(¨¸qÐ(ÔAØ—M‘M )¨TÕ2à×&Ñ& qÕ)ÙØ×!Ñ! %Õ(à×"Ñ" 5Õ)ñ	*r   N)r"   r#   r$   rz   r   r6  r<  r>  r%   r   r   r2  r2  9  s   „ Ù@òò òó,*r   r2  c                   ó:   — e Zd Zd	d„Zd„ Zd„ Zd
d„Zd„ Zd„ Zd„ Z	y)r9  Nc                 ó  — |�gt         D ]  \  }}}}||z  sŒt        | ||rd nd«       Œ  |�=|j                  j                  «       D ]  \  }}t	        | |«      sŒt        | ||«       Œ! y y |� |j                  j                  «       | _        y y ©Nr   )r+  r¼  r¡  rö   rp   r�   )	r   r4  Úsrcr-  rs   r.  r/  r  Úvals	            r   r   zValueRecord.__init__o  sŸ   € ØÐ"Ü0Aò AÑ,��d˜H fØ Ó%Ü˜D $±©¸aÕ@ðAð ˆØ #§¡× 2Ñ 2Ó 4ò ,‘H�C˜Ü" 4¨Ô-Ø Ü˜D # sÕ+ñ,ð ð
 ˆ_ØŸL™L×-Ñ-Ó/ˆD�Mð r   c                 óf   — d}| j                   j                  «       D ]  }|t        |   d   z  }Œ |S rA  )r¡  ÚkeysÚvalueRecordFormatDict)r   r~  rs   s      r   Ú	getFormatzValueRecord.getFormat|  s=   € ØˆØ—M‘M×&Ñ&Ó(ò 	=ˆDØÔ3°DÑ9¸!Ñ<Ñ<‰Fð	=àˆr   c                 ór   — d}| j                   j                  «       D ]  \  }}|sŒ	|t        |   d   z  }Œ |S rA  )r¡  rö   rF  )r   r~  rs   r+   s       r   ÚgetEffectiveFormatzValueRecord.getEffectiveFormat‚  sH   € ØˆØŸ=™=×.Ñ.Ó0ò 	A‰KˆD�%ÚØÔ"7¸Ñ"=¸aÑ"@Ñ@‘ð	Að ˆr   c                 ó8  — |€g }nt        |«      }t        d d D ]1  \  }}}}	t        | |«      sŒ|j                  |t	        | |«      f«       Œ3 g }
t        dd D ]6  \  }}}}	t        | |«      sŒt	        | |«      }|€Œ$|
j                  ||f«       Œ8 |
re|j                  ||«       |j                  «        |
D ]  \  }}|€Œ	|j                  |||¬«       Œ |j                  |«       |j                  «        y |j                  ||«       |j                  «        y )Nr   r  )rs   )
r  r+  rp   r(  r>   rà  rá  rn   râ  Ú	simpletag)r   rã  rB   Ú	valueNamert   ÚsimpleItemsr-  rs   r.  r~  ÚdeviceItemsÚdeviceÚdeviceRecords                r   rn   zValueRecord.toXML‰  s8  € Øˆ=Ø‰Kä˜u›+ˆKÜ,=¸b¸qÐ,Aò 	@Ñ(ˆD�$˜ &Ü�t˜TÕ"Ø×"Ñ" D¬'°$¸Ó*=Ð#>Õ?ð	@ð ˆÜ,=¸aÀÐ,Bò 	7Ñ(ˆD�$˜ &Ü�t˜TÕ"Ü   tÓ,�ØÑ%Ø×&Ñ&¨¨f ~Õ6ð		7ñ
 Ø×Ñ˜y¨+Ô6Ø×ÑÔØ&1ò CÑ"��lØÑ+Ø ×&Ñ& y°$¸TÐ&ÕBðCð ×Ñ˜YÔ'Ø×ÑÕà×Ñ 	¨;Ô7Ø×ÑÕr   c                 óH  — ddl m} |j                  «       D ]  \  }}t        | |t	        |«      «       Œ |D ]i  }t        |t        «      sŒ|\  }}} t        ||«      «       }	|D ]-  }
t        |
t        «      sŒ|
\  }}}|	j                  ||||«       Œ/ t        | ||	«       Œk y r8  )	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ò 	%‰DˆAˆqÜ�D˜!œS ›VÕ$ð	%àò 
	'ˆGÜ˜g¤uÔ-ØØ#*Ñ ˆD�%˜Ø+”G˜H dÓ+Ó-ˆEØ ò =�Ü! %¬Ô/ØØ*/Ñ'��v˜xØ—‘˜e V¨X°tÕ<ð	=ô
 �D˜$ Õ&ñ
	'r   c                 ó>   — | j                  |«      }|t        u r|S | S r)   r  r  s      r   r  zValueRecord.__ne__´  r  r   c                 ón   — t        | «      t        |«      k7  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   rG  rI  rn   rq   r  rï   r%   r   r   r9  r9  l  s&   „ ó0òòó ò4'ò"Bó/r   r9  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Ö   rE  Úitemsizer=   rè   rN   rz  r•  r  r  r  rž  rû  r  r  r  rÍ  r   rø  r+  r0  rF  r2  r9  r%   r   r   ú<module>rd     sß  ðÝ $ß 3Ý &Ý Û 
Û Û Û Ý ß 8Ó 8à€g×Ñ˜Ó!€à€ð	Ûà€Nð   8 *Ð,BÐ CÑDÐ ô
˜&ô 
ô0 ˜Yô  ô�Gô ô*l5�|ô l5ñ` ˆ;ˆ6�;‰;�s˜AÓÓ 1Ò$Ð $Ð$Ø€u‡{�{�3Ó× Ñ  AÒ%Ð LÐ'LÓ LÐ%ôz;�Fô z;ôz7�Vô 7ôu
�Fô u
ôpI�Vô Iò8$ò$ò$ò
(ô
F0�ô F0ôR
!=˜yô !=ôH'Ð$<ô 'ð 'Ø*ñÐ òDñ ƒñ=˜)ð =¨(°3©-ð =À5ÈÁ:ò =ó ð=òBÐ ò,ñ #›Ð ô0*˜ô 0*ôfO/�&õ O/øðs* ò 	Úð	ús   ÁE1 Å1E:Å9E: