summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/mfluadir/otfcc/lib/table/VORG.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/mfluadir/otfcc/lib/table/VORG.c')
-rw-r--r--Build/source/texk/web2c/mfluadir/otfcc/lib/table/VORG.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/mfluadir/otfcc/lib/table/VORG.c b/Build/source/texk/web2c/mfluadir/otfcc/lib/table/VORG.c
new file mode 100644
index 00000000000..9a669251478
--- /dev/null
+++ b/Build/source/texk/web2c/mfluadir/otfcc/lib/table/VORG.c
@@ -0,0 +1,46 @@
+#include "VORG.h"
+
+#include "support/util.h"
+
+static INLINE void disposeVORG(table_VORG *vorg) {
+ FREE(vorg->entries);
+}
+
+caryll_standardRefType(table_VORG, table_iVORG, disposeVORG);
+
+table_VORG *otfcc_readVORG(const otfcc_Packet packet, const otfcc_Options *options) {
+ FOR_TABLE(OTFCC_CHR('V','O','R','G'), table) {
+ font_file_pointer data = table.data;
+ uint32_t length = table.length;
+ if (length < 8) goto VORG_CORRUPTED;
+ uint16_t numVertOriginYMetrics = read_16u(data + 6);
+ if (length < 8 + 4 * numVertOriginYMetrics) goto VORG_CORRUPTED;
+
+ table_VORG *vorg = table_iVORG.create();
+ vorg->defaultVerticalOrigin = read_16s(data + 4);
+ vorg->numVertOriginYMetrics = numVertOriginYMetrics;
+ NEW(vorg->entries, numVertOriginYMetrics);
+ for (uint16_t j = 0; j < numVertOriginYMetrics; j++) {
+ vorg->entries[j].gid = read_16u(data + 8 + 4 * j);
+ vorg->entries[j].verticalOrigin = read_16s(data + 8 + 4 * j + 2);
+ }
+ return vorg;
+ VORG_CORRUPTED:
+ logWarning("Table 'VORG' corrupted.");
+ }
+ return NULL;
+}
+
+caryll_Buffer *otfcc_buildVORG(const table_VORG *table, const otfcc_Options *options) {
+ if (!table) return NULL;
+ caryll_Buffer *buf = bufnew();
+ bufwrite16b(buf, 1);
+ bufwrite16b(buf, 0);
+ bufwrite16b(buf, table->defaultVerticalOrigin);
+ bufwrite16b(buf, table->numVertOriginYMetrics);
+ for (uint16_t j = 0; j < table->numVertOriginYMetrics; j++) {
+ bufwrite16b(buf, table->entries[j].gid);
+ bufwrite16b(buf, table->entries[j].verticalOrigin);
+ }
+ return buf;
+}