STAT table ranges not working

I have this Glyphs file in which I am setting a Variable Font Setting for a two-dimensional VF.

I have both width and weight axis and I have entered two Axis Values parameters, on for each, to define the resultant ranges that should be used to build the STAT table. Here’s the cofiguration I currently have:

  • wdth; 100:100:110=Normal*, 100.0>100.0=Normal*, 110:120:130=Wide, 130:150:150=Expanded
  • wght; 300:300:350=Light, 300.0>500.0=Light, 350:400:450=Regular*, 400.0>600.0=Regular*, 450:500:550=Medium, 550:600:600=Semibold

The problem is that, even though the `AxisValueArray` (copied at the end) looks fine, in inDesign or Dinamo’s Font Gauntlet the ranges are not working and style names are only displayed when the sliders are in the exact position of the axis location.

Is there something that I am missing?

Thank you so much in advance.

<AxisValueArray>
      <AxisValue index="0" Format="2">
        <AxisIndex value="0"/>
        <Flags value="2"/>  <!-- ElidableAxisValueName -->
        <ValueNameID value="279"/>  <!-- Normal -->
        <NominalValue value="100.0"/>
        <RangeMinValue value="100.0"/>
        <RangeMaxValue value="110.0"/>
      </AxisValue>
      <AxisValue index="1" Format="3">
        <AxisIndex value="0"/>
        <Flags value="2"/>  <!-- ElidableAxisValueName -->
        <ValueNameID value="279"/>  <!-- Normal -->
        <Value value="100.0"/>
        <LinkedValue value="100.0"/>
      </AxisValue>
      <AxisValue index="2" Format="2">
        <AxisIndex value="0"/>
        <Flags value="0"/>
        <ValueNameID value="265"/>  <!-- Wide -->
        <NominalValue value="120.0"/>
        <RangeMinValue value="110.0"/>
        <RangeMaxValue value="130.0"/>
      </AxisValue>
      <AxisValue index="3" Format="2">
        <AxisIndex value="0"/>
        <Flags value="0"/>
        <ValueNameID value="273"/>  <!-- Expanded -->
        <NominalValue value="150.0"/>
        <RangeMinValue value="130.0"/>
        <RangeMaxValue value="150.0"/>
      </AxisValue>
      <AxisValue index="4" Format="2">
        <AxisIndex value="1"/>
        <Flags value="0"/>
        <ValueNameID value="17"/>  <!-- Light -->
        <NominalValue value="300.0"/>
        <RangeMinValue value="300.0"/>
        <RangeMaxValue value="350.0"/>
      </AxisValue>
      <AxisValue index="5" Format="3">
        <AxisIndex value="1"/>
        <Flags value="0"/>
        <ValueNameID value="17"/>  <!-- Light -->
        <Value value="300.0"/>
        <LinkedValue value="500.0"/>
      </AxisValue>
      <AxisValue index="6" Format="2">
        <AxisIndex value="1"/>
        <Flags value="2"/>  <!-- ElidableAxisValueName -->
        <ValueNameID value="2"/>  <!-- Regular -->
        <NominalValue value="400.0"/>
        <RangeMinValue value="350.0"/>
        <RangeMaxValue value="450.0"/>
      </AxisValue>
      <AxisValue index="7" Format="3">
        <AxisIndex value="1"/>
        <Flags value="2"/>  <!-- ElidableAxisValueName -->
        <ValueNameID value="2"/>  <!-- Regular -->
        <Value value="400.0"/>
        <LinkedValue value="600.0"/>
      </AxisValue>
      <AxisValue index="8" Format="2">
        <AxisIndex value="1"/>
        <Flags value="0"/>
        <ValueNameID value="259"/>  <!-- Medium -->
        <NominalValue value="500.0"/>
        <RangeMinValue value="450.0"/>
        <RangeMaxValue value="550.0"/>
      </AxisValue>
      <AxisValue index="9" Format="2">
        <AxisIndex value="1"/>
        <Flags value="0"/>
        <ValueNameID value="261"/>  <!-- Semibold -->
        <NominalValue value="600.0"/>
        <RangeMinValue value="550.0"/>
        <RangeMaxValue value="600.0"/>
      </AxisValue>
    </AxisValueArray>

The Axis value settings and the ttx seem to show the same values. So the setup seems to be correct.
But that doesn’t mean that each app will handle it the same way. I suspect that some apps only show the correct name in the menu for instances defined in fvar. Or only for the nominal value.

I never understood the reason to put ranges in the STAT table. Because what is the point to specify “Regular is maybe 350 or 400 or 450”? If a document specifies “Regular”, it needs to be able to pick a specific axis positions/instance to display the text. And whatever you specify in the menu/style popup is what is stored in the document.

  • Do not style link on a Width axis.
  • Do not style link from a value to itself.
  • It is technically possible to supply multiple linkings on one axis, but I would not expect them to work in an app.

Support for ranges is at best preliminary.

That is not what STAT ranges do. It is the other way around: the user pulls a slider to an arbitrary location and gets a composed name that corresponds to the slider position, with the axis position info, e.g. ‘Medium [520] Wide’, telling the user that the slider position is approximately a Medium and exactly a Wide.

If the user picks a name (e.g., ‘Regular’), he or she gets exactly the nominal value specified in the triplet of values (in this case 400). Not something else.

Thank you @GeorgSeifert and @mekkablue .

I will remove the style links that you mention in order to prevent possible errors. Also, one thing I forgot to ask is that the resultant STAT table also adds an italic axis even though I haven not set it up in the file. Is that normal or there is something I need to add to prevent this.

 <DesignAxisRecord>
      <Axis index="0">
        <AxisTag value="wdth"/>
        <AxisNameID value="256"/>  <!-- Width -->
        <AxisOrdering value="0"/>
      </Axis>
      <Axis index="1">
        <AxisTag value="wght"/>
        <AxisNameID value="257"/>  <!-- Weight -->
        <AxisOrdering value="1"/>
      </Axis>
      <Axis index="2">
        <AxisTag value="ital"/>
        <AxisNameID value="280"/>  <!-- Italic -->
        <AxisOrdering value="2"/>
      </Axis>
 </DesignAxisRecord>

So, from this I assume that both of the applications (inDesign 2026 and Font Gauntlet) do not support these ranges, right? Is there any app I can use to double check everything is ok?

Thank you so much again.