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...