in src/core/evaluator.js [1065:1182]
async setGState({
resources,
gState,
operatorList,
cacheKey,
task,
stateManager,
localGStateCache,
localColorSpaceCache,
seenRefs,
}) {
const gStateRef = gState.objId;
let isSimpleGState = true;
// This array holds the converted/processed state data.
const gStateObj = [];
let promise = Promise.resolve();
for (const [key, value] of gState) {
switch (key) {
case "Type":
break;
case "LW":
if (typeof value !== "number") {
warn(`Invalid LW (line width): ${value}`);
break;
}
gStateObj.push([key, Math.abs(value)]);
break;
case "LC":
case "LJ":
case "ML":
case "D":
case "RI":
case "FL":
case "CA":
case "ca":
gStateObj.push([key, value]);
break;
case "Font":
isSimpleGState = false;
promise = promise.then(() =>
this.handleSetFont(
resources,
null,
value[0],
operatorList,
task,
stateManager.state
).then(function (loadedName) {
operatorList.addDependency(loadedName);
gStateObj.push([key, [loadedName, value[1]]]);
})
);
break;
case "BM":
gStateObj.push([key, normalizeBlendMode(value)]);
break;
case "SMask":
if (isName(value, "None")) {
gStateObj.push([key, false]);
break;
}
if (value instanceof Dict) {
isSimpleGState = false;
promise = promise.then(() =>
this.handleSMask(
value,
resources,
operatorList,
task,
stateManager,
localColorSpaceCache,
seenRefs
)
);
gStateObj.push([key, true]);
} else {
warn("Unsupported SMask type");
}
break;
case "TR":
const transferMaps = this.handleTransferFunction(value);
gStateObj.push([key, transferMaps]);
break;
// Only generate info log messages for the following since
// they are unlikely to have a big impact on the rendering.
case "OP":
case "op":
case "OPM":
case "BG":
case "BG2":
case "UCR":
case "UCR2":
case "TR2":
case "HT":
case "SM":
case "SA":
case "AIS":
case "TK":
// TODO implement these operators.
info("graphic state operator " + key);
break;
default:
info("Unknown graphic state operator " + key);
break;
}
}
await promise;
if (gStateObj.length > 0) {
operatorList.addOp(OPS.setGState, [gStateObj]);
}
if (isSimpleGState) {
localGStateCache.set(cacheKey, gStateRef, gStateObj);
}
}