
    jke                          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mZ d dlZd dlZ ej*                  e      Zdd	lmZ  G d
 de      Zy)    )sstruct)fixedToFloatfloatToFixedfloatToFixedToStrstrToFixedToFloat)	bytesjoinsafeEval)
TTLibError   )DefaultTable)otTablesN)BaseTTXConverterc                   N     e Zd ZdZdgZd fd	Z fdZ fdZd Z fdZ	 xZ
S )	table__a_v_a_raM  Axis Variations Table

    This class represents the ``avar`` table of a variable font. The object has one
    substantive attribute, ``segments``, which maps axis tags to a segments dictionary::

        >>> font["avar"].segments   # doctest: +SKIP
        {'wght': {-1.0: -1.0,
          0.0: 0.0,
          0.125: 0.11444091796875,
          0.25: 0.23492431640625,
          0.5: 0.35540771484375,
          0.625: 0.5,
          0.75: 0.6566162109375,
          0.875: 0.81927490234375,
          1.0: 1.0},
         'ital': {-1.0: -1.0, 0.0: 0.0, 1.0: 1.0}}

    Notice that the segments dictionary is made up of normalized values. A valid
    ``avar`` segment mapping must contain the entries ``-1.0: -1.0, 0.0: 0.0, 1.0: 1.0``.
    fontTools does not enforce this, so it is your responsibility to ensure that
    mappings are valid.
    fvarc                 2    t         |   |       i | _        y N)super__init__segments)selftag	__class__s     A/usr/lib/python3/dist-packages/fontTools/ttLib/tables/_a_v_a_r.pyr   ztable__a_v_a_r.__init__/   s        c                 H   |d   j                   D cg c]  }|j                   }}t        | d      st        j                         | _        t        | j
                  d      sd| j
                  _        t        | dd      dz  t        | dd      z  | j
                  _        t        |      | j
                  _
        g | j
                  _        |D ]  }| j                  |   }t        j                         }t        |      |_        g |_        t        |j!                               D ]B  \  }}t        j                         }||_        ||_        |j                  j'                  |       D | j
                  j                  j'                  |        t(        	| U  |      S c c}w )	Nr   tableReservedr   majorVersionr      minorVersion)axesaxisTaghasattrr   avarr   r   getattrVersionlen	AxisCountAxisSegmentMapr   PositionMapCountAxisValueMapsorteditemsFromCoordinateToCoordinateappendr   compile)
r   ttFontaxisaxisTagsmappings
segmentMapkeyvaluevalueMapr   s
            r   r2   ztable__a_v_a_r.compile3   sb   -3F^-@-@ATDLLAAtW%!DJtzz:."#DJJ%dNA>"D.!I
 


  #8}

$&

! 
	9D}}T*H!002J*-h-J'&(J#$X^^%56 9
U#002*-'(-%''..x8	9
 JJ%%,,Z8
	9 wv&&+ Bs   Fc                    t         |   ||       | j                  j                  dk\  sJ | j                  j                  dz	  | _        | j                  j                  dz  | _        |d   j                  D cg c]  }|j                   }}|D ]  }i | j                  |<    t        || j                  j                        D ]@  \  }}i x}| j                  |<   |j                  D ]  }|j                  ||j                  <    B y c c}w )Ni   r    i  r   )r   	decompiler   r'   r   r!   r"   r#   r   zipr*   r,   r0   r/   )	r   datar3   r4   r5   r7   r   segmentr   s	           r   r<   ztable__a_v_a_r.decompileK   s   $'zz!!Z/// JJ.."4 JJ..7-3F^-@-@ATDLLAA 	%D"$DMM$	% #Hdjj.G.G H 	HD*-//Ht}}T*%22 H3:3G3G//0H	H Bs   :D	c           	      R   |j                  dt        | dd      t        | dd             |j                          |d   j                  D cg c]  }|j                   }}|D ]  }|j                  d|	       |j                          t        | j                  |   j                               D ]B  \  }}t        |d
      }t        |d
      } |j                   di ||d |j                          D |j                  d       |j                           t        | dd      dk\  r|| j                  j                  r(| j                  j                  j                  ||d       | j                  j                  r'| j                  j                  j                  ||       y y y c c}w )Nversionr   r   r!   r   )majorminorr   r?   )r4      )fromto   	VarIdxMap)name)mapping)	simpletagr&   newliner"   r#   begintagr-   r   r.   fl2strendtagr   rH   toXMLVarStore)r   writerr3   r4   r5   r8   r9   s          r   rP   ztable__a_v_a_r.toXMLX   sw   $2$2 	 	

 	-3F^-@-@ATDLLAA 		DOOIDO1NN$T]]4%8%>%>%@A !
US"oub)   Is%.HI 	!
 MM)$NN		 4+q0zz##

$$**66*Lzz""

##))&&9 # 1 Bs   F$c                 p   t        | d      st        j                         | _        t        | j                  d      sd| j                  _        |dk(  rTt        |d         | _        t        |d         | _        t        | dd      d	z  t        | d
d      z  | j                  _	        y |dk(  ry|d   }i x}| j                  |<   |D ]]  }t        |t              s|\  }}	}
|dk(  s t        |	d   d      }t        |	d   d      }||v rt        j                  d||       |||<   _ y t         | E  ||||       y )Nr   r   r   rA   rB   rC   r   r   r    r!   r?   r4   rJ   rE   rD   rF   z#duplicate entry for %s in axis '%s')r$   r   r%   r   r   r	   r   r!   r&   r'   r   
isinstancetuplestr2fllogwarningr   fromXML)r   rI   attrscontentr3   r4   r?   elementelementNameelementAttrs_	fromValuetoValuer   s                r   rY   ztable__a_v_a_r.fromXMLp   s=   tW%!DJtzz:."#DJJ9 (w 8D (w 8D")$"Bb"HGnaM "DJJ Y=D,..GdmmD)" 
5gu-3:0Kq"i/$*<+?$D	"(d);R"@$/KK EyRV .5	*
5 GOD%&9r   r   )__name__
__module____qualname____doc__dependenciesr   r2   r<   rP   rY   __classcell__)r   s   @r   r   r      s0    . 8L'0H:0: :r   r   )fontTools.miscr   fontTools.misc.fixedToolsr   fi2flr   fl2fir   rN   r   rV   fontTools.misc.textToolsr   r	   fontTools.ttLibr
    r   r   structlogging	getLoggerrb   rW   otBaser   r    r   r   <module>rt      sL    "  9 &     g! $u:% u:r   