
    PhK+                         d dl mZ d dlmZmZ d dlmZmZ	 ddl
mZ d dlZd dlZd dlZd dlZ ej                   e      Z G d dej                        Z G d	 d
e      Z G d de      Zd eiZy)    )getSearchRange)safeEvalreadHex)fixedToFloatfloatToFixed   )DefaultTableNc                   .    e Zd ZdZd Zd Zd Zd Zd Zy)table__k_e_r_naY  Kerning table

    The ``kern`` table contains values that contextually adjust the inter-glyph
    spacing for the glyphs in a ``glyf`` table.

    Note that similar contextual spacing adjustments can also be stored
    in the "kern" feature of a ``GPOS`` table.

    See also https://learn.microsoft.com/en-us/typography/opentype/spec/kern
    c                 L    | j                   D ]  }|j                  |k(  s|c S  y N)
kernTablesformat)selfr   subtables      jC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\fontTools/ttLib/tables/_k_e_r_n.pygetkernztable__k_e_r_n.getkern   s&    H&( (     c                    t        j                  d|d d       \  }}d}t        |      dk\  r:|dk(  r5t        j                  d|d d       \  }}t        |d      | _        |dd  }d}n|| _        |dd  }g | _        t        |      D ]  }| j                  d	k(  rt        j                  d
|d d       \  }}}	nlt        j                  d|d d       \  }
}}	}|dk(  rI|	dk(  rDt        j                  d|dd       \  }|dz  dz   }||k7  rt        j                  d||fz         |}|	t        vrt        |	      }nt        |	   |      }|j                  |d | |       | j
                  j                  |       ||d  } y )N>HH   F   r   >LL   T      ?z>LBB   >HHBBr   z>H   zA'kern' subtable longer than defined: %d bytes instead of %d bytes)structunpacklenfi2flversionr   rangelogwarningkern_classesKernTable_format_unkown	decompileappend)r   datattFontr#   nTablesappleilengthcoveragesubtableFormat_nPairscalculated_lengthr   s                 r   r)   ztable__k_e_r_n.decompile    s   !==Ra9INA%}}UD!H=GW "-DL8DE"DL8DwA||s"39==bq3R0. 7=mmGTRTSTX6V36>8a<Na$7 !'dD1I >IV)/!r(9%!22;>OQW=XY /F\12>B'7>tGV}f5OO""8,=D9  r   c                 h   t        | d      rt        | j                        }nd}| j                  dk(  r,t	        j
                  dt        | j                  d      |      }n!t	        j
                  d| j                  |      }t        | d      r%| j                  D ]  }||j                  |      z   } |S )Nr   r   r   r   r   r   )hasattrr!   r   r#   r   packfl2ficompile)r   r,   r-   r+   r   s        r   r:   ztable__k_e_r_n.compileK   s    4&$//*GG<<3;;ueDLL"&=wGD;;udllG<D4& OOh..v66 ,r   c                     |j                  d| j                         |j                          | j                  D ]  }|j	                  ||        y )Nr#   )value)	simpletagr#   newliner   toXML)r   writerr,   r   s       r   r?   ztable__k_e_r_n.toXMLZ   s?    $,,7HNN66* (r   c                 D   |dk(  rt        |d         | _        y |dk7  ry t        | d      sg | _        t        |d         }|t        vrt        |      }n| j                  dk(  }t	        |   |      }| j                  j                  |       |j                  ||||       y )Nr#   r<   kernsubtabler   r   r   )r   r#   r7   r   r'   r(   r*   fromXML)r   nameattrscontentr,   r   r   r.   s           r   rC   ztable__k_e_r_n.fromXML`   s    9#E'N3DL>!t\* DO%/*%.v6HLLC'E#F+E2Hx(ugv6r   N)	__name__
__module____qualname____doc__r   r)   r:   r?   rC    r   r   r   r      s!    	)!V+7r   r   c                   F    e Zd ZdxZZddZd Zd Zd Zd Z	d Z
d Zd	 Zy
)KernTable_format_0r   c                     || _         y r   )r.   )r   r.   s     r   __init__zKernTable_format_0.__init__v   s	    
r   c                    | j                   s<t        j                  d|d d       \  }}}}|dk7  rddlm}  |d|z        d }|dd  }n#t        j                  d|d d       \  }}}}|dd  }| j
                  |k(  sJ d       || _        || _        i x| _        }	t        j                  d	|d d       \  }
}}}|dd  }t        j                  d
|d d|
z         }t        j                  dk7  r|j                          t        |      }|j                         }t        |
      D ];  }t!        |      t!        |      t!        |      }}}|dk\  r|dz  }	 ||	||   ||   f<   = t'        |      d|
z  dz   kD  r&t(        j+                  dt'        |      d|
z  z
         y y # t"        $ r( ||	|j%                  |      |j%                  |      f<   Y w xY w)Nr   r   r   )
TTLibErrorz%unsupported kern subtable version: %d>LBBHr   unsupported format>HHHHHbigi      r   z(excess data in 'kern' subtable: %d bytes)r.   r   r    fontTools.ttLibrQ   r   r1   
tupleIndex	kernTablearraysys	byteorderbyteswapitergetGlyphOrderr$   next
IndexErrorgetGlyphNamer!   r%   r&   )r   r+   r,   r#   r0   r2   r1   rQ   rY   rZ   r4   searchRangeentrySelector
rangeShiftdatasit
glyphOrderkleftrightr<   s                        r   r)   zKernTable_format_0.decompiley   s   zz8>gtTVUVx8X5GV^X!|6 !H7!RSSJ8D;A==bq<8FHnj 8D{{n,B.BB, $%''9?T"1X:
6]J ABxClF
!34==E!NN%[))+
vA!%b48T"X%D~CH	:d+Z->?@  t9q6zA~%KK:CIF
<R &    6..t4f6I6I%6PQRs   F.G
Gc                    t        t        | j                        d      }t        |d      \  }}}|dz  }t        |d      }t        |d      }t	        j
                  d||||      }	 |j                         t        fd| j                  j                         D              }|D ]!  \  }}	}
|t	        j
                  d||	|
      z   }# | j                  sad}t        |      dz   }|dk\  rt        j                  d	       |dz  }t	        j
                  d
||| j                  | j                        }||z   S | j                   t        j                  d       d| _        t        |      dz   }t	        j
                  d|| j                  | j                  | j                         }||z   S # t        $ r< |j                  t        fd| j                  j                         D              }Y Iw xY w)Ni  r   rT   c              3   @   K   | ]  \  \  }}}|   |   |f  y wr   rK   ).0rk   rl   r<   reverseOrders       r   	<genexpr>z-KernTable_format_0.compile.<locals>.<genexpr>   s3      .D*]dEE d#\%%8%@.Ds   c              3   L   K   | ]  \  \  }}} |       |      |f  y wr   rK   )ro   rk   rl   r<   
getGlyphIDs       r   rq   z-KernTable_format_0.compile.<locals>.<genexpr>   s3      .D*]dEE D!:e#4e<.Ds   !$z>HHhr   rW   zI"kern" subtable overflow, truncating length value while preserving pairs.r   "'tupleIndex' is None; default to 0r   rR   )minr!   rZ   r   r   r8   getReverseGlyphMapsorteditemsKeyErrorrs   r.   r%   r&   r   r1   rY   )r   r,   r4   rd   re   rf   r+   rZ   rk   rl   r<   r#   r0   headerrs   rp   s                 @@r   r:   zKernTable_format_0.compile   s   S(&11?1J.]JvM62V,
{{7FK
S	!446L .2nn.B.B.D I #,D%&++fdE5AAD #, zzGY]F F & [['64;;VF } & @A"#Y]F[[T__F }A  	**J .2nn.B.B.D I	s   )<F* *AG/.G/c                    t        | j                  | j                        }| j                  r6| j                  t
        j                  d       d|d<   n| j                  |d<    |j                  d
i | |j                          t        | j                  j                               }|D ]3  \  \  }}}|j                  dd|fd|fd	|fg       |j                          5 |j                  d       |j                          y )N)r1   r   rt   r   rY   rB   pairlrv)rB   )dictr1   r   r.   rY   r%   r&   begintagr>   rw   rZ   rx   r=   endtag)r   r@   r,   rE   rx   rk   rl   r<   s           r   r?   zKernTable_format_0.toXML   s    dmmDKK@::&@A&'l#&*ool#0%0t~~++-.$) MT55VsDkC<#u%NONN %* 	n%r   c                    t        |d         | _        t        |d         }| j                  r5d|v rt        |d         | _        n$t        j                  d       d | _        nd | _        || j                  k(  sJ d       t        | d      si | _        |D ]<  }t        |t              s|\  }}}t        |d         | j                  |d   |d	   f<   > y )
Nr1   r   rY   z5Apple kern subtable is missing 'tupleIndex' attributerS   rZ   r   r}   r~   )r   r1   r.   rY   r%   r&   r   r7   rZ   
isinstancetuple)r   rD   rE   rF   r,   r2   elements          r   rC   zKernTable_format_0.fromXML   s     z!23!%/2::u$"*5+>"? ST"&"DO,B.BB,t[)DNGgu-#* D%7?c
7KDNNE#Jc
34	 r   c                      | j                   |   S r   rZ   r   r|   s     r   __getitem__zKernTable_format_0.__getitem__   s    ~~d##r   c                 "    || j                   |<   y r   r   )r   r|   r<   s      r   __setitem__zKernTable_format_0.__setitem__  s    $tr   c                     | j                   |= y r   r   r   s     r   __delitem__zKernTable_format_0.__delitem__  s    NN4 r   N)F)rG   rH   rI   r#   r   rO   r)   r:   r?   rC   r   r   r   rK   r   r   rM   rM   r   s7    Gf.`/b"L*$%!r   rM   c                   *    e Zd Zd Zd Zd Zd Zd Zy)r(   c                     || _         y r   r   )r   r   s     r   rO   z KernTable_format_unkown.__init__  s	    r   c                     || _         y r   r+   )r   r+   r,   s      r   r)   z!KernTable_format_unkown.decompile  s	    	r   c                     | j                   S r   r   )r   r,   s     r   r:   zKernTable_format_unkown.compile  s    yyr   c                    |j                  d| j                         |j                          |j                  d       |j                          |j	                  | j
                         |j                  d       |j                          y )NrB   r   zunknown 'kern' subtable format)r   r   r>   commentdumphexr+   r   )r   r@   r,   s      r   r?   zKernTable_format_unkown.toXML  s]    t{{;78tyy!n%r   c                 :    | j                  t        |      |       y r   )r)   r   )r   rD   rE   rF   r,   s        r   rC   zKernTable_format_unkown.fromXML  s    ww'0r   N)rG   rH   rI   rO   r)   r:   r?   rC   rK   r   r   r(   r(   
  s    1r   r(   )rX   r   fontTools.misc.textToolsr   r   fontTools.misc.fixedToolsr   r"   r   r9    r	   r   r\   r[   logging	getLoggerrG   r%   r   objectrM   r(   r'   rK   r   r   <module>r      sn    * 6 R   
   g!a7\.. a7HU! U!p1f 1. %&r   