const {
mergeObjects,
chunkBy,
last,
isParagraphStart,
isParagraphEnd,
isContent,
startsWith,
} = require("../doc-utils");
const wrapper = require("../module-wrapper");
const moduleName = "loop";
function hasContent(parts) {
return parts.some(function (part) {
return isContent(part);
});
}
function getFirstMeaningFulPart(parsed) {
for (let i = 0, len = parsed.length; i < len; i++) {
if (parsed[i].type !== "content") {
return parsed[i];
}
}
return null;
}
function isInsideParagraphLoop(part) {
const firstMeaningfulPart = getFirstMeaningFulPart(part.subparsed);
return firstMeaningfulPart != null && firstMeaningfulPart.tag !== "w:t";
}
function getPageBreakIfApplies(part) {
if (part.hasPageBreak) {
if (isInsideParagraphLoop(part)) {
return '';
}
}
return "";
}
function isEnclosedByParagraphs(parsed) {
if (parsed.length === 0) {
return false;
}
return isParagraphStart(parsed[0]) && isParagraphEnd(last(parsed));
}
function getOffset(chunk) {
return hasContent(chunk) ? 0 : chunk.length;
}
function addPageBreakAtEnd(subRendered) {
let found = false;
let i = subRendered.parts.length - 1;
for (let j = subRendered.parts.length - 1; i >= 0; i--) {
const p = subRendered.parts[j];
if (p === "" && !found) {
found = true;
subRendered.parts.splice(j, 0, '');
break;
}
}
if (!found) {
subRendered.parts.push('');
}
}
function addPageBreakAtBeginning(subRendered) {
subRendered.parts.unshift('');
}
function dropHeaderFooterRefs(parts) {
return parts.filter(function (text) {
if (
startsWith(text, " 0) {
errorList.push(...errors);
}
return resolved;
});
})
.then(function (value) {
if (errorList.length > 0) {
throw errorList;
}
return value;
});
});
}
}
module.exports = () => wrapper(new LoopModule());