summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/primitives.h
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/primitives.h')
-rw-r--r--Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/primitives.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/primitives.h b/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/primitives.h
new file mode 100644
index 00000000000..69ae393be3a
--- /dev/null
+++ b/Build/source/texk/web2c/mfluadir/otfcc/include/otfcc/primitives.h
@@ -0,0 +1,47 @@
+#ifndef CARYLL_INCLUDE_OTFCC_PRIMITIVES_H
+#define CARYLL_INCLUDE_OTFCC_PRIMITIVES_H
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <float.h>
+
+typedef int16_t f2dot14; // 2.14 Fixed number, representing a value between [-1, 1].
+typedef int32_t f16dot16; // 16.16 Fixed number, usually used by intermediate coordiantes of a font.
+ // To deal with implicit deltas in GVAR we must be very careful about it.
+ // Arithmetic operators saturate towards positive or negative infinity.
+ // Infinity values short circuit expressions.
+
+typedef uint16_t glyphid_t; // Glyph index
+typedef uint16_t glyphclass_t; // Glyph class
+typedef uint16_t glyphsize_t; // GASP glyph size
+typedef uint16_t tableid_t; // Table/Font structure index
+typedef uint16_t colorid_t; // Color index
+typedef uint16_t shapeid_t; // Shape index
+typedef uint16_t cffsid_t; // CFF/CFF2 String index
+typedef uint32_t arity_t; // CFF Arity/Stack depth
+typedef uint32_t unicode_t; // Unicode
+
+typedef double pos_t; // Position
+typedef double scale_t; // transform scaling
+#define POS_MAX FLT_MAX
+#define POS_MIN FLT_MIN
+
+typedef double length_t; // Length
+
+double otfcc_from_f2dot14(const f2dot14 x);
+int16_t otfcc_to_f2dot14(const double x);
+double otfcc_from_fixed(const f16dot16 x);
+f16dot16 otfcc_to_fixed(const double x);
+
+#define f16dot16_precision 16
+#define f16dot16_k (1 << (f16dot16_precision - 1))
+#define f16dot16_infinity ((f16dot16)0x7fffffff)
+#define f16dot16_negativeIntinity ((f16dot16)0x80000000)
+
+f16dot16 otfcc_f1616_add(f16dot16 a, f16dot16 b);
+f16dot16 otfcc_f1616_minus(f16dot16 a, f16dot16 b);
+f16dot16 otfcc_f1616_multiply(f16dot16 a, f16dot16 b);
+f16dot16 otfcc_f1616_divide(f16dot16 a, f16dot16 b);
+f16dot16 otfcc_f1616_muldiv(f16dot16 a, f16dot16 b, f16dot16 c);
+
+#endif