Skip to content

Commit c8961ee

Browse files
committed
[woff-to-otf] copy tables directly from buffers not via an array of ints.
1 parent 99fad46 commit c8961ee

File tree

1 file changed

+22
-36
lines changed

1 file changed

+22
-36
lines changed

src/woff-to-otf.mjs

Lines changed: 22 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ import { // eslint-disable-line
1010
import parse from './parse.mjs';
1111
import { encode } from './types.mjs';
1212

13-
// I looked at https://github.com/mondeja/woff2otf/blob/master/src/woff2otf.js
14-
// but I'm using opentype.js infrastructure.
13+
// I looked at
14+
// https://github.com/hanikesn/woff2otf
15+
// and https://github.com/mondeja/woff2otf
16+
// but I'm doing it using opentype.js infrastructure.
1517
function woff_to_otf(buffer) {
1618
if (buffer.constructor !== ArrayBuffer)
1719
buffer = new Uint8Array(buffer).buffer;
@@ -82,47 +84,31 @@ function woff_to_otf(buffer) {
8284
if ((offset % 4) !== 0)
8385
offset += 4 - (offset % 4);
8486
}
85-
// const initialData = new Uint8Array(out.length)
86-
// , buffers = [initialData]
87-
// ;
88-
// for (let i=0,l=out.length; i<l; i++)
89-
// initialData[i] = out[i];
87+
const initialData = new Uint8Array(out.length)
88+
, buffers = [initialData]
89+
;
90+
for (let i=0,l=out.length; i<l; i++)
91+
initialData[i] = out[i];
9092

9193
for (let i=0; i<numTables; i++) {
9294
const tableEntry = tableEntries[i]
9395
, table = uncompressTable(data, tableEntry) // => {data: view, offset: 0};
94-
// FIXME: we should rather just append the bytes to a new buffer
95-
// no need to parse into an array ...
96-
, p = new parse.Parser(table.data, table.offset)
97-
;
98-
99-
100-
offset = tableEntry.outOffset + tableEntry.length;
101-
const padding = (offset % 4) !== 0
102-
? 4 - (offset % 4)
103-
: 0
96+
, offset = tableEntry.outOffset + tableEntry.length
97+
, padding = (offset % 4) !== 0
98+
? 4 - (offset % 4)
99+
: 0
104100
;
105-
// buffers.push(
106-
// new DataView(table.data.buffer, table.offset, tableEntry.length)
107-
// , new ArrayBuffer(padding)
108-
// );
109-
out.push(
110-
p.parseByteList(tableEntry.length)
111-
, Array(padding).fill(0) // new ArrayBuffer(padding)
101+
buffers.push(
102+
new Uint8Array(table.data.buffer, table.offset, tableEntry.length)
103+
, new Uint8Array(padding)
112104
);
113105
}
114-
const outFlat = out.flat();
115-
116-
// const result = new Uint8Array(buffers.reduce((accum, buffer)=>accum+buffer.byteLength, 0));
117-
// buffers.reduce((offset, buffer)=>{
118-
// result.set(buffer, offset)
119-
// return offset + buffer.byteLength
120-
// }, 0)
121-
// return result.buffer;
122-
const outArray = new Uint8Array(outFlat.length);
123-
for (let i=0,l=outFlat.length; i<l; i++)
124-
outArray[i] = outFlat[i];
125-
return outArray.buffer;
106+
const result = new Uint8Array(buffers.reduce((accum, buffer)=>accum+buffer.byteLength, 0));
107+
buffers.reduce((offset, buffer)=>{
108+
result.set(buffer, offset);
109+
return offset + buffer.byteLength;
110+
}, 0);
111+
return result.buffer;
126112
}
127113

128114
export {

0 commit comments

Comments
 (0)