@startuml v5_split_downconvert title How to split and down-convert a DesignSpace version 5 so that existing tools can work with it end title start #lightgrey:DesignSpace 5.0 - with STAT data - optional instance names - with discrete axes - with multiple VFs] note left - STAT data means that compilers will need to write that data to the ouput TTFs - optional instance names means that compilers will need to generate any missing names using the STAT data - discrete axes mean that not all sources are compatible for interpolation - multiple VFs means that compilers will need to output several TTFs for one DS end note split split again :""splitInterpolating()""; note left - Create one DS document per interpolating sub-space, for example: with a discrete axis for Upright vs Italics, create 2 DesignSpaces, one for the Uprights, and one for the Italics. - Expand all missing instance names using the STAT data. - Drop all the STAT data because as we start taking out discrete axes, the sub-documents lose STAT data anyway (only the full document at the start of the process should be used to generate the STAT table) end note split #lightgrey:DesignSpace 5.0 - (no STAT data) - (explicit instance names) - (at discrete location #1) - with multiple VFs] note left All sources in this sub-space are (supposed to be) compatible for interpolation end note split again #lightgrey:DesignSpace 5.0 - (no STAT data) - (explicit instance names) - (at discrete location #2) - with multiple VFs] detach split again #lightgrey:etc ...] detach end split :check compatibility; :build compatible master TTFs with cu2qu; :""splitVariableFonts()""; note left Create one DS document per variable font, for example: the above document may describe a weight and width space, out of which we'll build 3 variable fonts: full weight + width, weight only, width only. end note split #lightgrey:DesignSpace 5.0 - (no STAT data) - (explicit instance names) - (at discrete location #1) - (describing just VF #1)] note left This document looks very much like version 4.1, you can just change the version number at the top and feed it to a tool that doesn't know about v5; see ""convert5to4()"". end note split again #lightgrey:DesignSpace 5.0 - (no STAT data) - (explicit instance names) - (at discrete location #1) - (describing just VF #2)] detach split again #lightgrey:etc ...] detach end split :""varLib.build()""; #lightgrey:Variable font TTF No STAT data] end split :""buildVFStatTable()""; note left Apply STAT data using the full document from the start of the process + filtering entries based on this VF's location end note #lightgrey:Variable font TTF With STAT data] end @enduml