summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/mfluadir/otfcc/src/otfccdll.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/mfluadir/otfcc/src/otfccdll.c')
-rw-r--r--Build/source/texk/web2c/mfluadir/otfcc/src/otfccdll.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/mfluadir/otfcc/src/otfccdll.c b/Build/source/texk/web2c/mfluadir/otfcc/src/otfccdll.c
new file mode 100644
index 00000000000..98bb85f05bc
--- /dev/null
+++ b/Build/source/texk/web2c/mfluadir/otfcc/src/otfccdll.c
@@ -0,0 +1,57 @@
+#include "otfcc/sfnt.h"
+#include "otfcc/font.h"
+#include "otfcc/sfnt-builder.h"
+
+#ifdef _WIN32
+#define OTFCC_DLL_EXPORT __declspec(dllexport)
+#else
+#define OTFCC_DLL_EXPORT
+#endif
+
+caryll_Buffer *otfccbuild_json_otf(uint32_t inlen, const char *injson, uint8_t olevel,bool for_webfont);
+size_t otfcc_get_buf_len(caryll_Buffer *buf);
+uint8_t *otfcc_get_buf_data(caryll_Buffer *buf);
+void otfccbuild_free_otfbuf(caryll_Buffer *buf);
+
+OTFCC_DLL_EXPORT caryll_Buffer *otfccbuild_json_otf(uint32_t inlen, const char *injson, uint8_t olevel,
+ bool for_webfont) {
+ otfcc_Options *options = otfcc_newOptions();
+ options->logger = otfcc_newLogger(otfcc_newEmptyTarget());
+ options->logger->indent(options->logger, "otfccbuild");
+
+ // optimization levels
+ otfcc_Options_optimizeTo(options, olevel);
+ if (for_webfont) {
+ options->ignore_glyph_order = true;
+ options->force_cid = true;
+ }
+
+ // json parsing
+ json_value *jsonRoot = json_parse(injson, inlen);
+ if (!jsonRoot) { return NULL; }
+ // font parsing
+ otfcc_IFontBuilder *parser = otfcc_newJsonReader();
+ otfcc_Font *font = parser->read(jsonRoot, 0, options);
+ parser->free(parser);
+ json_value_free(jsonRoot);
+ if (!font) { return NULL; }
+
+ // consolidation and build
+ otfcc_iFont.consolidate(font, options);
+ otfcc_IFontSerializer *writer = otfcc_newOTFWriter();
+ caryll_Buffer *otf = (caryll_Buffer *)writer->serialize(font, options);
+
+ writer->free(writer);
+ otfcc_iFont.free(font);
+ return otf;
+}
+
+OTFCC_DLL_EXPORT size_t otfcc_get_buf_len(caryll_Buffer *buf) {
+ return buf->size;
+}
+OTFCC_DLL_EXPORT uint8_t *otfcc_get_buf_data(caryll_Buffer *buf) {
+ return buf->data;
+}
+OTFCC_DLL_EXPORT void otfccbuild_free_otfbuf(caryll_Buffer *buf) {
+ buffree(buf);
+}