
    <`p                     t   d dl mZmZmZ d dlmZmZm	Z
mZmZmZ d dlmZmZ d dlmZ ddlmZmZmZmZmZ ddlmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z(m)Z* d dl+m,Z, d d	l-m.Z. d d
l/Z/d d
l0Z0 e0j1        e2          Z3d Z4d Z5 G d de6          Z7	 d dl8m9Z9 n# e:$ r	 d dl9m9Z9 Y nw xY w G d de9          Z; G d de<          Z= G d de=          Z> G d de>          Z? G d de?          Z@ G d de?          ZA G d deA          ZB G d de?          ZC G d  d!e?          ZD G d" d#e?          ZE G d$ d%e?          ZF G d& d'e?          ZG G d( d)e?          ZH G d* d+eHeF          ZI G d, d-eHeD          ZJ G d. d/eHeA          ZK G d0 d1e>          ZL G d2 d3e>          ZM G d4 d5eM          ZN G d6 d7eD          ZO G d8 d9eD          ZP G d: d;e>          ZQ G d< d=eQ          ZR G d> d?eQ          ZS G d@ dAeQ          ZT G dB dCe>          ZU G dD dEe>          ZV G dF dGe=          ZW G dH dIeW          ZX G dJ dKeW          ZY G dL dMeY          ZZ G dN dOeY          Z[ G dP dQeW          Z\ G dR dSeY          Z] G dT dUeZe]          Z^ G dV dWeY          Z_ G dX dYe?          Z` G dZ d[e`          Za G d\ d]e=          Zb G d^ d_e=          Zc G d` dae=          Zd G db dce=          Ze G dd dee=          Zf G df dge=          Zg G dh die=          Zh G dj dke=          Zi G dl dme=          Zj G dn doeD          Zkdp Zl G dq dre=          Zm G ds dtem          Zn G du dvem          Zo G dw dxem          Zp G dy dzem          Zq G d{ d|eF          Zr G d} d~er          Z' G d der          Z)i deEdeCdeFdeDdeGdeAdeVdeBdCeUd1eLd3eMd5eNd7eOd=eRd?eSdAeTdeWi deYdeZde[d[eadiehdkeidmejdoekd~e'de)d9ePdeefdgegdeXdeXdeXdedd d d d d d eneoepeqd
Zsd
S )    )	bytesjointobytestostr)fixedToFloatfloatToFixedfloatToFixedToStrstrToFixedToFloatensureVersionIsLongversionToFixed)padsafeEval)getSearchRange   )CountReferenceFormatSwitchingBaseTableOTTableReaderOTTableWriterValueRecordFactory)lookupTypesAATStateTableAATState	AATActionContextualMorphActionLigatureMorphActionInsertionMorphActionMorxSubtableVariableFloatVariableInt
ExtendModeCompositeMode)zip_longest)partialNc                 ,    t          | t                    S N)
isinstancetuple)ts    Clib/python3.11/site-packages/fontTools/ttLib/tables/otConverters.py<lambda>r)      s    Jq%((     c           	      0   g }i }| D ]\  }}}}}|}	|                     d          r|dk    sJ t          }
n|                    d          s|dv rt          t          t
          d|         }
nq|dk    rt          }
nc|dk    rt          }
nU|dk    rt          }
nG|d	k    rt          }
n9|d
v rt          }
n-|t          vrd|vr
|}	t          }
nt          ||t                    }
 |
|||          }|j        r|j        }n/|dv r|                    |          }n|                    |	          }|j        s||_        |dv rZ|d         |_        |j                                        D ]3}|                                D ]}t%          ||||          ||j        <   4|d	k    rP|d         |_        |d	         |_        |j                                        D ]}t%          ||||          ||j        <   |                    |           ||vs
J |            |||<   ||fS )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)StructLength	MorphType)uint8r-   uint32SubTableExtSubTable	SubStructFeatureParams)CIDGlyphMappingGlyphCIDMapping()	MortChainMortSubtable	MorxChain)r3   r4   r5   r   featureParamTypes)
startswithr,   endswithComputedUInt8ComputedUShortComputedULongr3   r4   r5   r6   StructWithLengthconverterMappingStructeval
tableClassgetr   valuesTable__name__r=   defaultFeatureParamsappend)	tableSpectableNamespace
convertersconvertersByNametpnamerepeatauxdescr	tableNameconverterClassconvrG   r'   clss                  r(   buildConvertersr[      s    %. 6  6 !RvsE)	__]## @
....>>}}W @)F!F!F  		>>
 z>>}>>{>>!>>555$>>
 
 
 S]]INN"n.>??N	fc	*	*$	_ .::	777""2&&::""9--:	  4?	555$]34##%% D Dqxxzz D D&+D&#s&C&Ccl##D	_*+>?4-o>4$++-- C Cs%*4c%B%BS\""D	%	%	%	%t	%	%	%4$$$r*   c                       e Zd ZdZdS )_MissingItem N)rK   
__module____qualname__	__slots__r^   r*   r(   r]   r]   ]   s        r*   r]   )UserListc                   &    e Zd Zd Zd Zd Zd ZdS )	_LazyListc                 H    |                      t          ||                    S r$   )__getitem__slice)selfijs      r(   __getslice__z_LazyList.__getslice__i   s    			%1++	&	&&r*   c                     t          |t                    r7t          |                    t	                                } fd|D             S  j        |         }t          |t                    r` j                             j	        |d          j
        z  z               j                             j         j        i           }| j        |<   |S )Nc                      g | ]
}|         S r^   r^   ).0ri   rh   s     r(   
<listcomp>z)_LazyList.__getitem__.<locals>.<listcomp>o   s    
$
$
$q47
$
$
$r*   r   )r%   rg   rangeindiceslendatar]   readerseekpos
recordSizerY   readfont)rh   krq   items   `   r(   rf   z_LazyList.__getitem__l   s    5 %AIIc$ii(()7
$
$
$
$G
$
$
$$	1$l## ;DHtAw88999
)..di
4
4449Q<	+r*   c                     t          |t                    rt          |          }nt          |t                    rnt          S t          |           |z   S r$   )r%   rd   listNotImplementedrh   others     r(   __add__z_LazyList.__add__w   sM    y!! ;;55% 
	de	r*   c                 ^    t          |t                    st          S |t          |           z   S r$   )r%   r}   r~   r   s     r(   __radd__z_LazyList.__radd__   s+    	E4	 	  
	d	r*   N)rK   r_   r`   rk   rf   r   r   r^   r*   r(   rd   rd   g   sP        ' ' '	 	 	      r*   rd   c                   F    e Zd ZdZddZd Zd Zd Zd ZddZ	d	 Z
d
 ZdS )BaseConverterzYBase class for converter objects. Apart from the constructor, this
	is an abstract class.Nc                     || _         || _        || _        || _        |                    d          p|dv | _        |                    d          p|dk    | _        |dv | _        d S )Nr.   )DesignAxisRecordSizeValueRecordSize
LookupTyper0   )
ClassCountClass2Count
FeatureTagSettingsCountVarRegionCountMappingCountRegionAxisCountDesignAxisCountr   AxisValueCountr   	AxisCountBaseGlyphRecordCountLayerRecordCount)rS   rT   rU   rG   r?   isCountisLookupTypeisPropagatedrh   rS   rT   rU   rG   s        r(   __init__zBaseConverter.__init__   sr    $)$+$($/w''^43^+^$,mmL11HT[5H$  $r*   c                 
   |j         o|dk    }|r |                     |          }|t          u rd}|s@g }t          |          D ],}|                    |                     |||                     -|S t                      }|                                |_        |j        j	        |_	        ||_
        | |_        ||_        |                    d t          |          D                        |                    ||z             |S )z(Read an array of values from the reader.   Fc              3   6   K   | ]}t          |g          V  d S r$   )r]   )rn   ri   s     r(   	<genexpr>z*BaseConverter.readArray.<locals>.<genexpr>   s,      44!L!444444r*   )lazygetRecordSizer~   rp   rM   rx   rd   copyrt   rv   ry   rY   rw   extendadvance)	rh   rt   ry   	tableDictcountr   rw   lri   s	            r(   	readArrayzBaseConverter.readArray   s   		 uqy$	 ""6**:N""D	 	1%LL 1 1qHHTYYvtY//0000
8{{1kkmm188<1516161<8844uU||444444	>>%*$%%%
8r*   c                 >    t          | d          r| j        S t          S )N
staticSize)hasattrr   r~   rh   rt   s     r(   r   zBaseConverter.getRecordSize   s    T<  8"8	r*   c                      t          |           )zRead a value from the reader.NotImplementedErrorrh   rt   ry   r   s       r(   rx   zBaseConverter.read       D!!!r*   c                     	 t          |          D ]\  }}|                     |||||           d S # t          $ r}|j        |fz   |_         d }~ww xY wr$   )	enumeratewrite	Exceptionargs)rh   writerry   r   rI   ri   valuees           r(   
writeArrayzBaseConverter.writeArray   sz    	V$$ 2 2xq%JJvtYq11112 2	 	 	 	FaTM16	s   .2 
AAAc                      t          |           )zWrite a value to the writer.r   rh   r   ry   r   r   repeatIndexs         r(   r   zBaseConverter.write   r   r*   c                      t          |           )zRead a value from XML.r   rh   attrscontentry   s       r(   xmlReadzBaseConverter.xmlRead   r   r*   c                      t          |           )zWrite a value to XML.r   rh   	xmlWriterry   r   rS   r   s         r(   xmlWritezBaseConverter.xmlWrite   r   r*   r$   )rK   r_   r`   __doc__r   r   r   rx   r   r   r   r   r^   r*   r(   r   r      s            0  .  " " "	 	 	" " " "" " "" " " " "r*   r   c                   F    e Zd Zed             Zed             Zd Zd ZdS )SimpleValuec                     | S r$   r^   r   s    r(   toStringzSimpleValue.toString       	,r*   c                     | S r$   r^   r   s    r(   
fromStringzSimpleValue.fromString   r   r*   c                     |                     ||d|                     |          fgz              |                                 d S Nr   )	simpletagr   newliner   s         r(   r   zSimpleValue.xmlWrite   sI    dEgt}}U/C/C%D$EEFFFr*   c                 8    |                      |d                   S r   r   r   s       r(   r   zSimpleValue.xmlRead   s    	w	(	((r*   N)rK   r_   r`   staticmethodr   r   r   r   r^   r*   r(   r   r      sd          ,  ,  ) ) ) ) )r*   r   c                   $    e Zd Zed             ZdS )IntValuec                 "    t          | d          S Nr   )intr   s    r(   r   zIntValue.fromString   s    	UAr*   NrK   r_   r`   r   r   r^   r*   r(   r   r      s-          ,  r*   r   c                   ,    e Zd ZdZd Zd ZddZd ZdS )Long   c                 *    |                                 S r$   readLongr   s       r(   rx   z	Long.read       			r*   c                 ,    |                     |          S r$   )readLongArrayrh   rt   ry   r   r   s        r(   r   zLong.readArray       			e	$	$$r*   Nc                 0    |                     |           d S r$   )	writeLongr   s         r(   r   z
Long.write       5r*   c                 0    |                     |           d S r$   )writeLongArrayrh   r   ry   r   rI   s        r(   r   zLong.writeArray       r*   r$   rK   r_   r`   r   rx   r   r   r   r^   r*   r(   r   r      Z          % % %            r*   r   c                   ,    e Zd ZdZd Zd ZddZd ZdS )ULongr   c                 *    |                                 S r$   	readULongr   s       r(   rx   z
ULong.read       					r*   c                 ,    |                     |          S r$   )readULongArrayr   s        r(   r   zULong.readArray       			u	%	%%r*   Nc                 0    |                     |           d S r$   
writeULongr   s         r(   r   zULong.write       Er*   c                 0    |                     |           d S r$   )writeULongArrayr   s        r(   r   zULong.writeArray            r*   r$   r   r^   r*   r(   r   r      Z          & & &   ! ! ! ! !r*   r   c                   $    e Zd Zed             ZdS )Flags32c                     d| z  S )Nz0x%08Xr^   r   s    r(   r   zFlags32.toString       	E	r*   N)rK   r_   r`   r   r   r^   r*   r(   r  r     s-          ,  r*   r  c                   ,    e Zd ZdZd Zd ZddZd ZdS )Short   c                 *    |                                 S r$   )	readShortr   s       r(   rx   z
Short.read  r   r*   c                 ,    |                     |          S r$   )readShortArrayr   s        r(   r   zShort.readArray  r   r*   Nc                 0    |                     |           d S r$   )
writeShortr   s         r(   r   zShort.write
  r   r*   c                 0    |                     |           d S r$   )writeShortArrayr   s        r(   r   zShort.writeArray  r   r*   r$   r   r^   r*   r(   r  r    r   r*   r  c                   ,    e Zd ZdZd Zd ZddZd ZdS )UShortr  c                 *    |                                 S r$   
readUShortr   s       r(   rx   zUShort.read      					r*   c                 ,    |                     |          S r$   )readUShortArrayr   s        r(   r   zUShort.readArray  s    				&	&&r*   Nc                 0    |                     |           d S r$   writeUShortr   s         r(   r   zUShort.write      Ur*   c                 0    |                     |           d S r$   )writeUShortArrayr   s        r(   r   zUShort.writeArray  s    &!!!!!r*   r$   r   r^   r*   r(   r  r    sZ          ' ' '   " " " " "r*   r  c                   ,    e Zd ZdZd Zd ZddZd ZdS )Int8r   c                 *    |                                 S r$   )readInt8r   s       r(   rx   z	Int8.read  r   r*   c                 ,    |                     |          S r$   )readInt8Arrayr   s        r(   r   zInt8.readArray  r   r*   Nc                 0    |                     |           d S r$   )	writeInt8r   s         r(   r   z
Int8.write   r   r*   c                 0    |                     |           d S r$   )writeInt8Arrayr   s        r(   r   zInt8.writeArray"  r   r*   r$   r   r^   r*   r(   r  r    r   r*   r  c                   ,    e Zd ZdZd Zd ZddZd ZdS )UInt8r   c                 *    |                                 S r$   )	readUInt8r   s       r(   rx   z
UInt8.read'  r   r*   c                 ,    |                     |          S r$   )readUInt8Arrayr   s        r(   r   zUInt8.readArray)  r   r*   Nc                 0    |                     |           d S r$   )
writeUInt8r   s         r(   r   zUInt8.write+  r   r*   c                 0    |                     |           d S r$   )writeUInt8Arrayr   s        r(   r   zUInt8.writeArray-  r   r*   r$   r   r^   r*   r(   r)  r)  %  r   r*   r)  c                        e Zd ZdZd ZddZdS )UInt24   c                 *    |                                 S r$   
readUInt24r   s       r(   rx   zUInt24.read2  r  r*   Nc                 0    |                     |           d S r$   writeUInt24r   s         r(   r   zUInt24.write4  r  r*   r$   rK   r_   r`   r   rx   r   r^   r*   r(   r3  r3  0  s<               r*   r3  c                       e Zd Zd ZdS )ComputedIntc                 j    |0|                     |d|           |                                 d S d S )N=)commentr   r   s         r(   r   zComputedInt.xmlWrite8  sG    
ee,--- r*   NrK   r_   r`   r   r^   r*   r(   r=  r=  7  s#            r*   r=  c                       e Zd ZdS )r@   NrK   r_   r`   r^   r*   r(   r@   r@   =          r*   r@   c                       e Zd ZdS )rA   NrC  r^   r*   r(   rA   rA   ?  rD  r*   rA   c                       e Zd ZdS )rB   NrC  r^   r*   r(   rB   rB   A  rD  r*   rB   c                        e Zd ZdZd ZddZdS )Tagr   c                 *    |                                 S r$   )readTagr   s       r(   rx   zTag.readF  s    			r*   Nc                 0    |                     |           d S r$   )writeTagr   s         r(   r   z	Tag.writeH  s    //%r*   r$   r;  r^   r*   r(   rH  rH  D  s<               r*   rH  c                   0    e Zd ZdZdZd Zd Zd ZddZdS )	GlyphIDr  Hc                                                      |                    | j        | j        |          }	 fd|D             }n# t          $ r fd|D             }Y nw xY w|S )Nc                      g | ]
}|         S r^   r^   )rn   gid
glyphOrders     r(   ro   z%GlyphID.readArray.<locals>.<listcomp>R  s    (((C
3(((r*   c                 :    g | ]}                     |          S r^   getGlyphName)rn   rR  ry   s     r(   ro   z%GlyphID.readArray.<locals>.<listcomp>U  s'    ///3#///r*   )getGlyphOrderr   typecoder   
IndexError)rh   rt   ry   r   r   gidsr   rS  s     `    @r(   r   zGlyphID.readArrayN  s    !!##*			$-%	@	@$0((((4(((11	 0 0 0////$///1110 
(s   A A#"A#c                 h    |                     |                    | j        | j                            S r$   )rV  	readValuerX  r   r   s       r(   rx   zGlyphID.readW  s*    			6++DM4?KK	L	LLr*   c                                                      	 fd|D             }n# t          $ r fd|D             }Y nw xY w|                    | j        |           d S )Nc                      g | ]
}|         S r^   r^   )rn   	glyphnameglyphMaps     r(   ro   z&GlyphID.writeArray.<locals>.<listcomp>\  s    999YXi 999r*   c                 :    g | ]}                     |          S r^   
getGlyphID)rn   r_  ry   s     r(   ro   z&GlyphID.writeArray.<locals>.<listcomp>_  s%    @@@IT__Y''@@@r*   )getReverseGlyphMapKeyErrorr   rX  )rh   r   ry   r   rI   r`  s     `  @r(   r   zGlyphID.writeArrayY  s    $$&&(A9999&99966	 A A A@@@@@@@666A 	DM6*****s   ' AANc                 b    |                     | j        |                    |                     d S r$   )
writeValuerX  rc  r   s         r(   r   zGlyphID.writea  s,    DM4??5#9#9:::::r*   r$   )	rK   r_   r`   r   rX  r   rx   r   r   r^   r*   r(   rN  rN  K  sb          M M M+ + +; ; ; ; ; ;r*   rN  c                       e Zd ZdZdZdS )	GlyphID32r   LN)rK   r_   r`   r   rX  r^   r*   r(   ri  ri  e  s        r*   ri  c                       e Zd Zd ZdS )NameIDc                    |                     ||d|fgz              |r|r|                    d          }|rt|                    |          }|                    d           |r|                    |           n2|                    d           t
                              d|z             |                                 d S )Nr   rS     zmissing from name tablez"name id %d missing from name table)r   rH   getDebugNamer   r@  logwarningr   )rh   r   ry   r   rS   r   	nameTables          r(   r   zNameID.xmlWritek  s    dEgu%5$66777	 	?e 	?xx9 ?!!%((DOOD ?t0111[[5=>>>r*   NrA  r^   r*   r(   rl  rl  j  s#            r*   rl  c                       e Zd Zd ZdS )	STATFlagsc                 P   |                     ||d|fgz              g }|dz  r|                    d           |dz  r|                    d           |r=|                    d           |                    d                    |                     |                                 d S )Nr   r   OlderSiblingFontAttributer  ElidableAxisValueNamern   )r   rM   r   r@  joinr   rh   r   ry   r   rS   r   flagss          r(   r   zSTATFlags.xmlWritez  s    dEgu%5$66777
%
T\ -<<+,,,
T\ )<<'(((
 &??4SXXe__%%%r*   NrA  r^   r*   r(   rt  rt  y  s#        
 
 
 
 
r*   rt  c                   $    e Zd Zed             ZdS )
FloatValuec                      t          |           S r$   )floatr   s    r(   r   zFloatValue.fromString      	ur*   Nr   r^   r*   r(   r}  r}    s-          ,  r*   r}  c                        e Zd ZdZd ZddZdS )
DeciPointsr  c                 0    |                                 dz  S N
   r  r   s       r(   rx   zDeciPoints.read  s    					r	!!r*   Nc                 P    |                     t          |dz                       d S r  )r  roundr   s         r(   r   zDeciPoints.write  s(    U52:&&'''''r*   r$   r;  r^   r*   r(   r  r    s<        " " "( ( ( ( ( (r*   r  c                   L    e Zd ZdZd ZddZed             Zed             ZdS )Fixedr   c                 F    t          |                                d          S N   )fi2flr   r   s       r(   rx   z
Fixed.read  s    
!!2
&
&&r*   Nc                 L    |                     t          |d                     d S r  )r   fl2fir   s         r(   r   zFixed.write  s&    5##$$$$$r*   c                 "    t          | d          S r  str2flr   s    r(   r   zFixed.fromString      	r		r*   c                 "    t          | d          S r  fl2strr   s    r(   r   zFixed.toString  r  r*   r$   	rK   r_   r`   r   rx   r   r   r   r   r^   r*   r(   r  r    sn        ' ' '% % % %  ,  ,  r*   r  c                   L    e Zd ZdZd ZddZed             Zed             ZdS )F2Dot14r  c                 F    t          |                                d          S N   )r  r	  r   s       r(   rx   zF2Dot14.read  s    
  ""B
'
''r*   Nc                 L    |                     t          |d                     d S r  )r  r  r   s         r(   r   zF2Dot14.write  s&    E%$$%%%%%r*   c                 "    t          | d          S r  r  r   s    r(   r   zF2Dot14.fromString  r  r*   c                 "    t          | d          S r  r  r   s    r(   r   zF2Dot14.toString  r  r*   r$   r  r^   r*   r(   r  r    sn        ( ( (& & & &  ,  ,  r*   r  c                   b    e Zd ZdZd ZddZed             Zed             Zed             Z	dS )	Versionr   c                 Z    |                                 }|dz	  dk    sJ d|z              |S Nr  r   zUnsupported version 0x%08xr   )rh   rt   ry   r   r   s        r(   rx   zVersion.read  s9    
//

%
2+!			9EA				,r*   Nc                 z    t          |          }|dz	  dk    sJ d|z              |                    |           d S r  )fi2ver   r   s         r(   r   zVersion.write  sJ    
,,%
2+!			9EA			5r*   c                      t          |           S r$   )ve2fir   s    r(   r   zVersion.fromString  r  r*   c                     d| z  S )N0x%08xr^   r   s    r(   r   zVersion.toString  r  r*   c                 "    t          | d          S r  )r  )vs    r(   	fromFloatzVersion.fromFloat  s    	q"r*   r$   )
rK   r_   r`   r   rx   r   r   r   r   r  r^   r*   r(   r  r    s                ,  ,  ,  r*   r  c                   $    e Zd ZdZdZd ZddZdS )Char64zAn 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                    |                     | j                  }|                    d          }|dk    r
|d |         }t          |dd          }|t          |dd          k    rt                              d|z             |S )N    r   asciireplaceencodingerrorsignorez%replaced non-ASCII characters in "%s")readDatar   findr   rp  rq  )rh   rt   ry   r   rs   zeroPosss          r(   rx   zChar64.read  s    		)	)$IIe'\\
xx.4D79555!%wx
8
8
888;;6   	
(r*   Nc                 f   t          |dd          }|t          |dd          k    rt                              d|z             t          |          | j        k    r$t                              d|| j        fz             |d| j        z  z   d | j                 }|                    |           d S )Nr  r  r  r  z&replacing non-ASCII characters in "%s"z$truncating overlong "%s" to %d bytesr  )r   rp  rq  rr   r   	writeData)rh   r   ry   r   r   r   rs   s          r(   r   zChar64.write  s    		;	;	;$	WUWX>>>>>;;7   YY  ;;5t'( ) ) )
(
(*:4?*:	;$4r*   r$   )rK   r_   r`   r   r   rx   r   r^   r*   r(   r  r    sH         
 	 	 		 	 	 	 	 	r*   r  c                   4    e Zd Zd Zd ZddZd Zd Zd ZdS )	rE   c                 D    | j         o| j                             |          S r$   )rG   r   r   s     r(   r   zStruct.getRecordSize  s    		BT_::6BBBr*   c                 Z    |                                  }|                    ||           |S r$   )rG   	decompile)rh   rt   ry   r   tables        r(   rx   zStruct.read  s*    
//

%//&$	,r*   Nc                 2    |                     ||           d S r$   )compiler   s         r(   r   zStruct.write  s    --r*   c                     |4|r0|                     ||dgz              |                                 d S d S |                    ||||           d S )N)emptyr   rS   )r   r   toXMLr   s         r(   r   zStruct.xmlWrite  sk    
] 	 e|n4555D;;y$D;11111r*   c                 *   d|v rt          |d                   rd S |                                 }|                    d          }|t          |          |_        t          |d           }|rd}|                                D ]{}|j        rrd}t          |d          si |_        |j        }	|j	        |	vsJ |j	        |	f            t          ||j	        d            t          |j        |j	                  |	|j	        <   ||D ]6}
t          |
t                    r|
\  }}}|                    ||||           67|                    t#          |dd                      |r3|r1|                                D ]}|j        r|j        }	|	|j	        = |	s|`|S )Nr  FormatpostReadFT_propagator)
propagator)r   rG   rH   r   r  r   getConvertersr   r  rS   setattrr   __dict__r%   r&   fromXMLpopulateDefaultsgetattr)rh   r   r   ry   r  r  
noPostReadcleanPropagationrY   r  elementrS   s               r(   r   zStruct.xmlRead  s   (5>22
$
//

%99X&f++5<5*---* G""$$ G Gt GD-(( d"ZIZ'''$)Z)@'''UDIt$$$+ENDIFFZ	 	 	g%   	"D%	MM$w----GD-$F$FGGG  ##%%   #j
TY
 	,r*   c                 0    dt          | j                  z   S )Nz
Struct of )reprrG   )rh   s    r(   __repr__zStruct.__repr__%  s    	T_--	--r*   r$   )	rK   r_   r`   r   rx   r   r   r   r  r^   r*   r(   rE   rE     sw        C C C  
   2 2 2( ( (T. . . . .r*   rE   c                       e Zd Zd ZddZdS )rC   c                     |j         }|                                 }|                    ||           |                    ||j        z              |S r$   )rv   rG   r  ru   r/   )rh   rt   ry   r   rv   r  s         r(   rx   zStructWithLength.read*  sK    
#
//

%//&$++cE&&'''	,r*   Nc                 R   t          |                                          D ]\  }}|j        dk    r nt          |j                  |z   }t          |t                    r|dz  }dddd|j                 }	|                                }
|	|_	        |
                    ||           |                                |
z
  }|                                }|                    ||||           |j        |         dd |j                 k    sJ |                                |j        |<   d S )Nr/   r      i     >[= )r   r  r      ޭ)r   r  rS   rr   itemsr%   r   r   getDataLengthr/   r  getSubWriterr   
getAllData)rh   r   ry   r   r   r   	convIndexrY   lengthIndexdeadbeefbeforelengthlengthWriters                r(   r   zStructWithLength.write1  s?   "5#6#6#8#899 
 
oi
i>!!	E "FL!!I-+/00 !;*--do>(!!&%--!!F*&$$&&,**\4F333	k	"	-do-	.
/ 
/ 
/ 
/*5577&,{r*   r$   rK   r_   r`   rx   r   r^   r*   r(   rC   rC   )  s7          8 8 8 8 8 8r*   rC   c                   ,    e Zd ZdZd Zd Zd ZddZdS )rJ   r  c                 *    |                                 S r$   r  r   s     r(   
readOffsetzTable.readOffsetI  r  r*   c                 0    |                     d           d S r   r  rh   r   s     r(   writeNullOffsetzTable.writeNullOffsetL      Qr*   c                     |                      |          }|dk    rd S |                                 }|                    |          }|j        r||_        ||_        n|                    ||           |S r   )r  rG   getSubReaderr   rt   ry   r  )rh   rt   ry   r   offsetr  s         r(   rx   z
Table.readO  sv    ??6""&q[[
$
//

%v&&&	Y !5<5::??64   	,r*   Nc                     ||                      |           d S |                    | j                  }| j        |_        |||_        |                    |           |                    ||           d S )N
offsetSize)r  r  r   rS   r   writeSubTabler  )rh   r   ry   r   r   r   	subWriters          r(   r   zTable.write\  s~    
]""do">>9I9>'I		"""==D!!!!!r*   r$   )rK   r_   r`   r   r  r  rx   r   r^   r*   r(   rJ   rJ   E  sZ              	" 	" 	" 	" 	" 	"r*   rJ   c                       e Zd ZdZd Zd ZdS )LTabler   c                 *    |                                 S r$   r   r   s     r(   r  zLTable.readOffsetk  r   r*   c                 0    |                     d           d S r   r   r  s     r(   r  zLTable.writeNullOffsetn  s    Ar*   NrK   r_   r`   r   r  r  r^   r*   r(   r  r  g  s7              r*   r  c                       e Zd ZdZd Zd ZdS )Table24r4  c                 *    |                                 S r$   r6  r   s     r(   r  zTable24.readOffsetw  r  r*   c                 0    |                     d           d S r   r9  r  s     r(   r  zTable24.writeNullOffsetz  r  r*   Nr  r^   r*   r(   r   r   s  s7              r*   r   c                   $     e Zd Zd Z fdZ xZS )r5   c                 v    | j         |         |         }|                     | j        | j        | j        |          S r$   r   	__class__rS   rT   rU   rh   	tableType
lookupTyperG   s       r(   getConverterzSubStruct.getConverter  2    	*:6*		4;*	E	EEr*   c                 `    t          t          |                               |||d |           d S r$   )superr5   r   rh   r   ry   r   rS   r   r  s         r(   r   zSubStruct.xmlWrite  s/    	4!!)T5$FFFFFr*   rK   r_   r`   r
  r   __classcell__r  s   @r(   r5   r5     sS        F F FG G G G G G G G Gr*   r5   c                   $     e Zd Zd Z fdZ xZS )r3   c                 v    | j         |         |         }|                     | j        | j        | j        |          S r$   r  r  s       r(   r
  zSubTable.getConverter  r  r*   c                 `    t          t          |                               |||d |           d S r$   )r  r3   r   r  s         r(   r   zSubTable.xmlWrite  s/    $  D%uEEEEEr*   r  r  s   @r(   r3   r3     sS        F F FF F F F F F F F Fr*   r3   c                       e Zd ZddZdS )r4   Nc                 R    d|_         t                              | |||||           d S )NT)	ExtensionrJ   r   r   s         r(   r   zExtSubTable.write  s,    &++dFD)UK@@@@@r*   r$   )rK   r_   r`   r   r^   r*   r(   r4   r4     s.        A A A A A Ar*   r4   c                       e Zd Zd ZdS )r6   c                     | j                             || j                  }|                     | j        | j        | j        |          S r$   )r=   rH   rL   r  rS   rT   rU   )rh   
featureTagrG   s      r(   r
  zFeatureParams.getConverter  s;    %))*d6OPP*		4;*	E	EEr*   N)rK   r_   r`   r
  r^   r*   r(   r6   r6     s(        F F F F Fr*   r6   c                   (    e Zd ZdZddZd ZddZdS )r,   r  Nc                 r    t                               | ||||           d|d         dk    rdndz   | _        d S )Nr,   21)r   r   whichr   s        r(   r   zValueFormat.__init__  s>    tVS*===tBx3C@$***r*   c                 \    |                                 }t          |          || j        <   |S r$   )r  r   r   rh   rt   ry   r   formats        r(   rx   zValueFormat.read  s,    &)&11&	-r*   c                 ^    |                     |           t          |          || j        <   d S r$   )r  r   r   )rh   r   ry   r   r#  r   s         r(   r   zValueFormat.write  s0    V)&11&r*   r$   )rK   r_   r`   r   r   rx   r   r^   r*   r(   r,   r,     sT        A A A A  2 2 2 2 2 2r*   r,   c                   .    e Zd Zd Zd ZddZd Zd ZdS )ValueRecordc                 <    dt          || j                           z  S )Nr  )rr   r   r   s     r(   r   zValueRecord.getRecordSize  s    	
S
#$$	$$r*   c                 D    || j                                      ||          S r$   )r   readValueRecordr   s       r(   rx   zValueRecord.read  s    	
		+	+FD	9	99r*   Nc                 J    || j                                      |||           d S r$   )r   writeValueRecordr   s         r(   r   zValueRecord.write  s'    %%fdE:::::r*   c                 H    |d S |                     ||| j        |           d S r$   )r  rS   r   s         r(   r   zValueRecord.xmlWrite  s,    
]4;;y$	511111r*   c                 V    ddl m}  |            }|                    d |||           |S )Nr   )r&  )otBaser&  r  )rh   r   r   ry   r&  r   s         r(   r   zValueRecord.xmlRead  s<    !!!!!!
+--%--eWd+++	,r*   r$   )rK   r_   r`   r   rx   r   r   r   r^   r*   r(   r&  r&    sd        % % %: : :; ; ; ;2 2 2
    r*   r&  c                       e Zd ZdZd Zd ZddZed             Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )	AATLookupr  c                     t                               | ||||           t          | j        t                    r|                     dd d           | _        d S t          dd d | j                  | _        d S )NValuerS   rT   rU   )rS   rT   rU   rG   )r   r   
issubclassrG   r   	converterrJ   r   s        r(   r   zAATLookup.__init__  sn    tVS*===-- [OO4OHH4>>>wt$/ZZZ4>>>r*   c                 \   |                                 }|dk    r|                     ||          S |dk    r|                     ||          S |dk    r|                     ||          S |dk    r|                     ||          S |dk    r|                     ||          S J d|z              )Nr   r  r      r   Fzunsupported lookup format: %d)r  readFormat0readFormat2readFormat4readFormat6readFormat8r"  s        r(   rx   zAATLookup.read  s    &q[[


64
(
(({{


64
(
(({{


64
(
(({{


64
(
(({{


64
(
((9069999r*   Nc                 .   t          t          fd|                                D                                 }t          t          t          d |                     ||          |                     ||          |                     ||          |                     ||          g                              }|d         \  }}	}
|                                } |
             |                                |z
  }||k    sJ d|	||fz              d S )Nc                 D    g | ]\  }}                     |          |fS r^   rb  )rn   glyphvalry   s      r(   ro   z#AATLookup.write.<locals>.<listcomp>  s>     9 9 9&E3 //5 9 9 9r*   r   z;AATLookup format %d claimed to write %d bytes, but wrote %d)	r}   sortedr  filterbuildFormat0buildFormat2buildFormat6buildFormat8r  )rh   r   ry   r   r   r   rI   formatsdataSizelookupFormatwriteMethodrv   
actualSizes     `          r(   r   zAATLookup.write  sE    9 9 9 9*/++--9 9 9 : : ; ;& tVT6**VT6**VT6**VT6**	&      ' )0
%(L+#+---##%%+*	x			@(J'( 
 				r*   c                    |                      |           |                      |           t          ||          \  }}}|                      |           |                      |           |                      |           d S )N)nitemSize)r  r   )r   numUnitsunitSizesearchRangeentrySelector
rangeShifts         r(   writeBinSearchHeaderzAATLookup.writeBinSearchHeader  s    XXHx000 )+}j[!!!]###Z     r*   c                      t                                                    }t                    |k    rd S  j        j        }d||z  z   d fdfS )Nr  r   c                  2                                    S r$   )writeFormat0ry   rh   rI   r   s   r(   r)   z(AATLookup.buildFormat0.<locals>.<lambda>      4VT622 r*   )rr   rW  r5  r   )rh   r   ry   rI   	numGlyphs	valueSizes   ````  r(   rC  zAATLookup.buildFormat0  sm    $$$&&'')[[I
$n')
i)#
#Q2222222
4 4r*   c                 ~    |                     d           |D ]$\  }}| j                            ||d |d            %d S )Nr   r   r   r   )r  r5  r   )rh   r   ry   rI   glyphID_r   s         r(   rW  zAATLookup.writeFormat0  sc    Q # #oh>
DD
T  # # # ## #r*   c                 P    |d         \  }}|}g |dd          D ]5\  }}||dz   k    s||k    r                     |||f           |x}}|}3|}6                     |||f            j        j        }	t                    dz   |	dz   }}
d j        z   |
|z  z   d fdfS )Nr   r   r   r  c                  2                                    S r$   )writeFormat2)ry   segmentsrh   r   s   r(   r)   z(AATLookup.buildFormat2.<locals>.<lambda>  s    $##FD(;; r*   )rM   r5  r   rr   BIN_SEARCH_HEADER_SIZE)rh   r   ry   rI   segStartsegValuesegEndglyphIDcurValuer[  rO  rP  rb  s   ```         @r(   rD  zAATLookup.buildFormat2  s    ay(H&(!!"":  gx!x833OOXvx0111HvHHFF
//8VX.///n')8}}q()a-H(
d)
)Hx,?
?
;
;
;
;
;
;
;
= =r*   c                    |                     d           | j        j        }t          |          |dz   }}|                     |||           |D ]O\  }}}	|                     |           |                     |           | j                            ||d |	d            P|                     d           |                     d           |                    d|z             d S )Nr  r   r]    r  r  r5  r   rr   rT  r   r  )
rh   r   ry   rb  r[  rO  rP  
firstGlyph	lastGlyphr   s
             r(   ra  zAATLookup.writeFormat2  s   Qn')8}}i!mH(FHh777&. # #"j)U	i   	j!!!>
DD
T  # # # # 	VV7Y&'''''r*   c                       j         j        }t                    |dz   }}d j        z   |dz   |z  z   d fdfS )Nr  r   r7  c                  2                                    S r$   )writeFormat6rX  s   r(   r)   z(AATLookup.buildFormat6.<locals>.<lambda>(  rY  r*   )r5  r   rr   rc  )rh   r   ry   rI   r[  rO  rP  s   ````   r(   rE  zAATLookup.buildFormat6$  s]    n')6{{IMH(
d)
)X\X,E
Eq2222222
4 4r*   c                 p   |                     d           | j        j        }t          |          |dz   }}|                     |||           |D ]9\  }}|                     |           | j                            ||d |d            :|                     d           |                    d|z             d S )Nr7  r  r]  rj  r  rk  )	rh   r   ry   rI   r[  rO  rP  rg  r   s	            r(   rp  zAATLookup.writeFormat6*  s    Qn')6{{IMH(FHh777 # #ngu	g>
DD
T  # # # # 	V7Y&'''''r*   c                      d         d         d         d         }}t                    ||z
  dz   k    rd S  j        j        }dt                    |z  z   d fdfS )Nr   r  r   r7  r   c                  2                                    S r$   )writeFormat8rX  s   r(   r)   z(AATLookup.buildFormat8.<locals>.<lambda>=  s     1 1&$ G G r*   )rr   r5  r   )rh   r   ry   rI   
minGlyphID
maxGlyphIDr[  s   ````   r(   rF  zAATLookup.buildFormat87  s    !!9Q<Aj*[[J+a///
$n')
c&kkI%
%qGGGGGGG
I Ir*   c                    |d         d         }|                     d           |                     |           |                     t          |                     |D ]$\  }}| j                            ||d |d            %d S )Nr   r   r]  )r  rr   r5  r   )rh   r   ry   rI   firstGlyphID_r   s          r(   rt  zAATLookup.writeFormat8?  s    1,Q\"""S[[!!! # #ha>
DD
T  # # # ## #r*   c                     t                                                    }| j                            |d |          }fdt	          |          D             S )Nr   r   c                 B    i | ]\  }}                     |          |S r^   rU  )rn   rz   r   ry   s      r(   
<dictcomp>z)AATLookup.readFormat0.<locals>.<dictcomp>M  s=     
+ 
+ 
+a 

A

 
+ 
+ 
+r*   )rr   rW  r5  r   r   )rh   rt   ry   rZ  rs   s     `  r(   r8  zAATLookup.readFormat0I  sr    $$$&&'')		!	!	44y 
" 
2 
2$
+ 
+ 
+ 
+#D//
+ 
+ 
+ +r*   c                    i }|j         dz
  }|                                |                                }}|d| j        j        z   k    s
J |            t	          |          D ]}|                    |||z  z   dz              |                                }|                                }	| j                            ||d           }
|dk    r.t	          |	|dz             D ]}|
||                    |          <   |S )Nr  r      r   rj  r   rv   r  r5  r   rp   ru   rx   rV  )rh   rt   ry   mappingrv   rP  rO  ri   lastfirstr   rz   s               r(   r9  zAATLookup.readFormat2P  s   '
Q#((**F,=,=,?,?H(	Q22	2	2	2H	2	2	2?? + +a	;;sQ\!B&'''




45>vtt<<5
fnn5$(## + +%*WTq!!""	.r*   c                 p   i }|j         dz
  }|                                }|dk    s
J |            t          |                                          D ]}|                    |||z  z   dz              |                                }|                                }|                                }	|dk    r|                    d          }
|
                    ||	z              | j                            |
|d ||z
  dz             }t          |          D ] \  }}|||                    ||z             <   !|S )Nr  r7  r  rj  r   r   r{  )	rv   r  rp   ru   r  r5  r   r   rV  )rh   rt   ry   r  rv   rP  ri   r  r  r  
dataReaderrs   rz   r  s                 r(   r:  zAATLookup.readFormat4_  sM   '
Q#  (	Q""$$%% / /a	;;sQ\!B&'''




456
fnn$$Q''JOOC&L!!!>##%<! $  D $ / /1-.WTuqy))**	.r*   c                    i }|j         dz
  }|                                }|d| j        j        z   k    s
J |            t	          |                                          D ]o}|                    |||z  z   dz              |                                }| j                            ||d           }|dk    r|||                    |          <   p|S )Nr  r  r  rj  r  )	rh   rt   ry   r  rv   rP  ri   rg  r   s	            r(   r;  zAATLookup.readFormat6s  s    '
Q#  (	Q22	2	2	2H	2	2	2""$$%% 0 0a	;;sQ\!B&'''  7>
DD  " "5*/GDg&&'	.r*   c                     |                                 |                                 }| j                            |d |          }fdt          |          D             S )Nr{  c                 H    i | ]\  }}                     |z             |S r^   rU  )rn   rz   r   r  ry   s      r(   r}  z)AATLookup.readFormat8.<locals>.<dictcomp>  sA     
- 
- 
-q% 

EAI
&
& 
- 
- 
-r*   )r  r5  r   r   )rh   rt   ry   r   rs   r  s     `  @r(   r<  zAATLookup.readFormat8  s    




%




%		!	!	44u 
" 
. 
.$
- 
- 
- 
- 
-%dOO
- 
- 
- -r*   c                     i }|D ]H}t          |t                    r1|\  }}}|dk    r%| j                            |||          ||d         <   I|S )NLookupr?  )r%   r&   r5  r   )	rh   r   r   ry   r   r  rS   a
eltContents	            r(   r   zAATLookup.xmlRead  sj    
% E Eg%   E!D!Zx//:tDDU1W:	,r*   c           	      >   |                     ||           |                                 t          |                                          D ]'\  }}| j                            |||dd|fg           (|                    |           |                                 d S )Nr  r?  )r   rS   r   )begintagr   rA  r  r5  r   endtag)rh   r   ry   r   rS   r   r?  s          r(   r   zAATLookup.xmlWrite  s    T5!!!U[[]]++ - -leU>t5	7E*+  - - - - 4r*   r$   )rK   r_   r`   rc  r   rx   r   r   rT  rC  rW  rD  ra  rE  rp  rF  rt  r8  r9  r:  r;  r<  r   r   r^   r*   r(   r0  r0    sN       [ [ [: : :) ) ) )( ! ! ,!4 4 4# # #= = ="( ( (4 4 4( ( (I I I# # #+ + +    (  - - -      r*   r0  c                   (    e Zd Zd ZddZd Zd ZdS )AATLookupWithDataOffsetc                    |                                 }|                                 }|                    |          }t          dd d t                    }|                    |||          }i }	|                                D ]L\  }
}|                    ||z             }|                                 }|                    ||           ||	|
<   M|	S NDataOffsets)r   r  r0  r  rx   r  rG   r  )rh   rt   ry   r   lookupOffset
dataOffsetlookupReaderlookupoffsetsresultr?  r  r  r{   s                 r(   rx   zAATLookupWithDataOffset.read  s    !!##,!!*$$\22,]D$77&KKdI66'&}}  meV##FZ$788:
//

4>>*d###6%==	-r*   Nc                    i i d}}}g }	t          ||j                  D ]}
t                      }||
                             ||           |                                }|                    |d           }|d k    r.|}|t          |          z   }|||<   |	                    |           |||
<   |                    d          }t          dd d t                    }|                    ||||d            |                    d          }|                    |           |                    |           |	D ]}|                    |           d S )Nr   )keyr   r  r  )rA  rc  r   r  r  rH   rr   rM   r  r0  r  r   r  r  )rh   r   ry   r   r   r   offsetByGlyphoffsetByDatadataLencompiledDatar?  r  rs   r  lookupWriterr  
dataWriterds                     r(   r   zAATLookupWithDataOffset.write  sy    *,Rw-,e111 
! 
!e9<	4(((



 
 4T4((6nnFD		!GL = $$$22,]D$77&,,|T9mTBBB""a"00*|$$$z"""  a r*   c                 ^    t          dd d | j                  }|                    |||          S r  )r0  rG   r   )rh   r   r   ry   r  s        r(   r   zAATLookupWithDataOffset.xmlRead  s-    ]D$@@&	w	-	--r*   c                 f    t          dd d | j                  }|                    |||||           d S r  )r0  rG   r   )rh   r   ry   r   rS   r   r  s          r(   r   z AATLookupWithDataOffset.xmlWrite  s7    ]D$@@&//)T5$66666r*   r$   rK   r_   r`   rx   r   r   r   r^   r*   r(   r  r    sV          ! ! ! !F. . .7 7 7 7 7r*   r  c                   ~    e Zd ZdddddZd e                                D             Zd Zd Zd	 Zd
 Z	d Z
ddZdS )MorxSubtableConverterLayoutOrderReversedLayoutOrderLogicalOrderReversedLogicalOrder))FF)TFFT)TTc                     i | ]\  }}||	S r^   r^   )rn   r  r@  s      r(   r}  z MorxSubtableConverter.<dictcomp>  s+          sC#s     r*   c                 @    t                               | |||           d S r$   )r   r   )rh   rS   rT   rU   s       r(   r   zMorxSubtableConverter.__init__  s"    tVS11111r*   c                 \    |dz  dk    r	d|_         d S |dz  dk    r	d|_         d S d|_         d S )N    r   Any   Vertical
Horizontal)TextDirection)rh   r{  subtables      r(   "_setTextDirectionFromCoverageFlagsz8MorxSubtableConverter._setTextDirectionFromCoverageFlags  sJ    dlq!8&8(8r*   c                    |j         }t                      }|                                |_        |                                }|dz  dk    |dz  dk    f}| j        |         |_        |                     ||           |                                |_	        |xj	        |dz  dz  z  c_	        |                                |_
        |                                |_        t          d                             |j
                  }|J d|j
        z              |j         |z
  }	|j        |j         |j         |j        z   |	z
           }
t          |
          |j        |	z
  k    sJ t!          |
|j                  } |            |_        |j                            ||           |                    ||j        z              |S )	Nr  r   r     morxFz!unsupported 'morx' lookup type %s)rs   tableTag)rv   r   r   r/   r+  _PROCESSING_ORDERSProcessingOrderr  r  Reservedr0   SubFeatureFlagsr   rH   rs   rr   r   r  r5   r  ru   )rh   rt   ry   r   rv   mr{  orderKeyrG   headerLengthrs   	subReaders               r(   rx   zMorxSubtableConverter.read  s   
#nn!##%%!.




%t|!EDLQ#67(-h7!))%333  ""!***##**  ""!+&&((!6"&&q{33*5+   
 c!,		:Z!. </0
1$ 
Tan|3	3	3	3	3@@@)
!++	4(((++cAN"###	
(r*   c                 H   |                     ||           |                                 |                    d|j        z             |                                 |                    d|j                   |                                 |                    d|j                   |                                 |j        dk    r3|                    dd|j        z             |                                 |                    d|j        z             |                                 |                    d	d
|j	        z             |                                 |j
                            ||           |                    |           |                                 d S )NzStructLength=%dr  r   r  r   r  z0x%04xzMorphType=%dr  r  )r  r   r@  r/   r   r  r  r  r0   r  r5   r  r  r   s         r(   r   zMorxSubtableConverter.xmlWrite  s   T5!!!%(::;;;oU-@AAA'!1  3 3 3
^qz%6  8 8 8NU_4555'$u'<<  > > >/	4(((4r*   c                     t                      }d}d|_        t          t          |          D ]:\  }}}|dk    rPt	          |d                   }|dz  dk    |dz  dk    f}	| j        |	         |_        |                     ||           ]|dk    r.|d         |_        |j        | j        v sJ d|j        z              |dk    r)|d         |_	        |j	        d	v sJ d
|j	        z              |dk    rt	          |d                   |_        |dk    rt	          |d                   |_
        |                    d          r|                    ||||           2J |            |dz  dz  |j        z  |_        |S )Nr   CoverageFlagsr   r  r  r  zunknown ProcessingOrder: %sr  >   r  r  r  zunknown TextDirection %sr  r  MorphFr  )r   r  rB  istupler   r  r  r  _PROCESSING_ORDERS_REVERSEDr  r  r?   r  )
rh   r   r   ry   r  covFlagseltNameeltAttrsr  r  s
             r(   r   zMorxSubtableConverter.xmlRead,  s   nn!(!*'-gw'?'?  #gx  )**HDQ&DQ&(H/A++q   $$$ )A @@@@B_bcbsBs@@@@?""w'AO?????A[^_^mAm????:(7+,,AJJ$$$ '!233A!! IIgxT2222'32%
2!*	
(r*   Nc                    |j         dz  dz	  }| j        |j                 \  }}||j        dk    rdndz  }||rdndz  }||j        dk    rdndz  }||rdndz  }||_        t          |j                  }	|                                }
d	|_        |j         }|j         d
z  |_         |	                    ||           ||_         |j        |	         dk    sJ |                                |
z
  }t          j        d|          |j        |	<   d S )Ni   r  r  r  r   r  r  r  r  rj  r  z>L)r  r  r  r  r  rr   r  r  r/   r  structpack)rh   r   ry   r   r   r   r  reverseOrderlogicalOrderr  r  origReservedr  s                r(   r   zMorxSubtableConverter.writeK  s6   nz)b0(#? ,
e)Z77ddQ>(
l)dd)(
e)U22dd9(
l)dd)( %FL!!+!!&!% ,>F*%.--%.	k	"&9	9	9	9	9!!F*&$k$77&,{r*   r$   )rK   r_   r`   r  r  r  r   r  rx   r   r   r   r^   r*   r(   r  r    s          &&    -3355     2 2 2) ) )  <  .  >8 8 8 8 8 8r*   r  c                   v    e Zd Zd Zd Zd Zd Zd Zd ZddZ	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd ZdS )	STXHeaderc                 0   t                               | ||||           t          | j        t                    sJ t          dd d t                    | _        t          | j        t                    rt          dd d t                    | _
        d S d | _
        d S )NGlyphClassesPerGlyphLookup)r   r   r4  rG   r   r0  r  classLookupr   rN  perGlyphLookupr   s        r(   r   zSTXHeader.__init__e  s    tVS*===	DOY	/	////~tT6BB$!677 "#3#'w8 84 4r*   c                 R   t                      }|j        }|                    d          }|                    d          }|                    d          }d }	d }
|                                |_        |                    ||                                z              |                    ||                                z              |                    ||                                z              | j        ?|                    d          }|                    ||                                z              t          | j        t                    r|                    d          }	|	                    ||                                z              |                    d          }|                    ||                                z              |                    d          }
|
                    ||                                z              |
j        |j        z
  dz  }|dk    sJ |
                    |          |_        |                     |
|          |_        nYt          | j        t                    r?|                    d          }	|	                    ||                                z              | j                            |||          |_        t%          |j        |j        z
  |j        dz  z            }t'          |          D ]u}t)                      }|j                            |           t'          |j                  D ]6}|                                }|                     ||||	          |j        |<   7v| j        |                     |||          |_        |S )Nr   r  )r   rv   r  r   GlyphClassCountru   r  r4  rG   r   r  LigComponents_readLigatures	Ligaturesr   r  rx   r  r   rp   r   StatesrM   r  _readTransitionTransitions_readPerGlyphLookupsPerGlyphLookups)rh   rt   ry   r   r  rv   classTableReaderstateArrayReaderentryTableReaderactionReaderligaturesReaderperGlyphTableReaderligComponentReadernumLigComponents	numStates
stateIndexstate
glyphClass
entryIndexs                      r(   rx   zSTXHeader.reado  s   
//%
#((++((++((++,/ **,,%f..000111f..000111f..000111	$,,Q//C&"2"2"4"44555!455 /%%a((<S6++---...++A..3!1!1!3!33444((++?f..000111&*+/0456
a



&&'788 	(($??5??$/#788 /%%a((<S6++---...',,-=-19> >%#'*:*>>+a/1 2 2))$$ ( (j::5<u5011 ( (z!,,..J	*$d&( ( 
j!!( 
$44	& &5	,r*   c                     |                                  }|                    |j        ||j        z  z             }|                    |||           |S r$   )rG   r  rv   r   r  )rh   rt   r  ry   r  
transitionentryReaders          r(   r  zSTXHeader._readTransition  sV      *##	:
Z2224 4+{D,777	r*   c                     t          |j                  }||j        z
  dz  }fd|                    |          D             S )Nr  c                 :    g | ]}                     |          S r^   rU  )rn   gry   s     r(   ro   z,STXHeader._readLigatures.<locals>.<listcomp>  s7     
> 
> 
> 

A

 
> 
> 
>r*   )rr   rs   rv   r  )rh   rt   ry   limitnumLigatureGlyphss     `  r(   r  zSTXHeader._readLigatures  s^    
fk

%vz)a/
> 
> 
> 
>))*;<<
> 
> 
> >r*   c                    d}|j         D ]y}|j                                        D ]]}t          |t                    rF|j        dk    rt          ||j        dz             }|j        dk    rt          ||j        dz             }^z|S )Nr   rj  r   )r  r  rI   r%   r   	MarkIndexmaxCurrentIndex)rh   r  
numLookupsr  r'   s        r(   _countPerGlyphLookupszSTXHeader._countPerGlyphLookups  s    
 *| 
 
e$$&& 	 	q!*++ 	v{Q j 	
&  ~ j	 
r*   c                 >   |j         }g }t          |                     |                    D ]p}|                    d          }|                    ||                                z              |                    | j                            ||i                      q|S r   )	rv   rp   r   r  ru   r   rM   r  rx   )rh   r  rt   ry   rv   lookupsry  r  s           r(   r  zSTXHeader._readPerGlyphLookups  s    
#'++E2233 6 6a%%a((<S6++---...
>>\4446 6 6 6	.r*   Nc                    t                      }| j                            ||||j        d            t	          |                                d          }t          |j                                                  dz   }d}	| j        |	dz  }	|	| j	        j
        z  }	| j	                            ||j                  \  }
}|                     ||j        ||          \  }}|	t          |          z   }|t          |          z   }|t          |          z   }t	          |                     ||          d          }|
|t          |          z   }nd }d\  }}|                     ||          }|                     ||          }|9t          |          dk    sJ |t          |
          z   }|t          |          z   }|                    |           |                    |	           |                    |           |                    |           | j        |                    |           ||                    |           |*|                    |           |                    |           |                    |           |                    |           |                    |           |                    |           |
|                    |
           ||                    |           ||                    |           d S d S )Nr   r  r   r  r   )NNr   )r   r  r   r  r   r  r  rI   r  rG   actionHeaderSizecompileActionsr  _compileStatesrr   _compilePerGlyphLookups_compileLigComponents_compileLigaturesr   r  )rh   r   ry   r   r   r   glyphClassWriterglyphClassDataglyphClassCountglyphClassTableOffset
actionDataactionIndexstateArrayDataentryTableDatastateArrayOffsetentryTableOffsetperGlyphOffsetperGlyphDataactionOffsetligaturesOffsetligComponentsOffsetligComponentsDataligaturesDatas                          r(   r   zSTXHeader.write  s?   "__)4+  ? ? ?'2244a88.*113344q8/	$A4?;;?!!$55 *k#'#6#6$5 $5 ..*S-@-@@%N(;(;;#c.&9&99.t##E400!44 "S%8%88<<<)3&/&00==((55-"
l

q
 
 
 
 %J7(3/@+A+AA?O$$$)***$%%%$%%%	$	^$$$	\"""$	()))	_%%%>""">""">"""<   	J"	%&&&	M""""" r*   c           	         t                      }g i }}|D ]}t          |          D ]}	|j        |	         }
t                      }|
                    |||           |                                }t          |          |
j        k    s/J dt          |
          |
j        t          |          fz              |                    |          }|)t          |          }|||<   |	                    |           |
                    |           t          |                                d          }t          t          |          d          }||fS )Nz1%s has staticSize %d, but actually wrote %d bytesr   )r   rp   r  r  r  rr   r   r  rH   rM   r  r   r   )rh   ry   statesr  r  stateArrayWriterentriesentryIDsr  r  r  entryWriter	entryDatar  r  r  s                   r(   r  zSTXHeader._compileStates  sh   "__"8' - -e?++ - -z":.J//K{D"$ $ $&&((Iy>>j3333#
:	)nn& 433 i((Jg,,Z%Xi^^I  ,,,,#-$ '2244a88.y))1--.		''r*   c                    | j         dS |                     |          }t          |j                  |k    s!J dt          |j                  |fz              t	                      }|j        D ]K}|                    d          }| j                             ||i |d            |                    |           L|                                S )Nr*   zVlen(AATStateTable.PerGlyphLookups) is %d, but the actions inside the table refer to %dr   r  )	r  r   rr   r  r   r  r   r  r  )rh   r  ry   r  r   r  r  s          r(   r  z!STXHeader._compilePerGlyphLookups  s    	 
#))%00*	U"	#	#z	1	1	12	,- 
2	1	1 ??&% & &f%%%33<\4/ / /	%%%%					r*   c                     t          |d          sd S t                      }|j        D ]}|                    |           |                                S )Nr  )r   r   r  r  r  )rh   r  ry   r   	components        r(   r	  zSTXHeader._compileLigComponents+  s]    		(	( 
$??&& ! !i	i    					r*   c                     t          |d          sd S t                      }|j        D ]*}|                    |                    |                     +|                                S )Nr  )r   r   r  r  rc  r  )rh   r  ry   r   	glyphNames        r(   r
  zSTXHeader._compileLigatures3  sh    		$	$ 
$??&? 2 2i	dooi001111					r*   c                 >   |                     ||           |                                 |                    d|j        z             |                                 t	          |j                                                  D ]1\  }}|                    d||           |                                 2t          |j	                  D ]\  }}	|                     d|           |                                 t	          |	j
                                                  D ] \  }
}|                    ||d|
id           !|                    d           |                                 t          |j                  D ]\  }}|                     d	|           |                                 t	          |                                          D ]1\  }}|                    d
||           |                                 2|                    d	           |                                 t          |d          r|                     d           |                                 t          t          |d                    D ]1\  }}|                    d||           |                                 2|                    d           |                                 |                     |||||           |                    |           |                                 d S )NzGlyphClassCount=%s
GlyphClassr?  r   State)indexonGlyphClass
Transition)ry   r   rS   r  r  r  LigComponent)r,  r   )r  r   r@  r  rA  r  r  r   r   r  r  r  r  r  r   r  _xmlWriteLigatures)rh   r   ry   r   rS   r   r  klassr  r  r  transri   r  r?  r@  s                   r(   r   zSTXHeader.xmlWrite;  sU   T5!!!(%*??@@@+113344  ha|1E:::$U\22  j%gZ000"5#4#:#:#<#<== # #z5	KK	%z2!  # # # # GU233  ia&a000FLLNN++  zuc!  # # #$%%%UO$$ o&&&75/::;;  vq#a!  # # #O$$$)T5$>>>4r*   c                 l   t          |d          sd S |                    d           |                                 t          t	          |d                    D ]1\  }}|                    d||           |                                 2|                    d           |                                 d S )Nr  Ligature)r,  r?  )r   r  r   r   r  r   r  )rh   r   ry   r   rS   r   ri   r  s           r(   r0  zSTXHeader._xmlWriteLigaturesb  s    		$	$ 
	6[!!!{3344  daz!444;r*   c                    t                      }t          t          |          D ]\  }}}|dk    r(|d         }|d         }	t          |	          |j        |<   4|dk    r2|                     |||          }
|j                            |
           l|dk    r7| j        	                    |||          }|j
                            |           |dk    r|                     |||          |_        |dk    r|                     |||          |_        t          |j                                                  dz   |_        |S )	Nr)  r?  r   r+  r  r  r  r   )r   rB  r  r   r  _xmlReadStater  rM   r  r   r  _xmlReadLigComponentsr  _xmlReadLigaturesr  r  rI   r  )rh   r   r   ry   r  r  r  r  r?  r   r  r  s               r(   r   zSTXHeader.xmlReadm  sj   
//%'-gw'?'? " "#gxWEWE (Eu7xT::E	L### ((z4! !F	  ((((?""	
D" " 
 	;	
D" " 
O e07799::Q>%	,r*   c                     t                      }t          t          |          D ]W\  }}}|dk    rKt          |d                   }|                                 }	|	                    ||||           |	|j        |<   X|S )Nr.  r-  )r   rB  r  r   rG   r  r  )
rh   r   r   ry   r  r  r  r  r  r  s
             r(   r6  zSTXHeader._xmlReadState  s    
**%'-gw'?'? / /#gx(>233J""Jw!4) ) )$.Ej!	,r*   c                     g }t          t          |          D ]4\  }}}|dk    r(|                    t          |d                              5|S )Nr/  r   )rB  r  rM   r   )rh   r   r   ry   ligComponentsr  r  _eltContents           r(   r7  zSTXHeader._xmlReadLigComponents  sa    -(.w(@(@ " "$gxhw  " " "	r*   c                     g }t          t          |          D ]'\  }}}|dk    r|                    |d                    (|S )Nr4  r?  )rB  r  rM   )rh   r   r   ry   ligsr  r  r<  s           r(   r8  zSTXHeader._xmlReadLigatures  sO    	$(.w(@(@ # #$gxKK!"""	+r*   r$   )rK   r_   r`   r   rx   r  r  r   r  r   r  r  r	  r
  r   r0  r   r6  r7  r8  r^   r*   r(   r  r  d  s         / / /b  > > >  &  5# 5# 5# 5#n( ( (4       % % %N	 	 	  2	 	 	      r*   r  c                   (    e Zd Zd ZddZd Zd ZdS )CIDGlyphMapc                     |                                 }i }t          |                    |                    D ]#\  }}|dk    r|                    |          ||<   $|S Nrj  )r  r   r  rV  )rh   rt   ry   r   numCIDsr  cidrg  s           r(   rx   zCIDGlyphMap.read  si    '& 6 6w ? ?@@ - -lc7##G,,F3K	-r*   Nc                    fd|                                 D             }|rt          |          dz   nd}|                    |           t          |          D ]+}|                    |                    |d                     ,d S )Nc                 B    i | ]\  }}|                     |          S r^   rb  )rn   rD  r?  ry   s      r(   r}  z%CIDGlyphMap.write.<locals>.<dictcomp>  s;     , , ,sE && , , ,r*   r   r   rj  r  r  r  rp   rH   )	rh   r   ry   r   r   r   r  r   rD  s	     `      r(   r   zCIDGlyphMap.write  s    , , , ,"[[]], , ,%!
(#e**q..q%U5\\ . .c	eiiV,,----. .r*   c                     i }t          t          |          D ]<\  }}}|dk    r0|d                                         |t          |d                   <   =|S )NCIDr?  rD  )rB  r  stripr   rh   r   r   ry   r  eNameeAttrs	_eContents           r(   r   zCIDGlyphMap.xmlRead  s_    &"('":":  eVYunnG_ 8F5M""#	-r*   c                 b   |                     ||           |                                 t          |                                          D ]9\  }}|2|dk    r,|                    d||           |                                 :|                    |           |                                 d S )Nrj  rI  )rD  r?  r  r   rA  r  r   r  )rh   r   ry   r   rS   r   rD  r?  s           r(   r   zCIDGlyphMap.xmlWrite  s    T5!!!5;;==))  jc5EVOO
5  " " "4r*   r$   r  r^   r*   r(   r@  r@    sU          . . . .  	 	 	 	 	r*   r@  c                   (    e Zd Zd ZddZd Zd ZdS )GlyphCIDMapc                    |                                 }|                                }|                    |          }|t          |          k    r,t                              d|t          |          fz             i }t          t          t          |          t          |                              D ]}||         }	|	dk    r|	|||         <   |S )NzOGlyphCIDMap has %d elements, but the font has only %d glyphs; ignoring the restrj  )rW  r  r  rr   rp  rq  rp   min)
rh   rt   ry   r   rS  r   cidsr  rg  rD  s
             r(   rx   zGlyphCIDMap.read  s    !!##*




%				&	&$
S__;; # J() * * * &s3t99c*oo6677 & &g	g3	Vmm"%F:g	-r*   Nc                    fd|                                 D             }|rt          |          dz   nd}|                    |           t          |          D ]+}|                    |                    |d                     ,d S )Nc                 R    i | ]#\  }}||dk                         |          |$S rB  rb  )rn   r  rD  ry   s      r(   r}  z%GlyphCIDMap.write.<locals>.<dictcomp>  s@     1 1 1q#o#-- ??1s"/--r*   r   r   rj  rG  )	rh   r   ry   r   r   r   r  r   rg  s	     `      r(   r   zGlyphCIDMap.write  s    1 1 1 11 1 1% "
(#e**q..q%Uu 2 2g	eii0011112 2r*   c                     i }t          t          |          D ]*\  }}}|dk    rt          |d                   ||d         <   +|S )NrI  r   r?  )rB  r  r   rK  s           r(   r   zGlyphCIDMap.xmlRead  sS    &"('":":  eVYunnfWo 6'?	-r*   c                 b   |                     ||           |                                 t          |                                          D ]9\  }}|2|dk    r,|                    d||           |                                 :|                    |           |                                 d S )Nrj  rI  r*  rP  )rh   r   ry   r   rS   r   r?  rD  s           r(   r   zGlyphCIDMap.xmlWrite  s    T5!!!5;;==))  jeS	o#--
%s  $ $ $4r*   r$   r  r^   r*   r(   rR  rR    sU           2 2 2 2  	 	 	 	 	r*   rR  c                   (    e Zd Zd ZddZd Zd ZdS )
DeltaValuec                 X   |d         }|d         }|d         }|dv s
J d            ||z
  dz   }d|z  }d|z  }	d|z  dz
  }
d|dz
  z  }g }d\  }}t          |          D ]J}|dk    r|                                d	}}||z
  }||z	  |
z  }||z  r||	z
  }|                    |           K|S )
N	StartSizeEndSizeDeltaFormatr   r  r4  illegal DeltaFormatr   )r   r   r   r  )rp   r  rM   )rh   rt   ry   r   r]  r^  r_  nItemsnBitsminusOffsetmasksignMaskr[  tmpshiftri   r   s                    r(   rx   zDeltaValue.read  s   $)i '-(+			!	!	!#8	!	!	!Y"&
{
%U
+
u*	$519(**#u==  aqjj""$$bC5=55LD 5h  KEU	r*   Nc                 X   |d         }|d         }|d         }|}	|dv s
J d            ||z
  dz   }
d|z  }t          |	          |
k    sJ d|z  dz
  }d\  }}|	D ]2}||z
  }|||z  |z  z  }|dk    r|                    |           d\  }}3|d	k    r|                    |           d S d S )
Nr]  r^  r_  r`  ra  r   )r   r  r   r  )rr   r  )rh   r   ry   r   r   r   r]  r^  r_  r[  rb  rc  re  rg  rh  s                  r(   r   zDeltaValue.write  s   $)i '-(+*			!	!	!#8	!	!	!Y"&
{
%	ZF	"	"	"	"
u*	$*#u  e5=5	%'	(3qjj
sJC
b[[	c [r*   c                 f    |                     ||d|fgz              |                                 d S r   r   r   r   s         r(   r   zDeltaValue.xmlWrite"  =    dEgu%5$66777r*   c                 ,    t          |d                   S r   r   r   s       r(   r   zDeltaValue.xmlRead&      	%.	!	!!r*   r$   rK   r_   r`   rx   r   r   r   r^   r*   r(   r[  r[    sU          .   *  " " " " "r*   r[  c                       e Zd Zd ZddZdS )VarIdxMapValuec                    	
 |d         }|d         }d|dz  z   }d|z  dz
  	d	z
  
d|z
  d|dz  dz	  z   }|j         |j        |j        |j        d	|         }	
fd
 ||          D             S )NEntryFormatr   r   r  l    r  0   r   r   r  r4  r   c                 ,    g | ]}|z  z  |z  z  S r^   r^   )rn   raw	innerMask	outerMask
outerShifts     r(   ro   z'VarIdxMapValue.read.<locals>.<listcomp>=  s;     
! 
! 
!
 9_+i@ 
! 
! 
!r*   )r-  r  readUInt24Arrayr   )rh   rt   ry   r   fmtrb  	innerBits	entrySizer   ry  rz  r{  s            @@@r(   rx   zVarIdxMapValue.read,  s    - #^$&3< ))|q )9$)I~*C&LQ&')	 
 )
! 
! 
! 
! 
! 
!i
! 
! 
! !r*   Nc                     |d         }|}|d                              t          |                     d|dz  z   }d|z  dz
  d|z
  d|dz  dz	  z   }	|j        |j        |j        |j        d|	         }
 |
fd	|D                        d S )
Nrt  r   r   r  r  ru  r   rv  c                 ,    g | ]}|d z  z	  |z  z  S )l      r^   )rn   idxry  r{  s     r(   ro   z(VarIdxMapValue.write.<locals>.<listcomp>Q  s<        z!j0S9_E   r*   )setValuerr   r1  r  writeUInt24Arrayr   )rh   r   ry   r   r   r   r}  r  r~  r  r   ry  r{  s              @@r(   r   zVarIdxMapValue.write@  s    - #'!!#g,,///3< ))|q )I~*C&LQ&')	 
 * *            r*   r$   r  r^   r*   r(   rr  rr  *  s7        ! ! !(     r*   rr  c                   (    e Zd Zd ZddZd Zd ZdS )VarDataValuec                 j   g }|d         }|d         }t          |dz            }|dz  }|r|j        |j        }	}n|j        |j        }	}t	          ||          t          ||          }}
|                     ||
                     |                     |	||
z
                       ||k    r||d = |S )Nr   	NumShorts     )boolr   r  r#  rT  r  r   )rh   rt   ry   r   rI   regionCount	wordCount	longWordsreadBigArrayreadSmallArrayn1n2s               r(   rx   zVarDataValue.readW  s    &*++$) 9v%&&)& ) N"("68M<<"("79M<{I&&K(C(Cb"--R  !!!--rBw''(((+kll	-r*   Nc                 t   |d         }|d         }t          |dz            }|dz  }|j        |j        f|j        |j        fd|         \  }	}
t	          ||          t          ||          }} |	|d |                     |
|||                    ||k    r|                    dg||z
  z             d S d S )Nr   r  r  r  r  r   )r  r  r'  r   rT  r  writeSmallArray)rh   r   ry   r   rI   r   r  r  r  writeBigArrayr  r  r  s                r(   r   zVarDataValue.writen  s    *++$) 9v%&&)& ) !6#8
9 6#9
:& & &"=/
 {I&&K(C(Cb"-ss/&K()))+	1#k!1233333 r*   c                 f    |                     ||d|fgz              |                                 d S r   rk  r   s         r(   r   zVarDataValue.xmlWrite  rl  r*   c                 ,    t          |d                   S r   rn  r   s       r(   r   zVarDataValue.xmlRead  ro  r*   r$   rp  r^   r*   r(   r  r  U  sU          .4 4 4 4&  " " " " "r*   r  c                       e Zd Zd ZdS )
LookupFlagc                    |                     ||d|fgz              g }|dz  r|                    d           |dz  r|                    d           |dz  r|                    d           |dz  r|                    d	           |d
z  r|                    d           |dz  r|                    d|dz	  z             |r(|                    d                    |                     |                                 d S )Nr   r   rightToLeftr  ignoreBaseGlyphsr   ignoreLigaturesr   ignoreMarksr  useMarkFilteringSeti   zmarkAttachmentType[%i]rx  )r   rM   r@  ry  r   rz  s          r(   r   zLookupFlag.xmlWrite  s   dEgu%5$66777
%
T\.5<<...
T\35<< 2333
T\25<< 1222
T\.5<<...
T\65<< 5666
V^JU\\":eqj"IJJJ
 &SXXe__%%%r*   NrA  r^   r*   r(   r  r    s#            r*   r  c                 R    t          | t                    ot          | dd           d uS )N_fields)r4  r&   r  )xs    r(   _issubclass_namedtupler    s-    Q .aD!!-r*   c                   8    e Zd ZeZeZddZd ZddZd Z	d Z
dS )_NamedTupleConverterNc                    t          d | j        D                       sJ t          | j                  sJ t	          | j                              t          | j        j                  t          | j                  k    sJ |J t                              | |||           d t          | j        j        | j                  D             | _
        d | j
        D             | _        t          d | j
        D                       | _        d S )Nc              3   @   K   | ]}t          |t                    V  d S r$   )r4  r   )rn   r1  s     r(   r   z0_NamedTupleConverter.__init__.<locals>.<genexpr>  s,      OOZ{++OOOOOOr*   c                 0    g | ]\  }} ||d d           S )Nr3  r^   )rn   rS   r1  s      r(   ro   z1_NamedTupleConverter.__init__.<locals>.<listcomp>  s=       tU 	5d4T***  r*   c                     i | ]
}|j         |S r^   r  )rn   rY   s     r(   r}  z1_NamedTupleConverter.__init__.<locals>.<dictcomp>  s    GGGt49dGGGr*   c              3   $   K   | ]}|j         V  d S r$   )r   )rn   cs     r(   r   z0_NamedTupleConverter.__init__.<locals>.<genexpr>  s$      >>>>>>>>r*   )allconverterClassesr  
tupleClassr  rr   r  r   r   ziprP   rQ   sumr   r   s        r(   r   z_NamedTupleConverter.__init__  s   	OO9NOOO	O	OOOO		0	0GG$t2G2GGGG	T_$	%	%T-B)C)C	C	C	C	C				tVS111 $/143HII  $/ HGtGGG$>>do>>>>>$///r*   c                 L    fd| j         D             } | j        di |S )Nc                 J    i | ]}|j         |                               S r^   )rS   rx   )rn   rY   ry   rt   r   s     r(   r}  z-_NamedTupleConverter.read.<locals>.<dictcomp>  s=        9diii00  r*   r^   )rP   r  )rh   rt   ry   r   kwargss    ``` r(   rx   z_NamedTupleConverter.read  sS           & 
	"	"6	"	""r*   c                 x    | j         D ]1}t          ||j                  }|                    ||||d            2d S )Nr  )rP   r  rS   r   )rh   r   ry   r   r   r   rY   r  s           r(   r   z_NamedTupleConverter.write  sM    o < <dudi  1::fdIqd:;;;;< <r*   c                 (   |J |j         j        pd}t          | j                  t          |          k    sJ i t	                      }t          t          | j                  t          |          |          D ]A\  }}	t          ||j                  }
|	|u s|
|	k    r|	                    |
          |j        <   B|g }|
                    fd| j        D                        |                    ||           |                                 d S )Nr^   )	fillvaluec              3   R   K   | ]!}|j         v |j         |j                  fV  "d S r$   r  )rn   rY   rI   s     r(   r   z0_NamedTupleConverter.xmlWrite.<locals>.<genexpr>  sJ        
i6 	Ivdi ! r*   )__new____defaults__rr   rP   objectr!   reversedr  rS   r   r   r   r   )rh   r   ry   r   rS   r   defaultsrequiredrY   defaultr  rI   s              @r(   r   z_NamedTupleConverter.xmlWrite  sA   				]'-2(	T_		X	.	.	.	.&XX("DOH   ) )mdG
 udi  1Q'\\a((F49
]5,,         
 dE"""r*   c                 l    | j         fd|                                D             } | j        di |S )Nc                 N    i | ]!\  }}||                              |          "S r^   r   )rn   rz   r  rP   s      r(   r}  z0_NamedTupleConverter.xmlRead.<locals>.<dictcomp>  sA       q! jmq!!  r*   r^   )rQ   r  r  )rh   r   r   ry   r  rP   s        @r(   r   z_NamedTupleConverter.xmlRead  sU    $*   {{}}  & 
	"	"6	"	""r*   r$   )rK   r_   r`   r~   r  r  r   rx   r   r   r   r^   r*   r(   r  r    st        "? ? ? ?# # #< < < <  0# # # # #r*   r  c                       e Zd ZeZeegZdS )VarFixedN)rK   r_   r`   r   r  r  r   r  r^   r*   r(   r  r    s        ENr*   r  c                       e Zd ZeZeegZdS )
VarF2Dot14N)rK   r_   r`   r   r  r  r   r  r^   r*   r(   r  r    s         e$r*   r  c                       e Zd ZeZeegZdS )VarInt16N)rK   r_   r`   r   r  r  r   r  r^   r*   r(   r  r    s        ENr*   r  c                       e Zd ZeZeegZdS )	VarUInt16N)rK   r_   r`   r   r  r  r   r  r^   r*   r(   r  r    s        UOr*   r  c                   N     e Zd ZeZ fdZed             Zed             Z xZ	S )
_UInt8Enumc                 p    |                      t                                          |||                    S r$   )	enumClassr  rx   )rh   rt   ry   r   r  s       r(   rx   z_UInt8Enum.read  s)    	VT9==	>	>>r*   c                 P    t          | j        |                                          S r$   )r  r  upperrZ   r   s     r(   r   z_UInt8Enum.fromString  s    		.	..r*   c                 Z    |                      |          j                                        S r$   )r  rS   lowerr  s     r(   r   z_UInt8Enum.toString  s#    	u			"	(	(	*	**r*   )
rK   r_   r`   r~   r  rx   classmethodr   r   r  r  s   @r(   r  r    so        ? ? ? ? ?/ / +/+ + ++ + + + +r*   r  c                       e Zd ZeZdS )r   N)rK   r_   r`   _ExtendModer  r^   r*   r(   r   r     s        r*   r   c                       e Zd ZeZdS )r    N)rK   r_   r`   _CompositeModer  r^   r*   r(   r    r      s        r*   r    int8int16r1   r-   uint24r2   char64r  OffsetLOffsetOffset24r:   r;   r<   r   c                 .    t          t          |           S N)rG   )r"   r0  Cs    r(   r)   r)   1      	a888 r*   c                 .    t          t          |           S r  )r"   r  r  s    r(   r)   r)   2  s    g.ERS&T&T&T r*   c                 .    t          t          |           S r  )r"   r  r  s    r(   r)   r)   3  r  r*   c                 .    t          t          |           S r  )r"   rJ   r  s    r(   r)   r)   4  s    wu333 r*   c                 .    t          t          |           S r  )r"   r  r  s    r(   r)   r)   5  s    1555 r*   c                 .    t          t          |           S r  )r"   r   r  s    r(   r)   r)   6  s    ''a888 r*   )
r0  r  r  OffsetTo	LOffsetToLOffset24Tor  r  r  r  )tfontTools.misc.py23r   r   r   fontTools.misc.fixedToolsr   r  r   r  r   r  r	   r  r
   r  r   r  fontTools.misc.textToolsr   r   fontTools.ttLibr   r.  r   r   r   r   r   otTablesr   r   r   r   r   r   r   r   r   r   r   r  r    r  	itertoolsr!   	functoolsr"   r  logging	getLoggerrK   rp  r  r[   r&   r]   collectionsrb   ImportErrorrd   r  r   r   r   r   r   r  r  r  r  r)  r3  r=  r@   rA   rB   rH  rN  ri  rl  rt  r}  r  r  r  r  r  rE   rC   rJ   r  r   r5   r3   r4   r6   r,   r&  r0  r  r  r  r@  rR  r[  rr  r  r  r  r  r  r  r  r  r  rD   r^   r*   r(   <module>r     s   9 9 9 9 9 9 9 9 9 9                3 2 2 2 2 2 2 2 * * * * * *G G G G G G G G G G G G G G8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
 " ! ! ! ! !         g!!
(
(=% =% =%@    5   !!!!!!!          >N" N" N" N" N"F N" N" N"b) ) ) ) )- ) ) )    {   
	  	  	  	  	 8 	  	  	 	! 	! 	! 	! 	!H 	! 	! 	!    e   
	! 	! 	! 	! 	!H 	! 	! 	!	" 	" 	" 	" 	"X 	" 	" 	"	  	  	  	  	 8 	  	  	 	! 	! 	! 	! 	!H 	! 	! 	!    X       (       K       [&       K       +   ; ; ; ; ;k ; ; ;4       
    V                 
( ( ( ( ( ( ( (    J       j       k   *    [   >E. E. E. E. E.] E. E. E.P8 8 8 8 8v 8 8 88 "  "  "  "  "F  "  "  "D    U       e   G G G G G G G GF F F F Fu F F FA A A A A&( A A AF F F F FE F F F2 2 2 2 2( 2 2 2    +   &\ \ \ \ \ \ \ \L87 87 87 87 87m 87 87 87v@8 @8 @8 @8 @8M @8 @8 @8Jz z z z z z z zz	" " " " "- " " "J+ + + + +- + + +\3" 3" 3" 3" 3" 3" 3" 3"l( ( ( ( (] ( ( (V1" 1" 1" 1" 1"= 1" 1" 1"f         @# @# @# @# @#= @# @# @#F# # # # ## # # #
% % % % %% % % %
# # # # ## # # #
$ $ $ $ $$ $ $ $

+ 
+ 
+ 
+ 
+ 
+ 
+ 
+           J   4$4 	%4 	%	4
 
64 
64 
54 
64 G4 G4 4 G4 i4 
64 z4  	%!4" G#4$ 
6%4 4& 
5'4( F)4* W+4, -4. z/40 >142 344 z546 z748 -94: i;4@ A4B C4D E4F !G4H I4J &K4 4P 98TT88335588 g4 4 4   s   B B! B!