
    jke=+                        d dl mZ d dl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 d dlZd dlmZ d	Z ej,                  e      Zd
Z ej,                  e      ZdZ ej,                  e      ZdZ ej,                  e      ZdZ ej,                  e      Z G d dej"                        Z  G d de      Z! G d de      Z"y)    )sstruct)fixedToFloatfloatToFixedfloatToFixedToStrstrToFixedToFloat)	bytesjoinsafeEval)
TTLibError   )DefaultTableN)MutableMappingzf
	> # big endian
	version:     16.16F
	format:      H
	horizOffset: H
	vertOffset:  H
	reserved:    H
zM
	> # big endian
	nTracks:         H
	nSizes:          H
	sizeTableOffset: L
zM
	> # big endian
	track:      16.16F
	nameIndex:       H
	offset:          H
z>lz>hc                   *    e Zd ZdgZd Zd Zd Zd Zy)table__t_r_a_knamec                 ~   g }t         }dD ]  }t        | |dz   t                     }|dz   }|st        | |d       0|dz   dz  }d||z
  z  |}}t        | ||       |j	                  |      }	|t        |	      z  }|j                  ||	z           d| _        t        t        j                  t        |       g|z         }
|
S )NhorizvertDataOffsetr          )TRAK_HEADER_FORMAT_SIZEgetattr	TrackDatasetattrcompilelenappendreservedr   r   packTRAK_HEADER_FORMAT)selfttFontdataListoffset	direction	trackData
offsetNamealignedOffsetpaddingdata	tableDatas              A/usr/lib/python3/dist-packages/fontTools/ttLib/tables/_t_r_a_k.pyr   ztable__t_r_a_k.compile?   s    (* 	,Ii&&8)+FI"X-Jj!,#aZ2-M%)?@-VGD*f-$$V,Dc$iFOOGdN+	,  w||,>EFQR	    c                     t        j                  t        |d t         |        dD ]B  }t	               }t        | |dz         }|dk7  r|j                  ||       t        | |dz   |       D y )Nr   r   r   r   )r   unpackr#   r   r   r   	decompiler   )r$   r-   r%   r(   r)   r'   s         r/   r3   ztable__t_r_a_k.decompileV   sk    )40H1H+I4P* 	9I!IT9x#78F{##D&1D)f,i8	9r0   c                    |j                  d| j                         |j                          |j                  d| j                         |j                          dD ]p  }|dz   }|j	                  |       |j                          t        | |t                     }|j                  ||       |j                  |       |j                          r y )Nversion)valueformatr   r   )		simpletagr5   newliner7   begintagr   r   toXMLendtag)r$   writerr%   r(   dataNamer)   s         r/   r;   ztable__t_r_a_k.toXML_   s    $,,75* 	I 6)HOOH%NNh	<IOOFF+MM(#NN	r0   c                    |dk(  rt        |d         | _        y |dk(  rt        |d         | _        y |dv rJt               }t	        | ||       |D ]-  }t        |t              s|\  }}}|j                  ||||       / y y )Nr5   r6   r7   )	horizDatavertData)r	   r5   r7   r   r   
isinstancetuplefromXML)r$   r   attrscontentr%   r)   elementcontent_s           r/   rD   ztable__t_r_a_k.fromXMLm   s    9#E'N3DLX"5>2DK..!ID$	*" A!'51(/%eX!!$x@	A /r0   N)__name__
__module____qualname__dependenciesr   r3   r;   rD    r0   r/   r   r   <   s    8L.9Ar0   r   c                   b    e Zd Zi fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd ZeZd Zy)r   c                 $    t        |      | _        y N)dict_map)r$   initialdatas     r/   __init__zTrackData.__init__}   s    %	r0   c           
         t        |       }| j                         }t        |      }|t        t        |z  z   z  }t	        j
                  t        |||d      }g }g }|t        |z  z  }t        | j                               D ]  \  }}	|	j                  J ||	_        ||	_        |t	        j
                  t        |	      gz  }t        |	j                               D ]#  \  }
}|t        j
                  t        |      gz  }% |t         |z  z  } t        |      D cg c]&  }t        j
                  t"        t%        |d            ( }}t'        |g|z   |z   |z         }|S c c}w )N)nTracksnSizessizeTableOffset   )r   sizesTRACK_DATA_FORMAT_SIZETRACK_TABLE_ENTRY_FORMAT_SIZEr   r"   TRACK_DATA_FORMATSIZE_VALUE_FORMAT_SIZEsorteditems	nameIndextrackr'   TRACK_TABLE_ENTRY_FORMATstructPER_SIZE_VALUE_FORMATPER_SIZE_VALUE_FORMAT_SIZESIZE_VALUE_FORMATfl2fir   )r$   r'   rV   rZ   rW   trackDataHeaderentryDataListperSizeDataListrb   entrysizer6   svsizeDataListr-   s                  r/   r   zTrackData.compile   sm   d)

U 	(+H7+RRR!,,6fM

 (611"4::<0 	:LE5??...EK!ELgll+CUKLLM%ekkm4 OeFKK0Eu$M#NNO0699F	: EK5M
>@FKK)5R=9
 
 -<N
 
s   +Ec                    |||t         z    }t        |      t         k7  rt        d      t        j                  t
        ||        |t         z  }| j                  }| j                  }g }t        |      D ]k  }|||t        z    }t        |      t        k  rt        d      t        j                  t        |      \  }	|j                  t        |	d             |t        z  }m t        | j                        D ]  }t               }
|||t         z    }t        |      t         k  rt        d      t        j                  t"        ||
       |
j$                  }t        |      D ]Z  }||   }|||t&        z    }t        |      t&        k  rt        d      t        j                  t(        |      \  }||
|<   |t&        z  }\ |
| |
j*                  <   |t         z  } y )Nz-not enough data to decompile TrackData headerz4not enough data to decompile TrackData size subtablerY   z3not enough data to decompile TrackTableEntry recordz2not enough data to decompile per-size track values)r[   r   r
   r   r2   r]   rW   rX   ranger^   rd   rg   r    fi2flrV   TrackTableEntryr\   rc   r'   rf   re   rb   )r$   r-   r'   ri   rW   rX   	sizeTableisizeValueData	sizeValuerl   	entryDataperSizeOffsetjrm   perSizeValueDataperSizeValues                    r/   r3   zTrackData.decompile   s   v1G(GH#99LMM(/4@((..	v 	6A /4J"JM =!$:: !WXX!==):MJLYU9b1255O	6 t||$ 	4A#%EVf/L&LMI9~ == !VWWNN3YF!LLM6] < |#'!M4N$N$  '(+EE$L  #)--0EGW"X*d!;;< !&D33F)	4r0   c                 (   t        |       }t        | j                               }|j                  d||fz         |j                          t	        | j                               D ],  \  }}|j                  J ||_        |j                  ||       . y )NznTracks=%d, nSizes=%d)	r   rZ   commentr9   r_   r`   ra   rb   r;   )r$   r=   r%   rV   rW   rb   rl   s          r/   r;   zTrackData.toXML   s    d)TZZ\".'61BBC"4::<0 	(LE5??...EKKK'	(r0   c                 j    |dk7  ry t               }|j                  ||||       || |j                  <   y )N
trackEntry)rs   rD   rb   )r$   r   rE   rF   r%   rl   s         r/   rD   zTrackData.fromXML   s5    <!dE7F3!U[[r0   c           	      *   | s
t               S t        | j                               }| |j                  d         j	                         }|D ]=  }| |   j	                         }||k7  st        dt        |      dt        |             t        |      S )Nr   z2'trak' table entries must specify the same sizes: z != )	frozensetlisttrackspoprZ   r
   r_   )r$   r   rZ   rb   
entrySizess        r/   rZ   zTrackData.sizes   s    ;dkkm$VZZ]#))+ 	Ee**,J
" "(-
1CE 	 r0   c                      | j                   |   S rP   rR   r$   rb   s     r/   __getitem__zTrackData.__getitem__   s    yyr0   c                     | j                   |= y rP   r   r   s     r/   __delitem__zTrackData.__delitem__   s    IIer0   c                 "    || j                   |<   y rP   r   )r$   rb   rl   s      r/   __setitem__zTrackData.__setitem__   s     		%r0   c                 ,    t        | j                        S rP   r   rR   r$   s    r/   __len__zTrackData.__len__       499~r0   c                 ,    t        | j                        S rP   iterrR   r   s    r/   __iter__zTrackData.__iter__       DIIr0   c                 6    | j                   j                         S rP   rR   keysr   s    r/   r   zTrackData.keys       yy~~r0   c                 H    dj                  | r| j                        S d      S )NzTrackData({}) )r7   rR   r   s    r/   __repr__zTrackData.__repr__  s!    %%4dii@@R@@r0   N)rI   rJ   rK   rT   r   r3   r;   rD   rZ   r   r   r   r   r   r   r   r   rM   r0   r/   r   r   |   sP    #% &"H)4V("  !  FAr0   r   c                   ^    e Zd Zi dfdZd Zd Zd Zd Zd Zd Z	d	 Z
d
 ZeZd Zd Zd Zy)rs   Nc                 2    || _         t        |      | _        y rP   )ra   rQ   rR   )r$   valuesra   s      r/   rT   zTrackTableEntry.__init__  s    "L	r0   c                    |d   j                  | j                        }|j                  ddt        | j                  d      fd| j                  ff       |j                          |r!|j                  |       |j                          t        | j                               D ]3  \  }}|j                  dt        |d      |       |j                          5 |j                  d       |j                          y )Nr   r   r6   rY   ra   rb   )rm   r6   )getDebugNamera   r:   fl2strrb   r9   r~   r_   r`   r8   r<   )r$   r=   r%   r   rm   r|   s         r/   r;   zTrackTableEntry.toXML  s    f~**4>>:vdjj"-.dnn0MN	
 	NN4 NN"("6 	D,W6$+;<PNN	 	l#r0   c                     t        |d   d      | _        t        |d         | _        |D ]?  }t	        |t
              s|\  }}}|dk7  r t        |d   d      }t        |d         | |<   A y )Nr6   rY   ra   rb   rm   )str2flrb   r	   ra   rB   rC   )r$   r   rE   rF   r%   rG   _rm   s           r/   rD   zTrackTableEntry.fromXML  sx    E'NB/
!%"45 	2Ggu-$ND%w%-,D!%.1DJ	2r0   c                      | j                   |   S rP   r   r$   rm   s     r/   r   zTrackTableEntry.__getitem__'  s    yyr0   c                     | j                   |= y rP   r   r   s     r/   r   zTrackTableEntry.__delitem__*  s    IIdOr0   c                 "    || j                   |<   y rP   r   )r$   rm   r6   s      r/   r   zTrackTableEntry.__setitem__-  s    		$r0   c                 ,    t        | j                        S rP   r   r   s    r/   r   zTrackTableEntry.__len__0  r   r0   c                 ,    t        | j                        S rP   r   r   s    r/   r   zTrackTableEntry.__iter__3  r   r0   c                 6    | j                   j                         S rP   r   r   s    r/   r   zTrackTableEntry.keys6  r   r0   c                 N    dj                  | j                  | j                        S )Nz!TrackTableEntry({}, nameIndex={}))r7   rR   ra   r   s    r/   r   zTrackTableEntry.__repr__;  s    299$))T^^TTr0   c                     t        || j                        st        S | j                  |j                  k(  xr t	        |       t	        |      k(  S rP   )rB   	__class__NotImplementedra   rQ   )r$   others     r/   __eq__zTrackTableEntry.__eq__>  s;    %0!!~~0NT$Z4;5NNr0   c                 >    | j                  |      }|t        u r|S | S rP   )r   r   )r$   r   results      r/   __ne__zTrackTableEntry.__ne__C  s$    U#>1vA6zAr0   )rI   rJ   rK   rT   r;   rD   r   r   r   r   r   r   rZ   r   r   r   rM   r0   r/   rs   rs     sM     D ! 
2   EUO
Br0   rs   )#fontTools.miscr   fontTools.misc.fixedToolsr   rr   r   rh   r   r   r   r   fontTools.misc.textToolsr   r	   fontTools.ttLibr
   r   r   rd   collections.abcr   r#   calcsizer   r]   r[   rc   r\   rg   r^   re   rf   r   r   rs   rM   r0   r/   <module>r      s    "  9 &   *  +'**+=>   *))*;<   !1 0 01I J 
  ():;   ,V__-BC =A\.. =A@GA GAT?Bn ?Br0   