Use a typed array in the CMAP construction function
This commit is contained in:
parent
ac020e26f1
commit
7ec2ea1e2f
44
PDFFont.js
44
PDFFont.js
@ -274,15 +274,15 @@ Font.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
_createCMAPTable: function font_createCMAPTable(aGlyphs) {
|
_createCMAPTable: function font_createCMAPTable(aGlyphs) {
|
||||||
var characters = new Array(kMaxGlyphsCount);
|
var characters = new Uint16Array(kMaxGlyphsCount);
|
||||||
for (var i = 0; i < aGlyphs.length; i++) {
|
for (var i = 0; i < aGlyphs.length; i++)
|
||||||
characters[aGlyphs[i].unicode] = i + 1;
|
characters[aGlyphs[i].unicode] = i + 1;
|
||||||
}
|
|
||||||
|
|
||||||
// Separate the glyphs into continuous range of codes, aka segment.
|
// Separate the glyphs into continuous range of codes, aka segment.
|
||||||
var ranges = [];
|
var ranges = [];
|
||||||
var range = [];
|
var range = [];
|
||||||
for (var i = 0; i < characters.length; i++) {
|
var count = characters.length;
|
||||||
|
for (var i = 0; i < count; i++) {
|
||||||
if (characters[i]) {
|
if (characters[i]) {
|
||||||
range.push(i);
|
range.push(i);
|
||||||
} else if (range.length) {
|
} else if (range.length) {
|
||||||
@ -548,22 +548,18 @@ Font.prototype = {
|
|||||||
var FontsUtils = {
|
var FontsUtils = {
|
||||||
_bytesArray: new Uint8Array(4),
|
_bytesArray: new Uint8Array(4),
|
||||||
integerToBytes: function fu_integerToBytes(aValue, aBytesCount) {
|
integerToBytes: function fu_integerToBytes(aValue, aBytesCount) {
|
||||||
// If we want only one byte, take a fast path
|
var bytes = this._bytesArray;
|
||||||
|
|
||||||
if (aBytesCount == 1) {
|
if (aBytesCount == 1) {
|
||||||
this._bytesArray.set([aValue]);
|
bytes.set([aValue]);
|
||||||
return this._bytesArray[0];
|
return bytes[0];
|
||||||
|
} else if (aBytesCount == 2) {
|
||||||
|
bytes.set([aValue >> 8, aValue]);
|
||||||
|
return [bytes[0], bytes[1]];
|
||||||
|
} else if (aBytesCount == 4) {
|
||||||
|
bytes.set([aValue >> 24, aValue >> 16, aValue >> 8, aValue]);
|
||||||
|
return [bytes[0], bytes[1], bytes[2], bytes[3]];
|
||||||
}
|
}
|
||||||
|
|
||||||
var bytes = [];
|
|
||||||
for (var i = 0; i < aBytesCount; i++)
|
|
||||||
bytes[i] = 0x00;
|
|
||||||
|
|
||||||
do {
|
|
||||||
bytes[--aBytesCount] = (aValue & 0xFF);
|
|
||||||
aValue = aValue >> 8;
|
|
||||||
} while (aBytesCount && aValue > 0);
|
|
||||||
|
|
||||||
return bytes;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
bytesToInteger: function fu_bytesToInteger(aBytesArray) {
|
bytesToInteger: function fu_bytesToInteger(aBytesArray) {
|
||||||
@ -875,7 +871,7 @@ var Type1Parser = function() {
|
|||||||
var value = "";
|
var value = "";
|
||||||
var count = aStream.length;
|
var count = aStream.length;
|
||||||
for (var i = 0; i < count; i++) {
|
for (var i = 0; i < count; i++) {
|
||||||
value = aStream.getByte();
|
value = aStream[i];
|
||||||
if (aByteArray)
|
if (aByteArray)
|
||||||
decryptedString[i] = value ^ (r >> 8);
|
decryptedString[i] = value ^ (r >> 8);
|
||||||
else
|
else
|
||||||
@ -1054,7 +1050,7 @@ var Type1Parser = function() {
|
|||||||
* extracted from and eexec encrypted block of data
|
* extracted from and eexec encrypted block of data
|
||||||
*/
|
*/
|
||||||
this.extractFontInfo = function(aStream) {
|
this.extractFontInfo = function(aStream) {
|
||||||
var eexecString = decrypt(new Stream(aStream), kEexecEncryptionKey, 4, true);
|
var eexecString = decrypt(aStream, kEexecEncryptionKey, 4, true);
|
||||||
var subrs = [], glyphs = [];
|
var subrs = [], glyphs = [];
|
||||||
var inSubrs = inGlyphs = false;
|
var inSubrs = inGlyphs = false;
|
||||||
var glyph = "";
|
var glyph = "";
|
||||||
@ -1070,16 +1066,16 @@ var Type1Parser = function() {
|
|||||||
|
|
||||||
if (inSubrs && c == 0x52) {
|
if (inSubrs && c == 0x52) {
|
||||||
length = parseInt(length);
|
length = parseInt(length);
|
||||||
var stream = new Stream(eexecString.slice(i + 3, i + 3 + length));
|
var data = eexecString.slice(i + 3, i + 3 + length);
|
||||||
var encodedSubr = decrypt(stream, kCharStringsEncryptionKey, 4).join("");
|
var encodedSubr = decrypt(data, kCharStringsEncryptionKey, 4).join("");
|
||||||
var subr = decodeCharString(new StringStream(encodedSubr));
|
var subr = decodeCharString(new StringStream(encodedSubr));
|
||||||
|
|
||||||
subrs.push(subr);
|
subrs.push(subr);
|
||||||
i += 3 + length;
|
i += 3 + length;
|
||||||
} else if (inGlyphs && c == 0x52) {
|
} else if (inGlyphs && c == 0x52) {
|
||||||
length = parseInt(length);
|
length = parseInt(length);
|
||||||
var stream = new Stream(eexecString.slice(i + 3, i + 3 + length));
|
var data = eexecString.slice(i + 3, i + 3 + length);
|
||||||
var encodedCharstring = decrypt(stream, kCharStringsEncryptionKey, 4).join("");
|
var encodedCharstring = decrypt(data, kCharStringsEncryptionKey, 4).join("");
|
||||||
var subr = decodeCharString(new StringStream(encodedCharstring));
|
var subr = decodeCharString(new StringStream(encodedCharstring));
|
||||||
|
|
||||||
glyphs.push({
|
glyphs.push({
|
||||||
|
Loading…
x
Reference in New Issue
Block a user