Merge pull request #15632 from Snuffleupagus/issue-15629-2

[api-minor] Move the handling of unbalanced markedContent to the worker-thread (PR 15630 follow-up)
This commit is contained in:
Jonas Jenwald 2022-10-29 09:37:07 +02:00 committed by GitHub
commit 8b970109ea
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 10 deletions

View File

@ -2283,12 +2283,16 @@ class PartialEvaluator {
sink,
seenStyles = new Set(),
viewBox,
markedContentData = null,
}) {
// Ensure that `resources`/`stateManager` is correctly initialized,
// even if the provided parameter is e.g. `null`.
resources = resources || Dict.empty;
stateManager = stateManager || new StateManager(new TextState());
if (includeMarkedContent) {
markedContentData = markedContentData || { level: 0 };
}
const NormalizedUnicodes = getNormalizedUnicodes();
const textContent = {
@ -3225,6 +3229,7 @@ class PartialEvaluator {
sink: sinkWrapper,
seenStyles,
viewBox,
markedContentData,
})
.then(function () {
if (!sinkWrapper.enqueueInvoked) {
@ -3305,6 +3310,8 @@ class PartialEvaluator {
case OPS.beginMarkedContent:
flushTextContentItem();
if (includeMarkedContent) {
markedContentData.level++;
textContent.items.push({
type: "beginMarkedContent",
tag: args[0] instanceof Name ? args[0].name : null,
@ -3314,6 +3321,8 @@ class PartialEvaluator {
case OPS.beginMarkedContentProps:
flushTextContentItem();
if (includeMarkedContent) {
markedContentData.level++;
let mcid = null;
if (args[1] instanceof Dict) {
mcid = args[1].get("MCID");
@ -3330,6 +3339,13 @@ class PartialEvaluator {
case OPS.endMarkedContent:
flushTextContentItem();
if (includeMarkedContent) {
if (markedContentData.level === 0) {
// Handle unbalanced beginMarkedContent/endMarkedContent
// operators (fixes issue15629.pdf).
break;
}
markedContentData.level--;
textContent.items.push({
type: "endMarkedContent",
});

View File

@ -224,8 +224,6 @@ function render(task) {
}
class TextLayerRenderTask {
#initialContainer = null;
constructor({
textContent,
textContentStream,
@ -237,7 +235,6 @@ class TextLayerRenderTask {
this._textContent = textContent;
this._textContentStream = textContentStream;
this._container = container;
this.#initialContainer = container;
this._document = container.ownerDocument;
this._viewport = viewport;
this._textDivs = textDivs || [];
@ -321,13 +318,7 @@ class TextLayerRenderTask {
}
parent.append(this._container);
} else if (item.type === "endMarkedContent") {
const parent = this._container.parentNode;
if (!parent || this._container === this.#initialContainer) {
// Handle unbalanced beginMarkedContent/endMarkedContent operators
// (fixes issue15629.pdf).
continue;
}
this._container = parent;
this._container = this._container.parentNode;
}
continue;
}