L if:dZddlmZddlmZddlmZddlZGddeZdZ d Z ed Z d Z d Z d ZdZdZ ddZdZdZddZy)z-Helpers for instantiating name table records.)contextmanager)deepcopy)IntEnumNc0eZdZdZdZdZdZdZdZdZ dZ d Z y ) NameIDN) __name__ __module__ __qualname__ FAMILY_NAMESUBFAMILY_NAMEUNIQUE_FONT_IDENTIFIERFULL_FONT_NAMEVERSION_STRINGPOSTSCRIPT_NAMETYPOGRAPHIC_FAMILY_NAMETYPOGRAPHIC_SUBFAMILY_NAME!VARIATIONS_POSTSCRIPT_NAME_PREFIXf/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/fontTools/varLib/instancer/names.pyrr s3KNNNO !#(*%rrr cg}d|vr|d}|jD]}|j|j|jD]H}|j|j|j dk7s.|j|j Jd|vr|dj }|jr|jjndD]}|j|j|jr|jjndD]}|j|jt|dd}||j||Dchc] }|dkDs | c}Scc}w)NfvarSTATrElidedFallbackNameID)axesappend axisNameID instancessubfamilyNameIDpostscriptNameIDtableDesignAxisRecordAxis AxisNameIDAxisValueArray AxisValue ValueNameIDgetattr) varfontusedr!axisinstancestatvalueelidedFallbackNameIDnameIDs rgetVariationNameIDsr<sB D vII )D KK ( ) 7H KK00 1((F2 H556 7v$$262G2GD))..R )D KK ( )6:6I6IT((22r +E KK)) * +&t-CTJ  + KK, -!% 6v#F 66 6s  E E c#FKddlm}t|}d|jd|t|z }|djDcgc]}|j |vs|c}|djddd|vr$t d|djDs|d=yyycc}ww)Nr)logzPruning name tablenameltagc3\K|]$}|jdk(r|jdk7r|&yw)rr"N) platformIDlangID).0records r z%pruningUnusedNames..As1   A%&--6*A  s*,)r>r<infonamesr;any)r4r> origNameIDsexcluderEs rpruningUnusedNamesrM/s%g.K HH !"/88G$V_22 fmm76R GFO!  !&///     sAB!BB AB!c^ddlm}m}d|vr td|dj}|j s td|d}||j |}|j}|jDcic]}|j|j}}|i||} td| jDsJ||| } t|| | j| D cgc]} | jt zr| } } t#| } t%|| ycc}wcc} w) a3Update 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) AxisLimitsaxisValuesFromAxisLimitsr#z6Cannot update name table since there is no STAT table.z.ysJ!qyyAII%Js#%N)rGrOrP ValueErrorr,r0limitAxesAndPopulateDefaultsdefaultLocationr&axisTag defaultValueallvaluescheckAxisValuesExistpinnedLocationFlagsELIDABLE_AXIS_VALUE_NAME_sortAxisValues_updateNameRecords) r4 axisLimitsrOrPr8r!partialDefaultsa fvarDefaultsdefaultAxisCoordsaxisValueTablesrUs rupdateNameTableriIs2@7 WQRR 6? D   WXX 6?D J'DDWMJ 002O7;yyA!AIIq~~-ALA"#Fl#Fo#FG J/@/G/G/IJ JJ J.t5FGO0A0P0P0RS#!''4L*LO&o6Ow0Bs8D%.D*D*ct}|jj}t}|jjD]}|j dvr)|j ||jj:|j dk(sJ|jD]*}|j ||jj,|D]}|j } |j dvrW||jj} | dk(r |j} n |j} | vsY| | k(sb|j | t|j dk(s|jD]D}||jj} | vs!|j| k(s4|j | Ft|z |z} | r)djfd| D} td| dy)N)rr r r r z, c34K|]}d|d|yw)'z': Nr)rDi axisCoordss rrFz'checkAxisValuesExist..s"K!as#jm_5KszCannot find Axis Values {})setr-r.r0r1Formatadd AxisIndexAxisTagAxisValueRecord NominalValueValuejoinrV)r8 axisValuesrnseen designAxes hasValuesr9recaxisValueTableaxisValueFormatrY axisValue missingAxesmissings ` rr]r]s 5D&&++JI$$..A <<9 $ MM*U__5== > \\Q ,, A j7??@ A A%&(//  I - !9!9:BBG!#*77 *00 *$j6I)I!  " "a '%55 &$S]]3;;j(SYY*W:M-MHHW% && z?T)Y6K))K{KK5gYbABBrcg}t}t|Dcgc]}|jdk(s|c}dd}|D]G}td|jD}t |}||zr0||z}|j ||fI|D]<}||vr|j }||vs|j||j ||f>t|D cgc]\} } |  c} } Scc}wcc} } w)Nr c,t|jSrR)lenru)rUs rz!_sortAxisValues..sc!++,rT)keyreversec34K|]}|jywrR)rsrDrs rrFz"_sortAxisValues..sC!!++Cs)rpsortedrqruminr'rsrr) ryresultsseenAxesrUformat4val axisIndexesminIndex axisIndex_rs rrarasGuH0q!((a-0 ,G ,Cs/B/BCC {#+%  #H NNHc? + ,- '> MM H $ LL # NNIs+ , -+1/ :,!YI ::) 1( ;sC%C% C*c|d}|dj}|Dcgc]}|j}}|Dcgc]}t||s|}}|Dcgc] }||vs| }}|j} t|| } |jt d|j D} | D]tfddd| fDsdjfd|D} |rdjfd |D} nd} | s3| s1| r| gj} n| gj} djfd |D}t||| | gycc}wcc}wcc}w) Nr?r#c3bK|]'}|j|j|jf)ywrR)rB platEncIDrCrs rrFz%_updateNameRecords..s#SaQ\\1;;9Ss-/c30K|] }|gywrRr)rDrmgetNameplatforms rrFz%_updateNameRecords..sGQ71(x(Gsrr  c3LK|]}|gjywrR toUnicoderDnrrs rrFz%_updateNameRecords..s)! 23GA ! ! + + -! !$c3LK|]}|gjywrRrrs rrFz%_updateNameRecords..s))67%H%//1)rc3LK|]}|gjywrRrrs rrFz%_updateNameRecords..s)$ 23GA ! ! + + -$ r) r,r2_isRibbir$rrprIr[rxr_updateNameTableStyleRecords)r4ry nametabler8reaxisValueNameIDsr ribbiNameIDsnonRibbiNameIDs elidedNameIDelidedNameIsRibbi platforms subFamilyNametypoSubFamilyNamefamilyNameSuffixrrs @@rrbrbsI 6? D/9:! ::/J!8Iq3IAJLJ"2LQa|6KqLOL,,L L9GS9??SSI" G1a2FGG ! 7C!    #);K)! !% ! ' @x @ J J L $+L$D8$D$N$N$P!88$ 7F$   %        9" ;JLsEE E  E%E%cZ|j|ddd}||jdvrdSdS)Nr r )RegularItalicBoldz Bold ItalicTF)rr)rr; englishRecords rrrsF%%faE:M  $  # # %)U U  rc*|d}|||f}|jtjg|xs!|jtjg|} |jtjg|xs!|jtj g|} t | | gstd|| j} | j} tj| tj |xsdi} |rM| d|j| tj<| | tj<|| tj<n7tjtjfD]} |j| | jtjxs| tj} | jtjxs| tj }| d|| tj<t|| ||| tj<t|| |}|r|| tj <| j#D]"\} }|sJ| |j$|| g|$d|vr |jtj&yy)Nr?z.Missing required NameIDs 1 and 2 for platform rr)r;r!)rrrrrrr[rVrstrip removeNamesgetr_updatePSNameRecordr_updateUniqueIdNameRecordritemssetNamer)r4rrrrBrrCrrcurrentFamilyNamecurrentStyleNamenameIDsr; newFamilyName newStyleNameuniqueIDstrings rrrsIIv.H) ))&&)1:   6-- 9 9)y(()),4=   600 <8 < !#34 5I(TUU)335'113 -}9 G):(;1=M|d}|jtjg|}|sytjtjfD]u}|j|g|}|s|j |j vs:|j j |j ||jcSt||}|dj}tjdd|j} |tj} |d| d| S)Nr?zOS/2z [^\x00-\x7F]rG;) rrrrrrreplacer; _fontVersion achVendIDrrr) r4rrr currentRecordr; nameRecord fontVersionrvendorrs rrrdsI%I%%f&C&COhOM ((&*@*@A&Y&&v99      !]%<%<%> > **,44$$& 0A0A(B  w1K))I VVOR 3 9 9 ;F V++ ,F]!F81VH --rr rrc|djtjg|}||djdS|j j dd}|j djS)Nr?headz.3frrzVersion )rrr fontRevisionrsplitlstripr)fontrr versionNumbers rrr}sx%f%%f&;&;GhGJv,++C01((*005a8M    + 1 1 33r)r)__doc__ contextlibrcopyrenumrrrr`r<rMrir]rarbrrrrrrrrrs3%  +W +7.  2:1zCB;D/ d BHJ4.24r