davelab6 / opensans-1

Open Sans font
Other
8 stars 3 forks source link

Components: Rotated or scaled components #36

Closed pichotta closed 4 years ago

pichotta commented 4 years ago

Hi @m4rc1e,

The current OpenSans sources have quite a few complex component transformations. Glyphs that have components which have been scaled, rotated, or both. This treatment has been reported to cause issues with VTT hinting.

for e.g. there are about 300 occurrences the Regular. However, many of them exist within the larger Noto glyph repertoire (3,818) and many may not have a big impact on the file size of the subset of the generated OpenSans (1,150).

Which ones of these would you like decomposed? or none? We could handle this in a branch. 1) rotated components 2) scaled components 3) scaled and rotated components

(cc: @davelab6, @moyogo, @djrrb, @mikedug)

Example from Regular: oe in uni1D14 uni046B in uni2DFE g.salt in uni1D77.salt afii10094 in uniA67A afii10074 in uniA675 uni0281 in uni02B6 uni1C87 in uni2DFA adieresis in uni1DF2 uni0271 in uni1DAC greater in uni02C3 F in TurnedF afii10068 in uni2DE2 uni025B in uni1D4B g.salt in gcomb.salt E in uni1D31 v in uni1D65 r in rcomb afii10085 in uniA677 r in uni1D63 X in uniA670 X in uniA670 X in uniA670 X in uniA670 X in uniA670 X in uniA670 X in uniA670 X in uniA670 afii10073 in uni2DE5 gamma in uni1D5E U in uni1D41 chi in uni1D6A g in uni1D77 h in uni02B0 afii10065 in uni2DF6 k in kinferior j in subscriptj m in uni026F v in uni1D20 K in uni1D37 phi in uni1D69 W in uni1D42 B in uni1D2F u in ucomb uni2C6D in uni2C70 l in linferior c in ccomb uni1D09 in uni1D4E udieresis in uni1DF4 uniAB52 in uniAB5F i in icomb I.salt in uni1D35.salt m in minferior v in uni028C d in uni1D48 s in uni02E2 d in dcomb uni0275 in uni1DB1 Hbar in uniA7F8 e in uni1D49 r in rbelowcomb uniFE20 in uniFE27 u in uni1D58 m in mcomb S in uniA644 afii10088 in uni2DF0 M in uni1D39 eth in ethcomb R in uni1D3F i in imod uni029F in uni1DAB v in vcomb eopenreversed in uni1D9F uniA649 in uni2DF8 oe in uniA7F9 afii10093 in uniA679 I.salt in uniA7F7.salt dagger in turneddagger afii10082 in uni2DEC G in turnedSansSerifG a in uni1D43 uni029Ddotless in uni1DA8dotless afii10094 in uniA69D semicolon in turnedsemicolon ampersand in ampersandturned h in hinferior uni0465 in uniA69F n in ncomb t in tinferior i in uni1D62 p in uni1DEE k in uni1D4F t in uni1D57 afii10089 in uni2DF1 beta in uni1D66 uniA700 in uniA706 question in questiondown f in uni1DA0 k in kturned uni0273 in uni1DAF uni1D17 in uni1D55 gamma in uni1D67 uni0289 in uni1DB6 uni1D02 in uni1D46 h in hcomb semicolon in reversedsemicolon g in gcomb oe in uniAB42 eng in uni1D51 p in pinferior uni0254 in uni1D53 phi in uni1D60 T in uni1D40 uni0473 in uni2DF4 uni0251 in uni1DE7 uni0283 in uni1DEF afii10096 in uniA655 o in ocomb uni0266 in uni02B1 afii10066 in uni2DE0 c in uni1D12 uni0283 in uni1DB4 uni0259 in uni1D4A n in nsuperior afii10091 in uni2DF3 beta in uni1DE9 afii10104 in uniA676 afii10084 in uni2DEE h in uni0265 uni0294 in uni0295 B in uni1D2E uni0279 in uni02B4 V in Vmod l in uni02E1 ccedilla in ccedillacomb T in uniA7B1 delta in uni1D5F z in zcomb uni0280 in uni0281 r in uni0279 uniA64B in uni2DF9 uni0261 in uni1DA2 uni0250 in uni1D44 O in uni1D3C w in uni1DF1 afii10072 in uni2DE4 quotedblbase in uni2E42 comma in turnedcomma uniA77D in uniA77E z in uni1DBB afii10088 in uniA661 a in uni2090 x in uni02E3 undertie in invertedundertie afii10081 in uni2DEB o in uni1D11 uniA668 in uniA66E uniA668 in uniA66E uniA668 in uniA66E uniA668 in uniA66E uniA668 in uniA66E uniA668 in uniA66E uniA668 in uniA66E t in tcomb A in uni1D2C uni026A in uni1DA6 o in uni1D52 uniAB37 in uniAB5D ae in aecomb afii10092 in uniA69C uni0461 in uniA67B k in kcomb uni026D in uni1DA9 y in uni028E e in uni0258 uni0265 in uni1DA3 uni1D25 in uni1D5C u in uni1D64 f in uni1DEB afii10078 in uni2DE8 afii10067 in uni2DE1 N in uni1D3A c in uni1D9C uni02E9 in uniA712 uni01AB in uni1DB5 oe in uniAB40 w in uni028D e in ecomb L in turnedSansSerifL uniA727 in uniAB5C eth in uni1D9E delta in uni018D y in uni02B8 uni026B in uniAB5E uni0270 in uni1DAD H in uni1D34 K in uniA7B0 G in uni1D33 afii10040 in uniA660 uni02E8 in uniA713 oe in uniAB41 iota in turnediota l in lcomb w in uni02B7 s in uniA645 c in uniAB62 uni02E6 in uniA715 uni0274 in Ncomb uni0222 in uni1D3D x in xcomb b in uni1D47 n in ninferior uni0295 in uni02E4 jdotless in uni02B2dotless uniAB50 in uniAB51 a in acomb uni0272 in uni1DAE paragraph in reversedparagraph j in uni02B2 uniFE20 in uniFE28 uni029F in Lcomb P in uni1D3E breve in uniAB5B hungarumlaut in uni02F5 uni02C4 in uni02C5 uni025F in uni1DA1 rho in uni1D68 uni1D16 in uni1D54 uni0280 in Rcomb longs in longscomb uni0278 in uni1DB2 L in uniA780 beta in uni1D5D x in uni2093 afii10083 in uni2DED J.salt in uni1D36.salt A in Turneda afii10080 in uni2DEA u in uni1DF0 uni1AB9 in uni1DF0 comma in uni2E41 a in uni0250 interrobang in invertedinterrobang uni028B in uni1DB9 uni02C0 in uni02C1 J in uni1D36 Y in turnedSansSerifY I in uni1D35 bracketleft in uniA671 bracketleft in uniA671 Ohm in Ohminverted uni029D in uni1DA8 o in uni2092 afii10069 in uni2DE3 uni0251 in uni1D45 uni0262 in Gcomb uniA735 in aocomb chi in uni1D61 udieresis in uni1D1E uni1D7B in uni1DA7 uni1D85 in uni1DAA L in uni1D38 uni0282 in uni1DB3 uni1D1C in uni1DB8 F in uniA7FB afii10070 in uni2DF7 theta in uni1DBF afii10101 in uniA674 P in uniA7FC uni0274 in uni1DB0 b in uni1DE8 iotaLatin in uni1DA5 AE in uni1D2D uni0255 in uni1D9D afii10090 in uni2DF2 idotless in uni1D62dotless uni018E in uni1D32 uni0251 in uni0252 s in scomb D in uni1D30 less in uni02C2 m in uni1D50 uni046D in uni2DFF uni0263 in uni02E0 n in uni1D1D afii10087 in uni2DEF oslash in uni1D13 uni028C in uni1DBA uni028A in uni1DB7 uni0252 in uni1D9B r in uni02B3 uni027B in uni02B5 uni0268 in uni1DA4 uni0259 in uni2094 uni0467 in uni2DFD Q in RotatedQ v in uni1D5B m in uni1D1F uniA657 in uni2DFC uniA75B in rrotundacomb e in uni2091 o in uni1DED uni1AB9 in uni1DED M in uniA7FD uniA76F in uniA770 uni1D79 in uniA77F afii10096 in uni2DFB afii10079 in uni2DE9 uni0290 in uni1DBC uni0259 in uni1DEA afii10079 in uni1D78 I in uniA7F7 afii10092 in uniA678 uni0292 in uni1DBE uni1D1D in uni1D59 uniAB38 in uni1DEC afii10076 in uni2DE6 s in sinferior odieresis in uni1DF3 uni0291 in uni1DBD question in reversedquestionmark uni1D0D in Mcomb uniFE22 in uniFE2A g in uni1D4D afii10077 in uni2DE7 uni026F in uni1D5A uniA739 in avcomb uniA77A in insulardcomb t in tturned L in reversedSansSerifL p in uni1D56 uni1D08 in uni1D4C

mikedug commented 4 years ago

Hi

I ran OpenSans[wght].ttf in the VTT Autohinter Light.

from

https://github.com/TypeNetwork/opensans-1/tree/master/fonts/variable

VTT Light Autohinter reports the following glyphs with errors. note below, this was the latest information I had from Microsoft regarding these errors. I can follow up to see if there is a fix. If the fonts are to be prepared for VTT Hinting, I would recommend making these glyphs as uniques.

I can take a look at the other Variable fonts in this share to list out the problematic glyphs.

let me if this is helpful.


OpenSans[wght].ttf

Glyf Pgm, glyph 535 (Unicode 0x207f), line 4: Composite, Cannot change composite definition in a variation font. Glyf Pgm, glyph 1012 (Unicode 0x2095), line 4: Composite, Cannot change composite definition in a variation font. Glyf Pgm, glyph 1023 (Unicode 0x2096), line 4: Composite, Cannot change composite definition in a variation font. Glyf Pgm, glyph 1027 (Unicode 0x2097), line 4: Composite, Cannot change composite definition in a variation font. Glyf Pgm, glyph 1032 (Unicode 0x2098), line 4: Composite, Cannot change composite definition in a variation font. Glyf Pgm, glyph 1040 (Unicode 0x2099), line 4: Composite, Cannot change composite definition in a variation font. Glyf Pgm, glyph 1059 (Unicode 0x209a), line 4: Composite, Cannot change composite definition in a variation font. Glyf Pgm, glyph 1096 (Unicode 0x209b), line 4: Composite, Cannot change composite definition in a variation font. Glyf Pgm, glyph 1115 (Unicode 0x209c), line 4: Composite, Cannot change composite definition in a variation font.

6TH FEBRUARY 2020 This error is telling that the composite code is changing which is bad for a variation font. During assembly of a variation font, VTT checks to make sure the existing binary of glyph composite signature does not change after compile. The autohinter rewrites the text composite signature from the binary and in this case when it’s assembled it is different from what was there before in binary. After some investigation there appears to be a rounding issue in VTT. Still working on a fix.

moyogo commented 4 years ago

For the transformed components, they can be decomposed in the sources or with fontmake/ufo2ft when building the TTFs with the ufo2ft decomposeComponents filter (for example c81d7a2b0fdbc36d8b695924da21e6e6dc5d7a95 in the decompose-transformed-components branch).

pichotta commented 4 years ago

@moyogo I compared the Regular with the Italic and the list of transformed components are different by approx 33 glyphs. The /O for example in the Italic is listed twice.

Here are the two lists.

OS-romans_complexComponents.txt

OS-italics_complexComponents.txt

There are two glyphs shared by both slopes that has a different unicode as the reference. I will open two Issues to deal with in the second phase, after the normal subsetted set is complete.