
    2h                         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       |}||z
  }d|z  d|z  z   }t        |      |k  r1t        j                  d| j                   d| d	t        |             d
| j                  |z  z   }t        j                  ||d d|z         }	|d|z  d  }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 'z' table data: expected z bytes, got >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numberOfSideBearings	tableSize
metricsFmtr*   sideBearings
glyphOrderi	glyphNameadvanceWidthr   lastAdvances                    DD:\jyotish\venv\Lib\site-packages\fontTools/ttLib/tables/_h_m_t_x.py	decompileztable__h_m_t_x.decompile   sG   6N,,	jj0"!'+t7O7O"PQO'OY&KK>>4#;#;= (O(?:'!.B*BB	t9y ""t}}o .%;l3t9+?  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*   hasNegativeAdvancesr9   r:   sideBearingr1   r;   	lastIndexadditionalMetrics_sbr2   
allMetricsadvancer5   r/   es                      r<   compileztable__h_m_t_x.compileR   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   namesr9   rQ   rO   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*   rU   rV   )hasattrr*   r   r-   rZ   )r.   rV   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.   r9   s     r<   __delitem__ztable__h_m_t_x.__delitem__   s    LL#r>   c                      | j                   |   S re   rf   rg   s     r<   __getitem__ztable__h_m_t_x.__getitem__   s    ||I&&r>   c                 4    t        |      | j                  |<   y re   )tupler*   )r.   r9   advance_sb_pairs      r<   __setitem__ztable__h_m_t_x.__setitem__   s    "'"8Yr>   N)__name__
__module____qualname____doc__r   r-   rZ   r   r#   r=   rS   r^   rc   rh   rj   rn    r>   r<   r	   r	      sJ     IKO,2Eh2h$'9r>   r	   )fontTools.misc.roundToolsr   	fontToolsr   fontTools.misc.textToolsr    r   r'   r$   r&   logging	getLoggerro   r   r	   rs   r>   r<   <module>rz      sE    -  -  
    g!V9\.. V9r>   