+
    f7i! c                   sl   ^ RI HtHtHtHtH	t
Ht ^ RIHt ^ RIHtHt ^ RIHtHtHtHtHt ^ RIHt ^ RIHtHt ^RIHtHtH t H!t!H"t" ^RI#H$t$H%t%H&t&H't'H(t(H)t)H*t*H+t+H,t,H-t.H/t0H1t1 ^ R	I2H3t3H4t4 ^ R
I5H6t6 ^ RI7H8t8 ^ RI9t9^ RI:t:^ RI;H<t< ^ RI=t=]=P|                  ! ]?4      t@R tAR tB ! R R]C4      tD ! R R]D4      tE ! R R]E4      tF ! R R]E4      tG ! R R]G4      tH ! R R]G4      tI ! R R]I4      tJ ! R R]F]I4      tK ! R  R!]G4      tL ! R" R#]G4      tM ! R$ R%]G4      tN ! R& R']G4      tO ! R( R)]G4      tP ! R* R+]G4      tQ ! R, R-]Q]O4      tR ! R. R/]Q]M4      tS ! R0 R1]Q]I4      tT ! R2 R3]E4      tU ! R4 R5]E4      tV ! R6 R7]V4      tW ! R8 R9]M4      tX ! R: R;]M4      tY ! R< R=]E4      tZ ! R> R?]Z4      t[ ! R@ RA]Z4      t\ ! RB RC]\4      t] ! RD RE]\4      t^ ! RF RG]^4      t_ ! RH RI]_4      t` ! RJ RK]E4      ta ! RL RM]E4      tb ! RN RO]D4      tc ! RP RQ]c4      td ! RR RS]c4      te ! RT RU]e4      tf ! RV RW]e4      tg ! RX RY]c4      th ! RZ R[]e4      ti ! R\ R]]f]i4      tj ! R^ R_]e4      tk ! R` Ra]G4      tl ! Rb Rc]l4      tm ! Rd Re]D4      tn ! Rf Rg]D4      to ! Rh Ri]D4      tp ! Rj Rk]D4      tq ! Rl Rm]D4      tr ! Rn Ro]D4      ts ! Rp Rq]D4      tt ! Rr Rs]D4      tu ! Rt Ru]D4      tv ! Rv Rw4      tw ! Rx Ry]D4      tx ! Rz R{]M4      ty ! R| R}]O4      tz ! R~ R]z4      t- ! R R]z4      t// R]NbR]LbR]HbR]ObR]MbR]PbR]IbR]bbR]JbR]KbRK]abR3]UbR5]VbR7]WbR9]XbR?][bRC]]b/ RE]^bRG]_bRI]`bR]cbR]ebR]fbR]gbRc]mbRq]tbRs]ubRu]vbR{]ybR]-bR]/bR;]YbR]6! ]x]wR7      bR]6! ]x]%R7      bCRm]rRo]sR]dR]dR]dR]pReR RgR RkR RR RR RR /Ct{R# )    )fixedToFloatfloatToFixedfloatToFixedToStrstrToFixedToFloatensureVersionIsLongversionToFixed)TupleVariation)nearestMultipleShortestReprotRound)	bytesjointobytestostrpadsafeEval)LazyList)OPTIMIZE_FONT_SPEEDgetSearchRange)CountReferenceFormatSwitchingBaseTableOTTableReaderOTTableWriterValueRecordFactory)lookupTypesVarCompositeGlyphAATStateTableAATState	AATActionContextualMorphActionLigatureMorphActionInsertionMorphActionMorxSubtable
ExtendModeCompositeModeNO_VARIATION_INDEX)zip_longest
accumulate)partial)SimpleNamespaceN)Optionalc                 s"    \        V \        4      # N)
isinstancetuple)t   &J/usr/lib64/python3.14/site-packages/fontTools/ttLib/tables/otConverters.py<lambda>r.   -   s    Jq%(    c           	     sr   . p/ pV  EF*  w  rErgpTp	VP                  R4      '       d   VR8X  g   Q h\        p
MVP                  R4      '       g   VR9   d   R\        R\        R\
        /V,          p
MqVR8X  d   \        p
McVR8X  d   \        p
MUVR8X  d   \        p
MGVR	8X  d   \        p
M9VR9   d   \        p
M+V\        9   g   R
V9  d
   Tp	\        p
M\        WA\        4      p
V
! WVWxR7      pVP                  '       d   VP                  pM*VR9   d   VP                  V4      pMVP                  V	4      pVP                  '       g   Wn        VR9   d_   VR,          Vn        VP                   P#                  4        F2  pVP#                  4        F  p\%        WVW~4      W>P&                  &   K  	  K4  	  VR	8X  dV   VR,          Vn        VR	,          Vn        VP(                  P#                  4        F  p\%        WVW~4      W>P&                  &   K  	  VP-                  V4       WS9  g   Q V4       hWV&   EK-  	  W#3# )zGiven a table spec from otData.py, build a converter object for each
field of the table. This is called for each table in otData.py, and
the results are assigned to the corresponding class in otTables.py.ValueFormatuint16Countuint8uint32SubTableExtSubTable	SubStructFeatureParamsZ(descriptionr   featureParamTypes)StructLength	MorphType)ZCIDGlyphMappingZGlyphCIDMapping)	MortChainMortSubtable	MorxChain)r5   r6   r7   )Z
startswithr0   endswithComputedUInt8ComputedUShortComputedULongr5   r6   r7   r8   StructWithLengthconverterMappingStructeval
tableClassgetr   valuesTable__name__r;   defaultFeatureParamsappend)Z	tableSpecZtableNamespaceZ
convertersZconvertersByNameZtpnamerepeatauxZdescrZ	tableNameZconverterClassconvrI   r+   clss   &&             r-   buildConvertersrU   0   s    J(1$&u	??=))>!>(N]]7##t/L'L.- 	N
 Z%N]"(N[ &N_$*N;;-N))cm	!'!%b:J!KdCC???J=='++B/J'++I6J(O;;-m<D%%,,.88:C5:45R$\\2 & / ?"%34G%HD"(6(GD%--44616tS1N . 7$+1T1+!%m )2n ''r/   c                   s   a  ] tR t^pt o RtRRR/R lltR tR tR tR	 t	RR
 lt
R tR t]P                  ! R4      tV 3R lR ltRtV tR# )BaseConverterzXBase class for converter objects. Apart from the constructor, this
is an abstract class.Nr:    c               sb   Wn         W n        W0n        V P                  '       d/   V P                  '       g   \        V P                  R R4      V n        W@n        VP                  R4      ;'       g    VR9   V n        VP                  R4      ;'       g    VR8H  V n        VR9   V n        WPn	        R# )z<string>rH   r2   Z
LookupTyper=   N)DesignAxisRecordSizeValueRecordSize)Z
ClassCountZClass2CountZ
FeatureTagZSettingsCountVarRegionCountMappingCountZRegionAxisCountZDesignAxisCountrX   ZAxisValueCountrY   Z	AxisCountZBaseGlyphRecordCountZLayerRecordCountZAxisIndicesList)
rP   rQ   rR   compilerI   rA   isCountisLookupTypeisPropagatedr:   selfrP   rQ   rR   rI   r:      &&&&&$r-   __init__ZBaseConverter.__init__t   s    	888DKKKtxxV<DH$}}W- 
 
 :
 2
 !MM,7NN4;;N  %
 
" 'r/   c                s  a aaa	a
 SP                   ;'       d    V^8  pV'       d   S P                  S4      o
S
\        J d   RpV'       g9   . p\        V4       F%  pVP	                  S P                  SSV4      4       K'  	  V# VVV
V 3R lpV! 4       o	\        V	3R l\        V4       4       4      pSP                  VS
,          4       V# )z(Read an array of values from the reader.Fc                  sX   <aa SP                  4       oSP                  oVVVVV3R  lp V # )c                 sh   < SP                  SV S,          ,           4       SP                  SS/ 4      # r(   )seekread)ifontposreader_copy
recordSizera   s   &r-   	read_itemZABaseConverter.readArray.<locals>.get_read_item.<locals>.read_item   s-    $$S1z>%9:99[$;;r/   Zcopyrh   )rk   rh   ri   rg   readerrj   ra   s    @@r-   get_read_itemZ.BaseConverter.readArray.<locals>.get_read_item   s)    $kkmjj< < ! r/   c              3   s(   <"   T F  pSx  K	  	  R # 5ir(    )Z.0rf   rk   s   & r-   Z	<genexpr>Z*BaseConverter.readArray.<locals>.<genexpr>   s     9LqLs   )lazygetRecordSizeNotImplementedrangerO   re   r   Zadvance)ra   rm   rg   	tableDictcountrp   lrf   rn   rk   rj   s   fff&&    @@r-   	readArrayZBaseConverter.readArray   s    yy&&UQY++F3J^+A5\64;< "H! ! &I9E%L99ANN5:-.Hr/   c                sJ    \        V R 4      '       d   V P                  # \        # )
staticSize)hasattrrx   rr   ra   rm      &&r-   rq   ZBaseConverter.getRecordSize   s    4&&??"r/   c                    \        V 4      h)zRead a value from the reader.NotImplementedErrorra   rm   rg   rt      &&&&r-   re   ZBaseConverter.read       !$''r/   c                s     \        V4       F  w  rVV P                  WW6V4       K  	  R #   \         d    pTP                  X3,           Tn        h R p?ii ; ir(   )	enumeratewriteZ	ExceptionZargs)ra   writerrg   rt   rK   rf   valueZes   &&&&&   r-   
writeArrayZBaseConverter.writeArray   sL    	%f-

61= . 	VVqd]AF	s   '+ AAAc                r|   )zWrite a value to the writer.r}   ra   r   rg   rt   r   repeatIndex   &&&&&&r-   r   ZBaseConverter.write   r   r/   c                r|   )zRead a value from XML.r}   ra   attrscontentrg   r   r-   xmlReadZBaseConverter.xmlRead   r   r/   c                r|   )zWrite a value to XML.r}   ra   	xmlWriterrg   r   rP   r   r   r-   xmlWriteZBaseConverter.xmlWrite   r   r/   zVarIndexBase\s*\+\s*(\d+)c                s0   < V ^8  d   QhRS[ S[,          /# )   Zreturn)r'   int)format__classdict__s   "r-   Z__annotate__ZBaseConverter.__annotate__   s      8C= r/   c                s    V P                   P                  V P                  4      pV'       g   R# \        VP	                  ^4      4      # )zJIf description has `VarIndexBase + {offset}`, return the offset else None.N)varIndexBasePlusOffsetREZsearchr:   r   Zgroup)ra   ms   & r-   getVarIndexOffsetZBaseConverter.getVarIndexOffset   s6    ))001A1AB1771:r/   )rR   r:   r]   r^   r_   rP   rQ   rI   r(   )rM   
__module____qualname____firstlineno____doc__rc   rw   rq   re   r   r   r   r   rer\   r   r   __static_attributes____classdictcell__r      @r-   rV   rV   p   sU     '" '><
((((  "zz*FG r/   rV   c                   sL   a  ] tR t^t o ]R 4       t]R 4       tR tR tRt	V t
R# )SimpleValuec                    V # r(   ro   r   r,   r-   toStringZSimpleValue.toString       r/   c                r   r(   ro   r   r,   r-   
fromStringZSimpleValue.fromString   r   r/   c                sz    VP                  WER V P                  V4      3.,           4       VP                  4        R# r   N)	simpletagr   newliner   r   r-   r   ZSimpleValue.xmlWrite   s2    DGT]]55I+J*K"KLr/   c                s2    V P                  VR ,          4      # r   )r   r   r   r-   r   ZSimpleValue.xmlRead   s    uW~..r/   ro   N)rM   r   r   r   staticmethodr   r   r   r   r   r   r   r   r-   r   r      s:        / /r/   r   c                   s0   a  ] tR t^t o RtR tR tRtV tR# )OptionalValueNc                s    W0P                   8w  d#   VP                  R V P                  V4      34       VP                  WE4       VP	                  4        R# r   )DEFAULTrO   r   r   r   r   r   r-   r   ZOptionalValue.xmlWrite   s@    LL LL'4==#789D(r/   c                sX    R V9   d   V P                  VR ,          4      # V P                  # r   )r   r   r   r   r-   r   ZOptionalValue.xmlRead   s'    e??5>22||r/   ro   )	rM   r   r   r   r   r   r   r   r   r   r   r-   r   r      s     G r/   r   c                   s0   a  ] tR t^t o ]R 4       tRtV tR# )IntValuec                s    \        V ^ 4      # r    )r   r   r,   r-   r   ZIntValue.fromString   s    5!}r/   ro   NrM   r   r   r   r   r   r   r   r   r   r-   r   r      s      r/   r   c                   s@   a  ] tR t^t o ^tR tR tRR ltR tRt	V t
R# )Longc                "    VP                  4       # r(   readLongr   r   r-   re   Z	Long.read        r/   c                $    VP                  V4      # r(   )readLongArrayra   rm   rg   rt   ru      &&&&&r-   rw   ZLong.readArray      ##E**r/   Nc                (    VP                  V4       R # r(   )	writeLongr   r   r-   r   Z
Long.write      r/   c                r   r(   )writeLongArrayra   r   rg   rt   rK   r   r-   r   ZLong.writeArray
      f%r/   ro   r(   rM   r   r   r   rx   re   rw   r   r   r   r   r   r   r-   r   r      #     J!+ & &r/   r   c                   s@   a  ] tR tRt o ^tR tR tRR ltR tRt	V t
R# )	ULongi  c                r   r(   	readULongr   r   r-   re   Z
ULong.read      !!r/   c                r   r(   )readULongArrayr   r   r-   rw   ZULong.readArray      $$U++r/   Nc                r   r(   
writeULongr   r   r-   r   ZULong.write      % r/   c                r   r(   )writeULongArrayr   r   r-   r   ZULong.writeArray      v&r/   ro   r(   r   r   r   r-   r   r     #     J",!' 'r/   r   c                   0   a  ] tR tRt o ]R 4       tRtV tR# )Flags32i  c                    R V ,          # )z0x%08Xro   r   r,   r-   r   ZFlags32.toString      %r/   ro   N)rM   r   r   r   r   r   r   r   r   r   r-   r   r     s        r/   r   c                       ] tR tRt]tRtR# )VarIndexi$  ro   N)rM   r   r   r   r"   r   r   ro   r/   r-   r   r   $  s     Gr/   r   c                   @   a  ] tR tRt o ^tR tR tRR ltR tRt	V t
R# )	Shorti(  c                r   r(   )	readShortr   r   r-   re   Z
Short.read+  r   r/   c                r   r(   )readShortArrayr   r   r-   rw   ZShort.readArray.  r   r/   Nc                r   r(   )
writeShortr   r   r-   r   ZShort.write1  r   r/   c                r   r(   )writeShortArrayr   r   r-   r   ZShort.writeArray4  r   r/   ro   r(   r   r   r   r-   r   r   (  r   r/   r   c                   r   )	UShorti8  c                r   r(   
readUShortr   r   r-   re   ZUShort.read;        ""r/   c                r   r(   )readUShortArrayr   r   r-   rw   ZUShort.readArray>  s    %%e,,r/   Nc                r   r(   writeUShortr   r   r-   r   ZUShort.writeA      5!r/   c                r   r(   )writeUShortArrayr   r   r-   r   ZUShort.writeArrayD  s    'r/   ro   r(   r   r   r   r-   r   r   8  s#     J#-"( (r/   r   c                   @   a  ] tR tRt o ^tR tR tRR ltR tRt	V t
R# )	Int8iH  c                r   r(   )ZreadInt8r   r   r-   re   Z	Int8.readK  r   r/   c                r   r(   )readInt8Arrayr   r   r-   rw   ZInt8.readArrayN  r   r/   Nc                r   r(   )Z	writeInt8r   r   r-   r   Z
Int8.writeQ  r   r/   c                r   r(   )writeInt8Arrayr   r   r-   r   ZInt8.writeArrayT  r   r/   ro   r(   r   r   r   r-   r   r   H  r   r/   r   c                   r   )	UInt8iX  c                r   r(   )	readUInt8r   r   r-   re   Z
UInt8.read[  r   r/   c                r   r(   )readUInt8Arrayr   r   r-   rw   ZUInt8.readArray^  r   r/   Nc                r   r(   )
writeUInt8r   r   r-   r   ZUInt8.writea  r   r/   c                r   r(   )writeUInt8Arrayr   r   r-   r   ZUInt8.writeArrayd  r   r/   ro   r(   r   r   r   r-   r   r   X  r   r/   r   c                   s4   a  ] tR tRt o ^tR tRR ltRtV tR# )UInt24ih  c                r   r(   Z
readUInt24r   r   r-   re   ZUInt24.readk  r   r/   Nc                r   r(   ZwriteUInt24r   r   r-   r   ZUInt24.writen  r   r/   ro   r(   	rM   r   r   r   rx   re   r   r   r   r   r   r-   r   r   h  s     J#" "r/   r   c                   &   a  ] tR tRt o R tRtV tR# )ComputedIntir  c                sb    Ve+   VP                  V: RV: 24       VP                  4        R # R # )NZ=)commentr   r   r   r-   r   ZComputedInt.xmlWrites  s,    u56 r/   ro   NrM   r   r   r   r   r   r   r   r   r-   r   r   r  s        r/   r   c                       ] tR tRtRtR# )rB   iy  ro   NrM   r   r   r   r   ro   r/   r-   rB   rB   y      r/   rB   c                   r   )rC   i}  ro   Nr   ro   r/   r-   rC   rC   }  r   r/   rC   c                   r   )rD   i  ro   Nr   ro   r/   r-   rD   rD     r   r/   rD   c                   s4   a  ] tR tRt o ^tR tRR ltRtV tR# )Tagi  c                r   r(   )ZreadTagr   r   r-   re   ZTag.read  s    ~~r/   Nc                r   r(   )ZwriteTagr   r   r-   r   Z	Tag.write  s    r/   ro   r(   r   r   r   r-   r   r     s     J  r/   r   c                   sD   a  ] tR tRt o ^tRtR tR tR tR	R lt	Rt
V tR# )
GlyphIDi  ZHc                sn    VP                  VP                  V P                  V P                  V4      4      # r(   )getGlyphNameManyrw   typecoderx   r   r   r-   rw   ZGlyphID.readArray  s/    $$T]]DOOUC
 	
r/   c                sl    VP                  VP                  V P                  V P                  4      4      # r(   )getGlyphNameZ	readValuer   rx   r   r   r-   re   ZGlyphID.read  s(      !1!1$--!QRRr/   c                \    VP                  V P                  VP                  V4      4       R # r(   )r   r   ZgetGlyphIDManyr   r   r-   r   ZGlyphID.writeArray  s!    $--)<)<V)DEr/   Nc                r   r(   )Z
writeValuer   
getGlyphIDr   r   r-   r   ZGlyphID.write  s    $--)?@r/   ro   r(   )rM   r   r   r   rx   r   rw   re   r   r   r   r   r   r   r-   r   r     s,     JH

SFA Ar/   r   c                   s    ] tR tRt^tRtRtR# )	GlyphID32i  ZLro   N)rM   r   r   r   rx   r   r   ro   r/   r-   r   r     s    JHr/   r   c                   r   )NameIDi  c                s   VP                  WER V3.,           4       V'       d   V'       d   VP                  R4      pV'       dj   VP                  V4      pVP                  R4       V'       d   VP	                  V4       M-VP	                  R4       \
        P                  RV,          4       VP                  4        R# )r   rP     zmissing from name tablez"name id %d missing from name tableN)r   rJ   ZgetDebugNamer   r   logwarningr   )ra   r   rg   r   rP   r   Z	nameTable   &&&&&& r-   r   ZNameID.xmlWrite  s    DGU+;*<"<=E(I --e4%%%d+%%&?@KK Du LMr/   ro   Nr   r   r   r-   r   r     s      r/   r   c                   r   )	STATFlagsi  c                sR   VP                  WER V3.,           4       . pV^,          '       d   VP                  R4       V^,          '       d   VP                  R4       V'       d2   VP                  R4       VP                  RP	                  V4      4       VP                  4        R# )r   ZOlderSiblingFontAttributeZElidableAxisValueNamer    N)r   rO   r   r   joinr   ra   r   rg   r   rP   r   flagsr  r-   r   ZSTATFlags.xmlWrite  s    DGU+;*<"<=4<<LL454<<LL01OOD!chhuo.r/   ro   Nr   r   r   r-   r  r    s     
 
r/   r  c                   r   )
FloatValuei  c                    \        V 4      # r(   )floatr   r,   r-   r   ZFloatValue.fromString      U|r/   ro   Nr   r   r   r-   r	  r	    s      r/   r	  c                   s4   a  ] tR tRt o ^tR tRR ltRtV tR# )
DeciPointsi  c                s0    VP                  4       ^
,          # )
   r   r   r   r-   re   ZDeciPoints.read  s      "R''r/   Nc                sH    VP                  \        V^
,          4      4       R# )r  N)r   Zroundr   r   r-   r   ZDeciPoints.write  s    5,-r/   ro   r(   r   r   r   r-   r  r    s     J(. .r/   r  c                   s   a  ] tR tRt o ]t]t]t]tR t	R
R lt
]R 4       t]R 4       t]R 4       t]R 4       tR	tV tR# )BaseFixedValuei  c                sT    V P                  \        WP                  4      ! 4       4      # r(   )fromIntgetattrreaderMethodr   r   r-   re   ZBaseFixedValue.read  s    ||GF,=,=>@AAr/   Nc                sZ    \        WP                  4      ! V P                  V4      4       R # r(   )r  writerMethodtoIntr   r   r-   r   ZBaseFixedValue.write  s    ))*4::e+<=r/   c                ,    \        WP                  4      # r(   )fi2flprecisionBitsrT   r   r{   r-   r  ZBaseFixedValue.fromInt      U--..r/   c                r  r(   )fl2fir  r  r{   r-   r  ZBaseFixedValue.toInt  r  r/   c                r  r(   )str2flr  r  r{   r-   r   ZBaseFixedValue.fromString      e..//r/   c                r  r(   )fl2strr  r  r{   r-   r   ZBaseFixedValue.toString  r  r/   ro   r(   )rM   r   r   r   rr   rx   r  r  r  re   r   classmethodr  r  r   r   r   r   r   r   r-   r  r    st     J"M!L!LB> / / / / 0 0 0 0r/   r  c                   s&    ] tR tRt^t^tRtRtRtR# )Fixedi  r   r   ro   N	rM   r   r   r   rx   r  r  r  r   ro   r/   r-   r  r    s    JMLLr/   r  c                   s&    ] tR tRt^t^tRtRtRtR# )F2Dot14i  r   r   ro   Nr   ro   r/   r-   r!  r!    s    JMLLr/   r!  c                   sz   a a ] tR tRt oRtRt]V 3R l4       t]V 3R l4       t]R 4       t	]R 4       t
RtVtV ;t# )	Anglei   g        c                sR   < \         SV `  V4      V P                  ,           ^,          # i   )superr  biasrT   r   	__class__   &&r-   r  ZAngle.fromInt  s     &1S88r/   c                sR   < \         SV `  V^,          V P                  ,
          4      # r#  )r$  r  r%  r&  r(  r-   r  ZAngle.toInt
  s    w}eckSXX566r/   c                sn    \        \        V4      V P                  ,          4      V P                  ,          # r(   )r	   r  factorr  r{   r-   r   ZAngle.fromString  s%     uU|cjj01CJJ>>r/   c                r  r(   )r   r)  r  r{   r-   r   ZAngle.toString  s    *5**==r/   ro   g     ?)rM   r   r   r   r%  r)  r  r  r  r   r   r   r   __classcell__r'  r      @@r-   r"  r"     sd      D"F9 9 7 7 ? ? > > >r/   r"  c                   s    ] tR tRtRtRtR# )BiasedAnglei  g      ?ro   N)rM   r   r   r   r%  r   ro   r/   r-   r-  r-    s	     Dr/   r-  c                   sd   a  ] tR tRt o ^tR tR	R lt]R 4       t]R 4       t	]R 4       t
RtV tR# )
Versioni  c                s&    VP                  4       pV# r(   r   )ra   rm   rg   rt   r      &&&& r-   re   ZVersion.read!  s    !r/   Nc                s>    \        V4      pVP                  V4       R # r(   )fi2ver   r   r   r-   r   ZVersion.write%  s    er/   c                r
  r(   )ve2fir   r,   r-   r   ZVersion.fromString)  r  r/   c                r   )0x%08xro   r   r,   r-   r   ZVersion.toString-  r   r/   c                s    \        V ^4      # )i   )r  )vr,   r-   	fromFloatZVersion.fromFloat1  s    Q|r/   ro   r(   )rM   r   r   r   rx   re   r   r   r   r   r4  r   r   r   r   r-   r.  r.    sP     J         r/   r.  c                   s8   a  ] tR tRt o Rt^@tR tRR ltRtV t	R# )Char64i6  zAn ASCII string with up to 64 characters.

Unused character positions are filled with 0x00 bytes.
Used in Apple AAT fonts in the `gcid` table.
c                s    VP                  V P                  4      pVP                  R 4      pV^ 8  d   VRV p\        VRRR7      pV\        VRRR7      8w  d   \        P                  RV,          4       V# )    NasciireplaceZencodingZerrorsignorez%replaced non-ASCII characters in "%s")readDatarx   Zfindr   r  r  )ra   rm   rg   rt   dataZzeroPosZs   &&&&   r-   re   ZChar64.read?  sj    t/))E"a<>D$;dWX>>KK?!CDr/   Nc                sr   \        VR RR7      pV\        VR RR7      8w  d   \        P                  RV,          4       \        V4      V P                  8  d(   \        P                  RW@P                  3,          4       VRV P                  ,          ,           RV P                   pVP                  V4       R# )r7  r8  r9  r:  z&replacing non-ASCII characters in "%s"z$truncating overlong "%s" to %d bytesr6  N)r   r  r  lenrx   	writeData)ra   r   rg   rt   r   r   r<  r  r-   r   ZChar64.writeI  s    uwyA7578DDKK@5HIt9t&KK6%9QQ ut..0A$//Br/   ro   r(   )
rM   r   r   r   r   rx   re   r   r   r   r   r   r-   r5  r5  6  s       J	 	r/   r5  c                   sH   a  ] tR tRt o R tR tR
R ltR tR tR t	R	t
V tR# )rG   iU  c                s`    V P                   ;'       d    V P                   P                  V4      # r(   )rI   rq   rz   r{   r-   rq   ZStruct.getRecordSizeV  s#    HH4??#@#@#HHr/   c                sH    V P                  4       pVP                  W4       V# r(   )rI   	decompile)ra   rm   rg   rt   tabler/  r-   re   ZStruct.readY  s    !%r/   Nc                s(    VP                  W4       R # r(   )r\   r   r   r-   r   ZStruct.write^  s    f#r/   c                s    Vf6   V'       d,   VP                  WER.,           4       VP                  4        R # R # VP                  WWTR7       R # )N)rP   )empty   )r   r   toXMLr   r   r-   r   ZStruct.xmlWritea  s@    = ##D<.*@A!!#KK	K:r/   c                s   R V9   d   \        VR ,          4      '       d   R# V P                  4       pVP                  R4      pVe   \        V4      Vn        \        VR4      '       * pV'       d   RpVP                  4        F  pVP                  '       g   K  Rp\        VR4      '       g   / Vn        VP                  p	VP                  V	9  g   Q VP                  V	34       h\        WHP                  R4       \        VP                  VP                  4      WP                  &   K  	  V F2  p
\        V
\        4      '       d   V
w  rpVP                  WW#4       K2  K4  	  VP!                  \#        VRR4      R7       V'       dX   X'       dP   VP                  4        F;  pVP                  '       g   K  VP                  p	WP                   V	'       d   K9  V=K=  	  V# )rB  NFormatZpostReadFT_propagator)
propagator)r   rI   rJ   r   rE  ry   getConvertersr_   rF  rP   Zsetattrr   Z__dict__r)   r*   fromXMLZpopulateDefaultsr  )ra   r   r   rg   rA  rE  Z
noPostReadZcleanPropagationrS   rG  elementrP      &&&&        r-   r   ZStruct.xmlReadn  s   ew 8 8!8$v;EL 
33
$++-$$$'+$"477+-(!%!1!1J99J6OJ8OO6E99d3,:5>>499,UJyy) . G'5))'.$Wd79  	'$t*LM!//1D(((%)%5%5
&yy1)z $ 0 2 r/   c                s:    R \        V P                  4      ,           # )z
Struct of )reprrI   )ra   r,   r-   __repr__ZStruct.__repr__  s    d4??333r/   ro   r(   )rM   r   r   r   rq   re   r   r   r   rM  r   r   r   r   r-   rG   rG   U  s*     I
$;(T4 4r/   rG   c                   0   a  ] tR tRt o R tRR ltRtV tR# )rE   i  c                s    VP                   pV P                  4       pVP                  W4       VP                  WEP                  ,           4       V# r(   )rh   rI   r@  rd   r<   )ra   rm   rg   rt   rh   rA     &&&&  r-   re   ZStructWithLength.read  s=    jj!%C,,,-r/   Nc                s`   \        VP                  4       4       F  w  rgVP                  R 8X  g   K   M	  \        VP                  4      X,           p\        V\        4      '       d
   V^,          p^^^R^R/XP                  ,          p	VP                  4       p
Wn	        VP                  W4       VP                  4       V
,
          pVP                  4       pVP                  WW;4       VP                  V,          RRVP                   8X  g   Q hVP                  4       VP                  V&   R# )r<   i     >[=    ޭN)r   rH  rP   r>  itemsr)   r   rx   getDataLengthr<   r\   getSubWriterr   
getAllData)ra   r   rg   rt   r   r   Z	convIndexrS   lengthIndexZdeadbeefbeforelengthZlengthWriter   &&&&&&       r-   r   ZStructWithLength.write  s    ()<)<)>?OIyyN*  @ &,,')3e5661KtQ:6tG%%'%f#%%'&0**,

<y9||K(,?@Q$//,RRRR$0$;$;$=[!r/   ro   r(   rM   r   r   r   re   r   r   r   r   r   r-   rE   rE     s     > >r/   rE   c                   s@   a  ] tR tRt o ^tR tR tR tRR ltRt	V t
R# )	rL   i  c                r   r(   r   rz   r{   r-   
readOffsetZTable.readOffset  r   r/   c                (    VP                  ^ 4       R# r    Nr   ra   r   r{   r-   writeNullOffsetZTable.writeNullOffset      1r/   c                s    V P                  V4      pV^ 8X  d   R# V P                  4       pVP                  V4      pVP                  '       d   Wn        W%n        V# VP                  W4       V# r]  )r[  rI   getSubReaderrp   rm   rg   r@  )ra   rm   rg   rt   offsetrA  rO  r-   re   Z
Table.read  sc    (Q;!$$V,999!LJ  OOF)r/   Nc                s    Vf   V P                  V4       R # VP                  4       pV P                  Vn        Ve   WVn        VP	                  W`P
                  R7       VP                  Wb4       R # )NZ
offsetSize)r_  rT  rP   r   writeSubTablerx   r\   )ra   r   rg   rt   r   r   	subWriterr  r-   r   ZTable.write  s[    =  (++-I!YYIN&(3%   GMM)*r/   ro   r(   )rM   r   r   r   rx   r[  r_  re   r   r   r   r   r   r-   rL   rL     s#     J#	+ 	+r/   rL   c                   s0   a  ] tR tRt o ^tR tR tRtV tR# )LTablei  c                r   r(   r   rz   r{   r-   r[  ZLTable.readOffset  r   r/   c                r\  r]  r   r^  r{   r-   r_  ZLTable.writeNullOffset  s    !r/   ro   N	rM   r   r   r   rx   r[  r_  r   r   r   r   r-   rf  rf    s     J" r/   rf  c                   s0   a  ] tR tRt o ^tR tR tRtV tR# )Table24i  c                r   r(   r   rz   r{   r-   r[  ZTable24.readOffset  r   r/   c                r\  r]  r   r^  r{   r-   r_  ZTable24.writeNullOffset  r`  r/   ro   Nrg  r   r   r-   rh  rh    s     J# r/   rh  c                   8   a a ] tR tRt oR tV 3R ltRtVtV ;t# )r7   i  c                    V P                   V,          V,          pV P                  V P                  V P                  V P                  V4      # r(   r   r'  rP   rQ   rR   ra   Z	tableTypeZ
lookupTyperI      &&& r-   getConverterZSubStruct.getConverter  8    %%i0<
~~diidhh
KKr/   c                4   < \         \        V `  WVR V4       R # r(   )r$  r7   r   ra   r   rg   r   rP   r   r'     &&&&&&r-   r   ZSubStruct.xmlWrite  s    i'	eLr/   ro   	rM   r   r   r   rn  r   r   r   r*  r+  r,  r-   r7   r7     s     LM Mr/   r7   c                   ri  )r5   i  c                rj  r(   rk  rl  rm  r-   rn  ZSubTable.getConverter  ro  r/   c                rp  r(   )r$  r5   r   rq  rr  r-   r   ZSubTable.xmlWrite  s    h&ytUKr/   ro   rs  r+  r,  r-   r5   r5     s     LL Lr/   r5   c                   s*   a  ] tR tRt o RR ltRtV tR# )r6   i  Nc                sB    R Vn         \        P                  WW#WE4       R# )TN)Z	ExtensionrL   r   r   r   r-   r   ZExtSubTable.write  s    D$5Fr/   ro   r(   )rM   r   r   r   r   r   r   r   r   r-   r6   r6     s     G Gr/   r6   c                   r   )r8   i	  c                s    V P                   P                  WP                  4      pV P                  V P                  V P
                  V P                  V4      # r(   )r;   rJ   rN   r'  rP   rQ   rR   )ra   Z
featureTagrI   s   && r-   rn  ZFeatureParams.getConverter
  s?    ++//
<U<UV
~~diidhh
KKr/   ro   N)rM   r   r   r   rn  r   r   r   r   r-   r8   r8   	  s     L Lr/   r8   c                   sF   a  ] tR tRt o ^tR	RR/R lltR tR	R ltRtV t	R# )
r0   i  Nr:   rW   c          	     sr    \         P                  WW#WER 7       RVR,          R8X  d   RMR,           V n        R# )r9   r0   Z2Z1N)rV   rc   whichr`   rb   r-   rc   ZValueFormat.__init__  s6    Z 	 	
 #T"X_c#F
r/   c                sT    VP                  4       p\        V4      WP                  &   V# r(   )r   r   ru  ra   rm   rg   rt   r   r/  r-   re   ZValueFormat.read  s&    ""$/7zzr/   c                sV    VP                  V4       \        V4      WP                  &   R # r(   )r   r   ru  )ra   r   rg   rt   r   r   r   r-   r   ZValueFormat.write  s!    6"/7zzr/   )ru  r(   )
rM   r   r   r   rx   rc   re   r   r   r   r   r   r-   r0   r0     s'     JG" G
8 8r/   r0   c                   sB   a  ] tR tRt o R tR tR	R ltR tR tRt	V t
R# )
ValueRecordi"  c                sF    ^\        WP                  ,          4      ,          # r   )r>  ru  rz   r{   r-   rq   ZValueRecord.getRecordSize#  s    3vjj)***r/   c                sD    WP                   ,          P                  W4      # r(   )ru  ZreadValueRecordr   r   r-   re   ZValueRecord.read&  s    jj!11&??r/   Nc                sJ    WP                   ,          P                  WV4       R # r(   )ru  ZwriteValueRecordr   r   r-   r   ZValueRecord.write)  s    zz++F%@r/   c                sL    Vf   R # VP                  WV P                  V4       R # r(   )rD  rP   r   r   r-   r   ZValueRecord.xmlWrite,  s    =KK	E:r/   c                sF    ^RI Hp V! 4       pVP                  RWV4       V# )rC  )rw  N)otBaserw  rI  )ra   r   r   rg   rw  r   rO  r-   r   ZValueRecord.xmlRead2  s!    'dED1r/   ro   r(   )rM   r   r   r   rq   re   r   r   r   r   r   r   r   r-   rw  rw  "  s%     +@A; r/   rw  c                   s   a  ] tR tRt o ^
tRR/R ltR tRR lt]R 4       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# )	AATLookupi:  r:   rW   c          	     s    \         P                  WW#WER 7       \        V P                  \        4      '       d   V P                  RRRR7      V n        R# \        RRRV P                  R7      V n        R# )r9   ZValueN)rP   rQ   rR   )rP   rQ   rR   rI   )rV   rc   
issubclassrI   r   	converterrL   r`   rb   r-   rc   ZAATLookup.__init__=  s^    Z 	 	
 doo{33!__'$D_QDN"TtDNr/   c                s.   VP                  4       pV^ 8X  d   V P                  W4      # V^8X  d   V P                  W4      # V^8X  d   V P                  W4      # V^8X  d   V P	                  W4      # V^8X  d   V P                  W4      # Q RT,          4       h)r    zunsupported lookup format: %d)r   readFormat0readFormat2readFormat4readFormat6readFormat8rv  r/  r-   re   ZAATLookup.readH  s    ""$Q;##F11q[##F11q[##F11q[##F11q[##F11B9FBB5r/   Nc                s   \        \        VP                  4        UUu. uF  w  rgVP                  V4      V3NK  	  upp4      4      p\        \        \	        R V P                  WV4      V P                  WV4      V P                  WV4      V P                  WV4      .4      4      4      p	V	^ ,          w  rpVP                  4       pV! 4        VP                  4       V,
          pW8X  g   Q RVV
V3,          4       hR # u uppi )Nz;AATLookup format %d claimed to write %d bytes, but wrote %d)
listsortedrR  r   filterbuildFormat0buildFormat2buildFormat6buildFormat8rS  )ra   r   rg   rt   r   r   glyphvalrK   ZformatsZdataSizeZlookupFormatZwriteMethodrh   Z
actualSize   &&&&&&         r-   r   ZAATLookup.writeW  s   EKKMRMjeT__U+S1MRS
 ))&?))&?))&?))&?	

 /6aj+""$))+c1
"	
HL
 
	
"/ Ss   C=c                s    V P                  V4       V P                  V4       \        WR 7      w  r4pV P                  V4       V P                  V4       V P                  V4       R# ))ZnZitemSizeN)r   r   )r   numUnitsunitSizeZsearchRangeZentrySelectorZ
rangeShifts   &&&   r-   writeBinSearchHeaderZAATLookup.writeBinSearchHeaderw  s\    8$8$1?2
.J 	;'=):&r/   c                s   a aaa \        SP                  4       4      p\        S4      V8w  d   R # S P                  P                  p^WE,          ,           ^ VV VV3R l3# )Nc                  *   < SP                  SS S4      # r(   )writeFormat0rg   ra   rK   r      r-   r.   Z(AATLookup.buildFormat0.<locals>.<lambda>      D%%fdF;r/   )r>  getGlyphOrderr|  rx   )ra   r   rg   rK   	numGlyphs	valueSizes   ffff  r-   r  ZAATLookup.buildFormat0  sO    **,-	v;)#NN--		%%;
 	
r/   c           	     s|    VP                  ^ 4       V F$  w  rEV P                  P                  WRVRR7       K&  	  R# r    Nrt   r   r   )r   r|  r   )ra   r   rg   rK   ZglyphID_r   rO  r-   r  ZAATLookup.writeFormat0  s<    1%OHNN  Et !   &r/   c                s  a aaa V^ ,          w  rETp. oVR,           F4  w  rxWv^,           8w  g   W8w  d   SP                  WFV34       T;rFTpK2  TpK6  	  SP                  WFV34       S P                  P                  p	\        S4      ^,           V	^,           r^S P                  ,           W,          ,           ^VVV V3R l3# )r    :rC  NNc                  s*   < SP                  SS S4      # r(   )writeFormat2)rg   segmentsra   r   r  r-   r.   Z(AATLookup.buildFormat2.<locals>.<lambda>  s    D%%fdH=r/   )rO   r|  rx   r>  BIN_SEARCH_HEADER_SIZE)ra   r   rg   rK   ZsegStartZsegValueZsegEndglyphIDZcurValuer  r  r  r  s   fff&        @r-   r  ZAATLookup.buildFormat2  s    #AY!'G1*$(<8 <=$++#  ", 	845NN--	 ]Q.	A(+++h.AA=
 	
r/   c           	     s   VP                  ^4       V P                  P                  p\        V4      V^,           reV P	                  WV4       V FG  w  rxp	VP                  V4       VP                  V4       V P                  P                  WRV	RR7       KI  	  VP                  R4       VP                  R4       VP                  RV,          4       R# )r   Nr    r6  r   r|  rx   r>  r  r   r?  )
ra   r   rg   r  r  r  r  Z
firstGlyphZ	lastGlyphr   
   &&&&      r-   r  ZAATLookup.writeFormat2  s    1NN--	 ]IM(!!&H=,4(J5y)z*NN  Et !  -5 	6"6"9,-r/   c                s   a aaa S P                   P                  p\        S4      V^,           re^S P                  ,           V^,           V,          ,           ^VV VV3R l3# )r   c                  r  r(   )writeFormat6r  r  r-   r.   Z(AATLookup.buildFormat6.<locals>.<lambda>  r  r/   )r|  rx   r>  r  )ra   r   rg   rK   r  r  r     ffff   r-   r  ZAATLookup.buildFormat6  sM    NN--	 [)a-(+++x!|x.GG;
 	
r/   c           	     sf   VP                  ^4       V P                  P                  p\        V4      V^,           reV P	                  WV4       V F5  w  rxVP                  V4       V P                  P                  WRVRR7       K7  	  VP                  R4       VP                  RV,          4       R# )i   Nr  r  r6  r  )	ra   r   rg   rK   r  r  r  r  r   	   &&&&     r-   r  ZAATLookup.writeFormat6  s    1NN--	 [)a-(!!&H=$NGw'NN  Et !  %
 	6"9,-r/   c                s   a aaa S^ ,          ^ ,          SR,          ^ ,          rT\        S4      WT,
          ^,           8w  d   R# S P                  P                  p^\        S4      V,          ,           ^VV VV3R l3# )r    Nc                  r  r(   )writeFormat8r  r  r-   r.   Z(AATLookup.buildFormat8.<locals>.<lambda>  r  r/   rt  )r>  r|  rx   )ra   r   rg   rK   Z
minGlyphIDZ
maxGlyphIDr  r  r-   r  ZAATLookup.buildFormat8  sa    !'1vbz!}Jv;*1A55NN--	Fi'';
 	
r/   c           	     s    V^ ,          ^ ,          pVP                  ^4       VP                  V4       VP                  \        V4      4       V F$  w  rVV P                  P                  WRVRR7       K&  	  R# r  )r   r>  r|  r   )ra   r   rg   rK   ZfirstGlyphID_r   r=  r-   r  ZAATLookup.writeFormat8  si    ay|1<(3v;'HANN  Et !  r/   c                s    \        VP                  4       4      pV P                  P                  WR VR7      p\	        V4       UUu/ uF  w  rVVP                  V4      VbK  	  upp# u uppi Nrt   ru   )r>  r  r|  rw   r   r   )ra   rm   rg   r  r<  kr      &&&    r-   r}  ZAATLookup.readFormat0  s^    **,-	~~''I'V<EdOLO!!!$e+OLLLs   A'c                s   / pVP                   ^,
          pVP                  4       VP                  4       reV^V P                  P                  ,           8  g   Q V4       h\	        V4       F  pVP                  WGV,          ,           ^,           4       VP                  4       pVP                  4       p	V P                  P                  WRR7      p
VR8w  g   Kn  \	        W^,           4       F  pWVP                  V4      &   K  	  K  	  V# r   N)rt   r  rh   r   r|  rx   rs   rd   re   r   )ra   rm   rg   mappingrh   r  r  rf   lastfirstr   r  s   &&&         r-   r~  ZAATLookup.readFormat2  s    jj1n#..0&2C2C2E(1t~~8888B(B8xAKK(l*R/0$$&D%%'ENN'''EEv~uQh/A49D--a01 0 ! r/   c                sh   / pVP                   ^,
          pVP                  4       pV^8  g   Q V4       h\        VP                  4       4       F  pVP                  WFV,          ,           ^,           4       VP                  4       pVP                  4       pVP                  4       p	VR8w  g   Ka  VP	                  ^ 4      p
V
P                  WI,           4       V P
                  P                  WRWx,
          ^,           R7      p\        V4       F  w  rWVP                  W,           4      &   K   	  K  	  V# )r   r  Nr  )	rh   r   rs   rd   ra  r|  rw   r   r   )ra   rm   rg   r  rh   r  rf   r  r  rb  
dataReaderr<  r  r3  s   &&&           r-   r  ZAATLookup.readFormat4  s   jj1n$$&1}&h&}v((*+AKK(l*R/0$$&D%%'E&&(Fv~#003
-~~//DL1<L 0  &dODA<=D--ei89 , , r/   c                s   / pVP                   ^,
          pVP                  4       pV^V P                  P                  ,           8  g   Q V4       h\	        VP                  4       4       Fq  pVP                  WFV,          ,           ^,           4       VP                  4       pV P                  P                  WRR7      pVR8w  g   K^  WVP                  V4      &   Ks  	  V# r  r  )	ra   rm   rg   r  rh   r  rf   r  r   s	   &&&      r-   r  ZAATLookup.readFormat6
  s    jj1n$$&1t~~8888B(B8v((*+AKK(l*R/0'')GNN'''EE& 6;))'23 , r/   c                s    VP                  4       pVP                  4       pV P                  P                  WR VR7      p\        V4       UUu/ uF  w  rgVP	                  W6,           4      VbK  	  upp# u uppi r  )r   r|  rw   r   r   )ra   rm   rg   r  ru   r<  r  r   s   &&&     r-   r  ZAATLookup.readFormat8  sj    !!#!!#~~''E'RFOPToVo
!!%),e3oVVVs   #A4c                s    / pV FN  p\        V\        4      '       g   K  Vw  rgpVR 8X  g   K)  V P                  P                  WxV4      WGR,          &   KP  	  V# )Lookupr  )r)   r*   r|  r   )	ra   r   r   rg   r   rJ  rP   Za
eltContentr  r-   r   ZAATLookup.xmlRead  sT    G'5))&-#8#(,(>(>qd(SEG*%	 
 r/   c           	     s   VP                  WE4       VP                  4        \        VP                  4       4       F'  w  rcV P                  P                  WVR RV3.R7       K)  	  VP                  V4       VP                  4        R# )r  r  )r   rP   r   N)begintagr   r  rR  r|  r   endtag)ra   r   rg   r   rP   r   r  r  r-   r   ZAATLookup.xmlWrite&  sw    4'"5;;=1LENN##u8WeDTCU $  2 	r/   )r|  r(   )rM   r   r   r   r  rc   re   r   r   r  r  r  r  r  r  r  r  r  r}  r~  r  r  r  r   r   r   r   r   r   r-   rz  rz  :  s     	R 	C
@ ' '	

(.
.	
M
(W r/   rz  c                   <   a  ] tR tRt o R tRR ltR tR tRtV t	R# )	AATLookupWithDataOffseti8  c                s^   VP                  4       pVP                  4       pVP                  V4      p\        R RR\        4      pVP	                  WbV4      p/ p	VP                  4        FA  w  rVP                  W,           4      pV P                  4       pVP                  W4       WV
&   KC  	  V	# DataOffsetsN)r   ra  rz  r   re   rR  rI   r@  )ra   rm   rg   rt   ZlookupOffsetZ
dataOffsetlookupReaderlookupoffsetsresultr  rb  r  items   &&&&          r-   re   ZAATLookupWithDataOffset.read9  s    '')%%'
**<8=$f=++l)<$]]_ME,,V-@AJ??$DNN:, 5M	 -
 r/   Nc                sF   / / ^ rp. p	\        WBP                  R7       Fz  p
\        4       pWJ,          P                  W4       VP	                  4       pVP                  VR4      pVR8X  d*   TpV\        V4      ,           pWV&   V	P                  V4       WV
&   K|  	  VP                  4       p\        RRR\        4      pVP                  WW6R4       VP                  4       pVP                  V^R7       VP                  V^R7       V	 F  pVP                  V4       K  	  R# )r    )keyNr  rc  )r  r   r   r\   rU  rJ   r>  rO   rT  rz  r   r   rd  r?  )ra   r   rg   rt   r   r   ZoffsetByGlyphZoffsetByDataZdataLenZcompiledDatar  re  r<  rb  lookupWriterr  Z
dataWriterZds   &&&&&&            r-   r   ZAATLookupWithDataOffset.writeG  s    022qWE7E%IL  1'')D!%%dD1F~ !CI-%+T"##D)#)%  8 **,=$f=\4H((*
\a8ZA6A  # r/   c                sV    \        R RRV P                  4      pVP                  WV4      # r  )rz  rI   r   )ra   r   r   rg   r  r/  r-   r   ZAATLookupWithDataOffset.xmlReadj  s'    =$dooF~~ed33r/   c                s\    \        R RRV P                  4      pVP                  WW4V4       R# r  )rz  rI   r   )ra   r   rg   r   rP   r   r  r  r-   r   Z AATLookupWithDataOffset.xmlWriten  s&    =$dooF	e<r/   ro   r(   
rM   r   r   r   re   r   r   r   r   r   r   r   r-   r  r  8  s     !$F4= =r/   r  c                   s   a ] tR tRt oRRRRRRRR/t]P                  4        U Uu/ uF  w  rWbK	  	  upp tRRR/R	 lltR
 tR t	R t
R tRR ltRtVtR# u upp i )MorxSubtableConverteris  ZLayoutOrderZReversedLayoutOrderZLogicalOrderZReversedLogicalOrderNr:   rW   c          	     s6    \         P                  WW#WER 7       R# r9   N)rV   rc   r`   rb   r-   rc   ZMorxSubtableConverter.__init__~  s    Z 	 	
r/   c                sp    V^ ,          ^ 8w  d
   RVn         R# V^,          ^ 8w  d
   RVn         R# RVn         R# )i    AnyVertical
HorizontalN)TextDirection)ra   r  Zsubtable   &&&r-   "_setTextDirectionFromCoverageFlagsZ8MorxSubtableConverter._setTextDirectionFromCoverageFlags  s2    DLQ%*H"dlq %/H"%1H"r/   c                s   VP                   p\        4       pVP                  4       Vn        VP	                  4       pV^@,          ^ 8g  V^,          ^ 8g  3pV P
                  V,          Vn        V P                  We4       VP                  4       Vn	        V;P                  V^,          ^,          ,          un	        VP	                  4       Vn
        VP                  4       Vn        \        R,          P                  VP                  4      pVf   Q RTP                  ,          4       hVP                   V,
          p	VP                  VP                   VP                   VP                  ,           V	,
           p
\        V
4      VP                  V	,
          8X  g   Q h\!        WP"                  R7      pV! 4       Vn        VP$                  P'                  W4       VP)                  WEP                  ,           4       V# )i@   Zmorxz!unsupported 'morx' lookup type %s)r<  tableTag)rh   r   r   r<   r   _PROCESSING_ORDERSProcessingOrderr  r   Reservedr=   SubFeatureFlagsr   rJ   r<  r>  r   r  r7   r@  rd   )ra   rm   rg   rt   rh   r   r  orderKeyrI   ZheaderLengthr<  Z	subReaderrK  r-   re   ZMorxSubtableConverter.read  sz   jjN))+  "T\a'%$,1)<= 33H=//9&&(
	

us{r))
&&(",,. (,,Q[[9
K=KK5 zzC'{{6::

Q^^(Cl(RS4yANN\9999!tooF	 l	i.C..()r/   c                s.   VP                  WE4       VP                  4        VP                  R VP                  ,          4       VP                  4        VP	                  RVP
                  R7       VP                  4        VP	                  RVP                  R7       VP                  4        VP                  ^ 8w  d5   VP	                  RRVP                  ,          R7       VP                  4        VP                  RVP                  ,          4       VP                  4        VP	                  RRVP                  ,          R7       VP                  4        VP                  P                  W4       VP                  V4       VP                  4        R	# )
zStructLength=%dr  r   r  r  z0x%04xzMorphType=%dr  r2  N)r  r   r   r<   r   r  r  r  r=   r  r7   rD  r  r   r   r-   r   ZMorxSubtableConverter.xmlWrite  s;   4'+e.@.@@AO53F3FG-U5J5JK>>Q
(U^^2KL.5??:;-X@U@U5UVi.r/   c                s`   \        4       p^ p^ Vn        \        \        V4       EF_  w  rgpVR8X  dV   \	        VR,          4      pV^@,          ^ 8g  V^,          ^ 8g  3p	V P
                  V	,          Vn        V P                  WT4       Kc  VR8X  dD   VR,          Vn        VP                  V P                  9   g   Q RVP                  ,          4       hK  VR8X  d:   VR,          Vn	        VP                  R
9   g   Q RVP                  ,          4       hK  VR8X  d   \	        VR,          4      Vn        EK  VR8X  d   \	        VR,          4      Vn
        EK/  VP                  R	4      '       d   VP                  WgW4       EK[  Q T4       h	  V^,          ^,          VP                  ,          Vn        V# )r    CoverageFlagsr   r  zunknown ProcessingOrder: %sr  zunknown TextDirection %sr  r  ZMorph>   r  r  r  )r   r  r  istupler   r  r  r  _PROCESSING_ORDERS_REVERSEDr  r  rA   rI  )
ra   r   r   rg   r   covFlagseltNameeltAttrsr  r  r  r-   r   ZMorxSubtableConverter.xmlRead  s   N
-3GW-E)Gz/)#HW$56%_2X_4JK$($;$;H$E!77D--$,W$5!((D,L,LL 1A4E4EEL O+"*7"3*KK .@K J&%hw&78
--$,Xg->$?!!!'**		'Z>%g%u1 .F2 n+ajj8
r/   c                s   VP                   R ,          ^,	          pV P                  VP                  ,          w  rxYdP                  R8X  d   ^M^ ,          pYg'       d   ^@M^ ,          pYdP                  R8X  d   ^ M^ ,          pYh'       d   ^M^ ,          pWdn        \        VP                  4      p	VP                  4       p
RVn        VP                   pVP                   R,          Vn         VP                  W4       Wn         VP                  V	,          R8X  g   Q hVP                  4       V
,
          p\        P                  ! RV4      VP                  V	&   R# )i   r  r  rP  r  rQ  z>LN)r  r  r  r  r  r>  rR  rS  r<   r\   structZpack)ra   r   rg   rt   r   r   r  ZreverseOrderZlogicalOrderrV  rW  ZorigReservedrX  rY  r-   r   ZMorxSubtableConverter.write  s   NNZ/B6%)%E%E!!&
" 	//:=D1DLDa///58Da?LDa/&&,,'%%'' ~~&0f#%||K(,????%%'&0$*KKf$=[!r/   ro   )FF)TF)FT)TTr(   )rM   r   r   r   r  rR  r  rc   r  re   r   r   r   r   r   )r  r  r   s   00@r-   r  r  s  s~      	,~, =O<T<T<V"W<V38<V"W
" 

26(@> >} #Xs   Ar  c                   s   a  ] tR tRt o RR/R ltR tR 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V tR
# )	STXHeaderi  r:   rW   c          	     s(   \         P                  WW#WER 7       \        V P                  \        4      '       g   Q h\        RRR\        4      V n        \        V P                  \        4      '       d   \        RRR\        4      V n
        R# RV n
        R# )r9   GlyphClassesNPerGlyphLookup)rV   rc   r{  rI   r   rz  r   classLookupr   r   perGlyphLookupr`   rb   r-   rc   ZSTXHeader.__init__  sv    Z 	 	
 $//95555$^T4Hdoo'<=="+,<dD'"RD"&Dr/   c                s$   \        4       pVP                  pVP                  ^ 4      pVP                  ^ 4      pVP                  ^ 4      pRp	Rp
VP                  4       Vn        VP                  WQP                  4       ,           4       VP                  WQP                  4       ,           4       VP                  WQP                  4       ,           4       V P                  e7   VP                  ^ 4      pVP                  WQP                  4       ,           4       \        V P                  \        4      '       d   VP                  ^ 4      p	V	P                  WQP                  4       ,           4       VP                  ^ 4      pVP                  WQP                  4       ,           4       VP                  ^ 4      p
V
P                  WQP                  4       ,           4       V
P                  VP                  ,
          ^,          pV^ 8  g   Q hVP                  V4      Vn        V P                  W4      Vn        MV\        V P                  \        4      '       d7   VP                  ^ 4      p	V	P                  WQP                  4       ,           4       V P                  P!                  WbV4      Vn        \%        VP                  VP                  ,
          VP                  ^,          ,          4      p\'        V4       Ft  p\)        4       pVP*                  P-                  V4       \'        VP                  4       F3  pVP/                  4       pV P1                  VVW)4      VP2                  V&   K5  	  Kv  	  V P                  e   V P5                  VXV4      Vn        V# r]  )r   rh   ra  r   GlyphClassCountrd   r  r{  rI   r   r   LigComponents_readLigatures	Ligaturesr   r  re   r  r   rs   r   StatesrO   r   _readTransitionTransitions_readPerGlyphLookupsPerGlyphLookups)ra   rm   rg   rt   rA  rh   ZclassTableReaderZstateArrayReaderZentryTableReaderactionReaderZligaturesReaderZperGlyphTableReaderZligComponentReaderZnumLigComponentsZ	numStates
stateIndexstate
glyphClass
entryIndexs   &&&&               r-   re   ZSTXHeader.read   s   jj!..q1!..q1!..q1 & 0 0 2c$4$4$667c$4$4$667c$4$4$667*"("5"5a"8$$S+;+;+=%=>doo':;;!..q1Lc$4$4$667!'!4!4Q!7##C*:*:*<$<=$11!4O  '7'7'9!9: / 3 36H6L6L LQRR#q((("4"D"DEU"VE"11/HEO)=>>!..q1Lc$4$4$667!--223C9U!!$4$8$88U=R=RUV=VW
	  	*JJELL&#E$9$9:
-88:
040D0D$j$1!!*- ; + *$($=$=*D%E! r/   c                s    V P                  4       pVP                  VP                  W%P                  ,          ,           4      pVP	                  WcV4       V# r(   )rI   ra  rh   rx   r@  )ra   rm   r  rg   r  
transitionZentryReaders   &&&&&  r-   r  ZSTXHeader._readTransition/  sK    __&
))JJ&;&;;;
 	[=r/   c                s    \        VP                  4      pW1P                  ,
          ^,          pVP                  VP	                  V4      4      # rx  )r>  r<  rh   r   r   )ra   rm   rg   ZlimitZnumLigatureGlyphs   &&&  r-   r  ZSTXHeader._readLigatures7  s?    FKK "ZZ/A5$$V%;%;<M%NOOr/   c                sZ   ^ pVP                    F  pVP                  P                  4        Fw  p\        V\        4      '       g   K  VP
                  R8w  d   \        W$P
                  ^,           4      pVP                  R8w  g   K[  \        W$P                  ^,           4      pKy  	  K  	  V# )r    r  )r  r  rK   r)   r   Z	MarkIndexmaxZCurrentIndex)ra   rA  
numLookupsr  r+   s   &&   r-   _countPerGlyphLookupsZSTXHeader._countPerGlyphLookups<  s    
 
\\E&&--/a!677{{f,%([[1_%E
~~/%(^^a5G%H
 0 " r/   c                s&   VP                   p. p\        V P                  V4      4       Fd  pVP                  ^ 4      pVP	                  WBP                  4       ,           4       VP                  V P                  P                  Ws/ 4      4       Kf  	  V# r   )	rh   rs   r  ra  rd   r   rO   r  re   )ra   rA  rm   rg   rh   Zlookupsr  r     &&&&    r-   r  ZSTXHeader._readPerGlyphLookupsK  sz    jjt11%89A!..q1Lc$4$4$667NN4..33LKL : r/   Nc                s   \        4       pV P                  P                  WbW4P                  R R7       \	        VP                  4       ^4      p\        VP                  P                  4       4      ^,           p^p	V P                  e
   V	^,          p	WP                  P                  ,          p	V P                  P                  W$P                  4      w  rV P                  W$P                  W4      w  rV	\        V4      ,           pV\        V4      ,           pV\        V4      ,           p\	        V P                  WB4      ^4      pV
e   V\        V4      ,           pMR pR R ppV P!                  WB4      pV P#                  WB4      pVe7   \        V4      ^ 8X  g   Q hV\        V
4      ,           pV\        V4      ,           pVP%                  V4       VP%                  V	4       VP%                  V4       VP%                  V4       V P                  e   VP%                  V4       Ve   VP%                  V4       Ve#   VP%                  V4       VP%                  V4       VP'                  V4       VP'                  V4       VP'                  V4       VP'                  V4       V
e   VP'                  V
4       Ve   VP'                  V4       Ve   VP'                  V4       R # R # )N)r   )r   r  r   r  r   rU  r  rK   r  rI   ZactionHeaderSizeZcompileActionsr  _compileStatesr>  _compilePerGlyphLookups_compileLigComponents_compileLigaturesr   r?  )ra   r   rg   rt   r   r   ZglyphClassWriterZglyphClassDataglyphClassCountZglyphClassTableOffsetZ
actionDataactionIndexstateArrayDataentryTableDataZstateArrayOffsetZentryTableOffsetZperGlyphOffsetZperGlyphDataZactionOffsetZligaturesOffsetZligComponentsOffsetZligComponentsDataZligaturesDatas   &&&&&&                 r-   r   ZSTXHeader.writeT  s   (?I/A/At 	 	
 -88:A>e00779:Q> "*!Q&!!A!AA"&//"@"@||"T
)-)<)<,,*
& 13~3FF+c..AA)C,??477DaH!+c..AALL/3T, 66uC..u;(|$)))".Z"@1C8I4JJO/*/0*+*+*n-#l+*12o.(((&!Z((./$]+ %r/   c           	     sN   \        4       p. / rvV F  p\        V4       F  p	VP                  V	,          p
\        4       pV
P                  WV4       VP	                  4       p\        V4      V
P                  8X  g.   Q R \        V
4      V
P                  \        V4      3,          4       hVP                  V4      pVf!   \        V4      pWV&   VP                  V4       VP                  V4       K  	  K  	  \        VP	                  4       ^4      p\        \        V4      ^4      pW3# )z1%s has staticSize %d, but actually wrote %d bytes)r   rs   r  r\   rU  r>  rx   rL  rJ   rO   r   r   r
   )ra   rg   Zstatesr  r  ZstateArrayWriterZentriesZentryIDsr  r  r  ZentryWriterZ	entryDatar  r  r  s   &&&&&           r-   r  ZSTXHeader._compileStates  s   (?E#O4
"..z:
+o"";kB'224		Nj&;&;;I$))	NM ; &\\)4
%!$WJ*4Y'NN9- ,,Z8# 5 & -88:A>Yw/3--r/   c                s   V P                   f   R# V P                  V4      p\        VP                  4      V8X  g$   Q R\        VP                  4      V3,          4       h\	        4       pVP                   FD  pVP                  4       pV P                   P                  Wb/ VR 4       VP                  V^R7       KF  	  VP                  4       # )Nr/   zVlen(AATStateTable.PerGlyphLookups) is %d, but the actions inside the table refer to %drc  )	r  r  r>  r  r   rT  r   rd  rU  )ra   rA  rg   r  r   r  r  r  r-   r  Z!STXHeader._compilePerGlyphLookups  s    &//6
5(()Z7 	
;5(():67	
7
 ++F!..0L%%l"fdK  ! < ,   ""r/   c                s    \        VR 4      '       g   R# \        4       pVP                   F  pVP                  V4       K  	  VP	                  4       # )r  N)ry   r   r  r   rU  )ra   rA  rg   r   Z	componentr  r-   r  ZSTXHeader._compileLigComponents  sF    uo..,,Iy) -  ""r/   c                s    \        VR 4      '       g   R# \        4       pVP                   F#  pVP                  VP	                  V4      4       K%  	  VP                  4       # )r  N)ry   r   r  r   r   rU  )ra   rA  rg   r   Z	glyphNamer  r-   r  ZSTXHeader._compileLigatures  sM    uk**Ity9: )  ""r/   c           	     st   VP                  WE4       VP                  4        VP                  R VP                  ,          4       VP                  4        \	        VP
                  P                  4       4       F(  w  rgVP                  RWgR7       VP                  4        K*  	  \        VP                  4       F  w  rVP                  RVR7       VP                  4        \	        V	P                  P                  4       4       F  w  rVP                  VVRV
/RR7       K  	  VP                  R4       VP                  4        K  	  \        VP                  4       F  w  rVP                  RVR7       VP                  4        \	        VP                  4       4       F(  w  rVP                  R	WR7       VP                  4        K*  	  VP                  R4       VP                  4        K  	  \        VR
4      '       d   VP                  R
4       VP                  4        \        \        VR
4      4       F(  w  rVP                  RWR7       VP                  4        K*  	  VP                  R
4       VP                  4        V P!                  WW4V4       VP                  V4       VP                  4        R# )zGlyphClassCount=%s
GlyphClassr  r   State)indexonGlyphClass
Transition)rg   r   rP   r  r  r  LigComponent)r  r   N)r  r   r   r  r  r  rR  r   r   r  r  rD  r  r  ry   r  _xmlWriteLigatures)ra   r   rg   r   rP   r   gZklassr  r  r  Ztransrf   r  r  r  s   &&&&&&          r-   r   ZSTXHeader.xmlWrite  sM   4'.1F1FFGu11779:HAAC ; "+5<<!8Jwj9%+E,=,=,C,C,E%F!
):6%	   &G W% "9 #5#8#89IA/q9$V\\^4
##HE#E!!# 5 -. : 5/**/#GE?$CD##N!#G!!# E _-	eDr/   c                s4   \        VR 4      '       g   R# VP                  R 4       VP                  4        \        \	        VR 4      4       F(  w  rgVP                  RWgR7       VP                  4        K*  	  VP                  R 4       VP                  4        R# )r  NLigature)r  r  )ry   r  r   r   r  r   r  )ra   r   rg   r   rP   r   rf   r     &&&&&&  r-   r  ZSTXHeader._xmlWriteLigatures  s    uk**;'ge[9:DA
!= ; 	%r/   c                s~   \        4       p\        \        V4       F  w  rVpVR 8X  d-   VR,          pVR,          p	\        V	4      VP                  V&   K9  VR8X  d0   V P                  WgV4      p
VP                  P                  V
4       Ko  VR8X  d:   V P                  P                  WgV4      pVP                  P                  V4       K  VR8X  d   V P                  WgV4      Vn        K  VR8X  g   K  V P                  WgV4      Vn        K  	  \        VP                  P!                  4       4      ^,           Vn        V# )r  r  r   r  r  r  r  )r   r  r  r   r  _xmlReadStater  rO   r  r   r  _xmlReadLigComponentsr  _xmlReadLigaturesr  r  rK   r  )ra   r   r   rg   rA  r  r  r  r  r   r  r  rK  r-   r   ZSTXHeader.xmlRead  s   -3GW-E)Gz,& ) ),4UO""5)G#**8F##E*,,,,44X4P%%,,V4O+&*&@&@$'# K'"&"8"8t"T! .F" !$E$6$6$=$=$? @1 Dr/   c                s    \        4       p\        \        V4       FQ  w  rVpVR 8X  g   K  \        VR,          4      pV P	                  4       p	V	P                  WVWs4       WP                  V&   KS  	  V# )r  r  )r   r  r  r   rI   rI  r  )
ra   r   r   rg   r  r  r  r  r  r  r  r-   r   ZSTXHeader._xmlReadState  sh    
-3GW-E)Gz,&%h~&>?
!__.
""7jG0:!!*- .F r/   c                s    . p\        \        V4       F0  w  rVpVR 8X  g   K  VP                  \        VR,          4      4       K2  	  V# )r  r   )r  r  rO   r   )ra   r   r   rg   ZligComponentsr  r  _eltContentr  r-   r  ZSTXHeader._xmlReadLigComponents  sF    .4Wg.F*G{.($$Xhw.?%@A /G r/   c                s    . p\        \        V4       F'  w  rVpVR 8X  g   K  VP                  VR,          4       K)  	  V# )r  r  )r  r  rO   )ra   r   r   rg   Zligsr  r  r  r  r-   r  ZSTXHeader._xmlReadLigatures  s>    .4Wg.F*G{*$HW-. /G r/   )r  r  r(   )rM   r   r   r   rc   re   r  r  r  r  r   r  r  r  r  r   r  r   r   r  r  r   r   r   r   r-   r  r    sj     	'R 	'-^P
5,n.4# ##&P	, r/   r  c                   r  )	CIDGlyphMapi'  c                s    VP                  4       p/ p\        VP                  V4      4       F!  w  rgVR 8w  g   K  VP                  V4      WV&   K#  	  V# )r  )r   r   r   r   )ra   rm   rg   rt   ZnumCIDsr  cidr  r  r-   re   ZCIDGlyphMap.read(  sS    ##%%f&<&<W&EFLC& "//8 G r/   Nc                s6   VP                  4        UUu/ uF  w  rgWbP                  V4      bK  	  pppV'       d   \        V4      ^,           M^ p	VP                  V	4       \	        V	4       F$  pVP                  VP                  VR4      4       K&  	  R# u uppi )rC  r  NrR  r   r  r   rs   rJ   )
ra   r   rg   rt   r   r   r  r  rR  ru   s
   &&&&&&    r-   r   ZCIDGlyphMap.write0  sv    ?D{{}M}ooe,,}M"'E
QQ5!<Cuyyf56   Ns   Bc                s    / p\        \        V4       F9  w  rVpVR 8X  g   K  VR,          P                  4       V\        VR,          4      &   K;  	  V# )CIDr  r  )r  r  Zstripr   ra   r   r   rg   r  ZeNameZeAttrsZ	_eContentr  r-   r   ZCIDGlyphMap.xmlRead7  sL    (.w(@$E9~28/2G2G2Ixu./ )A r/   c                2   VP                  WE4       VP                  4        \        VP                  4       4       F7  w  rgVf   K  VR8w  g   K  VP	                  RWgR7       VP                  4        K9  	  VP                  V4       VP                  4        R # )Nr  r  )r  r  r  r   r  rR  r   r  )ra   r   rg   r   rP   r   r  r  r  r-   r   ZCIDGlyphMap.xmlWrite>  sz    4' /JC Uf_##Es#@!!# 0 	r/   ro   r(   r  r   r   r-   r  r  '  s     7 r/   r  c                   r  )	GlyphCIDMapiI  c                sl   VP                  4       pVP                  4       pVP                  V4      pV\        V4      8  d(   \        P                  R V\        V4      3,          4       / p\        \        \        V4      \        V4      4      4       F  pWh,          p	V	R8w  g   K  WWH,          &   K   	  V# )zOGlyphCIDMap has %d elements, but the font has only %d glyphs; ignoring the restr  )r  r   r   r>  r  r  rs   min)
ra   rm   rg   rt   Z
glyphOrderru   Zcidsr  r  r  r  r-   re   ZGlyphCIDMap.readJ  s    '')
!!#%%e,3z?"KK$',c*o&>?
 STC
O<=G-Cf}.1z*+ > r/   Nc                sV   VP                  4        UUu/ uF&  w  rgVf   K  VR8w  g   K  VP                  V4      VbK(  	  pppV'       d   \        V4      ^,           M^ p	VP                  V	4       \	        V	4       F$  p
VP                  VP                  V
R4      4       K&  	  R # u uppi )Nr  r  )ra   r   rg   rt   r   r   r  r  rR  ru   r  s   &&&&&&     r-   r   ZGlyphCIDMap.write[  s      ++-
' $#&&= $DOOA#' 	 

 #(E
QQ5!U|Guyy&9: $
s   B%B%B%c                s    / p\        \        V4       F*  w  rVpVR 8X  g   K  \        VR,          4      WFR,          &   K,  	  V# )r  r   r  )r  r  r   r  r  r-   r   ZGlyphCIDMap.xmlReadf  sA    (.w(@$E9~*26'?*Cg' )A r/   c                r	  )Nr  r  r  r
  )ra   r   rg   r   rP   r   r  r  r  r-   r   ZGlyphCIDMap.xmlWritem  sy    4' /JE3&=##E#B!!# 0 	r/   ro   r(   r  r   r   r-   r  r  I  s     "	; r/   r  c                   r  )	
DeltaValueix  c                s   VR ,          pVR,          pVR,          pVR9   g   Q R4       hWT,
          ^,           p^V,          p^V,          p	^V,          ^,
          p
^V^,
          ,          p. p^ ^ r\        V4       F[  pV^ 8X  d   VP                  4       ^rW,
          pW,	          V
,          pVV,          '       d
   VV	,
          pVP                  V4       K]  	  V# )	StartSizeEndSizeDeltaFormatillegal DeltaFormatrC  r   i   )rs   r   rO   )ra   rm   rg   rt   r  r  r  nItemsnBitsZminusOffsetmaskZsignMaskr  tmpshiftrf   r   s   &&&&             r-   re   ZDeltaValue.ready  s    k*	I&.i'>)>>'$q([ 5jU
a#
UvAz#..0"UME\T)Ex+e$  r/   Nc                s   VR ,          pVR,          pVR,          pTp	VR9   g   Q R4       hWv,
          ^,           p
^V,          p\        V	4      V
8X  g   Q h^V,          ^,
          p^ ^rV	 F>  pW,
          pWV,          V,          ,          pV^ 8X  g   K*  VP                  V4       ^ ^rK@  	  V^8w  d   VP                  V4       R# R# )r  r  r  r  Nr  )r>  r   )ra   r   rg   rt   r   r   r  r  r  r  r  r  r  r  r  r  r-   r   ZDeltaValue.write  s    k*	I&.
i'>)>>'$q([ :&(((U
aUEME$,501Cz""3'U   B;s# r/   c                \    VP                  WER V3.,           4       VP                  4        R# r   r   r   r   r   r-   r   ZDeltaValue.xmlWrite  )    DGU+;*<"<=r/   c                &    \        VR ,          4      # r   r   r   r   r-   r   ZDeltaValue.xmlRead      g''r/   ro   r(   
rM   r   r   r   re   r   r   r   r   r   r   r   r-   r  r  x  s     .$*( (r/   r  c                   rN  )VarIdxMapValuei  c                s   VR ,          pVR,          p^V^,          ,           p^V,          ^,
          pRV,
          p^V,
          p	^V^0,          ^,	          ,           p
^VP                   ^VP                  ^VP                  ^VP                  /V
,          pV! V4       Uu. uF  pW,          V	,          W,          ,          NK!  	  up# u upi )EntryFormatr[   l    r   r   ZreadUInt24Arrayr   )ra   rm   rg   rt   fmtr  	innerBits	innerMaskZ	outerMask
outerShift	entrySizerw   Zraws   &&&&         r-   re   ZVarIdxMapValue.read  s    &>*v&	)^q(	*	)^
#,1,-	v$$v%%v%%v$$	

 	 !(
( :-#/BB(
 	
 
s   %CNc                s   VR ,          pTpVR,          P                  \        V4      4       ^V^,          ,           p^V,          ^,
          p	^V,
          p
^V^0,          ^,	          ,           p^VP                  ^VP                  ^VP                  ^VP
                  /V,          pT! V Uu. uF   pVR,          V
,	          W,          ,          NK"  	  up4       R# u upi )r   r[   l      N)ZsetValuer>  r   r   writeUInt24Arrayr   )ra   r   rg   rt   r   r   r"  r  r#  r$  r%  r&  r   Zidxs   &&&&&&        r-   r   ZVarIdxMapValue.write  s    &~''G5v&	)^q(	)^
#,1,-	v%%v&&v&&v%%	

 
 	 #"C #
2sGG"	
s   ,&Cro   r(   rZ  r   r   r-   r  r    s     
,
 
r/   r  c                   r  )	VarDataValuei  c                sx   . pVR ,          pVR,          p\        VR,          4      pVR,          pV'       d   VP                  VP                  rMVP                  VP                  r\	        WV4      \        WV4      rVP                  V! V
4      4       VP                  V	! W,
          4      4       W8  d   WER1 V# )rZ   	NumShorts     N)boolr   r   r   r  r  Zextend)ra   rm   rg   rt   rK   regionCount	wordCount	longWordsZreadBigArrayZreadSmallArrayn1n2rK  r-   re   ZVarDataValue.read  s     01k*	 V+,	&	+1+?+?AVAV.+1+@+@&BVBV.[,c+.IBl2&'nRW-.|$r/   Nc                sx   VR ,          pVR,          p\        VR,          4      pVR,          pRVP                  VP                  3RVP                  VP                  3/V,          w  r\	        Wg4      \        Wg4      rV	! VRV 4       V
! WKV 4       W8  d"   VP                  ^ .W,
          ,          4       R# R# )rZ   r)  r*  r+  FTN)r,  r   r   r   r  r  writeSmallArray)ra   r   rg   rt   rK   r   r-  r.  r/  ZwriteBigArrayr2  r0  r1  rY  r-   r   ZVarDataValue.write  s     01k*	 V+,	&	 F**F,A,AB6((&*@*@A,
 ,(
 [,c+.IBfSbk"+./""A3"*:#;< r/   c                r  r   r  r   r   r-   r   ZVarDataValue.xmlWrite  r  r/   c                r  r   r  r   r   r-   r   ZVarDataValue.xmlRead  r  r/   ro   r(   r  r   r   r-   r(  r(    s     .=&( (r/   r(  c                   r  )	TupleValuesi  c                s>    \         P                  ! R V4      ^ ,          # r(   )r   ZdecompileDeltas_)ra   r<  rg   r  r-   re   ZTupleValues.read  s    ..tT:1==r/   Nc                sz    VP                   \        ,          p\        \        P                  ! WF'       * R 7      4      # ))ZoptimizeSize)Zcfgr   Zbytesr   ZcompileDeltaValues_)ra   r   rg   rt   rK   r   ZoptimizeSpeedr  r-   r   ZTupleValues.write  s/    !45..vDUV
 	
r/   c                r  r   r  r   r   r-   r   ZTupleValues.xmlRead  r  r/   c                r  r   r  r   r   r-   r   ZTupleValues.xmlWrite  r  r/   ro   r(   r  r   r   r-   r3  r3    s     >
( r/   r3  c                   sV   a  ] tR tRt o RRRRRRR/R lltR tRR	 ltR
 tR tRt	V t
R# )	CFF2Indexi"  N	itemClassitemConverterClassr:   rW   c          	     st    \         P                  WW#WGR 7       WPn        Ve   V! 4       V n        R# RV n        R# r  )rV   rc   
_itemClass
_converter)ra   rP   rQ   rR   rI   r5  r6  r:   s   &&&&&$$$r-   rc   ZCFF2Index.__init__#  sB     	Z 	 	
 $$6$B  	HL 	r/   c                s  a aaaaa SP                  4       oS^ 8X  d   . # SP                  4       oR oS! SS4      pSP                  RJ;'       d    S^8  pV'       g   V! S^,           4      p. pVP                  ^ 4      pSP	                  V^,
          4       V F  p	W8:  g   Q hSP	                  W,
          4      p
S P
                  e1   S P                  4       pVP                  V
SSP                  4       Tp
M*S P                  e   S P                  P                  V
S4      p
VP                  V
4       T	pK  	  V# VVVVVV 3R lpV! 4       p\        V.S,          4      pV# )r    c                 st    ^V P                   ^V P                  ^V P                  ^V P                  /V,          # )rC  r!  )rm   offSizer{   r-   getReadArrayZ$CFF2Index.read.<locals>.getReadArray<  sB    6((6))6))6((	
  r/   Fc                  s   <aaaa S	P                  4       oS	P                  oSS^,           S,          ,           ^,
          oS! SS4      oVVVVVVV
3R lp V # )rC  c                 s  < S	P                  SV S,          ,           4       S! ^4      pS	P                  SV^ ,          ,           4       S	P                  V^,          V^ ,          ,
          4      pS
P                  e2   S
P                  4       pVP                  VSS	P                  4       TpV# S
P
                  e   S
P
                  P                  VS4      pV# rx  )rd   r;  r7  r@  
localStater8  re   )rf   r  r  objdata_posrg   r9  
offset_posrw   ri   ra   s   &   r-   rk   Z8CFF2Index.read.<locals>.get_read_item.<locals>.read_itemc  s    $$Z!g+%=>'lG$$X
%:;&//
WQZ0GHD2"oo/dD+2H2HI"  K 4#33D$?Kr/   rl   )rk   r=  r>  rw   ri   ru   rg   r:  r9  rm   ra   s    @@@@r-   rn   Z%CFF2Index.read.<locals>.get_read_item]  sM    $kkm#ZZ
%g(==A(g>	    ! r/   )r   r   rp   Zpopr;  r7  r@  r;  r8  re   rO   r   )ra   rm   rg   rt   rw   rp   r  rR  
lastOffsetrb  r  r<  rn   rk   rv   ru   r:  r9  s   fff&           @@@r-   re   ZCFF2Index.read6  sF     "A:I""$	 !1	yy%33%!)	*GE QJOOJN+!!+++v':;??.//+CMM$f.?.?@D__0??//d;DT"#
 " L! !, &I)u,-A Hr/   c                s   TpVP                  \        V4      4       \        V4      '       g   R # V P                  e!   V Uu. uF  qwP                  V4      NK  	  ppMGV P                  e:   \        V4       UUu. uF"  w  rV P                  P                  WW7V4      NK$  	  pppV Uu. uF  p\        V4      NK  	  p	p\        \        V	^R7      4      p	V	R,          p
V
R8  d   ^MV
R8  d   ^M
V
R8  d   ^M^pVP                  V4       ^VP                  ^VP                  ^VP                  ^VP                  /V,          pV! V	4       V F  pVP                  V4       K  	  R # u upi u uppi u upi )N)Zinitiali   i   i   rt  )r   r>  r7  r\   r8  r   r   r  r$   r   r   r   r'  r   r?  )ra   r   rg   rt   rK   r   rR  r  rf   r  r?  r9  r   rY  r-   r   ZCFF2Index.writez  sp   #e*%5zz??&49:ED\\$'EE:E__(  )//GA %%fIQG/  
 *//3t9/z'156R[
 E!  7*Z)5KQR 	
 	'" v%%v&&v&&v%%	

 
 	7DT" 5 ;
 0s   E):(E.)E4c                s    V P                   e&   V P                  4       pVP                  R WV4       V# V P                  e   V P                  P                  WV4      # \	        4       hr(   )r7  rI  r8  r   r~   )ra   r   r   rg   r<  r/  r-   r   ZCFF2Index.xmlRead  sW    ??&//#CKKed3J__(??**54@@%''r/   c           
     s    V P                   e-   \        V4       F  w  rgVP                  WRV3.V4       K  	  R # V P                  e>   \        V4       F,  w  rgV P                  P	                  WWtVRV3.,           4       K.  	  R # \        4       h)Nr  )r7  r   rD  r8  r   r~   )ra   r   rg   r   rP   r   rf   r  r  r-   r   ZCFF2Index.xmlWrite  s}    ??&$U+

9gq\NDA ,__($U+((T7A,1G ,
 &''r/   )r8  r7  r(   )rM   r   r   r   rc   re   r   r   r   r   r   r   r   r-   r4  r4  "  sD     
 
  
 
&BH##J(
( 
(r/   r4  c                   r   )
LookupFlagi  c                sL   VP                  WER V3.,           4       . pV^,          '       d   VP                  R4       V^,          '       d   VP                  R4       V^,          '       d   VP                  R4       V^,          '       d   VP                  R4       V^,          '       d   VP                  R4       VR,          '       d    VP                  RV^,	          ,          4       V'       d!   VP                  RP                  V4      4       VP	                  4        R	# )
r   ZrightToLeftZignoreBaseGlyphsZignoreLigaturesZignoreMarksZuseMarkFilteringSeti   zmarkAttachmentType[%i]r  N)r   rO   r   r  r   r  r  r-   r   ZLookupFlag.xmlWrite  s    DGU+;*<"<=4<<LL'4<<LL+,4<<LL*+4<<LL'4<<LL./6>>LL1UaZ@Achhuo.r/   ro   Nr   r   r   r-   r@  r@    s      r/   r@  c                   sV   a a ] tR tRt o]tV 3R lt]R 4       t]R 4       t	Rt
VtV ;t# )
_UInt8Enumi  c                sB   < V P                  \        SV `	  WV4      4      # r(   )	enumClassr$  re   )ra   rm   rg   rt   r'  s   &&&&r-   re   Z_UInt8Enum.read  s    ~~egl6CDDr/   c                sJ    \        V P                  VP                  4       4      # r(   )r  rB  Zupperr  r{   r-   r   Z_UInt8Enum.fromString  s    s}}ekkm44r/   c                sT    V P                  V4      P                  P                  4       # r(   )rB  rP   Zlowerr  r{   r-   r   Z_UInt8Enum.toString  s     }}U#((..00r/   ro   )rM   r   r   r   rr   rB  re   r  r   r   r   r   r*  r+  r,  r-   rA  rA    s=     IE 5 5 1 1 1r/   rA  c                   r   )r    i  ro   N)rM   r   r   r   _ExtendModerB  r   ro   r/   r-   r    r      s    Ir/   r    c                   r   )r!   i  ro   N)rM   r   r   r   _CompositeModerB  r   ro   r/   r-   r!   r!     s    Ir/   r!   Zint8Zint16Zint32r3   r1   Zuint24r4   Zchar64r  ZOffsetZLOffsetZOffset24Z	TupleList)r6  ZVarCompositeGlyphList)r5  r>   r?   r@   r   c                 $    \        \        V R 7      # )rI   )r%   rz  ZCr,   r-   r.   r.         79;r/   c                 rE  rF  )r%   r  rG  r,   r-   r.   r.     s    1HUV)Wr/   c                 rE  rF  )r%   r  rG  r,   r-   r.   r.     rH  r/   ZOffsetToc                 rE  rF  )r%   rL   rG  r,   r-   r.   r.     s    '%A6r/   Z	LOffsetToc                 rE  rF  )r%   rf  rG  r,   r-   r.   r.     s    76a8r/   ZLOffset24Toc                 rE  rF  )r%   rh  rG  r,   r-   r.   r.     s    WW;r/   )|ZfontTools.misc.fixedToolsr   r  r   r  r   r  r   r  r   r0  r   r1  Z%fontTools.ttLib.tables.TupleVariationr   ZfontTools.misc.roundToolsr   r	   ZfontTools.misc.textToolsr
   r   r   r   r   ZfontTools.misc.lazyToolsr   ZfontTools.ttLibr   r   ry  r   r   r   r   r   ZotTablesr   r   r   r   r   r   r   r   r   r    rC  r!   rD  r"   Z	itertoolsr#   r$   Z	functoolsr%   Ztypesr&   r   r  Ztypingr'   ZloggingZ	getLoggerrM   r  r  rU   ZobjectrV   r   r   r   r   r   r   r   r   r   r   r   r   r   rB   rC   rD   r   r   r   r   r  r	  r  r  r  r!  r"  r-  r.  r5  rG   rE   rL   rf  rh  r7   r5   r6   r8   r0   rw  rz  r  r  r  r  r  r  r  r(  r3  r4  r@  rA  rF   ro   r/   r-   <module>rI     sQ    A J M M - ?     .  ! 	    !
(=(@eF eP/- /"K { &8 & 'H '  e  !}e !'H ' (X ( &8 & 'H ' "X " (  	K 		[& 		K 	+ Ak A& 
V    . .0Z 0:N  n  >G >0% k 0[ >D4] D4N>v >6+F +DU e M MLu LG&( GLE L8( 8&+ 0t t|8=m 8=v|>M |>Bp pf	- D,- ,^2( 2(j-
] -
`0(= 0(f $Q( Q(h *1 1 J 2
D2 U2 T	2
 U2 f2 f2 e2 f2 w2 2 w2 
32 w2 2  f!2" *#2$ U%2& w'2( U)2* ;+2, f-2. e/20 v122 324 ;526 *728 n92: L;2< *=2> *?2@ ]A2B C2D {CE2F WY:KLG2J ;;!$!);W;68;c2 r/   