/* * Episteme Reader - A native Android document reader. * Copyright (C) 2026 Episteme Authors * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * * Electronic mail: epistemereader@gmail.com */ #include #include #include // This is the correct header for the public API #include extern "C" JNIEXPORT jbyteArray JNICALL Java_com_aryan_reader_paginatedreader_Woff2Converter_convertWoff2ToTtf( JNIEnv *env, jobject /* this */, jbyteArray woff2_data) { // Get the input WOFF2 data from the jbyteArray jbyte* woff2_bytes = env->GetByteArrayElements(woff2_data, nullptr); jsize woff2_size = env->GetArrayLength(woff2_data); const uint8_t* woff2_input = reinterpret_cast(woff2_bytes); // Calculate the required size using the correct function name from your header size_t ttf_size = woff2::ComputeWOFF2FinalSize(woff2_input, woff2_size); if (ttf_size == 0) { // This indicates an error in the input font data env->ReleaseByteArrayElements(woff2_data, woff2_bytes, JNI_ABORT); return nullptr; } // Create the output buffer std::vector ttf_output(ttf_size); // Perform the conversion using the deprecated function signature that matches your header bool success = woff2::ConvertWOFF2ToTTF( ttf_output.data(), ttf_size, woff2_input, woff2_size ); // Release the input byte array env->ReleaseByteArrayElements(woff2_data, woff2_bytes, JNI_ABORT); // If conversion failed, return null if (!success) { return nullptr; } // Create a new Java byte array for the result jbyteArray ttf_data = env->NewByteArray(ttf_size); if (ttf_data == nullptr) { // Out of memory error return nullptr; } // Copy the converted data to the Java byte array env->SetByteArrayRegion(ttf_data, 0, ttf_size, reinterpret_cast(ttf_output.data())); return ttf_data; }