
    hk              	           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
S5      5      r\\ S3   r " S S\5      r " S S\5      r  " S S\5      r! " S S\5      r"\#" \
RH                  " SS 5      5      S:X  d   e\	R                  " S5      RJ                  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      r0\/\0S).r1S* r2\" 5       S5S+\.S,\\3   S-\\4   4S. jj5       r5/ S/Qr6S0 r7\7" 5       r8 " S1 S2\5      r9 " S3 S4\5      r:g! \ a     GN&f = f)6    )OPTIONS)Tag	bytesjoin   )DefaultTable)IntEnumN)	lru_cache)Iterator
NamedTupleOptionalTupleFrepackz: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     O/var/www/html/env/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)OTLOffsetOverflowError4   c                     Xl         g Nvalue)r   overflowErrorRecords     r   r   OTLOffsetOverflowError.__init__5   s    (
r    c                 ,    [        U R                  5      $ r0   )reprr2   r#   s    r   __str__OTLOffsetOverflowError.__str__8   s    DJJr    r1   N)r&   r'   r(   r)   r   r7   r*   r+   r    r   r-   r-   4   s    ) r    r-   c                        \ rS rSrSrSrSrSrg)RepackerState<   r   r   r   r+   N)r&   r'   r(   r)   PURE_FTHB_FTFT_FALLBACKr*   r+   r    r   r:   r:   <   s     G E Kr    r:   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)BaseTTXConverterQ   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) rD   OTTableReaderrF   getattrtable	decompile)r   datafontrD   reader
tableClasss         r   rK   BaseTTXConverter.decompileW   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)NTrE   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_REPACKERrF   logdebughave_uharfbuzzImportErrorr:   r=   r<   OTTableWriterrJ   compiletryPackingHarfbuzztryPackingFontToolsr>   r-   tryResolveOverflowr2   )
r   rM   overflowRecorduse_hb_repackstatehb_first_error_loggedlastOverflowRecordwritereoks
             r   r[   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.repackrG   z: z`hb.repack failed to serialize '%s', attempting fonttools resolutions ; the error message was: %sTF)remove_duplicate)rV   rW   rF   getAllDataUsingHarfbuzz
ValueErrorMemoryErrorhbRepackerErrortyper&   r"   warning
getAllData)r   rd   rb   re   	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       $ r0   )rq   r   rd   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)r2   rV   infor   rD   rx   ry   )r   rM   re   rc   rf   r_   rx   ry   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 r0   )rJ   toXML2)r   rd   rM   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   rC   rJ   )rG   rD   hasattrrI   rF   rJ   fromXMLpopulateDefaults)r   nameattrscontentrM   rD   rO   s          r   r   BaseTTXConverter.fromXML   sM    tW%% ==9J#DJ

46

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

##G#4r    )rJ   NT)r&   r'   r(   r)   __doc__rK   r[   r\   r]   r^   r~   r   r   r*   r+   r    r   r@   r@   Q   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)!rH   i  z5Helper class to retrieve data from an OpenType table.rL   offsetpos
localStaterF   Nc                 @    Xl         X0l        X0l        X l        X@l        g r0   r   )r   rL   r   r   rF   s        r   r   OTTableReader.__init__
  s    	$ r    c                 .    U =R                   U-  sl         g r0   r   r   counts     r   advanceOTTableReader.advance  s    Er    c                     Xl         g r0   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$ r0   )	__class__rL   r   r   rF   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      $ r0   )r   r   rL   r   rF   )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unpackrL   )r   typecode
staticSizer   newposr2   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   arrayrL   sys	byteorderbyteswaptolist)r   r   r   r   r   r   r2   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.readInt80      ~~ca~00r    c                 $    U R                  SSUS9$ )Nr   r   r   r   r   r   s     r   readInt8ArrayOTTableReader.readInt8Array3      ~~cau~==r    c                 "    U R                  SSS9$ )Nhr   r   r   r#   s    r   	readShortOTTableReader.readShort6  r   r    c                 $    U R                  SSUS9$ )Nr   r   r   r   r   s     r   readShortArrayOTTableReader.readShortArray9  r   r    c                 "    U R                  SSS9$ )Nr   r   r   r   r#   s    r   readLongOTTableReader.readLong<  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.readUInt8B  r   r    c                 $    U R                  SSUS9$ )Nr   r   r   r   r   s     r   readUInt8ArrayOTTableReader.readUInt8ArrayE  r   r    c                 "    U R                  SSS9$ )NHr   r   r   r#   s    r   
readUShortOTTableReader.readUShortH  r   r    c                 $    U R                  SSUS9$ )Nr   r   r   r   r   s     r   readUShortArrayOTTableReader.readUShortArrayK  r   r    c                 "    U R                  SSS9$ )NIr   r   r   r#   s    r   	readULongOTTableReader.readULongN  r   r    c                 $    U R                  SSUS9$ )Nr   r   r   r   r   s     r   readULongArrayOTTableReader.readULongArrayQ  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   r2   s       r   
readUInt24OTTableReader.readUInt24T  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 r0   )ranger   )r   r   _s      r   readUInt24ArrayOTTableReader.readUInt24Array[  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   rL   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$ r0   )r   rL   )r   r   r   r   r2   s        r   readDataOTTableReader.readDataf  s*    hh		#%r    c                     U R                   (       a  U R                   R                  5       O	[        5       nX#U'   X0l         g r0   r   r   dictr   r   r2   ra   s       r   __setitem__OTTableReader.__setitem__m  *    *.//$$&tvdr    c                 F    U R                   =(       a    U R                   U   $ r0   r   r   r   s     r   __getitem__OTTableReader.__getitem__r  s    84??4#88r    c                 D    U R                   =(       a    XR                   ;   $ r0   r  r  s     r   __contains__OTTableReader.__contains__u  s    :4??#::r    )rL   r   r   r   rF   )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   rH   rH     s    ?CI!
Q1>1>1>1>1>1>9 
9;r    rH   c                   &    \ rS rSrS rS rS rSrg)OffsetToWriteriy  c                     Xl         X l        g r0   )	subWriter
offsetSizer   r  r  s      r   r   OffsetToWriter.__init__z  s    "$r    c                     [        U 5      [        U5      :w  a  [        $ U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r0   )ro   NotImplementedr  r  r   s     r   __eq__OffsetToWriter.__eq__~  s?    :e$!!~~0XT__HXHX5XXr    c                 D    [        U R                  U R                  45      $ r0   )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  y  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)/rZ   i  z=Helper class to gather and assemble data for OpenType tables.Nc                 F    / U l         S U l        Xl        X l        S U l        g r0   )itemsr   r   rF   parent)r   r   rF   s      r   r   OTTableWriter.__init__  s!    
$ r    c                     U R                   (       a  U R                   R                  5       O	[        5       nX#U'   X0l         g r0   r   r  s       r   r  OTTableWriter.__setitem__  r  r    c                      U R                   U   $ r0   r  r  s     r   r  OTTableWriter.__getitem__  s    t$$r    c                     U R                   U	 g r0   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-   
packUInt24rk   r   )r   r  r   numItemsr   r-  r3   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  rk   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      $ r0   )r  r  r#   s    r   r  OTTableWriter.__hash__  s    DJJr    c                 H    U R                  U5      nU[        L a  U$ U(       + $ r0   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  $ r0   )ro   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      5       H  nXV   n[        US5      (       a  UR	                  5       XV'   M,  [        US5      (       d  M?  UR
                  R                  XS9  U(       a  Ma  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*  r  _doneWriting
setdefaulttuple)r   internedTablesrN  isExtension	dontSharer  r   r-  s           r   rO  OTTableWriter._doneWriting  s     dK0 D+.	~N

s5z"A8D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   rI   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  rI   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._gatherGraphForHarfbuzzJ  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&     [        [        S5      (       a   [        R                  " [        U5      X5      $ [        R                  " 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   repack_with_tag)rO  rd  r   r.  r=  r\  r   rm   rs  r"   r   )r   rF   rR  r]  rf  r_  rg  rh  r   rJ   rL   	tableDatas               r   rj   %OTTableWriter.getAllDataUsingHarfbuzz  s     .>$$Vt]S EI++--C  E002IKK	"  2())%%c(mTDD99T,,r    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   ri   rR  r]  r^  r_  r   rJ   rL   rt  s
             r   rq   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$ r0   )r   r   rF   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   r2   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   r2   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   r2   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 r0   )r  )r   r  r2   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 r0   )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+  r2   )CountReferencer  r\  )r   rJ   r   r+  r2   refs         r   writeCountReference!OTTableWriter.writeCountReference  s%    UtA

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

$r    c                 :    U R                   R                  U5        g r0   )r  r\  )r   rL   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   z<none>repeatIndexSubTableExtSubTable.)r  r  )r   r  rI   r   r   joinr   rF   )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   rF   NNFr   )r   N),r&   r'   r(   r)   r   r   r  r  r'  r.  r8  r=  r  rE  r  rO  r[  rd  rj   rq   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   rZ   rZ     s    G 
%"

 8  B)
&"P> @7r-BF>'4%4%4%4%4%4%!
$
A
  !
r    rZ   c                   4    \ rS rSrSrS	S jrS rS rS rSr	g)
r  iC  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 r0   )rJ   r   r+  setValue)r   rJ   r   r+  r2   s        r   r   CountReference.__init__F  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 r0   rJ   r   )r   r2   rJ   r   s       r   r  CountReference.setValueM  sA    

yy;$K;%'C$dU)CC'r    c                 4    U R                   U R                     $ r0   r  r#   s    r   getValueCountReference.getValueU  s    zz$))$$r    c                     U R                   U R                     nUc  Sn[        [        [        S.U R
                     " U5      $ )Nr   )r   r   r   )rJ   r   	packUInt8r3  r2  r+  )r   vs     r   r*  CountReference.getCountDataX  s9    JJtyy!9A	:499EaHHr    )r   r+  rJ   r  )
r&   r'   r(   r)   r   r   r  r  r*  r*   r+   r    r   r  r  C  s    B!D%Ir    r  c                 0    [         R                  " SU 5      $ )Nr  r   r~  r1   s    r   r  r  _      ;;tU##r    c                 0    [         R                  " SU 5      $ )Nr  r  r1   s    r   r3  r3  c  r  r    c                 h    SU s=::  a  S:  d   U 5       e   U 5       e[         R                  " SU 5      $ )Nr   l        r  r  r1   s    r   r2  r2  g  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  r1   s    r   r6  r6  l  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	)	BaseTableiq  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NrN   )__dict__getrN   rM   rK   rI   AttributeError)r   attrrN   rM   s       r   __getattr__BaseTable.__getattr__t  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  rN   rM   rK   iterSubTablesr2   r   )r   r   rN   rM   subtables        r   r   BaseTable.ensureDecompiled  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   ra   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)clsrN   	totalSizeconvr+  
countValues         r   r  BaseTable.getRecordSize  s{    	NND%%f-D~%%%J{{;;&(!'!4txx!?J))
**I # r    c                     U R                   $ r0   )r  r#   s    r   getConvertersBaseTable.getConverters  s    r    c                      U R                   U   $ r0   )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   rI   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   getConverterrF   r  
isinstanceintr  r   r  readisPropagated	Exceptionargsr   r#  r  update)r   rN   rM   rJ   r	  r
  re   r   s           r   rK   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 %dr1   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   rd   rM   deleteFormatrJ   r	  r2   r
  re   r  r   s              r   r[   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 r0   r+   r   rN   s     r   r$  BaseTable.readFormatS      r    c                     g r0   r+   ru   s     r   r3  BaseTable.writeFormatV  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   	xmlWriterrM   r   r   	tableNames         r   r~   BaseTable.toXMLY  s     Ddnn&=&=	=E4""h455E9,I$#r    c           
         U R                  5        H  nUR                  (       aW  [        XR                  / 5      n[	        [        U5      5       H'  nXE   nUR                  XXcR                  SU4/5        M)     Mk  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  rI   r   r   r   xmlWriter  r  vars)r   rB  rM   r	  r2   r   r-  s          r   r}   BaseTable.toXML2e  s     &&(D{{ii4s5z*A 8DMM)4gq\NS + 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r0   )r  r  xmlReadr  rI   r   r  r\  )r   r   r   r   rM   r	  r2   seqs           r   r   BaseTable.fromXMLw  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(       + $ r0   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  $ r0   )ro   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  r2   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   rI   r'  r  rU  r1  r;  )r   r	  r2   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      $ r0   )getVariableAttrsr   r#   s    r   r^  BaseTable.getVariableAttrs  s    //r    )
__rawTabler  r0   r  )r&   r'   r(   r)   r   r  r   r   classmethodr  r  r  r   rK   r[   r$  r3  r~   r}   r   rE  r  r   rU  r
   r  r^  r*   r+   r    r   r  r  q  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                     [         $ r0   )r  )r  rN   s     r   r  &FormatSwitchingBaseTable.getRecordSize  s    r    c                      U R                   nU R                  R                  U R                   / 5      $ ! [         a    / s $ f = fr0   )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   $ r0   )r  r1  r  s     r   r  +FormatSwitchingBaseTable.getConverterByName  s    $$T[[1$77r    c                 .    UR                  5       U l        g r0   )r   r1  r9  s     r   r$  #FormatSwitchingBaseTable.readFormat  s    '')r    c                 :    UR                  U R                  5        g r0   )r  r1  ru   s     r   r3  $FormatSwitchingBaseTable.writeFormat  s    4;;'r    Nc                 2    [         R                  XX#U5        g r0   )r  r~   )r   rB  rM   r   r   s        r   r~   FormatSwitchingBaseTable.toXML  s    d;r    c                 B    [        U R                  U R                  5      $ r0   )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 r0   )r   r1  r9  s     r   r$  (UInt8FormatSwitchingBaseTable.readFormat  s    &&(r    c                 :    UR                  U R                  5        g r0   )r  r1  ru   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 $ r0   )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)	ValueRecordFactoryi7  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 r0   )r  r\  r  )r   valueFormatr  r  r   r  r  s          r   r   ValueRecordFactory.__init__:  s7    ,=(D!!tv67 -> r    c                 ,    [        U R                  5      $ r0   )r   r  r#   s    r   __len__ValueRecordFactory.__len__A  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   rC   )
r  ValueRecordr   r   rG   rD   r   rI   rK   r  )r   rN   rM   r  valueRecordr   r  r  r2   rD   	subReaders              r   readValueRecord"ValueRecordFactory.readValueRecordD  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  rI   rz  r  r[   r  r  )	r   rd   rM   r  r   r  r  r2   r  s	            r   writeValueRecord#ValueRecordFactory.writeValueRecordZ  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  7  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  ij  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__m  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.getFormatz  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   r2   s       r   getEffectiveFormatValueRecord.getEffectiveFormat  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\  rI   r?  r@  r~   rA  	simpletag)r   rB  rM   	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  )	rG   rD   r  r  r(  r'  rQ  rI   r   )r   r   r   r   rM   rD   kr  elementr2   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(       + $ r0   rB  rC  s      r   rE  ValueRecord.__ne__  rG  r    c                 p    [        U 5      [        U5      :w  a  [        $ U R                  UR                  :H  $ r0   )ro   r  r  r   s     r   r  ValueRecord.__eq__  s+    :e$!!}}..r    )r  r  r0   )r&   r'   r(   r)   r   r  r  r~   r   rE  r  r*   r+   r    r   r  r  j  s&    0 4'"B/r    r  r0   );fontTools.configr   fontTools.misc.textToolsr   r   r   enumr   r   r   r   logging	functoolsr	   typingr
   r   r   r   	getLoggerr&   rV   rX   	uharfbuzzrm   callablerI   rY   rU   objectr   r+  r-   r:   r@   r   r~  itemsizerH   r  rZ   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!	
 gb(D9: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x
F x
vIV I8$$$
(
G0 G0T
!=y !=H'$< ' '* D =) =(3- =5: = =B , # 0* 0*fO/& O/i*  		s   F FF