
    Ph)                     j    d dl mZ ddlmZ ddlmZ ddlZdZdZdZ	d	Z
 G d
 dej                        Zy)   )DefaultTable    )sstruct)safeEvalNz
	>                 # big endian
	version:     H    # Version number (0 or 1)
	numRecs:     H    # Number of VDMX groups present
	numRatios:   H    # Number of aspect ratio groupings
z
	>                 # big endian
	bCharSet:    B    # Character set
	xRatio:      B    # Value to use for x-Ratio
	yStartRatio: B    # Starting y-Ratio value
	yEndRatio:   B    # Ending y-Ratio value
z
	>                 # big endian
	recs:        H    # Number of height records in this group
	startsz:     B    # Starting yPelHeight
	endsz:       B    # Ending yPelHeight
z
	>                 # big endian
	yPelHeight:  H    # yPelHeight to which values apply
	yMax:        h    # Maximum value (in pels) for this yPelHeight
	yMin:        h    # Minimum value (in pels) for this yPelHeight
c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)table_V_D_M_X_zVertical Device Metrics table

    The ``VDMX`` table records changes to the vertical glyph minima
    and maxima that result from Truetype instructions.

    See also https://learn.microsoft.com/en-us/typography/opentype/spec/vdmx
    c                    d}t        j                  t        ||       \  }}|t        j                  t              z  }g | _        t        | j                        D ][  }t        j                  t        |      \  }}|t        j                  t              z  }d |d<   | j                  j                  |       ] t        j                  d      }g }t        | j                        D ]9  }t        j                  d|d|       d   }	||d  }||z  }|j                  |	       ; g | _        t        | j                        D ]|  }
|}t        j                  t        |      \  }}|j                  d      }|j                  d      }|j                  d      }|t        j                  t              z  }t        |      D ]M  }t        j                  t        |      \  }}t        j                  t              }||z  }|d   |d   f||d	   <   O t!        |j#                               }t%        |j#                               }||k(  sJ d
|j&                  ||
fz         ||k(  sJ d|j(                  ||
fz         | j                  j                  |       t+        |      D ]  \  }}||k(  s|
| j                  |   d<     t        | j                        D ]0  }| j                  |   }|d   ddlm} |j1                  d|z         y )Nr   
groupIndex>HrecsstartszendszyMaxyMin
yPelHeightz5startsz (%s) must equal min yPelHeight (%s): group %dz3endsz (%s) must equal max yPelHeight (%s): group %dttLibz no group defined for ratRange %d)r   unpack2VDMX_HeaderFmtcalcsize	ratRangesrange	numRatiosVDMX_RatRangeFmtappendstructunpackgroupsnumRecsVDMX_GroupFmtpopVDMX_vTableFmtminkeysmaxr   r   	enumerate	fontToolsr   
TTLibError)selfdatattFontposdummyiratio	lenOffset_offsetsoffsetr
   
currOffsetgroupr   r   r   jvTablevTableLengthminSizemaxSizeoffsetIndexoffsetValuer   s                           jC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\fontTools/ttLib/tables/V_D_M_X_.py	decompileztable_V_D_M_X_.decompile0   s   oondDAtw//t~~&A!//*:DAKE47##$455C"&E,NN!!%( ' OOD)	t~~&A]]4a	):;A>F	
#D9COOF#	 '
 -JJ!//->KE499V$Dii	*GIIg&E7##M22C4[&~tD&//?|#/5f~vf~.Nf\*+ ! %**,'G%**,'G7"FJ "  DH   KKu%,5h,?([ , AKDNN;/= -@E .T t~~&ANN1%E\"*+&&'IA'MNN '    c                    t        j                  t              }t        j                  t              }t	        j                  d      }t        j                  t
              }t        j                  t              }|| j                  |z  z   | j                  |z  z   }g }| j                  D ])  }|j                  |       |t        |      |z  z   }	||	z  }+ g }
| j                  D ]  }|d   }|
j                  ||           |
S )z
        Calculate offsets to VDMX_Group records.
        For each ratRange return a list of offset values from the beginning of
        the VDMX table to a VDMX_Group.
        r   r
   )r   r   r   r   r   r    r"   r   r   r   lenr   )r)   	lenHeaderlenRatRanger0   lenGroupHeader	lenVTabler,   groupOffsetsr4   lenGroupoffsetsr/   r
   s                r<   _getOffsetsztable_V_D_M_X_._getOffsetst   s     $$^4	&&'78OOD)	 ))-8$$^4	$..;66)9SS[[E$%E
Y(>>H8OC ! ^^E|,JNN<
34 $ r>   c                    | j                   dk(  s3| j                   dk(  s$ddlm} |j                  d| j                   z        t	        j
                  t        |       }| j                  D ]  }|t	        j
                  t        |      z  }! | j                         D ]  }|t        j
                  d|      z  } | j                  D ]  }t        |      }t        |j                               }t        |j                               }	|||	d}
|t	        j
                  t         |
      z  }t#        |j%                               D ]+  \  }\  }}|||d}|t	        j
                  t&        |      z  }-  |S )Nr   r   r   z)unknown format for VDMX table: version %sr   )r   r   r   )r   r   r   )versionr'   r   r(   r   packr   r   r   rH   r   r   r@   r#   r$   r%   r    sorteditemsr"   )r)   r+   r   r*   r/   r2   r4   r   r   r   gHeaderr   r   r   r6   s                  r<   compileztable_V_D_M_X_.compile   s:   !T\\Q%6'"";dllJ  ||ND1^^EGLL!1599D $ &&(FFKKf--D )[[Eu:D%**,'G

%E#%HGGLL88D,25;;=,A(
LT4(2D$O^V<< -B ! r>   c           	      <   |j                  d| j                         |j                          |j                  d       |j                          | j                  D ]:  }|d   }|j                  d|d   |d   |d   |d	   |
       |j                          < |j                  d       |j                          |j                  d       |j                          t        | j                        D ]	  }| j                  |   }t        |      }t        |j                               }t        |j                               }|j                  d|       |j                          |j                  d|||fz         |j                          t        |j                               D ]3  \  }	\  }
}|j                  dd|	fd|
fd|fg       |j                          5 |j                  d       |j                           |j                  d       |j                          y )NrJ   )valuer   r
   ratRangebCharSetxRatioyStartRatio	yEndRatiorS   rT   rU   rV   r
   r   r4   )indexzrecs=%d, startsz=%d, endsz=%drecordr   r   r   )	simpletagrJ   newlinebegintagr   endtagr   r   r   r@   r#   r$   r%   commentrL   rM   )r)   writerr+   r/   r
   r4   r   r   r   r   r   r   s               r<   toXMLztable_V_D_M_X_.toXML   s   $,,7$^^E|,Jz*X!-0,%   NN $ 	k"!-JKK
+Eu:D%**,'G

%EOOG:O6NNNN:dGU=SSTNN,25;;=,A(
LT4  "J/&$&$P   -B MM'"NN! ." 	hr>   c           	      p   |dk(  rt        |d         | _        y |dk(  rt        | d      sg | _        |D ]  }t	        |t
              s|\  }}}|dk(  s t        | d      sd| _        n| xj                  dz  c_        t        |d         t        |d         t        |d	         t        |d
         t        |d         d}| j                  j                  |        y |dk(  rt        | d      sg | _        |D ]  }t	        |t
              s|\  }}}|dk(  s t        | d      sd| _	        n| xj                  dz  c_	        i }|D ]P  }t	        |t
              s|\  }}}|dk(  s t        |d         }t        |d         }	t        |d         }
|	|
f||<   R | j                  j                  |        y y )NrJ   rQ   r   rR   r   r   rS   rT   rU   rV   r
   rW   r   r4   r   rY   r   r   r   )
r   rJ   hasattrr   
isinstancetupler   r   r   r   )r)   nameattrscontentr+   elementr/   r4   r   r   r   s              r<   fromXMLztable_V_D_M_X_.fromXML   s   9#E'N3DL[ 4-!#"!'51'.$eW:%"45)*!+$,U:->$?"*5?";'/m0D'E%-eK.@%A&.u\/B&CE NN))%0! #" X4* "!'51'.$eW7?"43'()E#*)'59$/6,eW8+)1%2E)FJ#+E&M#:D#+E&M#:D15tE*- $+ KK&&u-' # r>   N)	__name__
__module____qualname____doc__r=   rH   rO   r`   ri    r>   r<   r   r   '   s$    BOH00&P-.r>   r   ) r   fontTools.miscr   fontTools.misc.textToolsr   r   r   r   r    r"   r   rn   r>   r<   <module>rr      sB     " -  R.\.. R.r>   