@@ -8,7 +8,7 @@ var isWorker = (typeof window == "undefined");
8
8
/**
9
9
* Maximum file size of the font.
10
10
*/
11
- var kMaxFontFileSize = 200000 ;
11
+ var kMaxFontFileSize = 40000 ;
12
12
13
13
/**
14
14
* Maximum time to wait for a font to be loaded by @font-face
@@ -77,6 +77,9 @@ var Fonts = (function Fonts() {
77
77
measureCache = sizes [size ] = Object .create (null );
78
78
ctx .font = (size * kScalePrecision ) + 'px "' + fontName + '"' ;
79
79
},
80
+ getActive : function fonts_getActive () {
81
+ return current ;
82
+ },
80
83
charsToUnicode : function fonts_chars2Unicode (chars ) {
81
84
if (!charsCache )
82
85
return chars ;
@@ -1386,7 +1389,57 @@ var Type1Parser = function() {
1386
1389
}
1387
1390
1388
1391
return extracted ;
1389
- }
1392
+ },
1393
+
1394
+ this .extractFontHeader = function t1_extractFontProgram (stream ) {
1395
+ var headerString = "" ;
1396
+ for (var i = 0 ; i < stream .length ; i ++)
1397
+ headerString += String .fromCharCode (stream [i ]);
1398
+
1399
+ var info = {
1400
+ textMatrix : null
1401
+ };
1402
+
1403
+ function readNumberArray (str , index ) {
1404
+ var start = ++index ;
1405
+ var count = 0 ;
1406
+ while ((c = str [index ++]) != "]" )
1407
+ count ++;
1408
+
1409
+ var array = str .substr (start , count ).split (" " );
1410
+ for (var i = 0 ; i < array .length ; i ++)
1411
+ array [i ] = parseFloat (array [i ]);
1412
+ return array ;
1413
+ };
1414
+
1415
+ var token = "" ;
1416
+ var count = headerString .length ;
1417
+ for (var i = 0 ; i < count ; i ++) {
1418
+ var c = headerString [i ];
1419
+ if (c == " " || c == "\n " ) {
1420
+ switch (token ) {
1421
+ case "/FontMatrix" :
1422
+ var matrix = readNumberArray (headerString , i + 1 );
1423
+
1424
+ // The FontMatrix is in unitPerEm, so make it pixels
1425
+ for (var j = 0 ; j < matrix .length ; j ++)
1426
+ matrix [j ] *= 1000 ;
1427
+
1428
+ // Make the angle into the right direction
1429
+ matrix [2 ] *= -1 ;
1430
+
1431
+ info .textMatrix = matrix ;
1432
+ break ;
1433
+ }
1434
+ token = "" ;
1435
+ } else {
1436
+ token += c ;
1437
+ }
1438
+ }
1439
+
1440
+ return info ;
1441
+ };
1442
+
1390
1443
};
1391
1444
1392
1445
/**
@@ -1457,7 +1510,12 @@ var CFF = function(name, file, properties) {
1457
1510
// Get the data block containing glyphs and subrs informations
1458
1511
var length1 = file .dict .get ("Length1" );
1459
1512
var length2 = file .dict .get ("Length2" );
1460
- file .skip (length1 );
1513
+
1514
+ var headerBlock = file .getBytes (length1 );
1515
+ var header = type1Parser .extractFontHeader (headerBlock );
1516
+ for (var info in header ) {
1517
+ properties [info ] = header [info ];
1518
+ }
1461
1519
1462
1520
// Decrypt the data blocks and retrieve it's content
1463
1521
var eexecBlock = file .getBytes (length2 );
@@ -1700,6 +1758,7 @@ CFF.prototype = {
1700
1758
" charstrings ": this.createCFFIndexHeader([[0x8B, 0x0E]].concat(glyphs), true),
1701
1759
1702
1760
" private ": (function(self) {
1761
+ log(properties.stemSnapH);
1703
1762
var data =
1704
1763
" \x8b \x14 " + // defaultWidth
1705
1764
" \x8b \x15 " + // nominalWidth
0 commit comments