Ë
    ^ãj§  ã                   ób   — d Z ddlmZmZ ddlmZ ddlmZ h d£Zh d£Z	d„ Z
d„ Zd	„ Zd
„ Zefd„Zy)z(Helpers for instancing CFF2 charstrings.é    )ÚblendArgValuesÚnumBlendArgValues)ÚotRound)ÚsupportScalar>   ÚflexÚrlinetoÚrmovetoÚ	rrcurveto>   ÚhstemÚvstemÚhstemhmÚvstemhmc                 óœ   — | |   \  }}|t         v ry|dk(  xr5 |dz   t        | «      k  xr" | |dz      d   dv xr t        d„ |D «       «       S )NTÚ é   r   >   ÚcntrmaskÚhintmaskc              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­w©N)Ú
isinstanceÚbytes©Ú.0Úargs     ú`/var/www/html/metafoliadorv2/venv/lib/python3.12/site-packages/fontTools/varLib/instancer/cff.pyú	<genexpr>z!_isStemCommand.<locals>.<genexpr>   s   è ø€ Ò;¨s”J˜s¤E×*Ñ;ùó   ‚)Ú_STEM_OPERATORSÚlenÚany)ÚcommandsÚiÚopÚargss       r   Ú_isStemCommandr%      sp   € Ø˜‰{�H€BˆØ	Œ_ÑØð 	ˆb‰ò 	<Ø�‰E”C˜“MÑ!ò	<à�Q˜‘U‰O˜AÑÐ":Ð:ò	<ô Ñ;°dÔ;Ó;Ð;ð	ó    c                 ó¶  — g }| j                   j                  D ]·  }|j                  |«      }|j                  «       D ��ci c]  \  }}||v sŒ||“Œ }}}t	        ||«      }	t        d„ |j                  «       D «       «      r|j                  d«       Œzt        |«      t        |«      k(  r|j                  |	|	f«       Œ¥|j                  d|	f«       Œ¹ |S c c}}w )zÃReturn each region's scalar range after pinning the given axes.

    These ranges let flex1 generalization determine whether its direction is
    fixed throughout the remaining design space.
    c              3   ó`   K  — | ]&  \  }}}||kD  xs ||kD  xs |d cxk  xr |k  nc –— Œ( y­w)r   N© )r   ÚlowerÚpeakÚuppers       r   r   z(getRegionScalarRanges.<locals>.<genexpr>'   s=   è ø€ ò 
á"��t˜Uð �D‰LÒ=˜D 5™LÒ=¨E°AÖ,=¸Ô,=Ó=ñ
ùs   ‚,.)r   r   r   )	ÚVarRegionListÚRegionÚget_supportÚitemsr   r    ÚvaluesÚappendr   )
ÚvarStoreÚfvarAxesÚpinnedLocationÚregionScalarRangesÚregionÚsupportÚaxisÚtripleÚpinnedSupportÚscalars
             r   ÚgetRegionScalarRangesr=      sã   € ð ÐØ×(Ñ(×/Ñ/ò 3ˆØ×$Ñ$ XÓ.ˆà-4¯]©]«_÷
Ù)˜T 6ÀÈÒ@VˆD�&‰Lð
ˆñ 
ô ˜~¨}Ó=ˆäñ 
à&3×&:Ñ&:Ó&<ô
ô 
ð ×%Ñ% fÕ-Ü�Ó¤3 w£<Ò/Ø×%Ñ% v¨vÐ&6Õ7à×%Ñ% q¨& kÕ2ð3ð  Ðùó
s   Á CÁCc          
      óv  — dg|z  }g }| D ]Ÿ  }t        |t        «      r|^}}n|dg|z  }}t        |«      |k(  sJ ‚|r7t        ||«      D ��	cg c]
  \  }}	||	z   ‘Œ }}}	|j	                  |g|z   «       n5|j	                  |gt        ||«      D �	�cg c]
  \  }	}|	|z
  ‘Œ c}}	z   «       |}Œ¡ |S c c}	}w c c}}	w )zÙConvert a Private DICT delta array's region deltas.

    Defaults are already absolute; region deltas are relative to the preceding
    value. Make those absolute before instancing, and relative again afterwards.
    r   )r   Úlistr   Úzipr2   )
r1   Ú
numRegionsÚ
toAbsoluteÚpreviousÚresultÚvalueÚdefaultÚdeltasÚpÚds
             r   ÚconvertPrivateDictDeltasrJ   3   sÖ   € ð ˆs�ZÑ€HØ€FØò ˆÜ�eœTÔ"Ø$ÐˆG‘fà# a S¨:Ñ%5�VˆGÜ�6‹{˜jÒ(Ð(Ð(ÙÜ(+¨H°fÓ(=×>¡  1�a˜!“eÐ>ˆFÑ>Ø�M‰M˜7˜) fÑ,Õ-à�M‰M˜7˜)¼¸VÀXÓ9N×&O±°°A q¨1£uÓ&OÑOÔPØ‰ðð €Mùó ?ùó 'Ps   ÁB/ÂB5c                 ó¨  — d}| D ]1  \  }}|dk(  r|r	 y|dk(  r y|dvsJ ‚|xs t        d„ |D «       «      }Œ3  ||«      dz   }d	g|z  d	g|z  g}t        | «      D ]ê  \  }\  }}|dk(  r-|d	   } ||«      dz   }|D �	cg c]  }	|	d
d d	g|dz
  z  z   ‘Œ }}	Œ;|t        v r|}
|dk(  rdn
t        |«      }n t	        | |«      rd	g|z  g}
t        |«      }nŒxt        |«      D ]e  }|t        |
«      z  }t        ||   |«      }t        |
|   |«      D ��cg c]
  \  }}||z   ‘Œ c}}x}|
|<   t        |dd
 «      r|dgz   n|d	   ||<   Œg Œì y
c c}	w c c}}w )a   Convert generalized CFF2 outline and stem coordinates in place.

    Return ``None`` on success, or the reason the commands cannot safely be
    converted. All flex operators must already have been generalized to
    ``flex``; an ambiguous variable ``flex1`` cannot be made absolute.
    FÚvsindexzvsindex after a blendÚflex1z/flex1 changes direction across the design space>   ÚhflexÚhflex1c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr   ©r   r?   r   s     r   r   z/convertToAbsoluteCoordinates.<locals>.<genexpr>Y   s   è ø€ Ò$K¸s¤Z°´T×%:Ñ$Kùr   r   r   Nr   é   )r    Ú	enumerateÚ_PATH_OPERATORSr   r%   Úranger   r@   )r!   ÚvsIndexÚgetNumRegionsÚ	seenBlendr#   r$   Ú	numValuesÚoutliner"   r9   Ú	positionsÚnumCoordinatesÚjÚkr1   rH   ÚvÚpositions                     r   ÚconvertToAbsoluteCoordinatesra   J   s¾  € ð €IØò L‰ˆˆDØ�Š?ÙÙ.Ø�7Š]ÙDØÐ,Ñ,Ð,Ð,ØÒK¤Ñ$KÀdÔ$KÓ!K‰	ðLñ ˜gÓ&¨Ñ*€IØˆs�Y‰   i¡Ð0€GÜ" 8Ó,ò K‰ˆ‰:ˆB�Ø�Š?à˜1‘gˆGÙ% gÓ.°Ñ2ˆIØDKÖL¸D�t˜B˜Q�x 1 #¨°Q©Ñ"7Ó7ÐLˆGÐLØØ”Ñ ØˆIØ#%¨¢<™R´S¸³Y‰NÜ˜H aÔ(Ø˜˜y™Ð)ˆIÜ  ›Y‰NàÜ�~Ó&ò 	KˆAØ”C˜	“NÑ"ˆAÜ# D¨¡G¨YÓ7ˆFÜ9<¸YÀq¹\È6Ó9R×&S±°°A q¨1£uÓ&SÐSˆH�y ‘|Ü(+¨H°Q°R¨LÔ(9�h ! ’n¸xÈ¹{ˆD�ŠGñ		KðKð( ùò Mùó 'Ts   Á=E	ÄE
c           	      óZ  ‡— ˆfd„}dgdgg}t        | «      D �]
  \  }\  }}|t        v r|}|dk(  rdn
t        |«      }nt        | |«      rdgg}t        |«      }nŒDt	        |«      D ]¥  }	|	t        |«      z  }
 |||	   «      }t        t        ||
   «      t        |«      «      }t        ||«      }||
   dg|t        ||
   «      z
  z  z   }t        ||«      D ��cg c]
  \  }}||z
  ‘Œ }}}|||
<   t        |dd «      r|dgz   n|d   ||	<   Œ§ |dk(  sŒý ||d   «      |d<   �Œ yc c}}w )zFRound absolute CFF2 coordinates and make them relative again in place.c                 óX   •— t        | t        «      r ‰| d   «      g| dd  z   S  ‰| «      S )Nr   r   rQ   )r   Úrounds    €r   ÚroundArgz.convertToRelativeCoordinates.<locals>.roundArgw   s2   ø€ Ü�cœ4Ô Ù˜#˜a™&“M�? S¨¨ WÑ,Ð,Ù�S‹zÐr&   r   r   rR   r   N)
rS   rT   r   r%   rU   Úmaxr   r   r@   r    )r!   rd   re   rZ   r"   r#   r$   r[   r\   r]   r^   r   rY   r1   rC   r_   rH   Údiffs    `                r   ÚconvertToRelativeCoordinatesrh   t   sV  ø€ ôð
 ˆs�Q�Cˆj€GÜ" 8Ó,ó *‰ˆ‰:ˆB�Ø”Ñ ØˆIØ#%¨¢<™R´S¸³Y‰NÜ˜H aÔ(Ø˜˜ˆIÜ  ›Y‰NàÜ�~Ó&ò 	?ˆAØ”C˜	“NÑ"ˆAÙ˜4 ™7Ó#ˆCÜœC 	¨!¡Ó-Ô/@ÀÓ/EÓFˆIÜ# C¨Ó3ˆFØ  ‘| q c¨Y¼¸YÀq¹\Ó9JÑ-JÑ&KÑKˆHÜ&)¨&°(Ó&;×<™d˜a �A˜“EÐ<ˆDÑ<Ø!ˆI�a‰LÜ$'¨¨Q¨R¨¤M�d˜a˜S’j°t¸A±wˆD�ŠGð	?ð �‹<Ù  R¡Ó)ˆD�‹Hñ'*ùó =s   ÃD'
N)Ú__doc__ÚfontTools.cffLib.specializerr   r   ÚfontTools.misc.roundToolsr   ÚfontTools.varLib.modelsr   rT   r   r%   r=   rJ   ra   rh   r)   r&   r   ú<module>rm      s<   ðÙ .ç JÝ -Ý 1ò >€Ú:€ò
òò4ò.'ðT 29ô *r&   