Measurements format
A data format to store definitions of font-level and glyph-level measurements.
Data structure
A measurement establishes a link between two points and allows us to calculate the distance between them.
The order of the points determine if the measurement is positive or negative.
Font-level measurements
- A font may contain multiple font-level measurements.
 - Font measurement names must be unique.
 - The order of the font measurements matters.
 
| attribute | description | 
|---|---|
| name | name of the measurement | 
| glyph 1 | name of the glyph containing the 1st measurement point | 
| point 1 | index or shortcut of 1st measurement point | 
| glyph 2 | name of the glyph containing the 2nd measurement point | 
| point 2 | index or shortcut of 2nd measurement point | 
| direction | direction of measurement | 
| parent | parent measurement (optional) | 
| description | description of this measurement (optional) | 
Glyph-level measurements
- A glyph may contain multiple glyph-level measurements.
 - Glyph measurement names are usually related to font-level measurements.
 - Glyph measurement names must not be unique.
 - Glyph measurement identifiers are created from the point indexes.
 - The order of glyph measurements follows the order of font measurements.
 
| attribute | description | 
|---|---|
| name | name of the measurement | 
| point 1 | index or shortcut of 1st measurement point | 
| point 2 | index or shortcut of 2nd measurement point | 
| direction | direction of measurement | 
Direction keys
The direction of measurement must be one of the following characters:
| characters | description | 
|---|---|
| x | horizontal measurement | 
| y | vertical measurement | 
| a | angled measurement | 
Point indexes or shortcuts
Point indexes are expressed as integers.
Font-level vertical metrics values are also acessible using the following shortcut characters:
| character | description | x | y | 
|---|---|---|---|
| A | ascender | 0 | 
      font.info.ascender | 
    
| B | baseline | 0 | 
      0 | 
    
| C | cap height | 0 | 
      font.info.capHeight | 
    
| D | descender | 0 | 
      font.info.descender | 
    
| X | x-height | 0 | 
      font.info.xHeight | 
    
Sign of the measured values
The sign of the measured values matters. While most measurements are usually positive, some are by definition negative – for example the descender value or a bottom overshoot.
If a font-level value is positive, and the measured glyph value is negative, we can suspect an issue with the contours (shapes turning inside out).
Python example
The key for font-level measurements is the name of the measurement.
fontMeasurements = {
    'XTUC' : {
        'glyph 1'   : 'H',
        'point 1'   : 11,
        'glyph 2'   : 'H',
        'point 2'   : 8,
        'direction' : 'x',
        'parent'    : 'XTRA',
    },
    # more font-level measurements here ...
}
The key for glyph-level measurements is an identifier created from the two point indexes.
glyphMeasurements = {
    "a" : {
      f'{ptIndex1} {ptIndex2}' : {
          'name'      : 'XTRA',
          'direction' : 'x',
      },
      # more glyph-level measurements here ...
    },
    # more glyphs here ...
}
JSON format
Measurements can be stored in standalone JSON files using the format below.
The same set of measurement definitions can be used to measure all sources in a designspace.
{
  "font": {
    "XTUC": {
      "direction": "x",
      "glyph 1": "H",
      "point 1": "11",
      "glyph 2": "H",
      "point 2": "8",
      "parent": "XTRA"
    },
    /* more font-level measurements here ... */
  },
  "glyphs": {
    "n": {
      "0 20": {
        "direction": "x",
        "name": "XOLC"
      },
      "11 12": {
        "direction": "x",
        "name": "XOLC"
      },
      "13 19": {
        "direction": "x",
        "name": "XTLC"
      },
      /* more glyph-level measurements here ... */
    },
    /* more glyphs here ... */
  },
}