37 lines
973 B
JavaScript
37 lines
973 B
JavaScript
import TTFFont from './TTFFont';
|
|
import WOFFDirectory from './tables/WOFFDirectory';
|
|
import tables from './tables';
|
|
import inflate from 'tiny-inflate';
|
|
import * as r from 'restructure';
|
|
import { asciiDecoder } from './utils';
|
|
|
|
export default class WOFFFont extends TTFFont {
|
|
type = 'WOFF';
|
|
|
|
static probe(buffer) {
|
|
return asciiDecoder.decode(buffer.slice(0, 4)) === 'wOFF';
|
|
}
|
|
|
|
_decodeDirectory() {
|
|
this.directory = WOFFDirectory.decode(this.stream, { _startOffset: 0 });
|
|
}
|
|
|
|
_getTableStream(tag) {
|
|
let table = this.directory.tables[tag];
|
|
if (table) {
|
|
this.stream.pos = table.offset;
|
|
|
|
if (table.compLength < table.length) {
|
|
this.stream.pos += 2; // skip deflate header
|
|
let outBuffer = new Uint8Array(table.length);
|
|
let buf = inflate(this.stream.readBuffer(table.compLength - 2), outBuffer);
|
|
return new r.DecodeStream(buf);
|
|
} else {
|
|
return this.stream;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|