Merge pull request #9659 from yurydelendik/rm-createFromIR

Remove createFromIR from PDFFunctionFactory
This commit is contained in:
Brendan Dahl 2018-04-12 14:22:43 -07:00 committed by GitHub
commit 2dc4af525d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 41 additions and 51 deletions

View File

@ -203,10 +203,10 @@ var ColorSpace = (function ColorSpaceClosure() {
ColorSpace.parse = function(cs, xref, res, pdfFunctionFactory) { ColorSpace.parse = function(cs, xref, res, pdfFunctionFactory) {
let IR = ColorSpace.parseToIR(cs, xref, res, pdfFunctionFactory); let IR = ColorSpace.parseToIR(cs, xref, res, pdfFunctionFactory);
return ColorSpace.fromIR(IR, pdfFunctionFactory); return ColorSpace.fromIR(IR);
}; };
ColorSpace.fromIR = function(IR, pdfFunctionFactory) { ColorSpace.fromIR = function(IR) {
var name = Array.isArray(IR) ? IR[0] : IR; var name = Array.isArray(IR) ? IR[0] : IR;
var whitePoint, blackPoint, gamma; var whitePoint, blackPoint, gamma;
@ -231,23 +231,21 @@ var ColorSpace = (function ColorSpaceClosure() {
case 'PatternCS': case 'PatternCS':
var basePatternCS = IR[1]; var basePatternCS = IR[1];
if (basePatternCS) { if (basePatternCS) {
basePatternCS = ColorSpace.fromIR(basePatternCS, pdfFunctionFactory); basePatternCS = ColorSpace.fromIR(basePatternCS);
} }
return new PatternCS(basePatternCS); return new PatternCS(basePatternCS);
case 'IndexedCS': case 'IndexedCS':
var baseIndexedCS = IR[1]; var baseIndexedCS = IR[1];
var hiVal = IR[2]; var hiVal = IR[2];
var lookup = IR[3]; var lookup = IR[3];
return new IndexedCS(ColorSpace.fromIR(baseIndexedCS, return new IndexedCS(ColorSpace.fromIR(baseIndexedCS),
pdfFunctionFactory),
hiVal, lookup); hiVal, lookup);
case 'AlternateCS': case 'AlternateCS':
var numComps = IR[1]; var numComps = IR[1];
var alt = IR[2]; var alt = IR[2];
var tintFnIR = IR[3]; var tintFn = IR[3];
return new AlternateCS(numComps, ColorSpace.fromIR(alt, return new AlternateCS(numComps, ColorSpace.fromIR(alt),
pdfFunctionFactory), tintFn);
pdfFunctionFactory.createFromIR(tintFnIR));
case 'LabCS': case 'LabCS':
whitePoint = IR[1]; whitePoint = IR[1];
blackPoint = IR[2]; blackPoint = IR[2];
@ -364,8 +362,8 @@ var ColorSpace = (function ColorSpaceClosure() {
var name = xref.fetchIfRef(cs[1]); var name = xref.fetchIfRef(cs[1]);
numComps = Array.isArray(name) ? name.length : 1; numComps = Array.isArray(name) ? name.length : 1;
alt = ColorSpace.parseToIR(cs[2], xref, res, pdfFunctionFactory); alt = ColorSpace.parseToIR(cs[2], xref, res, pdfFunctionFactory);
let tintFnIR = pdfFunctionFactory.createIR(xref.fetchIfRef(cs[3])); let tintFn = pdfFunctionFactory.create(xref.fetchIfRef(cs[3]));
return ['AlternateCS', numComps, alt, tintFnIR]; return ['AlternateCS', numComps, alt, tintFn];
case 'Lab': case 'Lab':
params = xref.fetchIfRef(cs[1]); params = xref.fetchIfRef(cs[1]);
whitePoint = params.getArray('WhitePoint'); whitePoint = params.getArray('WhitePoint');

View File

@ -46,22 +46,24 @@ class PDFFunctionFactory {
fnObj, fnObj,
}); });
} }
}
createFromIR(IR) { function toNumberArray(arr) {
return PDFFunction.fromIR({ if (!Array.isArray(arr)) {
xref: this.xref, return null;
isEvalSupported: this.isEvalSupported,
IR,
});
} }
const length = arr.length;
createIR(fn) { for (let i = 0; i < length; i++) {
return PDFFunction.getIR({ if (typeof arr[i] !== 'number') {
xref: this.xref, // Non-number is found -- convert all items to numbers.
isEvalSupported: this.isEvalSupported, const result = new Array(length);
fn, for (let i = 0; i < length; i++) {
}); result[i] = +arr[i];
}
return result;
}
} }
return arr;
} }
var PDFFunction = (function PDFFunctionClosure() { var PDFFunction = (function PDFFunctionClosure() {
@ -171,8 +173,8 @@ var PDFFunction = (function PDFFunctionClosure() {
} }
return out; return out;
} }
var domain = dict.getArray('Domain'); var domain = toNumberArray(dict.getArray('Domain'));
var range = dict.getArray('Range'); var range = toNumberArray(dict.getArray('Range'));
if (!domain || !range) { if (!domain || !range) {
throw new FormatError('No domain or range'); throw new FormatError('No domain or range');
@ -184,7 +186,7 @@ var PDFFunction = (function PDFFunctionClosure() {
domain = toMultiArray(domain); domain = toMultiArray(domain);
range = toMultiArray(range); range = toMultiArray(range);
var size = dict.get('Size'); var size = toNumberArray(dict.get('Size'));
var bps = dict.get('BitsPerSample'); var bps = dict.get('BitsPerSample');
var order = dict.get('Order') || 1; var order = dict.get('Order') || 1;
if (order !== 1) { if (order !== 1) {
@ -193,17 +195,17 @@ var PDFFunction = (function PDFFunctionClosure() {
info('No support for cubic spline interpolation: ' + order); info('No support for cubic spline interpolation: ' + order);
} }
var encode = dict.getArray('Encode'); var encode = toNumberArray(dict.getArray('Encode'));
if (!encode) { if (!encode) {
encode = []; encode = [];
for (var i = 0; i < inputSize; ++i) { for (var i = 0; i < inputSize; ++i) {
encode.push(0); encode.push([0, size[i] - 1]);
encode.push(size[i] - 1);
} }
} else {
encode = toMultiArray(encode);
} }
encode = toMultiArray(encode);
var decode = dict.getArray('Decode'); var decode = toNumberArray(dict.getArray('Decode'));
if (!decode) { if (!decode) {
decode = range; decode = range;
} else { } else {
@ -304,15 +306,10 @@ var PDFFunction = (function PDFFunctionClosure() {
}, },
constructInterpolated({ xref, isEvalSupported, fn, dict, }) { constructInterpolated({ xref, isEvalSupported, fn, dict, }) {
var c0 = dict.getArray('C0') || [0]; var c0 = toNumberArray(dict.getArray('C0')) || [0];
var c1 = dict.getArray('C1') || [1]; var c1 = toNumberArray(dict.getArray('C1')) || [1];
var n = dict.get('N'); var n = dict.get('N');
if (!Array.isArray(c0) || !Array.isArray(c1)) {
throw new FormatError(
'Illegal dictionary for interpolated function');
}
var length = c0.length; var length = c0.length;
var diff = []; var diff = [];
for (var i = 0; i < length; ++i) { for (var i = 0; i < length; ++i) {
@ -340,7 +337,7 @@ var PDFFunction = (function PDFFunctionClosure() {
}, },
constructStiched({ xref, isEvalSupported, fn, dict, }) { constructStiched({ xref, isEvalSupported, fn, dict, }) {
var domain = dict.getArray('Domain'); var domain = toNumberArray(dict.getArray('Domain'));
if (!domain) { if (!domain) {
throw new FormatError('No domain'); throw new FormatError('No domain');
@ -354,12 +351,12 @@ var PDFFunction = (function PDFFunctionClosure() {
var fnRefs = dict.get('Functions'); var fnRefs = dict.get('Functions');
var fns = []; var fns = [];
for (var i = 0, ii = fnRefs.length; i < ii; ++i) { for (var i = 0, ii = fnRefs.length; i < ii; ++i) {
fns.push(this.getIR({ xref, isEvalSupported, fns.push(this.parse({ xref, isEvalSupported,
fn: xref.fetchIfRef(fnRefs[i]), })); fn: xref.fetchIfRef(fnRefs[i]), }));
} }
var bounds = dict.getArray('Bounds'); var bounds = toNumberArray(dict.getArray('Bounds'));
var encode = dict.getArray('Encode'); var encode = toNumberArray(dict.getArray('Encode'));
return [CONSTRUCT_STICHED, domain, bounds, encode, fns]; return [CONSTRUCT_STICHED, domain, bounds, encode, fns];
}, },
@ -368,14 +365,9 @@ var PDFFunction = (function PDFFunctionClosure() {
var domain = IR[1]; var domain = IR[1];
var bounds = IR[2]; var bounds = IR[2];
var encode = IR[3]; var encode = IR[3];
var fnsIR = IR[4]; var fns = IR[4];
var fns = [];
var tmpBuf = new Float32Array(1); var tmpBuf = new Float32Array(1);
for (var i = 0, ii = fnsIR.length; i < ii; i++) {
fns.push(this.fromIR({ xref, isEvalSupported, IR: fnsIR[i], }));
}
return function constructStichedFromIRResult(src, srcOffset, return function constructStichedFromIRResult(src, srcOffset,
dest, destOffset) { dest, destOffset) {
var clip = function constructStichedFromIRClip(v, min, max) { var clip = function constructStichedFromIRClip(v, min, max) {
@ -420,8 +412,8 @@ var PDFFunction = (function PDFFunctionClosure() {
}, },
constructPostScript({ xref, isEvalSupported, fn, dict, }) { constructPostScript({ xref, isEvalSupported, fn, dict, }) {
var domain = dict.getArray('Domain'); var domain = toNumberArray(dict.getArray('Domain'));
var range = dict.getArray('Range'); var range = toNumberArray(dict.getArray('Range'));
if (!domain) { if (!domain) {
throw new FormatError('No domain.'); throw new FormatError('No domain.');