ufoProcessor
ufoProcessor copied to clipboard
Calculate instance values for openTypeOS2WidthClass, openTypeOS2WeightClass?
Under some conditions it should be possible to calculate meaningful values for openTypeOS2WidthClass and openTypeOS2WeightClass, when generating instances.
openTypeOS2WidthClass
wdth conditions:
- https://learn.microsoft.com/en-us/typography/opentype/spec/os2#uswidthclass
- value between 50 - 120 ?
openTypeOS2WeightClass
wght conditions:
- https://learn.microsoft.com/en-us/typography/opentype/spec/os2#usweightclass
- value between 100 - 900
General considerations:
- Anisotropic locations should not be a problem as these are horizontal attributes.
- Extrapolation: values could be clipped to prevent unexpected outcomes like negative values.
- Values are expected to be user space values, so appropriate mapping has to happen.
Pro: these can be fussy values to set in a build script. Width may be more difficult to get right as it only has 9 values it can be. Weight, on the other hand, has a bigger range. Con: not every designspace will fit the conditions and that means ufoOperator will not always to the math. And that may be confusing.
fontMath already does something with those info attributes: https://github.com/robotools/fontMath/blob/777dd889e4431d5b4666f032bdf1269d2ccf37b0/Lib/fontMath/mathInfo.py#L381
Is there something else necessary
Fontmath will indeed interpolate the values in the source files. I suppose the idea is that the source values can be inferred from the location in the designspace, independent from what is stored in the source.
mmm I see
something that overwrites those interpolated values (extracted from the sources, which could be different then the location of the instance) based on the wght and wdth locations...