
    Ph-                        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ZdgZd Zd Zd Zd Zy)table__t_r_a_ka*  The AAT ``trak`` table can store per-size adjustments to each glyph's
    sidebearings to make when tracking is enabled, which applications can
    use to provide more visually balanced line spacing.

    See also https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6trak.html
    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              jC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\fontTools/ttLib/tables/_t_r_a_k.pyr   ztable__t_r_a_k.compileF   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.decompile]   sf    )40H1H+I4P*I!IT9x#78F{##D&1D)f,i8 +r0   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.toXMLf   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.fromXMLt   s    9#E'N3DLX"5>2DK..!ID$	*"!'51(/%eX!!$x@	 # /r0   N)	__name__
__module____qualname____doc__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'   rW   r[   rX   trackDataHeaderentryDataListperSizeDataListrc   entrysizer6   svsizeDataListr-   s                  r/   r   zTrackData.compile   sc   d)

U 	(+H7+RRR!,,6fM

 (611"4::<0LE5??...EK!ELgll+CUKLLM%ekkm4eFKK0Eu$M#NN  50699F 1 EK5M
DQbFKK)5R=9M 	 
 -<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 subtablerZ   z3not enough data to decompile TrackTableEntry recordz2not enough data to decompile per-size track values)r\   r   r
   r   r2   r^   rX   rY   ranger_   re   rh   r    fi2flrW   TrackTableEntryr]   rd   r'   rg   rf   rc   )r$   r-   r'   rj   rX   rY   	sizeTableisizeValueData	sizeValuerm   	entryDataperSizeOffsetjrn   perSizeValueDataperSizeValues                    r/   r3   zTrackData.decompile   s   v1G(GH#99LMM(/4@((..	vA /4J"JM =!$:: !WXX!==):MJLYU9b1255O  t||$A#%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) %r0   c                 (   t        |       }t        | j                               }|j                  d||fz         |j                          t	        | j                               D ],  \  }}|j                  J ||_        |j                  ||       . y )NznTracks=%d, nSizes=%d)	r   r[   commentr9   r`   ra   rb   rc   r;   )r$   r=   r%   rW   rX   rc   rm   s          r/   r;   zTrackData.toXML   sz    d)TZZ\".'61BBC"4::<0LE5??...EKKK' 1r0   c                 j    |dk7  ry t               }|j                  ||||       || |j                  <   y )N
trackEntry)rt   rD   rc   )r$   r   rE   rF   r%   rm   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popr[   r
   r`   )r$   r   r[   rc   
entrySizess        r/   r[   zTrackData.sizes   s    ;dkkm$VZZ]#))+Ee**,J
" "(-
1CE   r0   c                      | j                   |   S rQ   rS   r$   rc   s     r/   __getitem__zTrackData.__getitem__   s    yyr0   c                     | j                   |= y rQ   r   r   s     r/   __delitem__zTrackData.__delitem__   s    IIer0   c                 "    || j                   |<   y rQ   r   )r$   rc   rm   s      r/   __setitem__zTrackData.__setitem__   s     		%r0   c                 ,    t        | j                        S rQ   r   rS   r$   s    r/   __len__zTrackData.__len__       499~r0   c                 ,    t        | j                        S rQ   iterrS   r   s    r/   __iter__zTrackData.__iter__      DIIr0   c                 6    | j                   j                         S rQ   rS   keysr   s    r/   r   zTrackData.keys      yy~~r0   c                 H    dj                  | r| j                        S d      S )NzTrackData({}) )r7   rS   r   s    r/   __repr__zTrackData.__repr__	  s!    %%4dii@@R@@r0   N)rI   rJ   rK   rU   r   r3   r;   rD   r[   r   r   r   r   r   r   r   r   rN   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)rt   Nc                 2    || _         t        |      | _        y rQ   )rb   rR   rS   )r$   valuesrb   s      r/   rU   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   rZ   rb   rc   )rn   r6   )getDebugNamerb   r:   fl2strrc   r9   r   r`   ra   r8   r<   )r$   r=   r%   r   rn   r}   s         r/   r;   zTrackTableEntry.toXML  s    f~**4>>:vdjj"-.dnn0MN	
 	NN4 NN"("6D,W6$+;<PNN #7 	l#r0   c                     t        |d   d      | _        t        |d         | _        |D ]?  }t	        |t
              s|\  }}}|dk7  r t        |d   d      }t        |d         | |<   A y )Nr6   rZ   rb   rc   rn   )str2flrc   r	   rb   rB   rC   )r$   r   rE   rF   r%   rG   _rn   s           r/   rD   zTrackTableEntry.fromXML"  ss    E'NB/
!%"45Ggu-$ND%w%-,D!%.1DJ r0   c                      | j                   |   S rQ   r   r$   rn   s     r/   r   zTrackTableEntry.__getitem__.  s    yyr0   c                     | j                   |= y rQ   r   r   s     r/   r   zTrackTableEntry.__delitem__1  s    IIdOr0   c                 "    || j                   |<   y rQ   r   )r$   rn   r6   s      r/   r   zTrackTableEntry.__setitem__4  s    		$r0   c                 ,    t        | j                        S rQ   r   r   s    r/   r   zTrackTableEntry.__len__7  r   r0   c                 ,    t        | j                        S rQ   r   r   s    r/   r   zTrackTableEntry.__iter__:  r   r0   c                 6    | j                   j                         S rQ   r   r   s    r/   r   zTrackTableEntry.keys=  r   r0   c                 N    dj                  | j                  | j                        S )Nz!TrackTableEntry({}, nameIndex={}))r7   rS   rb   r   s    r/   r   zTrackTableEntry.__repr__B  s    299$))T^^TTr0   c                     t        || j                        st        S | j                  |j                  k(  xr t	        |       t	        |      k(  S rQ   )rB   	__class__NotImplementedrb   rR   )r$   others     r/   __eq__zTrackTableEntry.__eq__E  s;    %0!!~~0NT$Z4;5NNr0   c                 >    | j                  |      }|t        u r|S | S rQ   )r   r   )r$   r   results      r/   __ne__zTrackTableEntry.__ne__J  s$    U#>1vA6zAr0   )rI   rJ   rK   rU   r;   rD   r   r   r   r   r   r   r[   r   r   r   rN   r0   r/   rt   rt     sM     D ! 
2   EUO
Br0   rt   )#fontTools.miscr   fontTools.misc.fixedToolsr   rs   r   ri   r   r   r   r   fontTools.misc.textToolsr   r	   fontTools.ttLibr
   r   r   re   collections.abcr   r#   calcsizer   r^   r\   rd   r]   rh   r_   rf   rg   r   r   rt   rN   r0   r/   <module>r      s    "  9 &   *  +'**+=>   *))*;<   !1 0 01I J 
  ():;   ,V__-BC DA\.. DANGA GAT?Bn ?Br0   