reamkit 1.10.0 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/esm/core/converter/facade.js +1 -1
- package/dist/esm/core/converter/project.js +1 -0
- package/dist/esm/core/document-model/index.d.ts +1 -1
- package/dist/esm/core/document-model/types.d.ts +23 -0
- package/dist/esm/core/font/measure.d.ts +1 -1
- package/dist/esm/core/font/measure.js +5 -3
- package/dist/esm/core/font/ttf-parser.d.ts +9 -0
- package/dist/esm/core/font/ttf-parser.js +27 -2
- package/dist/esm/core/fonts/provider.d.ts +2 -1
- package/dist/esm/core/fonts/provider.js +2 -1
- package/dist/esm/core/fonts/remote-fonts.d.ts +1 -1
- package/dist/esm/core/fonts/remote-fonts.js +32 -11
- package/dist/esm/core/ir/features.d.ts +1 -0
- package/dist/esm/core/ir/features.js +1 -0
- package/dist/esm/core/ir/flow.d.ts +3 -1
- package/dist/esm/core/line-breaker/greedy.d.ts +2 -0
- package/dist/esm/core/line-breaker/greedy.js +67 -0
- package/dist/esm/core/line-breaker/index.d.ts +1 -0
- package/dist/esm/core/line-breaker/knuth-plass.d.ts +1 -0
- package/dist/esm/core/line-breaker/knuth-plass.js +3 -3
- package/dist/esm/core/po-helpers.d.ts +2 -0
- package/dist/esm/core/po-helpers.js +14 -1
- package/dist/esm/core/spreadsheet-model/index.d.ts +1 -1
- package/dist/esm/core/spreadsheet-model/types.d.ts +16 -0
- package/dist/esm/excel/pivot-table-parser.d.ts +2 -0
- package/dist/esm/excel/pivot-table-parser.js +68 -0
- package/dist/esm/excel/print-model.js +28 -6
- package/dist/esm/excel/xlsx-reader.js +33 -2
- package/dist/esm/excel/xlsx-to-pdf.js +1 -1
- package/dist/esm/html/html-writer.js +52 -2
- package/dist/esm/layout/page-doc.d.ts +3 -0
- package/dist/esm/layout/styled-layout.d.ts +10 -1
- package/dist/esm/layout/styled-layout.js +156 -15
- package/dist/esm/pdf/styled-page-emitter.js +38 -0
- package/dist/esm/pptx/pptx-reader.d.ts +2 -0
- package/dist/esm/pptx/pptx-reader.js +30 -3
- package/dist/esm/pptx/slide-parser.d.ts +8 -2
- package/dist/esm/pptx/slide-parser.js +80 -12
- package/dist/esm/word/document-parser.d.ts +17 -2
- package/dist/esm/word/document-parser.js +178 -18
- package/dist/esm/word/docx-reader.js +54 -4
- package/dist/esm/word/docx-to-pdf.js +2 -2
- package/dist/esm/word/docx-writer.js +84 -1
- package/dist/esm/word/drawing-parser.d.ts +7 -0
- package/dist/esm/word/drawing-parser.js +13 -0
- package/dist/esm/word/index.d.ts +2 -1
- package/package.json +1 -1
|
@@ -23,6 +23,14 @@ var FOOTNOTES_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.word
|
|
|
23
23
|
var ENDNOTES_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml";
|
|
24
24
|
var FOOTNOTES_PART = "word/footnotes.xml";
|
|
25
25
|
var ENDNOTES_PART = "word/endnotes.xml";
|
|
26
|
+
var REL_COMMENTS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments";
|
|
27
|
+
var COMMENTS_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml";
|
|
28
|
+
var COMMENTS_PART = "word/comments.xml";
|
|
29
|
+
var REL_COMMENTS_EXTENDED = "http://schemas.microsoft.com/office/2011/relationships/commentsExtended";
|
|
30
|
+
var COMMENTS_EXTENDED_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtended+xml";
|
|
31
|
+
var COMMENTS_EXTENDED_PART = "word/commentsExtended.xml";
|
|
32
|
+
var W14_NS = "http://schemas.microsoft.com/office/word/2010/wordml";
|
|
33
|
+
var W15_NS = "http://schemas.microsoft.com/office/word/2012/wordml";
|
|
26
34
|
var REL_CHART = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart";
|
|
27
35
|
var CHART_CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.drawingml.chart+xml";
|
|
28
36
|
var EMU_PER_PT = 12700;
|
|
@@ -143,6 +151,8 @@ function writeDocx(flow) {
|
|
|
143
151
|
relType: REL_ENDNOTES,
|
|
144
152
|
target: "endnotes.xml"
|
|
145
153
|
}, state, losses, docScope, extraParts, extraPartRels);
|
|
154
|
+
const commentParaIds = emitComments(flow.comments, state, losses, docScope, extraParts, extraPartRels);
|
|
155
|
+
emitCommentsExtended(flow.comments, commentParaIds, docScope, extraParts);
|
|
146
156
|
const partRelationships = [...docScope.rels.length > 0 ? [{
|
|
147
157
|
sourcePart: "word/document.xml",
|
|
148
158
|
relationships: docScope.rels
|
|
@@ -199,6 +209,78 @@ function emitNotes(notes, cfg, state, losses, docScope, extraParts, extraPartRel
|
|
|
199
209
|
targetMode: "Internal"
|
|
200
210
|
});
|
|
201
211
|
}
|
|
212
|
+
function paraIdFor(commentId) {
|
|
213
|
+
let h = 2166136261;
|
|
214
|
+
for (let i = 0; i < commentId.length; i++) {
|
|
215
|
+
h ^= commentId.charCodeAt(i);
|
|
216
|
+
h = Math.imul(h, 16777619);
|
|
217
|
+
}
|
|
218
|
+
return (h >>> 0 || 1).toString(16).toUpperCase().padStart(8, "0");
|
|
219
|
+
}
|
|
220
|
+
var PARA_OPEN = "<w:p>";
|
|
221
|
+
function injectParaId(paragraphXmlString, paraId) {
|
|
222
|
+
return paragraphXmlString.startsWith(PARA_OPEN) ? `<w:p w14:paraId="${paraId}">` + paragraphXmlString.slice(5) : paragraphXmlString;
|
|
223
|
+
}
|
|
224
|
+
function emitComments(comments, state, losses, docScope, extraParts, extraPartRels) {
|
|
225
|
+
const paraIds = /* @__PURE__ */ new Map();
|
|
226
|
+
if (!comments || comments.size === 0) return paraIds;
|
|
227
|
+
const scope = newScope();
|
|
228
|
+
const commentXmls = [];
|
|
229
|
+
for (const [id, c] of comments) {
|
|
230
|
+
let lastParaIdx = -1;
|
|
231
|
+
for (let i = 0; i < c.content.length; i++) if (c.content[i].kind === "paragraph") lastParaIdx = i;
|
|
232
|
+
const paraId = lastParaIdx >= 0 ? paraIdFor(id) : void 0;
|
|
233
|
+
const inner = [];
|
|
234
|
+
for (let i = 0; i < c.content.length; i++) if (i === lastParaIdx && paraId !== void 0) {
|
|
235
|
+
const buf = [];
|
|
236
|
+
emitBlock(buf, c.content[i], losses, state, scope);
|
|
237
|
+
inner.push(injectParaId(buf.join(""), paraId));
|
|
238
|
+
} else emitBlock(inner, c.content[i], losses, state, scope);
|
|
239
|
+
if (paraId !== void 0) paraIds.set(id, paraId);
|
|
240
|
+
const attrs = `w:id="${escapeAttr(id)}"` + (c.author !== void 0 ? ` w:author="${escapeAttr(c.author)}"` : "") + (c.date !== void 0 ? ` w:date="${escapeAttr(c.date)}"` : "") + (c.initials !== void 0 ? ` w:initials="${escapeAttr(c.initials)}"` : "");
|
|
241
|
+
commentXmls.push(`<w:comment ${attrs}>${inner.join("") || "<w:p/>"}</w:comment>`);
|
|
242
|
+
}
|
|
243
|
+
const xml = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:comments xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w14="${W14_NS}">` + commentXmls.join("") + "</w:comments>";
|
|
244
|
+
extraParts.push({
|
|
245
|
+
path: COMMENTS_PART,
|
|
246
|
+
data: encoder.encode(xml),
|
|
247
|
+
contentType: COMMENTS_CONTENT_TYPE
|
|
248
|
+
});
|
|
249
|
+
if (scope.rels.length > 0) extraPartRels.push({
|
|
250
|
+
sourcePart: COMMENTS_PART,
|
|
251
|
+
relationships: scope.rels
|
|
252
|
+
});
|
|
253
|
+
docScope.rels.push({
|
|
254
|
+
id: `rId${++docScope.relSeq}`,
|
|
255
|
+
type: REL_COMMENTS,
|
|
256
|
+
target: "comments.xml",
|
|
257
|
+
targetMode: "Internal"
|
|
258
|
+
});
|
|
259
|
+
return paraIds;
|
|
260
|
+
}
|
|
261
|
+
function emitCommentsExtended(comments, paraIds, docScope, extraParts) {
|
|
262
|
+
if (!comments || paraIds.size === 0) return;
|
|
263
|
+
if (![...comments].some(([id, c]) => paraIds.has(id) && (c.parentId !== void 0 && paraIds.has(c.parentId) || c.done === true))) return;
|
|
264
|
+
const rows = [];
|
|
265
|
+
for (const [id, c] of comments) {
|
|
266
|
+
const pid = paraIds.get(id);
|
|
267
|
+
if (pid === void 0) continue;
|
|
268
|
+
const parentPid = c.parentId !== void 0 ? paraIds.get(c.parentId) : void 0;
|
|
269
|
+
rows.push(`<w15:commentEx w15:paraId="${pid}"` + (parentPid !== void 0 ? ` w15:paraIdParent="${parentPid}"` : "") + ` w15:done="${c.done === true ? "1" : "0"}"/>`);
|
|
270
|
+
}
|
|
271
|
+
const xml = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w15:commentsEx xmlns:w15="${W15_NS}">` + rows.join("") + "</w15:commentsEx>";
|
|
272
|
+
extraParts.push({
|
|
273
|
+
path: COMMENTS_EXTENDED_PART,
|
|
274
|
+
data: encoder.encode(xml),
|
|
275
|
+
contentType: COMMENTS_EXTENDED_CONTENT_TYPE
|
|
276
|
+
});
|
|
277
|
+
docScope.rels.push({
|
|
278
|
+
id: `rId${++docScope.relSeq}`,
|
|
279
|
+
type: REL_COMMENTS_EXTENDED,
|
|
280
|
+
target: "commentsExtended.xml",
|
|
281
|
+
targetMode: "Internal"
|
|
282
|
+
});
|
|
283
|
+
}
|
|
202
284
|
function emitHeadersFooters(flow, section, state, docScope, extraParts, extraPartRels, hfCache, losses) {
|
|
203
285
|
const refs = {
|
|
204
286
|
headers: [],
|
|
@@ -494,7 +576,7 @@ function cellMarginsXml(tag, margins) {
|
|
|
494
576
|
return inner ? `<${tag}>${inner}</${tag}>` : "";
|
|
495
577
|
}
|
|
496
578
|
function paragraphXml(p, state, scope, closingSectPr) {
|
|
497
|
-
const visible = p.runs.filter((run) => !run.listMarker && (run.math !== void 0 || run.text !== "" || run.inlineImage !== void 0 || run.pageBreak || run.footnoteRef !== void 0 || run.endnoteRef !== void 0 || run.noteNumber === true || run.href !== void 0 || run.anchor !== void 0));
|
|
579
|
+
const visible = p.runs.filter((run) => !run.listMarker && (run.math !== void 0 || run.text !== "" || run.inlineImage !== void 0 || run.pageBreak || run.footnoteRef !== void 0 || run.endnoteRef !== void 0 || run.noteNumber === true || run.commentRef !== void 0 || run.href !== void 0 || run.anchor !== void 0));
|
|
498
580
|
const inner = [];
|
|
499
581
|
let i = 0;
|
|
500
582
|
while (i < visible.length) {
|
|
@@ -543,6 +625,7 @@ function runXml(run, state, scope) {
|
|
|
543
625
|
if (run.footnoteRef !== void 0) return `<w:r>${rPr}<w:footnoteReference w:id="${escapeAttr(run.footnoteRef)}"/></w:r>`;
|
|
544
626
|
if (run.endnoteRef !== void 0) return `<w:r>${rPr}<w:endnoteReference w:id="${escapeAttr(run.endnoteRef)}"/></w:r>`;
|
|
545
627
|
if (run.noteNumber) return `<w:r>${rPr}<${scope.noteKind === "endnote" ? "w:endnoteRef" : "w:footnoteRef"}/></w:r>`;
|
|
628
|
+
if (run.commentRef !== void 0) return `<w:r>${rPr}<w:commentReference w:id="${escapeAttr(run.commentRef)}"/></w:r>`;
|
|
546
629
|
const brk = run.pageBreak ? "<w:br w:type=\"page\"/>" : "";
|
|
547
630
|
if (run.text === "") return brk ? `<w:r>${rPr}${brk}</w:r>` : "";
|
|
548
631
|
return `<w:r>${rPr}<w:t xml:space="preserve">${escapeXml(run.text)}</w:t>${brk}</w:r>`;
|
|
@@ -31,6 +31,13 @@ export type DrawingContent = {
|
|
|
31
31
|
readonly height: Pt;
|
|
32
32
|
readonly altText?: string;
|
|
33
33
|
readonly float?: FloatAnchor;
|
|
34
|
+
} | {
|
|
35
|
+
readonly kind: 'diagram';
|
|
36
|
+
readonly dmRelId: string;
|
|
37
|
+
readonly widthEmu: number;
|
|
38
|
+
readonly heightEmu: number;
|
|
39
|
+
readonly altText?: string;
|
|
40
|
+
readonly float?: FloatAnchor;
|
|
34
41
|
};
|
|
35
42
|
export declare function resolveMc(altContent: PoNode): ReadonlyArray<PoNode>;
|
|
36
43
|
export declare function expandMcChildren(children: ReadonlyArray<PoNode>): Array<PoNode>;
|
|
@@ -4,6 +4,7 @@ import { resolveColorNode } from "../core/drawingml/colors.js";
|
|
|
4
4
|
//#region src/word/drawing-parser.ts
|
|
5
5
|
var WPS_URI = "http://schemas.microsoft.com/office/word/2010/wordprocessingShape";
|
|
6
6
|
var CHART_URI = "http://schemas.openxmlformats.org/drawingml/2006/chart";
|
|
7
|
+
var DIAGRAM_URI = "http://schemas.openxmlformats.org/drawingml/2006/diagram";
|
|
7
8
|
var UNDERSTOOD_NS = new Set(["wps"]);
|
|
8
9
|
function parseFloatAnchor(anchor) {
|
|
9
10
|
if (!poIs(anchor, "wp:anchor")) return void 0;
|
|
@@ -104,6 +105,18 @@ function parseDrawing(drawing, resolveColor, parseBody) {
|
|
|
104
105
|
};
|
|
105
106
|
return null;
|
|
106
107
|
}
|
|
108
|
+
if (graphicData && uri === DIAGRAM_URI) {
|
|
109
|
+
const relIds = poFindDescendant(graphicData, "dgm:relIds");
|
|
110
|
+
const dmRelId = relIds ? poAttr(relIds, "dm") : void 0;
|
|
111
|
+
if (dmRelId && extentCx !== void 0 && extentCy !== void 0) return {
|
|
112
|
+
kind: "diagram",
|
|
113
|
+
dmRelId,
|
|
114
|
+
widthEmu: extentCx,
|
|
115
|
+
heightEmu: extentCy,
|
|
116
|
+
...alt
|
|
117
|
+
};
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
107
120
|
const blip = poFindDescendant(anchor, "a:blip");
|
|
108
121
|
const rId = blip ? poAttr(blip, "embed") : void 0;
|
|
109
122
|
if (extentCx !== void 0 && extentCy !== void 0 && rId) return {
|
package/dist/esm/word/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export type { HyperlinkResolver, ImageResolver, ParseContext } from './document-parser.js';
|
|
2
|
+
export type { CommentExtension } from './document-parser.js';
|
|
2
3
|
export { extractParagraphs } from './text-extractor.js';
|
|
3
|
-
export { parseDocument, parseBodyElements, parseSection, parseSections, parseHeaderFooter, parseNotes, EMPTY_SECTION, } from './document-parser.js';
|
|
4
|
+
export { parseDocument, parseBodyElements, parseSection, parseSections, parseHeaderFooter, parseNotes, parseComments, parseCommentThreads, parseCommentsExtended, parsePeople, applyAuthorIds, EMPTY_SECTION, } from './document-parser.js';
|
|
4
5
|
export { parseRunProperties } from './run-properties.js';
|
|
5
6
|
export { parseParagraphProperties } from './paragraph-properties.js';
|
|
6
7
|
export { parseStyles } from './styles-parser.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "reamkit",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.0",
|
|
4
4
|
"description": "Ream — convert DOCX, XLSX, PPTX and PDF to PDF, SVG, HTML, DOCX and XLSX, built from scratch on the ECMA-376 and ISO 32000 specifications. Parse once, convert anywhere.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Alex Krassavin <info@reamkit.dev>",
|