UNPKG

fonteditor-core

Version:

fonts (ttf, woff, woff2, eot, svg, otf) parse, write, transform, glyph adjust.

106 lines (95 loc) 3.01 kB
/** * @file woff2 wasm build of google woff2 * thanks to woff2-asm * https://github.com/alimilhim/woff2-wasm * @author mengke01(kekee000@gmail.com) */ // Require the woff2 module const woff2ModuleLoader = require('./woff2'); function convertFromVecToUint8Array(vector) { const arr = []; for (let i = 0, l = vector.size(); i < l; i++) { arr.push(vector.get(i)); } return new Uint8Array(arr); } // Define as a named object that can be exported with CommonJS const woff2Module = { woff2Module: null, /** * 是否已经加载完毕 * * @return {boolean} */ isInited() { return ( this.woff2Module && this.woff2Module.woff2Enc && this.woff2Module.woff2Dec ); }, /** * 初始化 woff 模块 * * @param {string|ArrayBuffer} wasmUrl woff2.wasm file url * @return {Promise} */ init(wasmUrl) { return new Promise((resolve) => { if (this.woff2Module) { resolve(this); return; } let moduleLoaderConfig = null; if (typeof window !== 'undefined') { moduleLoaderConfig = { locateFile(path) { if (path.endsWith('.wasm')) { return wasmUrl; } return path; }, }; } // for nodejs else { // Use path resolution that works in both ESM and CommonJS let wasmPath = './woff2.wasm'; // If running in Node.js with __dirname available (CommonJS) if (typeof __dirname !== 'undefined') { wasmPath = __dirname + '/woff2.wasm'; } moduleLoaderConfig = { wasmBinaryFile: wasmPath, }; } const woffModule = woff2ModuleLoader(moduleLoaderConfig); woffModule.onRuntimeInitialized = () => { this.woff2Module = woffModule; resolve(this); }; }); }, /** * 将ttf buffer 转换成 woff2 buffer * * @param {ArrayBuffer|Buffer|Array} ttfBuffer ttf buffer * @return {Uint8Array} uint8 array */ encode(ttfBuffer) { const buffer = new Uint8Array(ttfBuffer); const woffbuff = this.woff2Module.woff2Enc(buffer, buffer.byteLength); return convertFromVecToUint8Array(woffbuff); }, /** * 将woff2 buffer 转换成 ttf buffer * * @param {ArrayBuffer|Buffer|Array} woff2Buffer woff2 buffer * @return {Uint8Array} uint8 array */ decode(woff2Buffer) { const buffer = new Uint8Array(woff2Buffer); const ttfbuff = this.woff2Module.woff2Dec(buffer, buffer.byteLength); return convertFromVecToUint8Array(ttfbuff); }, }; // Export for CommonJS module.exports = woff2Module;