Browse Source

Merge remote-tracking branch 'origin/master' into mozilla

Saebekassebil 13 years ago
parent
commit
8c8242f5d1
  1. 1
      LICENSE
  2. 12
      src/bidi.js
  3. 2
      src/colorspace.js
  4. 81
      src/fonts.js
  5. 4
      src/function.js
  6. 1
      test/pdfs/issue1309.pdf.link
  7. 1
      test/pdfs/issue1317.pdf.link
  8. 14
      test/test_manifest.json

1
LICENSE

@ -12,6 +12,7 @@ @@ -12,6 +12,7 @@
Jakob Miland <saebekassebil@gmail.com>
Artur Adib <aadib@mozilla.com>
Brendan Dahl <bdahl@mozilla.com>
David Quintana <gigaherz@gmail.com>
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),

12
src/bidi.js

@ -132,9 +132,9 @@ var bidi = PDFJS.bidi = (function bidiClosure() { @@ -132,9 +132,9 @@ var bidi = PDFJS.bidi = (function bidiClosure() {
// get types, fill arrays
var chars = new Array(strLength);
var types = new Array(strLength);
var oldtypes = new Array(strLength);
var chars = [];
var types = [];
var oldtypes = [];
var numBidi = 0;
for (var i = 0; i < strLength; ++i) {
@ -176,16 +176,12 @@ var bidi = PDFJS.bidi = (function bidiClosure() { @@ -176,16 +176,12 @@ var bidi = PDFJS.bidi = (function bidiClosure() {
}
}
var levels = new Array(strLength);
var levels = [];
for (var i = 0; i < strLength; ++i) {
levels[i] = startLevel;
}
var diffChars = new Array(strLength);
var diffLevels = new Array(strLength);
var diffTypes = new Array(strLength);
/*
X1-X10: skip most of this, since we are NOT doing the embeddings.
*/

2
src/colorspace.js

@ -220,7 +220,7 @@ var AlternateCS = (function AlternateCSClosure() { @@ -220,7 +220,7 @@ var AlternateCS = (function AlternateCSClosure() {
var baseNumComps = base.numComps;
var baseBuf = new Uint8Array(baseNumComps * length);
var numComps = this.numComps;
var scaled = new Array(numComps);
var scaled = [];
for (var i = 0; i < length; i += numComps) {
for (var z = 0; z < numComps; ++z)

81
src/fonts.js

@ -174,7 +174,6 @@ var Encodings = { @@ -174,7 +174,6 @@ var Encodings = {
'', '', 'Lslash', 'Oslash', 'OE', 'ordmasculine', '', '', '', '', '', 'ae',
'', '', '', 'dotlessi', '', '', 'lslash', 'oslash', 'oe', 'germandbls'],
WinAnsiEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent',
'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus',
@ -1658,6 +1657,30 @@ var Font = (function FontClosure() { @@ -1658,6 +1657,30 @@ var Font = (function FontClosure() {
glyf.data = newGlyfData.subarray(0, writeOffset);
}
function findEmptyGlyphs(locaTable, isGlyphLocationsLong, emptyGlyphIds) {
var itemSize, itemDecode;
if (isGlyphLocationsLong) {
itemSize = 4;
itemDecode = function fontItemDecodeLong(data, offset) {
return (data[offset] << 24) | (data[offset + 1] << 16) |
(data[offset + 2] << 8) | data[offset + 3];
};
} else {
itemSize = 2;
itemDecode = function fontItemDecode(data, offset) {
return (data[offset] << 9) | (data[offset + 1] << 1);
};
}
var data = locaTable.data, length = data.length;
var lastOffset = itemDecode(data, 0);
for (var i = itemSize, j = 0; i < length; i += itemSize, j++) {
var offset = itemDecode(data, i);
if (offset == lastOffset)
emptyGlyphIds[j] = true;
lastOffset = offset;
}
}
function readGlyphNameMap(post, properties) {
var start = (font.start ? font.start : 0) + post.offset;
font.pos = start;
@ -1784,11 +1807,15 @@ var Font = (function FontClosure() { @@ -1784,11 +1807,15 @@ var Font = (function FontClosure() {
sanitizeMetrics(font, hhea, hmtx, numGlyphs);
sanitizeMetrics(font, vhea, vmtx, numGlyphs);
var isGlyphLocationsLong = int16([head.data[50], head.data[51]]);
if (head && loca && glyf) {
var isGlyphLocationsLong = int16([head.data[50], head.data[51]]);
sanitizeGlyphLocations(loca, glyf, numGlyphs, isGlyphLocationsLong);
}
var emptyGlyphIds = [];
if (glyf)
findEmptyGlyphs(loca, isGlyphLocationsLong, emptyGlyphIds);
// Sanitizer reduces the glyph advanceWidth to the maxAdvanceWidth
// Sometimes it's 0. That needs to be fixed
if (hhea.data[10] == 0 && hhea.data[11] == 0) {
@ -1920,6 +1947,25 @@ var Font = (function FontClosure() { @@ -1920,6 +1947,25 @@ var Font = (function FontClosure() {
}
}
// remove glyph references outside range of avaialable glyphs or empty
var glyphsRemoved = 0;
for (var i = ids.length - 1; i >= 0; i--) {
if (ids[i] < numGlyphs &&
(!emptyGlyphIds[ids[i]] || this.isSymbolicFont))
continue;
ids.splice(i, 1);
glyphs.splice(i, 1);
glyphsRemoved++;
}
// heuristics: if removed more than 2 glyphs encoding WinAnsiEncoding
// does not set properly
if (glyphsRemoved > 2) {
warn('Switching TrueType encoding to MacRomanEncoding for ' +
this.name + ' font');
encoding = Encodings.MacRomanEncoding;
}
if (hasShortCmap && this.hasEncoding && !this.isSymbolicFont) {
// Re-encode short map encoding to unicode -- that simplifies the
// resolution of MacRoman encoded glyphs logic for TrueType fonts:
@ -1956,6 +2002,7 @@ var Font = (function FontClosure() { @@ -1956,6 +2002,7 @@ var Font = (function FontClosure() {
for (var i = 0, ii = glyphs.length; i < ii; i++)
reverseMap[glyphs[i].unicode] = i;
var newGlyphUnicodes = [];
for (var i = 0, ii = glyphs.length; i < ii; i++) {
var code = glyphs[i].unicode;
var changeCode = false;
@ -1968,16 +2015,26 @@ var Font = (function FontClosure() { @@ -1968,16 +2015,26 @@ var Font = (function FontClosure() {
}
if (glyphName in GlyphsUnicode) {
var unicode = GlyphsUnicode[glyphName];
if (!unicode || (unicode in reverseMap))
continue; // unknown glyph name or its place is taken
if (!unicode || reverseMap[unicode] === i)
continue; // unknown glyph name or in its own place
glyphs[i].unicode = unicode;
reverseMap[unicode] = i;
newGlyphUnicodes[i] = unicode;
if (changeCode)
toFontChar[code] = unicode;
delete reverseMap[code];
}
this.useToFontChar = true;
}
for (var index in newGlyphUnicodes) {
var unicode = newGlyphUnicodes[index];
if (reverseMap[unicode]) {
// avoiding assigning to the same unicode
glyphs[index].unicode = unusedUnicode++;
continue;
}
glyphs[index].unicode = unicode;
reverseMap[unicode] = index;
}
this.useToFontChar = true;
}
// Moving all symbolic font glyphs into 0xF000 - 0xF0FF range.
@ -1990,12 +2047,6 @@ var Font = (function FontClosure() { @@ -1990,12 +2047,6 @@ var Font = (function FontClosure() {
this.useToFontChar = true;
}
// remove glyph references outside range of avaialable glyphs
for (var i = 0, ii = ids.length; i < ii; i++) {
if (ids[i] >= numGlyphs)
ids[i] = 0;
}
createGlyphNameMap(glyphs, ids, properties);
this.glyphNameMap = properties.glyphNameMap;
@ -3652,7 +3703,7 @@ var CFFParser = (function CFFParserClosure() { @@ -3652,7 +3703,7 @@ var CFFParser = (function CFFParserClosure() {
var name = index.get(i);
// OTS doesn't allow names to be over 127 characters.
var length = Math.min(name.length, 127);
var data = new Array(length);
var data = [];
// OTS also only permits certain characters in the name.
for (var j = 0; j < length; ++j) {
var c = name[j];
@ -4502,7 +4553,7 @@ var CFFCompiler = (function CFFCompilerClosure() { @@ -4502,7 +4553,7 @@ var CFFCompiler = (function CFFCompilerClosure() {
return this.compileTypedArray(fdSelect);
},
compileTypedArray: function compileTypedArray(data) {
var out = new Array(data.length);
var out = [];
for (var i = 0, ii = data.length; i < ii; ++i)
out[i] = data[i];
return out;

4
src/function.js

@ -81,7 +81,7 @@ var PDFFunction = (function PDFFunctionClosure() { @@ -81,7 +81,7 @@ var PDFFunction = (function PDFFunctionClosure() {
function toMultiArray(arr) {
var inputLength = arr.length;
var outputLength = arr.length / 2;
var out = new Array(outputLength);
var out = [];
var index = 0;
for (var i = 0; i < inputLength; i += 2) {
out[index] = [arr[i], arr[i + 1]];
@ -364,7 +364,7 @@ var PDFFunction = (function PDFFunctionClosure() { @@ -364,7 +364,7 @@ var PDFFunction = (function PDFFunctionClosure() {
return cache.get(key);
var stack = evaluator.execute(initialStack);
var transformed = new Array(numOutputs);
var transformed = [];
for (i = numOutputs - 1; i >= 0; --i) {
var out = stack.pop();
var rangeIndex = 2 * i;

1
test/pdfs/issue1309.pdf.link

@ -0,0 +1 @@ @@ -0,0 +1 @@
http://www.lufthansa.com/mediapool/pdf/31/media_907231.pdf

1
test/pdfs/issue1317.pdf.link

@ -0,0 +1 @@ @@ -0,0 +1 @@
http://iliad.fr/presse/2012/CP_080312_Free_mobile.pdf

14
test/test_manifest.json

@ -530,5 +530,19 @@ @@ -530,5 +530,19 @@
"pageLimit": 2,
"link": true,
"type": "eq"
},
{ "id": "issue1309",
"file": "pdfs/issue1309.pdf",
"md5": "e835fb7f3dab3073ad37d0bd3c6399fa",
"rounds": 1,
"link": true,
"type": "eq"
},
{ "id": "issue1317",
"file": "pdfs/issue1317.pdf",
"md5": "6fb46275b30c48c8985617d4f86199e3",
"rounds": 1,
"link": true,
"type": "eq"
}
]

Loading…
Cancel
Save