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());