src/truetype/ttinterp.c: Give order of operations for some instructions.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c
index 920d042..70434e1 100644
--- a/src/truetype/ttinterp.c
+++ b/src/truetype/ttinterp.c
@@ -1694,6 +1694,32 @@
}
+ /*
+ *
+ * Apple's TrueType specification at
+ *
+ * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM02/Chap2.html#order
+ *
+ * gives the following order of operations in instructions that move
+ * points.
+ *
+ * - check single width cut-in (MIRP, MDRP)
+ *
+ * - check control value cut-in (MIRP, MIAP)
+ *
+ * - apply engine compensation (MIRP, MDRP)
+ *
+ * - round distance (MIRP, MDRP) or value (MIAP, MDAP)
+ *
+ * - check minimum distance (MIRP,MDRP)
+ *
+ * - move point (MIRP, MDRP, MIAP, MSIRP, MDAP)
+ *
+ * For rounding instructions, engine compensation happens before rounding.
+ *
+ */
+
+
/**************************************************************************
*
* @Function:
@@ -1918,7 +1944,6 @@
zone->org[point].y = ADD_LONG( zone->org[point].y, distance );
}
-
/**************************************************************************
*
* @Function:
@@ -1936,12 +1961,6 @@
*
* @Return:
* The compensated distance.
- *
- * @Note:
- * The TrueType specification says very few about the relationship
- * between rounding and engine compensation. However, it seems from
- * the description of super round that we should add the compensation
- * before rounding.
*/
static FT_F26Dot6
Round_None( TT_ExecContext exc,