
    hf:                         S r SSKJr  SSKJr  SSKJr  SSKr " S S\5      rSr	S	 r
\S
 5       rS rS rS rS rS r   SS jrS rS rSS jrg)z-Helpers for instantiating name table records.    )contextmanager)deepcopy)IntEnumNc                   8    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrg)NameID	                               N)__name__
__module____qualname____firstlineno__FAMILY_NAMESUBFAMILY_NAMEUNIQUE_FONT_IDENTIFIERFULL_FONT_NAMEVERSION_STRINGPOSTSCRIPT_NAMETYPOGRAPHIC_FAMILY_NAMETYPOGRAPHIC_SUBFAMILY_NAME!VARIATIONS_POSTSCRIPT_NAME_PREFIX__static_attributes__r       R/var/www/html/env/lib/python3.13/site-packages/fontTools/varLib/instancer/names.pyr   r   	   s3    KNNNO !#(*%r!   r   r
   c                    / nSU ;   a  U S   nUR                    H  nUR                  UR                  5        M      UR                   HK  nUR                  UR                  5        UR
                  S:w  d  M0  UR                  UR
                  5        MM     SU ;   a  U S   R                  nUR                  (       a  UR                  R                  OS H  nUR                  UR                  5        M      UR                  (       a  UR                  R                  OS H  nUR                  UR                  5        M      [        USS 5      nUb  UR                  U5        U Vs1 s H  oS:  d  M
  UiM     sn$ s  snf )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?      s8   DvIIDKK( HKK001((F2H556 ' v$$262G2GD))..RODKK( P6:6I6IT((22rQEKK))* R&t-CTJ+KK,-!%6v#F666s   '	E=4E=c              #   ^  #    SSK Jn  [        U 5      nS v   UR                  S5        U[        U 5      -
  nU S   R                   Vs/ s H  oDR
                  U;  d  M  UPM     snU S   R                  S S & SU ;   a)  [        S U S   R                   5       5      (       d  U S	 g g g s  snf 7f)Nr	   )logzPruning name tablenameltagc              3   n   #    U  H+  nUR                   S :X  d  M  UR                  S:w  d  M'  Uv   M-     g7f)r   r%   N)
platformIDlangID).0records     r"   	<genexpr>%pruningUnusedNames.<locals>.<genexpr>A   s8      
/  A% *0--6*A F/s   55	5) rA   r?   infonamesr>   any)r7   rA   origNameIDsexcluderH   s        r"   pruningUnusedNamesrQ   /   s     %g.K	HH!"/88G$V_22 26mm76R2 GFO! 
  
!&///
 
 

 
  s   AB-B(B(%AB-c                    SSK JnJn  SU ;  a  [        S5      eU S   R                  nUR
                  (       d  [        S5      eU S   nU" U5      R                  U 5      nUR                  5       nUR                   Vs0 s H  owR                  UR                  _M     nnU" 0 UEUE5      n	[        S U	R                  5        5       5      (       d   eU" XI5      n
[        XJU	R                  5       5        U
 Vs/ s H  oR                  [         -  (       a  M  UPM      n
n[#        U
5      n
[%        X
5        gs  snf s  snf )	a  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   R   #    U  H  oR                   UR                  :H  v   M     g 7fN)minimummaximum)rG   vs     r"   rI   "updateNameTable.<locals>.<genexpr>y   s     J/I!yyAII%/Is   %'N)rK   rS   rT   
ValueErrorr/   r3   limitAxesAndPopulateDefaultsdefaultLocationr)   axisTagdefaultValueallvaluescheckAxisValuesExistpinnedLocationFlagsELIDABLE_AXIS_VALUE_NAME_sortAxisValues_updateNameRecords)r7   
axisLimitsrS   rT   r;   r$   partialDefaultsafvarDefaultsdefaultAxisCoordsaxisValueTablesrY   s               r"   updateNameTablern   I   s-   @ 7WQRR6?  DWXX6?D
 J'DDWMJ 002O7;yyAy!IIq~~-yLA"#Fl#Fo#FGJ/@/G/G/IJJJJJ.tGO0A0P0P0RS #"a''4L*L?   &o6Ow0 Bs   ? D8:D=D=c                   ^ [        5       nU R                  R                  n[        5       nU R                  R                   H  nUR
                  S;   a)  UR                  XFR                     R                  5        M<  UR
                  S:X  d  MN  UR                   H*  nUR                  XGR                     R                  5        M,     M     U H  nUR
                  n	UR
                  S;   a]  XHR                     R                  n
U	S:X  a  UR                  nOUR                  nU
T;   a  UTU
   :X  a  UR                  U
5        Mx  Mz  M|  UR
                  S:X  d  M  UR                   HI  nXGR                     R                  n
U
T;   d  M#  UR                  TU
   :X  d  M8  UR                  U
5        MK     M     [        T5      U-
  U-  nU(       a*  SR                  U4S jU 5       5      n[        SU S35      eg )N)r	   r
   r   r   r
   z, c              3   :   >#    U  H  nS U STU    3v   M     g7f)'z': Nr   )rG   i
axisCoordss     r"   rI   'checkAxisValuesExist.<locals>.<genexpr>   s"     K{!as#jm_5{s   zCannot find Axis Values {})setr0   r1   r3   r4   Formatadd	AxisIndexAxisTagAxisValueRecordNominalValueValuejoinr[   )r;   
axisValuesrs   seen
designAxes	hasValuesr<   recaxisValueTableaxisValueFormatr^   	axisValuemissingAxesmissings     `           r"   rb   rb      s   5D&&++JI$$..<<9$MM*__5==>\\Q,,j7??@ -	 / %(//  I- !9!9:BBG!#*77	*00	*$j6I)I! *J$""a'%55$]]3;;j(SYY*W:M-MHHW% 6 %  z?T)Y6K))K{KK5gYbABB r!   c                    / n[        5       n[        U  Vs/ s H  o3R                  S:X  d  M  UPM     snS SS9nU HK  n[        S UR                   5       5      n[	        U5      nX&-  (       a  M5  X&-  nUR                  Xu45        MM     U  H@  nXT;   a  M
  UR                  nX;  d  M  UR                  U5        UR                  X45        MB     [        U5       V	V
s/ s H  u  pU
PM	     sn
n	$ s  snf s  sn
n	f )Nr   c                 ,    [        U R                  5      $ rV   )lenr{   )rY   s    r"   <lambda>!_sortAxisValues.<locals>.<lambda>   s    c!++,r!   T)keyreversec              3   8   #    U  H  oR                   v   M     g 7frV   )ry   rG   rs     r"   rI   "_sortAxisValues.<locals>.<genexpr>   s     C/B!++/Bs   )rv   sortedrw   r{   minr*   ry   rx   )r   resultsseenAxesrY   format4valaxisIndexesminIndex	axisIndex_r   s              r"   rf   rf      s     GuH0Jq((a-J0,G Cs/B/BCC{#%%#HNNH?+  >MM	$LL#NNI+,  +1/:/,!I/::) 	1( ;s   C2C2 C7c                 0  ^^ U S   nU S   R                   nU Vs/ s H  oDR                  PM     nnU Vs/ s H  n[        X&5      (       d  M  UPM     nnU Vs/ s H  ofU;  d  M
  UPM     nnUR                  n	[        X)5      n
UR                  m[        S UR                   5       5      nU H  m[        UU4S jSSU	4 5       5      (       d  M#  SR                  UU4S jU 5       5      nU(       a  SR                  UU4S	 jU 5       5      nOS nU(       d=  U(       d6  U
(       a  T" U	/TQ76 R                  5       nOT" U	/TQ76 R                  5       nSR                  UU4S
 jU 5       5      n[        U UUU/TQ76   M     g s  snf s  snf s  snf )NrB   r&   c              3   f   #    U  H'  oR                   UR                  UR                  4v   M)     g 7frV   )rE   	platEncIDrF   r   s     r"   rI   %_updateNameRecords.<locals>.<genexpr>   s!     S?a\\1;;9?s   /1c              3   6   >#    U  H  nT" U/TQ76 v   M     g 7frV   r   )rG   rr   getNameplatforms     r"   rI   r      s     G2FQ71(x(2Fs   r	   r
    c              3   R   >#    U  H  nT" U/TQ76 R                  5       v   M     g 7frV   	toUnicoderG   nr   r   s     r"   rI   r      s*      !
7C!GA!!++--|   $'c              3   R   >#    U  H  nT" U/TQ76 R                  5       v   M     g 7frV   r   r   s     r"   rI   r      s+      );Ka%H%//11;Kr   c              3   R   >#    U  H  nT" U/TQ76 R                  5       v   M     g 7frV   r   r   s     r"   rI   r      s*      $
7F!GA!!++--r   )r/   r5   _isRibbir'   r   rv   rM   r`   r~   r   _updateNameTableStyleRecords)r7   r   	nametabler;   rj   axisValueNameIDsr   ribbiNameIDsnonRibbiNameIDselidedNameIDelidedNameIsRibbi	platformssubFamilyNametypoSubFamilyNamefamilyNameSuffixr   r   s                  @@r"   rg   rg      s   I6?  D/9:z!z:/J/!8I3IA/LJ"2L"2Q|6Kq"2OL,,L 9GS9??SSIG1a2FGGG  !
7C!
 
  # );K) ! !% !  ' @x @ J J L$+L$D8$D$N$N$P!88 $
7F$
 
 	%		

 	
9  ;JLs   F	FF	F'Fc                 `    U R                  USSS5      nUb  UR                  5       S;   a  S$ S$ )Nr   r	   	  )RegularItalicBoldzBold ItalicTF)r   r   )r   r>   englishRecords      r"   r   r      sF    %%faE:M $##%)UU 	 	r!   c                 z   U S   nXEU4nUR                   " [        R                  /UQ76 =(       d!    UR                   " [        R                  /UQ76 n	UR                   " [        R                  /UQ76 =(       d!    UR                   " [        R
                  /UQ76 n
[        X/5      (       d  [        SU 35      eU	R                  5       n	U
R                  5       n
[        R                  U	[        R
                  U=(       d    S0nU(       aK  U	 SU 3R                  5       U[        R                  '   X[        R                  '   X;[        R                  '   O6[        R                  [        R                  4 H  nUR                  US9  M     UR                  [        R                  5      =(       d    U[        R                     nUR                  [        R                  5      =(       d    U[        R
                     nU SU 3U[        R                  '   [        XX5      U[        R                  '   [        XU5      nU(       a  X[        R                   '   UR#                  5        H(  u  nnU(       d   U5       eUR$                  " UU/UQ76   M*     SU ;  a   UR                  [        R&                  5        g g )NrB   z.Missing required NameIDs 1 and 2 for platform r   r   )r>   r$   )r   r   r   r   r   r   r`   r[   r   stripremoveNamesgetr   _updatePSNameRecordr   _updateUniqueIdNameRecordr   itemssetNamer   )r7   r   r   r   rE   r   rF   r   r   currentFamilyNamecurrentStyleNamenameIDsr>   newFamilyNamenewStyleNameuniqueIDstrings                    r"   r   r     s    Iv.H!))&&)1 :			6--	9	9  !(()),4 =			600	<8	<  !45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
 **--
F !!!0	
 	F223Rwv?Q?Q7R  	F556X'&BWBW:X  )6a~%FGF!!"&9'GF""# )8DH19--.!--/vv&&484 * WfFFG r!   c                     U S   nUR                   " [        R                  /UQ76 nU(       a  UR                  5       nOUnU SU 3n[        R
                  " SSU5      n[        U5      S:  a  US S  S3$ U$ )NrB   -z[^A-Za-z0-9-]rK      |   z...)r   r   r   r   resubr   )r7   
familyName	styleNamer   r   family_prefixpsNames          r"   r   r   J  s     I%%003;M %//1"a	{+F VV$c62F
6{S #,s##Mr!   c                 Z   U S   nUR                   " [        R                  /UQ76 nU(       d  g [        R                  [        R                  4 H}  nUR                   " U/UQ76 nU(       d  M  UR                  5       UR                  5       ;   d  MC  UR                  5       R                  UR                  5       XR                     5      s  $    [        X5      nU S   R                  n[        R                  " SSU5      R                  5       n	U[        R                     n
U SU	 SU
 3$ )NrB   zOS/2z[^\x00-\x7F]rK   ;)r   r   r   r   r   r   replacer>   _fontVersion	achVendIDr   r   r   )r7   r   r   r   currentRecordr>   
nameRecordfontVersionr   vendorr   s              r"   r   r   d  s   I%%f&C&COhOM ((&*@*@A&&v99
!]%<%<%>> **,44$$&0A0A(B  B w1K))IVVOR399;FV++,F]!F81VH--r!   r   r	   r   c                     U S   R                   " [        R                  /UQ76 nUc  U S   R                  S $ UR	                  5       R                  S5      S   nUR                  S5      R                  5       $ )NrB   headz.3fr   r   zVersion )r   r   r   fontRevisionr   splitlstripr   )fontr   r   versionNumbers       r"   r   r   }  sv    f%%f&;&;GhGJv,++C01 ((*005a8M
+1133r!   )r   )__doc__
contextlibr   copyr   enumr   r   r   re   r?   rQ   rn   rb   rf   rg   r   r   r   r   r   r   r!   r"   <module>r      s    3 %   		+W 	+  7.    2:1zCB;D/
d BHJ4.24r!   