1
-
1
+ import { inflate } from 'pako' ;
2
+ // Mocking the pako module to just have inflate for a smaller package size
3
+ const pako = { inflate } ;
2
4
3
5
var Typr = { } ;
4
6
@@ -82,13 +84,18 @@ Typr["parse"] = function (buff) {
82
84
83
85
otf . set ( tab , toff ) ; toff += oLe ;
84
86
}
85
- //console.log(otf);
87
+ //console.log(otf);
86
88
return otf ;
87
89
}
88
90
89
91
90
92
var data = new Uint8Array ( buff ) ;
91
- if ( data [ 0 ] == 0x77 ) data = woffToOtf ( data ) ;
93
+ // PATCHED: keep around the compressed data if we inflate it
94
+ let compressedData ;
95
+ if ( data [ 0 ] == 0x77 ) {
96
+ compressedData = data ;
97
+ data = woffToOtf ( data ) ;
98
+ }
92
99
93
100
var tmap = { } ;
94
101
var tag = bin . readASCII ( data , 0 , 4 ) ;
@@ -105,6 +112,7 @@ Typr["parse"] = function (buff) {
105
112
return fnts ;
106
113
}
107
114
var fnt = readFont ( data , 0 , 0 , tmap ) ; //console.log(fnt); throw "e";
115
+ fnt . _compressedData = compressedData ; // PATCH: make compressed data accessible
108
116
var fvar = fnt [ "fvar" ] ;
109
117
if ( fvar ) {
110
118
var out = [ fnt ] ;
@@ -143,7 +151,7 @@ Typr["splitBy"] = function(data,tag) {
143
151
data = new Uint8Array(data); console.log(data.slice(0,64));
144
152
var bin = Typr["B"];
145
153
var ttcf = bin.readASCII(data, 0, 4); if(ttcf!="ttcf") return {};
146
-
154
+
147
155
var offset = 8;
148
156
var numF = bin.readUint (data, offset); offset+=4;
149
157
var colls = [], used={};
@@ -156,12 +164,12 @@ Typr["splitBy"] = function(data,tag) {
156
164
for(var toff in used) {
157
165
var offs = used[toff];
158
166
var hlen = 12+4*offs.length;
159
- var out = new Uint8Array(hlen);
167
+ var out = new Uint8Array(hlen);
160
168
for(var i=0; i<8; i++) out[i]=data[i];
161
169
bin.writeUint(out,8,offs.length);
162
-
170
+
163
171
for(var i=0; i<offs.length; i++) hlen += 12+offs[i][1]*16;
164
-
172
+
165
173
var hdrs = [out], tabs = [], hoff=out.length, toff=hlen, noffs={};
166
174
for(var i=0; i<offs.length; i++) {
167
175
bin.writeUint(out, 12+i*4, hoff); hoff+=12+offs[i][1]*16;
@@ -176,7 +184,7 @@ Typr["splitFonts"] = function(data) {
176
184
data = new Uint8Array(data);
177
185
var bin = Typr["B"];
178
186
var ttcf = bin.readASCII(data, 0, 4); if(ttcf!="ttcf") return {};
179
-
187
+
180
188
var offset = 8;
181
189
var numF = bin.readUint (data, offset); offset+=4;
182
190
var fnts = [];
@@ -191,26 +199,26 @@ Typr["splitFonts"] = function(data) {
191
199
Typr["_cutFont"] = function(data,foff,hdrs,tabs,toff, noffs) {
192
200
var bin = Typr["B"];
193
201
var numTables = bin.readUshort(data, foff+4);
194
-
202
+
195
203
var out = new Uint8Array(12+numTables*16); hdrs.push(out);
196
204
for(var i=0; i<12; i++) out[i]=data[foff+i]; //console.log(out);
197
-
205
+
198
206
var off = 12;
199
207
for(var i=0; i<numTables; i++)
200
208
{
201
- var tag = bin.readASCII(data, foff+off, 4);
209
+ var tag = bin.readASCII(data, foff+off, 4);
202
210
var checkSum = bin.readUint (data, foff+off+ 4);
203
- var toffset = bin.readUint (data, foff+off+ 8);
211
+ var toffset = bin.readUint (data, foff+off+ 8);
204
212
var length = bin.readUint (data, foff+off+12);
205
-
213
+
206
214
while((length&3)!=0) length++;
207
-
215
+
208
216
for(var j=0; j<16; j++) out[off+j]=data[foff+off+j];
209
-
217
+
210
218
if(noffs[toffset]!=null) bin.writeUint(out,off+8,noffs[toffset]);
211
219
else {
212
220
noffs[toffset] = toff;
213
- bin.writeUint(out, off+8, toff);
221
+ bin.writeUint(out, off+8, toff);
214
222
tabs.push(new Uint8Array(data.buffer, toffset, length)); toff+=length;
215
223
}
216
224
off+=16;
@@ -396,7 +404,7 @@ Typr["T"].CFF = {
396
404
for ( var i = 0 ; i < sinds . length - 1 ; i ++ ) strings . push ( bin . readASCII ( data , offset + sinds [ i ] , sinds [ i + 1 ] - sinds [ i ] ) ) ;
397
405
offset += sinds [ sinds . length - 1 ] ;
398
406
399
- // Global Subr INDEX (subroutines)
407
+ // Global Subr INDEX (subroutines)
400
408
CFF . readSubrs ( data , offset , topdict ) ;
401
409
402
410
// charstrings
@@ -522,12 +530,12 @@ Typr["T"].CFF = {
522
530
/*readEncoding : function(data, offset, num)
523
531
{
524
532
var bin = Typr["B"];
525
-
533
+
526
534
var array = ['.notdef'];
527
535
var format = data[offset]; offset++;
528
536
//console.log("Encoding");
529
537
//console.log(format);
530
-
538
+
531
539
if(format==0)
532
540
{
533
541
var nCodes = data[offset]; offset++;
@@ -545,9 +553,9 @@ Typr["T"].CFF = {
545
553
for(var i=0; i<=nLeft; i++) { charset.push(first); first++; }
546
554
}
547
555
}
548
-
556
+
549
557
else throw "error: unknown encoding format: " + format;
550
-
558
+
551
559
return array;
552
560
},*/
553
561
@@ -809,7 +817,7 @@ Typr["T"].cmap = {
809
817
var lang = rU ( data , offset ) ; offset += 4 ;
810
818
var nGroups = rU ( data , offset ) * 3 ; offset += 4 ;
811
819
812
- var gps = obj . groups = new Uint32Array ( nGroups ) ; //new Uint32Array(data.slice(offset, offset+nGroups*12).buffer);
820
+ var gps = obj . groups = new Uint32Array ( nGroups ) ; //new Uint32Array(data.slice(offset, offset+nGroups*12).buffer);
813
821
814
822
for ( var i = 0 ; i < nGroups ; i += 3 ) {
815
823
gps [ i ] = rU ( data , offset + ( i << 2 ) ) ;
@@ -1092,7 +1100,7 @@ Typr["T"].kern = {
1092
1100
parseV1 : function ( data , offset , length , font ) {
1093
1101
var bin = Typr [ "B" ] , kern = Typr [ "T" ] . kern ;
1094
1102
1095
- var version = bin . readFixed ( data , offset ) ; // 0x00010000
1103
+ var version = bin . readFixed ( data , offset ) ; // 0x00010000
1096
1104
var nTables = bin . readUint ( data , offset + 4 ) ; offset += 8 ;
1097
1105
1098
1106
var map = { glyph1 : [ ] , rval : [ ] } ;
@@ -1495,12 +1503,12 @@ Typr["T"].cpal = {
1495
1503
return new Uint8Array ( data . buffer , ooff + fst , tot * 4 ) ;
1496
1504
/*
1497
1505
var coff=ooff+fst;
1498
-
1506
+
1499
1507
for(var i=0; i<tot; i++) {
1500
1508
console.log(data[coff],data[coff+1],data[coff+2],data[coff+3]);
1501
1509
coff+=4;
1502
1510
}
1503
-
1511
+
1504
1512
console.log(ets,pts,tot); */
1505
1513
}
1506
1514
else throw vsn ; //console.log("unknown color palette",vsn);
@@ -1768,7 +1776,7 @@ Typr["T"].HVAR = {
1768
1776
1769
1777
off = oo + varO ; // item variation store
1770
1778
1771
- // ItemVariationStore
1779
+ // ItemVariationStore
1772
1780
var ioff = off ;
1773
1781
1774
1782
var fmt = bin . readUshort ( data , off ) ; off += 2 ; if ( fmt != 1 ) throw "e" ;
@@ -1777,7 +1785,7 @@ Typr["T"].HVAR = {
1777
1785
var vcnt = bin . readUshort ( data , off ) ; off += 2 ;
1778
1786
1779
1787
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);
1788
+ //console.log(vregO,vcnt,offs);
1781
1789
1782
1790
off = ioff + vregO ;
1783
1791
var acnt = bin . readUshort ( data , off ) ; off += 2 ;
@@ -1799,7 +1807,7 @@ Typr["T"].HVAR = {
1799
1807
var i8 = new Int8Array ( data . buffer ) ;
1800
1808
var varStore = [ ] ;
1801
1809
for ( var i = 0 ; i < offs . length ; i ++ ) {
1802
- // ItemVariationData
1810
+ // ItemVariationData
1803
1811
off = oo + varO + offs [ i ] ; var vdata = [ ] ; varStore . push ( vdata ) ;
1804
1812
var icnt = bin . readUshort ( data , off ) ; off += 2 ; // itemCount
1805
1813
var dcnt = bin . readUshort ( data , off ) ; off += 2 ; if ( dcnt & 0x8000 ) throw "e" ;
@@ -1828,7 +1836,7 @@ Typr["T"].HVAR = {
1828
1836
1829
1837
off = oo + advO ; // advance widths
1830
1838
1831
- // DeltaSetIndexMap
1839
+ // DeltaSetIndexMap
1832
1840
1833
1841
var fmt = data [ off ++ ] ; if ( fmt != 0 ) throw "e" ;
1834
1842
var entryFormat = data [ off ++ ] ;
@@ -1970,19 +1978,19 @@ Typr["U"] = function () {
1970
1978
var data=font["_data"], off = cmap.off+tab.off+6, bin=Typr["B"];
1971
1979
var shKey = bin.readUshort(data,off + 2*(code>>>8));
1972
1980
var shInd = off + 256*2 + shKey*8;
1973
-
1981
+
1974
1982
var firstCode = bin.readUshort(data,shInd);
1975
1983
var entryCount= bin.readUshort(data,shInd+2);
1976
1984
var idDelta = bin.readShort (data,shInd+4);
1977
1985
var idRangeOffset = bin.readUshort(data,shInd+6);
1978
-
1986
+
1979
1987
if(firstCode<=code && code<=firstCode+entryCount) {
1980
1988
// not completely correct
1981
1989
gid = bin.readUshort(data, shInd+6+idRangeOffset + (code&255)*2);
1982
1990
}
1983
1991
else gid=0;
1984
1992
//if(code>256) console.log(code,(code>>>8),shKey,firstCode,entryCount,idDelta,idRangeOffset);
1985
-
1993
+
1986
1994
//throw "e";
1987
1995
//console.log(tab, bin.readUshort(data,off));
1988
1996
//throw "e";
@@ -2959,4 +2967,4 @@ Typr["U"] = function () {
2959
2967
} ( ) ;
2960
2968
2961
2969
2962
- export default Typr ;
2970
+ export default Typr ;
0 commit comments