
    +gq                      N   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
mZ d dlZd dlmZmZmZmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZ e	j:                  Zee	j<                  _        d Z G d de       Z!e"ddZ#e#e	jH                  _%        d Z&e&e	jN                  _(        d Z)e)e	j<                  _*         G d de       Z+d Z,d Z-e-e	j<                  _.        e,e	j<                  _/        d Z0e0e	j<                  _1        d Z2d Z3e2e	jh                  _5        e3e	jh                  _6        y)    )noRoundotRound)	bit_count)Vector)otTables)supportScalarN)buildVarRegionListbuildSparseVarRegionListbuildSparseVarRegionbuildMultiVarStorebuildMultiVarData)batched)partial)defaultdict)heappushheappopc                 L    t        t        | j                         d             S )Nc                     | d   S Nr    )kvs    v/home/viktor/gitlab-persoonlijk/factuur-applicatie/venv/lib/python3.12/site-packages/fontTools/varLib/multiVarStore.py<lambda>z!_getLocationKey.<locals>.<lambda>   s
    BqE     )key)tuplesorteditems)locs    r   _getLocationKeyr       s    		)9:;;r   c                   B    e Zd Zd Zd Zd Zd Zd ZeddZ	eddZ
y	)
OnlineMultiVarStoreBuilderc                     || _         i | _        t        g |      | _        t	        | j                  g       | _        d | _        d | _        d | _        i | _	        i | _
        d | _        y N)	_axisTags
_regionMapr
   _regionListr   _store_data_model	_supports_varDataIndices_varDataCaches_cache)selfaxisTagss     r   __init__z#OnlineMultiVarStoreBuilder.__init__   s_    !3BA()9)92>
! r   c                 H    | j                  |j                         || _        y r$   )setSupportssupportsr*   )r/   models     r   setModelz#OnlineMultiVarStoreBuilder.setModel)   s    (r   c                     d | _         t        |      | _        | j                  d   s| j                  d= d | _        d | _        y r   )r*   listr+   r.   r)   )r/   r4   s     r   r3   z&OnlineMultiVarStoreBuilder.setSupports-   s:    h~~a q!
r   c                     t        | j                  j                        | j                  _        t        | j                  j
                        | j                  _        | j                  S r$   )lenr'   RegionRegionCountr(   MultiVarDataMultiVarDataCountr/   s    r   finishz!OnlineMultiVarStoreBuilder.finish5   sF    '*4+;+;+B+B'C$(+DKK,D,D(E%{{r   c                    | j                   }| j                  }| j                  }g }|D ]|  }t        |      }|j	                  |      }|Kt        || j                        }t        |j                        x}||<   |j                  j                  |       |j                  |       ~ t        |      }| j                  j	                  |      }	|	]|	| _        | j                  j                  |	   | _        | j                   |   | _        t        | j                  j$                        dk(  rd }	|	t'        |g       | _        t        | j                  j                        | _        | j                  j                  j                  | j                         | j                  | j                  |<   || j                   vri | j                   |<   | j                   |   | _        y y )N  )r&   r'   r+   r    getr   r%   r:   r;   appendr   r,   _outerr(   r=   r)   r-   r.   Itemr   )
r/   	regionMap
regionListregionsregionIndicesregionr   idx	varRegion
varDataIdxs
             r   _add_MultiVarDataz,OnlineMultiVarStoreBuilder._add_MultiVarData:   s   OO	%%
.. 	&F!&)C--$C{0H	'*:+<+<'==in!!((3  %	& M"))--c2
!$DK11*=DJ--c2DK4::??#v-!
*="=DJdkk667DKKK$$++DJJ7(,D  %$---+-##C(--c2DK r   roundc                    | j                   j                  ||      }|j                  d      }|| j                  |t              fS )NrP   r   )r*   	getDeltaspopstoreDeltasr   )r/   master_valuesrQ   deltasbases        r   storeMastersz'OnlineMultiVarStoreBuilder.storeMasters]   sC    &&}E&Bzz!}T%%fG%<<<r   c                   t        fd|D              }t        |      st        S t        d |D              }| j                  s| j	                          | j
                  j                  |      }||S t        | j                  j                        }|dk(  r'| j	                          | j                  |t              S | j                  j                  |t               | j                  dz  |z   }|| j
                  |<   |S )Nc              3   .   K   | ]  } |        y wr$   r   .0drQ   s     r   	<genexpr>z9OnlineMultiVarStoreBuilder.storeDeltas.<locals>.<genexpr>c   s     0AuQx0   c              3   2   K   | ]  }t        |        y wr$   )r   )r]   r^   s     r   r_   z9OnlineMultiVarStoreBuilder.storeDeltas.<locals>.<genexpr>h   s     6!U1X6s   rB   rP      )r   anyNO_VARIATION_INDEXr)   rO   r.   rC   r:   rF   rU   r   addItemrE   )r/   rW   rQ   deltas_tuplevarIdxinners     `   r   rU   z&OnlineMultiVarStoreBuilder.storeDeltasb   s    0006{%%6v66zz""$.MDJJOO$F?""$##F'#::

61++#u,$*L!r   N)__name__
__module____qualname__r1   r6   r3   r@   rO   rQ   rY   rU   r   r   r   r"   r"      s0    

!3F 49 =
 ,1 r   r"   rP   c                    t        fd|D              }t        |      | j                  k(  sJ g }|D ]  }|j                  |        | j                  j                  |       t        | j                        | _        y )Nc              3   .   K   | ]  } |        y wr$   r   r\   s     r   r_   z'MultiVarData_addItem.<locals>.<genexpr>~   s     ,58,r`   )r   r:   VarRegionCountextendrF   rD   	ItemCount)r/   rW   rQ   valuesr^   s     `  r   MultiVarData_addItemrr   }   sn    ,V,,Fv;$-----F a 	IIV^DNr   c                     | j                   D ci c]=  }||j                     j                  |j                  |j                  |j
                  f? c}S c c}w r$   )SparseVarRegionAxis	AxisIndexaxisTag
StartCoord	PeakCoordEndCoord)r/   	fvar_axesregs      r   SparseVarRegion_get_supportr|      sQ     ++ 	#-- ((3>>3==#,,*WW  s   AAc                 ,    t        | j                        S r$   )boolr=   r?   s    r   MultiVarStore___bool__r      s    !!""r   c                   D    e Zd Zi fdZd Zd Zd Zed        Zd Z	d Z
y)	MultiVarStoreInstancerc                     || _         ||j                  dk(  sJ |r|j                  ng | _        |r|j                  j
                  ng | _        | j                  |       y )N   )rz   Formatr=   _varDataSparseVarRegionListr;   _regionssetLocation)r/   multivarstorerz   locations       r   r1   zMultiVarStoreInstancer.__init__   s]    "$(<(<(AAA6C228EM--442 	 	"r   c                 D    t        |      | _        | j                          y r$   )dictr   _clearCaches)r/   r   s     r   r   z"MultiVarStoreInstancer.setLocation   s    Xr   c                     i | _         y r$   )_scalarsr?   s    r   r   z#MultiVarStoreInstancer._clearCaches   s	    r   c                     | j                   j                  |      }|M| j                  |   j                  | j                        }t        | j                  |      }|| j                   |<   |S r$   )r   rC   r   get_supportrz   r   r   )r/   	regionIdxscalarsupports       r   
_getScalarz!MultiVarStoreInstancer._getScalar   s[    ""9->mmI.::4>>JG"4==':F'-DMM)$r   c                 :   | st        g       S t        |       t        |      z  dk(  sJ t        |       t        |      f       t        |       t        |      z  }t        dg|z        }t        t        | |      |      D ]  \  }}|s	|t        |      |z  z  } |S r   )r   r:   zipr   )rW   scalarsmdeltar^   ss         r   interpolateFromDeltasAndScalarsz6MultiVarStoreInstancer.interpolateFromDeltasAndScalars   s    ":6{S\)Q.KVc'l0KK.K3w<'sQw*G4 	#DAqVAY]"E	# r   c                     |dz	  |dz  }}|t         k(  rt        g       S | j                  }||   j                  D cg c]  }| j	                  |       }}||   j
                  |   }| j                  ||      S c c}w )Nrb   rB   )rd   r   r   VarRegionIndexr   rF   r   )r/   varidxmajorminorvarDatarir   rW   s           r   __getitem__z"MultiVarStoreInstancer.__getitem__   s    |Vf_u''":--181N1NO24??2&OO$$U+33FGDD Ps   A:c                     | j                   }||   j                  D cg c]  }| j                  |       }}| j                  ||      S c c}w r$   )r   r   r   r   )r/   varDataIndexrW   r   r   r   s         r   interpolateFromDeltasz,MultiVarStoreInstancer.interpolateFromDeltas   sK    --181F1U1UV24??2&VV33FGDD Ws   A
N)ri   rj   rk   r1   r   r   r   staticmethodr   r   r   r   r   r   r   r      s9    :< # 
 
EEr   r   c                 F    t         j                  j                  | |d      S )Nr=   )VarData)otVarStoresubset_varidxes)r/   varIdxess     r   MultiVarStore_subset_varidxesr      s    ;;&&tX~&NNr   c                 F    t         j                  j                  | dd      S )Nr=   r   )r   VarRegionList)r   r   prune_regionsr?   s    r   MultiVarStore_prune_regionsr      s&    ;;$$n4I %  r   c                     g }| j                   |   }|j                  D ]=  }| j                  j                  |   }|j	                  |      }|j                  |       ? |S r$   )r=   r   r   r;   r   rD   )r/   r   fvarAxesr4   r   r   rK   r   s           r   MultiVarStore_get_supportsr      se    H&G++ !	))00;$$X. ! Or   c                     | j                   j                  D ]I  }|j                  D ]8  }|j                  |j                         |j                  |j
                         : K y r$   )VarCompositeGlyphsVarCompositeGlyph
componentsaddaxisValuesVarIndextransformVarIndex)r/   varidxesglyph	components       r   VARC_collect_varidxesr      sV    ((:: 6)) 	6ILL556LL445	66r   c                     | j                   j                  D ];  }|j                  D ]*  }||j                     |_        ||j                     |_        , = y r$   )r   r   r   r   r   )r/   varidxes_mapr   r   s       r   VARC_remap_varidxesr      s\    ((:: T)) 	TI+7	8T8T+UI(*6y7R7R*SI'	TTr   )7fontTools.misc.roundToolsr   r   fontTools.misc.intToolsr   fontTools.misc.vectorr   fontTools.ttLib.tablesr   r   fontTools.varLib.modelsr   fontTools.varLib.varStore	fontToolsfontTools.varLib.builderr	   r
   r   r   r   fontTools.misc.iterToolsr   	functoolsr   collectionsr   heapqr   r   rd   MultiVarStorer    objectr"   rQ   rr   r=   re   r|   SparseVarRegionr   r   __bool__r   r   r   r   r   r   get_supportsr   r   VARCcollect_varidxesremap_varidxesr   r   r   <module>r      s   6 - ( 1 1    -  # # ** &8   #<^ ^B 16 
$ /  "=   # 3   2EV 2EjO "=   #@     !;   6T 1 , r   