summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/mfluadir/otfcc/lib/json-writer/json-writer.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/mfluadir/otfcc/lib/json-writer/json-writer.c')
-rw-r--r--Build/source/texk/web2c/mfluadir/otfcc/lib/json-writer/json-writer.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/mfluadir/otfcc/lib/json-writer/json-writer.c b/Build/source/texk/web2c/mfluadir/otfcc/lib/json-writer/json-writer.c
new file mode 100644
index 00000000000..cec3af660b5
--- /dev/null
+++ b/Build/source/texk/web2c/mfluadir/otfcc/lib/json-writer/json-writer.c
@@ -0,0 +1,56 @@
+#include "support/util.h"
+#include "otfcc/font.h"
+#include "table/all.h"
+
+static void *serializeToJson(otfcc_Font *font, const otfcc_Options *options) {
+ json_value *root = json_object_new(48);
+ if (!root) return NULL;
+ otfcc_dumpFvar(font->fvar, root, options);
+ otfcc_dumpHead(font->head, root, options);
+ otfcc_dumpHhea(font->hhea, root, options);
+ otfcc_dumpMaxp(font->maxp, root, options);
+ otfcc_dumpVhea(font->vhea, root, options);
+ otfcc_dumpPost(font->post, root, options);
+ otfcc_dumpOS_2(font->OS_2, root, options);
+ otfcc_dumpName(font->name, root, options);
+ otfcc_dumpMeta(font->meta, root, options);
+ otfcc_dumpCmap(font->cmap, root, options);
+ otfcc_dumpCFF(font->CFF_, root, options);
+
+ GlyfIOContext ctx = {.locaIsLong = font->head->indexToLocFormat,
+ .numGlyphs = font->maxp->numGlyphs,
+ .nPhantomPoints = 4,
+ .hasVerticalMetrics = !!(font->vhea),
+ .exportFDSelect = font->CFF_ && font->CFF_->isCID,
+ .fvar = font->fvar};
+ otfcc_dumpGlyf(font->glyf, root, options, &ctx);
+ if (!options->ignore_hints) {
+ table_dumpTableFpgmPrep(font->fpgm, root, options, "fpgm");
+ table_dumpTableFpgmPrep(font->prep, root, options, "prep");
+ otfcc_dumpCvt(font->cvt_, root, options, "cvt_");
+ otfcc_dumpGasp(font->gasp, root, options);
+ }
+ otfcc_dumpVDMX(font->VDMX, root, options);
+ otfcc_dumpOtl(font->GSUB, root, options, "GSUB");
+ otfcc_dumpOtl(font->GPOS, root, options, "GPOS");
+ otfcc_dumpGDEF(font->GDEF, root, options);
+ otfcc_dumpBASE(font->BASE, root, options);
+
+ otfcc_dumpCPAL(font->CPAL, root, options);
+ otfcc_dumpCOLR(font->COLR, root, options);
+ otfcc_dumpSVG(font->SVG_, root, options);
+ otfcc_dumpTSI(font->TSI_01, root, options, "TSI_01");
+ otfcc_dumpTSI(font->TSI_23, root, options, "TSI_23");
+ otfcc_dumpTSI5(font->TSI5, root, options);
+ return root;
+}
+static void freeJsonWriter(otfcc_IFontSerializer *self) {
+ free(self);
+}
+otfcc_IFontSerializer *otfcc_newJsonWriter() {
+ otfcc_IFontSerializer *writer;
+ NEW(writer);
+ writer->serialize = serializeToJson;
+ writer->free = freeJsonWriter;
+ return writer;
+}