Browse Source

PDF.js version 1.3.150 - See mozilla/pdf.js@62ade3e3732b741ddfb0170eaadf4d45c40d1973

master v1.3.150
Pdf Bot 9 years ago
parent
commit
cc0d939805
  1. 2
      bower.json
  2. 326
      build/pdf.combined.js
  3. 4
      build/pdf.js
  4. 326
      build/pdf.worker.js
  5. 2
      package.json

2
bower.json

@ -1,6 +1,6 @@
{ {
"name": "pdfjs-dist", "name": "pdfjs-dist",
"version": "1.3.148", "version": "1.3.150",
"main": [ "main": [
"build/pdf.js", "build/pdf.js",
"build/pdf.worker.js" "build/pdf.worker.js"

326
build/pdf.combined.js

@ -21,8 +21,8 @@ if (typeof PDFJS === 'undefined') {
typeof global !== 'undefined' ? global : this).PDFJS = {}; typeof global !== 'undefined' ? global : this).PDFJS = {};
} }
PDFJS.version = '1.3.148'; PDFJS.version = '1.3.150';
PDFJS.build = '4e9ea35'; PDFJS.build = '62ade3e';
(function pdfjsWrapper() { (function pdfjsWrapper() {
// Use strict in our context only - users might not want it // Use strict in our context only - users might not want it
@ -32414,6 +32414,9 @@ var HINTING_ENABLED = false;
// to control analysis of seac charstrings. // to control analysis of seac charstrings.
var SEAC_ANALYSIS_ENABLED = false; var SEAC_ANALYSIS_ENABLED = false;
// Maximum subroutine call depth of type 2 chartrings. Matches OTS.
var MAX_SUBR_NESTING = 10;
var FontFlags = { var FontFlags = {
FixedPitch: 1, FixedPitch: 1,
Serif: 2, Serif: 2,
@ -38443,10 +38446,7 @@ var CFFParser = (function CFFParserClosure() {
cff.isCIDFont = topDict.hasName('ROS'); cff.isCIDFont = topDict.hasName('ROS');
var charStringOffset = topDict.getByName('CharStrings'); var charStringOffset = topDict.getByName('CharStrings');
var charStringsAndSeacs = this.parseCharStrings(charStringOffset); var charStringIndex = this.parseIndex(charStringOffset).obj;
cff.charStrings = charStringsAndSeacs.charStrings;
cff.seacs = charStringsAndSeacs.seacs;
cff.widths = charStringsAndSeacs.widths;
var fontMatrix = topDict.getByName('FontMatrix'); var fontMatrix = topDict.getByName('FontMatrix');
if (fontMatrix) { if (fontMatrix) {
@ -38474,19 +38474,30 @@ var CFFParser = (function CFFParserClosure() {
// cid fonts don't have an encoding // cid fonts don't have an encoding
encoding = null; encoding = null;
charset = this.parseCharsets(topDict.getByName('charset'), charset = this.parseCharsets(topDict.getByName('charset'),
cff.charStrings.count, cff.strings, true); charStringIndex.count, cff.strings, true);
cff.fdSelect = this.parseFDSelect(topDict.getByName('FDSelect'), cff.fdSelect = this.parseFDSelect(topDict.getByName('FDSelect'),
cff.charStrings.count); charStringIndex.count);
} else { } else {
charset = this.parseCharsets(topDict.getByName('charset'), charset = this.parseCharsets(topDict.getByName('charset'),
cff.charStrings.count, cff.strings, false); charStringIndex.count, cff.strings, false);
encoding = this.parseEncoding(topDict.getByName('Encoding'), encoding = this.parseEncoding(topDict.getByName('Encoding'),
properties, properties,
cff.strings, charset.charset); cff.strings, charset.charset);
} }
cff.charset = charset; cff.charset = charset;
cff.encoding = encoding; cff.encoding = encoding;
var charStringsAndSeacs = this.parseCharStrings(
charStringIndex,
topDict.privateDict.subrsIndex,
globalSubrIndex.obj,
cff.fdSelect,
cff.fdArray);
cff.charStrings = charStringsAndSeacs.charStrings;
cff.seacs = charStringsAndSeacs.seacs;
cff.widths = charStringsAndSeacs.widths;
return cff; return cff;
}, },
parseHeader: function CFFParser_parseHeader() { parseHeader: function CFFParser_parseHeader() {
@ -38661,118 +38672,201 @@ var CFFParser = (function CFFParserClosure() {
} }
return cffDict; return cffDict;
}, },
parseCharStrings: function CFFParser_parseCharStrings(charStringOffset) { parseCharString: function CFFParser_parseCharString(state, data,
var charStrings = this.parseIndex(charStringOffset).obj; localSubrIndex,
var seacs = []; globalSubrIndex) {
var widths = []; if (state.callDepth > MAX_SUBR_NESTING) {
var count = charStrings.count; return false;
for (var i = 0; i < count; i++) { }
var charstring = charStrings.get(i); var stackSize = state.stackSize;
var stack = state.stack;
var stackSize = 0;
var stack = []; var length = data.length;
var undefStack = true;
var hints = 0; for (var j = 0; j < length;) {
var valid = true; var value = data[j++];
var data = charstring; var validationCommand = null;
var length = data.length; if (value === 12) {
var firstStackClearing = true; var q = data[j++];
for (var j = 0; j < length;) { if (q === 0) {
var value = data[j++]; // The CFF specification state that the 'dotsection' command
var validationCommand = null; // (12, 0) is deprecated and treated as a no-op, but all Type2
if (value === 12) { // charstrings processors should support them. Unfortunately
var q = data[j++]; // the font sanitizer don't. As a workaround the sequence (12, 0)
if (q === 0) { // is replaced by a useless (0, hmoveto).
// The CFF specification state that the 'dotsection' command data[j - 2] = 139;
// (12, 0) is deprecated and treated as a no-op, but all Type2 data[j - 1] = 22;
// charstrings processors should support them. Unfortunately stackSize = 0;
// the font sanitizer don't. As a workaround the sequence (12, 0) } else {
// is replaced by a useless (0, hmoveto). validationCommand = CharstringValidationData12[q];
data[j - 2] = 139; }
data[j - 1] = 22; } else if (value === 28) { // number (16 bit)
stackSize = 0; stack[stackSize] = ((data[j] << 24) | (data[j + 1] << 16)) >> 16;
} else { j += 2;
validationCommand = CharstringValidationData12[q]; stackSize++;
} } else if (value === 14) {
} else if (value === 28) { // number (16 bit) if (stackSize >= 4) {
stack[stackSize] = ((data[j] << 24) | (data[j + 1] << 16)) >> 16; stackSize -= 4;
j += 2; if (SEAC_ANALYSIS_ENABLED) {
stackSize++; state.seac = stack.slice(stackSize, stackSize + 4);
} else if (value === 14) { return false;
if (stackSize >= 4) {
stackSize -= 4;
if (SEAC_ANALYSIS_ENABLED) {
seacs[i] = stack.slice(stackSize, stackSize + 4);
valid = false;
}
} }
validationCommand = CharstringValidationData[value]; }
} else if (value >= 32 && value <= 246) { // number validationCommand = CharstringValidationData[value];
stack[stackSize] = value - 139; } else if (value >= 32 && value <= 246) { // number
stackSize++; stack[stackSize] = value - 139;
} else if (value >= 247 && value <= 254) { // number (+1 bytes) stackSize++;
stack[stackSize] = (value < 251 ? } else if (value >= 247 && value <= 254) { // number (+1 bytes)
((value - 247) << 8) + data[j] + 108 : stack[stackSize] = (value < 251 ?
-((value - 251) << 8) - data[j] - 108); ((value - 247) << 8) + data[j] + 108 :
j++; -((value - 251) << 8) - data[j] - 108);
stackSize++; j++;
} else if (value === 255) { // number (32 bit) stackSize++;
stack[stackSize] = ((data[j] << 24) | (data[j + 1] << 16) | } else if (value === 255) { // number (32 bit)
(data[j + 2] << 8) | data[j + 3]) / 65536; stack[stackSize] = ((data[j] << 24) | (data[j + 1] << 16) |
j += 4; (data[j + 2] << 8) | data[j + 3]) / 65536;
stackSize++; j += 4;
} else if (value === 19 || value === 20) { stackSize++;
hints += stackSize >> 1; } else if (value === 19 || value === 20) {
j += (hints + 7) >> 3; // skipping right amount of hints flag data state.hints += stackSize >> 1;
stackSize %= 2; // skipping right amount of hints flag data
validationCommand = CharstringValidationData[value]; j += (state.hints + 7) >> 3;
stackSize %= 2;
validationCommand = CharstringValidationData[value];
} else if (value === 10 || value === 29) {
var subrsIndex;
if (value === 10) {
subrsIndex = localSubrIndex;
} else { } else {
subrsIndex = globalSubrIndex;
}
if (!subrsIndex) {
validationCommand = CharstringValidationData[value]; validationCommand = CharstringValidationData[value];
warn('Missing subrsIndex for ' + validationCommand.id);
return false;
} }
if (validationCommand) { var bias = 32768;
if (validationCommand.stem) { if (subrsIndex.count < 1240) {
hints += stackSize >> 1; bias = 107;
} else if (subrsIndex.count < 33900) {
bias = 1131;
}
var subrNumber = stack[--stackSize] + bias;
if (subrNumber < 0 || subrNumber >= subrsIndex.count) {
validationCommand = CharstringValidationData[value];
warn('Out of bounds subrIndex for ' + validationCommand.id);
return false;
}
state.stackSize = stackSize;
state.callDepth++;
var valid = this.parseCharString(state, subrsIndex.get(subrNumber),
localSubrIndex, globalSubrIndex);
if (!valid) {
return false;
}
state.callDepth--;
stackSize = state.stackSize;
continue;
} else if (value === 11) {
state.stackSize = stackSize;
return true;
} else {
validationCommand = CharstringValidationData[value];
}
if (validationCommand) {
if (validationCommand.stem) {
state.hints += stackSize >> 1;
}
if ('min' in validationCommand) {
if (!state.undefStack && stackSize < validationCommand.min) {
warn('Not enough parameters for ' + validationCommand.id +
'; actual: ' + stackSize +
', expected: ' + validationCommand.min);
return false;
} }
if ('min' in validationCommand) { }
if (!undefStack && stackSize < validationCommand.min) { if (state.firstStackClearing && validationCommand.stackClearing) {
warn('Not enough parameters for ' + validationCommand.id + state.firstStackClearing = false;
'; actual: ' + stackSize + // the optional character width can be found before the first
', expected: ' + validationCommand.min); // stack-clearing command arguments
valid = false; stackSize -= validationCommand.min;
break; if (stackSize >= 2 && validationCommand.stem) {
} // there are even amount of arguments for stem commands
stackSize %= 2;
} else if (stackSize > 1) {
warn('Found too many parameters for stack-clearing command');
} }
if (firstStackClearing && validationCommand.stackClearing) { if (stackSize > 0 && stack[stackSize - 1] >= 0) {
firstStackClearing = false; state.width = stack[stackSize - 1];
// the optional character width can be found before the first
// stack-clearing command arguments
stackSize -= validationCommand.min;
if (stackSize >= 2 && validationCommand.stem) {
// there are even amount of arguments for stem commands
stackSize %= 2;
} else if (stackSize > 1) {
warn('Found too many parameters for stack-clearing command');
}
if (stackSize > 0 && stack[stackSize - 1] >= 0) {
widths[i] = stack[stackSize - 1];
}
} }
if ('stackDelta' in validationCommand) { }
if ('stackFn' in validationCommand) { if ('stackDelta' in validationCommand) {
validationCommand.stackFn(stack, stackSize); if ('stackFn' in validationCommand) {
} validationCommand.stackFn(stack, stackSize);
stackSize += validationCommand.stackDelta;
} else if (validationCommand.stackClearing) {
stackSize = 0;
} else if (validationCommand.resetStack) {
stackSize = 0;
undefStack = false;
} else if (validationCommand.undefStack) {
stackSize = 0;
undefStack = true;
firstStackClearing = false;
} }
stackSize += validationCommand.stackDelta;
} else if (validationCommand.stackClearing) {
stackSize = 0;
} else if (validationCommand.resetStack) {
stackSize = 0;
state.undefStack = false;
} else if (validationCommand.undefStack) {
stackSize = 0;
state.undefStack = true;
state.firstStackClearing = false;
}
}
}
state.stackSize = stackSize;
return true;
},
parseCharStrings: function CFFParser_parseCharStrings(charStrings,
localSubrIndex,
globalSubrIndex,
fdSelect,
fdArray) {
var seacs = [];
var widths = [];
var count = charStrings.count;
for (var i = 0; i < count; i++) {
var charstring = charStrings.get(i);
var state = {
callDepth: 0,
stackSize: 0,
stack: [],
undefStack: true,
hints: 0,
firstStackClearing: true,
seac: null,
width: null
};
var valid = true;
var localSubrToUse = null;
if (fdSelect && fdArray.length) {
var fdIndex = fdSelect.getFDIndex(i);
if (fdIndex === -1) {
warn('Glyph index is not in fd select.');
valid = false;
} }
if (fdIndex >= fdArray.length) {
warn('Invalid fd index for glyph index.');
valid = false;
}
if (valid) {
localSubrToUse = fdArray[fdIndex].privateDict.subrsIndex;
}
} else if (localSubrIndex) {
localSubrToUse = localSubrIndex;
}
if (valid) {
valid = this.parseCharString(state, charstring, localSubrToUse,
globalSubrIndex);
}
if (state.width !== null) {
widths[i] = state.width;
}
if (state.seac !== null) {
seacs[i] = state.seac;
} }
if (!valid) { if (!valid) {
// resetting invalid charstring to single 'endchar' // resetting invalid charstring to single 'endchar'
@ -39267,6 +39361,14 @@ var CFFFDSelect = (function CFFFDSelectClosure() {
this.fdSelect = fdSelect; this.fdSelect = fdSelect;
this.raw = raw; this.raw = raw;
} }
CFFFDSelect.prototype = {
getFDIndex: function CFFFDSelect_get(glyphIndex) {
if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) {
return -1;
}
return this.fdSelect[glyphIndex];
}
};
return CFFFDSelect; return CFFFDSelect;
})(); })();

4
build/pdf.js

@ -21,8 +21,8 @@ if (typeof PDFJS === 'undefined') {
typeof global !== 'undefined' ? global : this).PDFJS = {}; typeof global !== 'undefined' ? global : this).PDFJS = {};
} }
PDFJS.version = '1.3.148'; PDFJS.version = '1.3.150';
PDFJS.build = '4e9ea35'; PDFJS.build = '62ade3e';
(function pdfjsWrapper() { (function pdfjsWrapper() {
// Use strict in our context only - users might not want it // Use strict in our context only - users might not want it

326
build/pdf.worker.js vendored

@ -21,8 +21,8 @@ if (typeof PDFJS === 'undefined') {
typeof global !== 'undefined' ? global : this).PDFJS = {}; typeof global !== 'undefined' ? global : this).PDFJS = {};
} }
PDFJS.version = '1.3.148'; PDFJS.version = '1.3.150';
PDFJS.build = '4e9ea35'; PDFJS.build = '62ade3e';
(function pdfjsWrapper() { (function pdfjsWrapper() {
// Use strict in our context only - users might not want it // Use strict in our context only - users might not want it
@ -24602,6 +24602,9 @@ var HINTING_ENABLED = false;
// to control analysis of seac charstrings. // to control analysis of seac charstrings.
var SEAC_ANALYSIS_ENABLED = false; var SEAC_ANALYSIS_ENABLED = false;
// Maximum subroutine call depth of type 2 chartrings. Matches OTS.
var MAX_SUBR_NESTING = 10;
var FontFlags = { var FontFlags = {
FixedPitch: 1, FixedPitch: 1,
Serif: 2, Serif: 2,
@ -30631,10 +30634,7 @@ var CFFParser = (function CFFParserClosure() {
cff.isCIDFont = topDict.hasName('ROS'); cff.isCIDFont = topDict.hasName('ROS');
var charStringOffset = topDict.getByName('CharStrings'); var charStringOffset = topDict.getByName('CharStrings');
var charStringsAndSeacs = this.parseCharStrings(charStringOffset); var charStringIndex = this.parseIndex(charStringOffset).obj;
cff.charStrings = charStringsAndSeacs.charStrings;
cff.seacs = charStringsAndSeacs.seacs;
cff.widths = charStringsAndSeacs.widths;
var fontMatrix = topDict.getByName('FontMatrix'); var fontMatrix = topDict.getByName('FontMatrix');
if (fontMatrix) { if (fontMatrix) {
@ -30662,19 +30662,30 @@ var CFFParser = (function CFFParserClosure() {
// cid fonts don't have an encoding // cid fonts don't have an encoding
encoding = null; encoding = null;
charset = this.parseCharsets(topDict.getByName('charset'), charset = this.parseCharsets(topDict.getByName('charset'),
cff.charStrings.count, cff.strings, true); charStringIndex.count, cff.strings, true);
cff.fdSelect = this.parseFDSelect(topDict.getByName('FDSelect'), cff.fdSelect = this.parseFDSelect(topDict.getByName('FDSelect'),
cff.charStrings.count); charStringIndex.count);
} else { } else {
charset = this.parseCharsets(topDict.getByName('charset'), charset = this.parseCharsets(topDict.getByName('charset'),
cff.charStrings.count, cff.strings, false); charStringIndex.count, cff.strings, false);
encoding = this.parseEncoding(topDict.getByName('Encoding'), encoding = this.parseEncoding(topDict.getByName('Encoding'),
properties, properties,
cff.strings, charset.charset); cff.strings, charset.charset);
} }
cff.charset = charset; cff.charset = charset;
cff.encoding = encoding; cff.encoding = encoding;
var charStringsAndSeacs = this.parseCharStrings(
charStringIndex,
topDict.privateDict.subrsIndex,
globalSubrIndex.obj,
cff.fdSelect,
cff.fdArray);
cff.charStrings = charStringsAndSeacs.charStrings;
cff.seacs = charStringsAndSeacs.seacs;
cff.widths = charStringsAndSeacs.widths;
return cff; return cff;
}, },
parseHeader: function CFFParser_parseHeader() { parseHeader: function CFFParser_parseHeader() {
@ -30849,118 +30860,201 @@ var CFFParser = (function CFFParserClosure() {
} }
return cffDict; return cffDict;
}, },
parseCharStrings: function CFFParser_parseCharStrings(charStringOffset) { parseCharString: function CFFParser_parseCharString(state, data,
var charStrings = this.parseIndex(charStringOffset).obj; localSubrIndex,
var seacs = []; globalSubrIndex) {
var widths = []; if (state.callDepth > MAX_SUBR_NESTING) {
var count = charStrings.count; return false;
for (var i = 0; i < count; i++) { }
var charstring = charStrings.get(i); var stackSize = state.stackSize;
var stack = state.stack;
var stackSize = 0;
var stack = []; var length = data.length;
var undefStack = true;
var hints = 0; for (var j = 0; j < length;) {
var valid = true; var value = data[j++];
var data = charstring; var validationCommand = null;
var length = data.length; if (value === 12) {
var firstStackClearing = true; var q = data[j++];
for (var j = 0; j < length;) { if (q === 0) {
var value = data[j++]; // The CFF specification state that the 'dotsection' command
var validationCommand = null; // (12, 0) is deprecated and treated as a no-op, but all Type2
if (value === 12) { // charstrings processors should support them. Unfortunately
var q = data[j++]; // the font sanitizer don't. As a workaround the sequence (12, 0)
if (q === 0) { // is replaced by a useless (0, hmoveto).
// The CFF specification state that the 'dotsection' command data[j - 2] = 139;
// (12, 0) is deprecated and treated as a no-op, but all Type2 data[j - 1] = 22;
// charstrings processors should support them. Unfortunately stackSize = 0;
// the font sanitizer don't. As a workaround the sequence (12, 0) } else {
// is replaced by a useless (0, hmoveto). validationCommand = CharstringValidationData12[q];
data[j - 2] = 139; }
data[j - 1] = 22; } else if (value === 28) { // number (16 bit)
stackSize = 0; stack[stackSize] = ((data[j] << 24) | (data[j + 1] << 16)) >> 16;
} else { j += 2;
validationCommand = CharstringValidationData12[q]; stackSize++;
} } else if (value === 14) {
} else if (value === 28) { // number (16 bit) if (stackSize >= 4) {
stack[stackSize] = ((data[j] << 24) | (data[j + 1] << 16)) >> 16; stackSize -= 4;
j += 2; if (SEAC_ANALYSIS_ENABLED) {
stackSize++; state.seac = stack.slice(stackSize, stackSize + 4);
} else if (value === 14) { return false;
if (stackSize >= 4) {
stackSize -= 4;
if (SEAC_ANALYSIS_ENABLED) {
seacs[i] = stack.slice(stackSize, stackSize + 4);
valid = false;
}
} }
validationCommand = CharstringValidationData[value]; }
} else if (value >= 32 && value <= 246) { // number validationCommand = CharstringValidationData[value];
stack[stackSize] = value - 139; } else if (value >= 32 && value <= 246) { // number
stackSize++; stack[stackSize] = value - 139;
} else if (value >= 247 && value <= 254) { // number (+1 bytes) stackSize++;
stack[stackSize] = (value < 251 ? } else if (value >= 247 && value <= 254) { // number (+1 bytes)
((value - 247) << 8) + data[j] + 108 : stack[stackSize] = (value < 251 ?
-((value - 251) << 8) - data[j] - 108); ((value - 247) << 8) + data[j] + 108 :
j++; -((value - 251) << 8) - data[j] - 108);
stackSize++; j++;
} else if (value === 255) { // number (32 bit) stackSize++;
stack[stackSize] = ((data[j] << 24) | (data[j + 1] << 16) | } else if (value === 255) { // number (32 bit)
(data[j + 2] << 8) | data[j + 3]) / 65536; stack[stackSize] = ((data[j] << 24) | (data[j + 1] << 16) |
j += 4; (data[j + 2] << 8) | data[j + 3]) / 65536;
stackSize++; j += 4;
} else if (value === 19 || value === 20) { stackSize++;
hints += stackSize >> 1; } else if (value === 19 || value === 20) {
j += (hints + 7) >> 3; // skipping right amount of hints flag data state.hints += stackSize >> 1;
stackSize %= 2; // skipping right amount of hints flag data
validationCommand = CharstringValidationData[value]; j += (state.hints + 7) >> 3;
stackSize %= 2;
validationCommand = CharstringValidationData[value];
} else if (value === 10 || value === 29) {
var subrsIndex;
if (value === 10) {
subrsIndex = localSubrIndex;
} else { } else {
subrsIndex = globalSubrIndex;
}
if (!subrsIndex) {
validationCommand = CharstringValidationData[value];
warn('Missing subrsIndex for ' + validationCommand.id);
return false;
}
var bias = 32768;
if (subrsIndex.count < 1240) {
bias = 107;
} else if (subrsIndex.count < 33900) {
bias = 1131;
}
var subrNumber = stack[--stackSize] + bias;
if (subrNumber < 0 || subrNumber >= subrsIndex.count) {
validationCommand = CharstringValidationData[value]; validationCommand = CharstringValidationData[value];
warn('Out of bounds subrIndex for ' + validationCommand.id);
return false;
} }
if (validationCommand) { state.stackSize = stackSize;
if (validationCommand.stem) { state.callDepth++;
hints += stackSize >> 1; var valid = this.parseCharString(state, subrsIndex.get(subrNumber),
localSubrIndex, globalSubrIndex);
if (!valid) {
return false;
}
state.callDepth--;
stackSize = state.stackSize;
continue;
} else if (value === 11) {
state.stackSize = stackSize;
return true;
} else {
validationCommand = CharstringValidationData[value];
}
if (validationCommand) {
if (validationCommand.stem) {
state.hints += stackSize >> 1;
}
if ('min' in validationCommand) {
if (!state.undefStack && stackSize < validationCommand.min) {
warn('Not enough parameters for ' + validationCommand.id +
'; actual: ' + stackSize +
', expected: ' + validationCommand.min);
return false;
} }
if ('min' in validationCommand) { }
if (!undefStack && stackSize < validationCommand.min) { if (state.firstStackClearing && validationCommand.stackClearing) {
warn('Not enough parameters for ' + validationCommand.id + state.firstStackClearing = false;
'; actual: ' + stackSize + // the optional character width can be found before the first
', expected: ' + validationCommand.min); // stack-clearing command arguments
valid = false; stackSize -= validationCommand.min;
break; if (stackSize >= 2 && validationCommand.stem) {
} // there are even amount of arguments for stem commands
stackSize %= 2;
} else if (stackSize > 1) {
warn('Found too many parameters for stack-clearing command');
} }
if (firstStackClearing && validationCommand.stackClearing) { if (stackSize > 0 && stack[stackSize - 1] >= 0) {
firstStackClearing = false; state.width = stack[stackSize - 1];
// the optional character width can be found before the first
// stack-clearing command arguments
stackSize -= validationCommand.min;
if (stackSize >= 2 && validationCommand.stem) {
// there are even amount of arguments for stem commands
stackSize %= 2;
} else if (stackSize > 1) {
warn('Found too many parameters for stack-clearing command');
}
if (stackSize > 0 && stack[stackSize - 1] >= 0) {
widths[i] = stack[stackSize - 1];
}
} }
if ('stackDelta' in validationCommand) { }
if ('stackFn' in validationCommand) { if ('stackDelta' in validationCommand) {
validationCommand.stackFn(stack, stackSize); if ('stackFn' in validationCommand) {
} validationCommand.stackFn(stack, stackSize);
stackSize += validationCommand.stackDelta;
} else if (validationCommand.stackClearing) {
stackSize = 0;
} else if (validationCommand.resetStack) {
stackSize = 0;
undefStack = false;
} else if (validationCommand.undefStack) {
stackSize = 0;
undefStack = true;
firstStackClearing = false;
} }
stackSize += validationCommand.stackDelta;
} else if (validationCommand.stackClearing) {
stackSize = 0;
} else if (validationCommand.resetStack) {
stackSize = 0;
state.undefStack = false;
} else if (validationCommand.undefStack) {
stackSize = 0;
state.undefStack = true;
state.firstStackClearing = false;
}
}
}
state.stackSize = stackSize;
return true;
},
parseCharStrings: function CFFParser_parseCharStrings(charStrings,
localSubrIndex,
globalSubrIndex,
fdSelect,
fdArray) {
var seacs = [];
var widths = [];
var count = charStrings.count;
for (var i = 0; i < count; i++) {
var charstring = charStrings.get(i);
var state = {
callDepth: 0,
stackSize: 0,
stack: [],
undefStack: true,
hints: 0,
firstStackClearing: true,
seac: null,
width: null
};
var valid = true;
var localSubrToUse = null;
if (fdSelect && fdArray.length) {
var fdIndex = fdSelect.getFDIndex(i);
if (fdIndex === -1) {
warn('Glyph index is not in fd select.');
valid = false;
} }
if (fdIndex >= fdArray.length) {
warn('Invalid fd index for glyph index.');
valid = false;
}
if (valid) {
localSubrToUse = fdArray[fdIndex].privateDict.subrsIndex;
}
} else if (localSubrIndex) {
localSubrToUse = localSubrIndex;
}
if (valid) {
valid = this.parseCharString(state, charstring, localSubrToUse,
globalSubrIndex);
}
if (state.width !== null) {
widths[i] = state.width;
}
if (state.seac !== null) {
seacs[i] = state.seac;
} }
if (!valid) { if (!valid) {
// resetting invalid charstring to single 'endchar' // resetting invalid charstring to single 'endchar'
@ -31455,6 +31549,14 @@ var CFFFDSelect = (function CFFFDSelectClosure() {
this.fdSelect = fdSelect; this.fdSelect = fdSelect;
this.raw = raw; this.raw = raw;
} }
CFFFDSelect.prototype = {
getFDIndex: function CFFFDSelect_get(glyphIndex) {
if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) {
return -1;
}
return this.fdSelect[glyphIndex];
}
};
return CFFFDSelect; return CFFFDSelect;
})(); })();

2
package.json

@ -1,6 +1,6 @@
{ {
"name": "pdfjs-dist", "name": "pdfjs-dist",
"version": "1.3.148", "version": "1.3.150",
"main": "build/pdf.js", "main": "build/pdf.js",
"description": "Generic build of Mozilla's PDF.js library.", "description": "Generic build of Mozilla's PDF.js library.",
"keywords": [ "keywords": [

Loading…
Cancel
Save