+
    K<i                         ^ 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                   ,   a  ] tR t^t o R tR tRtV tR# )OverflowErrorRecordc                    V^ ,          V n         V^,          V n        V^,          V n        V^,          V n        V^,          V n        R# )r   N)	tableTypeLookupListIndexSubTableIndexitemName	itemIndex)selfoverflowTuples   &&?/usr/lib/python3/dist-packages/fontTools/ttLib/tables/otBase.py__init__OverflowErrorRecord.__init__   s@    &q),Q/*1-%a(&q)    c                    \        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   s   &r   __repr__OverflowErrorRecord.__repr__!   sG    $$ ""

 	
r   )r   r   r   r   r   N)__name__
__module____qualname____firstlineno__r   r   __static_attributes____classdictcell____classdict__s   @r   r   r      s     *
 
r   r   c                   ,   a  ] tR t^1t o R tR tRtV tR# )OTLOffsetOverflowErrorc                    Wn         R # Nvalue)r   overflowErrorRecords   &&r   r   OTLOffsetOverflowError.__init__2   s    (
r   c                ,    \        V P                  4      # r+   )reprr-   r   s   &r   __str__OTLOffsetOverflowError.__str__5   s    DJJr   r,   N)r    r!   r"   r#   r   r2   r$   r%   r&   s   @r   r)   r)   1   s     )   r   r)   c                   "    ] tR t^9t^t^t^tRtR# )RepackerState N)r    r!   r"   r#   PURE_FTHB_FTFT_FALLBACKr$   r6   r   r   r5   r5   9   s     G E Kr   r5   c                   X   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                    ^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) r>   OTTableReaderr@   getattrtable	decompile)r   datafontr>   reader
tableClasss   &&&   r   rE   BaseTTXConverter.decompileT   s<    tmm<X}}5
\


V*r   c                ^   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 serializerr?   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.)GSUBGPOS)NT)cfgUSE_HARFBUZZ_REPACKERr@   logdebughave_uharfbuzzImportErrorr5   r8   r7   OTTableWriterrD   compiletryPackingHarfbuzztryPackingFontToolsr9   r)   tryResolveOverflowr-   )
r   rG   overflowRecorduse_hb_repackstatehb_first_error_loggedlastOverflowRecordwritereoks
   &&        r   rU   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                    \         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.repackrA   z: z`hb.repack failed to serialize '%s', attempting fonttools resolutions ; the error message was: %sTF)remove_duplicateN)rP   rQ   r@   getAllDataUsingHarfbuzz
ValueErrorMemoryErrorhbRepackerErrortyper    r   warning
getAllData)r   r^   r\   r_   	error_msgs   &&&  r   rV   #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                "    VP                  4       # r+   )rk   r   r^   s   &&r   rW   $BaseTTXConverter.tryPackingFontTools   s      ""r   c                    ^ 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-   rP   infor   r>   rr   rs   )r   rG   r_   r]   r`   rY   rr   rs   s   &&&&    r   rX   #BaseTTXConverter.tryResolveOverflow   sl    (I>B""*4#D9B6%d;BI
 	1!$77r   c                <    V P                   P                  W4       R # r+   )rD   toXML2)r   r^   rG   s   &&&r   toXMLBaseTTXConverter.toXML   s    

&'r   c                    ^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# )   r=   rD   N)rA   r>   hasattrrC   r@   rD   fromXMLpopulateDefaults)r   nameattrscontentrG   r>   rI   s   &&&&&  r   r}   BaseTTXConverter.fromXML   sM    tW%% ==9J#DJ

46

##%r   c                >    V P                   P                  VR 7       R# ))recurseN)rD   ensureDecompiled)r   r   s   &&r   r   !BaseTTXConverter.ensureDecompiled   s    

##G#4r   )rD   NT)r    r!   r"   r#   __doc__rE   rU   rV   rW   rX   rx   r}   r   r$   r%   r&   s   @r   r;   r;   N   s9     
+Yv=,#88(&5 5r   r;   iz#Oops, file a bug against fonttools.c                      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# )!rB   i  z5Helper class to retrieve data from an OpenType table.Nc                B    Wn         W0n        W0n        W n        W@n        R # r+   rF   offsetpos
localStater@   )r   rF   r   r   r@   s   &&&&&r   r   OTTableReader.__init__  s    	$ r   c                8    V ;P                   V,          un         R # r+   r   r   counts   &&r   advanceOTTableReader.advance  s    Er   c                    Wn         R # r+   r   )r   r   s   &&r   seekOTTableReader.seek  s    r   c                    V P                  V P                  V P                  V P                  V P                  4      pV P
                  Vn        V# r+   )	__class__rF   r   r   r@   r   r   others   & r   copyOTTableReader.copy  s6    tyy$//4;;VHH	r   c                    V P                   V,           pV P                  V P                  V P                  WP                  4      # r+   )r   r   rF   r   r@   )r   r   s   &&r   getSubReaderOTTableReader.getSubReader  s/    v%~~dii&--PPr   c                    V P                   pW2,           p\        P                  ! R V 2V P                  W4 4      w  pW@n         V# )>r   structunpackrF   )r   typecode
staticSizer   newposr-   s   &&&   r   	readValueOTTableReader.readValue  s>    hh!==1XJ31FGr   c                    V P                   pWCV,          ,           p\        P                  ! WP                  WE 4      p\        P                  R 8w  d   VP                  4        WPn         VP                  4       # )big)r   arrayrF   sys	byteorderbyteswaptolist)r   r   r   r   r   r   r-   s   &&&&   r   	readArrayOTTableReader.readArray$  sV    hhz))Hii&;<==E!NN||~r   c                (    V P                  R ^R7      # )br   r   r   s   &r   readInt8OTTableReader.readInt8-      ~~ca~00r   c                *    V P                  R ^VR7      # )r   r   r   r   r   s   &&r   readInt8ArrayOTTableReader.readInt8Array0      ~~cau~==r   c                (    V P                  R ^R7      # )hr   r   r   s   &r   	readShortOTTableReader.readShort3  r   r   c                *    V P                  R ^VR7      # )r   r   r   r   s   &&r   readShortArrayOTTableReader.readShortArray6  r   r   c                (    V P                  R ^R7      # )r   r   r   r   s   &r   readLongOTTableReader.readLong9  r   r   c                *    V P                  R ^VR7      # )r   r   r   r   s   &&r   readLongArrayOTTableReader.readLongArray<  r   r   c                (    V P                  R ^R7      # )Br   r   r   s   &r   	readUInt8OTTableReader.readUInt8?  r   r   c                *    V P                  R ^VR7      # )r   r   r   r   s   &&r   readUInt8ArrayOTTableReader.readUInt8ArrayB  r   r   c                (    V P                  R ^R7      # )Hr   r   r   s   &r   
readUShortOTTableReader.readUShortE  r   r   c                *    V P                  R ^VR7      # )r   r   r   r   s   &&r   readUShortArrayOTTableReader.readUShortArrayH  r   r   c                (    V P                  R ^R7      # )Ir   r   r   s   &r   	readULongOTTableReader.readULongK  r   r   c                *    V P                  R ^VR7      # )r   r   r   r   s   &&r   readULongArrayOTTableReader.readULongArrayN  r   r   c                    V P                   pV^,           p\        P                  ! RRV P                  W ,           4      w  pW n         V# )   z>l    r   r   r   r   r-   s   &   r   
readUInt24OTTableReader.readUInt24Q  s>    hhq==utyy/D'DEr   c                \    \        V4       Uu. uF  q P                  4       NK  	  up# u upi r+   )ranger   )r   r   _s   && r   readUInt24ArrayOTTableReader.readUInt24ArrayX  s#    +0<8<a!<888s   )c                    V P                   pV^,           p\        V P                  W 4      p\        V4      ^8X  g   Q V4       hW n         V# )   )r   r   rF   lenr   s   &   r   readTagOTTableReader.readTag[  sF    hhqDIIc)*5zQ%%r   c                V    V P                   pW!,           pV P                  W# pW0n         V# r+   )r   rF   )r   r   r   r   r-   s   &&   r   readDataOTTableReader.readDatac  s*    hh		#%r   c                    V P                   '       d   V P                   P                  4       M	\        4       pW#V&   W0n         R # r+   r   r   dictr   r   r-   r[   s   &&& r   __setitem__OTTableReader.__setitem__j  ,    *.///$$&tvdr   c                P    V P                   ;'       d    V P                   V,          # r+   r   r   r   s   &&r   __getitem__OTTableReader.__getitem__o  s    884??4#88r   c                F    V P                   ;'       d    WP                   9   # r+   r   r  s   &&r   __contains__OTTableReader.__contains__r  s    ::4??#::r   )rF   r   r   r   r@   r   )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&   s   @r   rB   rB     s     ?CI!
Q1>1>1>1>1>1>9 
9; ;r   rB   c                   2   a  ] tR tRt o R tR tR tRtV tR# )OffsetToWriteriv  c                    Wn         W n        R # r+   )	subWriter
offsetSizer   r  r  s   &&&r   r   OffsetToWriter.__init__w  s    "$r   c                    \        V 4      \        V4      8w  d   \        # V P                  VP                  8H  ;'       d    V P                  VP                  8H  # r+   )ri   NotImplementedr  r  r   s   &&r   __eq__OffsetToWriter.__eq__{  sB    :e$!!~~0XXT__HXHX5XXr   c                D    \        V P                  V P                  34      # 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&   s   @r   r	  r	  v  s     %Y
7 7r   r	  c                     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# )/rT   i  z=Helper class to gather and assemble data for OpenType tables.Nc                V    . V n         R V n        Wn        W n        R V n        RV n        R # )N<none>)itemsr   r   r@   parentr   )r   r   r@   s   &&&r   r   OTTableWriter.__init__  s(    
$ 	r   c                    V P                   '       d   V P                   P                  4       M	\        4       pW#V&   W0n         R # r+   r   r   s   &&& r   r   OTTableWriter.__setitem__  r   r   c                (    V P                   V,          # r+   r   r  s   &&r   r  OTTableWriter.__getitem__  s    t$$r   c                     V P                   V R # r+   r   r  s   &&r   __delitem__OTTableWriter.__delitem__  s    OOD!r   c                    ^ 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   litems   &  r   getDataLengthOTTableWriter.getDataLength  sZ    JJDt^,,YY{++__$D	M  r   c                   \        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  r   r   r   r|   r  	packULongr  
packUShortr   errorgetOverflowErrorRecordr)   
packUInt24re   r   )r   r  r   numItemsr   r(  r.   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                :   \        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.  r1  r-  	enumerater|   r  re   r   )r   r  	packFuncsr   r(  s   &    r   getDataForHarfbuzz OTTableWriter.getDataForHarfbuzz  s{    TZZ 
Az1i@	 'GAt[))??i/(9!<EH$T__55 ( r   c                ,    \        V P                  4      # r+   )r  r  r   s   &r   r  OTTableWriter.__hash__  s    DJJr   c                J    V P                  V4      pV\        J d   V# V'       * # r+   r  r  r   r   results   && r   __ne__OTTableWriter.__ne__  $    U#>1vA6zAr   c                r    \        V 4      \        V4      8w  d   \        # V P                  VP                  8H  # r+   )ri   r  r  r   s   &&r   r  OTTableWriter.__eq__  s+    :e$!!zzU[[((r   c                   \        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  r6  r%  r  _doneWriting
setdefaulttuple)r   internedTablesrI  isExtension	dontSharer  r   r(  s   &&&     r   rJ  OTTableWriter._doneWriting  s     dK0 D+.	~N

 'GAt^,,,,.{++++" ,  !y)7)B)B*EH& (" 5\
r   c                v   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# )	TrF  NzUProgram or XML editing error. Extension subtables cannot contain extensions subtablesFsortCoverageLastr  r   Coverage)idr   r  r,  r   reverser|   rC   r  _gatherTablesappend)r   tables	extTablesdoner2  iRangerN  
selfTablesrR  r   r(  s   &&&&       r   rV  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                   . 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   FrR  r   NrS  Tr  r%  )rW  r|   r6  r  rC   rT  _gatherGraphForHarfbuzzr&  r   r  r  pop)r   rX  obj_listrZ  objidxvirtual_edges
real_linksvirtual_linksitem_idxidxrR  coverage_idxr   r(  	child_idx
offset_posr   	real_edges   &&&&&&            r   r_  %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                L   / 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
TrH  )	rJ  r_  r   r)  r8  rW  rg   serialize_with_tagr   )r   r@   rM  rX  ra  rZ  rb  rc  r   rD   rF   	tableDatas   &&          r   rd   %OTTableWriter.getAllDataUsingHarfbuzz  s     .>$$Vt]S EI++--C  E002IKK	"  $$S]DCCr   c                   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.)rJ  rV  rU  r   r)  r3  rW  r   )
r   rc   rM  rX  rY  rZ  r   rD   rF   ro  s
   &&        r   rk   OTTableWriter.getAllData  s    Nn-	6d3 EI++--C  EI++--C  EIKK	"  EIKK	"  r   c                `    V P                  V P                  V P                  4      pV Vn        V# r+   )r   r   r@   r  )r   	subwriters   & r   getSubWriterOTTableWriter.getSubWriter  s-    NN4??DMMB	 	 r   c                l    V P                   P                  \        P                  ! R V 2V4      4       R# )r   Nr  rW  r   pack)r   r   r-   s   &&&r   
writeValueOTTableWriter.writeValue  s%    

&++(ne<=r   c                    \         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  rW  tobytes)r   r   valuesas   &&& r   
writeArrayOTTableWriter.writeArray  s=    KK)==E!JJL

!))+&r   c                    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>bNirx  r   r-   s   &&r   	writeInt8OTTableWriter.writeInt8  sB    u"s")E)")E)"

&++dE23r   c                *    V P                  R V4       R# )r   Nr  r   r~  s   &&r   writeInt8ArrayOTTableWriter.writeInt8Array      V$r   c                    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 rx  r  s   &&r   
writeShortOTTableWriter.writeShort  sB    &&--&--&

&++dE23r   c                *    V P                  R V4       R# )r   Nr  r  s   &&r   writeShortArrayOTTableWriter.writeShortArray  r  r   c                f    V P                   P                  \        P                  ! R V4      4       R# )z>iNrx  r  s   &&r   	writeLongOTTableWriter.writeLong      

&++dE23r   c                *    V P                  R V4       R# )r   Nr  r  s   &&r   writeLongArray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      >BNrx  r  s   &&r   
writeUInt8OTTableWriter.writeUInt8  sB    EC&&&&

&++dE23r   c                *    V P                  R V4       R# )r   Nr  r  s   &&r   writeUInt8ArrayOTTableWriter.writeUInt8Array  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   i   >HNrx  r  s   &&r   writeUShortOTTableWriter.writeUShort  sB    E#G#*U*#*U*#

&++dE23r   c                *    V P                  R V4       R# )r   Nr  r  s   &&r   writeUShortArrayOTTableWriter.writeUShortArray  r  r   c                f    V P                   P                  \        P                  ! R V4      4       R# )>INrx  r  s   &&r   
writeULongOTTableWriter.writeULong  r  r   c                *    V P                  R V4       R# )r   Nr  r  s   &&r   writeULongArrayOTTableWriter.writeULongArray  r  r   c                    ^ 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   ry  r  rW  )r   r-   r   s   && r   writeUInt24OTTableWriter.writeUInt24  sK    E%I%,u,%,u,%KKe$

!B% r   c                :    V F  pV P                  V4       K  	  R # r+   )r  )r   r~  r-   s   && r   writeUInt24ArrayOTTableWriter.writeUInt24Array  s    EU# r   c                    \        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  rW  )r   tags   &&r   writeTagOTTableWriter.writeTag  s;    #h 3x1}!c!}

#r   c                N    V P                   P                  \        W4      4       R # r+   )r  rW  r	  r  s   &&&r   writeSubTableOTTableWriter.writeSubTable
  s    

.?@r   c                V    \        WW4R 7      pV P                  P                  V4       V# ))r&  r-   )CountReferencer  rW  )r   rD   r   r&  r-   refs   &&&&& r   writeCountReference!OTTableWriter.writeCountReference  s%    UtA

#
r   c                t    \         P                  ! V3V,           !  pV P                  P                  V4       R # r+   r  )r   formatr~  rF   s   &&& r   writeStructOTTableWriter.writeStruct  s)    {{VI./

$r   c                <    V P                   P                  V4       R # r+   )r  rW  )r   rF   s   &&r   	writeDataOTTableWriter.writeData  s    

$r   c                   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      # )
N
LookupListLookupr   r  repeatIndexSubTableExtSubTable.)r  r  )r   r  rC   r|   r  joinr   r@   )r   r(  r   r   r   r   p1s   &&     r   r0  $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  r   r   r  r   r@   NNFr   )   N)-r    r!   r"   r#   r   r   r   r  r"  r)  r3  r8  r  r@  r  rJ  rV  r_  rd   rk   ru  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r0  r$   r%   r&   s   @r   rT   rT     s     G 
%"

 8  B)
%"N> @7rD<F>'4%4%4%4%4%4%!
$
A
  !
 !
r   rT   c                   @   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                X    Wn         W n        W0n        Ve   V P                  V4       R # R # r+   )rD   r   r&  setValue)r   rD   r   r&  r-   s   &&&&&r   r   CountReference.__init__@  s(    
		MM%  r   c                    V P                   pV P                  pW#,          f   WV&   R # W#,          V8X  g   Q W2V,          V34       hR # r+   rD   r   )r   r-   rD   r   s   &&  r   r  CountReference.setValueG  sA    

yy;$K;%'C$dU)CC'r   c                <    V P                   V P                  ,          # r+   r  r   s   &r   getValueCountReference.getValueO  s    zz$))$$r   c                    V P                   V P                  ,          pVf   ^ p^\        ^\        ^\        /V P
                  ,          ! V4      # r+   )rD   r   	packUInt8r.  r-  r&  )r   vs   & r   r%  CountReference.getCountDataR  s?    JJtyy!9A9aQ	:499EaHHr   )r   r&  rD   r  )r    r!   r"   r#   r   r   r  r  r%  r$   r%   r&   s   @r   r  r  =  s$     B!D%I Ir   r  c                 0    \         P                  ! R V 4      # )r  r   ry  r,   s   &r   r  r  Y      ;;tU##r   c                 0    \         P                  ! R V 4      # )r  r  r,   s   &r   r.  r.  ]  r  r   c                 l    ^ T u;8:  d   R8  g   Q V 4       h Q V 4       h\         P                  ! RV 4      # )r   l        r  r  r,   s   &r   r-  r-  a  s6    ##*U*#*U*#;;tU##r   c                 z    ^ 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,   s   &r   r1  r1  f  s;    !	!(5(!(5(!;;tU#B''r   c                      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                    V P                   P                  R 4      pV'       d-   V =V P                  pV =V P	                  W#4       \        W4      # \        V4      hrH   )__dict__getrH   rG   rE   rC   AttributeError)r   attrrH   rG   s   &&  r   __getattr__BaseTable.__getattr__n  sN    ""8,99D	NN6(4&&T""r   c                   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# )rH   N)r  r  rH   rG   rE   iterSubTablesr-   r   )r   r   rH   rG   subtables   &&   r   r   BaseTable.ensureDecompiledy  se    ""8,99D	NN6( ..0//8 1 r   c                    R V P                   9   dA   V P                   P                  4       pV P                   R ,          P                  4       VR &   V# V P                   # r  )r  r   )r   r[   s   & r   __getstate__BaseTable.__getstate__  sL     t}}$MM&&(E"mmH5::<E(OL}}r   c                6   ^ 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)clsrH   	totalSizeconvr&  
countValues   &&    r   r  BaseTable.getRecordSize  s}    	NND%%f-D~%%%J{{{;;&(!'!4txx!?J))
**I # r   c                    V P                   # r+   )r  r   s   &r   getConvertersBaseTable.getConverters  s    r   c                (    V P                   V,          # r+   )convertersByNamer  s   &&r   getConverterByNameBaseTable.getConverterByName  s    $$T**r   Nc                   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)NwriteNullOffsetDEFAULT)r  r  r|   r   setattrr   rC   r  r  KeyErrorr  evalr  r  )r   
propagatorr  r  
count_convs   &&   r   r~   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                F   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  ExtensionLookupTypeFeatureParams
FeatureTag	SubStruct	MorphTypeNpostRead)
readFormat_BaseTable__rawTabler  r   getConverterr@   r  
isinstanceintr  r   r  readisPropagated	Exceptionargsr|   r!  r  update)r   rH   rG   rD   r  r  r_   r   s   &&&     r   rE   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                	   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FormatFrR  rG  Tr  Nzexpected %d values, got %dr,   z[])#r   r|   r.  r  r   r  isCountr(  r  r   r%  r  rR  rG  r   r  r  writeFormatr  r   r  r&  r  r)  r*  r   r&  r  r  r  isLookupTyper  writer    r/  )r   r^   rG   deleteFormatrD   r  r-   r  r_   r  r   s   &&&        r   rU   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+   r6   r   rH   s   &&r   r"  BaseTable.readFormatM      r   c                    R # r+   r6   ro   s   &&r   r1  BaseTable.writeFormatP  r9  r   c                H   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 # )Nr/  )r   r    r|   r/  begintagnewlinerw   endtag)r   	xmlWriterrG   r   r   	tableNames   &&&&& r   rx   BaseTable.toXMLS  s     Ddnn&=&=	=E4""h455E9,I$#r   c           
        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  rC   r   r6  xmlWriter  r  vars)r   r@  rG   r  r-   r   r(  s   &&&    r   rw   BaseTable.toXML2_  s     &&(D{{{ii4(/GAMM)4gq\NS  0 888D4d$D$D))T iuiiD )r   c                @    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+   )r  r  xmlReadr  rC   r   r  rW  )r   r   r   r   rG   r  r-   seqs   &&&&&   r   r}   BaseTable.fromXMLp  s    	**40D UT2 ;;"$		40C{ii-JJuD))U+  		s   B Bc                J    V P                  V4      pV\        J d   V# V'       * # r+   r=  r>  s   && r   r@  BaseTable.__ne__  rB  r   c                    \        V 4      \        V4      8w  d   \        # V P                  4        VP                  4        V P                  VP                  8H  # r+   )ri   r  r   r  r   s   &&r   r  BaseTable.__eq__  sC    :e$!! }}..r   c                   4   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                L   < V ^8  d   Qh/ S[ ;R&   R;R&   S[S[,          ;R&   # )r  r   r  r-   rD  )r   r   r&  )r  r'   s   "r   __annotate__$BaseTable.SubTableEntry.__annotate__  s/      	  	 
 }# r   r6   )	r    r!   r"   r#   r   rD  __annotate_func__r$   r%   r&   s   @r   SubTableEntryrQ    s     +  $  r   rV  c                0   < V ^8  d   QhRS[ S[,          /# )r  return)r	   rV  )r  r'   s   "r   rS  BaseTable.__annotate__  s      x6 r   c              #  F  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   ~   <"   T F2  w  r\        V\        4      '       g   K  SP                  SW!R 7      x  K4  	  R# 5i))rD  N)r%  r  rV  ).0r   r  r   r   s   &  r   	<genexpr>*BaseTable.iterSubTables.<locals>.<genexpr>  s9       0!!Y/ 9D&&tQ&88 0s   ==)r  r   rC   r%  r  rV  r,  r6  )r   r  r-   r   s   f  @r   r  BaseTable.iterSubTables  s      &&(D99DD$-E}%++((u55E4(( )% 0   )s   A2B!;B!BB!c                ,    \        V P                  4      # r+   )getVariableAttrsr   r   s   &r   ra  BaseTable.getVariableAttrs  s    //r   )
__rawTabler  r+   r  )r    r!   r"   r#   r   r  r   r  classmethodr  r  r  r~   rE   rU   r"  r1  rx   rw   r}   r@  r  r
   rV  r  ra  r$   r%   r&   s   @r   r  r  k  s     :	#	9  +;6(TcJ
E",$B/$
 $ 40 0r   r  c                   \   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                    \         # r+   )r  )r  rH   s   &&r   r  &FormatSwitchingBaseTable.getRecordSize  s    r   c                     V P                   pT P                  P                  T P                   . 4      #   \         d    . u # i ; ir+   )r/  r  r  r  )r   fmts   & r   r  &FormatSwitchingBaseTable.getConverters  sE    	++C ""4;;33  	 I	s   4 AAc                J    V P                   V P                  ,          V,          # r+   )r  r/  r  s   &&r   r  +FormatSwitchingBaseTable.getConverterByName  s    $$T[[1$77r   c                0    VP                  4       V n        R # r+   )r   r/  r7  s   &&r   r"  #FormatSwitchingBaseTable.readFormat  s    '')r   c                <    VP                  V P                  4       R # r+   )r  r/  ro   s   &&r   r1  $FormatSwitchingBaseTable.writeFormat  s    4;;'r   Nc                4    \         P                  WW#V4       R # r+   )r  rx   )r   r@  rG   r   r   s   &&&&&r   rx   FormatSwitchingBaseTable.toXML  s    d;r   c                B    \        V P                  V P                  4      # r+   )ra  r   r/  r   s   &r   ra  )FormatSwitchingBaseTable.getVariableAttrs  s    <<r   r/  r  )r    r!   r"   r#   r   rd  r  r  r  r"  r1  rx   ra  r$   r%   r&   s   @r   rf  rf    sA     9  
48*(<= =r   rf  c                   ,   a  ] tR tRt o R tR tRtV tR# )UInt8FormatSwitchingBaseTablei  c                0    VP                  4       V n        R # r+   )r   r/  r7  s   &&r   r"  (UInt8FormatSwitchingBaseTable.readFormat  s    &&(r   c                <    VP                  V P                  4       R # r+   )r  r/  ro   s   &&r   r1  )UInt8FormatSwitchingBaseTable.writeFormat  s    $++&r   rv  N)r    r!   r"   r#   r"  r1  r$   r%   r&   s   @r   rx  rx    s     )' 'r   rx  uint16uint8c                 Z     \         V ,          #   \         d    \        R T : 24      hi ; i)zUnsupported format type: )formatSwitchingBaseTablesr  	TypeError)
formatTypes   &r    getFormatSwitchingBaseTableClassr    s7    D(44 D3J>BCCDs    *c                h    V ^8  d   QhR\         R\        \        ,          R\        \        ,          /# )r  r  rj  rX  )r  r   r&  r   r   )r  s   "r   rS  rS    s)     = =) =(3- =5: =r   c                   \        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 VarIndexBase)keyr6   )
issubclassr  r  rf  r    r  r  getVarIndexOffsetrL  sortedr  )r  rj  r  varAttrsr   r  r   s   &&     r   ra  ra    s     c9%%n#/00;Ecll^TUU))#.
))
Z'	H &&(
'')#TN ) &:&:;<<r   c                  6    / p \          F  w  rr4WV3W&   K  	  V # r+   )valueRecordFormat)dmaskr   isDevicesigneds        r   
_buildDictr  &  s'    
A(9$H&( ):Hr   c                   <   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                |    . p\          F)  w  r4rVW,          '       g   K  VP                  WEV34       K+  	  W n        R # r+   )r  rW  r  )r   valueFormatr  r  r   r  r  s   &&     r   r   ValueRecordFactory.__init__3  s7    ,=(D!!tv67 -> r   c                ,    \        V P                  4      # r+   )r   r  r   s   &r   __len__ValueRecordFactory.__len__:  s    4;;r   c                ^   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# )Nr=   )
r  ValueRecordr   r   rA   r>   r   rC   rE   r  )r   rH   rG   r  valueRecordr   r  r  r-   r>   	subReaders   &&&        r   readValueRecord"ValueRecordFactory.readValueRecord=  s    !m&,"DF((*))+* & 3 3E :I#H35EOOI4 EKu- '- r   c                T   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  rC   ru  r  rU   r  r  )	r   r^   rG   r  r   r  r  r-   r  s	   &&&&     r   writeValueRecord#ValueRecordFactory.writeValueRecordS  s    &*kk"DFKq1E & 3 3 5I((q(AMM)2&&q)!!%(""5) '2r   )r  N)r    r!   r"   r#   r   r   r  r  r  r$   r%   r&   s   @r   r  r  0  s!     @ ,* *r   r  c                   R   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# )r  ic  Nc                X   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+   )r  r  r  r  r|   r   )	r   r  srcr  r   r  r  r  vals	   &&&      r   r   ValueRecord.__init__f  s    "0A,H%%Da@ 1B  # 2 2 4HC"4-- Ds+ !5 
 _LL--/DM r   c                    ^ pV P                   P                  4        F  pV\        V,          ^ ,          ,          pK   	  V# r   )r  keysvalueRecordFormatDict)r   r  r   s   &  r   	getFormatValueRecord.getFormats  s8    MM&&(D3D9!<<F )r   c                    ^ pV P                   P                  4        F*  w  r#V'       g   K  V\        V,          ^ ,          ,          pK,  	  V# r   )r  r  r  )r   r  r   r-   s   &   r   getEffectiveFormatValueRecord.getEffectiveFormaty  sA    ==..0KDu"7"=a"@@ 1 r   c                v   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)r   )
r,  r  r|   rW  rC   r=  r>  rx   r?  	simpletag)r   r@  rG   	valueNamer   simpleItemsr  r   r  r  deviceItemsdevicedeviceRecords   &&&&&        r   rx   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                b   ^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{   r=   N)	rA   r>   r  r  r&  r%  rL  rC   r}   )r   r   r   r   rG   r>   kr  elementr-   elem2name2attrs2content2s   &&&&&         r   r}   ValueRecord.fromXML  s    KKMDADSV$ "Ggu--#* DH+-E !%//*/'xeX<	 !
 D& r   c                J    V P                  V4      pV\        J d   V# V'       * # r+   r=  r>  s   && r   r@  ValueRecord.__ne__  rB  r   c                r    \        V 4      \        V4      8w  d   \        # V P                  VP                  8H  # r+   )ri   r  r  r   s   &&r   r  ValueRecord.__eq__  s+    :e$!!}}..r   )r  r  r+   )r    r!   r"   r#   r   r  r  rx   r}   r@  r  r$   r%   r&   s   @r   r  r  c  s.     0 4'"B/ /r   r  r+   ))r{   
XPlacementr   r{   )r  
YPlacementr   r{   )r   XAdvancer   r{   )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   )7fontTools.configr   fontTools.misc.textToolsr   r   r   enumr   r   r   r   logging	functoolsr   typingr	   r
   r   r   	getLoggerr    rP   rR   	uharfbuzzrg   rS   rO   objectr   r)  r)   r5   r;   r   ry  itemsizerB   r	  rT   r  r  r.  r-  r1  r  rf  rx  r  r  ra  r  r  r  r  r  r6   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=