From 8ebce9c149112d59552ed530361f80372455fdb2 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Mon, 10 Sep 2018 18:18:49 +0200 Subject: Add Emscripten / WebAssembly build. Requires Linux (or possibly MacOS X) and an installed emsdk to build. --- platform/wasm/wrap.js | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 platform/wasm/wrap.js (limited to 'platform/wasm/wrap.js') diff --git a/platform/wasm/wrap.js b/platform/wasm/wrap.js new file mode 100644 index 00000000..ef5df57b --- /dev/null +++ b/platform/wasm/wrap.js @@ -0,0 +1,51 @@ +var mupdf = {}; + +Module.noExitRuntime = true; +Module.noInitialRun = true; + +Module.onRuntimeInitialized = function () { + Module.ccall('initContext'); + mupdf.openDocument = Module.cwrap('openDocument', 'number', ['string']); + mupdf.freeDocument = Module.cwrap('freeDocument', 'null', ['number']); + mupdf.documentTitle = Module.cwrap('documentTitle', 'string', ['number']); + mupdf.countPages = Module.cwrap('countPages', 'number', ['number']); + mupdf.pageWidth = Module.cwrap('pageWidth', 'number', ['number', 'number', 'number']); + mupdf.pageHeight = Module.cwrap('pageHeight', 'number', ['number', 'number', 'number']); + mupdf.pageLinks = Module.cwrap('pageLinks', 'string', ['number', 'number', 'number']); + mupdf.drawPageAsPNG = Module.cwrap('drawPageAsPNG', 'string', ['number', 'number', 'number']); + mupdf.drawPageAsHTML = Module.cwrap('drawPageAsHTML', 'string', ['number', 'number']); + mupdf.drawPageAsSVG = Module.cwrap('drawPageAsSVG', 'string', ['number', 'number']); + mupdf.loadOutline = Module.cwrap('loadOutline', 'number', ['number']); + mupdf.freeOutline = Module.cwrap('freeOutline', null, ['number']); + mupdf.outlineTitle = Module.cwrap('outlineTitle', 'string', ['number']); + mupdf.outlinePage = Module.cwrap('outlinePage', 'number', ['number']); + mupdf.outlineDown = Module.cwrap('outlineDown', 'number', ['number']); + mupdf.outlineNext = Module.cwrap('outlineNext', 'number', ['number']); +}; + +mupdf.documentOutline = function (doc) { + function makeOutline(node) { + var ul = document.createElement('ul'); + while (node) { + var li = document.createElement('li'); + var a = document.createElement('a'); + a.href = '#page' + mupdf.outlinePage(node); + a.textContent = mupdf.outlineTitle(node); + li.appendChild(a); + var down = mupdf.outlineDown(node); + if (down) { + li.appendChild(makeOutline(down)); + } + ul.appendChild(li); + node = mupdf.outlineNext(node); + } + return ul; + } + var root = mupdf.loadOutline(doc); + if (root) { + var ul = makeOutline(root); + mupdf.freeOutline(root); + return ul; + } + return null; +} -- cgit v1.2.3