# Non standard extensions used FontForge in True/Open Type

## Non standard tables.

- 'PfEd' the FontForge extensions table

## Non standard feature tags

Internal

- `' REQ'` -- tag used for required features

For TeX

- `ITLC` -- Italic correction
  I have proposed this as an extension to OpenType. There was some discussion of it, but I believe the idea died.
- `TCHL` -- TeX Charlist
- `TEXL` -- TeX Extension List

## 'PfEd' -- the FontForge extensions table

> The table begins with a table header containing a version number and a count of sub-tables

> uint32 | version | currently 0x00010000
> uint32 | count |

> This is followed by a table of contents, there will be count replications of the following structure (ie. a tag and offset for each sub-table

> uint32 | tag |
> uint32 | offset | from start of 'PfEd' table

> The format of the subtable depends on the sub-table's tag. There are currently 3 tags supported, these are

> - 'colr' -- per glyph color sub-table (stores the color that appears in the font view)
> - 'cmnt' -- per glyph comment sub-table (stores the comment that appears in the Char Info dialog for the character)
> - 'fcmt' -- the font comment sub-table (stores the comment that appears in the Font Info dialog)

### 'colr' -- the per-glyph color sub-table

> The sub-table header begins with a version number, and a count of ranges

> uint16 | version | 0
> uint16 | count | of ranges

> After this will be <count> instances of the following structure

> uint16 | starting glyph index |
> uint16 | ending glyph index |
> uint32 | color | expressed as a 24bit rgb value

### 'cmnt' -- the per-glyph comment sub-table

> The sub-table header begins with a version number, and a count of ranges

> uint16 | version | 0
> uint16 | count | of ranges

> After this will be <count> instances of the following structure

> uint16 | starting glyph index |
> uint16 | ending glyph index |
> uint32 | offset | from the start of this sub-table

> The offset points to an array of offsets (<end>-<start>+1+1) elements in the array, so one element for each glyph index mentioned in the range structure above, with one left over which allows readers to compute the the length of the last string.

> uint32 | offset | from start of table
> | ... |

> And each of these offsets points to a unicode (UCS2) string. The strings are assumed to be consecutive, so the length of each may be calculated by subtracting its offset from the offset to the next string.

### 'fcmt' -- the font comment sub-table

> The sub-table header begins with a version number, and a count of ranges

> uint16 | version | 0
> uint16 | length | number of characters in the string

> And this is followed by <length> Unicode (UCS2) characters. Currently these unicode characters will always contain ASCII values, but that may change some day.