summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/charstring-il.h
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/charstring-il.h')
-rw-r--r--Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/charstring-il.h44
1 files changed, 44 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/charstring-il.h b/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/charstring-il.h
new file mode 100644
index 00000000000..2c0f15f1661
--- /dev/null
+++ b/Build/source/texk/web2c/mfluadir/otfcc/lib/libcff/charstring-il.h
@@ -0,0 +1,44 @@
+#ifndef CARYLL_cff_CHARSTRING_IL
+#define CARYLL_cff_CHARSTRING_IL
+
+#include "libcff.h"
+#include "otfcc/table/glyf.h"
+
+typedef enum {
+ IL_ITEM_OPERAND,
+ IL_ITEM_OPERATOR,
+ IL_ITEM_SPECIAL,
+ IL_ITEM_PHANTOM_OPERATOR,
+ IL_ITEM_PHANTOM_OPERAND
+} cff_InstructionType;
+
+typedef struct {
+ cff_InstructionType type;
+ arity_t arity;
+ union {
+ double d; // for type == IL_ITEM_OPERAND, IL_ITEM_PHANTOM_OPERAND
+ int32_t i; // otherwise
+ };
+} cff_CharstringInstruction;
+
+typedef struct {
+ uint32_t length;
+ uint32_t free;
+ cff_CharstringInstruction *instr;
+} cff_CharstringIL;
+
+bool instruction_eq(cff_CharstringInstruction *z1, cff_CharstringInstruction *z2);
+
+// basic ops
+cff_CharstringIL *cff_compileGlyphToIL(glyf_Glyph *g, uint16_t defaultWidth, uint16_t nominalWidth);
+void cff_optimizeIL(cff_CharstringIL *il, const otfcc_Options *options);
+cff_CharstringIL *cff_shrinkIL(cff_CharstringIL *il);
+void cff_ILmergeIL(cff_CharstringIL *self, cff_CharstringIL *il);
+caryll_Buffer *cff_build_IL(cff_CharstringIL *il);
+bool cff_ilEqual(cff_CharstringIL *a, cff_CharstringIL *b);
+
+void il_push_operand(cff_CharstringIL *il, double x);
+void il_push_op(cff_CharstringIL *il, int32_t op);
+void il_push_special(cff_CharstringIL *il, int32_t s);
+
+#endif