Convert PDFFunction
to a standard class with static
methods
For e.g. `gulp mozcentral`, the *built* `pdf.worker.js` file decreases from `1 837 608` to `1 834 907` bytes with this patch-series. The improvement comes first of all from less overall indentation in `PDFFunction`, and secondly from the removal of (now) unnecessary indirection in the code.
This commit is contained in:
parent
d35fe3e796
commit
481af097b4
@ -131,9 +131,8 @@ function toNumberArray(arr) {
|
||||
return arr;
|
||||
}
|
||||
|
||||
const PDFFunction = (function PDFFunctionClosure() {
|
||||
return {
|
||||
getSampleArray(size, outputSize, bps, stream) {
|
||||
class PDFFunction {
|
||||
static getSampleArray(size, outputSize, bps, stream) {
|
||||
let i, ii;
|
||||
let length = 1;
|
||||
for (i = 0, ii = size.length; i < ii; i++) {
|
||||
@ -160,9 +159,9 @@ const PDFFunction = (function PDFFunctionClosure() {
|
||||
codeBuf &= (1 << codeSize) - 1;
|
||||
}
|
||||
return array;
|
||||
},
|
||||
}
|
||||
|
||||
parse({ xref, isEvalSupported, fn }) {
|
||||
static parse({ xref, isEvalSupported, fn }) {
|
||||
const dict = fn.dict || fn;
|
||||
const typeNum = dict.get("FunctionType");
|
||||
|
||||
@ -179,9 +178,9 @@ const PDFFunction = (function PDFFunctionClosure() {
|
||||
return this.constructPostScript({ xref, isEvalSupported, fn, dict });
|
||||
}
|
||||
throw new FormatError("Unknown type of function");
|
||||
},
|
||||
}
|
||||
|
||||
parseArray({ xref, isEvalSupported, fnObj }) {
|
||||
static parseArray({ xref, isEvalSupported, fnObj }) {
|
||||
if (!Array.isArray(fnObj)) {
|
||||
// not an array -- parsing as regular function
|
||||
return this.parse({ xref, isEvalSupported, fn: fnObj });
|
||||
@ -198,9 +197,9 @@ const PDFFunction = (function PDFFunctionClosure() {
|
||||
fnArray[i](src, srcOffset, dest, destOffset + i);
|
||||
}
|
||||
};
|
||||
},
|
||||
}
|
||||
|
||||
constructSampled({ xref, isEvalSupported, fn, dict }) {
|
||||
static constructSampled({ xref, isEvalSupported, fn, dict }) {
|
||||
function toMultiArray(arr) {
|
||||
const inputLength = arr.length;
|
||||
const out = [];
|
||||
@ -328,15 +327,12 @@ const PDFFunction = (function PDFFunctionClosure() {
|
||||
rj = interpolate(rj, 0, 1, decode[j][0], decode[j][1]);
|
||||
|
||||
// y_j = min(max(r_j, range_2j), range_2j+1)
|
||||
dest[destOffset + j] = Math.min(
|
||||
Math.max(rj, range[j][0]),
|
||||
range[j][1]
|
||||
);
|
||||
dest[destOffset + j] = Math.min(Math.max(rj, range[j][0]), range[j][1]);
|
||||
}
|
||||
};
|
||||
},
|
||||
}
|
||||
|
||||
constructInterpolated({ xref, isEvalSupported, dict }) {
|
||||
static constructInterpolated({ xref, isEvalSupported, dict }) {
|
||||
const c0 = toNumberArray(dict.getArray("C0")) || [0];
|
||||
const c1 = toNumberArray(dict.getArray("C1")) || [1];
|
||||
const n = dict.get("N");
|
||||
@ -347,21 +343,16 @@ const PDFFunction = (function PDFFunctionClosure() {
|
||||
}
|
||||
const length = diff.length;
|
||||
|
||||
return function constructInterpolatedFn(
|
||||
src,
|
||||
srcOffset,
|
||||
dest,
|
||||
destOffset
|
||||
) {
|
||||
return function constructInterpolatedFn(src, srcOffset, dest, destOffset) {
|
||||
const x = n === 1 ? src[srcOffset] : src[srcOffset] ** n;
|
||||
|
||||
for (let j = 0; j < length; ++j) {
|
||||
dest[destOffset + j] = c0[j] + x * diff[j];
|
||||
}
|
||||
};
|
||||
},
|
||||
}
|
||||
|
||||
constructStiched({ xref, isEvalSupported, dict }) {
|
||||
static constructStiched({ xref, isEvalSupported, dict }) {
|
||||
const domain = toNumberArray(dict.getArray("Domain"));
|
||||
|
||||
if (!domain) {
|
||||
@ -429,9 +420,9 @@ const PDFFunction = (function PDFFunctionClosure() {
|
||||
// call the appropriate function
|
||||
fns[i](tmpBuf, 0, dest, destOffset);
|
||||
};
|
||||
},
|
||||
}
|
||||
|
||||
constructPostScript({ xref, isEvalSupported, fn, dict }) {
|
||||
static constructPostScript({ xref, isEvalSupported, fn, dict }) {
|
||||
const domain = toNumberArray(dict.getArray("Domain"));
|
||||
const range = toNumberArray(dict.getArray("Range"));
|
||||
|
||||
@ -454,13 +445,7 @@ const PDFFunction = (function PDFFunctionClosure() {
|
||||
// subtraction, Math.max, and also contains 'var' and 'return'
|
||||
// statements. See the generation in the PostScriptCompiler below.
|
||||
// eslint-disable-next-line no-new-func
|
||||
return new Function(
|
||||
"src",
|
||||
"srcOffset",
|
||||
"dest",
|
||||
"destOffset",
|
||||
compiled
|
||||
);
|
||||
return new Function("src", "srcOffset", "dest", "destOffset", compiled);
|
||||
}
|
||||
}
|
||||
info("Unable to compile PS function");
|
||||
@ -515,9 +500,8 @@ const PDFFunction = (function PDFFunctionClosure() {
|
||||
}
|
||||
dest.set(output, destOffset);
|
||||
};
|
||||
},
|
||||
};
|
||||
})();
|
||||
}
|
||||
}
|
||||
|
||||
function isPDFFunction(v) {
|
||||
let fnDict;
|
||||
|
Loading…
x
Reference in New Issue
Block a user