// Emscripten wrapper #include #include #include "./woff2/woff2_enc.h" using namespace emscripten; using std::string; int getSizePtr() { int* sizePtr = reinterpret_cast(calloc(1, sizeof(int))); return reinterpret_cast(sizePtr); } int convert(int inputDataAddress, int inputLength, int outputSizePtrAddress) { int* outputSizePtr = reinterpret_cast(outputSizePtrAddress); char* inputData = reinterpret_cast(inputDataAddress); size_t outputSize = woff2::MaxWOFF2CompressedSize( reinterpret_cast(inputData), inputLength ); uint8_t* outputData = reinterpret_cast(calloc(outputSize, sizeof(uint8_t))); if(!woff2::ConvertTTFToWOFF2( reinterpret_cast(inputData), inputLength, outputData, &outputSize )) { // throw an error } *outputSizePtr = outputSize; return reinterpret_cast(outputData); } void freePtrs(int outputDataAddress, int sizePtrAddress) { int* sizePtr = reinterpret_cast(sizePtrAddress); char* outputData = reinterpret_cast(outputDataAddress); free(outputData); free(sizePtr); } EMSCRIPTEN_BINDINGS(ttf2woff2_fallback) { function("getSizePtr", &getSizePtr, allow_raw_pointers()); function("convert", &convert, allow_raw_pointers()); function("freePtrs", &freePtrs, allow_raw_pointers()); }