Move some constants and helper functions out of the PartialEvaluator
closure
This will simplify the `class` conversion in the next patch, and with modern JavaScript the moved code is still limited to the current module scope. *Please note:* For improved consistency with our usual formatting, the `TILING_PATTERN`/`SHADING_PATTERN` constants where re-factored slightly.
This commit is contained in:
parent
c4255fdbfd
commit
32a0b6fa73
@ -85,15 +85,104 @@ import { MurmurHash3_64 } from "./murmurhash3.js";
|
|||||||
import { OperatorList } from "./operator_list.js";
|
import { OperatorList } from "./operator_list.js";
|
||||||
import { PDFImage } from "./image.js";
|
import { PDFImage } from "./image.js";
|
||||||
|
|
||||||
var PartialEvaluator = (function PartialEvaluatorClosure() {
|
const DefaultPartialEvaluatorOptions = Object.freeze({
|
||||||
const DefaultPartialEvaluatorOptions = {
|
maxImageSize: -1,
|
||||||
maxImageSize: -1,
|
disableFontFace: false,
|
||||||
disableFontFace: false,
|
ignoreErrors: false,
|
||||||
ignoreErrors: false,
|
isEvalSupported: true,
|
||||||
isEvalSupported: true,
|
fontExtraProperties: false,
|
||||||
fontExtraProperties: false,
|
});
|
||||||
};
|
|
||||||
|
|
||||||
|
const PatternType = {
|
||||||
|
TILING: 1,
|
||||||
|
SHADING: 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
const deferred = Promise.resolve();
|
||||||
|
|
||||||
|
// Convert PDF blend mode names to HTML5 blend mode names.
|
||||||
|
function normalizeBlendMode(value, parsingArray = false) {
|
||||||
|
if (Array.isArray(value)) {
|
||||||
|
// Use the first *supported* BM value in the Array (fixes issue11279.pdf).
|
||||||
|
for (let i = 0, ii = value.length; i < ii; i++) {
|
||||||
|
const maybeBM = normalizeBlendMode(value[i], /* parsingArray = */ true);
|
||||||
|
if (maybeBM) {
|
||||||
|
return maybeBM;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
warn(`Unsupported blend mode Array: ${value}`);
|
||||||
|
return "source-over";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isName(value)) {
|
||||||
|
if (parsingArray) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return "source-over";
|
||||||
|
}
|
||||||
|
switch (value.name) {
|
||||||
|
case "Normal":
|
||||||
|
case "Compatible":
|
||||||
|
return "source-over";
|
||||||
|
case "Multiply":
|
||||||
|
return "multiply";
|
||||||
|
case "Screen":
|
||||||
|
return "screen";
|
||||||
|
case "Overlay":
|
||||||
|
return "overlay";
|
||||||
|
case "Darken":
|
||||||
|
return "darken";
|
||||||
|
case "Lighten":
|
||||||
|
return "lighten";
|
||||||
|
case "ColorDodge":
|
||||||
|
return "color-dodge";
|
||||||
|
case "ColorBurn":
|
||||||
|
return "color-burn";
|
||||||
|
case "HardLight":
|
||||||
|
return "hard-light";
|
||||||
|
case "SoftLight":
|
||||||
|
return "soft-light";
|
||||||
|
case "Difference":
|
||||||
|
return "difference";
|
||||||
|
case "Exclusion":
|
||||||
|
return "exclusion";
|
||||||
|
case "Hue":
|
||||||
|
return "hue";
|
||||||
|
case "Saturation":
|
||||||
|
return "saturation";
|
||||||
|
case "Color":
|
||||||
|
return "color";
|
||||||
|
case "Luminosity":
|
||||||
|
return "luminosity";
|
||||||
|
}
|
||||||
|
if (parsingArray) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
warn(`Unsupported blend mode: ${value.name}`);
|
||||||
|
return "source-over";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Trying to minimize Date.now() usage and check every 100 time.
|
||||||
|
var TIME_SLOT_DURATION_MS = 20;
|
||||||
|
var CHECK_TIME_EVERY = 100;
|
||||||
|
function TimeSlotManager() {
|
||||||
|
this.reset();
|
||||||
|
}
|
||||||
|
TimeSlotManager.prototype = {
|
||||||
|
check: function TimeSlotManager_check() {
|
||||||
|
if (++this.checked < CHECK_TIME_EVERY) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
this.checked = 0;
|
||||||
|
return this.endTime <= Date.now();
|
||||||
|
},
|
||||||
|
reset: function TimeSlotManager_reset() {
|
||||||
|
this.endTime = Date.now() + TIME_SLOT_DURATION_MS;
|
||||||
|
this.checked = 0;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
var PartialEvaluator = (function PartialEvaluatorClosure() {
|
||||||
// eslint-disable-next-line no-shadow
|
// eslint-disable-next-line no-shadow
|
||||||
function PartialEvaluator({
|
function PartialEvaluator({
|
||||||
xref,
|
xref,
|
||||||
@ -118,93 +207,6 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|||||||
this._fetchBuiltInCMapBound = this.fetchBuiltInCMap.bind(this);
|
this._fetchBuiltInCMapBound = this.fetchBuiltInCMap.bind(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Trying to minimize Date.now() usage and check every 100 time
|
|
||||||
var TIME_SLOT_DURATION_MS = 20;
|
|
||||||
var CHECK_TIME_EVERY = 100;
|
|
||||||
function TimeSlotManager() {
|
|
||||||
this.reset();
|
|
||||||
}
|
|
||||||
TimeSlotManager.prototype = {
|
|
||||||
check: function TimeSlotManager_check() {
|
|
||||||
if (++this.checked < CHECK_TIME_EVERY) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
this.checked = 0;
|
|
||||||
return this.endTime <= Date.now();
|
|
||||||
},
|
|
||||||
reset: function TimeSlotManager_reset() {
|
|
||||||
this.endTime = Date.now() + TIME_SLOT_DURATION_MS;
|
|
||||||
this.checked = 0;
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
// Convert PDF blend mode names to HTML5 blend mode names.
|
|
||||||
function normalizeBlendMode(value, parsingArray = false) {
|
|
||||||
if (Array.isArray(value)) {
|
|
||||||
// Use the first *supported* BM value in the Array (fixes issue11279.pdf).
|
|
||||||
for (let i = 0, ii = value.length; i < ii; i++) {
|
|
||||||
const maybeBM = normalizeBlendMode(value[i], /* parsingArray = */ true);
|
|
||||||
if (maybeBM) {
|
|
||||||
return maybeBM;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
warn(`Unsupported blend mode Array: ${value}`);
|
|
||||||
return "source-over";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isName(value)) {
|
|
||||||
if (parsingArray) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return "source-over";
|
|
||||||
}
|
|
||||||
switch (value.name) {
|
|
||||||
case "Normal":
|
|
||||||
case "Compatible":
|
|
||||||
return "source-over";
|
|
||||||
case "Multiply":
|
|
||||||
return "multiply";
|
|
||||||
case "Screen":
|
|
||||||
return "screen";
|
|
||||||
case "Overlay":
|
|
||||||
return "overlay";
|
|
||||||
case "Darken":
|
|
||||||
return "darken";
|
|
||||||
case "Lighten":
|
|
||||||
return "lighten";
|
|
||||||
case "ColorDodge":
|
|
||||||
return "color-dodge";
|
|
||||||
case "ColorBurn":
|
|
||||||
return "color-burn";
|
|
||||||
case "HardLight":
|
|
||||||
return "hard-light";
|
|
||||||
case "SoftLight":
|
|
||||||
return "soft-light";
|
|
||||||
case "Difference":
|
|
||||||
return "difference";
|
|
||||||
case "Exclusion":
|
|
||||||
return "exclusion";
|
|
||||||
case "Hue":
|
|
||||||
return "hue";
|
|
||||||
case "Saturation":
|
|
||||||
return "saturation";
|
|
||||||
case "Color":
|
|
||||||
return "color";
|
|
||||||
case "Luminosity":
|
|
||||||
return "luminosity";
|
|
||||||
}
|
|
||||||
if (parsingArray) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
warn(`Unsupported blend mode: ${value.name}`);
|
|
||||||
return "source-over";
|
|
||||||
}
|
|
||||||
|
|
||||||
var deferred = Promise.resolve();
|
|
||||||
|
|
||||||
var TILING_PATTERN = 1,
|
|
||||||
SHADING_PATTERN = 2;
|
|
||||||
|
|
||||||
PartialEvaluator.prototype = {
|
PartialEvaluator.prototype = {
|
||||||
/**
|
/**
|
||||||
* Since Functions are only cached (locally) by reference, we can share one
|
* Since Functions are only cached (locally) by reference, we can share one
|
||||||
@ -1193,7 +1195,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|||||||
var dict = isStream(pattern) ? pattern.dict : pattern;
|
var dict = isStream(pattern) ? pattern.dict : pattern;
|
||||||
var typeNum = dict.get("PatternType");
|
var typeNum = dict.get("PatternType");
|
||||||
|
|
||||||
if (typeNum === TILING_PATTERN) {
|
if (typeNum === PatternType.TILING) {
|
||||||
var color = cs.base ? cs.base.getRgb(args, 0) : null;
|
var color = cs.base ? cs.base.getRgb(args, 0) : null;
|
||||||
return this.handleTilingType(
|
return this.handleTilingType(
|
||||||
fn,
|
fn,
|
||||||
@ -1204,7 +1206,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
|||||||
operatorList,
|
operatorList,
|
||||||
task
|
task
|
||||||
);
|
);
|
||||||
} else if (typeNum === SHADING_PATTERN) {
|
} else if (typeNum === PatternType.SHADING) {
|
||||||
var shading = dict.get("Shading");
|
var shading = dict.get("Shading");
|
||||||
var matrix = dict.getArray("Matrix");
|
var matrix = dict.getArray("Matrix");
|
||||||
pattern = Pattern.parseShading(
|
pattern = Pattern.parseShading(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user