Skip to content

Commit 7a67994

Browse files
committed
Start to add pako support
1 parent c8ab943 commit 7a67994

File tree

2 files changed

+39
-32
lines changed

2 files changed

+39
-32
lines changed

src/type/lib/Typr.js

Lines changed: 34 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
1+
import { inflate } from 'pako';
2+
// Mocking the pako module to just have inflate for a smaller package size
3+
const pako = { inflate };
24

35
var Typr = {};
46

@@ -82,7 +84,7 @@ Typr["parse"] = function (buff) {
8284

8385
otf.set(tab, toff); toff += oLe;
8486
}
85-
//console.log(otf);
87+
//console.log(otf);
8688
return otf;
8789
}
8890

@@ -143,7 +145,7 @@ Typr["splitBy"] = function(data,tag) {
143145
data = new Uint8Array(data); console.log(data.slice(0,64));
144146
var bin = Typr["B"];
145147
var ttcf = bin.readASCII(data, 0, 4); if(ttcf!="ttcf") return {};
146-
148+
147149
var offset = 8;
148150
var numF = bin.readUint (data, offset); offset+=4;
149151
var colls = [], used={};
@@ -156,12 +158,12 @@ Typr["splitBy"] = function(data,tag) {
156158
for(var toff in used) {
157159
var offs = used[toff];
158160
var hlen = 12+4*offs.length;
159-
var out = new Uint8Array(hlen);
161+
var out = new Uint8Array(hlen);
160162
for(var i=0; i<8; i++) out[i]=data[i];
161163
bin.writeUint(out,8,offs.length);
162-
164+
163165
for(var i=0; i<offs.length; i++) hlen += 12+offs[i][1]*16;
164-
166+
165167
var hdrs = [out], tabs = [], hoff=out.length, toff=hlen, noffs={};
166168
for(var i=0; i<offs.length; i++) {
167169
bin.writeUint(out, 12+i*4, hoff); hoff+=12+offs[i][1]*16;
@@ -176,7 +178,7 @@ Typr["splitFonts"] = function(data) {
176178
data = new Uint8Array(data);
177179
var bin = Typr["B"];
178180
var ttcf = bin.readASCII(data, 0, 4); if(ttcf!="ttcf") return {};
179-
181+
180182
var offset = 8;
181183
var numF = bin.readUint (data, offset); offset+=4;
182184
var fnts = [];
@@ -191,26 +193,26 @@ Typr["splitFonts"] = function(data) {
191193
Typr["_cutFont"] = function(data,foff,hdrs,tabs,toff, noffs) {
192194
var bin = Typr["B"];
193195
var numTables = bin.readUshort(data, foff+4);
194-
196+
195197
var out = new Uint8Array(12+numTables*16); hdrs.push(out);
196198
for(var i=0; i<12; i++) out[i]=data[foff+i]; //console.log(out);
197-
199+
198200
var off = 12;
199201
for(var i=0; i<numTables; i++)
200202
{
201-
var tag = bin.readASCII(data, foff+off, 4);
203+
var tag = bin.readASCII(data, foff+off, 4);
202204
var checkSum = bin.readUint (data, foff+off+ 4);
203-
var toffset = bin.readUint (data, foff+off+ 8);
205+
var toffset = bin.readUint (data, foff+off+ 8);
204206
var length = bin.readUint (data, foff+off+12);
205-
207+
206208
while((length&3)!=0) length++;
207-
209+
208210
for(var j=0; j<16; j++) out[off+j]=data[foff+off+j];
209-
211+
210212
if(noffs[toffset]!=null) bin.writeUint(out,off+8,noffs[toffset]);
211213
else {
212214
noffs[toffset] = toff;
213-
bin.writeUint(out, off+8, toff);
215+
bin.writeUint(out, off+8, toff);
214216
tabs.push(new Uint8Array(data.buffer, toffset, length)); toff+=length;
215217
}
216218
off+=16;
@@ -396,7 +398,7 @@ Typr["T"].CFF = {
396398
for (var i = 0; i < sinds.length - 1; i++) strings.push(bin.readASCII(data, offset + sinds[i], sinds[i + 1] - sinds[i]));
397399
offset += sinds[sinds.length - 1];
398400

399-
// Global Subr INDEX (subroutines)
401+
// Global Subr INDEX (subroutines)
400402
CFF.readSubrs(data, offset, topdict);
401403

402404
// charstrings
@@ -522,12 +524,12 @@ Typr["T"].CFF = {
522524
/*readEncoding : function(data, offset, num)
523525
{
524526
var bin = Typr["B"];
525-
527+
526528
var array = ['.notdef'];
527529
var format = data[offset]; offset++;
528530
//console.log("Encoding");
529531
//console.log(format);
530-
532+
531533
if(format==0)
532534
{
533535
var nCodes = data[offset]; offset++;
@@ -545,9 +547,9 @@ Typr["T"].CFF = {
545547
for(var i=0; i<=nLeft; i++) { charset.push(first); first++; }
546548
}
547549
}
548-
550+
549551
else throw "error: unknown encoding format: " + format;
550-
552+
551553
return array;
552554
},*/
553555

@@ -809,7 +811,7 @@ Typr["T"].cmap = {
809811
var lang = rU(data, offset); offset += 4;
810812
var nGroups = rU(data, offset) * 3; offset += 4;
811813

812-
var gps = obj.groups = new Uint32Array(nGroups);//new Uint32Array(data.slice(offset, offset+nGroups*12).buffer);
814+
var gps = obj.groups = new Uint32Array(nGroups);//new Uint32Array(data.slice(offset, offset+nGroups*12).buffer);
813815

814816
for (var i = 0; i < nGroups; i += 3) {
815817
gps[i] = rU(data, offset + (i << 2));
@@ -1092,7 +1094,7 @@ Typr["T"].kern = {
10921094
parseV1: function (data, offset, length, font) {
10931095
var bin = Typr["B"], kern = Typr["T"].kern;
10941096

1095-
var version = bin.readFixed(data, offset); // 0x00010000
1097+
var version = bin.readFixed(data, offset); // 0x00010000
10961098
var nTables = bin.readUint(data, offset + 4); offset += 8;
10971099

10981100
var map = { glyph1: [], rval: [] };
@@ -1495,12 +1497,12 @@ Typr["T"].cpal = {
14951497
return new Uint8Array(data.buffer, ooff + fst, tot * 4);
14961498
/*
14971499
var coff=ooff+fst;
1498-
1500+
14991501
for(var i=0; i<tot; i++) {
15001502
console.log(data[coff],data[coff+1],data[coff+2],data[coff+3]);
15011503
coff+=4;
15021504
}
1503-
1505+
15041506
console.log(ets,pts,tot); */
15051507
}
15061508
else throw vsn;//console.log("unknown color palette",vsn);
@@ -1768,7 +1770,7 @@ Typr["T"].HVAR = {
17681770

17691771
off = oo + varO; // item variation store
17701772

1771-
// ItemVariationStore
1773+
// ItemVariationStore
17721774
var ioff = off;
17731775

17741776
var fmt = bin.readUshort(data, off); off += 2; if (fmt != 1) throw "e";
@@ -1777,7 +1779,7 @@ Typr["T"].HVAR = {
17771779
var vcnt = bin.readUshort(data, off); off += 2;
17781780

17791781
var offs = []; for (var i = 0; i < vcnt; i++) offs.push(bin.readUint(data, off + i * 4)); off += vcnt * 4; //if(offs.length!=1) throw "e";
1780-
//console.log(vregO,vcnt,offs);
1782+
//console.log(vregO,vcnt,offs);
17811783

17821784
off = ioff + vregO;
17831785
var acnt = bin.readUshort(data, off); off += 2;
@@ -1799,7 +1801,7 @@ Typr["T"].HVAR = {
17991801
var i8 = new Int8Array(data.buffer);
18001802
var varStore = [];
18011803
for (var i = 0; i < offs.length; i++) {
1802-
// ItemVariationData
1804+
// ItemVariationData
18031805
off = oo + varO + offs[i]; var vdata = []; varStore.push(vdata);
18041806
var icnt = bin.readUshort(data, off); off += 2; // itemCount
18051807
var dcnt = bin.readUshort(data, off); off += 2; if (dcnt & 0x8000) throw "e";
@@ -1828,7 +1830,7 @@ Typr["T"].HVAR = {
18281830

18291831
off = oo + advO; // advance widths
18301832

1831-
// DeltaSetIndexMap
1833+
// DeltaSetIndexMap
18321834

18331835
var fmt = data[off++]; if (fmt != 0) throw "e";
18341836
var entryFormat = data[off++];
@@ -1970,19 +1972,19 @@ Typr["U"] = function () {
19701972
var data=font["_data"], off = cmap.off+tab.off+6, bin=Typr["B"];
19711973
var shKey = bin.readUshort(data,off + 2*(code>>>8));
19721974
var shInd = off + 256*2 + shKey*8;
1973-
1975+
19741976
var firstCode = bin.readUshort(data,shInd);
19751977
var entryCount= bin.readUshort(data,shInd+2);
19761978
var idDelta = bin.readShort (data,shInd+4);
19771979
var idRangeOffset = bin.readUshort(data,shInd+6);
1978-
1980+
19791981
if(firstCode<=code && code<=firstCode+entryCount) {
19801982
// not completely correct
19811983
gid = bin.readUshort(data, shInd+6+idRangeOffset + (code&255)*2);
19821984
}
19831985
else gid=0;
19841986
//if(code>256) console.log(code,(code>>>8),shKey,firstCode,entryCount,idDelta,idRangeOffset);
1985-
1987+
19861988
//throw "e";
19871989
//console.log(tab, bin.readUshort(data,off));
19881990
//throw "e";
@@ -2959,4 +2961,4 @@ Typr["U"] = function () {
29592961
}();
29602962

29612963

2962-
export default Typr;
2964+
export default Typr;

test/unit/type/loading.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ suite('Loading Fonts', function () {
1717
// tests ////////////////////////////////////////////////
1818
const fontFile = '/unit/assets/acmesa.ttf';
1919

20+
test('loadFont on zlib compressed fonts works', async () => {
21+
const font = await myp5.loadFont('https://fonts.gstatic.com/s/montserrat/v29/JTUFjIg1_i6t8kCHKm459Wx7xQYXK0vOoz6jq6R8aXw.woff');
22+
expect(font.data).toBeTruthy();
23+
});
24+
2025
test('loadFont.await', async () => {
2126
const pFont = await myp5.loadFont(fontFile, 'fredTheFont');
2227
assert.ok(pFont, 'acmesa.ttf loaded');

0 commit comments

Comments
 (0)