
    	j              	          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     eC:\Users\13-19\Desktop\pythonwaitwaitwait\beer_env\Lib\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 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   >l    r   r   r   r   r1   s       r   
readUInt24OTTableReader.readUInt24Q  s>    hhq==utyy/D'DEr   c                     U R                   nUS-   nU R                  X nUS   S-  (       a  SOSn[        R                  " SXC-   5      u  nX l         U$ )Nr   r         r   r   )r   rK   r   r   )r   r   r   r   padr1   s         r   	readInt24OTTableReader.readInt24X  sQ    hhqIIc!1g%==sw/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.readUInt24Arraya  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.readTagd  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.readDatal  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__s  *    *.//$$&tvdr   c                 F    U R                   =(       a    U R                   U   $ r/   r   r   r   s     r   __getitem__OTTableReader.__getitem__x  s    84??4#88r   c                 D    U R                   =(       a    XR                   ;   $ r/   r  r  s     r   __contains__OTTableReader.__contains__{  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   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)OffsetToWriteri  c                     Xl         X l        g r/   )	subWriter
offsetSizer   r  r  s      r   r   OffsetToWriter.__init__  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    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   r4  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   )
r8  r&  r:  r=  r9  	enumerater   r  rj   r   )r   r&  	packFuncsr   r4  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	DontSharer1  r  shareExtension)r   r&  rB  r1  r  _doneWriting
setdefaulttuple)r   internedTablesrU  isExtension	dontSharer&  r   r4  s           r   rV  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 )
NTrR  zUProgram or XML editing error. Extension subtables cannot contain extensions subtablesFsortCoverageLastr  r   Coverager   )idr   r&  r8  r   reverser   rH   r  _gatherTablesappend)r   tables	extTablesdoner>  iRangerZ  
selfTablesr^  r   r4  s              r   rb  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   Fr^  r   r_  Tr  r1  r   )rc  r   rB  r&  rH   r`  _gatherGraphForHarfbuzzr2  r   r  r  pop)r   rd  obj_listrf  objidxvirtual_edges
real_linksvirtual_linksitem_idxidxr^  coverage_idxr   r4  	child_idx
offset_posr   	real_edges                     r   rk  %OTTableWriter._gatherGraphForHarfbuzzP  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
TrT  r   )	rV  rk  r   r5  rD  rc  rl   serialize_with_tagr!   )r   rE   rY  rd  rm  rf  rn  ro  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   )rV  rb  ra  r   r5  r?  rc  r   )
r   rh   rY  rd  re  rf  r   rI   rK   r{  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&  rc  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&  rc  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 )Nir   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&  rc  )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&  rc  )r   tags     r   writeTagOTTableWriter.writeTag  s;    #h 3x1}!c!}

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

.?@r   c                 P    [        XX4S9nU R                  R                  U5        U$ )N)r2  r1   )CountReferencer&  rc  )r   rI   r   r2  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&  rc  )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   r4  r   r   r   r   p1s          r   r<  $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.  r5  r?  rD  r!  rL  r  rV  rb  rk  ri   rp   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   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  iF  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   r2  setValue)r   rI   r   r2  r1   s        r   r   CountReference.__init__I  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.setValueP  sA    

yy;$K;%'C$dU)CC'r   c                 4    U R                   U R                     $ r/   r  r"   s    r   getValueCountReference.getValueX  s    zz$))$$r   c                     U R                   U R                     nUc  Sn[        [        [        S.U R
                     " U5      $ )Nr   )r   r   r   )rI   r   	packUInt8r:  r9  r2  )r   vs     r   r1  CountReference.getCountData[  s9    JJtyy!9A	:499EaHHr   )r   r2  rI   r  )
r%   r&   r'   r(   r   r   r  r  r1  r)   r*   r   r   r  r  F  s    B!D%Ir   r  c                 0    [         R                  " SU 5      $ )Nr  r   r  r0   s    r   r  r  b      ;;tU##r   c                 0    [         R                  " SU 5      $ )Nr  r  r0   s    r   r:  r:  f  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   r9  r9  j  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   r=  r=  o  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	)	BaseTableit  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__w  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.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   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convr2  
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FormatFr^  r   rS  Tr#  zexpected %d values, got %dr0   z[])#r   r   r6  r  r   r  isCountr0  r  r   r-  r  r^  rS  r   r  r#  writeFormatr  r   r  r.  r  r1  r2  r   r2  r  r  r  isLookupTyper  writer%   r7  )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.readFormatV      r   c                     g r/   r*   rt   s     r   r9  BaseTable.writeFormatY  rA  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 )Nr7  )r   r%   r   r7  begintagnewliner|   endtag)r   	xmlWriterrL   r   r   	tableNames         r   r}   BaseTable.toXML\  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   rB  xmlWriter  r  vars)r   rH  rL   r  r1   r   r4  s          r   r|   BaseTable.toXML2h  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  rc  )r   r   r   r   rL   r  r1   seqs           r   r   BaseTable.fromXMLy  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/   rI  rJ  s      r   rL  BaseTable.__ne__  rN  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   NrL  r*   )r%   r&   r'   r(   r   r!   __annotations__rL  r   r.  r)   r*   r   r   SubTableEntryrY    s    +	#x}#r   r[  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))rL  N)r-  r  r[  ).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  r[  r8  rB  )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   rd  BaseTable.getVariableAttrs  s    //r   )
__rawTabler  r/   r  )r%   r&   r'   r(   r   r  r   r  classmethodr
  r  r  r   rJ   rZ   r*  r9  r}   r|   r   rL  r  r   r[  r
   r  rd  r)   r*   r   r   r  r  t  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/   )r7  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  r7  r  s     r   r  +FormatSwitchingBaseTable.getConverterByName  s    $$T[[1$77r   c                 .    UR                  5       U l        g r/   )r   r7  r?  s     r   r*  #FormatSwitchingBaseTable.readFormat  s    '')r   c                 :    UR                  U R                  5        g r/   )r  r7  rt   s     r   r9  $FormatSwitchingBaseTable.writeFormat  s    4;;'r   Nc                 2    [         R                  XX#U5        g r/   )r  r}   )r   rH  rL   r   r   s        r   r}   FormatSwitchingBaseTable.toXML  s    d;r   c                 B    [        U R                  U R                  5      $ r/   )rd  r   r7  r"   s    r   rd  )FormatSwitchingBaseTable.getVariableAttrs  s    <<r   r7  r  )r%   r&   r'   r(   r   rg  r
  r  r  r*  r9  r}   rd  r)   r*   r   r   ri  ri    s9    9  
48*(<=r   ri  c                        \ rS rSrS rS rSrg)UInt8FormatSwitchingBaseTablei  c                 .    UR                  5       U l        g r/   )r   r7  r?  s     r   r*  (UInt8FormatSwitchingBaseTable.readFormat  s    &&(r   c                 :    UR                  U R                  5        g r/   )r  r7  rt   s     r   r9  )UInt8FormatSwitchingBaseTable.writeFormat  s    $++&r   ry  N)r%   r&   r'   r(   r*  r9  r)   r*   r   r   r{  r{    s    )'r   r{  )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  rm  r\  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  ri  r%   r  r&  getVarIndexOffsetrX  sortedr  )r  rm  r	  varAttrsr   r  r   s          r   rd  rd    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)	ValueRecordFactoryi9  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  rc  r  )r   valueFormatr  r  r   r  r  s          r   r   ValueRecordFactory.__init__<  s7    ,=(D!!tv67 -> r   c                 ,    [        U R                  5      $ r/   )r   r  r"   s    r   __len__ValueRecordFactory.__len__C  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.readValueRecordF  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   r  r  rZ   r  r  )	r   rc   rL   r  r   r  r  r1   r  s	            r   writeValueRecord#ValueRecordFactory.writeValueRecord\  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  9  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  il  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__o  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.getFormat|  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.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   )
r8  r  r   rc  rH   rE  rF  r}   rG  	simpletag)r   rH  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-  rX  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/   rI  rJ  s      r   rL  ValueRecord.__ne__  rN  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   rL  r  r)   r*   r   r   r  r  l  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   r1  r,   r9   r?   r   r  itemsizerG   r  rY   r  r  r:  r9  r=  r  ri  r{  r  r  r.  r!   rd  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%z;F z;z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/s*  		s   E5 5E?>E?