
    Цi              	          S SK Jr  S SKJrJr  SSKJr  S SKJr  S SKrS SK	r	S SK
r
S SKrS SKJr  S SKJrJrJrJr  \R&                  " \5      rS	r S SKrS
r\\ S3   r " S S\5      r " S S\5      r " S S\5      r " S S\5      r \!" \
RD                  " SS 5      5      S:X  d   e\	R                  " S5      RF                  S:X  d   S5       e " S S\5      r$ " S S\5      r% " S S\5      r& " S S\5      r'S r(S  r)S! r*S" r+ " S# S$\5      r, " S% S&\,5      r- " S' S(\-5      r.\-\.S).r/S* r0\" 5       S5S+\,S,\\1   S-\\2   4S. jj5       r3/ S/Qr4S0 r5\5" 5       r6 " S1 S2\5      r7 " S3 S4\5      r8g! \ a     GN&f = f)6    )OPTIONS)Tag	bytesjoin   )DefaultTable)IntEnumN)	lru_cache)Iterator
NamedTupleOptionalTupleFTz:USE_HARFBUZZ_REPACKERc                        \ rS rSrS rS rSrg)OverflowErrorRecord   c                 h    US   U l         US   U l        US   U l        US   U l        US   U l        g )Nr   r            )	tableTypeLookupListIndexSubTableIndexitemName	itemIndex)selfoverflowTuples     \/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/fontTools/ttLib/tables/otBase.py__init__OverflowErrorRecord.__init__   s@    &q),Q/*1-%a(&q)    c                     [        U R                  SU R                  SU R                  SU R                  SU R
                  4	5      $ )NzLookupIndex:zSubTableIndex:z	ItemName:z
ItemIndex:)strr   r   r   r   r   r   s    r   __repr__OverflowErrorRecord.__repr__!   sG    $$ ""

 	
r   )r   r   r   r   r   N)__name__
__module____qualname____firstlineno__r   r#   __static_attributes__ r   r   r   r      s    *
r   r   c                        \ rS rSrS rS rSrg)OTLOffsetOverflowError1   c                     Xl         g Nvalue)r   overflowErrorRecords     r   r   OTLOffsetOverflowError.__init__2   s    (
r   c                 ,    [        U R                  5      $ r/   )reprr1   r"   s    r   __str__OTLOffsetOverflowError.__str__5   s    DJJr   r0   N)r%   r&   r'   r(   r   r6   r)   r*   r   r   r,   r,   1   s    ) r   r,   c                        \ rS rSrSrSrSrSrg)RepackerState9   r   r   r   r*   N)r%   r&   r'   r(   PURE_FTHB_FTFT_FALLBACKr)   r*   r   r   r9   r9   9   s     G E Kr   r9   c                   L    \ rS rSrSrS rS rS rS rS r	S r
S	 rSS
 jrSrg)BaseTTXConverterN   zGeneric 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                     SSK Jn  [        XR                  S9n[	        X0R                  5      nU" 5       U l        U R
                  R                  XB5        g)zFCreate an object from the binary data. Called automatically on access.r   otTablestableTagN) rC   OTTableReaderrE   getattrtable	decompile)r   datafontrC   reader
tableClasss         r   rJ   BaseTTXConverter.decompileT   s<    tmm<X}}5
\


V*r   c                 *   SnUR                   [           nU R                  S;   af  USL a!  [        R	                  SU R                  5        O@[
        (       d5  USL a  [        S5      eUb   e[        R	                  SU R                  5        US;   a,  [
        (       a!  U R                  S;   a  [        R                  nO[        R                  nSnSn  [        U R                  S	9nU R                  R                  Xq5        U[        R                  :X  a  U R                  Xu5      $ U[        R                  :X  a  U R                  U5      $ U[        R                  :X  a6  U R                  U5        [        R	                  S
5        [        R                  nM  ! [          ap  nSnU R#                  XU5      n	UR$                  nU	(       a   SnAM  U[        R                  L a*  [        R	                  S5        [        R                  n SnANve SnAff = f)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)NTrD   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_REPACKERrE   logdebughave_uharfbuzzImportErrorr9   r<   r;   OTTableWriterrI   compiletryPackingHarfbuzztryPackingFontToolsr=   r,   tryResolveOverflowr1   )
r   rL   overflowRecorduse_hb_repackstatehb_first_error_loggedlastOverflowRecordwritereoks
             r   rZ   BaseTTXConverter.compile]   s   .  !67==,,%		TMM $^ D(%&CDD(000IIY \)!11!''E!))E %!!&>

""60M///226QQm33333F;;m777 ,,V4II6 *//E# & * (,%,,T6HI%&WW"M///II? *55Es2   AF '$F A
F 
H"'H8HHHc                     [         R                  SU R                  5        UR                  U R                  5      $ ! [        [
        [        R                  4 ap  nU(       dP  [        U5      R                   n[        U5      S:w  a  USU 3-  n[         R                  SU R                  U5        SnUR                  SS9s S nA$ S nAff = f)Nzserializing '%s' with hb.repackrF   z: z`hb.repack failed to serialize '%s', attempting fonttools resolutions ; the error message was: %sTF)remove_duplicate)rU   rV   rE   getAllDataUsingHarfbuzz
ValueErrorMemoryErrorhbRepackerErrortyper%   r!   warning
getAllData)r   rc   ra   rd   	error_msgs        r   r[   #BaseTTXConverter.tryPackingHarfbuzz   s    	=II7G11$--@@K)9)9: 	=
 )#Aw//0	q6R<2aS)I2MM	 )-%$$e$<<!	=s   := CA%CCCc                 "    UR                  5       $ r/   )rp   r   rc   s     r   r\   $BaseTTXConverter.tryPackingFontTools   s      ""r   c                     SnX2R                   :X  a  U$ UR                   n[        R                  SU5        UR                  c  SSKJn  U" X5      nOSSKJn  U" X5      nU(       a  U$ SSKJn  U" X5      $ )Nr   z+Attempting to fix OTLOffsetOverflowError %sr   )fixLookupOverFlows)fixSubTableOverFlows)r1   rU   infor   rC   rw   rx   )r   rL   rd   rb   re   r^   rw   rx   s           r   r]   #BaseTTXConverter.tryResolveOverflow   sl    (I>B""*4#D9B6%d;BI
 	1!$77r   c                 :    U R                   R                  X5        g r/   )rI   toXML2)r   rc   rL   s      r   toXMLBaseTTXConverter.toXML   s    

&'r   c                     SSK Jn  [        U S5      (       d!  [        XPR                  5      nU" 5       U l        U R
                  R                  XX45        U R
                  R                  5         g )Nr   rB   rI   )rF   rC   hasattrrH   rE   rI   fromXMLpopulateDefaults)r   nameattrscontentrL   rC   rN   s          r   r   BaseTTXConverter.fromXML   sM    tW%% ==9J#DJ

46

##%r   c                 6    U R                   R                  US9  g )N)recurse)rI   ensureDecompiled)r   r   s     r   r   !BaseTTXConverter.ensureDecompiled   s    

##G#4r   )rI   NT)r%   r&   r'   r(   __doc__rJ   rZ   r[   r\   r]   r}   r   r   r)   r*   r   r   r?   r?   N   s1    
+Yv=,#88(&5r   r?   ir   z#Oops, file a bug against fonttools.c                       \ rS rSrSrSrS S jrS rS rS r	S	 r
S
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSr g)!rG   i  z5Helper class to retrieve data from an OpenType table.rK   offsetpos
localStaterE   Nc                 @    Xl         X0l        X0l        X l        X@l        g r/   r   )r   rK   r   r   rE   s        r   r   OTTableReader.__init__  s    	$ r   c                 .    U =R                   U-  sl         g r/   r   r   counts     r   advanceOTTableReader.advance  s    Er   c                     Xl         g r/   r   )r   r   s     r   seekOTTableReader.seek  s    r   c                     U R                  U R                  U R                  U R                  U R                  5      nU R
                  Ul        U$ r/   )	__class__rK   r   r   rE   r   r   others     r   copyOTTableReader.copy  s6    tyy$//4;;VHH	r   c                     U R                   U-   nU R                  U R                  U R                  XR                  5      $ r/   )r   r   rK   r   rE   )r   r   s     r   getSubReaderOTTableReader.getSubReader  s/    v%~~dii&--PPr   c                     U R                   nX2-   n[        R                  " SU 3U R                  X4 5      u  nX@l         U$ N>r   structunpackrK   )r   typecode
staticSizer   newposr1   s         r   	readValueOTTableReader.readValue  s>    hh!==1XJ31FGr   c                     U R                   nXCU-  -   n[        R                  " XR                  XE 5      n[        R                  S:w  a  UR                  5         XPl         UR                  5       $ Nbig)r   arrayrK   sys	byteorderbyteswaptolist)r   r   r   r   r   r   r1   s          r   	readArrayOTTableReader.readArray$  sV    hhz))Hii&;<==E!NN||~r   c                 "    U R                  SSS9$ )Nbr   r   r   r"   s    r   readInt8OTTableReader.readInt8-      ~~ca~00r   c                 $    U R                  SSUS9$ )Nr   r   r   r   r   r   s     r   readInt8ArrayOTTableReader.readInt8Array0      ~~cau~==r   c                 "    U R                  SSS9$ )Nhr   r   r   r"   s    r   	readShortOTTableReader.readShort3  r   r   c                 $    U R                  SSUS9$ )Nr   r   r   r   r   s     r   readShortArrayOTTableReader.readShortArray6  r   r   c                 "    U R                  SSS9$ )Nr   r   r   r   r"   s    r   readLongOTTableReader.readLong9  r   r   c                 $    U R                  SSUS9$ )Nr   r   r   r   r   s     r   readLongArrayOTTableReader.readLongArray<  r   r   c                 "    U R                  SSS9$ )NBr   r   r   r"   s    r   	readUInt8OTTableReader.readUInt8?  r   r   c                 $    U R                  SSUS9$ )Nr   r   r   r   r   s     r   readUInt8ArrayOTTableReader.readUInt8ArrayB  r   r   c                 "    U R                  SSS9$ )NHr   r   r   r"   s    r   
readUShortOTTableReader.readUShortE  r   r   c                 $    U R                  SSUS9$ )Nr   r   r   r   r   s     r   readUShortArrayOTTableReader.readUShortArrayH  r   r   c                 "    U R                  SSS9$ )NIr   r   r   r"   s    r   	readULongOTTableReader.readULongK  r   r   c                 $    U R                  SSUS9$ )Nr   r   r   r   r   s     r   readULongArrayOTTableReader.readULongArrayN  r   r   c                     U R                   nUS-   n[        R                  " SSU R                  X -   5      u  nX l         U$ )Nr   z>l    r   r   r   r   r1   s       r   
readUInt24OTTableReader.readUInt24Q  s>    hhq==utyy/D'DEr   c                 ^    [        U5       Vs/ s H  o R                  5       PM     sn$ s  snf r/   )ranger   )r   r   _s      r   readUInt24ArrayOTTableReader.readUInt24ArrayX  s#    +0<8<a!<888s   *c                     U R                   nUS-   n[        U R                  X 5      n[        U5      S:X  d   U5       eX l         U$ Nr   )r   r   rK   lenr   s       r   readTagOTTableReader.readTag[  sF    hhqDIIc)*5zQ%%r   c                 N    U R                   nX!-   nU R                  X# nX0l         U$ r/   )r   rK   )r   r   r   r   r1   s        r   readDataOTTableReader.readDatac  s*    hh		#%r   c                     U R                   (       a  U R                   R                  5       O	[        5       nX#U'   X0l         g r/   r   r   dictr   r   r1   r`   s       r   __setitem__OTTableReader.__setitem__j  *    *.//$$&tvdr   c                 F    U R                   =(       a    U R                   U   $ r/   r   r   r   s     r   __getitem__OTTableReader.__getitem__o  s    84??4#88r   c                 D    U R                   =(       a    XR                   ;   $ r/   r  r  s     r   __contains__OTTableReader.__contains__r  s    :4??#::r   )rK   r   r   r   rE   )Nr   N)!r%   r&   r'   r(   r   	__slots__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r
  r)   r*   r   r   rG   rG     s    ?CI!
Q1>1>1>1>1>1>9 
9;r   rG   c                   &    \ rS rSrS rS rS rSrg)OffsetToWriteriv  c                     Xl         X l        g r/   )	subWriter
offsetSizer   r  r  s      r   r   OffsetToWriter.__init__w  s    "$r   c                     [        U 5      [        U5      :w  a  [        $ U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r/   )rn   NotImplementedr  r  r   s     r   __eq__OffsetToWriter.__eq__{  s?    :e$!!~~0XT__HXHX5XXr   c                 D    [        U R                  U R                  45      $ r/   )hashr  r  r"   s    r   __hash__OffsetToWriter.__hash__  s    T^^T__566r   )r  r  N)r%   r&   r'   r(   r   r  r  r)   r*   r   r   r  r  v  s    %Y
7r   r  c                      \ rS rSrSrS+S jrS rS rS rS r	S	 r
S
 rS rS rS rS,S jrS rS rS rS-S jrS rS rS rS rS rS rS rS rS rS rS rS rS r S  r!S! r"S" r#S# r$S$ r%S% r&S.S& jr'S' r(S( r)S) r*S*r+g)/rY   i  z=Helper class to gather and assemble data for OpenType tables.Nc                 T    / U l         S U l        Xl        X l        S U l        SU l        g )N<none>)itemsr   r   rE   parentr   )r   r   rE   s      r   r   OTTableWriter.__init__  s(    
$ 	r   c                     U R                   (       a  U R                   R                  5       O	[        5       nX#U'   X0l         g r/   r   r   s       r   r  OTTableWriter.__setitem__  r  r   c                      U R                   U   $ r/   r  r  s     r   r  OTTableWriter.__getitem__  s    t$$r   c                     U R                   U	 g r/   r  r  s     r   __delitem__OTTableWriter.__delitem__  s    OOD!r   c                     SnU R                    HS  n[        US5      (       a  XR                  -  nM$  [        US5      (       a  XR                  -  nME  U[	        U5      -   nMU     U$ )z<Return the length of this table in bytes, without subtables.r   getCountDatar  )r  r   sizer  r   )r   litems      r   getDataLengthOTTableWriter.getDataLength  sZ    JJDt^,,YY{++__$D	M  r   c                    [        U R                  5      nU R                  n[        U5      n[	        U5       H  nX   n[        US5      (       d  M  UR                  S:X  a&  [        UR                  R                  U-
  5      X'   MP  UR                  S:X  a'   [        UR                  R                  U-
  5      X'   M  UR                  S:X  a&  [        UR                  R                  U-
  5      X'   M  [        UR                  5      e   [!        U5      $ ! [        R                   a'    U R                  UR                  5      n[        U5      ef = f)z;Assemble the data for this writer/table, without subtables.r  r   r   r   )listr  r   r   r   r   r  	packULongr  
packUShortr   errorgetOverflowErrorRecordr,   
packUInt24rj   r   )r   r  r   numItemsr   r-  r2   s          r   getDataOTTableWriter.getData  s   TZZ hhu:xA8Dt[))??a'(););c)ABEH__)J#-dnn.@.@3.F#G __))$..*<*<s*BCEH$T__55' !*  "<< J.2.I.I NN/+ 55HIIJs   $D;Ec                 *   [        U R                  5      n[        [        [        S.n[        U5       HS  u  p4[        US5      (       d  M  UR                  U;   a  X$R                     " S5      X'   M@  [        UR                  5      e   [        U5      $ )zFAssemble the data for this writer/table with all offset field set to 0)r   r   r   r  r   )
r1  r  r3  r6  r2  	enumerater   r  rj   r   )r   r  	packFuncsr   r-  s        r   getDataForHarfbuzz OTTableWriter.getDataForHarfbuzz  su    TZZ "zi@	 'GAt[))??i/(9!<EH$T__55 ( r   c                 ,    [        U R                  5      $ r/   )r  r  r"   s    r   r  OTTableWriter.__hash__  s    DJJr   c                 H    U R                  U5      nU[        L a  U$ U(       + $ r/   r  r  r   r   results      r   __ne__OTTableWriter.__ne__  $    U#>1vA6zAr   c                 p    [        U 5      [        U5      :w  a  [        $ U R                  UR                  :H  $ r/   )rn   r  r  r   s     r   r  OTTableWriter.__eq__  s+    :e$!!zzU[[((r   c                    [        U S5      n[        U S5      nU(       a	  U(       d  0 nU R                  n[        U5       H  u  pg[        US5      (       a  UR                  5       XV'   M*  [        US5      (       d  M=  UR                  R                  XS9  U(       a  M_  UR                  UR                  UR                  5      XV   l        M     [        U5      U l        g )N	Extension	DontSharer*  r  shareExtension)r   r  r;  r*  r  _doneWriting
setdefaulttuple)r   internedTablesrN  isExtension	dontSharer  r   r-  s           r   rO  OTTableWriter._doneWriting  s     dK0 D+.	~N

 'GAt^,,,,.{++++" ,  !y)7)B)B*EH& (" 5\
r   c                 N   SU[        U 5      '   [        U R                  5      n[        [	        U5      5      nUR                  5         [        U S5      nUnU(       a  Uc   S5       eUS 0 p2nSn[        U S5      (       a  [	        U5       HD  n	U R                  U	   n
[        U
S5      (       d  M%  [        U
R                  SS 5      S:X  d  MB  Sn  O   [        W
R                  5      U;  a  U
R                  R                  XU5        O U H  n	U R                  U	   n
[        U
S5      (       d  M%  U(       a#  U	S	:X  a  [        U
R                  SS 5      S:X  a  MO  [        U
R                  5      U;  a  U
R                  R                  XU5        M  M     UR                  U 5        g )
NTrK  zUProgram or XML editing error. Extension subtables cannot contain extensions subtablesFsortCoverageLastr  r   Coverager   )idr   r  r1  r   reverser   rH   r  _gatherTablesappend)r   tables	extTablesdoner7  iRangerS  
selfTablesrW  r   r-  s              r   r[  OTTableWriter._gatherTables  s|    RXtzz?eHo&dK0
%gfg%&/rtF !4+,,8_zz!}D+..=K'+$ % $..!-,,VE A::a=D4-- !!VDNNFD9ZG $..!-,,VE # & 	$r   c                    / n/ nUnU H  n	UR                  SSU	45        M     Sn
Sn[        U S5      (       av  [        U R                  5       H]  u  p[	        USS 5      S:X  d  M  Sn
[        U5      U;  a  UR                  XX8U5      =pOU[        U5         nUR                  U5          O   SnSn[        U R                  5       H  u  p[        US5      (       a  UnO1[        US5      (       a  XR                  -  nM:  U[        U5      -   nMJ  [        UR                  5      U;  a  UR                  R                  XX8U5      =pOU[        UR                  5         nUUR                  U4nUR                  U5        XR                  -  nM     UR                  U 5        UR                  Xg45        US	-  nX[        U 5      '   U
(       a  UR                  5         U$ )
Nr   FrW  r   rX  Tr  r*  r   )r\  r   r;  r  rH   rY  _gatherGraphForHarfbuzzr+  r   r  r  pop)r   r]  obj_listr_  objidxvirtual_edges
real_linksvirtual_linksitem_idxidxrW  coverage_idxr   r-  	child_idx
offset_posr   	real_edges                     r   rd  %OTTableWriter._gatherGraphForHarfbuzzG  s   
 !C  !Q- ! !4+,,$TZZ04.*<'+$$xt+262N2N"dm3 x (,BtH~!((6 1 	
 ,GAt[)) ~..ii'
'#d)3
$..!-'+~~'M'Mdm( 	H !DNN!34	dooy9Ii(//)J' -* 	d34A!RXr   c                 >   0 nU R                  USS9  / n/ n0 nSn/ nU R                  X4XVU5        SnU H  n	Xl        XR                  5       -   nM     / n
U H$  n	U	R	                  5       nU
R                  U5        M&     [        R                  " [        U5      X5      $ )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
TrM  r   )	rO  rd  r   r.  r=  r\  rl   serialize_with_tagr!   )r   rE   rR  r]  rf  r_  rg  rh  r   rI   rK   	tableDatas               r   ri   %OTTableWriter.getAllDataUsingHarfbuzz  s     .>$$Vt]S EI++--C  E002IKK	"  $$S]DCCr   c                    U(       a  0 nU R                  U5        / n/ n0 nU R                  X4U5        UR                  5         UR                  5         SnU H  nXgl        XgR	                  5       -   nM     U H  nXgl        XgR	                  5       -   nM     / nU H$  nUR                  5       n	UR                  U	5        M&     U H$  nUR                  5       n	UR                  U	5        M&     [        U5      $ )z+Assemble all data, including all subtables.r   )rO  r[  rZ  r   r.  r8  r\  r   )
r   rh   rR  r]  r^  r_  r   rI   rK   rt  s
             r   rp   OTTableWriter.getAllData  s    Nn-	6d3 EI++--C  EI++--C  EIKK	"  EIKK	"  r   c                 `    U R                  U R                  U R                  5      nU Ul        U$ r/   )r   r   rE   r   )r   	subwriters     r   getSubWriterOTTableWriter.getSubWriter  s-    NN4??DMMB	 	 r   c                 j    U R                   R                  [        R                  " SU 3U5      5        g r   r  r\  r   pack)r   r   r1   s      r   
writeValueOTTableWriter.writeValue  s%    

&++(ne<=r   c                     [         R                   " X5      n[        R                  S:w  a  UR                  5         U R                  R                  UR                  5       5        g r   )r   r   r   r   r  r\  tobytes)r   r   valuesas       r   
writeArrayOTTableWriter.writeArray  s=    KK)==E!JJL

!))+&r   c                     SUs=::  a  S:  d   U5       e   U5       eU R                   R                  [        R                  " SU5      5        g )Ni   z>br}  r   r1   s     r   	writeInt8OTTableWriter.writeInt8  sB    u"s")E)")E)"

&++dE23r   c                 (    U R                  SU5        g )Nr   r  r   r  s     r   writeInt8ArrayOTTableWriter.writeInt8Array      V$r   c                     SUs=::  a  S:  d   U5       e   U5       eU R                   R                  [        R                  " SU5      5        g )Ni    z>hr}  r  s     r   
writeShortOTTableWriter.writeShort  sB    &&--&--&

&++dE23r   c                 (    U R                  SU5        g )Nr   r  r  s     r   writeShortArrayOTTableWriter.writeShortArray  r  r   c                 d    U R                   R                  [        R                  " SU5      5        g )Nz>ir}  r  s     r   	writeLongOTTableWriter.writeLong      

&++dE23r   c                 (    U R                  SU5        g )Nr   r  r  s     r   writeLongArrayOTTableWriter.writeLongArray  r  r   c                     SUs=::  a  S:  d   U5       e   U5       eU R                   R                  [        R                  " SU5      5        g )Nr      >Br}  r  s     r   
writeUInt8OTTableWriter.writeUInt8  sB    EC&&&&

&++dE23r   c                 (    U R                  SU5        g )Nr   r  r  s     r   writeUInt8ArrayOTTableWriter.writeUInt8Array  r  r   c                     SUs=::  a  S:  d   U5       e   U5       eU R                   R                  [        R                  " SU5      5        g )Nr   i   >Hr}  r  s     r   writeUShortOTTableWriter.writeUShort  sB    E#G#*U*#*U*#

&++dE23r   c                 (    U R                  SU5        g )Nr   r  r  s     r   writeUShortArrayOTTableWriter.writeUShortArray  r  r   c                 d    U R                   R                  [        R                  " SU5      5        g )N>Ir}  r  s     r   
writeULongOTTableWriter.writeULong  r  r   c                 (    U R                  SU5        g )Nr   r  r  s     r   writeULongArrayOTTableWriter.writeULongArray  r  r   c                     SUs=::  a  S:  d   U5       e   U5       e[         R                  " SU5      nU R                  R                  USS  5        g )Nr      z>Lr   r   r~  r  r\  )r   r1   r   s      r   writeUInt24OTTableWriter.writeUInt24  sM    E%I%,u,%,u,%KKe$

!AB% r   c                 8    U H  nU R                  U5        M     g r/   )r  )r   r  r1   s      r   writeUInt24ArrayOTTableWriter.writeUInt24Array  s    EU# r   c                     [        U5      R                  5       n[        U5      S:X  d   U5       eU R                  R	                  U5        g r   )r   r  r   r  r\  )r   tags     r   writeTagOTTableWriter.writeTag  s;    #h 3x1}!c!}

#r   c                 L    U R                   R                  [        X5      5        g r/   )r  r\  r  r  s      r   writeSubTableOTTableWriter.writeSubTable
  s    

.?@r   c                 P    [        XX4S9nU R                  R                  U5        U$ )N)r+  r1   )CountReferencer  r\  )r   rI   r   r+  r1   refs         r   writeCountReference!OTTableWriter.writeCountReference  s%    UtA

#
r   c                 h    [         R                  " U4U-   6 nU R                  R                  U5        g r/   r  )r   formatr  rK   s       r   writeStructOTTableWriter.writeStruct  s)    {{VI./

$r   c                 :    U R                   R                  U5        g r/   )r  r\  )r   rK   s     r   	writeDataOTTableWriter.writeData  s    

$r   c                    S =n=n=pEU R                   S:X  a  UR                  nGOU R                   S:X  a  U R                  nUR                  nGO[        USS5      n[        US5      (       a  UR                  nU R                   S:X  a$  U R                  R                  nU R                  nGO9U R                   S:X  a7  U R                  R                  R                  nU R                  R                  nOSR                  U R                   U/5      nU R                  nU(       aR  UR                   S	;  aB  SR                  UR                   U/5      nUR                  nU(       a  UR                   S	;  a  MB  U(       ai  UR                   S:X  a7  UR                  R                  R                  nUR                  R                  nO"UR                  R                  nUR                  n[        U R                  X#XE45      $ )
N
LookupListLookupr   r  repeatIndexSubTableExtSubTable.)r  r  )r   r  rH   r   r   joinr   rE   )r   r-  r   r   r   r   p1s          r   r5  $OTTableWriter.getOverflowErrorRecord  s   AEEE-E(99$"..OYY(""..O ,,MtVX6Ht]++ ,,	yyJ&"&++"9"9 $ 0 0m+"&++"4"4"@"@ $ 7 788TYY$9:[[RWW,GG"xx((;<HB RWW,GG ww-/*,))*:*:*F*F(*		(=(=*,))*?*?(*"]]OHP
 	
r   )r  r   r   r   r   rE   NNFr   )r   N),r%   r&   r'   r(   r   r   r  r  r'  r.  r8  r=  r  rE  r  rO  r[  rd  ri   rp   rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r5  r)   r*   r   r   rY   rY     s    G 
%"

 8  B)
%"N> @7rD<F>'4%4%4%4%4%4%!
$
A
  !
r   rY   c                   4    \ rS rSrSrS	S jrS rS rS rSr	g)
r  i=  z8A reference to a Count value, not a count of references.Nc                 R    Xl         X l        X0l        Ub  U R                  U5        g g r/   )rI   r   r+  setValue)r   rI   r   r+  r1   s        r   r   CountReference.__init__@  s(    
		MM%  r   c                 p    U R                   nU R                  nX#   c  XU'   g X#   U:X  d   X2U   U45       eg r/   rI   r   )r   r1   rI   r   s       r   r  CountReference.setValueG  sA    

yy;$K;%'C$dU)CC'r   c                 4    U R                   U R                     $ r/   r  r"   s    r   getValueCountReference.getValueO  s    zz$))$$r   c                     U R                   U R                     nUc  Sn[        [        [        S.U R
                     " U5      $ )Nr   )r   r   r   )rI   r   	packUInt8r3  r2  r+  )r   vs     r   r*  CountReference.getCountDataR  s9    JJtyy!9A	:499EaHHr   )r   r+  rI   r  )
r%   r&   r'   r(   r   r   r  r  r*  r)   r*   r   r   r  r  =  s    B!D%Ir   r  c                 0    [         R                  " SU 5      $ )Nr  r   r~  r0   s    r   r  r  Y      ;;tU##r   c                 0    [         R                  " SU 5      $ )Nr  r  r0   s    r   r3  r3  ]  r  r   c                 h    SU s=::  a  S:  d   U 5       e   U 5       e[         R                  " SU 5      $ )Nr   l        r  r  r0   s    r   r2  r2  a  s6    ##*U*#*U*#;;tU##r   c                 n    SU s=::  a  S:  d   U 5       e   U 5       e[         R                  " SU 5      SS  $ )Nr   r  r  r   r  r0   s    r   r6  r6  f  s=    !	!(5(!(5(!;;tU#AB''r   c                       \ rS rSrSrS rSS jrS r\S 5       r	S r
S rSS
 jrS rS rS rS rSS jrS rS rS rS r " S S\5      rS\\   4S jrS rSrg	)	BaseTableik  z0Generic base class for all OpenType (sub)tables.c                     U R                   R                  S5      nU(       a,  U ?U R                  nU ?U R	                  X#5        [        X5      $ [        U5      eNrM   )__dict__getrM   rL   rJ   rH   AttributeError)r   attrrM   rL   s       r   __getattr__BaseTable.__getattr__n  sN    ""8,99D	NN6(4&&T""r   c                     U R                   R                  S5      nU(       a!  U ?U R                  nU ?U R	                  X#5        U(       a3  U R                  5        H  nUR                  R                  U5        M      g g r  )r  r  rM   rL   rJ   iterSubTablesr1   r   )r   r   rM   rL   subtables        r   r   BaseTable.ensureDecompiledy  se    ""8,99D	NN6( ..0//8 1 r   c                     SU R                   ;   a<  U R                   R                  5       nU R                   S   R                  5       US'   U$ U R                   $ r  )r  r   )r   r`   s     r   __getstate__BaseTable.__getstate__  sL     t}}$MM&&(E"mmH5::<E(OL}}r   c                    SnU R                    Hs  nUR                  U5      nU[        L a  [        s  $ SnUR                  (       a4  UR                  U;   a  XR                     UR                  -   nO[        s  $ X$U-  -  nMu     U$ )Nr   r   )
convertersgetRecordSizer  repeataux)clsrM   	totalSizeconvr+  
countValues         r   r  BaseTable.getRecordSize  s{    	NND%%f-D~%%%J{{;;&(!'!4txx!?J))
**I # r   c                     U R                   $ r/   )r  r"   s    r   getConvertersBaseTable.getConverters  s    r   c                      U R                   U   $ r/   )convertersByNamer  s     r   getConverterByNameBaseTable.getConverterByName  s    $$T**r   Nc                 r   U R                  5        GHT  nUR                  (       a  [        XR                  5      (       d  [	        XR                  / 5        [        [        XR                  5      5      UR                  -
  n U R                  UR                  5      n[	        XR                  U5        M  UR                  (       a(  [        UR                  S U R                  5      (       d  M  [        XR                  5      (       a  M  [        US5      (       a  [	        XR                  S 5        [        US5      (       d  GM4  [	        XR                  UR                  5        GMW     g ! [         aA    U(       a5  UR                  U;   a!  XR                     R                  U5         GM   GM   GM  f = f)NwriteNullOffsetDEFAULT)r  r  r   r   setattrr   rH   r  r  KeyErrorr  evalr  r  )r   
propagatorr	  r
  
count_convs        r   r   BaseTable.populateDefaults  s/   &&(D{{tYY//D))R0 yy!9:TXXE
E!%!8!8!EJD++z: 88D4$G$G4++4!233D))T2 4++D))T\\:1 )   E!dkkZ&?";;/88DD '@zEs   1E++>F65F6c                    U R                  U5        0 nX0l        U R                  5        GH  nUR                  S:X  a  UR	                  UR
                  US   5      nUR                  S:X  a  UR	                  UR
                  US   5      nUR                  S:X  a  UR	                  US   5      nUR                  S:X  a  UR	                  UR
                  US   5      n UR                  (       a  [        UR                  [        5      (       a  UR                  nO-UR                  U;   a  X4R                     nOXR                     nXTR                  -  nUR                  XX55      X4R                  '   GMO  UR                  (       a  [        UR                  S U5      (       d  GM  UR                  XU5      X4R                  '   UR                  (       a  X4R                     XR                  '   GM  GM     [!        U S	5      (       a  U R#                  X25        U ?g U R$                  R'                  U5        U ?g ! [         a'  nUR                  nUR                  U4-   Ul        e S nAff = f)
Nr  
LookupTyper  ExtensionLookupTypeFeatureParams
FeatureTag	SubStruct	MorphTypepostRead)
readFormat_BaseTable__rawTabler  r   getConverterrE   r  
isinstanceintr  r   r  readisPropagated	Exceptionargsr   r#  r  update)r   rM   rL   rI   r	  r
  rd   r   s           r   rJ   BaseTable.decompile  s   &&(DyyJ&((%:MNyyM)((%@U:VWyyO+(()=>yyK'((%:LM;;!$++s33%)[[
-%*;;%7
 &,KK%8
((*J'+~~fE'VE))$xxTXXtU(C(C '+yyu'EE))$((,1)),<yy) )1 )> 4$$MM%& O MM  'O  yy4')s&    BH=9-H=)A	H==
I."I))I.c                 F	   U R                  5         [        U S5      (       a8  [        U S5      (       + nU R                  U5      nU=(       a    [        U S5      nOSnU R                  R	                  5       nU R                  5        Hi  nUR                  (       d  M  UR                  (       d  M)  UR                  UR                  5      n[        U[        5      (       d  M[  XaUR                  '   Mk     [        U S5      (       a  SUl        [        U S5      (       a  SUl        [        U R                  S5      (       a(  US   R                  U R                  R                   5        U R#                  U5        U R                  5        GH  nUR                  UR                  5      nUR$                  (       a  Uc  / n['        U5      UR(                  -
  n[        UR$                  [*        5      (       a9  ['        U5      UR$                  :X  d   S	UR$                  ['        U5      4-  5       eOBUR$                  U;   a  [        XER$                  US
9  OXR$                     R                  U5         UR-                  XXF5        M  UR                  (       a  [        U[        5      (       aA  Un	UR2                  U	l        UR7                  U	5        U	R9                  5       XER                  '   O4UR;                  XER                  UR2                  5      n	S XER                  '   UR                  (       a  XUR                  '   GM  GM  UR<                  (       aX  UR                  U;  a  S XER                  '   UR;                  XER                  UR2                  XER                     5      n	XS'   GM%  UR(                  (       a  [?        UR(                  S U5      (       d  GMU   URA                  XXF5        UR                  (       d  GM|  XaUR                  '   GM     U(       a  U ?"g g ! [.         a(  nUR0                  UR                  S-   4-   Ul        e S nAff = f! [.         a@  nUb  UR                  RB                  OUR                  n
UR0                  U
4-   Ul        e S nAff = f)NpreWriteFormatFrW  r   rL  Tr  zexpected %d values, got %dr0   z[])#r   r   r0  r  r   r  isCountr*  r  r   r'  r  rW  rL  r   r  r  writeFormatr  r   r  r(  r  r+  r,  r   r+  r  r  r  isLookupTyper  writer%   r1  )r   rc   rL   deleteFormatrI   r	  r1   r
  rd   r  r   s              r   rZ   BaseTable.compile  s    4$$&tX66LMM$'E'CGD(,CL LMM&&(E &&(D||| 1 1 1		$)),e^44(-499%	 ) 4+,,&'F#4%%#F4>><00< ))$..*C*CD &&(DII		E {{=E Z$((2
dkk3//u:4 6RE
V 7 4 [[E)"5++ZH ;;'00<OOF%?  e^44C#CH$$S)'*||~E))$ 44UIItWC'+E))$$$(+499% %"" 99E)'+E))$0099doouYY7G (+|$88D4$?$?JJvU:
 $$$(-499% )B  [ ! VVtyy4'7&99AFL ! 7<7H5??33diiDVVtg-AFs0   /P!Q!
Q+#QQ
R  ;RR c                     g r/   r*   r   rM   s     r   r$  BaseTable.readFormatM      r   c                     g r/   r*   rt   s     r   r3  BaseTable.writeFormatP  r;  r   c                 8   U(       a  UOU R                   R                  nUc  / n[        U S5      (       a  USU R                  4/-   nUR	                  XS5        UR                  5         U R                  X5        UR                  U5        UR                  5         g )Nr1  )r   r%   r   r1  begintagnewliner|   endtag)r   	xmlWriterrL   r   r   	tableNames         r   r}   BaseTable.toXMLS  s     Ddnn&=&=	=E4""h455E9,I$#r   c           
         U R                  5        H  nUR                  (       aL  [        XR                  / 5      n[	        U5       H%  u  pVUR                  XXcR                  SU4/5        M'     M`  UR                  (       a'  [        UR                  S [        U 5      5      (       d  M  [        XR                  S 5      nUR                  XXCR                  / 5        M     g )Nindex)	r  r  rH   r   r;  xmlWriter  r  vars)r   rB  rL   r	  r1   r   r-  s          r   r|   BaseTable.toXML2_  s     &&(D{{ii4(/GAMM)4gq\NS  0 88D4d$D$D))T iuiiD )r   c                 6    U R                  U5      nUR                  X#U5      nUR                  bC  [	        XR
                  S 5      nUc  / n[        XR
                  U5        UR                  U5        g [        XR
                  U5        g ! [         a    e f = fr/   )r  r  xmlReadr  rH   r   r  r\  )r   r   r   r   rL   r	  r1   seqs           r   r   BaseTable.fromXMLp  s    	**40D UT2 ;;"$		40C{ii-JJuD))U+  		s   B Bc                 H    U R                  U5      nU[        L a  U$ U(       + $ r/   rB  rC  s      r   rE  BaseTable.__ne__  rG  r   c                     [        U 5      [        U5      :w  a  [        $ U R                  5         UR                  5         U R                  UR                  :H  $ r/   )rn   r  r   r  r   s     r   r  BaseTable.__eq__  sC    :e$!! }}..r   c                   B    \ rS rSr% Sr\\S'   S\S'   Sr\\	   \S'   Sr
g)	BaseTable.SubTableEntryi  zSee BaseTable.iterSubTables()r   r  r1   NrF  r*   )r%   r&   r'   r(   r   r!   __annotations__rF  r   r(  r)   r*   r   r   SubTableEntryrS    s    +	#x}#r   rU  returnc              #   >  ^ ^#    T R                  5        H  nUR                  m[        T TS5      nUc  M!  [        U[        5      (       a  T R                  TU5      v   ML  [        U[        5      (       d  Mc  UU 4S j[        U5       5        Sh  vN   M     g N	7f)a  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   v   >#    U  H.  u  p[        U[        5      (       d  M  TR                  TX!S 9v   M0     g7f))rF  N)r'  r  rU  ).0r   r  r   r   s      r   	<genexpr>*BaseTable.iterSubTables.<locals>.<genexpr>  s6       0!!Y/ 9D&&tQ&8 0s   99)r  r   rH   r'  r  rU  r1  r;  )r   r	  r1   r   s   `  @r   r  BaseTable.iterSubTables  s      &&(D99DD$-E}%++((u55E4(( )% 0   )s   A0B8BB
Bc                 ,    [        U R                  5      $ r/   )getVariableAttrsr   r"   s    r   r^  BaseTable.getVariableAttrs  s    //r   )
__rawTabler  r/   r  )r%   r&   r'   r(   r   r  r   r   classmethodr  r  r  r   rJ   rZ   r$  r3  r}   r|   r   rE  r  r   rU  r
   r  r^  r)   r*   r   r   r  r  k  s    :	#	9  +;6(TcJ
E",$B/$
 $x6 40r   r  c                   P    \ rS rSrSr\S 5       rS rS rS r	S r
SS	 jrS
 rSrg)FormatSwitchingBaseTablei  zrMinor specialization of BaseTable, for tables that have multiple
formats, eg. CoverageFormat1 vs. CoverageFormat2.c                     [         $ r/   )r  )r  rM   s     r   r  &FormatSwitchingBaseTable.getRecordSize  s    r   c                      U R                   nU R                  R                  U R                   / 5      $ ! [         a    / s $ f = fr/   )r1  r  r  r  )r   fmts     r   r  &FormatSwitchingBaseTable.getConverters  sE    	++C ""4;;33  	 I	s   4 AAc                 :    U R                   U R                     U   $ r/   )r  r1  r  s     r   r  +FormatSwitchingBaseTable.getConverterByName  s    $$T[[1$77r   c                 .    UR                  5       U l        g r/   )r   r1  r9  s     r   r$  #FormatSwitchingBaseTable.readFormat  s    '')r   c                 :    UR                  U R                  5        g r/   )r  r1  rt   s     r   r3  $FormatSwitchingBaseTable.writeFormat  s    4;;'r   Nc                 2    [         R                  XX#U5        g r/   )r  r}   )r   rB  rL   r   r   s        r   r}   FormatSwitchingBaseTable.toXML  s    d;r   c                 B    [        U R                  U R                  5      $ r/   )r^  r   r1  r"   s    r   r^  )FormatSwitchingBaseTable.getVariableAttrs  s    <<r   r1  r  )r%   r&   r'   r(   r   ra  r  r  r  r$  r3  r}   r^  r)   r*   r   r   rc  rc    s9    9  
48*(<=r   rc  c                        \ rS rSrS rS rSrg)UInt8FormatSwitchingBaseTablei  c                 .    UR                  5       U l        g r/   )r   r1  r9  s     r   r$  (UInt8FormatSwitchingBaseTable.readFormat  s    &&(r   c                 :    UR                  U R                  5        g r/   )r  r1  rt   s     r   r3  )UInt8FormatSwitchingBaseTable.writeFormat  s    $++&r   rs  N)r%   r&   r'   r(   r$  r3  r)   r*   r   r   ru  ru    s    )'r   ru  )uint16uint8c                 P     [         U    $ ! [         a    [        SU < 35      ef = f)NzUnsupported format type: )formatSwitchingBaseTablesr  	TypeError)
formatTypes    r    getFormatSwitchingBaseTableClassr    s7    D(44 D3J>BCCDs    %r  rg  rV  c                    [        U [        5      (       d  [        U 5      e[        U [        5      (       a+  Uc  [        SU R                   35      eU R
                  U   nOU R
                  nSU;  a  g0 nUR                  5        H  u  pEUR                  5       nUc  M  XcU'   M      [        [        X3R                  S95      $ )zReturn 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~  rc  r%   r  r  getVarIndexOffsetrQ  sortedr  )r  rg  r  varAttrsr   r	  r   s          r   r^  r^    s     c9%%n#/00;Ecll^TUU))#.
))
Z'H &&(
'')#TN ) &:&:;<<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   )r  	Reserved8r   r   c                  6    0 n [          H  u  pp4XU4X'   M     U $ r/   )valueRecordFormat)dmaskr   isDevicesigneds        r   
_buildDictr  &  s'    
A(9$H&( ):Hr   c                   0    \ rS rSrSrS rS rS rS rSr	g)	ValueRecordFactoryi0  z6Given a format code, this object convert ValueRecords.c                 p    / n[          H$  u  p4pVX-  (       d  M  UR                  XEU45        M&     X l        g r/   )r  r\  r  )r   valueFormatr  r  r   r  r  s          r   r   ValueRecordFactory.__init__3  s7    ,=(D!!tv67 -> r   c                 ,    [        U R                  5      $ r/   )r   r  r"   s    r   __len__ValueRecordFactory.__len__:  s    4;;r   c                 T   U R                   nU(       d  g [        5       nU H  u  pVnU(       a  UR                  5       nOUR                  5       nU(       aB  U(       a9  SSKJn	  UR                  U5      n
[        X5      " 5       nUR                  X5        OS n[        XEU5        M     U$ Nr   rB   )
r  ValueRecordr   r   rF   rC   r   rH   rJ   r  )r   rM   rL   r  valueRecordr   r  r  r1   rC   	subReaders              r   readValueRecord"ValueRecordFactory.readValueRecord=  s    !m&,"DF((*))+* & 3 3E :I#H35EOOI4 EKu- '- r   c                 F   U R                    H  u  pEn[        X4S5      nU(       aM  U(       a3  UR                  5       nUR                  USS9  UR	                  X5        MS  UR                  S5        Mf  U(       a  UR                  U5        M  UR                  U5        M     g )Nr   r   )r  )r  rH   rz  r  rZ   r  r  )	r   rc   rL   r  r   r  r  r1   r  s	            r   writeValueRecord#ValueRecordFactory.writeValueRecordS  s    &*kk"DFKq1E & 3 3 5I((q(AMM)2&&q)!!%(""5) '2r   )r  N)
r%   r&   r'   r(   r   r   r  r  r  r)   r*   r   r   r  r  0  s    @ ,*r   r  c                   F    \ rS rSrSS jrS rS rSS jrS rS r	S	 r
S
rg)r  ic  Nc                 <   Ubv  [          H&  u  p4pVX-  (       d  M  [        XU(       a  S OS5        M(     UbB  UR                  R                  5        H#  u  px[	        X5      (       d  M  [        XU5        M%     g g Ub   UR                  R                  5       U l        g g Nr   )r  r  r  r  r   r   )	r   r  srcr  r   r  r  r  vals	            r   r   ValueRecord.__init__f  s    "0A,H%%Da@ 1B  # 2 2 4HC"4-- Ds+ !5 
 _LL--/DM r   c                 j    SnU R                   R                  5        H  nU[        U   S   -  nM     U$ r  )r  keysvalueRecordFormatDict)r   r  r   s      r   	getFormatValueRecord.getFormats  s8    MM&&(D3D9!<<F )r   c                     SnU R                   R                  5        H  u  p#U(       d  M  U[        U   S   -  nM     U$ r  )r  r  r  )r   r  r   r1   s       r   getEffectiveFormatValueRecord.getEffectiveFormaty  sA    ==..0KDu"7"=a"@@ 1 r   c                 P   Uc  / nO[        U5      n[        S S  H4  u  pgp[        X5      (       d  M  UR                  U[	        X5      45        M6     / n
[        SS  H:  u  pgp[        X5      (       d  M  [	        X5      nUc  M(  U
R                  X{45        M<     U
(       ac  UR                  X55        UR                  5         U
 H  u  p|Uc  M
  UR                  XUS9  M     UR                  U5        UR                  5         g UR                  X55        UR                  5         g )Nr   r  )r   )
r1  r  r   r\  rH   r?  r@  r}   rA  	simpletag)r   rB  rL   	valueNamer   simpleItemsr  r   r  r  deviceItemsdevicedeviceRecords                r   r}   ValueRecord.toXML  s   =Ku+K,=bq,A(Dt""""D'$*=#>? -B ,=a,B(Dt"" ,%&&~6	 -C
 y6&1"+ &&yT&B '2 Y'	7r   c                 \   SSK Jn  UR                  5        H  u  pg[        X[	        U5      5        M     U Hr  n[        U[        5      (       d  M  Uu  pn[        XQ5      " 5       n	U H1  n
[        U
[        5      (       d  M  U
u  pnU	R                  XX5        M3     [        XU	5        Mt     g r  )	rF   rC   r  r  r(  r'  rQ  rH   r   )r   r   r   r   rL   rC   kr  elementr1   elem2name2attrs2content2s                 r   r   ValueRecord.fromXML  s    KKMDADSV$ "Ggu--#* DH+-E !%//*/'xeX<	 !
 D& r   c                 H    U R                  U5      nU[        L a  U$ U(       + $ r/   rB  rC  s      r   rE  ValueRecord.__ne__  rG  r   c                 p    [        U 5      [        U5      :w  a  [        $ U R                  UR                  :H  $ r/   )rn   r  r  r   s     r   r  ValueRecord.__eq__  s+    :e$!!}}..r   )r  r  r/   )r%   r&   r'   r(   r   r  r  r}   r   rE  r  r)   r*   r   r   r  r  c  s&    0 4'"B/r   r  r/   )9fontTools.configr   fontTools.misc.textToolsr   r   r   enumr   r   r   r   logging	functoolsr	   typingr
   r   r   r   	getLoggerr%   rU   rW   	uharfbuzzrl   rX   rT   objectr   r+  r,   r9   r?   r   r~  itemsizerG   r  rY   r  r  r3  r2  r6  r  rc  ru  r}  r  r(  r!   r^  r  r  r  r  r  r*   r   r   <module>r     s   $ 3 &  
     8 8!	N  8*,B CD 
& 
0 Y  G *l5| l5` 6;;sA1$ $${{3  A% L'L L%q;F q;h7V 7u
F u
pIV I8$$$
(
F0 F0R
!=y !=H'$< ' '* D =) =(3- =5: = =B , # 0* 0*fO/& O/a*  		s   E5 5E?>E?