Ë
    £ehf:  ã                   ó¤   — d Z ddlmZ ddlmZ ddlmZ ddlZ G d„ de«      ZdZ	d	„ Z
ed
„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Z	 	 	 dd„Zd„ Zd„ Zdd„Zy)z-Helpers for instantiating name table records.é    )Úcontextmanager)Údeepcopy)ÚIntEnumNc                   ó0   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zy
)ÚNameIDé   é   é   é   é   é   é   é   é   N)Ú__name__Ú
__module__Ú__qualname__ÚFAMILY_NAMEÚSUBFAMILY_NAMEÚUNIQUE_FONT_IDENTIFIERÚFULL_FONT_NAMEÚVERSION_STRINGÚPOSTSCRIPT_NAMEÚTYPOGRAPHIC_FAMILY_NAMEÚTYPOGRAPHIC_SUBFAMILY_NAMEÚ!VARIATIONS_POSTSCRIPT_NAME_PREFIX© ó    ú^/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/fontTools/varLib/instancer/names.pyr   r   	   s3   „ Ø€KØ€NØÐØ€NØ€NØ€OØ ÐØ!#ÐØ(*Ñ%r   r   r	   c                 óÊ  — g }d| v rˆ| d   }|j                   D ]  }|j                  |j                  «       Œ |j                  D ]H  }|j                  |j                  «       |j
                  dk7  sŒ.|j                  |j
                  «       ŒJ d| v r·| d   j                  }|j                  r|j                  j                  ndD ]  }|j                  |j                  «       Œ |j                  r|j                  j                  ndD ]  }|j                  |j                  «       Œ t        |dd «      }|�|j                  |«       |D �ch c]
  }|dkD  sŒ	|’Œ c}S c c}w )NÚfvaréÿÿ  ÚSTATr   ÚElidedFallbackNameIDéÿ   )ÚaxesÚappendÚ
axisNameIDÚ	instancesÚsubfamilyNameIDÚpostscriptNameIDÚtableÚDesignAxisRecordÚAxisÚ
AxisNameIDÚAxisValueArrayÚ	AxisValueÚValueNameIDÚgetattr)	ÚvarfontÚusedr!   ÚaxisÚinstanceÚstatÚvalueÚelidedFallbackNameIDÚnameIDs	            r   ÚgetVariationNameIDsr<      sB  € Ø€DØ�ÑØ�v‰ˆØ—I‘Iò 	)ˆDØ�K‰K˜Ÿ™Õ(ð	)àŸ™ò 	7ˆHØ�K‰K˜×0Ñ0Ô1Ø×(Ñ(¨FÓ2Ø—‘˜H×5Ñ5Õ6ð	7ð �ÑØ�v‰×$Ñ$ˆØ26×2GÒ2G�D×)Ñ)×.Ò.ÈRò 	)ˆDØ�K‰K˜Ÿ™Õ(ð	)à6:×6IÒ6I�T×(Ñ(×2Ò2Èrò 	+ˆEØ�K‰K˜×)Ñ)Õ*ð	+ä& tÐ-CÀTÓJÐØÐ+Ø�K‰KÐ,Ô-à!%Ö6�v¨°#«ŠFÒ6Ð6ùÒ6s   Å
E ÅE c              #   óF  K  — ddl m} t        | «      }d –— |j                  d«       |t        | «      z
  }| d   j                  D �cg c]  }|j
                  |vsŒ|‘Œ c}| d   j                  d d  d| v r$t        d„ | d   j                  D «       «      s| d= y y y c c}w ­w)Nr   )ÚlogzPruning name tableÚnameÚltagc              3   ó\   K  — | ]$  }|j                   d k(  r|j                  dk7  r|–— Œ& y­w)r   r"   N)Ú
platformIDÚlangID)Ú.0Úrecords     r   ú	<genexpr>z%pruningUnusedNames.<locals>.<genexpr>A   s1   è ø€ ò 
àØ× Ñ  AÒ%¨&¯-©-¸6Ò*Aô ñ
ùs   ‚*,)Ú r>   r<   ÚinfoÚnamesr;   Úany)r4   r>   ÚorigNameIDsÚexcluderE   s        r   ÚpruningUnusedNamesrM   /   s¯   è ø€ åä% gÓ.€Kã	à‡H�HÐ!Ô"ØÔ/°Ó8Ñ8€Gà$ V™_×2Ñ2ö Ø°f·m±mÈ7Ò6RŠò €GˆF�O×Ñ™!Ðð �Ñô
 ñ 
à! &™/×/Ñ/ô
ô 
ð
 ˜‘ð
ð ùò ùs   ‚AB!ÁBÁBÁ AB!c                 ó^  — ddl m}m} d| vrt        d«      ‚| d   j                  }|j
                  st        d«      ‚| d   } ||«      j                  | «      }|j                  «       }|j                  D �ci c]  }|j                  |j                  “Œ }} |i |¥|¥«      }	t        d„ |	j                  «       D «       «      sJ ‚ |||	«      }
t        ||
|	j                  «       «       |
D �cg c]  }|j                  t         z  rŒ|‘Œ }
}t#        |
«      }
t%        | |
«       yc c}w c c}w )	a3  Update instatiated variable font's name table using STAT AxisValues.

    Raises ValueError if the STAT table is missing or an Axis Value table is
    missing for requested axis locations.

    First, collect all STAT AxisValues that match the new default axis locations
    (excluding "elided" ones); concatenate the strings in design axis order,
    while giving priority to "synthetic" values (Format 4), to form the
    typographic subfamily name associated with the new default instance.
    Finally, update all related records in the name table, making sure that
    legacy family/sub-family names conform to the the R/I/B/BI (Regular, Italic,
    Bold, Bold Italic) naming model.

    Example: Updating a partial variable font:
    | >>> ttFont = TTFont("OpenSans[wdth,wght].ttf")
    | >>> updateNameTable(ttFont, {"wght": (400, 900), "wdth": 75})

    The name table records will be updated in the following manner:
    NameID 1 familyName: "Open Sans" --> "Open Sans Condensed"
    NameID 2 subFamilyName: "Regular" --> "Regular"
    NameID 3 Unique font identifier: "3.000;GOOG;OpenSans-Regular" -->         "3.000;GOOG;OpenSans-Condensed"
    NameID 4 Full font name: "Open Sans Regular" --> "Open Sans Condensed"
    NameID 6 PostScript name: "OpenSans-Regular" --> "OpenSans-Condensed"
    NameID 16 Typographic Family name: None --> "Open Sans"
    NameID 17 Typographic Subfamily name: None --> "Condensed"

    References:
    https://docs.microsoft.com/en-us/typography/opentype/spec/stat
    https://docs.microsoft.com/en-us/typography/opentype/spec/name#name-ids
    r   )Ú
AxisLimitsÚaxisValuesFromAxisLimitsr#   z6Cannot update name table since there is no STAT table.z<Cannot update name table since there are no STAT Axis Valuesr!   c              3   óN   K  — | ]  }|j                   |j                  k(  –— Œ y ­w©N)ÚminimumÚmaximum)rD   Úvs     r   rF   z"updateNameTable.<locals>.<genexpr>y   s   è ø€ ÒJ¨!ˆq�y‰y˜AŸI™IÕ%ÑJùs   ‚#%N)rG   rO   rP   Ú
ValueErrorr,   r0   ÚlimitAxesAndPopulateDefaultsÚdefaultLocationr&   ÚaxisTagÚdefaultValueÚallÚvaluesÚcheckAxisValuesExistÚpinnedLocationÚFlagsÚELIDABLE_AXIS_VALUE_NAMEÚ_sortAxisValuesÚ_updateNameRecords)r4   Ú
axisLimitsrO   rP   r8   r!   ÚpartialDefaultsÚaÚfvarDefaultsÚdefaultAxisCoordsÚaxisValueTablesrU   s               r   ÚupdateNameTableri   I   s2  € ÷@ 7à�WÑÜÐQÓRÐRØ�6‰?× Ñ €DØ×ÒÜÐWÓXÐXØ�6‰?€Dñ
 ˜JÓ'×DÑDÀWÓM€JØ ×0Ñ0Ó2€OØ7;·y±yÖA°!�A—I‘I˜qŸ~™~Ñ-ÐA€LÐAÙ"Ð#F lÐ#F°oÐ#FÓGÐÜÑJÐ/@×/GÑ/GÓ/IÔJÔJÐJÐJá.¨tÐ5FÓG€OÜ˜˜Ð0A×0PÑ0PÓ0RÔSð #öØ¨!¯'©'Ô4LÓ*LŠð€Oð ô & oÓ6€OÜ�w Õ0ùò Bùòs   Á8D%Ã.D*ÄD*c                 ó¾  ‡— t        «       }| j                  j                  }t        «       }| j                  j                  D ]‚  }|j
                  dv r)|j                  ||j                     j                  «       Œ:|j
                  dk(  sŒJ|j                  D ]*  }|j                  ||j                     j                  «       Œ, Œ„ |D ]Ö  }|j
                  }	|j
                  dv rW||j                     j                  }
|	dk(  r|j                  }n|j                  }|
‰v sŒY|‰|
   k(  sŒb|j                  |
«       Œt|j
                  dk(  sŒ„|j                  D ]D  }||j                     j                  }
|
‰v sŒ!|j                  ‰|
   k(  sŒ4|j                  |
«       ŒF ŒØ t        ‰«      |z
  |z  }|r)dj                  ˆfd„|D «       «      }t        d|› d�«      ‚y )N)r   r	   r
   r   r	   z, c              3   ó4   •K  — | ]  }d |› d‰|   › �–— Œ y­w)ú'z': Nr   )rD   ÚiÚ
axisCoordss     €r   rF   z'checkAxisValuesExist.<locals>.<genexpr>£   s"   øè ø€ ÒK¸!˜a ˜s # j°¡m _Ô5ÑKùs   ƒzCannot find Axis Values {ú})Úsetr-   r.   r0   r1   ÚFormatÚaddÚ	AxisIndexÚAxisTagÚAxisValueRecordÚNominalValueÚValueÚjoinrV   )r8   Ú
axisValuesrn   ÚseenÚ
designAxesÚ	hasValuesr9   ÚrecÚaxisValueTableÚaxisValueFormatrY   Ú	axisValueÚmissingAxesÚmissings     `           r   r]   r]   †   sÃ  ø€ Ü‹5€DØ×&Ñ&×+Ñ+€JÜ“€IØ×$Ñ$×.Ñ.ò AˆØ�<‰<˜9Ñ$Ø�M‰M˜* U§_¡_Ñ5×=Ñ=Õ>Ø�\‰\˜QÓØ×,Ñ,ò A�Ø—‘˜j¨¯©Ñ7×?Ñ?Õ@ñAð	Að %ò &ˆØ(×/Ñ/ˆØ× Ñ  IÑ-Ø  ×!9Ñ!9Ñ:×BÑBˆGØ !Ò#Ø*×7Ñ7‘	à*×0Ñ0�	Ø˜*Ò$¨°jÀÑ6IÓ)IØ—‘˜Õ!Ø×"Ñ" aÓ'Ø%×5Ñ5ò &�Ø$ S§]¡]Ñ3×;Ñ;�Ø˜jÒ(¨S¯Y©Y¸*ÀWÑ:MÓ-MØ—H‘H˜WÕ%ñ&ð&ô  �z“? TÑ)¨YÑ6€KÙØ—)‘)ÓK¸{ÔKÓKˆÜÐ5°g°Y¸bÐAÓBÐBð r   c                 óà  — g }t        «       }t        | D �cg c]  }|j                  dk(  sŒ|‘Œ c}d„ d¬«      }|D ]G  }t        d„ |j                  D «       «      }t	        |«      }||z  rŒ0||z  }|j                  ||f«       ŒI | D ]<  }||v rŒ|j                  }||vsŒ|j                  |«       |j                  ||f«       Œ> t        |«      D �	�
cg c]  \  }	}
|
‘Œ	 c}
}	S c c}w c c}
}	w )Nr   c                 ó,   — t        | j                  «      S rR   )Úlenru   )rU   s    r   ú<lambda>z!_sortAxisValues.<locals>.<lambda>³   s   € ”c˜!×+Ñ+Ó,€ r   T)ÚkeyÚreversec              3   ó4   K  — | ]  }|j                   –— Œ y ­wrR   )rs   ©rD   Úrs     r   rF   z"_sortAxisValues.<locals>.<genexpr>¸   s   è ø€ ÒC¨!˜!Ÿ+�+ÑCùs   ‚)rp   Úsortedrq   ru   Úminr'   rs   rr   )ry   ÚresultsÚseenAxesrU   Úformat4ÚvalÚaxisIndexesÚminIndexÚ	axisIndexÚ_r€   s              r   ra   ra   §   sù   € ð €GÜ‹u€HäØÖ0ˆq !§(¡(¨a£-ŠÒ0Ù,Øô€Gð ò ,ˆÜÑC¨s×/BÑ/BÔCÓCˆÜ�{Ó#ˆØ˜+Ó%Ø˜Ñ#ˆHØ�N‰N˜H c˜?Õ+ð,ð ò -ˆØ�'‰>ØØ—M‘Mˆ	Ø˜HÒ$Ø�L‰L˜Ô#Ø�N‰N˜I sÐ+Õ,ð-ô +1°«/×:™,˜!˜YŠIÓ:Ð:ùò) 	1ùó( ;s   –C%«C%ÃC*c                 óÔ  ‡‡— | d   }| d   j                   }|D �cg c]  }|j                  ‘Œ }}|D �cg c]  }t        ||«      sŒ|‘Œ }}|D �cg c]	  }||vsŒ|‘Œ }}|j                  }	t        ||	«      }
|j                  Št        d„ |j                  D «       «      }|D ]µ  Št        ˆˆfd„dd|	fD «       «      sŒdj                  ˆˆfd„|D «       «      }|rdj                  ˆˆfd	„|D «       «      }nd }|s3|s1|
r ‰|	g‰¢­Ž j                  «       }n ‰|	g‰¢­Ž j                  «       }dj                  ˆˆfd
„|D «       «      }t        | |||g‰¢­Ž  Œ· y c c}w c c}w c c}w )Nr?   r#   c              3   ób   K  — | ]'  }|j                   |j                  |j                  f–— Œ) y ­wrR   )rB   Ú	platEncIDrC   rŠ   s     r   rF   z%_updateNameRecords.<locals>.<genexpr>Õ   s#   è ø€ ÒS¸a�Q—\‘\ 1§;¡;°·±Ô9ÑSùs   ‚-/c              3   ó0   •K  — | ]  } ‰|g‰¢­Ž –— Œ y ­wrR   r   )rD   rm   ÚgetNameÚplatforms     €€r   rF   z%_updateNameRecords.<locals>.<genexpr>×   s   øè ø€ ÒG¨Q‘7˜1Ð(˜xÖ(ÑGùs   ƒr   r	   ú c              3   óL   •K  — | ]  } ‰|g‰¢­Ž j                  «       –— Œ y ­wrR   ©Ú	toUnicode©rD   Únrš   r›   s     €€r   rF   z%_updateNameRecords.<locals>.<genexpr>Ü   s)   øè ø€ ò !
Ø23‰G�AÐ!˜Ò!×+Ñ+×-ñ!
ùó   ƒ!$c              3   óL   •K  — | ]  } ‰|g‰¢­Ž j                  «       –— Œ y ­wrR   rž   r    s     €€r   rF   z%_updateNameRecords.<locals>.<genexpr>à   s)   øè ø€ ò )Ø67‘˜Ð%˜HÒ%×/Ñ/×1ñ)ùr¢   c              3   óL   •K  — | ]  } ‰|g‰¢­Ž j                  «       –— Œ y ­wrR   rž   r    s     €€r   rF   z%_updateNameRecords.<locals>.<genexpr>î   s)   øè ø€ ò $
Ø23‰G�AÐ!˜Ò!×+Ñ+×-ñ$
ùr¢   )r,   r2   Ú_isRibbir$   rš   rp   rI   r[   rx   rŸ   Ú_updateNameTableStyleRecords)r4   ry   Ú	nametabler8   re   ÚaxisValueNameIDsr¡   ÚribbiNameIDsÚnonRibbiNameIDsÚelidedNameIDÚelidedNameIsRibbiÚ	platformsÚsubFamilyNameÚtypoSubFamilyNameÚfamilyNameSuffixrš   r›   s                  @@r   rb   rb   É   s�  ù€ à˜‘€IØ�6‰?× Ñ €Dà/9Ö:¨!˜Ÿ›Ð:ÐÐ:Ø/ÖJ˜!´8¸IÀqÕ3I’AÐJ€LÐJØ"2ÖL˜Q°a¸|Ò6K’qÐL€OÐLØ×,Ñ,€LÜ  ¨LÓ9Ðà×Ñ€GÜÑSÀ9Ç?Á?ÔSÓS€IØò "
ˆÜÔG°1°a¸Ð2FÔGÔGð àŸ™ô !
Ø7Cô!
ó 
ˆñ Ø #§¡ô )Ø;Kô)ó !Ñð !%Ðñ !©Ù Ù '¨Ð @°xÒ @× JÑ JÓ L‘á$+¨LÐ$D¸8Ò$D×$NÑ$NÓ$PÐ!àŸ8™8ô $
Ø7Fô$
ó 
Ðô 	%ØØØØð		
ð
 ô	
ñ9"
ùò ;ùÚJùÚLs   ›E´E ÁE Á	E%ÁE%c                 óZ   — | j                  |ddd«      }|�|j                  «       dv rdS dS )Nr
   r   é	  )ÚRegularÚItalicÚBoldzBold ItalicTF)rš   rŸ   )r§   r;   ÚenglishRecords      r   r¥   r¥   û   sF   € Ø×%Ñ% f¨a°°EÓ:€Mð Ð$Ø×#Ñ#Ó%Ð)UÑUð 	ðð ð	r   c                 ó*  — | d   }|||f} |j                   t        j                  g|¢­Ž xs!  |j                   t        j                  g|¢­Ž }	 |j                   t        j                  g|¢­Ž xs!  |j                   t        j
                  g|¢­Ž }
t        |	|
g«      st        d|› �«      ‚|	j                  «       }	|
j                  «       }
t        j                  |	t        j
                  |xs di}|rM|	› d|› �j                  «       |t        j                  <   |	|t        j                  <   ||t        j                  <   n7t        j                  t        j                  fD ]  }|j                  |¬«       Œ |j                  t        j                  «      xs |t        j                     }|j                  t        j                  «      xs |t        j
                     }|› d|› �|t        j                  <   t        | |||«      |t        j                  <   t        | ||«      }|r||t        j                   <   |j#                  «       D ]"  \  }}|sJ |«       ‚ |j$                  ||g|¢­Ž  Œ$ d| vr |j                  t        j&                  «       y y )Nr?   z.Missing required NameIDs 1 and 2 for platform r³   rœ   )r;   r!   )rš   r   r   r   r   r   r[   rV   rŸ   ÚstripÚremoveNamesÚgetr   Ú_updatePSNameRecordr   Ú_updateUniqueIdNameRecordr   ÚitemsÚsetNamer   )r4   r°   r®   r¯   rB   r˜   rC   r§   r›   ÚcurrentFamilyNameÚcurrentStyleNameÚnameIDsr;   ÚnewFamilyNameÚnewStyleNameÚuniqueIDÚstrings                    r   r¦   r¦     s¢  € ð ˜‘€IØ˜I vÐ.€Hà)˜	×)Ñ)Ü×&Ñ&ðØ)1òò :à	ˆ×	Ñ	œ6×-Ñ-Ð	9°Ò	9ð ð )�y×(Ñ(Ü×)Ñ)ðØ,4òò =à	ˆ×	Ñ	œ6×0Ñ0Ð	<°8Ò	<ð ô Ð!Ð#3Ð4Ô5ÜÐIÈ(ÈÐTÓUÐUà)×3Ñ3Ó5ÐØ'×1Ñ1Ó3Ðô 	×ÑÐ-Ü×Ñ˜}Ò9°	ð€Gñ Ø):Ð(;¸1Ð=MÐ<NÐ&O×&UÑ&UÓ&Wˆ”×"Ñ"Ñ#Ø2Cˆ”×.Ñ.Ñ/Ø5Fˆ”×1Ñ1Ò2ô
 ×*Ñ*Ü×-Ñ-ð
ò 	1ˆFð ×!Ñ!¨Ð!Õ0ð		1ð 	�‰”F×2Ñ2Ó3ÒR°w¼v×?QÑ?QÑ7Rð ð 	�‰”F×5Ñ5Ó6ÒX¸'Ä&×BWÑBWÑ:Xð ð )6 °a¸°~Ð%F€GŒF×!Ñ!Ñ"Ü&9Ø� ¨hó'€GŒF×"Ñ"Ñ#ô )¨°'¸8ÓD€HÙØ19ˆ”×-Ñ-Ñ.à!Ÿ-™-›/ò 5‰ˆ�ÙÐ�vÓˆvØˆ	×Ñ˜& &Ð4¨8Ô4ð5ð �WÑØ×Ñœf×FÑFÕGð r   c                 óä   — | d   } |j                   t        j                  g|¢­Ž }|r|j                  «       }n|}|› d|› �}t	        j
                  dd|«      }t        |«      dkD  r|d d › d�S |S )Nr?   ú-z[^A-Za-z0-9-]rG   é   é|   z...)rš   r   r   rŸ   ÚreÚsubr…   )r4   Ú
familyNameÚ	styleNamer›   r§   Úfamily_prefixÚpsNames          r   r»   r»   J  s“   € ð ˜‘€Ià%�I×%Ñ%Ü×0Ñ0ðØ3;ò€Mñ Ø%×/Ñ/Ó1‰à"ˆàˆ˜a 	˜{Ð+€Fô �V‰VÐ$ c¨6Ó2€Fä
ˆ6ƒ{�SÒð ˜˜#�,�˜sÐ#Ð#Ø€Mr   c                 ó>  — | d   } |j                   t        j                  g|¢­Ž }|sy t        j                  t        j                  fD ]u  } |j                   |g|¢­Ž }|sŒ|j                  «       |j                  «       v sŒ:|j                  «       j                  |j                  «       ||j                     «      c S  t        | |«      }| d   j                  }t        j                  dd|«      j                  «       }	|t        j                     }
|› d|	› d|
› �S )Nr?   zOS/2z[^\x00-\x7F]rG   ú;)rš   r   r   r   r   rŸ   Úreplacer;   Ú_fontVersionÚ	achVendIDrÊ   rË   r¸   )r4   rÁ   r›   r§   ÚcurrentRecordr;   Ú
nameRecordÚfontVersionrÔ   ÚvendorrÏ   s              r   r¼   r¼   d  s  € Ø˜‘€IØ%�I×%Ñ%¤f×&CÑ&CÐOÀhÒO€MÙØô ×(Ñ(¬&×*@Ñ*@ÐAò ˆØ&�Y×&Ñ& vÐ9°Ò9ˆ
ÙØØ×ÑÓ! ]×%<Ñ%<Ó%>Ò>Ø ×*Ñ*Ó,×4Ñ4Ø×$Ñ$Ó&¨°
×0AÑ0AÑ(Bóò ðô ˜w¨Ó1€KØ˜‘×)Ñ)€Iä�V‰V�O R¨Ó3×9Ñ9Ó;€FØ”V×+Ñ+Ñ,€FØˆ]˜!˜F˜8 1 V HÐ-Ð-r   ©r
   r   r²   c                 óò   —  | d   j                   t        j                  g|¢­Ž }|€| d   j                  d›S |j	                  «       j                  d«      d   }|j                  d«      j                  «       S )Nr?   Úheadz.3frÑ   r   zVersion )rš   r   r   ÚfontRevisionrŸ   ÚsplitÚlstripr¸   )Úfontr›   rÖ   ÚversionNumbers       r   rÓ   rÓ   }  sx   € Ø%��f‘×%Ñ%¤f×&;Ñ&;ÐG¸hÒG€JØÐØ�v‘,×+Ñ+¨CÐ0Ð1ð ×(Ñ(Ó*×0Ñ0°Ó5°aÑ8€MØ×Ñ 
Ó+×1Ñ1Ó3Ð3r   )rÙ   )Ú__doc__Ú
contextlibr   Úcopyr   Úenumr   rÊ   r   r`   r<   rM   ri   r]   ra   rb   r¥   r¦   r»   r¼   rÓ   r   r   r   ú<module>rå      s�   ðÙ 3å %Ý Ý Û 	ô	+ˆWô 	+ð Ð ò7ð. ñ ó ð ò2:1òzCòB;òD/
òdð ØØóBHòJò4.ô24r   