+
    f7i  c                   s    ^ RI Ht ^ RIHtHt ^RIHt ^ RIHt ^ RIt^ RI	t	^ RI
t
^ RIt^ RIHt ^ RIHtHtHtHt ]P&                  ! ]4      tRt ^ RItR	t]] R
2,          t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ]!! ]
PD                  ! R^ 4      4      ^8X  g   Q h]	P                  ! R4      PF                  ^8X  g   Q R4       h ! R R]4      t$ ! R R]4      t% ! R R]4      t& ! R R]4      t'R t(R t)R t*R  t+ ! R! R"]4      t, ! R# R$],4      t- ! R% R&]-4      t.R']-R(]./t/R) t0]! 4       R1R* R+ ll4       t1. R2Ot2R, t3]3! 4       t4 ! R- R.]4      t5 ! R/ R0]4      t6R#   ] d     EL$i ; i)3    )OPTIONS)Tag	bytesjoin)DefaultTable)IntEnumN)	lru_cache)Iterator
NamedTupleOptionalTupleFTz:USE_HARFBUZZ_REPACKERc                   s,   a  ] tR t^t o R tR tRtV tR# )OverflowErrorRecordc                s    V^ ,          V n         V^,          V n        V^,          V n        V^,          V n        V^,          V n        R# )r    N)	tableTypeLookupListIndexSubTableIndexitemName	itemIndex)selfZoverflowTuple   &&D/usr/lib64/python3.14/site-packages/fontTools/ttLib/tables/otBase.py__init__ZOverflowErrorRecord.__init__   s@    &q),Q/*1-%a(&q)    c                s    \        V P                  R V P                  RV P                  RV P                  RV P
                  3	4      # )zLookupIndex:zSubTableIndex:z	ItemName:z
ItemIndex:)strr   r   r   r   r   r      &r   __repr__ZOverflowErrorRecord.__repr__!   sG    $$ ""

 	
r   )r   r   r   r   r   N)__name__
__module____qualname____firstlineno__r   r   __static_attributes____classdictcell____classdict__   @r   r   r      s     *
 
r   r   c                   s,   a  ] tR t^1t o R tR tRtV tR# )OTLOffsetOverflowErrorc                    Wn         R # Nvalue)r   overflowErrorRecordr   r   r   ZOTLOffsetOverflowError.__init__2   s    (
r   c                ,    \        V P                  4      # r%   )Zreprr'   r   r   r   __str__ZOTLOffsetOverflowError.__str__5   s    DJJr   r&   N)r   r   r   r   r   r*   r   r   r    r"   r   r#   r#   1   s     )   r   r#   c                   s"    ] tR t^9t^t^t^tRtR# )RepackerState N)r   r   r   r   PURE_FTHB_FTFT_FALLBACKr   r,   r   r   r+   r+   9   s     G E Kr   r+   c                   sX   a  ] tR t^Nt o RtR tR tR tR tR t	R t
R tRR	 ltR
tV tR# )BaseTTXConverterzGeneric 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    ^RI Hp \        WP                  R7      p\	        W0P                  4      pV! 4       V n        V P
                  P                  WB4       R# )zFCreate an object from the binary data. Called automatically on access.otTablestableTagN) r2   OTTableReaderr4   getattrtable	decompile)r   datafontr2   reader
tableClass   &&&   r   r9   ZBaseTTXConverter.decompileT   s<    tmm<X}}5
\


V*r   c                s^   RpVP                   \        ,          pV P                  R
9   dk   VRJ d"   \        P	                  RV P                  4       MC\
        '       g8   VRJ d   \        R4      hVe   Q h\        P	                  RV P                  4       VR9   d/   \
        '       d#   V P                  R
9   d   \        P                  pM\        P                  pRpRp  \        V P                  R7      pV P                  P                  Wq4       V\        P                  8X  d   V P                  Wu4      # V\        P                  8X  d   V P                  V4      # V\        P                  8X  d9   V P                  V4       \        P	                  R4       \        P                  pK  K    \          dv   pRpT P#                  YT4      p	TP$                  pT	'       d    Rp?EK  T\        P                  J d-   \        P	                  R	4       \        P                  p Rp?EKH  h Rp?ii ; i)z=Compiles the table into binary. Called automatically on save.NFz>hb.repack disabled, compiling '%s' with pure-python serializerTzNo module named 'uharfbuzz'z?uharfbuzz not found, compiling '%s' with pure-python serializerr3   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.)ZGSUBZGPOS)NT)ZcfgUSE_HARFBUZZ_REPACKERr4   logdebughave_uharfbuzzImportErrorr+   r.   r-   OTTableWriterr8   compiletryPackingHarfbuzztryPackingFontToolsr/   r#   tryResolveOverflowr'   )
r   r;   overflowRecordZuse_hb_repackstatehb_first_error_loggedlastOverflowRecordwritereok
   &&        r   rE   Z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 8 * (,%,,T6HI%&WW"M///II? *55Es2    AF, 7%F, AF, ,H,7(H'&9H'&H''H,c                s    \         P                  R V P                  4       VP                  V P                  4      #   \        \
        \        P                  3 dz   pT'       gV   \        T4      P                   p\        T4      R8w  d   TRT 2,          p\         P                  RT P                  T4       RpTP                  RR7      u Rp?# Rp?ii ; i)zserializing '%s' with hb.repackr5   z: z`hb.repack failed to serialize '%s', attempting fonttools resolutions ; the error message was: %sTF)remove_duplicateN)r@   rA   r4   getAllDataUsingHarfbuzz
ValueErrorZMemoryErrorhbZRepackerErrortyper   r   Zwarning
getAllData)r   rM   rK   rN   Z	error_msgs   &&&  r   rF   Z#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                s"    VP                  4       # r%   )rV   r   rM   r   r   rG   Z$BaseTTXConverter.tryPackingFontTools   s      ""r   c                s    ^ pW2P                   8X  d   V# VP                   p\        P                  RV4       VP                  f   ^RIHp V! W4      pM^RIHp V! W4      pV'       d   V# ^RIHp V! W4      # )r    z+Attempting to fix OTLOffsetOverflowError %s)fixLookupOverFlows)fixSubTableOverFlows)r'   r@   Zinfor   r2   rX   rY   )r   r;   rN   rL   rO   rI   rX   rY   s   &&&&    r   rH   Z#BaseTTXConverter.tryResolveOverflow   sl    (I>B""*4#D9B6%d;BI
 	1!$77r   c                s<    V P                   P                  W4       R # r%   )r8   toXML2)r   rM   r;      &&&r   toXMLZBaseTTXConverter.toXML   s    

&'r   c                s    ^RI Hp \        V R4      '       g"   \        WPP                  4      pV! 4       V n        V P
                  P                  WW44       V P
                  P                  4        R# )   r1   r8   N)r5   r2   hasattrr7   r4   r8   fromXMLpopulateDefaults)r   nameattrscontentr;   r2   r=   s   &&&&&  r   r_   ZBaseTTXConverter.fromXML   sM    tW%% ==9J#DJ

46

##%r   c                s>    V P                   P                  VR 7       R# ))recurseN)r8   ensureDecompiled)r   rd   r   r   re   Z!BaseTTXConverter.ensureDecompiled   s    

##G#4r   )r8   NT)r   r   r   r   __doc__r9   rE   rF   rG   rH   r\   r_   re   r   r   r    r"   r   r0   r0   N   s9     
+Yv=,#88(&5 5r   r0   iz#Oops, file a bug against fonttools.c                   s   a  ] tR tRt o RtRtR R ltR tR tR t	R t
R	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tRt V t!R# )!r6   i  z5Helper class to retrieve data from an OpenType table.Nc                sB    Wn         W0n        W0n        W n        W@n        R # r%   r:   offsetpos
localStater4   )r   r:   rl   rj   r4      &&&&&r   r   ZOTTableReader.__init__  s    	$ r   c                s8    V ;P                   V,          un         R # r%   rk   r   countr   r   advanceZOTTableReader.advance  s    Er   c                r$   r%   rn   )r   rk   r   r   seekZOTTableReader.seek  s    r   c                s    V P                  V P                  V P                  V P                  V P                  4      pV P
                  Vn        V# r%   )	__class__r:   rl   rj   r4   rk   r   other   & r   copyZOTTableReader.copy  s6    tyy$//4;;VHH	r   c                s    V P                   V,           pV P                  V P                  V P                  WP                  4      # r%   )rj   rs   r:   rl   r4   )r   rj   r   r   getSubReaderZOTTableReader.getSubReader  s/    v%~~dii&--PPr   c                s    V P                   pW2,           p\        P                  ! R V 2V P                  W4 4      w  pW@n         V# )>rk   structZunpackr:   )r   typecode
staticSizerk   newposr'   r>   r   	readValueZOTTableReader.readValue  s>    hh!==1XJ31FGr   c                s    V P                   pWCV,          ,           p\        P                  ! WP                  WE 4      p\        P                  R 8w  d   VP                  4        WPn         VP                  4       # )big)rk   arrayr:   sys	byteorderbyteswapZtolist)r   r|   r}   rp   rk   r~   r'   s   &&&&   r   	readArrayZOTTableReader.readArray$  sV    hhz))Hii&;<==E!NN||~r   c                (    V P                  R ^R7      # )br}   r   r   r   r   readInt8ZOTTableReader.readInt8-      ~~ca~00r   c                *    V P                  R ^VR7      # )r   r}   rp   r   ro   r   r   readInt8ArrayZOTTableReader.readInt8Array0      ~~cau~==r   c                (    V P                  R ^R7      # )hr   r   r   r   r   	readShortZOTTableReader.readShort3  r   r   c                *    V P                  R ^VR7      # )r   r   r   ro   r   r   readShortArrayZOTTableReader.readShortArray6  r   r   c                (    V P                  R ^R7      # )rh   r   r   r   r   r   readLongZOTTableReader.readLong9  r   r   c                *    V P                  R ^VR7      # )rh   r   r   ro   r   r   readLongArrayZOTTableReader.readLongArray<  r   r   c                r   )Br   r   r   r   r   	readUInt8ZOTTableReader.readUInt8?  r   r   c                r   )r   r   r   ro   r   r   readUInt8ArrayZOTTableReader.readUInt8ArrayB  r   r   c                r   )Hr   r   r   r   r   
readUShortZOTTableReader.readUShortE  r   r   c                r   )r   r   r   ro   r   r   readUShortArrayZOTTableReader.readUShortArrayH  r   r   c                r   )Ir   r   r   r   r   	readULongZOTTableReader.readULongK  r   r   c                r   )r   r   r   ro   r   r   readULongArrayZOTTableReader.readULongArrayN  r   r   c                s    V P                   pV^,           p\        P                  ! RRV P                  W ,           4      w  pW n         V# )i   z>ls    rz   r   rk   r~   r'      &   r   
readUInt24ZOTTableReader.readUInt24Q  s>    hhq==utyy/D'DEr   c                s\    \        V4       Uu. uF  q P                  4       NK  	  up# u upi r%   )ranger   )r   rp   Z_   && r   readUInt24ArrayZOTTableReader.readUInt24ArrayX  s#    +0<8<a!<888s   )c                s    V P                   pV^,           p\        V P                  W 4      p\        V4      ^8X  g   Q V4       hW n         V# )   )rk   r   r:   lenr   r   r   readTagZOTTableReader.readTag[  sF    hhqDIIc)*5zQ%%r   c                sV    V P                   pW!,           pV P                  W# pW0n         V# r%   )rk   r:   )r   rp   rk   r~   r'      &&   r   readDataZOTTableReader.readDatac  s*    hh		#%r   c                    V P                   '       d   V P                   P                  4       M	\        4       pW#V&   W0n         R # r%   rl   rw   Zdictr   ra   r'   rJ      &&& r   __setitem__ZOTTableReader.__setitem__j  ,    *.///$$&tvdr   c                sP    V P                   ;'       d    V P                   V,          # r%   rl   r   ra   r   r   __getitem__ZOTTableReader.__getitem__o  s    884??4#88r   c                sF    V P                   ;'       d    WP                   9   # r%   r   r   r   r   __contains__ZOTTableReader.__contains__r  s    ::4??#::r   )r:   rl   rj   rk   r4   ri   )Nr    N)"r   r   r   r   rg   Z	__slots__r   rq   rr   rw   rx   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   r6   r6     s     ?CI!
Q1>1>1>1>1>1>9 
9; ;r   r6   c                   s2   a  ] tR tRt o R tR tR tRtV tR# )OffsetToWriteriv  c                s    Wn         W n        R # r%   )	subWriter
offsetSizer   r   r   r[   r   r   ZOffsetToWriter.__init__w  s    "$r   c                s    \        V 4      \        V4      8w  d   \        # V P                  VP                  8H  ;'       d    V P                  VP                  8H  # r%   )rU   NotImplementedr   r   rt   r   r   __eq__ZOffsetToWriter.__eq__{  sB    :e$!!~~0XXT__HXHX5XXr   c                sD    \        V P                  V P                  34      # r%   )hashr   r   r   r   r   __hash__ZOffsetToWriter.__hash__  s    T^^T__566r   )r   r   N)	r   r   r   r   r   r   r   r   r   r    r"   r   r   r   v  s     %Y
7 7r   r   c                   s  a  ] tR tRt o RtR+R ltR tR tR tR t	R	 t
R
 tR tR tR tR,R ltR tR tR tR-R ltR tR tR tR tR tR tR tR tR tR tR tR tR t R  t!R! t"R" t#R# t$R$ t%R% t&R.R& lt'R' t(R( t)R) t*R*t+V t,R# )/rD   i  z=Helper class to gather and assemble data for OpenType tables.Nc                sV    . V n         R V n        Wn        W n        R V n        RV n        R # )N<none>)itemsrk   rl   r4   parentra   )r   rl   r4   r[   r   r   ZOTTableWriter.__init__  s(    
$ 	r   c                r   r%   r   r   r   r   r   ZOTTableWriter.__setitem__  r   r   c                (    V P                   V,          # r%   r   r   r   r   r   ZOTTableWriter.__getitem__  s    t$$r   c                s     V P                   V R # r%   r   r   r   r   __delitem__ZOTTableWriter.__delitem__  s    OOD!r   c                s    ^ pV P                    Fa  p\        VR4      '       d   WP                  ,          pK)  \        VR4      '       d   WP                  ,          pKO  V\	        V4      ,           pKc  	  V# )z<Return the length of this table in bytes, without subtables.getCountDatar   )r   r^   sizer   r   )r   Zlitem   &  r   getDataLengthZOTTableWriter.getDataLength  sZ    JJDt^,,YY{++__$D	M  r   c                s   \        V P                  4      pV P                  p\        V4      p\	        V4       F  pW,          p\        VR4      '       g   K  VP                  ^8X  d+   \        VP                  P                  V,
          4      W&   KZ  VP                  ^8X  d,    \        VP                  P                  V,
          4      W&   K  VP                  ^8X  d+   \        VP                  P                  V,
          4      W&   K  \        VP                  4      h	  \!        V4      #   \        P                   d(    T P                  TP                  4      p\        T4      hi ; i)z;Assemble the data for this writer/table, without subtables.r   )listr   rk   r   r   r^   r   	packULongr   
packUShortr{   ZerrorgetOverflowErrorRecordr#   
packUInt24rS   r   )r   r   rk   numItemsrh   r   r(   s   &      r   getDataZ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                s:   \        V P                  4      p^\        ^\        ^\        /p\        V4       FY  w  r4\        VR4      '       g   K  VP                  V9   d   W$P                  ,          ! ^ 4      W&   KF  \        VP                  4      h	  \        V4      # )zFAssemble the data for this writer/table with all offset field set to 0r   )
r   r   r   r   r   	enumerater^   r   rS   r   )r   r   Z	packFuncsrh   r   s   &    r   getDataForHarfbuzzZ OTTableWriter.getDataForHarfbuzz  s{    TZZ 
Az1i@	 'GAt[))??i/(9!<EH$T__55 ( r   c                r)   r%   )r   r   r   r   r   r   ZOTTableWriter.__hash__  s    DJJr   c                J    V P                  V4      pV\        J d   V# V'       * # r%   r   r   r   ru   Zresultr   r   __ne__ZOTTableWriter.__ne__  $    U#>1vA6zAr   c                r    \        V 4      \        V4      8w  d   \        # V P                  VP                  8H  # r%   )rU   r   r   rt   r   r   r   ZOTTableWriter.__eq__  s+    :e$!!zzU[[((r   c                s   \        V R 4      p\        V R4      pV'       d   V'       g   / pV P                  p\        V4       F  w  rg\        VR4      '       d   VP                  4       WV&   K+  \        VR4      '       g   K?  VP                  P                  WR7       V'       d   Ke  VP                  VP                  VP                  4      WV,          n        K  	  \        V4      V n        R# )	Extension	DontSharer   r   shareExtensionN)r^   r   r   r   r   _doneWritingZ
setdefaulttuple)r   internedTablesr   isExtensionZ	dontSharer   rh   r      &&&     r   r   ZOTTableWriter._doneWriting  s     dK0 D+.	~N

 'GAt^,,,,.{++++" ,  !y)7)B)B*EH& (" 5\
r   c                sv   R V\        V 4      &   \        V P                  4      p\        \	        V4      4      pVP                  4        \        V R4      pTpV'       d   Vf   Q R4       hTR/ r2pRp\        V R4      '       d   \	        V4       FJ  p	V P                  V	,          p
\        V
R4      '       g   K*  \        V
P                  RR4      R8X  g   KH  R p M	  \        X
P                  4      V9  d   V
P                  P                  WV4       M V F  p	V P                  V	,          p
\        V
R4      '       g   K*  V'       d&   V	^8X  d   \        V
P                  RR4      R8X  d   KW  \        V
P                  4      V9  d   V
P                  P                  WV4       K  K  	  VP                  V 4       R# )	Tr   NzUProgram or XML editing error. Extension subtables cannot contain extensions subtablesFsortCoverageLastr   ra   Coverage)idr   r   r   r   reverser^   r7   r   _gatherTablesappend)r   tables	extTablesdoner   ZiRanger   Z
selfTablesr   rh   r   s   &&&&       r   r   Z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                s   . p. pTpV F  p	VP                  ^ ^ V	34       K  	  Rp
^ p\        V R4      '       d}   \        V P                  4       Fc  w  r\	        VRR4      R8X  g   K  Rp
\        V4      V9  d   VP                  WW8V4      ;rMV\        V4      ,          pVP                  V4        M	  ^ p^ p\        V P                  4       F  w  r\        VR4      '       d   TpM:\        VR4      '       d   WP                  ,          pK@  V\        V4      ,           pKT  \        VP                  4      V9  d    VP                  P                  WW8V4      ;rMV\        VP                  4      ,          pVVP                  V3pVP                  V4       WP                  ,          pK  	  VP                  V 4       VP                  Wg34       V^,          pW\        V 4      &   V
'       d   VP                  4        V# )	r    Fr   ra   Nr   Tr   r   )r   r^   r   r   r7   r   _gatherGraphForHarfbuzzr   r   r   r   Zpop)r   r   obj_listr   objidxvirtual_edgesZ
real_linksZvirtual_linksZitem_idxZidxr   Zcoverage_idxrh   r   Z	child_idxZ
offset_posrk   Z	real_edges   &&&&&&            r   r   Z%OTTableWriter._gatherGraphForHarfbuzzG  s   
 !C  !Q- ! !4+,,$TZZ04.*<'+$$xt+262N2N"dm3 x (,BtH~!((6 1 	
 ,GAt[)) ~..ii'
'#d)3
$..!-'+~~'M'Mdm( 	H !DNN!34	dooy9Ii(//)J' -* 	d34A!RXr   c                sL   / pV P                  VRR7       . p. p/ p^ p. pV P                  W4WVV4       ^ pV F  p	Wn        WP                  4       ,           pK!  	  . p
V F$  p	V	P	                  4       pV
P                  V4       K&  	  \        P                  ! \        V4      W4      # )a  The Whole table is represented as a Graph.
Assemble graph data and call Harfbuzz repacker to pack the table.
Harfbuzz repacker is faster and retain as much sub-table sharing as possible, see also:
https://github.com/harfbuzz/harfbuzz/blob/main/docs/repacker.md
The input format for hb.repack() method is explained here:
https://github.com/harfbuzz/uharfbuzz/blob/main/src/uharfbuzz/_harfbuzz.pyx#L1149
Tr   )	r   r   rk   r   r   r   rT   Zserialize_with_tagr   )r   r4   r   r   r   r   r   r   rk   r8   r:   	tableDatas   &&          r   rR   Z%OTTableWriter.getAllDataUsingHarfbuzz  s     .>$$Vt]S EI++--C  E002IKK	"  $$S]DCCr   c                s   V'       d   / pV P                  V4       . p. p/ pV P                  W4V4       VP                  4        VP                  4        ^ pV F  pWgn        WgP	                  4       ,           pK!  	  V F  pWgn        WgP	                  4       ,           pK!  	  . pV F$  pVP                  4       p	VP                  V	4       K&  	  V F$  pVP                  4       p	VP                  V	4       K&  	  \        V4      # )z+Assemble all data, including all subtables.)r   r   r   rk   r   r   r   r   )
r   rQ   r   r   r   r   rk   r8   r:   r   rP   r   rV   ZOTTableWriter.getAllData  s    Nn-	6d3 EI++--C  EI++--C  EIKK	"  EIKK	"  r   c                s`    V P                  V P                  V P                  4      pV Vn        V# r%   )rs   rl   r4   r   )r   Z	subwriterrv   r   getSubWriterZOTTableWriter.getSubWriter  s-    NN4??DMMB	 	 r   c                sl    V P                   P                  \        P                  ! R V 2V4      4       R# )ry   Nr   r   r{   pack)r   r|   r'   r[   r   
writeValueZOTTableWriter.writeValue  s%    

&++(ne<=r   c                s    \         P                   ! W4      p\        P                  R 8w  d   VP                  4        V P                  P                  VP                  4       4       R# )r   N)r   r   r   r   r   r   tobytes)r   r|   valuesZar   r   
writeArrayZOTTableWriter.writeArray  s=    KK)==E!JJL

!))+&r   c                s    RTu;8:  d   ^8  g   Q V4       h Q V4       hV P                   P                  \        P                  ! RV4      4       R# )   z>bNir   r   r'   r   r   	writeInt8ZOTTableWriter.writeInt8  sB    u"s")E)")E)"

&++dE23r   c                *    V P                  R V4       R# )r   Nr   r   r   r   r   writeInt8ArrayZOTTableWriter.writeInt8Array      V$r   c                s    RTu;8:  d   R 8  g   Q V4       h Q V4       hV P                   P                  \        P                  ! RV4      4       R# )   z>hNi r   r   r   r   
writeShortZOTTableWriter.writeShort  sB    &&--&--&

&++dE23r   c                r   )r   Nr   r   r   r   writeShortArrayZOTTableWriter.writeShortArray  r   r   c                f    V P                   P                  \        P                  ! R V4      4       R# )z>iNr   r   r   r   	writeLongZOTTableWriter.writeLong      

&++dE23r   c                r   )rh   Nr   r   r   r   writeLongArrayZOTTableWriter.writeLongArray  r   r   c                    ^ Tu;8:  d   R8  g   Q V4       h Q V4       hV P                   P                  \        P                  ! RV4      4       R# )r       >BNr   r   r   r   
writeUInt8ZOTTableWriter.writeUInt8  sB    EC&&&&

&++dE23r   c                r   )r   Nr   r   r   r   writeUInt8ArrayZOTTableWriter.writeUInt8Array  r   r   c                r  )r    i   >HNr   r   r   r   writeUShortZOTTableWriter.writeUShort  sB    E#G#*U*#*U*#

&++dE23r   c                r   )r   Nr   r   r   r   writeUShortArrayZOTTableWriter.writeUShortArray  r   r   c                r  )>INr   r   r   r   
writeULongZOTTableWriter.writeULong  r  r   c                r   )r   Nr   r   r   r   writeULongArrayZOTTableWriter.writeULongArray  r   r   c                s    ^ Tu;8:  d   R8  g   Q V4       h Q V4       h\         P                  ! RV4      pV P                  P                  VR,          4       R# )r       z>Lr]   NNNr{   r   r   r   )r   r'   r   r   r   writeUInt24ZOTTableWriter.writeUInt24  sK    E%I%,u,%,u,%KKe$

!B% r   c                s:    V F  pV P                  V4       K  	  R # r%   )r  )r   r   r'   r   r   writeUInt24ArrayZOTTableWriter.writeUInt24Array  s    EU# r   c                s    \        V4      P                  4       p\        V4      ^8X  g   Q V4       hV P                  P	                  V4       R# )r   N)r   r   r   r   r   )r   Ztagr   r   writeTagZOTTableWriter.writeTag  s;    #h 3x1}!c!}

#r   c                sN    V P                   P                  \        W4      4       R # r%   )r   r   r   r   r[   r   writeSubTableZOTTableWriter.writeSubTable
  s    

.?@r   c                sV    \        WW4R 7      pV P                  P                  V4       V# ))r   r'   )CountReferencer   r   )r   r8   ra   r   r'   ref   &&&&& r   writeCountReferenceZ!OTTableWriter.writeCountReference  s%    UtA

#
r   c                st    \         P                  ! V3V,           !  pV P                  P                  V4       R # r%   r  )r   formatr   r:   r   r   writeStructZOTTableWriter.writeStruct  s)    {{VI./

$r   c                s<    V P                   P                  V4       R # r%   )r   r   )r   r:   r   r   	writeDataZOTTableWriter.writeData  s    

$r   c                s   R ;p;p;rEV P                   R8X  d   VP                  pEMV P                   R8X  d   V P                  pVP                  pEM\        VRR4      p\        VR4      '       d   VP                  pV P                   R8X  d%   V P                  P                  pV P                  pEM'V P                   R8X  d8   V P                  P                  P                  pV P                  P                  pMRP                  V P                   V.4      pV P                  pV'       d=   VP                   R	9  d,   RP                  VP                   V.4      pVP                  pKD  V'       dk   VP                   R8X  d8   VP                  P                  P                  pVP                  P                  pM"VP                  P                  pVP                  p\        V P                  W#WE34      # )
NZ
LookupListZLookupra   r   repeatIndexSubTableExtSubTableZ.)r!  r   )ra   r  r7   r^   r   Zjoinr   r4   )r   r   r   r   r   r   Zp1   &&     r   r   Z$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ww-/*,))*:*:*F*F(*		(=(=*,))*?*?(*"]]OHP
 	
r   )r   rl   ra   r   rk   r4   NNFrf   )   N)-r   r   r   r   rg   r   r   r   r   r   r   r   r   r   r   r   r   r   rR   rV   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   rD   rD     s     G 
%"

 8  B)
%"N> @7rD<F>'4%4%4%4%4%4%!
$
A
  !
 !
r   rD   c                   s@   a  ] tR tRt o RtR	R ltR tR tR tRt	V t
R# )
r  i=  z8A reference to a Count value, not a count of references.Nc                sX    Wn         W n        W0n        Ve   V P                  V4       R # R # r%   )r8   ra   r   setValue)r   r8   ra   r   r'   rm   r   r   ZCountReference.__init__@  s(    
		MM%  r   c                s    V P                   pV P                  pW#,          f   WV&   R # W#,          V8X  g   Q W2V,          V34       hR # r%   r8   ra   )r   r'   r8   ra      &&  r   r&  ZCountReference.setValueG  sA    

yy;$K;%'C$dU)CC'r   c                s<    V P                   V P                  ,          # r%   r'  r   r   r   getValueZCountReference.getValueO  s    zz$))$$r   c                s    V P                   V P                  ,          pVf   ^ p^\        ^\        ^\        /V P
                  ,          ! V4      # r%   )r8   ra   	packUInt8r   r   r   )r   vrv   r   r   ZCountReference.getCountDataR  s?    JJtyy!9A9aQ	:499EaHHr   )ra   r   r8   r#  )r   r   r   r   rg   r   r&  r)  r   r   r   r    r"   r   r  r  =  s$     B!D%I Ir   r  c                 0    \         P                  ! R V 4      # )r  r{   r   r&   r   r   r*  r*  Y      ;;tU##r   c                 r,  )r  r-  r&   r   r   r   r   ]  r.  r   c                 sl    ^ T u;8:  d   R8  g   Q V 4       h Q V 4       h\         P                  ! RV 4      # )r    l        r  r-  r&   r   r   r   r   a  s6    ##*U*#*U*#;;tU##r   c                 sz    ^ T u;8:  d   R8  g   Q V 4       h Q V 4       h\         P                  ! RV 4      R,          # )r    r  r  r  r-  r&   r   r   r   r   f  s;    !	!(5(!(5(!;;tU#B''r   c                   s   a  ] tR tRt o RtR tRR ltR t]R 4       t	R t
R tRR
 ltR tR tR tR tRR ltR tR tR tR t ! R R]4      tV 3R lR ltR tRtV tR	# )	BaseTableik  z0Generic base class for all OpenType (sub)tables.c                s    V P                   P                  R 4      pV'       d-   V =V P                  pV =V P	                  W#4       \        W4      # \        V4      hr<   )__dict__getr<   r;   r9   r7   AttributeError)r   Zattrr<   r;   r(  r   __getattr__ZBaseTable.__getattr__n  sN    ""8,99D	NN6(4&&T""r   c                s   V P                   P                  R 4      pV'       d"   V =V P                  pV =V P	                  W#4       V'       d5   V P                  4        F  pVP                  P                  V4       K   	  R# R# )r<   N)r1  r2  r<   r;   r9   iterSubTablesr'   re   )r   rd   r<   r;   Zsubtabler   r   re   ZBaseTable.ensureDecompiledy  se    ""8,99D	NN6( ..0//8 1 r   c                s    R V P                   9   dA   V P                   P                  4       pV P                   R ,          P                  4       VR &   V# V P                   # r0  )r1  rw   )r   rJ   rv   r   __getstate__ZBaseTable.__getstate__  sL     t}}$MM&&(E"mmH5::<E(OL}}r   c                s6   ^ pV P                    F  pVP                  V4      pV\        J d	   \        u # ^pVP                  '       d>   VP                  V9   d%   WP                  ,          VP                  ,           pM\        u # W$V,          ,          pK  	  V# r    )
convertersgetRecordSizer   repeataux)clsr<   Z	totalSizeconvr   
countValues   &&    r   r9  ZBaseTable.getRecordSize  s}    	NND%%f-D~%%%J{{{;;&(!'!4txx!?J))
**I # r   c                s    V P                   # r%   )r8  r   r   r   getConvertersZBaseTable.getConverters  s    r   c                r   r%   )convertersByNamer   r   r   getConverterByNameZBaseTable.getConverterByName  s    $$T**r   Nc                s   V P                  4        EF`  pVP                  '       d   \        WP                  4      '       g   \	        WP                  . 4       \        \        WP                  4      4      VP                  ,
          p V P                  VP                  4      p\	        WP                  V4       K  VP                  '       d*   \        VP                  R V P                  4      '       g   K  \        WP                  4      '       d   EK  \        VR4      '       d   \	        WP                  R 4       \        VR4      '       g   EK@  \	        WP                  VP                  4       EKc  	  R #   \         dH    T'       d;   TP                  T9   d&   YP                  ,          P                  T4        EK   EK   EK  i ; i)NZwriteNullOffsetDEFAULT)r?  r:  r^   ra   setattrr   r7   r;  rA  KeyErrorr&  evalr1  rB  )r   Z
propagatorr=  r>  Z
count_convr   r   r`   ZBaseTable.populateDefaults  s3   &&(D{{{tYY//D))R0 yy!9:TXXE
E!%!8!8!EJD++z: 888D4$G$G4++4!233D))T2 4++D))T\\:1 )   E!dkkZ&?";;/88DD '@zEs   1E88G
2G
	G
c                sF   V P                  V4       / pW0n        V P                  4        EF  pVP                  R 8X  d$   VP	                  VP
                  VR,          4      pVP                  R8X  d$   VP	                  VP
                  VR,          4      pVP                  R8X  d   VP	                  VR,          4      pVP                  R8X  d$   VP	                  VP
                  VR,          4      p VP                  '       d   \        VP                  \        4      '       d   VP                  pM6VP                  V9   d   W4P                  ,          pMWP                  ,          pWTP                  ,          pVP                  WW54      W4P                  &   EKr  VP                  '       d!   \        VP                  RV4      '       g   EK  VP                  WV4      W4P                  &   VP                  '       d"   W4P                  ,          WP                  &   EK  EK  	  \!        V R	4      '       d   V P#                  W24       V =R# V P$                  P'                  V4       V =R#   \         d,   pTP                  pTP                  T3,           Tn        h Rp?ii ; i)
r   
LookupTyper!  ZExtensionLookupTypeZFeatureParamsZ
FeatureTagZ	SubStructZ	MorphTypeNpostRead)
readFormatZ_BaseTable__rawTabler?  ra   ZgetConverterr4   r:  
isinstanceintr;  r   rE  ZreadisPropagated	Exceptionargsr^   rG  r1  Zupdate)r   r<   r;   r8   r=  r>  rN   ra   r   r   r9   ZBaseTable.decompile  s   &&(DyyJ&((%:MNyyM)((%@U:VWyyO+(()=>yyK'((%:LM;;;!$++s33%)[[
-%*;;%7
 &,KK%8
((*J'+~~fE'VE))$xxxTXXtU(C(C '+yyu'EE))$(((,1)),<yy) )1 )> 4$$MM%& O MM  'O  yy4')s2   4I*BI*I*.I*AI**J 5&JJ c                s	   V P                  4        \        V R 4      '       d:   \        V R4      '       * pV P                  V4      pT;'       d    \        V R4      pMRpV P                  P	                  4       pV P                  4        Fl  pVP                  '       g   K  VP                  '       g   K+  VP                  VP                  4      p\        V\        4      '       g   K^  WaVP                  &   Kn  	  \        V R4      '       d   ^Vn        \        V R4      '       d   RVn        \        V P                  R4      '       d-   VR,          P                  V P                  P                   4       V P#                  V4       V P                  4        EF  pVP                  VP                  4      pVP$                  '       d   Vf   . p\'        V4      VP(                  ,
          p\        VP$                  \*        4      '       d?   \'        V4      VP$                  8X  g$   Q RVP$                  \'        V4      3,          4       hMJVP$                  V9   d   \        WEP$                  VR	7       M!WP$                  ,          P                  V4        VP-                  WWF4       EK  VP                  '       d   \        V\        4      '       dB   Tp	VP2                  V	n        VP7                  V	4       V	P9                  4       WEP                  &   M4VP;                  WEP                  VP2                  4      p	RWEP                  &   VP                  '       d   WVP                  &   EK  EK  VP<                  '       d^   VP                  V9  d   RWEP                  &   VP;                  WEP                  VP2                  WEP                  ,          4      p	WR&   EKC  VP(                  '       d!   \?        VP(                  RV4      '       g   EKu   VPA                  WWF4       TP                  '       g   EK  YaTP                  &   EK  	  V'       d   V ="R# R#   \.         d1   pTP0                  TP                  R
,           3,           Tn        h Rp?ii ; i  \.         dF   pTe   TP                  PB                  MTP                  p
TP0                  T
3,           Tn        h Rp?ii ; i)preWriteFormatFr   r   TrF  Nzexpected %d values, got %dr&   z[])#re   r^   rN  r1  rw   r?  ZisCountrK  r2  ra   rI  r  r   r   rs   r&  rF  writeFormatr:  r   r;  rJ  r   rL  rM  r}   r   r  r)  r  ZisLookupTyperE  Zwriter   rO  )r   rM   r;   ZdeleteFormatr8   r=  r'   r>  rN   r  ra      &&&        r   rE   ZBaseTable.compile  s    4$$&tX66LMM$'E'C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 (+|$888D4$?$?JJvU:
 $$$(-499% )B  [ ! VVtyy4'7&99AFL ! 7<7H5??33diiDVVtg-AFs1   Q	RR+RRSA SSc                    R # r%   r,   r   r<   r   r   rH  ZBaseTable.readFormatM      r   c                rR  r%   r,   rW   r   r   rP  ZBaseTable.writeFormatP  rT  r   c                sH   V'       d   TMV P                   P                  pVf   . p\        V R4      '       d   VRV P                  3.,           pVP	                  WS4       VP                  4        V P                  W4       VP                  V4       VP                  4        R # )NrO  )rs   r   r^   rO  begintagnewlinerZ   endtag)r   	xmlWriterr;   rb   ra   Z	tableNamer  r   r\   ZBaseTable.toXMLS  s     Ddnn&=&=	=E4""h455E9,I$#r   c           
     s   V P                  4        F  pVP                  '       dM   \        WP                  . 4      p\	        V4       F%  w  rVVP                  WWcP                  R V3.4       K'  	  Ka  VP                  '       d)   \        VP                  R\        V 4      4      '       g   K  \        WP                  R4      pVP                  WWCP                  . 4       K  	  R# )indexN)	r?  r:  r7   ra   r   ZxmlWriter;  rE  Zvars)r   rX  r;   r=  r'   rh   r   s   &&&    r   rZ   ZBaseTable.toXML2_  s     &&(D{{{ii4(/GAMM)4gq\NS  0 888D4d$D$D))T iuiiD )r   c                s@    V P                  V4      pTP                  Y#T4      pTP                  eF   \	        YP
                  R 4      pTf   . p\        YP
                  T4       TP                  T4       R # \        YP
                  T4       R #   \         d    h i ; ir%   )rA  rD  ZxmlReadr:  r7   ra   rC  r   )r   ra   rb   rc   r;   r=  r'   Zseqs   &&&&&   r   r_   ZBaseTable.fromXMLp  s    	**40D UT2 ;;"$		40C{ii-JJuD))U+  		s   B Bc                r   r%   r   r   r   r   r   ZBaseTable.__ne__  r   r   c                s    \        V 4      \        V4      8w  d   \        # V P                  4        VP                  4        V P                  VP                  8H  # r%   )rU   r   re   r1  rt   r   r   r   ZBaseTable.__eq__  sC    :e$!! }}..r   c                   s4   a  ] tR tRt o RtRtV 3R ltRtV tR# )BaseTable.SubTableEntryi  zSee BaseTable.iterSubTables()Nc                sL   < V ^8  d   Qh/ S[ ;R&   R;R&   S[S[,          ;R&   # )r%  ra   r/  r'   rY  )r   r	   rJ  r  r!      "r   __annotate__Z$BaseTable.SubTableEntry.__annotate__  s/      	  	 
 }# r   r,   )	r   r   r   r   rg   rY  Z__annotate_func__r   r   r    r"   r   SubTableEntryrZ    s     +  $  r   r^  c                s0   < V ^8  d   QhRS[ S[,          /# )r%  return)r   r^  r[  r\  r   r]  ZBaseTable.__annotate__  s      x6 r   c              #  sF  a a"   S P                  4        F  pVP                  o\        S SR4      pVf   K"  \        V\        4      '       d   S P                  SV4      x  KN  \        V\        4      '       g   Kf  VV 3R l\        V4       4        Rj  xL
  K  	  R#  L
5i)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   s~   <"   T F2  w  r\        V\        4      '       g   K  SP                  SW!R 7      x  K4  	  R# 5i))rY  N)rI  r/  r^  )Z.0rh   r+  ra   r   s   &  r   Z	<genexpr>Z*BaseTable.iterSubTables.<locals>.<genexpr>  s9       0!!Y/ 9D&&tQ&88 0s   ==)r?  ra   r7   rI  r/  r^  r   r   )r   r=  r'   ra   s   f  @r   r5  ZBaseTable.iterSubTables  s      &&(D99DD$-E}%++((u55E4(( )% 0   )s   A2B!;B!BB!c                r)   r%   )getVariableAttrsrs   r   r   r   r`  ZBaseTable.getVariableAttrs  s    //r   )Z
__rawTabler$  r%   r#  )r   r   r   r   rg   r4  re   r6  classmethodr9  r?  rA  r`   r9   rE   rH  rP  r\   rZ   r_   r   r   r   r^  r5  r`  r   r   r    r"   r   r/  r/  k  s     :	#	9  +;6(TcJ
E",$B/$
 $ 40 0r   r/  c                   s\   a  ] tR tRt o Rt]R 4       tR tR tR t	R t
RR	 ltR
 tRtV tR# )FormatSwitchingBaseTablei  zrMinor specialization of BaseTable, for tables that have multiple
formats, eg. CoverageFormat1 vs. CoverageFormat2.c                s    \         # r%   )r   )r<  r<   r   r   r9  Z&FormatSwitchingBaseTable.getRecordSize  s    r   c                s     V P                   pT P                  P                  T P                   . 4      #   \         d    . u # i ; ir%   )rO  r3  r8  r2  )r   fmtrv   r   r?  Z&FormatSwitchingBaseTable.getConverters  sE    	++C ""4;;33  	 I	s   4 AAc                sJ    V P                   V P                  ,          V,          # r%   )r@  rO  r   r   r   rA  Z+FormatSwitchingBaseTable.getConverterByName  s    $$T[[1$77r   c                0    VP                  4       V n        R # r%   )r   rO  rS  r   r   rH  Z#FormatSwitchingBaseTable.readFormat  s    '')r   c                <    VP                  V P                  4       R # r%   )r  rO  rW   r   r   rP  Z$FormatSwitchingBaseTable.writeFormat  s    4;;'r   Nc                s4    \         P                  WW#V4       R # r%   )r/  r\   )r   rX  r;   rb   ra   rm   r   r\   ZFormatSwitchingBaseTable.toXML  s    d;r   c                sB    \        V P                  V P                  4      # r%   )r`  rs   rO  r   r   r   r`  Z)FormatSwitchingBaseTable.getVariableAttrs  s    <<r   rO  r#  )r   r   r   r   rg   ra  r9  r?  rA  rH  rP  r\   r`  r   r   r    r"   r   rb  rb    sA     9  
48*(<= =r   rb  c                   s,   a  ] tR tRt o R tR tRtV tR# )UInt8FormatSwitchingBaseTablei  c                rd  r%   )r   rO  rS  r   r   rH  Z(UInt8FormatSwitchingBaseTable.readFormat  s    &&(r   c                re  r%   )r	  rO  rW   r   r   rP  Z)UInt8FormatSwitchingBaseTable.writeFormat  s    $++&r   rf  N)r   r   r   r   rH  rP  r   r   r    r"   r   rg  rg    s     )' 'r   rg  Zuint16Zuint8c                 sZ     \         V ,          #   \         d    \        R T : 24      hi ; i)zUnsupported format type: )formatSwitchingBaseTablesrD  	TypeError)Z
formatTyper   r    getFormatSwitchingBaseTableClassrj    s7    D(44 D3J>BCCDs    *c                sh    V ^8  d   QhR\         R\        \        ,          R\        \        ,          /# )r%  r<  rc  r_  )r/  r	   rJ  r
   r   r  s   "r   r]  r]    s)     = =) =(3- =5: =r   c                s   \        V \        4      '       g   \        V 4      h\        V \        4      '       d1   Vf   \        RV P                   24      hV P
                  V,          pMV P
                  pRV9  d   R# / pVP                  4        F  w  rEVP                  4       pVf   K  WcV&   K!  	  \        \        W3P                  R7      4      # )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 ZVarIndexBase)keyr,   )Z
issubclassr/  ri  rb  r   r@  r   ZgetVarIndexOffsetr   Zsortedr   )r<  rc  r8  ZvarAttrsra   r=  rj   r"  r   r`  r`    s     c9%%n#/00;Ecll^TUU))#.
))
Z'	H &&(
'')#TN ) &:&:;<<r   c                  s6    / p \          F  w  rr4WV3W&   K  	  V # r%   )valueRecordFormat)Zdmaskra   isDevicesigneds        r   
_buildDictrq  &  s'    
A(9$H&( ):Hr   c                   s<   a  ] tR tRt o RtR tR tR tR tRt	V t
R# )	ValueRecordFactoryi0  z6Given a format code, this object convert ValueRecords.c                s|    . p\          F)  w  r4rVW,          '       g   K  VP                  WEV34       K+  	  W n        R # r%   )rm  r   r  )r   valueFormatr  rn  ra   ro  rp  r"  r   r   ZValueRecordFactory.__init__3  s7    ,=(D!!tv67 -> r   c                r)   r%   )r   r  r   r   r   __len__ZValueRecordFactory.__len__:  s    4;;r   c                s^   V P                   pV'       g   R # \        4       pV F  w  rVpV'       d   VP                  4       pMVP                  4       pV'       dD   V'       d:   ^RIHp	 VP                  V4      p
\        W4      ! 4       pVP                  W4       MR p\        WEV4       K  	  V# )Nr1   )
r  ValueRecordr   r   r5   r2   rx   r7   r9   rC  )r   r<   r;   r  valueRecordra   ro  rp  r'   r2   Z	subReaderrQ  r   readValueRecordZ"ValueRecordFactory.readValueRecord=  s    !m&,"DF((*))+* & 3 3E :I#H35EOOI4 EKu- '- r   c                sT   V P                    F  w  rEp\        W4^ 4      pV'       dR   V'       d7   VP                  4       pVP                  V^R7       VP	                  W4       KX  VP                  ^ 4       Kk  V'       d   VP                  V4       K  VP                  V4       K  	  R# )r    )r   N)r  r7   r   r  rE   r  r   )	r   rM   r;   rv  ra   ro  rp  r'   r   s	   &&&&     r   writeValueRecordZ#ValueRecordFactory.writeValueRecordS  s    &*kk"DFKq1E & 3 3 5I((q(AMM)2&&q)!!%(""5) '2r   rk  N)r   r   r   r   rg   r   rt  rw  rx  r   r   r    r"   r   rr  rr  0  s!     @ ,* *r   rr  c                   sR   a  ] tR tRt o RR ltR tR tRR ltR tR t	R	 t
R
tV tR# )ru  ic  Nc                sX   Ve   \          F,  w  r4rVW,          '       g   K  \        YV'       d   R M^ 4       K.  	  VeE   VP                  P                  4        F$  w  rx\	        W4      '       g   K  \        WV4       K&  	  R # R # Ve"   VP                  P                  4       V n        R # R # r%   )rm  rC  r1  r   r^   rw   )	r   rs  Zsrcrn  ra   ro  rp  rl  Zvals	   &&&      r   r   ZValueRecord.__init__f  s    "0A,H%%Da@ 1B  # 2 2 4HC"4-- Ds+ !5 
 _LL--/DM r   c                s    ^ pV P                   P                  4        F  pV\        V,          ^ ,          ,          pK   	  V# r7  )r1  ZkeysvalueRecordFormatDict)r   r  ra   r   r   	getFormatZValueRecord.getFormats  s8    MM&&(D3D9!<<F )r   c                s    ^ pV P                   P                  4        F*  w  r#V'       g   K  V\        V,          ^ ,          ,          pK,  	  V# r7  )r1  r   ry  )r   r  ra   r'   r   r   getEffectiveFormatZValueRecord.getEffectiveFormaty  sA    ==..0KDu"7"=a"@@ 1 r   c                sv   Vf   . pM\        V4      p\        R,           F5  w  rgr\        W4      '       g   K  VP                  V\	        W4      34       K7  	  . p
\        R,           F<  w  rgr\        W4      '       g   K  \	        W4      pVf   K*  V
P                  W{34       K>  	  V
'       di   VP                  W54       VP                  4        V
 F  w  r|Vf   K  VP                  WVR7       K   	  VP                  V4       VP                  4        R # VP                  W54       VP                  4        R # )N:Nr   N:r      N)ra   )
r   rm  r^   r   r7   rU  rV  r\   rW  Z	simpletag)r   rX  r;   Z	valueNamerb   ZsimpleItemsrn  ra   ro  r  ZdeviceItemsZdeviceZdeviceRecords   &&&&&        r   r\   ZValueRecord.toXML  s   =Ku+K,=b,A,A(Dt""""D'$*=#>? -B ,=c,B,B(Dt"" ,%&&~6	 -C
 y6&1"+ &&yT&B '2 Y'	7r   c                sb   ^RI Hp VP                  4        F  w  rg\        W\	        V4      4       K  	  V Ft  p\        V\        4      '       g   K  Vw  rp\        WQ4      ! 4       p	V F2  p
\        V
\        4      '       g   K  V
w  rpV	P                  WW4       K4  	  \        WV	4       Kv  	  R# )r]   r1   N)	r5   r2   r   rC  rJ  rI  r   r7   r_   )r   ra   rb   rc   r;   r2   Zkr+  Zelementr'   Zelem2Zname2Zattrs2Zcontent2s   &&&&&         r   r_   ZValueRecord.fromXML  s    KKMDADSV$ "Ggu--#* DH+-E !%//*/'xeX<	 !
 D& r   c                r   r%   r   r   r   r   r   ZValueRecord.__ne__  r   r   c                r   r%   )rU   r   r1  rt   r   r   r   ZValueRecord.__eq__  s+    :e$!!}}..r   )r1  r#  r%   )r   r   r   r   r   rz  r{  r\   r_   r   r   r   r   r    r"   r   ru  ru  c  s.     0 4'"B/ /r   ru  r%   ))r]   Z
XPlacementr    r]   )r%  Z
YPlacementr    r]   )r   ZXAdvancer    r]   )r|  ZYAdvancer    r]   )i   Z
XPlaDevicer]   r    )i    Z
YPlaDevicer]   r    )i@   Z
XAdvDevicer]   r    )r   Z
YAdvDevicer]   r    )r  Z	Reserved1r    r    )i   Z	Reserved2r    r    )i   Z	Reserved3r    r    )i   Z	Reserved4r    r    )i   Z	Reserved5r    r    )i    Z	Reserved6r    r    )i @  Z	Reserved7r    r    )r   Z	Reserved8r    r    )7ZfontTools.configr   ZfontTools.misc.textToolsr   r   r   Zenumr   r   r   r{   ZloggingZ	functoolsr   Ztypingr   r   r	   r
   Z	getLoggerr   r@   rB   Z	uharfbuzzrT   rC   r?   Zobjectr   rL  r#   r+   r0   r   r   Zitemsizer6   r   rD   r  r*  r   r   r   r/  rb  rg  rh  rj  r`  rm  rq  ry  rr  ru  r,   r   r   <module>r}     s   $ 3 &  
     8 8!	N  8*,B CD 
& 
0 Y  G *l5| l5` 6;;sA1$ $${{3  A% L'L L%q;F q;h7V 7u
F u
pIV I8$$$
(
F0 F0R
!=y !=H'$< ' &* D = =B , # 0* 0*fO/& O/a*  		s   E2 2E=<E=