message: Add control value program table
diff: @@ -190,8 +190,8 @@ FontTable (tag : Tag) (length : U32) = match tag.value {
  "head" => FontHeader, // Font header
  "hhea" => HorizontalHeader, // Horizontal header
  "hmtx" => Unknown, // Horizontal metrics // TODO: Depends on `num_glyphs` and `number_of_h_metrics` from "hhea"
  - "maxp" => Unknown, // Maximum profile
  - "name" => Unknown, // Naming table
  + "maxp" => Unknown, // Maximum profile // TODO: unions
  + "name" => Unknown, // Naming table // TODO: unions
  "OS/2" => Os2, // OS/2 and Windows specific metrics
  "post" => PostScript, // PostScript information
  @@ -202,7 +202,7 @@ FontTable (tag : Tag) (length : U32) = match tag.value {
  "fpgm" => FontProgram length, // Font program (optional table)
  "glyf" => Unknown, // Glyph data // TODO: Depends on `num_glyphs` from "maxp"
  "loca" => Unknown, // Index to location // TODO: Depends on `num_glyphs` from "maxp", offset to "glyph", `index_to_loc_format` from "head"
  - "prep" => Unknown, // CVT Program (optional table)
  + "prep" => ControlValueProgram length, // CVT Program (optional table)
  "gasp" => Unknown, // Grid-fitting/Scan-conversion (optional table)
  // Tables Related to CFF Outlines
  @@ -1722,12 +1722,17 @@ struct IndexToLocation (num_glyphs : U32) (glyph_data_start : Pos) {
  //
  // prep - Control Value Program
  //
  -// <https://www.microsoft.com/typography/otspec/prep.htm>
  +// <https://docs.microsoft.com/en-us/typography/opentype/spec/prep>
  // <https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6prep.html>
  //
  // =============================================================================
  -// TODO
  +struct ControlValueProgram (length : U32) {
  + /// Set of instructions executed whenever point size or font or transformation change.
  + // TODO: repeat to length?
  + // TODO: constrain U8 by ControlValue table?
  + instructions : Array length U8,
  +};
  