@@ -1483,42 +1483,47 @@ CFF.prototype = {
1483
1483
// If there is no object, just create an array saying that with another
1484
1484
// offset byte.
1485
1485
if (count == 0 )
1486
- return [ 0x00 , 0x00 , 0x00 ] ;
1486
+ return " \x00 \x00 \x00 " ;
1487
1487
1488
- var data = [] ;
1488
+ var data = "" ;
1489
1489
var bytes = FontsUtils .integerToBytes (count , 2 );
1490
1490
for (var i = 0 ; i < bytes .length ; i ++)
1491
- data . push (bytes [i ]);
1491
+ data += String . fromCharCode (bytes [i ]);
1492
1492
1493
1493
// Next byte contains the offset size use to reference object in the file
1494
1494
// Actually we're using 0x04 to be sure to be able to store everything
1495
1495
// without thinking of it while coding.
1496
- data . push ( 0x04 ) ;
1496
+ data += " \x04 " ;
1497
1497
1498
1498
// Add another offset after this one because we need a new offset
1499
1499
var relativeOffset = 1 ;
1500
1500
for (var i = 0 ; i < count + 1 ; i ++) {
1501
1501
var bytes = FontsUtils .integerToBytes (relativeOffset , 4 );
1502
1502
for (var j = 0 ; j < bytes .length ; j ++)
1503
- data . push (bytes [j ]);
1503
+ data += String . fromCharCode (bytes [j ]);
1504
1504
1505
1505
if (objects [i ])
1506
1506
relativeOffset += objects [i ].length ;
1507
1507
}
1508
1508
1509
1509
for (var i =0 ; i < count ; i ++) {
1510
1510
for (var j = 0 ; j < objects [i ].length ; j ++)
1511
- data . push ( isByte ? objects [i ][j ] : objects [i ]. charCodeAt ( j )) ;
1511
+ data += isByte ? String . fromCharCode ( objects [i ][j ]) : objects [i ][ j ] ;
1512
1512
}
1513
1513
return data ;
1514
1514
},
1515
1515
1516
1516
encodeNumber : function cff_encodeNumber (value ) {
1517
- var x = 0 ;
1518
1517
if (value >= -32768 && value <= 32767 ) {
1519
- return [ 28 , value >> 8 , value & 0xFF ];
1518
+ return "\x1c " +
1519
+ String .fromCharCode (value >> 8 ) +
1520
+ String .fromCharCode (value & 0xFF );
1520
1521
} else if (value >= (-2147483647 -1 ) && value <= 2147483647 ) {
1521
- return [ 0xFF , value >> 24 , Value >> 16 , value >> 8 , value & 0xFF ];
1522
+ return "\xff " +
1523
+ String .fromCharCode (value >> 24 ) +
1524
+ String .fromCharCode (value >> 16 ) +
1525
+ String .fromCharCode (value >> 8 ) +
1526
+ String .fromCharCode (value & 0xFF );
1522
1527
}
1523
1528
error ("Value: " + value + " is not allowed" );
1524
1529
return null ;
@@ -1626,16 +1631,24 @@ CFF.prototype = {
1626
1631
},
1627
1632
1628
1633
wrap : function wrap (name , glyphs , charstrings , subrs , properties ) {
1634
+ function stringToArray (str ) {
1635
+ var array = [];
1636
+ for (var i = 0 ; i < str .length ; ++i )
1637
+ array [i ] = str .charCodeAt (i );
1638
+
1639
+ return array ;
1640
+ };
1641
+
1629
1642
var cff = new Uint8Array (kMaxFontFileSize );
1630
1643
var currentOffset = 0 ;
1631
1644
1632
1645
// Font header (major version, minor version, header size, offset size)
1633
- var header = [ 0x01 , 0x00 , 0x04 , 0x04 ] ;
1646
+ var header = " \x01 \x00 \x04 \x04 " ;
1634
1647
currentOffset += header .length ;
1635
- cff .set (header );
1648
+ cff .set (stringToArray ( header ) );
1636
1649
1637
1650
// Names Index
1638
- var nameIndex = this .createCFFIndexHeader ( [name ]);
1651
+ var nameIndex = stringToArray ( this .createCFFIndexHeader ( [name ]) );
1639
1652
cff .set (nameIndex , currentOffset );
1640
1653
currentOffset += nameIndex .length ;
1641
1654
@@ -1649,11 +1662,11 @@ CFF.prototype = {
1649
1662
var weight = "" ;
1650
1663
var strings = [version , notice , fullName ,
1651
1664
familyName , weight ];
1652
- var stringsIndex = this .createCFFIndexHeader (strings );
1665
+ var stringsIndex = stringToArray ( this .createCFFIndexHeader (strings ) );
1653
1666
var stringsDataLength = stringsIndex .length ;
1654
1667
1655
1668
// Create the global subroutines index
1656
- var globalSubrsIndex = this .createCFFIndexHeader ( []);
1669
+ var globalSubrsIndex = stringToArray ( this .createCFFIndexHeader ( []) );
1657
1670
1658
1671
// Fill the charset header (first byte is the encoding)
1659
1672
var charset = [0x00 ];
@@ -1668,7 +1681,7 @@ CFF.prototype = {
1668
1681
charset .push (bytes [1 ]);
1669
1682
}
1670
1683
1671
- var charstringsIndex = this .createCFFIndexHeader ([[0x8B , 0x0E ]].concat (glyphs ), true );
1684
+ var charstringsIndex = stringToArray ( this .createCFFIndexHeader ([[0x8B , 0x0E ]].concat (glyphs ), true ) );
1672
1685
1673
1686
//Top Dict Index
1674
1687
var topDictIndex = [
@@ -1682,25 +1695,25 @@ CFF.prototype = {
1682
1695
1683
1696
var fontBBox = properties .bbox ;
1684
1697
for (var i = 0 ; i < fontBBox .length ; i ++)
1685
- topDictIndex = topDictIndex .concat (this .encodeNumber (fontBBox [i ]));
1698
+ topDictIndex = topDictIndex .concat (stringToArray ( this .encodeNumber (fontBBox [i ]) ));
1686
1699
topDictIndex .push (5 ) // FontBBox;
1687
1700
1688
1701
var charsetOffset = currentOffset +
1689
1702
(topDictIndex .length + (4 + 4 + 4 + 7 )) +
1690
1703
stringsIndex .length +
1691
1704
globalSubrsIndex .length ;
1692
- topDictIndex = topDictIndex .concat (this .encodeNumber (charsetOffset ));
1705
+ topDictIndex = topDictIndex .concat (stringToArray ( this .encodeNumber (charsetOffset ) ));
1693
1706
topDictIndex .push (15 ); // charset
1694
1707
1695
1708
topDictIndex = topDictIndex .concat ([28 , 0 , 0 , 16 ]) // Encoding
1696
1709
1697
1710
var charstringsOffset = charsetOffset + (glyphsCount * 2 ) + 1 ;
1698
- topDictIndex = topDictIndex .concat (this .encodeNumber (charstringsOffset ));
1711
+ topDictIndex = topDictIndex .concat (stringToArray ( this .encodeNumber (charstringsOffset ) ));
1699
1712
topDictIndex .push (17 ); // charstrings
1700
1713
1701
1714
topDictIndex = topDictIndex .concat ([28 , 0 , 55 ])
1702
1715
var privateOffset = charstringsOffset + charstringsIndex .length ;
1703
- topDictIndex = topDictIndex .concat (this .encodeNumber (privateOffset ));
1716
+ topDictIndex = topDictIndex .concat (stringToArray ( this .encodeNumber (privateOffset ) ));
1704
1717
topDictIndex .push (18 ); // Private
1705
1718
1706
1719
var indexes = [
@@ -1716,7 +1729,7 @@ CFF.prototype = {
1716
1729
}
1717
1730
1718
1731
// Private Data
1719
- var defaultWidth = this .encodeNumber (0 );
1732
+ var defaultWidth = stringToArray ( this .encodeNumber (0 ) );
1720
1733
var privateData = [].concat (
1721
1734
defaultWidth , [20 ],
1722
1735
[139 , 21 ], // nominalWidth
@@ -1736,7 +1749,7 @@ CFF.prototype = {
1736
1749
1737
1750
1738
1751
// Local subrs
1739
- var subrsData = this .createCFFIndexHeader (subrs , true );
1752
+ var subrsData = stringToArray ( this .createCFFIndexHeader (subrs , true ) );
1740
1753
cff .set (subrsData , currentOffset );
1741
1754
currentOffset += subrsData .length ;
1742
1755
0 commit comments