
    Ph:                         d dl mZ d dlmZ d dl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y)	    )otRound)ttLib)safeEval   )DefaultTableNc                   N    e 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y)table__h_m_t_xa  Horizontal Metrics table

    The ``hmtx`` table contains per-glyph metrics for the glyphs in a
    ``glyf``, ``CFF ``, or ``CFF2`` table, as needed for horizontal text
    layout.

    See also https://learn.microsoft.com/en-us/typography/opentype/spec/hmtx
    hheawidthlsbnumberOfHMetricsHhc                    |d   j                   }|j                  | j                        }| t        t	        || j
                              }n|}||kD  r2t        j                  d| j                  d| j
                  d       |}t        |      d|z  k  r"t        j                  d| j                  z        d| j                  |z  z   }t        j                  ||d d|z         }|d|z  d  }||z
  }t        j                  d|d d	|z         }	|d	|z  d  }t         j"                  d
k7  r|	j%                          |r"t        j                  d| j                  z         i | _        |j)                         }
t+        |      D ]P  }|
|   }||d	z  |d	z  d	z    \  }}|dkD  r"t        j                  d|| j,                  |       ||f| j&                  |<   R |d   }t+        |      D ]  }|
||z      }||	|   f| j&                  |<     y )NmaxpzThe .z exceeds the maxp.numGlyphs   znot enough '%s' table data>h   bigztoo much '%s' table datai  zVGlyph %r has a huge advance %s (%d); is it intentional or an (invalid) negative value?)	numGlyphsget	headerTagintgetattrnumberOfMetricsNamelogwarninglenr   
TTLibErrortableTaglongMetricFormatstructunpackarraysys	byteorderbyteswapmetricsgetGlyphOrderrangeadvanceName)selfdatattFontr   headerTablenumberOfMetrics
metricsFmtr*   numberOfSideBearingssideBearings
glyphOrderi	glyphNameadvanceWidthr   lastAdvances                   jC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\fontTools/ttLib/tables/_h_m_t_x.py	decompileztable__h_m_t_x.decompile   s   6N,,	jj0"!'+t7O7O"PQO'OY&KK>>4#;#;= (Ot9q?**""#?$--#OPP 400?BB
--
D1F13F,GHA')*(?:{{3-Gq3G/G(HIA,,./==E!!!#KK2T]]BC))+
'A"1I 'AA	 :L#e#3$$  (4S&9DLL# ( bk+,A"1#67I'2LO&DDLL# -    c                 R   g }d}|j                         D ]S  }| j                  |   \  }}|dk  r't        j                  d|d| j                         d}|j                  ||g       U |j                  | j                        }||d   d   }t        |      }	||	dz
     d   |k(  r|	dz  }	|	dk  rd}	n||	dz
     d   |k(  r||	d  }
|
D cg c]  \  }}t        |       }
}}|d |	 }t        |      }t        || j                  |       n|d	   j                  }g }
g }|D ]*  \  }}|j                  t        |      t        |      g       , d
| j                  |z  z   }	 t        j                   |g| }t+        j*                  d|
      }
t,        j.                  dk7  r|
j1                          ||
j3                         z   }|S c c}}w # t        j                  $ rE}dt#        |      v r2|r0t%        j&                  d| j(                  d| j                  d       d }~ww xY w)NFr   zGlyph z has negative advance Tr   r   r   r   zout of range'z'' table can't contain negative advance sr   r   )r+   r*   r   errorr-   appendr   r   r    r   setattrr   r   extendr#   r$   packstrr   r!   r"   r&   r'   r(   r)   tobytes)r.   r0   r*   hasNegativeAdvancesr8   r9   sideBearingr1   r:   	lastIndexadditionalMetrics_sbr2   
allMetricsadvancer3   r/   es                      r;   compileztable__h_m_t_x.compileN   sH   #--/I(,Y(?%L+a		:CTEUEUV '+#NNL+67 0 jj0"!"+a.KGI)a-(+{:Q	> !I )a-(+{: !(	
 3:K L:KB:K Ljy)G!'lOK!9!9?K %Vn66O "
"KGRww/=> #400?BB
		;;z7J7D "KK->?==E!&&('//117 !M || 	Q',?&&}}d&6&68 
 	s   G$G H&!A H!!H&c                     t        | j                  j                               }|D ]S  }| j                  |   \  }}|j                  dd|f| j                  |f| j
                  |fg       |j                          U y )Nmtxname)sortedr*   keys	simpletagr-   sideBearingNamenewline)r.   writerr0   namesr8   rP   rN   s          r;   toXMLztable__h_m_t_x.toXML   s{    t||((*+I,,y1KGRY'%%w/))2. NN r=   c                     t        | d      si | _        |dk(  rAt        || j                           t        || j                           f| j                  |d   <   y y )Nr*   rT   rU   )hasattrr*   r   r-   rY   )r.   rU   attrscontentr0   s        r;   fromXMLztable__h_m_t_x.fromXML   sY    tY'DL5=t//01t3345+DLLv' r=   c                     | j                   |= y Nr*   r.   r8   s     r;   __delitem__ztable__h_m_t_x.__delitem__   s    LL#r=   c                      | j                   |   S rd   re   rf   s     r;   __getitem__ztable__h_m_t_x.__getitem__   s    ||I&&r=   c                 4    t        |      | j                  |<   y rd   )tupler*   )r.   r8   advance_sb_pairs      r;   __setitem__ztable__h_m_t_x.__setitem__   s    "'"8Yr=   N)__name__
__module____qualname____doc__r   r-   rY   r   r#   r<   rR   r]   rb   rg   ri   rm    r=   r;   r	   r	      sJ     IKO,.E`2h$'9r=   r	   )fontTools.misc.roundToolsr   	fontToolsr   fontTools.misc.textToolsr    r   r'   r$   r&   logging	getLoggerrn   r   r	   rr   r=   r;   <module>ry      sE    -  -  
    g!R9\.. R9r=   